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+$/,"");
}
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function findPosX(obj)
	{
	var curleft = 0;
	if(obj.offsetParent)
		while(1) 
			{
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
			}
	else if(obj.x)
		curleft += obj.x;
	return curleft;
	}
function findPosY(obj)
	{
	var curtop = 0;
	if(obj.offsetParent)
		while(1)
			{
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
			}
		else if(obj.y)
			curtop += obj.y;
	return curtop;
	}
function isEmail(elm) {
	var reg = /^([A-Za-z0-9_\-\.\'])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(!reg.test(elm.value)) {
	  return false;
	}
	return true;
}
function isPhone(elm) {
	var str = elm.value;
	str = str.replace(/[-.()\s]/g,'');
	if(str.length > 10) 
		{
		str = str.substr(1,10);
		}
	str = "1-" + str.substr(0,3) + "-" + str.substr(3,3) + "-" + str.substr(6,4);
	//alert(str);
	if((str.match(/^(1?[-.]?\d{3}[-.]?\d{3}[-.]?\d{4})$/) != null)){
		//str = str.replace(/[-.]/g,'');
		elm.value = str;//"1-" + str.substr(0,3) + "-" + str.substr(3,3) + "-" + str.substr(6,4);
		return true; 
	}
	return false;
}	
function isUSZIP(elm) {
	return (elm.value.match(/^\d{5}$/) != null || elm.value.match(/^\d{5}-\d{4}$/) != null); 
}	
function isCAZIP(elm) {
	if(elm.value.match(/^[a-zA-Z]\d[a-zA-Z] ?\d[a-zA-Z]\d$/) != null) {
		var str = elm.value.toUpperCase();
		str = str.replace(/ /g,'');
		elm.value = str.substr(0,3) + " " + str.substr(3,3);
		return true;
	}
	return false;
}	
function isFilled(elm) {
	if (elm.value == null || trim(elm.value) !="")
		return true;
	else return false;
}
function numericValidate(val, label, notReq)
	{
	if(notReq && val == '')
		return true;
	if(val == '' || isNaN(val) == true)
		{
		alert(label + ' value is not a valid number.'); 
		return false;
		}
	return true;
	}

function positiveNumericValidate(val, label, required, zeroAllowed)
	{
	if(!numericValidate(val, label, !required))
		return false;
	if(zeroAllowed && val <0)
		{
		alert(label + ' value should be greater than or equal 0.'); 
		return false;
		}
	else if (!zeroAllowed && val <=0)
		{
		alert(label + ' value should be greater than 0.'); 
		return false;
		}
	return true;
	}
function onControlUpdate(obj)
	{
	obj.style.backgroundColor = "#FFFF0F";
	needToConfirm = true;
	}
function validateProductQuantity(form)
	{
	var prodId;
	if(form.elements['add_prod_ID_1'] != null)
		{
		prodId = form.elements['add_prod_ID_1'].options[form.elements['add_prod_ID_1'].selectedIndex].value;
		}
	else
		{
		prodId = form.elements['add_prod_ID'].value;
		}
	var qntAvail = form.elements['prod_qnt_' + prodId].value;
	var qnt = form.elements['quantity'].value;

	if(qntAvail != "")
		{
		var qntAvail_in_cart = form.elements['prod_qnt_' + prodId + '_not_in_cart'].value;
		if(Number(qntAvail_in_cart) != Number(qntAvail) && Number(qntAvail_in_cart) < Number(qnt))
			{
			alert("At this moment there " + qntAvail + " items in stock and " + (Number(qntAvail)-Number(qntAvail_in_cart)) + " of them are already in cart.\nPlease change items quantity you would like to order to meet limitations.");
			//There are currently xx of sku xxx in your cart.  There is xx additional items in stock ready to ship.
			return false;
			}
		else if(Number(qntAvail) < Number(qnt))
			{
			alert("At this moment there " + qntAvail + " items in stock. Please change items quantity you would like to order.");
			return false;
			}
		}
	return true;
	}

function validateProductQuantity_outofstock(form)
	{
	var prodId;
	if(form.elements['add_prod_ID_1'] != null)
		{
		prodId = form.elements['add_prod_ID_1'].options[form.elements['add_prod_ID_1'].selectedIndex].value;
		}
	else
		{
		prodId = form.elements['add_prod_ID'].value;
		}
	var qntAvail = form.elements['prod_qnt_' + prodId].value;
	var qnt = form.elements['quantity'].value;

	if(qntAvail != "")
		{
		var qntAvail_in_cart = form.elements['prod_qnt_' + prodId + '_not_in_cart'].value;
		if(Number(qntAvail_in_cart) != Number(qntAvail) && Number(qntAvail_in_cart) < Number(qnt))
			{
			alert("At this moment there " + qntAvail + " items in stock and " + (Number(qntAvail)-Number(qntAvail_in_cart)) + " of them are already in cart.\nThe remaining balance of " + qntAvail + " be backordered unless you update the quantity.");
			//There are currently xx of sku xxx in your cart.  There is xx additional items in stock ready to ship.
			//return true;
			}
		else if(Number(qntAvail) < Number(qnt))
			{
			alert("At this moment there " + qntAvail + " items in stock. The remaining balance of " + qntAvail + " be backordered unless you update the quantity.");
			//return false;
			}
		}
	return true;
	}

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

/*
function ValidateForm(){
	var dt=document.frmSample.txtDate
	if (isDate(dt.value)==false){
		dt.focus()
		return false
	}
    return true
 }
*/

//http://stackoverflow.com/questions/72768/how-do-you-detect-credit-card-type-based-on-number
function isValidCreditCard(type, ccnum) {
   if (type == "Visa") {
      // Visa: length 16, prefix 4, dashes optional.
      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "MC") {
      // Mastercard: length 16, prefix 51-55, dashes optional.
      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "Disc") {
      // Discover: length 16, prefix 6011, dashes optional.
      var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "AmEx") {
      // American Express: length 15, prefix 34 or 37.
      var re = /^3[4,7]\d{13}$/;
   } else if (type == "Diners") {
      // Diners: length 14, prefix 30, 36, or 38.
      var re = /^3[0,6,8]\d{12}$/;
   }
   if (!re.test(ccnum)) return false;
   // Remove all dashes for the checksum checks to eliminate negative numbers
   ccnum = ccnum.split("-").join("");
   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      checksum += parseInt(ccnum.charAt(i-1));
   }
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      var digit = parseInt(ccnum.charAt(i-1)) * 2;
      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
   }
   if ((checksum % 10) == 0) return true; else return false;
}

