// JavaScript Document

var siteURL             = "";
var imagePath           = siteURL + "/images";
var ratingClickCallback = null;

$(function() {
	createInputStars();
	
	// Navigation Menu Highlight Function
	$('div.nav-menu-item').mouseover(function()
	{
		var img = $(this).find('img');
		var src = img.attr('src').replace(/\/menu\//, '/menu-hl/');
		img.attr('src', src);
	});
	
	$('div.nav-menu-item').mouseout(function()
	{
		var img = $(this).find('img');
		var src = img.attr('src').replace(/\/menu-hl\//, '/menu/');
		img.attr('src', src);
	});
	
	// Login Box Functions
	$('.toggle-login-box').click(function()
	{
		$('#login-box').toggle();
		return false;
	});
	
	$('#login-box .close-button').click(function()
	{
		$('#login-box').hide();
	});
	
	// Search Box Functions
	$('#nav-search-text-input').focus(function()
	{
		if ($(this).val() == 'Search') $(this).val('');
	});
	
	$('#nav-search-text-input').blur(function()
	{
		if ($(this).val() == '') $(this).val('Search');
	});
	
	// Restores recipe_nav_box to last position
	select_cat_box = getCookie('recipe_nav_box');
	if (select_cat_box == 'occasion')
	{
		showRecipesByOccasion(true);
	}
	else if (select_cat_box == 'favorite')
	{
		showMyFavoriteRecipes(true);
	}
});


function h1imgswap(id, name, src, width, height)
{
	$(id).replaceWith('<img class="png32t" src="' + src + '" width="' + width + '" height="' + height + '" alt="' + name + '" />');
}


// Regular Expressions
var regexEmail = /^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/i;

/* Validation Functions */

function validEmail(email)
{
	return regexEmail.test(email);
}

function validEmails(emails)
{
	var email_list   = emails.split(',');
	var num_emails   = email_list.length;
	var emails_found = 0;
	
	for (var i = 0; i < num_emails; i++)
	{
		email = $.trim(email_list[i]);
		if (email.length == 0) continue;
		
		if ( ! validEmail(email) ) return false;
		emails_found++;
	}
	return emails_found > 0;
}

function cleanEmailsList(emails)
{
	var email_list = emails.replace(/\n|\s/g, '');
	email_list     = email_list.replace(/,+/g, ', ');
	email_list     = email_list.replace(/^,\s|,\s$/g, '');
	return email_list;
}

function formatErrorMessage(errors)
{
	var msg = 'Please fix the following errors: <ul>';
	for (i in errors)
	{
		msg += '<li>' + errors[i] + '</li>';
	}
	return msg + '</ul>';
}


/* Login box functions */

function getURL()
{
	var url = window.location.toString();
	return url;
}

function setCookie(name, value)
{
	var expireDate = new Date();
	expireDate.setDate(expireDate.getDate() + 365);
	
	document.cookie = name + "=" + escape(value) + ";expires=" + expireDate.toGMTString() + "; path=/";
}

function getCookie(name)
{
	var index = document.cookie.indexOf(name + "=");
	if (index < 0) return "";
	
	
	var start = index + name.length + 1;
	var end   = document.cookie.indexOf(";", start);
	if (end < 0) end = document.cookie.length;
	
	return unescape(document.cookie.substring(start, end));
}

/* Recipe Category sidebar functions */

function showRecipesByType(instant)
{
	var animateTime = 500;
	if (instant) animateTime = 0;
	
	setActiveRecipeCat("recipe-cat-recipes-by-type", animateTime);
	if ( ! instant) setCookie('recipe_nav_box', 'type');
	
	$("#recipe-cat-recipes-by-occasion").animate({marginTop: 153}, animateTime);
	$("#recipe-cat-my-fav-recipes").animate({marginTop: 183}, animateTime);
}

function showRecipesByOccasion(instant)
{
	var animateTime = 500;
	if (instant) animateTime = 0;
	
	setActiveRecipeCat("recipe-cat-recipes-by-occasion", animateTime);
	if ( ! instant) setCookie('recipe_nav_box', 'occasion');
	
	$("#recipe-cat-recipes-by-occasion").animate({marginTop: 30}, animateTime);
	$("#recipe-cat-my-fav-recipes").animate({marginTop: 183}, animateTime);
}

function showMyFavoriteRecipes(instant)
{
	var animateTime = 500;
	if (instant) animateTime = 0;
	
	setActiveRecipeCat("recipe-cat-my-fav-recipes", animateTime);
	if ( ! instant) setCookie('recipe_nav_box', 'favorite');
	
	$("#recipe-cat-recipes-by-occasion").animate({marginTop: 30}, animateTime);
	$("#recipe-cat-my-fav-recipes").animate({marginTop: 60}, animateTime);
}

function setActiveRecipeCat(id, animateTime)
{
	var recipeCat;
	var recipeCats = new Array("recipe-cat-recipes-by-type", "recipe-cat-recipes-by-occasion", "recipe-cat-my-fav-recipes");
	
	var slideDownTime = animateTime + 50;
	var slideUpTime   = animateTime - 50;
	
	if (animateTime < 50)
	{
		slideDownTime = 0;
		slideUpTime   = 0;
	}
	
	for (var i in recipeCats)
	{
		recipeCat = "#" + recipeCats[i];
		if (recipeCats[i] == id)
		{
			$(recipeCat).find(".recipe-cat-button").attr("src", imagePath + "/recipe-cat-box/button-collapse.png");
			$(recipeCat).children(".recipe-cat-content").slideDown(slideDownTime);
		}
		else
		{
			$(recipeCat).find(".recipe-cat-button").attr("src", imagePath + "/recipe-cat-box/button-expand.png");
			$(recipeCat).children(".recipe-cat-content").slideUp(slideUpTime);
		}
	}
}

/* User Review Star Ratings */

function createInputStars(callback)
{
	ratingClickCallback = callback;
	
	$("span.star").addClass('star-default').click(starClick);
	
	$("span.star input").each(function() {
		if ($(this).attr('checked'))
		{
			var name      = $(this).attr('name');
			var curValue  = this.id.split("-")[1];
			
			starsRefresh(name, curValue);
		}
	});
}

function starClick()
{
	var inputElem = $(this).find('input').get(0);
	var name      = $(inputElem).attr('name');
	var newValue  = parseInt(inputElem.id.split("-")[1]);
	
	if (newValue < 1 || newValue > 5) return;
	
	$(inputElem).attr('checked', true);
	starsRefresh(name, newValue);
	
	if (ratingClickCallback)
	{
		ratingClickCallback(newValue);
	}
}

function starsRefresh(name, newValue)
{	
	$("input:radio[name='" + name + "']").each(function() {
		var val = parseInt(this.id.split("-")[1]);
		if (val <= newValue)
		{
			$(this).parents("span.star").addClass("star-selected");
		}
		else
		{
			$(this).parents("span.star").removeClass("star-selected");
		}
	});
}
