/**** BASE RULES ****/ 
$(document).ready(
	
	function(){
        addCookieEnabled();
		//initialize jtip
       $("a.jTip")
	   .hover(function(){$('#JT').remove();JT_show(this.href,this.id,this.name);},function(){$('#JT').remove()})
       .click(function(){$('#JT').remove();return true;});
       
       $("input.jTip, select.jTip")
	   .focus(function(){$('#JT').remove();JT_show(this.alt,this.id,this.title);},function(){$('#JT').remove()})
       .blur(function(){$('#JT').remove();return true;});	
           
		//text fields
		$("input.text-field, textarea.text-field")
		.focus(function(){$(this).css("background-color","#DDD")})
		.blur(function(){$(this).css("background-color","#FFF")});
		
		//zip check
		$("input.zip")
		.keyup(function(){
						var zip = $(this).val();
						if ( isValidZip(zip) ){
								 getZipInfo(zip);
						}	
		});
		
		//force number only field
		$("input.num")
		.keyup(function(){
						var val = $(this).val();
						if(isNaN(val)){
							$(this).val(forceNum(val));
						}
		});
		
		//header search box
		$("input.header-text-field")
		.focus(function(){
				if($(this).val() == "Enter recipe name..."){
					$(this).val("");					
					$(this).css("color","#000");
				}
		})
		.blur(function(){
				if($(this).val() == ""){
					$(this).val("Enter recipe name...");					
					$(this).css("color","#BBB");
				}
		});
		
		
		$("input.email")
		.keyup(function(){
							var email = $(this).val();
							if( isValidEmail(email) ){
								$(this).css("background-color","#DDD");
							}else{
								$(this).css("background-color","#FBB");
							}

						});


		$("input.pw")
		.keyup(function(){
							var pw = $(this).val();
							if( isValidPW(pw) ){
								$(this).css("background-color","#DDD");
							}else{
								$(this).css("background-color","#FBB");
							}

						});
           
		$(window).resize(centerMod);		
		//take care of IE
		if($.browser.msie){
			if(navigator.appVersion.indexOf("MSIE 6.") > 0  ){
				var c= document.styleSheets[0];
				c.addRule('#accounts-mod','top: expression(eval(document.documentElement.scrollTop + 50));');
				c.addRule('.fixed','top: expression(eval(document.documentElement.scrollTop));');
				c.addRule('body','background-attachment: fixed;');
				document.execCommand('BackgroundImageCache',false,true);  
			}
			$("textarea.jTip")//ff doesnt like this
	   		.focus(function(){$('#JT').remove();JT_show(this.alt,this.id,this.title);},function(){$('#JT').remove()})
       		.blur(function(){$('#JT').remove();return true;});	
		}
	}
);

/********BASE FUNCTIONS************/

/*
*
* FORMS
*
*/

function openEmailPage(email){
	var mailbox = "";
	var domain = email.substring(email.indexOf("@") + 1, email.length);
	switch(domain){
		case "yahoo.com":
			mailbox="mail.yahoo.com";
			break;
		case "gmail.com":
			mailbox="mail.google.com";
			break;
		case "aol.com":
			mailbox="mail.aol.com";
			break;
	}
	
	if (mailbox != ""){
		setTimeOut(window.open("http://" + mailbox, 'mailbox', ''), 1500);
	}
}

function isValidEmail(val){
	if(!(/^($)|(((?:\w+[^\w\s@]?)+)@((?:[^\.@\s]+\.)+[a-z]{2,}|(?:\d{1,3}\.){3}\d{1,3})$)/.test(val)) ){
		return false;
	}else{
		return true;
	}
}

function doesPWMatch(pw1, pw2){
	var $pw1 = $("#" + pw1);
	var $pw2 = $("#" + pw2);
	var pw1 = $pw1.val();
	var pw2 = $pw2.val();
	if($pw1.val() != $pw2.val()){
		return false;
	}
}


function isValidPW(val){
	if((val.length >= 6 && val.length < 25)|| val.length == 0 ){
		return true;
	}else{
		return false;
	}
}

function forceNum(val){
	return val.replace(/[^0-9]/gi,"");
}

function isValidZip(val){
	if( val.length == 5 && !isNaN(val) ){
		return true;
	}else{
		return false;
	}
}

function getZipInfo(zip){
	$zipDataCont = $("#zipDataCont");
	$.post("/data/getInfoByZip", {type: "data"}, function(data) {
			$zipDataCont.html(data);
	});
}

