/**
 * Picasa Webalbum Integration Library
 * This library was inspired and based on pwa by Dieter Raber (http://www.gnu.org/copyleft/lesser.html)
 * @name pwi-0.2.js
 * @author Jeroen Diderik - http://www.multiprof.nl
 * @version 0.4
 * @date October 21, 2008
 * @copyright (c) 2008 Jeroen Diderik(www.multiprof.nl)
 * @license Creative Commons Attribution-Share Alike 3.0 Netherlands License - http://creativecommons.org/licenses/by-sa/3.0/nl/
 * @example Visit http://www.multiprof.nl/ for more informations about this library
 */

/**Zusaetzliche Anpassungen:
in Lightbox Zeile 309: _disable_keyboard_navigation(); (Bug bei Navigation mit keyboard)
JSON Querys IE6 Bug: if(jQuery.browser.msie && parseInt(jQuery.browser.version)==6) window.setTimeout("$.getJSON('"+url+"', 'callback=?', album);", 10);
 */
 
//Global user variables to set (CHANGE TO WHAT YOU WANT IT TO BE)
var pwi_username = "nico.fueller";
var incUnlisted=true;
var pwi_photosize = 800; //return maximum size picture (see for supported format:  http://code.google.com/apis/picasaweb/reference.html#Parameters)
var pwi_thumbsize = 144; //size thumb /cropped(see for supported format:  http://code.google.com/apis/picasaweb/reference.html#Parameters)
var pwi_albumcols = 3; // distribute thumbs on main page over x collums
var pwi_cols = 4; // distribute thumbs on albumphotos page over x collums
var pwi_maxresults = 12; //maximum of pictures on albumphotos page
var pwi_maxalbums = 150; //maximum of pictures on albumphotos main page
var pwi_container_div = "#foto_gallery";

// NEW IN VERSION 0.4 !!!
var pwi_album_only = ""; //setup without a specific alnum, choose an album and take the number from the url between "#" and the last "/1"


//obsolete, untill this will be implemented
var pwi_show_albumtitles = true;
var pwi_show_phototitles = true;


// ****  DONT CHANGE BELOW UNLESS YOU KNOW WHAT YOU ARE DOING ****
//preset globals
var pwi_currAlbum = "";
var pwi_currAlbumTitle = "";
var pwi_currPhoto = "";
var pwi_page = "";
var pwi_si = 1;
var pwi_storage_albums;
var pwi_storage_photos;
var pwi_storage_photo;
var pwi_history = "";
var initAuth=false;

// various functions
//get querytring (for later use to make deeplinks)
function readGet() {
	var _GET = new Array();
	var uriStr = window.location.href.replace(/&amp;/g, '&');
	var paraArr,
	paraSplit;
	if (uriStr.indexOf('?') > -1) {
		var uriArr = uriStr.split('?');
		var paraStr = uriArr[1];
	} else {
		return _GET;
	}
	if (paraStr.indexOf('&') > -1) {
		paraArr = paraStr.split('&');
	} else {
		paraArr = new Array(paraStr);
	}
	for (var i = 0; i < paraArr.length; i++) {
		paraArr[i] = paraArr[i].indexOf('=') > -1 ? paraArr[i] : paraArr[i] + '=';
		paraSplit = paraArr[i].split('=');
		_GET[paraSplit[0]] = decodeURI(paraSplit[1].replace(/\+/g, ' '));
	}
	return _GET;
};
var _GET = readGet();

//fast string concat function ( var.push(x), var.toString() )
function StringCat() {
	var sp;
	var ep;
	var l = 0;
	this.push = function(what) {
		if (typeof(sp) == 'undefined') {
			ep = new Array();
			sp = ep;
		} else {
			var oep = ep;
			ep = new Array();
			oep[1] = ep;
		}
		ep[0] = what; ++l;
	};
	this.toString = function() {
		if (l == 0) return;
		while (l > 1) {
			var ptr = sp;
			var nsp = new Array();
			var nep = nsp;
			var nl = 0;
			while (typeof(ptr) != 'undefined') {
				if (typeof(nep[0]) == 'undefined') {
					nep[0] = ptr[0]; ++nl;
				} else {
					if (typeof(ptr[0]) != 'undefined') nep[0] += ptr[0];
					nep[1] = new Array();
					nep = nep[1];
				};
				ptr = ptr[1];
			};
			sp = nsp;
			ep = nep;
			l = nl;
		};
		return sp[0];
	};
}

