flickr.addMethod('search','photos',{dataSetPath:['photos','photo']});
flickr.addMethod('getRecent','photos',{dataSetPath:['photos','photo']});
flickr.addMethod('getList','photoSets',{dataSetPath:['photosets','photoset','photo']});
flickr.addMethod('getPhotos','photoSets',{dataSetPath:['photoset','photo']});
flickr.addMethod('getListUser','tags');
flickr.addMethod('getListUserPopular','tags',{dataSetPath:['who','tags','tag']});
flickr.addMethod('getInfo','photos',{dataSetPath:['photo']});
flickr.addMethod('getList',['photos','comments'],{dataSetPath:['comments','comment']});
flickr.addMethod('getInfo','people',{dataSetPath:['person']});
flickr.addMethod('findByUsername','people',{dataSetPath:['user']});
flickr.addMethod('findByEmail','people',{dataSetPath:['user']});
flickr.addMethod('getSizes','photos',{dataSetPath:['sizes','size']});


flickr.init = function(userId){
	userId = userId || flickr.appSettings.currentUser;
	flickr.appSettings.currentUser = userId;
	flickr.photos.search.defaultParams({user_id:userId,per_page:500,media:'photos'});
	flickr.photoSets.getPhotos.defaultParams({user_id:userId});
	flickr.photoSets.getList.defaultParams({user_id:userId}).send();
	flickr.tags.getListUserPopular.defaultParams({user_id:userId,count:100}).send();
	flickr.people.getInfo.defaultParams({user_id:userId}).send();
	
	if(!flickr.appSettings.queryString.photoset_id && !flickr.appSettings.queryString.tags){
		flickr.photos.search.send({per_page:50});
	}
};		
flickr.cookie = new OldStarHotel.CookieObject('widgits');
flickr.currentPhotoId = '';
flickr.appSettings = {
	showThumbs:function(){
		return $('#showThumbs')[0].checked;
	},
	queryString: $.queryStringToObject(),
	method:flickr.photoSets.getPhotos,
	widgits:{},
	widgitPositions: {
		l:[{i:'transportWidgit',v:true},{i:'setsWidgit',v:true},{i:'tagsWidgit',v:true}],
		r:[{i:'userWidgit',v:true},{i:'searchWidgit',v:false},{i:'setInfoWidgit',v:true},{i:'slideInfoWidgit',v:true},{i:'commentsWidgit',v:false}],
		b:[{i:'thumbsWidgit',v:true}],
		c:[{i:'options',v:false,p:{x:550,y:130}},{i:'aboutWidgit',v:false,p:{x:220,y:130}}]
	}
};
flickr.appSettings.currentUser=(!!flickr.appSettings.queryString || !!flickr.appSettings.queryString.user_id)?flickr.appSettings.queryString.user_id:null;
flickr.appSettings.loadState=function(o,options){
	var positions = arguments[0] || flickr.appSettings.widgitPositions;
	options = $.extend({
		widgitPositioned:function(){},
		allWidgitsPositioned:function(){}
	}, arguments[1]||{});

	$.each(positions,function(type,position){
		var parent;
		var css = {};
		switch(type){
			case 'l':
				parent = $('#leftColumn');
				
				break;
			case 'r':
				parent = $('#rightColumn');
				break;
			case 'b':
				parent = $('#bottomColumn');
				break;
			case 'c':
				parent = $('#body');
				break;		
		}
		for(var i = position.length-1;i>=0;i--){
			var widgit = $('#'+position[i].i);
			
			widgit.prependTo(parent).data('oshWidgit').visible(position[i].v,{triggerEvent:false});
			
			if (type == 'c') {
				widgit.css({
					position: 'absolute'
					,top: position[i].p.y,
					'left': position[i].p.x 
				})
			}
			options.widgitPositioned.call(widgit[0],position[i]);
		}
	});
	options.allWidgitsPositioned.call(positions);
	flickr.appSettings.saveState();
};
flickr.appSettings.saveState = function(){
	if (!$('#bottomColumn .widgit:visible').length) {
		$('bottomColumn').find('.dropTarget').css('width','100%')
	}
	else{
		var width = (100/($('#bottomColumn .widgit:visible').length))-1;
		$('#bottomColumn .widgit').css('width',width+'%');
		$('#bottomColumn').find('.dropTarget').css('width',(width/2) +'%')
	}
	
	if (!$('#leftColumn').find('.widgit:visible').length) {
		$('#leftColumn').addClass('empty');
		$('#content').addClass('leftEmpty');
	}
	else {
		$('#leftColumn').removeClass('empty');
		$('#leftColumn .widgit').css({'width':186,'height':'auto'});
		$('#content').removeClass('leftEmpty');
	}
	if (!$('#rightColumn').find('.widgit:visible').length) {
		$('#rightColumn').addClass('empty');
		$('#content').addClass('rightEmpty');
	}
	else {
		$('#rightColumn').removeClass('empty');
		$('#rightColumn .widgit').css({'width':186,'height':'auto'});
		$('#content').removeClass('rightEmpty')
	}
	flickr.appSettings.widgitPositions = {
		l:[],
		r:[],
		b:[],
		c:[]
	};
	flickr.appSettings.widgits.each(function(){
		var widgit = $(this);
		var state = widgit.data('oshWidgit').visible();
		var position;
		switch (widgit.parent()[0].id){
			case 'leftColumn':
				position = 'l';
				break;
			case 'rightColumn':
				position = 'r'
				break;
			case 'bottomColumn':
				position = 'b'
				break;
			case 'body':
				position = 'c';
				break;
			default:
				return;
		}
		var index = widgit.parent().find('.widgit').index(widgit);
		flickr.appSettings.widgitPositions[position].splice(index,0,{
			i:this.id,
			v:state,
			p:(position=='c')?{x:widgit.css('left'),y:widgit.css('top')}:{x:0,y:0}							
		})
	});
	flickr.cookie.setValue('widgitState',flickr.appSettings.widgitPositions);
};
flickr.notification = (function(){
	var el = $('<p></p>');
	var els = {};
	return{
		show:function(id,message,timeout){
			els[id] = els[id] || el.clone();
			els[id].text(message).prependTo('#status');
			if(timeout){
				window.setTimeout(function(){
					flickr.notification.hide(id)
				},timeout)
			}
		},
		hide:function(id){
			els[id].remove();//.fadeTo('fast',0,function(){els[id].remove();});
		}
	}
})();
flickr.loadingThumbs = (function(){
	var el = $('<p id="loadingThumbs">loading thumbnails...</p>');
	return{
		start:function(){
			el.prependTo('#thumbsWidgit .widgitContent').fadeTo('fast',1);
		},
		stop:function(){
			el.fadeTo('fast',0,function(){el.remove();});
		}
	}
})();

