var isOverAddToFav = false;
var addToFavInterval;

$(function() {		
	findAnItineraryEvents();
	signInWindowEvents();
	addToFavEvents();
	myStuffEvents();
	starVariableRating();
	windowResizeEvents();
	voidLinks();
	signInFocus();
	mapThisLightbox();
	destinationMedia();
	detailRatingEvents();
});

window.onload = positionAll;

// when window is resized
function windowResizeEvents()
{
	$(window).resize(function() {
		positionAll();
	});
}

function voidLinks()
{
	var href;
	$("a").each(function() {
		href = $(this).attr("href");
		if(href == "#")
		{
			$(this).attr("href","javascript:void(0);");
		}
	});
}

function signInFocus()
{
	// if asked to sign in, set focus to email input
	var errMsg = $("#signInWindow .error-message").text();
	if(errMsg == "Please sign in")
	{
		$("#frmSignInWindow #txtEmail").focus();
	}
	
}

function positionAll()
{
	positionFindAnItineraryFilter($("#txtFindAnItinerary").val());
	positionMyStuff();
	positionSignInWindow();
}

// show/hide function for windows/menus for mouseover/mouseleave
function showHide(hitAreaElt, windowElt, positionFunc)
{
	if(hitAreaElt && windowElt)
	{
		windowElt.hide();
		positionFunc();
		
		hitAreaElt.mouseover(function() {
			windowElt.show();
		});
		
		windowElt.mouseleave(function() {
			windowElt.hide();
		});
	}
}

/* Find An Itinerary */
function findAnItineraryEvents()
{
	var txtFindAnItinerary 	  = $("#txtFindAnItinerary");
	var findAnItineraryFilter = $("#findAnItineraryFilter");
	
	if(txtFindAnItinerary.length && findAnItineraryFilter.length)
	{	
		findAnItineraryFilter.hide();

		txtFindAnItinerary.keyup(function() {
			var inputVal = $(this).val();
			positionFindAnItineraryFilter(inputVal);
		});
	}
}

function positionFindAnItineraryFilter(inputVal)
{
	var txtFindAnItinerary 	  = $("#txtFindAnItinerary");
	var findAnItineraryFilter = $("#findAnItineraryFilter");
	
	if(txtFindAnItinerary.length && findAnItineraryFilter.length)
	{
		findAnItineraryFilter.hide();
		
		var position = txtFindAnItinerary.position();	
		var cssObj = {
						top:  position.top + 26,
						left: position.left + 141
					};
			
		findAnItineraryFilter.css(cssObj);
		
		if(inputVal.length > 0) {					
			findAnItineraryFilter.show();
		} else {
			findAnItineraryFilter.hide();
		}
	}
}
/*  End of Find An Itinerary */

/* My Stuff */
function myStuffEvents() 
{
	var myStuff 	= $("#myStuff");
	var myStuffMenu = $("#myStuffMenu");
	
	showHide(myStuff, myStuffMenu, positionMyStuff);
}

function positionMyStuff()
{
	var myStuff 	= $("#myStuff");
	var myStuffMenu = $("#myStuffMenu");
	
	if(myStuff.length && myStuffMenu.length)
	{	
		var position = myStuff.position();	
		var cssObj = {
						top:  position.top - 5,
						left: position.left - 9
					};
				
		myStuffMenu.css(cssObj);
	}
}
/* End of My Stuff */

/* Sign In Window */
function signInWindowEvents()
{
	var signIn  	 = $("#signIn");
	var signInWindow = $("#signInWindow");	
	
	showHide(signIn, signInWindow, positionSignInWindow);
	
	var errorMsg 	= signInWindow.find(".error-message");
	var isSigningIn	= signInWindow.hasClass("signIn");
	if(errorMsg.length || isSigningIn)
	{
		signInWindow.show();
	}
	
}

function positionSignInWindow()
{
	var signIn  	 = $("#signIn");
	var signInWindow = $("#signInWindow");

	if(signIn.length && signInWindow.length)
	{	
		var position = signIn.position();	
		var cssObj = {
						top:  position.top - 5,
						left: position.left - 250
					};
				
		signInWindow.css(cssObj);
	}
}
/* End of Sign In Window */