/************MODALS***********************/



/*
*
* Submit forms
*
*/
function resendVerification() {
	showMod('waiting');
	$.post("/accounts/ResendVerification", {type: "data"}, function(data) {
			showMod("verification");	
			accountsModError("The verification email has been resent.", "verification");
		} );
}

function submitRegistration(){
	var first_name = $("#accounts-mod #register-mod input[@name='first_name']").val();
	var last_name = $("#accounts-mod #register-mod input[@name='last_name']").val();
	var email = $("#accounts-mod #register-mod input[@name='email']").val();
	var pw = $("#accounts-mod #register-mod input[@name='p']").val();
	var gender = $("#accounts-mod #register-mod input[@name='gender']").val();
	var birth_year = $("#accounts-mod #register-mod input[@name='birth_year']").val();
	var zip_code = $("#accounts-mod #register-mod input[@name='zip_code']").val();
	if( !isValidEmail(email) ){
		accountsModError("Please Enter a valid email...", "register");
		return false;
	}
	if( !isValidPW(pw) ){
		accountsModError("Please Enter a password with atleast 6 characters...", "register");
		return false;
	}
	showMod("waiting");
	var status_code;
	$.post("/accounts/Register", { first_name: first_name, last_name: last_name, email: email, p: pw, zip_code: zip_code, gender: gender, birth_year: birth_year, type: "data" }, 
		function(data){
			switch(data){
				case '0':changeLoggedInStatus(email);
						 verifyAccount(email);
						 break;
				case '1':showMod("register");
						 accountsModError("This email is already taken", "register");
						 break;
				case '2':showMod("register");
						 accountsModPWError("register");
						 break;
				case '3':showMod("register");
						 accountsModEmailError("register");
						 break;
				default: accountsModError("There was no response from the server", "register");
						 break;
			} 
		}
     );
}

function submitLogin(){
	var email = $("#accounts-mod #login-mod input[@name='email']").val();
	var pw = $("#accounts-mod #login-mod input[@name='p']").val();
	if( !isValidEmail(email) ){
		accountsModError("Please Enter a valid email...", "login");
		return false;
	}
	if( !isValidPW(pw) || pw == "" ){
		accountsModError("Please Enter a valid password...", "login");
		return false;
	}
	showMod("waiting");
	var status_code;
	$.post("/accounts/Login", { email: email, p: pw, type: "data" }, 
		function(data){
			switch(data){
				case '0':confirmAccountsMod("You have succesfully logged in to familyoven.com, roam free!");
						 changeLoggedInStatus(email);
						 break;
				case '1':showMod("login");
						 accountsModError("That email and password combination is not valid.<br/>", "login");
						 break;
				case '3':showMod("verification");
						 accountsModError("Oops! Your email has not been verified yet. Please check your email and enter the verification code below.", "verification");
						 break;
				default: accountsModError("no response from server", "login");
					     break;
			} 
		}
     );		
}


function submitForgotPW(){
	var email = $("#accounts-mod #forgot-pw-mod input[@name='email']").val();
	if( !isValidEmail(email) ){
		accountsModError("Please Enter a valid email...", "forgot-pw");
		return false;
	}
	showMod("waiting");
	var status_code;
	
	$.post("/accounts/ForgotPassword", { email: email, type: "data" }, 
		function(data){
			switch(data){
				case '0':confirmAccountsMod("Your password has been sent to " + email);
						 openEmailPage(email);
						 break;
				case '1':showMod("forgot-pw");
						 accountsModError("That email is not registered. <br> <a href='javascript:void(0);' onclick='showRegistration()'>Register Here</a><br>", "forgot-pw");
						 break;
				default: accountsModError("no response from server", "forgot-pw");
						 break;
			} 
		}
     );		
}

function submitVerification(){
	var verificationCode = $("#accounts-mod #verification-mod input[@name='m']").val();
	showMod("waiting");
	$.get("/accounts/Verify", { m: verificationCode, type: "data" },
				function (data) {
					var returnData = data.split(',');
					switch(returnData[0]){
						case '0': 	changeLoggedInStatus(returnData[1]);
									confirmAccountsMod("Woohoo! Your email has been verified.");					
									break;
						case '1':	showMod("verification");
									accountsModError("Sorry! You have entered the wrong verification code.", "verification");
						default : 	break;
					}
				}
			 );
	
}

