$(function(){
	var paneSize = 0;
	var listHeight = 0;
	var scrollInProgress = false;
	var compatibleBrowser = true;
	var jMediaPlayerActive = false;
	
	jQuery.each(jQuery.browser, function(i, val) {
		if(i=="msie" && jQuery.browser.version.substr(0,3)=="6.0"){
			compatibleBrowser = false;
		}
	});
	
	$(".mediaPlayer").click(function(){
		if (compatibleBrowser) {
			$jLink = $(this);
			var imageIndex = $('a.mediaPlayer').index($jLink);
			buildJMediaPlayer();
			var $jLink2 = $('.jMediaPlayerBuilt:eq(' + imageIndex + ')');
			if ($jLink.hasClass("youTube"))
				showVideo($jLink2);			
			else
				showImage($jLink2);
			checkNavButtons();
			return false;
		} else {
			return true;
		}	
	});
	
	$("#jMediaPlayer_overlay").live("click", function(){
		removeJMediaPlayer();
		return false;
	});
	
	$(".jMediaPlayer_arrowDiv").live("mouseover", function(){
		if (!$(this).hasClass("disabled")) {
			$(this).find("span").stop().fadeTo("fast", 1);
		}
	}); 
	$(".jMediaPlayer_arrowDiv").live("mouseout", function(){
		$(this).find("span").stop().fadeTo("fast",0);
	});

	$("#jMediaPlayer_topScroll").live("click", function(){
		var $jMediaPlayerList = $("#jMediaPlayerList");
			if ($jMediaPlayerList.position().top < 0) {
				scrollThumbnails(-1);
			}
		return false;
	});
	
	$("#jMediaPlayer_bottomScroll").live("click", function(){
		var $jMediaPlayerList = $("#jMediaPlayerList");
			if ($jMediaPlayerList.position().top > (paneSize - listHeight)) {
				scrollThumbnails(1);
			}
		return false;
	});
		
	$(".jMediaPlayerBuilt_image").live("click", function(){
		$jLink = $(this);
		showImage($jLink);
		return false;
	});
	
	$(".jMediaPlayerBuilt_staticImage").live("click", function(){
		$jLink = $(this);
		showImage($jLink);
		return false;
	});
	
	
	$(".jMediaPlayerBuilt_youtube").live("click",function(){
		$jLink = $(this);
		showVideo($jLink);
		return false;
	});


	$("#jMediaPlayer_close").live("click",function(){
		removeJMediaPlayer();
		return false;
	});

// KEYBOARD HANDLING
$(document.documentElement).keydown(function (event) {
	if (jMediaPlayerActive) {
		if (event.keyCode == 27) {
			removeJMediaPlayer();
			return false;
		}
		else 
			if (event.keyCode == 38) {
				var nextImage = ($('#jMediaPlayerList li').index($(".jMediaPlayer_activeLink")) + $(".jMediaPlayerBuilt").size() - 1) % ($(".jMediaPlayerBuilt").size());
				var $jLink2 = $('.jMediaPlayerBuilt:eq(' + nextImage + ')');
				if ($jLink2.hasClass("jMediaPlayerBuilt_youtube"))
					showVideo($jLink2);
				else
					showImage($jLink2);
				return false;
			}
			else 
				if (event.keyCode == 40) {
					var nextImage = ($('#jMediaPlayerList li').index($(".jMediaPlayer_activeLink")) + 1) % ($(".jMediaPlayerBuilt").size());
					var $jLink2 = $('.jMediaPlayerBuilt:eq(' + nextImage + ')');
					if ($jLink2.hasClass("jMediaPlayerBuilt_youtube"))
						showVideo($jLink2);
					else
						showImage($jLink2);
					return false;
				}
	}
});

	function buildJMediaPlayer(fn){
		listHeight = 0;
		$("body").append("<div id='jMediaPlayer_overlay'></div>");
		$("body").append("<div id='jMediaPlayer_container'><div id='jMediaPlayer'><div id='jMediaPlayer_viewSpace'></div><div id='jMediaPlayer_controlBar'></div></div></div>");
		$("#jMediaPlayer_viewSpace").append("<div id='jMediaPlayer_media'></div><p id='jMediaPlayer_captionText'>Blah</p>");
		$("#jMediaPlayer_controlBar").append("<div id='jMediaPlayer_closeDiv'><a href='#' id='jMediaPlayer_close'>x</a></div><div id='jMediaPlayer_topScrollDiv' class='jMediaPlayer_arrowDiv'><a href='#' id='jMediaPlayer_topScroll'><span /></div></a><div id='jMediaPlayer_thumbnails'><ul id='jMediaPlayerList'></ul></div><div id='jMediaPlayer_bottomScrollDiv' class='jMediaPlayer_arrowDiv'><a href='#' id='jMediaPlayer_bottomScroll'><span /></a></div>");
		$(".jMediaPlayer_arrowDiv").find("span").addClass("hover");
		$(".hover").css("opacity","0");
		$("a.mediaPlayer").each(function(){
			$thumbImg = $(this).find('img');
			if($(this).hasClass("youTube"))
				$("#jMediaPlayerList").append("<li class='jMediaPlayer_inactiveLink'><a class='jMediaPlayerBuilt_youtube jMediaPlayerBuilt' href='" + $(this).attr("href") + "' title='"+$(this).attr("title").replace(/'/gi,"&apos;")+"'><img src='" + $thumbImg.attr('src') + "'/><div class='jMediaPlayer_videoOverlay'></div></a></li>");
			else if($(this).hasClass("staticImage"))
				$("#jMediaPlayerList").append("<li class='jMediaPlayer_inactiveLink'><a class='jMediaPlayerBuilt_staticImage jMediaPlayerBuilt' href='" + $(this).attr("href") + "' title='"+$(this).attr("title")+"'><img src='" + $thumbImg.attr('src') + "'/></a></li>");
			else
				$("#jMediaPlayerList").append("<li class='jMediaPlayer_inactiveLink'><a class='jMediaPlayerBuilt_image jMediaPlayerBuilt' href='" + $(this).attr("href") + "' title='"+$(this).attr("title")+"'><img src='" + $thumbImg.attr('src') + "'/></a></li>");
		});
		$("#jMediaPlayer_container").css('opacity',0).show();
		var jMediaOverlay_top = Math.max((($(window).height()-$("#jMediaPlayer_container").height())/2),0);
		$("#jMediaPlayer_container").css('top',jMediaOverlay_top+'px');
		$("#jMediaPlayerList li").each(function(){
				listHeight= listHeight + $(this).outerHeight(true);
			});
		$("#jMediaPlayer_overlay").css('opacity', 0).show().fadeTo("default",0.75, function(){
			$("#jMediaPlayer_container").fadeTo("default",1);
			$("#jMediaPlayerList").height(listHeight);
		});	
		paneSize = $("#jMediaPlayer_thumbnails").height();
		checkNavButtons();
		jMediaPlayerActive = true;
	}
	
	function showImage($jLink){
		var imageCaption = $jLink.attr("title");
		$("#jMediaPlayer_media").css("opacity",0);
		$("#jMediaPlayer_viewSpace").css("opacity",1);
		$("#jMediaPlayer_captionText").html("<img src='/theRiverfront/views/images/jMediaPlayer_loading.gif' alt='Loading...'/>");
		
		if ($jLink.hasClass("jMediaPlayerBuilt_staticImage")) {
			displayImage($jLink.attr("href"),$jLink.attr("title"),$jLink);
		}
		else {
			var serviceParams = urlParamsToObject($jLink.attr("href"));
			serviceParams.method = "checkImageCache";
			serviceParams.imageType = "full";
			$.ajax({
				type: "get",
				url: "/theriverfront/api/remoteImageService.cfc",
				data: serviceParams,
				dataType: "json",
				success: function(objResponse){
					displayImage("/theRiverfront/" + objResponse, imageCaption, $jLink);
				},
				error: function(objResponse, strError){
					alert("An unknown error has occurred. Please refresh your browser and try again.");
				}
			});
		}
		
	}
	
	function displayImage(imageUrl, imageCaption,$jLink){
		var img = new Image();
		$(img).load(function(){
			$("#jMediaPlayer_media").html(this);
			var resizeRatio = ($("#jMediaPlayer_viewSpace").height() - $("#jMediaPlayer_captionText").height() - 20) / $(this).height();
			var newHeight = $(this).height() * Math.min(resizeRatio, 1);
			var newWidth = $(this).width() * Math.min(resizeRatio, 1);
			$(this).height(newHeight).width(newWidth);
			var topOffset = ($("#jMediaPlayer_viewSpace").height() - $("#jMediaPlayer_captionText").height() - $("#jMediaPlayer_media").height()) / 2;
			$("#jMediaPlayer_media").css("margin-top", topOffset);
			$("#jMediaPlayer_media").css("opacity", 1);
		}).attr('src', "" + imageUrl);
		$("#jMediaPlayer_captionText").html(imageCaption);
		$(".jMediaPlayer_activeLink").removeClass("jMediaPlayer_activeLink").addClass("jMediaPlayer_inactiveLink");
		$jLink.parent().removeClass("jMediaPlayer_inactiveLink").addClass("jMediaPlayer_activeLink");
		var scrollAmount = Math.floor(($jLink.parent().position().top + $("#jMediaPlayer_thumbnails ul").position().top) / paneSize);
		if (scrollAmount != 0) {
			scrollThumbnails(scrollAmount);
		}
	}
			
	function showVideo($jLink){
		$("#jMediaPlayer_captionText").html("<img src='views/images/jMediaPlayer_loading.gif' alt='Loading...'/>");

		var imageCaption = $jLink.attr("title");
		var serviceParams = urlParamsToObject($jLink.attr("href"));
		var objectHTML = "<object style='height: 344px; width: 425px'><param name='movie' value='http://www.youtube.com/v/" + serviceParams.v + "?rel=0'><param name='allowFullScreen' value='true'><param name='allowScriptAccess' value='always'><embed src='http://www.youtube.com/v/" + serviceParams.v + "?rel=0' type='application/x-shockwave-flash' allowfullscreen='true' allowScriptAccess='always' width='425' height='344'></object>";
		$("#jMediaPlayer_captionText").html(imageCaption);
		$("#jMediaPlayer_media").css("margin-top","20px").html(objectHTML);
		$(".jMediaPlayer_activeLink").removeClass("jMediaPlayer_activeLink").addClass("jMediaPlayer_inactiveLink");
		$jLink.parent().removeClass("jMediaPlayer_inactiveLink").addClass("jMediaPlayer_activeLink");
		var scrollAmount = Math.floor(($jLink.parent().position().top + $("#jMediaPlayer_thumbnails ul").position().top) / paneSize);
		if (scrollAmount != 0) {
			scrollThumbnails(scrollAmount);
		}
		
		return false;
	}
			
	function checkNavButtons(){
		var $jMediaPlayerList = $("#jMediaPlayerList");
		if ($jMediaPlayerList.position().top >= 0) {
			$("#jMediaPlayer_topScrollDiv").fadeTo("fast",0);
			$("#jMediaPlayer_controlBar").fadeTo("fast",1);
			$("#jMediaPlayer_topScrollDiv").addClass("disabled");
		} else {
			$("#jMediaPlayer_topScrollDiv").fadeTo("fast",1);
			$("#jMediaPlayer_topScrollDiv").removeClass("disabled");
		}
		if ($jMediaPlayerList.position().top <= (paneSize - listHeight)) {
			$("#jMediaPlayer_bottomScrollDiv").fadeTo("fast",0);
			$("#jMediaPlayer_controlBar").fadeTo("fast",1);
			$("#jMediaPlayer_bottomScrollDiv").addClass("disabled");
		} else {
			$("#jMediaPlayer_bottomScrollDiv").fadeTo("fast",1);
			$("#jMediaPlayer_bottomScrollDiv").removeClass("disabled");
		}		
		
	}
	
	function scrollThumbnails(distance){
		if (!scrollInProgress) {
			var $jMediaPlayerList = $("#jMediaPlayerList");
			
				scrollInProgress = true;
				var scrollAmount = $jMediaPlayerList.position().top + (paneSize*-distance);
				$("#jMediaPlayer_thumbnails ul").animate({
					top: scrollAmount
				}, 1000, function(){
					checkNavButtons();
					scrollInProgress = false;
				});
		}
	}
	
	function removeJMediaPlayer(){
		$("#jMediaPlayer_overlay").fadeOut("default");
		$("div[id*=jMediaPlayer]").fadeOut("default", function(){
			$(this).remove();
		});
		jMediaPlayerActive = false;
	}
	
	function urlParamsToObject(URL){
		var targetURL = URL;
		targetURL = targetURL.replace(/event/i,"method");
		var params = targetURL.split(/[\?&]+/);
		var x;
		var paramsTemp;
		var serviceParams = new Object;	
		for (x in params)
		{
			if (params[x] != "")
			{
				paramsTemp = params[x].split("=");
				serviceParams[paramsTemp[0]] = paramsTemp[paramsTemp.length-1];
			}
		}
		serviceParams.returnFormat = "json";
		return serviceParams;
	}
});