function formatDate(dt) {
	var months = new Array(12);
	months[0] = "Januar";
	months[1] = "Februar";
	months[2] = "März";
	months[3] = "April";
	months[4] = "Mai";
	months[5] = "Juni";
	months[6] = "Juli";
	months[7] = "August";
	months[8] = "September";
	months[9] = "Oktober";
	months[10] = "November";
	months[11] = "Dezember";
	var today = new Date(Number(dt));
	var year = today.getYear();
	if (year < 1000) {
		year += 1900;
	};
	//return (months[(today.getMonth())] + " " + today.getDate() + ", " + year);
	return (months[(today.getMonth())] + " " + year);
}

function formatDateTime(dt) {
	var today = new Date(Number(dt));
	var year = today.getUTCFullYear();
	if (year < 1000) {
		year += 1900
	};
	return (today.getUTCDate() + "." + (today.getUTCMonth() + 1) + "." + year + " " + today.getUTCHours() + ":" + (today.getUTCMinutes() < 10 ? "0" + today.getUTCMinutes() : today.getUTCMinutes()));
}

var photoids = new Array();

function albums(j) { //returns the list of all albums for the user
	var scAlbums = new StringCat();	
	scAlbums.push("<div id='albums_overview'><div class='mainheader'><H1>Foto-Alben</H1></div>");
	scAlbums.push("<div class='maincontent'>");
	scAlbums.push("<table><tr>");
	
	if(!incUnlisted){
		//From JSON Feed
		for (var i = 0; i < j.feed.entry.length; i++) {
			var id_base = j.feed.entry[i].gphoto$id.$t;
			var album_date = formatDate(j.feed.entry[i].gphoto$timestamp.$t);		
			
			scAlbums.push("<td style='vertical-align: middle; text-align:center;'><a class='standard' href='javascript:void(0)' onclick='javascript:$.historyLoad(\"" + id_base + "/1\")'><img src='" + j.feed.entry[i].media$group.media$thumbnail[0].url + "?imgmax=" + pwi_thumbsize + "&crop=1' /></a>");
			scAlbums.push("<br><a class='standard' href='javascript:void(0)' onclick='javascript:$.historyLoad(\"" + id_base + "/1\")'>" + j.feed.entry[i].title.$t + "</a><br/>" + album_date + "&nbsp;&nbsp;&nbsp;&nbsp;" + j.feed.entry[i].gphoto$numphotos.$t + " photos</td>");
			if (i % pwi_albumcols == (pwi_albumcols - 1)) {
				scAlbums.push("</tr><tr><td colspan='" + pwi_albumcols + "'><hr/></td></tr><tr>");
			}
		}
	}else{
		//Unlisted
		var albumNum=0;
		for (var i = 0; i < _user.albums.length; i++) {
			var id_base = _user.albums[i].id;
			var myDate= _user.albums[i].date.split(",");
			var myTimestamp=new Date(parseInt(myDate[2]),parseInt(myDate[1])-1,parseInt(myDate[0]))
			var album_date = formatDate(myTimestamp);
			var thumbsrc=_user.albums[i].src;
			var albumTitle=_user.albums[i].title;
			var numPhotos=_user.albums[i].count;
			if(albumTitle!="Profile Photos"){
				scAlbums.push("<td style='vertical-align: middle; text-align:center;'><a class='standard' href='javascript:void(0)' onclick='javascript:$.historyLoad(\"" + id_base + "/1\")'><img src='" + thumbsrc + "?imgmax=" + pwi_thumbsize + "&crop=1' /></a>");
				scAlbums.push("<br><a class='standard' href='javascript:void(0)' onclick='javascript:$.historyLoad(\"" + id_base + "/1\")'>" + albumTitle + "</a><br/>" + album_date + "&nbsp;&nbsp;&nbsp;&nbsp;" + numPhotos + " photos</td>");
				if (albumNum % pwi_albumcols == (pwi_albumcols - 1)) {
					scAlbums.push("</tr><tr><td colspan='" + pwi_albumcols + "'><hr/></td></tr><tr>");
				}
				albumNum++;
			}
		}
	}
	
	scAlbums.push("</tr></table>");
	scAlbums.push("</div>");
	pwi_storage_albums = scAlbums.toString();
	
	if(pwi_album_only.length > 0){
			getAlbum(pwi_album_only,1);
	}else{
		show(false, pwi_storage_albums);
	}	
}