function disableSite(func){
	var h= document.documentElement.scrollHeight > document.documentElement.offsetHeight ? document.documentElement.scrollHeight:document.documentElement.offsetHeight;
	var $cover = $('#cover');
	$cover.css("height",h + 'px');
	$cover.css("display","block");
	$('.animated').css("visibility","hidden");
	$cover.animate({ opacity: 0.5 }, 100, function(){eval(func)});
}

function enableSite(){
	var $cover = $('#cover');
	$cover.animate({ opacity: 0.0 }, 600, function(){ 	$cover.css("display","none"); });
	$('.animated').css("visibility","visible");
}

function hideAllMods(){
	cleanAccountsMod();
	$("#register-mod, #login-mod, #forgot-pw-mod, #verification-mod, #confirm-mod, #waiting-mod").hide();
}

function cancelAccountsMods(){
	enableSite();
	hideAccountsMod();
}

function centerMod(){
	var x = Math.round((document.documentElement.clientWidth * .5) - 330);
	$("#accounts-mod").css("left",x + 'px');	
}

function showMod(name, ref){
	//get modal html
	accountsModExist = $("body").find("#accounts-mod").html();
	if (accountsModExist == null){
		$.get("/modules/modals/accounts_modals.jsp", { type: "data" },
			function(data){
				$("body").prepend(data);
				centerMod();
				hideAllMods();
				if (ref == undefined){
					refered = "Modal Request - ";
				}else{
					refered = ref;
				}
				foaUsageLog(window.location, refered + " " + name);
				$("#accounts-mod #" + name + "-mod").show();
				var showModFunc = "$(\"#accounts-mod\").show()";
				disableSite(showModFunc);
			}
		);
	}else{
		centerMod();
		hideAllMods();
		if (ref == undefined){
			refered = "Modal Request - ";
		}else{
			refered = ref;
		}
		foaUsageLog(window.location, refered + " " + name);
		$("#accounts-mod #" + name + "-mod").show();
		return true;	
	}
	
}

function showAccountsMod(modName, ref){
	centerMod();
	hideAllMods();
	if (showMod(modName, ref)){
		var showModFunc = "$(\"#accounts-mod\").show()";
		disableSite(showModFunc);
	}
}

function hideAccountsMod(){
	$("#accounts-mod").fadeOut("medium", function(){hideAllMods();});
}

function showAccountsModWaiting(){
	hideAllMods();
	$("#accounts-mod #waiting").show();
}

function confirmAccountsMod(msg){
	var $confirm = $("#accounts-mod #confirm-mod");
	hideAllMods();
	$confirm.find("span").html(msg);
	$confirm.show();
}

function accountsModError(msg,form){
	$('#accounts-mod #' + form + '-mod .error-text').html(msg).show();
}

function verifyAccount(email){
	hideAllMods();
	showMod("verification");
	openEmailPage(email);
}

function accountsModPWError(form){
	cleanAccountsMod();
	accountsModError("Please enter your password", form);
}

function accountsModEmailError(form){
	cleanAccountsMod();
	accountsModError("Please enter your email", form);
}

function changeLoggedInStatus(name){
	$("#inner-cont1-right #log-out").show();
	$("#inner-cont1-right #log-in").hide();
	hasCookie = true;
}

function registerOrLogin(ref){
	
	if(hasCookie == false){
		showAccountsMod('register', ref);
	}else{
		showAccountsMod('login', ref);
	}
	
}


function cleanAccountsMod(){
	$("#accounts-mod .error").html("").hide();
	$("#accounts-mod .pw").css("background-color","#FFF").css("border","1px solid #AAA").val("");
	$("#accounts-mod .email").css("background-color","#FFF").css("border","1px solid #AAA");
}




/* JTIP */

