var _flickr = "http://api.flickr.com/services/rest/?";
var _api = '65bce349087b4e54c3e5fe10567fd06f';
var _group = '1087961@N20';
var _per_page = 15;
var _paged = 1;

var _flickrCurrent = 0;
var _flickrArray = Array();
var _flickr_per_page = 5;
var _thumbLoad = 0;
var _photoToggle = 0;
var loader;

var _firstLoad = true;

var _sort = 'interestingness-desc';
var _tags = null;

var _flickrHash = new Hash();
var _flickrDescriptionHash = new Hash();
var _flickrAuthorHash = new Hash();
var _flickrOriginalHash = new Hash();
var _flickrFormatHash = new Hash();
var _flickrTitleHash = new Hash();

var _page = 1;

var _photoTitle = "";

var _deepLink = null;
var sort;

var curTag = null;
var oldURL;

var _thumb_height = 465;
var thumb_position;
var _thumbArray = [];

var currentFlickrPhoto = 0;

$(document).ready(function() {
  _deepLink = Number($.query.get('photoid')) || null;
	if (_deepLink) {_firstLoad = false};
	$(".thumbnailPagination").hide();

	$("#next").click(nextPhoto);
	$("#prev").click(prevPhoto);
	$('#searchToggle').click(function(event) {
		$('#searchTerms').slideToggle(400);
		return false;
	});
	$("#searchTerms li").each(function(index) {
		var _curLi = $(this);
		// get the id
		var _id = _curLi.attr("id");
		// remove 'search_'
		_id = _id.substr(7,_id.length);
		if(_id != "all")_curLi.click(function(){
      _thumbArray = [];
			_deepLink = null;
			_paged = 1;
			_page = 1;
			_firstLoad = true;
      if (_id.match("_AND_")) {
        curTag = _id.split("_AND_");
      } else {
		    curTag = _id;
      }
			clearThumbs();
			loadFlickrGroupPool();
			$('#searchTerms li.selected').removeClass('selected');
			$(this).addClass('selected');
		});
	});
	$("#search_all").click(function(){
		_deepLink = null;
		_paged = 1;
		_page = 1;
		_firstLoad = true;
		curTag = null;
		clearThumbs();
		loadFlickrGroupPool();
		$('#searchTerms li.selected').removeClass('selected');
		$(this).addClass('selected');
	});

	$('#sortBy li').click(function() {
		_deepLink = null;
		_paged = 1;
		_page = 1;
		_firstLoad = true;
		clearThumbs();
		var val = $(this).attr('id');
		if (val == 'sortByPosted') {sortFlickrImages('date-posted-desc')};
		if (val == 'sortByTaken') {sortFlickrImages('date-taken-desc')};
		if (val == 'sortByInteresting') {sortFlickrImages('interestingness-desc')};

		return false;
	});
	/*
	$('#sortByPosted').click(function() {
		_deepLink = null;
		_paged = 1;
		clearThumbs();
		sortFlickrImages('date-posted-desc');
		return false;
	});

	$('#sortByTaken').click(function() {
		_deepLink = null;
		_paged = 1;
		clearThumbs();
		sortFlickrImages('date-taken-desc');
		return false;
	});
	$('#sortByInteresting').click(function() {
		_deepLink = null;
		_paged = 1;
		clearThumbs();
		sortFlickrImages('interestingness-desc');
		return false;
	}); */

	showPhoto();

//	doFlickr();
//	doVimeo();

});

function doFlickr() {
	//showSortBy();
	showUserInfo();
	$(".thumbnailPagination").hide();
	showFlickrLoader();
	loadFlickrGroupPool();
  //console.log('done');
}

/*************************************************************************
	VIDEO / IMAGE TOGGLE
*************************************************************************/
function showPhoto() {
//	var _photoToggleButton = $("#togglePhoto");
//	var _videoToggleButton = $("#toggleVideo");

	_paged = 1;

  // show photo
//	_photoToggleButton.addClass('active');
//	_videoToggleButton.removeClass('active');

//	_videoToggleButton.click(function(){togglePhotoVideo()});
//	_photoToggleButton.unbind("click");

//	_photoToggleButton.animate({paddingTop: "17px", marginTop: "17px"}, "fast");
//	_videoToggleButton.animate({paddingTop: "7px", marginTop: "27px"}, "fast");

		flickrShowControls();
		_photoToggle = 1;

		_firstLoad = true;

		//vimeoHideMainLoader();
		flickrShowMainLoader();
		clearThumbs();

		$("#thumbsPagForward").unbind("click");
		$("#thumbsPagBack").unbind("click");

		$("#thumbsPagForward").click(nextFlickrPage);
		$("#thumbsPagBack").click(prevFlickrPage);
		doFlickr();
}