function album(j) { //returns all photos in a specific album
	var scPhotos = new StringCat();
	var scPhotosBefore = new StringCat();
	var scPhotosAfter = new StringCat();
	
	//get the number of photos in the album
	var np = j.feed.openSearch$totalResults.$t;
	var loc = j.feed.gphoto$location.$t;
	var desc = j.feed.subtitle.$t;
	var album_date = formatDate(j.feed.gphoto$timestamp.$t);
	var item_plural = "s";
	
	if (np == "1") {
		item_plural = "";
	}
	var len = j.feed.entry.length;
	pwi_currAlbumTitle = j.feed.title.$t;
	pwi_si = ((pwi_page - 1) * pwi_maxresults);
	
	scPhotos.push("<div id='single_album'>");
	if(!pwi_album_only.length>0){		
		scPhotos.push("<div class='mainheader'><a class='standard' href='javascript:void(0)' onclick='$.historyLoad(\"\");'>Foto-Alben</a> &gt; <b>" + j.feed.title.$t + "</b></div>");		
	};	
	scPhotos.push("<div class='maincontent'>");
	scPhotos.push("<p>" + desc + "<br />");
	scPhotos.push("<i>" + np + " photo" + item_plural + ", " + album_date + ((typeof j.feed.gphoto$location.$t!="undefined")?", " +loc:"") + "</i></p>");		
	scPhotos.push("<table>");

	 //create paging navigation
	pageCount = (np / pwi_maxresults);
	var ppage = "zur&uuml;ck | ",
	npage = "| vorwärts";	
	
	if (pwi_page > 1) {
		ppage = "<a href='javascript:void(0)' onclick='$.historyLoad(\"" + pwi_currAlbum + "/" + (parseInt(pwi_page) - 1) + "\")'>zur&uuml;ck</a> | "
	};
	if (pwi_page < pageCount) {
		npage = "| <a href='javascript:void(0)' onclick='$.historyLoad(\"" + pwi_currAlbum + "/" + (parseInt(pwi_page) + 1) + "\")'>vorwärts</a>"
	};
	
	var navRow = new StringCat();
	navRow.push("<tr><td colspan='" + (pwi_cols-1) + "'>" + ppage);// + "Page ");
	for (var i = 1; i < pageCount + 1; i++) {
		if (i == pwi_page) {
			navRow.push("<b>[" + (i) + "]</b> ");
		} else {
			navRow.push("<a href='javascript:void(0)' onclick='$.historyLoad(\"" + pwi_currAlbum + "/" + i + "\")'>" + (i) + "</a> ");
		};
	};
	navRow.push(npage);
	//navRow.push("</td><td style='text-align:right;'><a href='http://picasaweb.google.com/" + pwi_username + "/" + j.feed.gphoto$name.$t + "/photo#s" + j.feed.entry[0].gphoto$id.$t + "' rel='gb_page_fs[]' target='_new'>Dia-Show starten</a>");
	navRow.push("</td><td style='text-align:right;'><a href='"+j.feed.link[2].href+"' rel='gb_page_fs[]' target='_new'>Dia-Show starten</a>");
	navRow.push("</td></tr>");	
	scPhotos.push(navRow.toString());
	
	for (var i = 0; i < len; i++) {
		var img_base = j.feed.entry[i].content.src;		
		var id_base = j.feed.entry[i].gphoto$id.$t;
		var desc = j.feed.entry[i].summary.$t;		
		var photoDate = j.feed.entry[i].exif$tags.exif$time ? formatDateTime(j.feed.entry[i].exif$tags.exif$time.$t) : j.feed.entry[i].published.$t;
		desc = ((typeof desc!="undefined")?photoDate + " - " + desc:photoDate);
		
		if(i<pwi_si){
			scPhotosBefore.push("<a href='" + img_base + ((img_base.indexOf("?")>0)? "&":"?") + "imgmax=" + pwi_photosize + "&crop=0' class='lightbox' title='" + desc + "' ></a>");								
		}
		if(i>=pwi_si && i<pwi_si+pwi_maxresults){			
			scPhotos.push("<td style='vertical-align: middle; text-align:center;'><a href='" + img_base + ((img_base.indexOf("?")>0)? "&":"?") + "imgmax=" + pwi_photosize + "&crop=0' class='lightbox' title='" + desc + "'><img src='" + img_base + ((img_base.indexOf("?")>0)? "&":"?") + "imgmax=" + pwi_thumbsize + "&crop=1' style='margin-left:2px;margin-right:2px;' /></a>");
			scPhotos.push("<div style='font-size:9px;'>" + photoDate.substring(0,16) + "</div></td>");
			if (i % pwi_cols == (pwi_cols - 1)) {
				scPhotos.push("</tr><tr><td colspan=" + pwi_cols + "><hr size='1'/></td></tr><tr>");
			}
		}
		
		if(i>=pwi_si+pwi_maxresults){
			scPhotosAfter.push("<a href='" + img_base + ((img_base.indexOf("?")>0)? "&":"?") + "imgmax=" + pwi_photosize + "&crop=0' class='lightbox' title='" + desc + "'></a>");								
		}
	}
	scPhotos.push("</tr>"+navRow+"</table></div></div>");	
	pwi_storage_photos = "<div id='lightbox-workaround_before' style='display:none;'>"+scPhotosBefore.toString()+"</div>" + scPhotos.toString() + "<div id='lightbox-workaround_after' style='display:none;'>"+scPhotosAfter.toString()+"</div>";		
	show(false, pwi_storage_photos);	
}

