var currentDex = 0;
var perSet = 10;
var isMyspace = false;
var carouselInterval = 5000;
$(function() {
	var params = getParams();
	if(params.season){
		pathForDeeplink = "assets/ecards/season" + params.season + "/";
	} else {
		pathForDeeplink = "assets/ecards/";
	}
	$("#seasons ."+params.season+" a").addClass('selected');
	$("#main", "#carousel").UICarousel({interval:carouselInterval}).bind('change', function(evt, dex) {
	
		// change event
		//  - handles deeplink
		//  - changing of next and prev and thumb pagination
		 
		var cat = getCurrentCategory();				
		var curImgSrc = $($("#main img").get(dex)).attr("src");
		
		if(!curImgSrc) return;
		
		var deeplink = "#/" + cat + curImgSrc.substring(curImgSrc.lastIndexOf("/"), curImgSrc.lastIndexOf("."));
		
		currentDex = dex;			
		document.location.href = deeplink;
		
		var nextDex = dex;
		if(nextDex >= $("#main li").length)
		{
			nextDex = 0;
		}
		
		var prevDex = dex;
		if(prevDex < 0)
		{
			prevDex = $("#main li").length - 1;
		}		
		
		var nextImgSrc = $($("#main img").get(nextDex)).attr("src");
		var prevImgSrc = $($("#main img").get(prevDex)).attr("src");		
		
		var nextDeeplink = "#/" + cat + nextImgSrc.substring(nextImgSrc.lastIndexOf("/"), nextImgSrc.lastIndexOf("."));
		var prevDeeplink = "#/" + cat + prevImgSrc.substring(prevImgSrc.lastIndexOf("/"), prevImgSrc.lastIndexOf("."));
					
		$("#btnNext").attr("href", nextDeeplink);
		$("#btnPrev").attr("href", prevDeeplink);				
				
		positionSet(currentDex);
	});
	
	// -- events --
	$("#btnPrev").live('click', function() {
		$.fn.UICarousel.prev();
		$.fn.UICarousel.stop();
	});
	
	$("#btnNext").live('click', function() {
		$.fn.UICarousel.next();	
		$.fn.UICarousel.stop();
	});	
	
	$("#thumbs a").live('click', function() {
		$.fn.UICarousel.stop();
	});
	
	$("#categories a").click(function() {
		var id = $(this).attr("href").substr(2);
		getCategoryById(id, function() {
			$.fn.UICarousel.start(0);
			$.fn.UICarousel.startTimer();
		});	
		
		// track category
		trackLink(id);
	});	
	
	
	$("#share a, #user a, li.current img").live('click', function() {
		$.fn.UICarousel.stop();
	});
	
	
	// twitter url shorten complete handler
	$("body").bind("complete.bitly", function(evt, result) {		
		if(isMyspace)
		{
			isMyspace = false;
			var curImg = getCurrentImage();
	
			var imgUrl = curImg.fullPath;
			var title = $("#btnMyspace").attr("title");		
			var url = result['shortUrl'];
			var content = "<a href='" + url + "'><img border='0' src='" + imgUrl + "' /></a>";
			var loc = 1;		
			Myspace.share(title, content, url, loc);
		}
		else
		{		
			// replace spaces with '+'
			var twitterHref = $("#btnTwitter").attr("title").replace(/\s/g, "+") + "+" + result['shortUrl'];
			twitterHref = "http://twitter.com/home?status=" + twitterHref;
			
			window.open(twitterHref);
		}
	});
	
	$(".fbFriend").live('mouseover', function() {
		$(this).addClass("over");
	}).live('mouseout', function() {
		$(this).removeClass("over");
	}).live('click', function() {
		var fbid = $(this).find("fbLink").attr("rel");
		Facebook.publishStream(fbid);
		return false;
	});
	
	// facebook post on your wall
	$("#fbPostOnYourWall").live('click', function() {
		trackLink("facebookself");
		trackEcard();
	});
	
	// facebook post on your friend's wall
	$("#fbPostFriendsWall").live('click', function() {
		trackLink("facebookfriend");
		trackEcard();
	});
	
	$("#btnTwitter").click(function() {
		var url = document.location.href;
		// shorten url
		// fires: complete.bitly event for body tag when complete $("body").bind("complete.bitly", function(evt, result){ ..code here.. });
		BitlyClient.shorten(url, 'BitlyCB.myShortenCallback');
		trackLink("twitter");
		trackEcard();
	});
	
	$("#btnMyspace").click(function() {
		isMyspace = true;
		BitlyClient.shorten(document.location.href, 'BitlyCB.myShortenCallback');
		trackLink("myspace");
		trackEcard();
	});
		
	$("#btnEmail").click(function() {
		var params = getParams();
		var curImg = getCurrentImage();
		
		$("#viewEmail input[name='showID']").val(params.showid);
		$("#viewEmail input[name='category']").val(params.category);
		$("#viewEmail input[name='imgName']").val(params.img);
		
		$("#frmEmail").show();
		$("#viewEmail #messageSent").hide();
		$("#viewEmail").fadeIn();
		
		trackLink("email");
		trackEcard();
	});
	
	$("#frmEmail").submit(function() {
		// validate
		var isValid = true;
		$("#frmEmail #fromName, #frmEmail #fromEmail, #frmEmail #toEmail, #frmEmail textarea").each(function() {
			if (($(this).val() == "")||($(this).val() == "Your Email"))
			{
				isValid = false;
				$(this).addClass("invalid");
			}
			else
			{
				$(this).removeClass("invalid");
			}
		});
		
		if(isValid)
		{
			$("#invalidFields").hide();
			$.post('/global/ecard/php/EcardSubmit.php', $(this).serialize(), function(res) {
				// response
				//$("#frmEmail").fadeOut();
				$("#frmEmail").fadeOut();
				$("#viewEmail #messageSent").fadeIn();
			});
		}
		else
		{
			$("#invalidFields").show();
		}
		
		return false;
	});
	
	$("#viewEmail .btnClose").click(function() {
		$("#viewEmail").fadeOut();
	});
	
	$("#viewFacebookFriends .btnClose").click(function() {
		$("#viewFacebookFriends").fadeOut();
	});
	
	$("#viewEmail input, #viewEmail #toEmail").UIToggleField();	
	
	// setup initial category and image (deeplinking)
	var params = getParams();
	
	// stop carousel if deeplinked
	if(params.category && params.img)
	{
		$.fn.UICarousel.stop();
		if(params.messageid)
		{
			$.post('/global/ecard/php/EcardSubmit.php', {action: 'getEcard', messageID: params.messageid}, function(res) {
				var message = res.message;
				$("#viewEmailDeeplink #emailDeeplinkImage img").attr("src", pathForDeeplink + params.img + ".jpg");
				$("#viewEmailDeeplink #emailDeeplinkMessage").text(res.message);
				$("#viewEmailDeeplink").show();
				$("#internalBody").trigger("getEcardComplete");
				
			}, "json");
		}
		else
		{
			getCategoryById(params.category, function() {
				startImg(params.img);
			});
		}
	}
	else
	{			
		getCategoryById(params.category, function() {
			$.fn.UICarousel.start(0);
			$.fn.UICarousel.startTimer();
		});
	}
});