/***********************************************************************************
	THUMB UTILS
***********************************************************************************/

function scrollDown() {
	var thumb_position;
	thumb_position = parseInt($("#thumbnails").css('top'));
	thumb_position = thumb_position-_thumb_height;
	$('#thumbnails').animate({top: thumb_position}, "medium");
	//console.log("thumb_position: " + thumb_position);
}

function scrollUp() {

	thumb_position = parseInt($("#thumbnails").css('top'));
	thumb_position = thumb_position+_thumb_height;
	$('#thumbnails').animate({top: thumb_position}, "medium");
//	console.log("thumb_position: " + thumb_position);
}

function scrollTo() {
	var currentThumbPosition = parseInt($("#thumbnails").css('top'));
	var _curID = getFlickrElementById(_flickrArray[currentFlickrPhoto]);
  //console.log("currentThumbPostition: " + currentThumbPosition);
	//console.log("_curID: " + _curID);
	var _thumbsShown = Math.floor(_curID / 5);
	_paged = _thumbsShown + 1;
	if (_curID < 5) _thumbsShown = 0;
  //console.log("paged: " + _paged);

	//console.log("_thumbsShown: " + _thumbsShown);
	thumb_position = 0 - (_thumb_height * _thumbsShown);
  $('#thumbnails').animate({top: thumb_position}, "medium");
	if(_flickrArray.length - _curID <= 5) {
//		console.log("MAKING API CALL");
		var _curPage = Math.ceil(_thumbsShown / 3);
		_page = _curPage + 1;
		//loadFlickrGroupPool();
	}
	doFlickrPagination();
}

function clearThumbs() {
	_flickrArray = [];
	$("#thumbnails").css('top', '0').find('li').remove();
}


/***********************************************************************************
	FLICKR
***********************************************************************************/
function loadFlickrGroupPool() {
//	console.log("_paged: " + _paged);
	_thumbLoad = 0;
	//_flickrArray = [];
	_tags = curTag;
  flickrFetch({api_key: _api,
				type: 'search',
				group_id: _group,
				sort: _sort,
				page: _page,
				per_page: _per_page,
				tags: _tags,
				load_callback: processFlickrImage,
				callback: showFlickrPage
				});
}

function fetchFlickrPage() {
	_thumbLoad = 0;
	_flickrArray = [];

	/*flickrFetch({api_key: _api,
				type: 'search',
				group_id: _group,
				sort: 'date-posted-desc',
				page: _paged,
				per_page: _per_page,
				load_callback: processFlickrImage,
				callback: showFlickrPage
				});*/

	fetchFlickrTags(curTag);
}

function fetchFlickrTags(_tags) {
	//alert('fetchFlickrTags');
	_thumbLoad = 0;
	_flickrArray = [];

	flickrFetch({api_key: _api,
				type: 'search',
				group_id: _group,
				sort: 'date-posted-desc',
				page: _paged,
				per_page: _per_page,
				load_callback: processFlickrImage,
				callback: showFlickrPage,
				tags: _tags
				});
}

function loadFlickrGroupSort(_sort) {
	_thumbLoad = 0;
	_flickrArray = [];

	flickrFetch({api_key: _api,
				type: 'search',
				group_id: _group,
				sort: _sort,
				page: _paged,
				per_page: _per_page,
				load_callback: processFlickrImage,
				callback: showFlickrPage
				});
}

function processFlickrImage(photo) {
	_flickrArray.push(photo["id"]);
	getFlickrPhotoInfo(photo);
//	console.log("processing photo: %d", photo["title"]);
}