function JT_show(url,linkId,title){
	var queryString = "";
	var params = "";
		queryString = url.replace(/^[^\?]+\??/,'');
		params = parseQuery( queryString );

	
	if(title == false)title="&nbsp;";
	var de = document.documentElement;
	var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	
	if(params['width'] === undefined){params['width'] = 250};
	if(params['offsetx'] === undefined){params['offsetx'] = 0};
	if(params['offsety'] === undefined){params['offsety'] = 0};
	if(params['showarrow'] === undefined){params['showarrow'] = "yes"};

	var hasArea = w - getAbsoluteLeft(linkId);
	var clickElementy = getAbsoluteTop(linkId) + 8 + (params['offsety']/1); //set y position


	if(params['side'] == 'right'){
		var arrowLeft = "<div></div>";
		if (params['showarrow'] == "yes"){
			arrowLeft = "<div id='JT_arrow_left'></div>";
		}
		$("body").append("<div id='JT'><div id='JT_inner_right' style='width:"+params['width']*1+"px'>" +
						 arrowLeft +
						"<div id='JT_close_left'>"+title+"</div>" +
						"<div id='JT_copy'><div class='JT_loader'><div></div></div></div>"); //right side
						  
		var arrowOffset = getElementWidth(linkId) + 20;
		var clickElementx = getAbsoluteLeft(linkId) + (params['offsetx']/1) + arrowOffset ; //set x position
	}else{
		var arrowRight = "<div></div>";
		if (params['showarrow'] == "yes"){
			arrowRight = "<div id='JT_arrow_right' style='left:"+((params['width']*1)+1)+"px'></div>";
		}
		$("body").append("<div id='JT'><div id='JT_inner_left' style='width:"+params['width']*1+"px'>" +
						arrowRight +
						"<div id='JT_close_right'>"+title+"</div>" + 
						"<div id='JT_copy'><div class='JT_loader'><div></div></div></div>"); //left side
		var clickElementx = getAbsoluteLeft(linkId) - ((params['width']*1) + 30) + (params['offsetx']/1); //set x position
		
	}
	
	
	//load data
	if(title == "Recipe Picture"){
		position_JT(clickElementx, clickElementy, params);
		$('#JT_copy').load("/data/GetLuceneIndexData?field=pic&index=" + params['picid'],function(){$('#JT .JT_loader').hide();position_JT(clickElementx, clickElementy, params);});
	}else{
		var content = $("div."+linkId).find("p").html();
		if(params['link'] !== undefined){
			$('#JT_copy').load(params['link']+ "?id=" + params['id'],function(){$('#JT .JT_loader').hide();});
		}else{
			$('#JT_copy').append(content);
			$('#JT .JT_loader').hide();
		}
		position_JT(clickElementx, clickElementy, params);
	}
}

function position_JT(clickElementx, clickElementy, params){
	$('#JT').css({left: clickElementx+"px", top: clickElementy+"px"});
	if(params['fade'] == 'fast'){
		$('#JT').fadeIn("medium");
	}else{
		$('#JT').show();
	}
	if(params['position'] != 'level'){
		$('#JT_arrow_left,#JT_arrow_right').css({top: $('#JT_copy').height()/2+"px"});
		clickElementy = clickElementy - ($('#JT_copy').height()/2);
		$('#JT').css({top: clickElementy+"px"});
	}else{
		$('#JT').css({top: clickElementy+"px"});
	}	
}

function trackPage(name){
	$.post("/pagetracker/Tracker",
				{ name: name}
			 );
}

function getElementWidth(objectId) {
	x = document.getElementById(objectId);
	return x.offsetWidth;
}


function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	o = document.getElementById(objectId);
	oLeft = o.offsetLeft;            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent;    // Get parent object reference
		oLeft += oParent.offsetLeft; // Add parent left position
		o = oParent;
	}
	return oLeft;
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	o = document.getElementById(objectId);
	oTop = o.offsetTop;            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent;  // Get parent object reference
		oTop += oParent.offsetTop; // Add parent top position
		o = oParent;
	}
	return oTop;
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function blockEvents(evt) {
              if(evt.target){
              evt.preventDefault();
              }else{
              evt.returnValue = false;
              }
}

 function saveRecipeFromList( rId ){
	foaUsageLog(window.location, "Save Recipe From List");
	$.post("/members/saveRecipe?async=true", { r: rId, type: "data" }, 
		function(data){
			switch(data){
				case '0':	//recipe saved  or already saved
				case '1':	$('#save-recipe-' + rId).hide();
							$('#saved-recipe-' + rId).show();
						 	return true;
				case 'A1':	registerOrLogin("Save Recipe From List");
							$('#save-recipe-' + rId).show();
							break;
				case 'A2':	registerOrLogin("Save Recipe From List");
							$('#save-recipe-' + rId).show();
							break;
				default:	alert("Error");
							break;
			}
		}
	);

}

 function saveBeverageFromList( bId ){
	$.post("/members/saveBeverage?async=true", { b: bId, type: "data" }, 
		function(data){
			switch(data){
				case '0':	//recipe saved  or already saved
				case '1':	$('#save-beverage-' + bId).hide();
							$('#saved-beverage-' + bId).show();
						 	return true;
				case 'A1':	registerOrLogin("Save Recipe From List");
							$('#save-beverage-' + bId).show();
							break;
				case 'A2':	registerOrLogin("Save Recipe From List");
							$('#save-beverage-' + bId).show();
							break;
				default:	alert("Error");
							break;
			}
		}
	);

}

 function saveVideoFromList( vId ){
	$.post("/members/saveVideo?async=true", { v: vId, type: "data" }, 
		function(data){
			switch(data){
				case '0':	//recipe saved  or already saved
				case '1':	$('#save-video-' + vId).hide();
							$('#saved-video-' + vId).show();
						 	return true;
				case 'A1':	registerOrLogin("Save Recipe From List");
							$('#save-video-' + vId).show();
							break;
				case 'A2':	registerOrLogin("Save Recipe From List");
							$('#save-video-' + vId).show();
							break;
				default:	alert("Error");
							break;
			}
		}
	);

}
/* FO ANALYTICS (FOA) */