function getAlbums() {
	if (pwi_storage_albums) {
		show(false, pwi_storage_albums);
	} else {
		show(true, '');
		var url = 'http://picasaweb.google.com/data/feed/api/user/' + pwi_username + '?category=album&max-results=' + pwi_maxalbums + '&alt=json';
		if(jQuery.browser.msie && parseInt(jQuery.browser.version)==6){
			//IE6 workaround: Drecks Browser			
			window.setTimeout("$.getJSON('"+url+"', 'callback=?', albums);", 10);			
		}else{
			//Alle normalen Browser
			$.getJSON(url, 'callback=?', albums);
		}		
	}
}

function getAlbum(albumid, newPage) {
	//albumParams=albumid.split("_");
	//albumid=albumParams[0];
	var albumAuthkey=getAlbumAuthkey(albumid);
		
	if (albumid != pwi_currAlbum || pwi_page != newPage) {
		pwi_page = newPage;
		pwi_currAlbum = albumid;
		pwi_si = ((pwi_page - 1) * pwi_maxresults) + 1;
		var url = 'http://picasaweb.google.com/data/feed/api/user/' + pwi_username + '/albumid/' + albumid + '?category=photo&alt=json'+((albumAuthkey)?'&authkey='+albumAuthkey:'');//max-results=' + pwi_maxresults + '&start-index=' + pwi_si + '&alt=json';		
		show(true, '');
		
		if(jQuery.browser.msie && parseInt(jQuery.browser.version)==6){
			//IE6 workaround: Drecks Browser
			window.setTimeout("$.getJSON('"+url+"', 'callback=?', album);", 10);
		}else{
			//Alle normalen Browser
			$.getJSON(url, 'callback=?', album);
		}
	} else {
		show(false, pwi_storage_photos);
	}	
}

function fromHistory(hash) {
	if (incUnlisted && !initAuth){
		//Album Informationen nachladen
		$.ajax({
			url: "./content/gallery/getPicasaAlbums.php",
			async: false,
			dataType: "script"
		});
		setAlbumAuthkeys();
	}
	if (hash) {
		var a,p;
		if (hash.indexOf("/") > 0) {
			a = hash.split("/")[0];
			p = hash.split("/")[1];			
			getAlbum(a, p);
		}
	} else {
		getAlbums();
	}
}

function show(loading, data) {	
	if (loading) {
		$(pwi_container_div).fadeOut('slow');
		$("#foto_gallery").block({
			message:  '<img src=\"images/lightbox-ico-loading.gif\" /> <h1>Loading</h1>'
		});
		
	} else {
		$("#foto_gallery").unblock();
		$(pwi_container_div).html(data).fadeIn('fast',function(){
			$('a.lightbox').lightBox();
		});
	}
}

$(document).ready(function() {
	if(pwi_username == "your_picasa_username"){
		alert('Open the pwi-0.2.js and change content \nof the variable pwi_username in the top of the file\nto your Picasa Webalbum name');
	}else{
		if ($("#foto_gallery").length > 0 ){
			$.extend($.blockUI.defaults.overlayCSS, {
				backgroundColor: '#000'
			});
			$.ajaxSetup({
				cache: true
			});
				$.historyInit(fromHistory);
		}
	}
});

function setAlbumAuthkeys(){
	for(var i=0;i<_user.albums.length;i++){
		if(_user.albums[i].access=="private") _user.albums[i].authkey=_user.albums[i].url.substr(_user.albums[i].url.indexOf("authkey=")+8);
	}
	initAuth=true;
}

function getAlbumAuthkey(albumid){
	var authkey;
	for(var i=0;i<_user.albums.length;i++){
		if(_user.albums[i].id==albumid) authkey=_user.albums[i].authkey;
	}
	return (authkey)?authkey:false;
}

//$Update: May 10, 2007$
//$Update: July 31, 2007, Jeroen Diderik$
//$Update: September 23, 2007, Jeroen Diderik, Mootools conversion$
//$Update: November 19, 2007, Jeroen Diderik, PWI vars update$
//$Update: March 25, 2008, Jeroen Diderik, rewrite to replace MOOTools with  jQuery$
//$Update: April 05, 2008, Jeroen Diderik, rewrite for early release$
//$update: October 21, 2008, Jeroen Diderik, added ALBUM_ONLY option


/*
TOD0: photo details
function getPhoto(photoid){
	pwi_currPhoto = photoid;
	url = 'http://picasaweb.google.com/data/entry/api/user/'+pwi_username+'/albumid/'+pwi_currAlbum+'/photoid/'+photoid+'?alt=json';
	show(true,'');
	$.getJSON(url, 'callback=?',photo);
}
*/