function showFlickrPage() {
	enableThumbNextPrev();

	doFlickrPagination();
	hideFlickrLoader();


	//showFlickrThumbnails();

//	flickrShowControls();
	//alert(_deepLink/2);

	//alert("showflick");


//	$("#thumbsPagForward").click(nextFlickrPage);
//	$("#thumbsPagBack").click(prevFlickrPage);
	//alert("_flickrArray[0]: " + _flickrArray[0]);
	//loadFlickrPhoto(_flickrArray[0]);
	//if(_deepLink)loadFlickrPhoto(_deepLink);

//	alert(_flickrCurrent);

}

function loadFirstFlickrPhoto() {
	if (_deepLink) {_firstLoad = false};
	if (_firstLoad) {
//		alert(_firstLoad);
		$('#thumbnails li:first').click();
//		loadFlickrPhoto(_flickrArray[currentFlickrPhoto], currentFlickrPhoto);

		_firstLoad = false;
	};
}

function enableThumbNextPrev() {
	$("#thumbsPagForward").click(nextFlickrPage);
	$("#thumbsPagBack").click(prevFlickrPage);
}

function disableThumbNextPrev() {
	$("#thumbsPagForward").unbind("click");
	$("#thumbsPagBack").unbind("click");
}

function getFlickrElementById(id) {
	var l = _flickrArray.length;
	for(var i = 0; i < l; i++) {
		var _id = _flickrArray[i];
		//console.log("_flickrArray[" + i + "]: " + _flickrArray[i]);
		//console.log("_id: " + _id + " id: " + id);
		if(_id == id) return i;
	}
	return -1;
}


function loadFlickrPhoto(id, num) {
	currentFlickrPhoto = getFlickrElementById(id);
	$('#slideshow img').fadeOut();
	$('#slideshow').html("");
	flickrShowMainLoader();
	scrollTo();

	//alert(id);
	var _flickrURL = _flickrHash.items[id].replace(/_o\.jpg/g,'.jpg');
//	alert("oldURL: "+oldURL+", _flickrURL: "+_flickrURL);
	//if(_deepLink)
	//var _flickrURL = _flickrHash.items[id];
	//alert(_flickrURL);
	var _flickrDescription = _flickrDescriptionHash.items[id];
	var _flickrAuthor = _flickrAuthorHash.items[id];
	var _title = _flickrTitleHash.items[id] || '';
	//var _title = _flickr_image_current['title']["_content"] || '';
	//var _title = _flickrHash.items[id]["title"];
	//var _title = "title";
	var _flickrPage = "http://www.flickr.com/photos/" + _flickrAuthor['nsid'] + "/" + id + "/";
	var _authorPage = "http://www.flickr.com/photos/" + _flickrAuthor['nsid'] + "/";
	_flickrCurrent = num;

//	$(img).appendTo('#slideshow a').fadeIn(500).AspectRatio();
//	$("#slideshow").html("");
//	$("#slideshow").html("");
//	console.log("the flickr url is: "+_flickrURL);
	// get the shiznit
	var _by = " by ";
	if(_title.length < 1) _by = "";
	$("#userTitle").html('<a href="' + _authorPage + '" target="_blank">' + _title + _by +  _flickrAuthor['username'] + '</a>');
	$("#userDescription").html(_flickrDescription);
	$('#slideshow').append('<a href="' + _flickrPage + '" rel="external"><img id="flickr_stage" src="' + _flickrURL +'" /></a>');

	$("#flickr_stage").load(function()	{
		$(this).AspectRatio().fadeIn(500);
		flickrHideMainLoader();
		_deepLink = null;
	});

	return false;
}

function nextPhoto() {
	//if(++_flickrCurrent % 5 == 0) nextFlickrPage();
	//loadFlickrPhoto(_flickrArray[_flickrCurrent], _flickrCurrent);
	loadFlickrPhoto(_flickrArray[currentFlickrPhoto + 1], currentFlickrPhoto + 1);

	return false;
}

function prevPhoto() {
	if (_flickrCurrent <= 0) {
		return;
	} else {
		//if(_flickrCurrent % 5 == 0) prevFlickrPage();
		--_flickrCurrent;
		//loadFlickrPhoto(_flickrArray[_flickrCurrent], _flickrCurrent);
		loadFlickrPhoto(_flickrArray[currentFlickrPhoto - 1], currentFlickrPhoto - 1);
		return false;
	}
}