function clearTabs(){
	for(var tkey in tabsArray){
		var tabEl = document.getElementById(tabsArray[tkey]);
		if(tabEl != null && tabEl.className != 'tab-disabled'){
			tabEl.className = '';
		}
	}
}

function tableHide(objId, clickObj){
	var obj = document.getElementById(objId);
	if(clickObj.className == 'tab-disabled'){
		return false;
	}
	for(var key in tablesArray)
	{
		var table = tablesArray[key];
		if(objId == table){
			clearTabs();
			if(obj.style.display == "none" && clickObj.className != 'current')
			{
				obj.style.display="";
				clickObj.className += ' current';
			}
		}
		else {
			document.getElementById(table).style.display="none";
		}
	}
}

function showError(form, e, tabidx){
	var frm = document.getElementsByName(form);
	var inpt = frm[0].elements[e];
	var errorArea = document.getElementById('tabErrors');
	var position = 0;
	for(var i=0;i<tabsArray.length;i++)
	{
		if(tabsArray[i] == tabidx){
			position = i;
			break;
		}
	}
	//alert(tabidx + ":" + tabsArray[position] + " - " + document.getElementById(tabsArray[position]));
	if(tabidx != null){
		clearTabs();
		tableHide(tablesArray[position], document.getElementById(tabsArray[position]));
	}
	if(e != "" && inpt != null) {
		inpt.focus();
		if(errorArea != null){
			errorArea.innerHTML = '';
		}
	} 
	if(e != "" && errorArea != null && inpt == null){
		errorArea.innerHTML = 'Field ' + e + ' not found.';
	}
}
