$(document).ready( function(){
	PhotoBrowser.init();
});

var PhotoBrowser = function() {
	
	//list of all photobrowsers on the page
	var browsers = null;
	
	function init() {

		browsers = new Array();

		//support for multiple photobrowsers on 1 page
		$('div.photobrowser').each(setupPhotoBrowser);
		
		for( var i=0; i < browsers.length; i++){
			var browser = browsers[i];
			
			PhotoApiAccess.loadPhotosForBrowser( browser, function(){
				activateBrowser(browser);
			});
		}
	}

	/*
	 * parse the data needed and store everything in an object
	 */
	function setupPhotoBrowser(id, o) {
		
		var browser = new Object();
		browser.id = id;
		browser.target = $(o);

		browser.url = browser.target.find('a.source').attr('href');// Link to the album or user page
		browser.rotationTime = browser.target.find('input[name=rotationTime]').val();
		browser.title = browser.target.find('input[name=title]').val();
		browsers.push(browser);
	}


	function activateBrowser(browser) {
		
		browser.target.html("ID: " + browser.id);
		
		var params = "?id="+browser.id+"&rotationTime="+browser.rotationTime;
		
		var html = new Array();
		html.push('	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="100%" height="100%" id="photobrowser" align="middle">');
		html.push('	<param name="allowScriptAccess" value="sameDomain" />');
		html.push(' <param name="allowFullScreen" value="false" />');
		html.push(' <param name="movie" value="/flash/photobrowser.swf'+params+'" /><param name="quality" value="high" /><param name="bgcolor" value="#f3f3f3" />	<embed src="/flash/photobrowser.swf'+params+'" quality="high" bgcolor="#f3f3f3" width="100%" height="100%" name="photobrowser" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
		html.push('</object>');
		browser.target.html(html.join(''));
	}

	function getPhotos(id) {
		for(var i = 0; i < browsers.length; i++) {
			if(browsers[i].id == id) {
				return browsers[i].photos;
			}
		}
		return null;
	}
	
	/* Get source information */
	function getSource(id) {
		for(var i = 0; i < browsers.length; i++) {
			if(browsers[i].id == id) {
				var o = new Object();
				o.title = browsers[i].title;
				o.icon = '/img/icons/flickr.png';
				return o;
			}
		}
		return null;
	}
	
	function openSource(id) {
		for(var i = 0; i < browsers.length; i++) {
			if(browsers[i].id == id) {
				window.open(browsers[i].url, "_blank");
			}
		}
	}
	
	return { 
		init: init,
		getPhotos: getPhotos,
		getSource: getSource,
		openSource: openSource
	}
}();




var PhotoApiAccess = function(){
	
	var MAX_PHOTOS = 25;
	var PHOTO_SIZE_SQUARE 	= "_s";
	var PHOTO_SIZE_THUMB 	= "_t";
	var PHOTO_SIZE_MEDIUM 	= "";
	var PHOTO_SIZE_LARGE 	= "_o";

	var SCRIPT_SETS = "flickr.photosets.getList";
	var SCRIPT_ID_BY_USERNAME = "flickr.people.findByUsername";
	var SCRIPT_SETPHOTOS = "flickr.photosets.getPhotos";
	var SCRIPT_SEARCH = "flickr.photos.search";
	
	var flickr = {
		apiKey : '38941e349a2e5ced6cba2cd6ff15deba',
		apiCall : 'flickr.photosets.getPhotos'
	}
	
	var currentBrowser = null;
	var onParseComplete = function(){};
	
	function loadPhotosForBrowser( browser, callback ){
		
		currentBrowser = browser;
		setBrowserType();
		
		if ( typeof callback == 'function' ){
			// Set the callback function
			onParseComplete = callback;
		}
		
		$.getJSON( getUrl() , '' , onLoadPhotos);
	}

	function onLoadPhotos( resp ){
		
		switch( currentBrowser.type ){
		
			case 'flickr':
				parseFlickrResponse(resp);
				break;

			case 'picasa':
				parsePicasaResponse(resp);
				break;
				
			default:
				return false;
		}
		
		// Run the callback passed to the loadPhotoBrowser func
		onParseComplete();
	}
	
	function parsePicasaResponse( resp ){

		if( !resp.feed.entry.length){
			return false;
		}

		currentBrowser.photos = new Array();
			
		for ( var j=0; j< resp.feed.entry.length; j++ ){
			
			var entry = resp.feed.entry[j];
			
			currentBrowser.photos.push({
				url			: entry.media$group.media$thumbnail[0].url,
				tags		: '',
				isPrimary	: '',
				id			: ''
			});
		}	
	}
	
	function parseFlickrResponse(o){
		
		if(!o.photoset.photo.length > 0) {
			return false;
		}
			
		currentBrowser.total = o.photoset.total;
		currentBrowser.page = o.photoset.page;
		currentBrowser.photos = new Array();

		for(var j = 0; j < o.photoset.photo.length; j++) {
			var p = new Object();
			p.url = fetchImageLocation(o.photoset.photo[j], PHOTO_SIZE_MEDIUM);
			p.tags = o.photoset.photo[j].tags;
			p.isPrimary = o.photoset.photo[j].isprimary;
			p.id = o.photoset.photo[j].id;
			currentBrowser.photos.push(p);
		}
	}
	
	function getUrl(){
		
		switch( currentBrowser.type ){
		
			case 'flickr':		
				return "http://api.flickr.com/services/rest/?method="+flickr.apiCall+"&api_key="+flickr.apiKey+params+"&format=json&photoset_id=" + currentBrowser.setId + "&extras=tags&per_page="+MAX_PHOTOS+ "&jsoncallback=?";		
			
			case 'picasa':		
				var url =  'http://picasaweb.google.com/data/feed/api/user/' + currentBrowser.userId;
				if (currentBrowser.setId){
					url += '/album/' + currentBrowser.setId ; 	
				}
				url += '?kind=photo&alt=json&access=public&thumbsize=320&max-results=' + MAX_PHOTOS + '&callback=?'; 
				return url;
			default:			
				return '';
		}
	}
	
	function fetchImageLocation(photo, size) {
		return "http://farm"+photo.farm+".static.flickr.com/"+photo.server+"/"+photo.id+"_"+photo.secret+size+".jpg";
	}
	
	function setBrowserType(  ){

		// Check and set which type we're dealing with
		if( currentBrowser.url.indexOf('picasaweb.google') ){
			currentBrowser.type = 'picasa';
			
			// Set user and set/album properties
			var segments = currentBrowser.url.replace( 'http://picasaweb.google.com/', '').split('/');
			currentBrowser.userId = segments[0];
			currentBrowser.setId = segments[1] || '';
			
			
		}else if( currentBrowser.url.indexOf('flickr') ){
			currentBrowser.type = 'flickr';
		}
	}
	
	/* Reveal our public functions */
	return {
		loadPhotosForBrowser: loadPhotosForBrowser 
	}
	
}();