function getFlickrPhotoInfo(photo) {
	flickrFetch({api_key: _api,
				type: 'photo',
				photo_id: photo['id'],
				sort: _sort,
				page: _paged,
				per_page: _per_page,
				callback: setFlickrPhotoInfo,
				callback_param1: photo
				});
}

function setFlickrPhotoInfo(photo) {
	_flickrFormatHash.setItem(photo['id'], _flickr_image_current['originalformat']);
	_flickrOriginalHash.setItem(photo['id'], _flickr_image_current['originalsecret']);
	_flickrHash.setItem(photo['id'], getFlickrURL(photo, "o"));
	//_flickrHash.setItem(photo['id'], getFlickrURL(photo, "b")); // doesnt work cause some photos dont have large size
	_flickrDescriptionHash.setItem(photo['id'], _flickr_image_current['description']["_content"]);
	_flickrAuthorHash.setItem(photo['id'], _flickr_image_current['owner']);
	_flickrTitleHash.setItem(photo['id'], _flickr_image_current['title']["_content"]);
//	console.log("PhotoInfo set for photo:"+ photo['title']);
	//alert("5" / 2);
	//alert("set");
	/*_deepLink = photo['id'];
	if(_deepLink) {
		loadFlickrPhoto(_deepLink, _thumbLoad);
	} else {
		if(_thumbLoad == 0) loadFlickrPhoto(photo['id'], _thumbLoad);
	}*/
	//if(_thumbLoad == 0) loadFlickrPhoto(photo['id'], _thumbLoad);
	if (_flickrHash.getItem(_deepLink)) loadFlickrPhoto(_deepLink, _thumbLoad);

	$("#thumbnails").removeClass('vimeoThumbs').addClass('flickrThumbs');

	_thumbArray.push(photo);

  var last_photo = _flickr_total % 15;
  if (last_photo == 0) last_photo = 15;

//  console.log("last_photo: " + last_photo);
//  console.log("thumbarray: " + _thumbArray.length);

	if (_thumbArray.length == last_photo) {

		var _elementID = getFlickrElementById(photo['id']);
		var _thumbHolder = [];
		var l = _thumbArray.length;
		for (var i = 0; i < l; i++) {
			var currentThumb = _thumbArray[i];
			var _elementID = getFlickrElementById(currentThumb["id"]);
			_thumbHolder[_elementID] = currentThumb;
		}
		_thumbHolder = cleanseArray(_thumbHolder);

		l = _thumbHolder.length;
		for (i = 0; i < l; i++) {

			$('#thumbnails').append(createThumbnail(_thumbHolder[i]));
			if (i == last_photo - 1) {
				loadFirstFlickrPhoto();
				if ($.browser.msie) {
					$("#thumbnails li p.description, #thumbnails li h6").minmax();
				}
			}
			_thumbHolder[i] = null
		}
		_thumbArray =[];
	}
}

function cleanseArray(array) {
	var tempArray = [];
	var l = array.length;
	for (var i = 0; i < l; i++) {
		var curPos = array[i] || null;
		if (curPos) tempArray.push(curPos);
	}
	return tempArray;
}

function createThumbnail(photo) {
//	console.log("creating thumbnail for:" + photo['title']);
	var _flickrURL = _flickrHash.items[photo['id']];
	var _flickrDescription = _flickrDescriptionHash.items[photo['id']];
	var _flickrAuthor = _flickrAuthorHash.items[photo['id']];
	_photoTitle = photo['title'];

	var _flickrPage = "http://www.flickr.com/photos/" + _flickrAuthor['nsid'] + "/" + photo['id'] + "/";
		++_thumbLoad;
		var _elementID = getFlickrElementById(photo['id']);
	var _thumb = $('<li id="playerThumbnail'+ _elementID +'"></li>');
	_thumbInner = '<img src="' + $.flickr.getThumbnail(photo)  + '" alt="' + photo['title'] + '" />';
	_thumbInner += '<h6><a href="' + _flickrPage + '" rel="external">' + photo['title'] + '</a></h6>';
	_thumbInner += '<p class="description">' + _flickrDescription + '</p><p>posted by <a href="http://www.flickr.com/' + _flickrAuthor['nsid'] + '" rel="external">'+_flickrAuthor['username']+'</a></p>';

	$(_thumb).html(_thumbInner);

	$(_thumb).click(function(e) {
		var $target = $(e.target);
		if($target.is("a[rel='external']")) {
	        window.open( $($target).attr('href') );
	        return false;
		};
		_deepLink = null;
		_firstLoad = false;
		loadFlickrPhoto(photo['id'],(_thumbLoad-1));
		return false;
	});

	return _thumb;

}

