/* jQuery Flickr Portfolio Plugin */
/* coded by Matt Blasi */

(function($) {
	$.fn.flickrPortfolio = function(options) {

	var defaults = {
		
		// Flickr User Data & APP API Key
		flickr_userID:		'43909573@N06',
		flickr_APIKey:		'db0c28b18be1b4d58cdd4796b84b70f5',
		
		// Customizable Titles - To not show title leave as ''
		name_portfolio:			'Sample Portfolio',
		name_collection_list: 	'Portfolio Categories',
		
		// Customizable Class Names
		class_portfolio:			'portfolio',
		class_collection_list:		'collections',
		class_current_collection:	'collection',
		class_current_set:			'current-set',
		
		// Exclude or Include Only Set List (by ID)
		exclude_collections:	[],
		incldue_collections:	[],
		exclude_sets:			[72157622793456521],
		include_sets:			[72157622645499692,72157622534721369],
		exclude_photos:			[],
		include_photos:			[],
		
		// Show collection listings
		show_collectionlist_title:			true,
		show_collectionlist_description:	false,
		
		show_collection_title:				true,
		show_collection_description:		false,
		
		show_photosetlist_title:			true,
		show_photosetlist_description:		false,
		
		show_photoset_title:				true,
		show_photoset_description:			true,
		show_photoset_image:				false,
		
		show_photo_title:					true,
		show_photo_description:				true,
		show_photo_meta:					true,
		show_photo_tags:					true,
		
		// Output for shown Sets
		show_info_set:			true,		// description is from entire set
		show_info_photo:		true,		// description is from individual photo
		show_set_icon:			true,		// pull icon for set
		
		// Truncate descriptions
		truncate_description: 	false,
		truncate_limits:		100,
		
		// Layout Options - set default & pass array 
		layout_default: 		1,
		layout_option1:			[72157622645499692,72157622534721369],
		layout_option2:			[72157622535087751],
		
		// Custom Icons
		
		// Transition animation to be used - slide, fade
		transition_collection:	'fade',
		transition_set:			'fade',
		transition_photo:		'fade',
		
		// Add function names to call
		functionBeforeRunCallback:	'',
		functionAfterRunCallback:	'',
	};
	
	var options = $.extend(defaults, options); 

	return this.each(function(){
		
		var obj = $(this);
		
		$.ajaxSetup({ dataType: "json" });
		
		var arrayCollections = new Array();
		var arrayPhotosets = new Array();
		var arrayPhotos = new Array();
		
		portfolio();
		
		function portfolio() {
			obj.append('<div class="'+options.class_portfolio+'"/>');
			portfolio = $('.'+options.class_portfolio);
			
			getCollectionsArray();
			
			// get photos for chosen photoset 
		}
		
		function getCollectionsArray() {
			var arrayCollection = new Array();
			jsonCollections = "http://api.flickr.com/services/rest/?method=flickr.collections.getTree&api_key="+options.flickr_APIKey+"&user_id="+options.flickr_userID+"&format=json&nojsoncallback=1";
			$.getJSON(jsonCollections, function(data){
				$.each(data.collections.collection, function (i, collection) {arrayCollection[i] = {'collection_id':collection.id,'collection_name':collection.title,'collection_description':collection.description};});
				renderCollectionsList(arrayCollection);
			});
		}
		
		function renderCollectionsList(arrayCollection) {
			portfolio.append('<ul class="'+options.class_collection_list+'"/>');
			collectionsList = $('.'+options.class_collection_list);
			$.each(arrayCollection, function(i,collection){
				collectionString = '<li>';
				collectionString = collectionString+'<a href="'+collection.collection_name+'" title="'+collection.collection_name+'" data-id="'+collection.collection_id+'">';
				if(options.show_collectionlist_title==true){collectionString = collectionString+'<h2>'+collection.collection_name+'</h2>';}
				if(options.show_collectionlist_description==true){collectionString = collectionString+'<p>'+collection.collection_description+'</p>';}
				collectionString = collectionString+'</a>';
				collectionString = collectionString+'</li>';
				collectionsList.append(collectionString);
			});
			portfolio.append('<div class="'+options.class_current_collection+'"/>');
			renderCollection(arrayCollection[0].collection_id);
			$('.'+options.class_collection_list+' a').bind('click', function(event) {
				event.preventDefault();
				collectionID = $(this).attr('data-id');
				renderCollection(collectionID);
			});
		}
		
		function renderCollection(collectionID) {
			var arrayPhotosets = new Array();
			collectionInfo = 'http://api.flickr.com/services/rest/?method=flickr.collections.getTree&api_key='+options.flickr_APIKey+'&collection_id='+collectionID+'&user_id='+options.flickr_userID+'&format=json&nojsoncallback=1';
			collection = $('.'+options.class_current_collection);
			collection.fadeTo(50,0.0);
			$.getJSON(collectionInfo, function(data){
				collection.html('');
				if(options.show_collection_title==true){collection.append('<h2>'+data.collections.collection[0].title+'</h2>');}
				if(options.show_collection_description==true){collection.append('<p>'+data.collections.collection[0].description+'</p>');}
				$.each(data.collections.collection[0].set, function (i, photosets) {
					arrayPhotosets[i] = {'photoset_id':photosets.id,'photoset_name':photosets.title,'photoset_description':photosets.description};
				});
				renderPhotosetList(arrayPhotosets);
			});
			collection.fadeTo(1000,1.0);
		}
		
		function renderPhotosetList(arrayPhotosets) {
			collection.append('<aside/>');
			$.each(arrayPhotosets, function(i,sets){
				photosetString = '<article>';
				photosetString = photosetString+'<a href="'+sets.photoset_name+'" data-id="'+sets.photoset_id+'">';
				if(options.show_photosetlist_title==true){photosetString = photosetString+'<h3>'+sets.photoset_name+'</h3>';}
				if(options.show_photosetlist_description==true){photosetString = photosetString+'<p>'+sets.photoset_description+'</p>';}
				photosetString = photosetString+'</a>';
				photosetString = photosetString+'</article>';
				collection.find('aside').append(photosetString);
			});
			collection.find('aside').before('<section/>');
			collection.find('aside article a').bind('click', function(event){
				event.preventDefault();
				photosetID = $(this).attr('data-id');
				renderPhotoset(photosetID);
			});
		}
		
		function renderPhotoset(photosetID) {
			photosetInfo = 'http://api.flickr.com/services/rest/?method=flickr.photosets.getInfo&api_key='+options.flickr_APIKey+'&photoset_id='+photosetID+'&format=json&nojsoncallback=1';
			section = collection.find('section');
			section.slideUp('fast').fadeTo(500,0.0).removeClass('down');
			$.getJSON(photosetInfo, function(data){
				section.html('');
				if(options.show_photoset_image==true){section.append('<span class="image" />'); renderPhotosetImage(photosetID);}
				section.append('<article />');
				if(options.show_photoset_title==true){section.find('article').append('<h3>'+data.photoset.title._content+'</h3>');}
				if(options.show_photoset_description==true){section.find('article').append('<p>'+data.photoset.description._content+'</p>');}
				renderPhotos(photosetID);
			});
			collection.find('section').slideDown().fadeTo(500,1.0).addClass('down');
		}
		
		function renderPhotosetImage(photosetID){
			photosetImage = 'http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key='+options.flickr_APIKey+'&photoset_id='+photosetID+'&extras=url_s%2Curl_m%2Curl_o&format=json&nojsoncallback=1';
			$.getJSON(photosetImage, function(data){
				section.find('.image').append('<img src="'+data.photoset.photo[0].url_o+'" alt="'+data.photoset.photo[0].title+'" title="'+data.photoset.photo[0].title+'" />');
			});
		}
		
		function renderPhotos(photosetID) {
			photosetImage = 'http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key='+options.flickr_APIKey+'&photoset_id='+photosetID+'&extras=url_sq%2Curl_m%2Curl_o&format=json&nojsoncallback=1';
			$.getJSON(photosetImage, function(data){
				section.append('<aside class="photos" />');
				$.each(data.photoset.photo, function(i,photo){
					section.find('aside').append('<a href="#" class="photo" title="'+data.photoset.photo[i].title+'" data-id="'+data.photoset.photo[i].id+'"><img src="'+data.photoset.photo[i].url_sq+'" alt="'+data.photoset.photo[i].title+'" title="'+data.photoset.photo[i].title+'" /></a>');
				});
				section.find('aside a').bind('click', function(event){
					event.preventDefault();
					photoID = $(this).attr('data-id');
					alert(photoID);
				});
			});
		}
		
		function renderPhoto(photoID) {
		}
		
	});

	};//END
})(jQuery);


/*
ARRAYS 
Collections:    collection_id | collection_name | collection_description | collection_url
Sets:			collection_id | set_id | set_name | set_description | set_url | set_count | set_image
Photos:			collection_id | set_id | photo_id | photo_name | photo_description | photo_size1 | photos_size2 | photos_size3 | photo_size4 | photo_url | photo_tags
*/