flickr.autoAdvance = (function(){
	_running = false;
	return {
		start: function(){
			if(_running) clearTimeout(flickr.autoAdvance.fn);
			_running = true;
			this.fn = setTimeout(function(){
				flickr.appSettings.method.dataSet.nextItem(true);
				flickr.loadPhoto(function(){
					if( _running) flickr.autoAdvance.start();
				});
			},5000)
			$('#play').addClass('selected');
			$('#stop').removeClass('selected');
		},
		stop:function(){
			if(_running) clearTimeout(flickr.autoAdvance.fn);
			_running = false;
			$('#stop').addClass('selected');
			$('#play').removeClass('selected');
		},
		state:function(){
			return _running;
		}	
	}
})();
flickr.loadPhoto = function(onload){
	onload = onload || function(){};
	var dataSet = flickr.appSettings.method.dataSet;					
	var index = dataSet.currentIndex();
	var item = dataSet.currentItem();					
	//var src = flickr.utilities.makePhotoURL(flickr.utilities.maximumSize(item), 'jpg', item);
	//var srcOriginal = !!item.originalformat?flickr.utilities.makePhotoURL('o',item.originalformat, item):false;
	
	flickr.photos.getSizes.send({photo_id:item.id},{
		onSuccess:function(data){
			var items = this.dataSet.items();
			var lastItemIndex = items.length-1;
			var srcOriginal = items[lastItemIndex].label == 'Original'?items[lastItemIndex].source:false;
			var src = !!srcOriginal?items[lastItemIndex-1].source:items[lastItemIndex].source;
			
			flickr.currentPhotoId = item.id;
			
			var srcFlickr = 'http://www.flickr.com/photos/'+flickr.appSettings.currentUser+'/'+item.id;
			
			flickr.photos.getInfo.settings.defaultValues.photo_id = item.id;
			flickr.photos.comments.getList.settings.defaultValues.photo_id = item.id;
			
			$('#thumbsList img').removeClass('selected');
			$('#thumbsList a[href*="'+item.id+'"] img').addClass('selected');
			$('#thumbsWidgit .widgitContent').scrollTo($('#thumbsWidgit .selected')[0] || 0,{
				duration:'fast'
			});
			$('#slideImageAnchor').attr('href',srcFlickr);
			var oldImg = $('#slideImageAnchor img').eq(0);
			if (oldImg.attr('src') == src)	return;		
			flickr.notification.show('photo','loading image...');
			oldImg.css({
				'top':oldImg.position().top,
				'left':oldImg.position().left
			}).css('position','absolute');
			$('#imageContainer').css('height',oldImg.height());
			var newImg = $('<img />')
				.css({
					'opacity':.01
				})
				.prependTo($('#slideImageAnchor'));
			
			newImg.one('load',function(){
				onload.call(this);
				
				$('#slideImageAnchor img').not($('#slideImageAnchor img').eq(0))
				.fadeTo('normal',0,function(){
					$(this).remove();
				});
				
				$('#slideImageAnchor img').fadeTo('normal',1,function(){
					
				});
				$('#imageContainer').animate({
					'height': $('#imageContainer img').height()
				});
				flickr.photos.getInfo.send();
				flickr.photos.comments.getList.send();
				(!srcOriginal)?$('#viewOriginal').addClass('hidden'):$('#viewOriginal').attr('href',srcOriginal).removeClass('hidden');	
				flickr.notification.hide('photo');
			});
			newImg.attr('src',src)		
		
		
		}
	});
	

};
flickr.loadThumbs = function(){
	var thumbs = $('#thumbsList').empty();
	var that = flickr.appSettings.method;
	thumbs.fadeTo('normal',0,function(){
		thumbs.empty();	
		flickr.loadingThumbs.start();
		var count = that.dataSet.count();
		var loaded = 0;
		
		$.each(that.dataSet.items(),function(i,item){
//			var href = flickr.utilities.makePhotoURL(flickr.utilities.maximumSize(item),'jpg',item);
			
			var href = '?photo_id:'+item.id;
			var src = flickr.utilities.makePhotoURL('s','jpg',item);
			var li = $('<li></li>').appendTo(thumbs);
			var a = $('<a href="'+href+'" title="'+item.title+'"></a>').appendTo(li);
			
			var img = $('<img />').css('opacity',1).one('load',function(){
				loaded ++;
				if(loaded == count) {
					thumbs.fadeTo('normal',1)
					flickr.loadingThumbs.stop();
					
				}
			}).appendTo(a);
			if(href.search(flickr.currentPhotoId)!=-1) img.addClass('selected');
			img.attr('src',src);
		});
	});	
	
};		
flickr.loadPhotos = function(method){
	var setDescription = $('#setDescription').length ? $('#setDescription').remove():$('<p id="setDescription"></p>');		
	var method;
	var lid = '#setList';
	var setTitle = '';
	var setCount = '';
	flickr.loadPhoto();
	switch(this.lastParams.method){
		case 'flickr.photos.search':
			if (!this.lastParams.tags) {
				setTitle = 'Most Recently Added';
				method=false;
			}
			else{
				method = flickr.tags.getListUserPopular;	
				setTitle = 'Tag: '+method.dataSet.currentItem()._content;
				setCount = method.dataSet.currentItem().count + ' photos';
				lid = '#tagsList';
			}


			break;
		case 'flickr.photoSets.getPhotos':
			method = flickr.photoSets.getList;
			setTitle = method.dataSet.currentItem().title._content;
			setCount = method.dataSet.currentItem().photos + ' photos';
			setDescription.html(method.dataSet.currentItem().description._content).appendTo($('#setInfo').eq(0));	
			break;
	}

	if($('#thumbsWidgit').data('oshWidgit').visible())flickr.loadThumbs();	
	$('#setTitle').text(setTitle);
	$('#setCount').text(setCount);
	flickr.notification.hide('photos');
	
	if(!method) return;
	var index = method.dataSet.currentIndex();
	$('.toc a').removeClass('selected');
	$(lid+' a').eq(index).addClass('selected');			
};
flickr.loadComments = function(){
	var commentsList = $('#commentsList').empty();	
	var items = flickr.photos.comments.getList.dataSet.items();
	if (items.photo_id) {
		commentsList.empty().append('<dd>No Comments</dd>');
		return;
	}
	$.each(items,function(i,item){
		commentsList.append('<dt><a href="?user_id='+item.author+'" class="user">'+item.authorname+':</a></dt><dd>'+item._content+'</dd>');
	});
	
};
flickr.loadDetails = function(){
	var details = flickr.photos.getInfo.dataSet.items();				
	$('#slideImageTitle').text(details.title._content||'no title');
	var date = Date.fromMySQL(details.dates.taken);
	var friendlyDate = date.getFullMonth()+ ' ' + date.getDate()+', '+ date.getFullYear();
	$('#slidePhotoDateTaken').text(friendlyDate);
	$('#slidePhotoDescription').text(details.description._content||'no description');
	$('#slidePhotoTags').empty();
	$('#slidePhotoCommentsDetails').empty();
	if(details.tags.tag.length == 0) $('#slidePhotoTags').append('No tags');
	$.each(details.tags.tag,function(i,tag){
		$('#slidePhotoTags').append('<a href="?tags='+tag._content+'&user_id='+flickr.appSettings.currentUser+'">'+tag._content+'</a> ');
	});
	var comments = details.comments._content; 
	if (parseInt(comments) > 0) {
		$('#slidePhotoComments').html('<a href="?photo_id=' + details.id + '" id="slidePhotoComments">' + comments + '</a>');
	}
	else {
		
		$('#slidePhotoComments').text(comments);
	}
};
flickr.getUserInfo = function(){
	var info = flickr.people.getInfo.dataSet.items();
	$('#userName').text(info.username._content);
	$('#userLocation').text(info.location._content||'not available');
	$('#userPhotoCount').text(info.photos.count._content);
	var iconUrl = info.iconfarm>0?'http://farm'+info.iconfarm+'.static.flickr.com/'+info.iconserver+'/buddyicons/'+info.nsid+'.jpg':'http://www.flickr.com/images/buddyicon.jpg';
	$('#currentUserIcon').attr('src',iconUrl).attr('alt',info.username._content);
};