function nextFlickrPage() {
	_paged++;
	//$("#flickr_thumbnails").fadeOut(300, fetchFlickrPage);
	//$(".thumbnailPagination").fadeIn(300);
	doFlickrPagination();
	scrollDown();
	//showFlickrLoader();
	//flickrHideControls();

	//disableThumbNextPrev();
	if (_paged % 3 == 0) {
		//alert(_paged);
		//alert(curTag);

//		if (curTag) fetchFlickrTags(curTag); //fetchFlickrPage();
		_page++;
		loadFlickrGroupPool();
	};

	return false;
}

function prevFlickrPage() {
	_paged--;
//	$("#flickr_thumbnails").fadeOut(300, fetchFlickrPage);
//	$(".thumbnailPagination").fadeIn(300);
	doFlickrPagination();
	scrollUp();


	//showFlickrLoader();
	//flickrHideControls();

	//disableThumbNextPrev();

	return false;
}

function getFlickrURL(photo, size) {
	size = "d"; // hard coding to always grab default (500w) size because it seems we cant depend on there being anything else - jp
	var h = 'http://farm'+photo['farm']+'.static.flickr.com/'+photo['server']+'/'+photo['id']+'_';

	switch (size)
	{
		case 'm':
			h += photo['secret'] + '_m.jpg';
		break;

		case 'b':
			h += photo['secret'] + '_b.jpg';
		break;

		case 'o':
			var _flickrOriginalFormat = _flickrFormatHash.items[photo['id']];
			var _flickrOriginalSecret = _flickrOriginalHash.items[photo['id']];

			if (_flickrOriginalSecret && _flickrOriginalFormat)
			{
				h += _flickrOriginalSecret + '_o.' + _flickrOriginalFormat;
			}
			else
			{
				h += photo['secret'] + '_b.jpg';
			};
		break;

		default:
			h += photo['secret'] + '.jpg';
	}

	return h;
}

function doFlickrPagination() {
	//alert(_flickr_per_page +' and ' + _paged);
	var _start = (5 * (_paged - 1)) + 1;
	var _end = _start + 4;
	//alert("start:"+ _start + ", end: "+ _end + ", paged" + _paged + ", flickr_total: " + _flickr_total + ", flickr_pages: " + _flickr_pages);


	if(_end > _flickr_total) _end = _flickr_total;

//	if(_paged > _flickr_pages) _paged = 1;
//	else if(_paged < 1) _paged = _flickr_pages;

	if (_start == 0) _start = 1;

	$("#thumbsPagShowing").html(_start + " - " + _end + " of " + _flickr_total);


	if(_flickr_total < 5)
	{
		$("#thumbsPagBack").hide();
		$("#thumbsPagForward").hide();
	}
	else
	{
//		alert(_paged);
		if(_paged > 1) $("#thumbsPagBack").show();
		else $("#thumbsPagBack").hide();

		//console.log("_start: "+_start+", _end: "+_end+", _flickr_page:"+ _flickr_page + ", _flickr_per_page: "+ _flickr_per_page + ", paged: " + _paged + ", flickr_total: " + _flickr_total + ", flickr_pages: " + _flickr_pages);
		if(_end == _flickr_total) $("#thumbsPagForward").hide();
//		if((_flickr_page * _flickr_per_page) < _flickr_total) $("#thumbsPagForward").show();
		else $("#thumbsPagForward").show();
	}
}

function sortFlickrImages(sort) {
	_sort = sort;
	clearThumbs();
	loadFlickrGroupPool();
//	$("#flickr_thumbnails").fadeOut(300, fetchFlickrPage);
//	$(".thumbnailPagination").fadeIn(300);

	switch(_sort){
		case 'date-posted-desc':
			$('#sortBy li').removeClass('selected');
			$('#sortByPosted').addClass('selected')
		break;

		case 'date-taken-desc':
			$('#sortBy li').removeClass('selected');
			$('#sortByTaken').addClass('selected')
		break;

		case 'interestingness-desc':
			$('#sortBy li').removeClass('selected');
			$('#sortByInteresting').addClass('selected')
		break;
	}

//	doFlickrPagination();
//	showFlickrLoader();

	return false;
}

