/* --------->> PRELOAD IMAGES <<------------------------------------------------------------------------*/
img1 = new Image();
img1.src = "/images/layout/btn_view_hover.jpg";
img2 = new Image();
img2.src = "/images/layout/btn_edit_hover.jpg";
img3 = new Image();
img3.src = "/images/layout/btn_ordernow_yellow.jpg";
img4 = new Image();
img4.src = "/images/layout/btn_send_hover.jpg";
img5 = new Image();
img5.src = "/images/layout/cart_hover.gif";
img6 = new Image();
img6.src = "/images/layout/banner_btn1_hover.jpg";
img7 = new Image();
img7.src = "/images/layout/banner_btn2_hover.jpg";
img8 = new Image();
img8.src = "/images/layout/banner_btn3_hover.jpg";
img9 = new Image();
img9.src = "/images/layout/login_btn_hover.jpg";
img10 = new Image();
img10.src = "/images/layout/sidemenu_item_hover.jpg";


/* --------->> INIT AFTER LOAD <<-----------------------------------------------------------------------*/
$(document).ready(function() {
	if (document.getElementById("landing_page")) { 
		// setup ul.tabs to work as tabs for each div directly under div.panes 
		$("ul.tabs-yspnc").tabs("div.panes-custom > div", {effect: 'fade'}); 
			
		//check to see if there is an error message
		if (document.getElementById("login_messages").innerHTML.trim() != "") {
			$("#login_messages").css("display", "block");
		}
		
	} else { 
		var w = $(".banner-title").width();
		$("#yspnc_internal").css("left", (w - 10) + "px");
		
		if ($("#page_tabs").length > 0) {
			$("#content_wrapper").css("margin-top", "36px");
		}
		
		if ($("#org_site").length > 0 && $("ul.tabs-yspnc").length > 0) { 
			$("ul.tabs-yspnc").tabs("div.panes-custom > div", {effect: 'fade'});  //{effect: 'ajax'}
		}
	}
	
	$(".selectThis").click( function() { this.select(); });

/*
	$("#styleswitcher").click(function() { switchStylesheet(this.getAttribute("rel")); return false; });
	var c = readCookie("style");
	if (c) switchStylesheet(c);
*/
});


/* --------->> PARSING METHODS <<-----------------------------------------------------------------------*/
	//This function returns an array of Key,Value strings from any given query string
    //even numbered items represent Keys ... odd numbered items represent Values
function parseKeyValues(queryString) { 
	if (queryString.charAt(0) == "?") {
	  queryString = queryString.substring(1); //removes '?' from string 
	}
	
	var pairs = queryString.split("&"); //array of strings key=value
	var elements = new Array();
	
	for(var i=0; i<pairs.length; i++) {
	  var keyVal = pairs[i].split("=");
	  elements[i * 2] = keyVal[0];
	  elements[i * 2 + 1] = keyVal[1];
	}
	return elements;
}
      
	//This function returns an array of Key,Value strings from any given query string
function getValue(elements,key) {         
	for(var i=0; i<elements.length ; i+=2) {
	  if (elements[i] == key) {
		  return elements[i+1]
	  }
	}
	return null; //if key doesn't exist, returns null
}


/* --------->> STRING MANIPULATION <<------------------------------------------------------------------*/
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }
String.prototype.ltrim = function() { return this.replace(/^\s+/, ""); }
String.prototype.rtrim = function() { return this.replace(/\s+$/, ""); }

   //Itemize characters to remove
function cleanPhone (str) { return str.replace(/[\(\)\.\-\s,]/g, ""); }
   //Remove all non-digits
function stripPhone (str) { return str.replace(/[^\d]/g, ""); }

 // REPLACE ALL INSTANCES OF GIVEN SUBSTRING 
String.prototype.replaceAll = function(strTarget, strSubString) {
	var strText = this;
	var intIndexOfMatch = strText.indexOf(strTarget);

	while (intIndexOfMatch != -1) {
		strText = strText.replace(strTarget, strSubString)
		intIndexOfMatch = strText.indexOf(strTarget);
	}

	return (strText);
}

/* --------->> PROTOTYPE MATH <<---------------------------------------------------------------------------*/
Array.prototype.sum = function() {
	for (var i = 0, sum = 0; i < this.length; sum += this[i++]);
	return sum;
}
Array.prototype.max = function() { return Math.max.apply({}, this) }
Array.prototype.min = function() { return Math.min.apply({}, this) }


/* --------->> EVENT DELEGATION <<-------------------------------------------------------------------------*/
function getTarget(e) {
	e = e || window.event;
	return e.target || e.srcElement;
}

function getTargetClass(e, strClassName) {
	var target = getTarget(e);

	strClassName = strClassName.replace(/\-/g, "\\-");
	var regex = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");

	while (target != document) {
		if (target.className && regex.test(target.className)) return target;
		else target = target.parentNode;
	}

	return null;
}