flickr.photoSets.getPhotos.addListeners({
	'before': function(data){
		flickr.notification.show('photos', 'loading photos...')
	},
	'receive':function(data){
		var index = flickr.photoSets.getList.dataSet.findItem('id',data.photoset.id).index;
		flickr.photoSets.getList.dataSet.currentItem(index);
		flickr.appSettings.method = this;
	},
	'success':flickr.loadPhotos
}).defaultParams({extras:'date_taken, original_format, tags,o_dims,owner_name'});

flickr.people.findByUsername.addListeners({
	'success':function(){
		flickr.appSettings.queryString = false;
		flickr.init(this.dataSet.items().id);
		$('#searchLabel').text('');
		$('#userSearch').attr('value','');					
	},
	'failure':function(){
		$('#searchLabel').text('user not found');	
	}
});
flickr.people.findByEmail.addListeners({
	'success':function(){
		flickr.appSettings.queryString = false;
		flickr.init(this.dataSet.items().id);
		$('#searchLabel').text('enter a username');
		$('#userSearch').attr('value','');					
	},
	'failure':function(){
		$('#searchLabel').text('user not found');
	}
});
flickr.photos.search.addListeners({
	'before':function(){
		flickr.notification.show('photos','loading photos...');
	},
	'receive':function(){
		flickr.appSettings.method = this;
	},
	'success': flickr.loadPhotos
}).defaultParams({extras:'date_taken, original_format, tags,o_dims,owner_name',per_page:500});
flickr.photos.getRecent.addListeners({
	'before':function(){
		flickr.notification.show('photos','loading photos...');
	},
	'receive':function(){
		flickr.appSettings.method = this;
	},
	'success': flickr.loadPhotos
}).defaultParams({extras:'date_taken, original_format, tags,o_dims,owner_name'});