function flickrShowMainLoader() {
	if($.browser.msie)
	{
		$("#flickrSlideLoader").show();
	}
	else
	{
		$("#flickrSlideLoader").fadeIn('fast');
	}
}

function flickrHideMainLoader() {
	if($.browser.msie)
	{
		$("#flickrSlideLoader").hide();
	}
	else
	{
		$("#flickrSlideLoader").fadeOut('fast');
	}
}

function showFlickrThumbnails() {
	if($.browser.msie)
	{
		$("#flickr_thumbnails").show();
		$(".thumbnailPagination").show();
	}
	else
	{
		$("#flickr_thumbnails").fadeIn(500);
		$(".thumbnailPagination").fadeIn(500);
	}
}

function hideFlickrThumbnails() {
	if($.browser.msie)
	{
		$("#flickr_thumbnails").hide();
		$(".thumbnailPagination").hide();
	}
	else
	{
		$("#flickr_thumbnails").fadeOut(300);
		$(".thumbnailPagination").fadeIn(500);
	}
}

function showFlickrLoader() {
	if($.browser.msie)
	{
		$("#flickr_loader").show();
	}
	else
	{
		$('#flickr_loader').fadeIn(500);
	}
}

function hideFlickrLoader() {
	if($.browser.msie) {
		$("#flickr_loader").hide();
	}
	else {
		$('#flickr_loader').fadeOut(300);
	}
}

function flickrShowControls() {
	$('#prev').fadeIn(300);
	$('#next').fadeIn(300);
}

function flickrHideControls() {
	$('#prev').hide();
	$('#next').hide();
}

jQuery.fn.AspectRatio = function() {
    var h = this.height()
	var w = this.width();

	var newH;
	var newW;

	var targetWidth = 640;
	var targetHeight = 480;

    var ratio = (h / w);

    if(h <= w) {
		newW = targetWidth;
		newH = targetWidth * (h / w);

		var leftover = 480 - newH;
		this.css("margin-top", (leftover/2) + "px");
	}
	else {
		newW = targetHeight * (w / h);
		newH = targetHeight;
		this.css("margin-top", "0px");
	}

	this.width(newW);
	this.height(newH);

    return this;
};

/*************************************************************
	SORT BY DROPDOWN
*************************************************************/
function showSortBy() {
	$('#sortSearch').slideDown();
}

function hideSortBy() {
	$('#sortSearch').slideUp();
}

function showUserInfo() {
	$('#userDescriptionContainer').show();
}


function hideUserInfo() {
	$('#userDescriptionContainer').hide();
}


function handleSortBy(_sortBy) {
	switch(_sortBy)	{
		case 'title':
			$('#selectedSortByOption').html("<b>SORT BY:  (TITLE)</b>");
			if(_photoToggle == 1) updateThumbnails(_thumbs.sort(sortByName), false);
			else updateThumbnails(_videos.sort(sortByName), false);
		break;

		case 'taken':
			$('#selectedSortByOption').html("<b>SORT BY:  (DATE)</b>");
			if(_photoToggle == 1) updateThumbnails(_thumbs.sort(sortByDate), false);
			else updateThumbnails(_videos.sort(sortByDate), false);
		break;

		case 'user':
			$('#selectedSortByOption').html("<b>SORT BY:  (USER)</b>");
			if(_photoToggle == 1) updateThumbnails(_thumbs.sort(sortByUser), false);
			else updateThumbnails(_videos.sort(sortByUser), false);
		break;
	}

	_currentPaginationPage = 0;
	_currentThumbPagination = 0;

	handleThumbToggle(0);
}

function sortByName(a, b)
{
	if(a.title > b.title) return 1;
	else if(a.title < b.title) return -1;
	else return 0;
}

function sortByDate(a, b)
{
	var date1 = new Date(a.taken);
	var date2 = new Date(b.taken);

	if(a.taken > b.taken) return 1;
	else if(a.taken < b.taken) return -1;
	else return 0;
}

function sortByUser(a, b)
{
	if(a.author > b.author) return 1;
	else if(a.author < b.author) return -1;
	else return 0;
}