/* Add To Favorites */
function addToFavEvents()
{
	var favLinks  	 = $("div.favorites a");
	var favWindow	 = $("#addToFavWindow");	
	
	favWindow.hide();
	if(favLinks.length && favWindow.length)
	{
		favLinks.each(function() {
			var href = $(this).parent().parent().find(".details a").attr("href");
			
			$(this).mouseover(function() {	
				if($("#ratingMustSignIn").length)
				{
					$("#addToFavWindow p").show();
					$("#ratingMustSignIn").hide();
				}

			
				positionAddToFav($(this));
				
				if($("#signOut").length < 1)
				{
					isOverAddToFav = true;
					favWindow.show();
				}
			});		
		}).mouseout(function() {
			isOverAddToFav = false;
			addToFavInterval = setInterval("hideAddToFav()", 30);			
		});
		
		favWindow.mouseleave(function() {
			favWindow.hide();
			isOverAddToFav = false;
		});	
		
		favWindow.mouseenter(function() {
			isOverAddToFav = true;
		});
	}
}

function hideAddToFav()
{
	if(!isOverAddToFav)
	{
		var favWindow	 = $("#addToFavWindow");
		favWindow.hide();
		isOverAddToFav = false;
		clearInterval(addToFavInterval);
	}
}

function positionAddToFav(elt)
{
	var favWindow	 = $("#addToFavWindow");
	
	if(elt.length && favWindow.length)
	{		
		var position = elt.position();	
		var cssObj = {
						top:  position.top - 58,
						left: position.left + 9
					};
				
		favWindow.css(cssObj);
	}
}
/* End of Add To Favorites */

function addToFavorites(record, redirect)
{
	var param = "favID=" + record + "&redirect=" + redirect;
	
	$.ajax({
		url: 		"/application/handlers/addToFavorites.php",
		data:		param,
		type:		"POST",
		success:	function(data)
					{
						var redirect = data;
						if(redirect)
						{
							window.location.href = redirect;
						}
					},
		error:		function() {}
	});
	
}

function removeFavorite(itinerary, favID)
{
	$.ajax({
		url: 		"/application/handlers/removeFavorite.php",
		data:		"favID=" + favID,
		type:		"POST",
		success:	function(data)
					{			
						var deletedItem = $("#item" + itinerary);
						deletedItem.hide();
						
						var items = $(".item");
						var ct = 1;
						var perPage = 4;
						items.each(function(i) {
							var curItem = $(this);
							if(curItem.is(":visible"))
							{
								if(curItem.hasClass("last"))
								{
									curItem.removeClass("last");
								}
								if(ct % perPage == 0)
								{
									curItem.addClass("last");
								}
								ct++;
							}
						});							
					},
		error:		function() {}
	});
}

function showFavorites(divID, perPage, perRow)
{
	if($(divID).length)
	{
		perPage = perPage || 6;
		perRow 	= perRow  || 4;

		$.ajax({
			url: 		"/application/handlers/showFavorites.php",
			data:		"perPage=" + perPage + "&perRow=" + perRow,
			type:		"POST",
			success:	function(data)
						{			
							$(divID).html(data);						
						},
			error:		function() {}
		});
	}
}

function starVariableRating()
{	
	var starRating = $("#starVariableRating");
	
	if(starRating.length)
	{	
		$("#starVariableRating li a").click(function() {
			$(this).addClass("rateSelected");				
		}).mouseover(function() {
			if($(this).hasClass("rateSelected"))
			{
				$(this).removeClass("rateSelected");
			}
		});
	}
	
	var ratingSaving = $("#ratingSaving");
	if(ratingSaving.length)
	{
		ratingSaving.hide();
	}
	
	$("#starVariableRating li").click(function() {
		var isDestination = (document.location.pathname.indexOf("destination") != -1);
		sendStarRating(isDestination);
	});
}