function foaUsageLog(pageUrl, refUrl){
	$.post("/analytics/usage", { page_url: refUrl, ref_url: pageUrl }, 
		function(data){
			switch(data){
				case '0'://error?
						 break;
				default: //error?
						 break;
			} 
		}
	 );		
}

function stopBubble(e) {
	if(!e) {
		e=window.event;
	}
	e.cancelBubble=true;
}

function setSelRange(inputEl, selStart, selEnd) {
	if (inputEl.setSelectionRange) {
		inputEl.focus();
		inputEl.setSelectionRange(selStart, selEnd);
	}else if (inputEl.createTextRange) {
		var range = inputEl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selEnd);
		range.moveStart('character', selStart);
		range.select();
	}
}


function isValidName(nameStr){
	if ( !(/^(([a-zA-Z]+)(['\-]{0,1})([a-zA-Z]+)[ ]*)*$/.test(nameStr)) || /(\S)(\1{2,})/.test(nameStr) || nameStr.length <=1 ){
		return false;
	}	
	return true;
}
function addCookieEnabled( ) {
  var tmpcookie = new Date();
  chkcookie = (tmpcookie.getTime() + '');
  if (document.cookie.indexOf(chkcookie,0) < 0) {
    document.cookie = "chkcookie=" + chkcookie + "; path=/";
  } 
} 		
function ismaxlength(obj){
		var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
		if (obj.getAttribute && obj.value.length>mlength)
		obj.value=obj.value.substring(0,mlength)
}
function showNewsItems(id, type){
	$('#' + id + '-' + type + '-hide').show();
	$('#' + id + '-' + type + '-display').show();
	$('#' + id + '-' + type + '-show').hide();
}
function hideNewsItems(id, type){
	$('#' + id + '-' + type + '-hide').hide();
	$('#' + id + '-' + type + '-display').hide();
	$('#' + id + '-' + type + '-show').show();
}

function deleteInboxMessage(id, reqr){
	$.post("/members/message/delete?async=true", { m: id, requestor: reqr, type: "data" }, 
		function(data){
			switch(data){
				case '0':	//recipe saved  or already saved
				case '1':	$("#message-" + id).remove();
						 	return true;
				default:	alert("Error");
							break;
			}
		}
	);
}

function friendRequestAction(fRId, action){
	$.post("/members/friends/friendRequestAction?async=true", { fRId: fRId, action: action, type: "data" }, 
		function(data){
			switch(data){
				case '0':	//already acted upon
				case '1':	$("#friend-request-" + fRId + " div.request").hide();
							$("#friend-request-" + fRId + " div." + action).show();
						 	break;
				default:	alert("Error");
							break;
			}
		}
	);
	return true;
}

function filterList(q, listName){
		var name = ""; 
		var rowName = ".select-" + listName + "-name a";
		var $rows = $(".select-" + listName);
		$rows.show();
		$rows.each(
			function(){
				name = $.trim($(this).find(rowName).html());
				if (q.length <= 2){
					var reg = new RegExp("(^" + q + ".*)", "i");
				}else{
					var reg = new RegExp(".*" + q + ".*", "i");
				}					
				if (reg.exec(name) == null ){
					$(this).hide();
				}
			}
		);
}