function getCurrentImage()
{
	var img = $(".current img", "#main");
	var params = getParams();
	var path = "http://" + document.location.host + "/shows/originals/" + params.showid + "/" + $(img).attr("src");
	
	if($.browser.msie && parseInt($.browser.version) <= 7)
	{
		path = $(img).attr("src");
	}
		
	return {
		src: $(img).attr("src"),
		title: $(img).attr("alt"),
		fullPath: path
	};
}

// get current category name
function getCurrentCategory() 
{
	var href = "";
	
	$("#categories a").each(function() {
		if($(this).hasClass("current"))
		{
			href = $(this).attr("href");
		}
	});
			
	return href.substr(2);
}

// go to specific image in carousel
function startImg(imgName)
{
	var index = $("#main img").index($("#main img[src='" + pathForDeeplink + imgName + ".jpg']"));
	index = (index > -1) ? index : 0;
	$.fn.UICarousel.start(index);
}

// populate category and thumbs for carousel
function getCategoryById(id, callback)
{
	$.fn.UICarousel.stop();
	
	var params = getParams();
	$.getJSON('/global/ecard/php/handler.php', {action: "getCategoryById", showid: params.showid, id: id, season: params.season}, function(res) {	
		var len = res.card.length;
		
		var mainHTML = [];
		var thumbHTML = [];
		var imgSrc, deeplink;
			
		for(var i = 0; i < len; i++)
		{
			imgSrc = res.card[i].src;
			deeplink = "/" + res.id + imgSrc.substring(imgSrc.lastIndexOf("/"), imgSrc.lastIndexOf("."));
			
			mainHTML.push('<li><a href="#' + deeplink + '"><img src="' + imgSrc  + '" alt="' + res.card[i].description + '"/></a></li>');
			thumbHTML.push('<li><a href="#' + deeplink  + '">' + (i+1) + '</a></li>');
		}
		
		$("#main").html(mainHTML.join("")).find("li").hide();
		$("#thumbs").html(thumbHTML.join(""));				
	
		$("#categories a").filter(function() {return $(this).hasClass("current");}).removeClass("current");
		$("#categories a[href='#/" + res.id + "']").addClass("current");
		
		if($.isFunction(callback)) {callback(id);}
	});
}

// position pagination
function positionSet(dex)
{
	var ct = Math.floor(dex / perSet);
	$("#thumbs").animate({left: -(ct * $("#thumbContainer").width()) + "px"});
}

function trackEcard()
{
	var params = getParams();
	trackLink(params.category + ":" + params.img);
}

function getParams(url)
{	
	var result = {};
	var queryString;
	
	if(url)
	{
		result.hash = url.substr(url.indexOf("#") + 1);
		result.pageURL = url.substring(url.lastIndexOf('/') + 1);
		queryString = url.substr(url.indexOf("?") + 1);		
		var showDex = url.indexOf("originals");
		if(showDex != -1)
		{
			result.showid = url.substring(showDex + 10, url.lastIndexOf('/'));
		}
	}
	else
	{
		result.hash = document.location.hash.substr(1);
		result.pageURL = document.location.pathname.substring(document.location.pathname.lastIndexOf('/') + 1);
		queryString = document.location.search.substr(1);
		var showDex = document.location.pathname.indexOf("originals");
		if(showDex != -1)
		{
			result.showid = document.location.pathname.substring(showDex + 10, document.location.pathname.lastIndexOf('/'));
		}
	}
 	
	result.pageURL = (result.pageURL == "") ? "index.php" : result.pageURL;
	result.pageid = result.pageURL.substring(0, result.pageURL.lastIndexOf('.'));
	
	var params = queryString.split("&");			
	var curParam;
 
	for(var i in params)
	{
		curParam = params[i].split("=");
		result[unescape(curParam[0]).replace(" ", "")] = unescape(curParam[1]);
	}
 	
	var hash = result.hash.split("/");
	if(hash[0] != "")
	{
		result.category = hash[0];
		result.img = hash[1] || null;
		result.messageid = hash[2] || null;
	}
	else
	{
		result.category = hash[1] || null;
		result.img = hash[2] || null;
	}
	
	return result;
}

function showFriends()
{
	$("#viewFacebookFriends").show();
	Facebook.update_friends();
}