function getStarRating()
{
	var starRatings = $("#starVariableRating li a");
	var rating = 0;
	
	starRatings.each(function() {
		if($(this).hasClass("rateSelected"))
		{
			rating = $(this).attr("title")[0];
		}
	});
	
	return rating;
}

function sendStarRating(isDestination)
{
	isDestination = isDestination || false;

	var record = $("#itineraryInfoDetail").attr("class").substring(4);
	var rating = getStarRating();

	var param = "rating=" + rating;
	
	if(isDestination)
	{
		param += "&destination=" + record;
	}
	else
	{
		param += "&itinerary=" + record;
	}
	
	$("#ratingSaving").show();
	$("ul#starVariableRating").hide();	
	
	$.ajax({
		url: 		"/application/handlers/sendStarRating.php",
		data:		param,
		type:		"POST",
		success:	function(data)
					{
						$("#starVariableRating").removeClass();
						$("#starVariableRating").addClass("star-rating");
						$("#starVariableRating").addClass("rated"+rating);
						$("#ratingSaving").hide();
						$("ul.star-rating").show();
						
					},
		error:		function() {}
	});
}

function mapThisLightbox()
{
	var mapThis 	= $(".mapThis a");
	
	
	
	if(mapThis.length)
	{
		var options = {
			overlayBgColor: '#000',
			overlayOpacity: 0.6,
			imageLoading: '/resources/images/lightbox/lightbox-ico-loading.gif',
			imageBtnClose: '/resources/images/lightbox/lightbox-btn-close.gif',
			imageBtnPrev: '/resources/images/lightbox/lightbox-btn-next.gif',
			imageBtnNext: '/resources/images/lightbox/lightbox-btn-prev.gif',
			imageBlank:	  '/resources/images/lightbox/lightbox-blank.gif',
			containerResizeSpeed: 350
		};
	
		mapThis.lightBox(options);
	}
}

function destinationMedia()
{
	if($(".destinationMedia").length)
	{
		$(".destinationMedia").each(function() {
			var options = {
				overlayBgColor: '#000',
				overlayOpacity: 0.6,
				imageLoading: '/resources/images/lightbox/lightbox-ico-loading.gif',
				imageBtnClose: '/resources/images/lightbox/lightbox-btn-close.gif',
				imageBtnPrev: '/resources/images/lightbox/lightbox-btn-next.gif',
				imageBtnNext: '/resources/images/lightbox/lightbox-btn-prev.gif',
				imageBlank:	  '/resources/images/lightbox/lightbox-blank.gif',
				containerResizeSpeed: 350
			};
			
			$(this).lightBox(options);
		});
	}
}


function detailRatingEvents() 
{
	var detailPage = $("#itineraryInfoDetail .rating");
	
	if(detailPage.length && $("#starVariableRating").length == 0)
	{
		var loginHref = $("#addToFavWindow #addToFavSignIn").attr("href");
		$("#addToFavWindow").append('<p id="ratingMustSignIn" style="display:none">You must <a href="' + loginHref + '">sign in</a> to rate.</p>');
		
		$(detailPage).mouseout(function() {
			isOverAddToFav = false;
			addToFavInterval = setInterval("hideAddToFav()", 50);			
		}).mouseover(function() {
			$("#addToFavWindow p").hide();
			var position = detailPage.position();	
			var cssObj = {
							top:  position.top - 55,
							left: position.left
						 };
			
			$("#addToFavWindow").css(cssObj).show();			
			$("#addToFavWindow #ratingMustSignIn").show();
			isOverAddToFav = true;
		});
		
		$("#addToFavWindow").mouseleave(function() {
			$("#addToFavWindow").hide();
			$("#addToFavWindow p").show();
			$("#addToFavWindow #ratingMustSignIn").hide();
			isOverAddToFav = false;
		}).mouseenter(function() {
			isOverAddToFav = true;
		});
		
	}
}


// get param from url
function getURLParam(paramName, url)
{
	paramName 	= paramName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var str 	= "[\\?&]" + paramName + "=([^&#]*)";
	var regexp	= new RegExp( str );
	var url 	= url || window.location.href;
	var results = regexp.exec(url);
	
	if(results == null)
		return "";
	else
		return results[1];
}