/* --------->> FORM VALIDATION <<---------------------------------------------------------------------------*/
function validateNoBlank(field) {
	return (field.value == "") ? (getLabel(field).innerHTML + " may not be empty.") : null;
}
function validateSelection(field) {
	return (field.value == "-1") ? ("Please select a " + getLabel(field).innerHTML) : null;
}
function validateEmail(field) {
	var pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
	return (!pattern.test(field.value)) ? (getLabel(field).innerHTML + " is not a valid email address.") : null;
}
function getLabel(field) { //!! make sure to add For labels
	var labels = document.getElementsByTagName("label");
	for (var i = 0; i < labels.length; i++) {
		if (labels[i].htmlFor == field.id) return labels[i];
	}
}

function setReadOnly(fieldID) {
	var field = document.getElementById(fieldID);
	if (field.nodeName == "INPUT" || field.nodeName == "TEXTAREA") {
		field.readOnly = true;
	} else if (field.nodeName == "SELECT") {
		var displayField = document.getElementById(field.id + "_display");
		if (field.selectedIndex >= 0) {
			displayField.value = (field.selectedIndex == 0) ? "" : field.options[field.selectedIndex].text;
		} else {
			displayField.value = "";
		}
		displayField.style.display = "block";
		field.style.display = "none";
	}
}

function unsetReadOnly(fieldID) {
	var field = document.getElementById(fieldID);
	if (field.nodeName == "INPUT" || field.nodeName == "TEXTAREA") {
		field.readOnly = false;
	} else if (field.nodeName == "SELECT") {
		document.getElementById(field.id + "_display").style.display = "none";
		if (field.options.length > 0) {
			field.style.display = "block";
		}
	}
}

function setButton(buttonID, text, onclickFunction) {
	var button = document.getElementById(buttonID);
	button.value = text;
	button.onclick = onclickFunction;
}

function setDropDown(selectBox, valueToMatch) {
	var el = document.getElementById(selectBox);
	var options = el.options;
	for (var i = 0; i < options.length; i++) {
		if (options[i].value == valueToMatch)
			el.selectedIndex = i;
	}
}

function clearFields(containerID) {	//use with <fieldset>
	var fields = getElementsByClassName(document.getElementById(containerID), "*", "field");
   	for (var i = 0; i < fields.length; i++) {
   		var field = fields[i];
   		if (field.nodeName == "INPUT") {
   			var type = field.getAttribute("type");
   			if (type == "text" || type == "hidden") {
   				field.value = "";
   			} else if (type == "checkbox") {
   				field.checked = false;
   			}
   		} else if (field.nodeName == "SELECT") {
   			field.selectedIndex = 0;
   		} else if (field.nodeName == "TEXTAREA") {

   			if (field.style.setAttribute) field.innerText = "";
   			else field.value = "";
   		}
   		field.style.backgroundColor = "white";
   	}
}


/* --------->> POPUP WINDOWS & REDIRECTS <<----------------------------------------------------------------*/
//function openWindow(url, h, w) {
	//window.open(url, "PopUp", "scrollbars=yes,toolbar=no,menubar=no,statusbar=no,resizable=yes,width="+w+",height="+h+",left=50,top=50");
//}

function urlJump(url) { window.location.href = url; }


/* --------->> JQUERY STUFF <<-----------------------------------------------------------------------------*/  

//Varous events
function fadeOut(target) {
  $(target).fadeOut("fast");    
}
function fadeIn(target) {
  $(target).fadeIn("fast");    
}
function slideUp(target) {
  $(target).slideUp("fast");    
}
function slideDown(target) {
  $(target).slideDown("fast");
}   
function quickHide(target) {
  $(target).hide();    
}
function quickShow(target) {
  $(target).show();
} 
 
 
/* --------->> jQuery AJAX <<---------------------------------------------------------------------------------------*/
	/* 
	 ** The following snippet is an example of how to call ajax method **
		$(document).ready(function() {
			ajax("PageName.php/pageMethodName", {key:value, key:value}, callbackFunction_CB, errorFunction_CB);
		});
		
	 ** Callback function example **
		function callbackFunction_CB(result) {
			var obj = JSON.parse(result.d);
			alert (obj.name);
			//remember to use [indexing] if obj is an array
		}
	*/

function ajax(methodName, params, successFunction, errorFunction) {
	$.ajax({
		type: "POST",
		url: methodName,
		data: JSON.stringify(params),
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: successFunction,
		error: errorFunction
	});
}

function ajaxError(result) {
	var error = JSON.parse(result.responseText);
	jAlert("Error: " + error.Message + "\r\n\r\n" + error.StackTrace, "Error");
}

/* --------->> Stylesheet Toggler <<---------------------------------------------------------------------*/
function switchStylesheet(styleName) {
	$("link[@rel*=stylesheet][title]").each(function(i) {
		this.disabled = true;
		if (this.getAttribute("title").match(styleName)) this.disabled = false;
	});
	
	var switcher = document.getElementById("styleswitcher");
	switcher.innerHTML = (styleName == "printfriendly") ? "Normal Layout Version" : "Text Version";
	switcher.rel = (styleName == "printfriendly") ? "default" : "printfriendly";

	createCookie("style", styleName, 365);
}

/* --------->> Cookie Manager <<--------------------------------------------------------------------------*/
function createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	}
	else var expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name, "", -1);
}