flickr.photos.getInfo.addListeners({
	'success':flickr.loadDetails
});

flickr.photoSets.getList.addListeners({
	'before':function(){
		flickr.notification.show('sets','loading photosets...');
	},
	'success':function(data){
		var dataSet = flickr.photoSets.getList.dataSet;
		var setList = $('#setList').empty();
		if(!dataSet.count()){
			setList.append('<li>No Photosets for this user</li>');
			return;
		}
		
		$.each(dataSet.items(),function(index,item){
			var cleanTitle = item.title._content.replace(/<(?:.|\s)*?>/g ,'');
			var cleanDescription = item.description._content.replace(/<(?:.|\s)*?>/g ,''); 
			setList.append($('<li><a href="?photoset_id='+item.id+'&user_id='+flickr.appSettings.currentUser+'" title="'+cleanDescription+'">'+cleanTitle+' ('+item.photos+')'+'</a></li>'));
		});
		
		flickr.notification.hide('sets')
		
		if(!flickr.appSettings.queryString.photoset_id) return;
		
		flickr.photoSets.getPhotos.send({
			photoset_id:flickr.appSettings.queryString.photoset_id||dataSet.items(0).id
		});
	}
});

flickr.tags.getListUserPopular.addListeners({
	'before':function(){
		flickr.notification.show('tags','loading tags...');
	},
	'success':function(){
		var tagsList = $('#tagsList').empty();
		$.each(this.dataSet.items(),function(index,item){
			tagsList.append('<li><a href="?tags='+item._content+'&user_id='+flickr.appSettings.currentUser+'">'+item._content+'&nbsp;('+item.count+')'+'</a></li>');
		});
		if(flickr.appSettings.queryString.tags) {
			flickr.tags.getListUserPopular.dataSet.currentItem(
				flickr.tags.getListUserPopular.dataSet.findItem('_content',flickr.appSettings.queryString.tags).index
			);
			flickr.photos.search.send({tags:flickr.appSettings.queryString.tags})
		}
		flickr.notification.hide('tags');					
	}
});
flickr.photos.comments.getList.addListeners({
	'success':flickr.loadComments,
	'failure':function(data){
		flickr.notification.show('getCommentsError','Error loading comments',5000);
	}
});
flickr.people.getInfo.addListener('success',flickr.getUserInfo);
