//These will be useful for compressing the javascript
var doc = document;
var win = window;
//This is where we put all things that need to fire instead of body onload event
jQuery(doc).ready(function() {
	//jQuery(doc).pngFix();
	/*Cookie Check*/
	setCookie('cookietest','none');
	// if getCookie succeeds, cookies are enabled, since the cookie was successfully created.
	if ( getCookie('cookietest') == null ) jQuery('div#nocookie').show();
	delCookie('cookietest');
	/* End Cookie Check*/

	if (getCookie('referralLang') && document.location.href.indexOf('Referral.vm') == -1) {
		var referralLangISO = getCookie('referralLang');
		delCookie('referralLang');
		if(referralLangISO != userLangISO) {
			urlVarChange('userLangISO',referralLangISO);
		}
	}

	if(flCustLogon) {
		jQuery('#myAccountLinks').append(unescape('%3Cspan%3E%3Ca href="http://smalldemo.staging.qa.truition.com/edealinv/servlet/Logoff?ctl_nbr=10011090&amp;nurl=control/StoreHome.vm"%3ELog Out%3C/a%3E%3C/span%3E%3Cspan class="registerAccount"%3E%3Ca href="https://smalldemo.staging.qa.truition.com/edealinv/servlet/ExecMacro?nurl=control/MyAccount.vm&amp;ctl_nbr=10011090"%3EMy Account%3C/a%3E%3C/span%3E'));
	} else {
		jQuery('#myAccountLinks').append(unescape('%3Cspan%3E%3Ca href="https://smalldemo.staging.qa.truition.com/edealinv/servlet/ExecMacro?nurl=control/StoreLogon.vm&amp;ctl_nbr=10011090&amp;rurl=control/MyAccount.vm"%3ELogin%3C/a%3E%3C/span%3E%3Cspan class="registerAccount"%3E%3Ca href="https://smalldemo.staging.qa.truition.com/edealinv/servlet/ExecMacro?nurl=control/Registration.vm&amp;ctl_nbr=10011090&amp;rurl=control/MyAccount.vm"%3ERegister%3C/a%3E%3C/span%3E'));
	}

	//SF: Checkout show / hide header
	// show/hide expandables
	jQuery('.header-expandable h2').click(function(){
		var expandabletoopen = jQuery(this).attr('id');
		jQuery(this).toggleClass('show');
		jQuery('body').find('#' + expandabletoopen + '-content').slideToggle('show');
	});

// Tab action on homepage and category pages
	jQuery('.tab-container .tab').unbind().click(function() {
		jQuery('.tab-heroes .active').removeClass('active');
		jQuery(this).addClass('active');
		jQuery('#' + jQuery(this).attr('id') + '-container').addClass('active');	
		return false;
	});
	
	// Auto adjust height for homepage and catalog magazine displays
	jQuery('.merchItemContainerGallery .displayRow').each(function() {
		var maxHeight = 0;
		jQuery('.displayItem', this).each(function() {
			var itemHeight = jQuery(this).height();
			if(itemHeight > maxHeight) maxHeight = itemHeight;
		});
		jQuery('.displayItem', this).height(maxHeight);
	});

	jQuery('.productGroupItems .productRow').each(function() {
		var maxHeight = 0;
		jQuery('.productGroupItem', this).each(function() {
			var itemHeight = jQuery(this).height();
			if(itemHeight > maxHeight) maxHeight = itemHeight;
		});
		jQuery('.productGroupItem', this).height(maxHeight);
	});
	
	// Populate Sub Campaign and Secondary Campaign Code into Footer Text
	if (subCampaignID != "") {
		jQuery(document.getElementById('footerCampaignInfo')).append('Page='+subCampaignID+';&nbsp;');
	}
	if (secondaryCampaignCode != "" && secondaryCampaignCode.toUpperCase() != "NULL" ) {
		jQuery(document.getElementById('footerCampaignInfo')).append('Code='+secondaryCampaignCode);
	}

	if (validationInline) {
		jQuery('input#usrname').blur(function(){ validateUsrName(this.form); });
		jQuery('input#usname').blur(function(){ validateUsName(this.form); });
		jQuery('input#pwd').blur(function(){ validatePwd(this.form); });
		jQuery('input#pwd_conf').blur(function(){ validatePwd_Conf(this.form); });
		jQuery('input#confirmpwd').blur(function(){ validateConfirmPwd(this.form); });
		jQuery('input#fname').blur(function(){ validateFName(this.form); });
		jQuery('input#lname').blur(function(){ validateLName(this.form); });
		//jQuery('input#company_name').blur(function(){ validateCompany_Name(this.form); });
		jQuery('input#addr1').blur(function(){ validateAddr1(this.form); });
		//jQuery('input#addr2').blur(function(){ validateAddr2(this.form); });
		jQuery('input#city').blur(function(){ validateCity(this.form); });
		// value is hardcoded unecessary jQuery('form#Registration input#cntry').blur(function(){ validateCntry(this.form); });
		jQuery('input#state').blur(function(){ validateState(this.form); });
		jQuery('select#state').change(function(){ validateState(this.form); });
		jQuery('input#zipc').blur(function(){ validateZipC(this.form); });
		jQuery('input#email').blur(function(){ validateEmail(this.form); });
		//jQuery('input#phone').blur(function(){ validatePhone(this.form); });
		if(jQuery('input#phone').val() == '5555555555'){
			jQuery('input#phone').addClass("phoneIndent");
		}		
		jQuery('input#phone').focus(function(){
			if(jQuery(this).val() == '5555555555'){
				jQuery(this).val('');
				jQuery('input#phone').removeClass("phoneIndent");
			}
		});
		jQuery('input#orderCustomField1').blur(function(){ validateLoyaltyNumber(this.form); });
		jQuery('input#ba_fname').blur(function(){ BAvalidateFName(this.form); });
		jQuery('input#ba_lname').blur(function(){ BAvalidateLName(this.form); });
		jQuery('input#ba_company_name').blur(function(){ BAvalidateCompany_Name(this.form); });
		jQuery('input#ba_addr1').blur(function(){ BAvalidateAddr1(this.form); });
		jQuery('input#ba_addr2').blur(function(){ BAvalidateAddr2(this.form); });
		jQuery('input#ba_city').blur(function(){ BAvalidateCity(this.form); });
		// value is hardcoded unecessary jQuery('form#Registration input#ba_cntry').blur(function(){ BAvalidateCntry(this.form); });
		jQuery('input#ba_state').blur(function(){ BAvalidateState(this.form); });
		jQuery('select#ba_state').change(function(){ BAvalidateState(this.form); });
		jQuery('input#ba_zipc').blur(function(){ BAvalidateZipC(this.form); });
		jQuery('input#ba_email').blur(function(){ BAvalidateEmail(this.form); });
		jQuery('input#ba_phone').blur(function(){ BAvalidatePhone(this.form); });
		jQuery('input#email_conf').blur(function(){ BAvalidateEmail_Conf(this.form); });
		jQuery('input#billing_fname').blur(function(){ BillingvalidateFName(this.form); });
		jQuery('input#billing_lname').blur(function(){ BillingvalidateLName(this.form); });
		//jQuery('input#billing_company_name').blur(function(){ BillingvalidateCompany_Name(this.form); });
		jQuery('input#billing_addr1').blur(function(){ BillingvalidateAddr1(this.form); });
		//jQuery('input#billing_addr2').blur(function(){ BillingvalidateAddr2(this.form); });
		jQuery('input#billing_city').blur(function(){ BillingvalidateCity(this.form); });
		// value is hardcoded unecessary jQuery('form#Registration input#billing_cntry').blur(function(){ BillingvalidateCntry(this.form); });
		jQuery('input#billing_state').blur(function(){ BillingvalidateState(this.form); });
		jQuery('select#billing_state').change(function(){ BillingvalidateState(this.form); });
		jQuery('input#billing_zipc').blur(function(){ BillingvalidateZipC(this.form); });
		//jQuery('input#billing_phone').blur(function(){ BillingvalidatePhone(this.form); });
		if(jQuery('input#billing_phone').val() == '5555555555'){
			jQuery('input#billing_phone').addClass("phoneIndent");
		}		
		jQuery('input#billing_phone').focus(function(){
			if(jQuery(this).val() == '5555555555'){
				jQuery(this).val('');
				jQuery('input#billing_phone').removeClass("phoneIndent");
			}
		});
		jQuery('input#billing_email').blur(function(){ BillingvalidateEmail(this.form); });
		jQuery('input#email_conf').blur(function(){ BAvalidateEmail_Conf(this.form); });
		jQuery('input#vca_name').blur(function(){ validateVca_Name(this.form); });
		jQuery('select#cctype').change(function(){ validateCCtype(this.form); });
		jQuery('input#ccnumberMasked').blur(function(){ validateCCNumber(this.form); });
		jQuery('select#ccmonth').change(function(){ 
			if(jQuery('select#ccyear').val() != ''){
				validateExpiryDate(this.form); 
			}
		});
		jQuery('select#ccyear').change(function(){ validateExpiryDate(this.form); });
	}
});
//Some quick extensions to jquery to allow for image swap on hover over
jQuery.fn.imgHoverOn = function() {
	jQuery(this).attr('src', jQuery(this).attr('src').replace('_off', '_hover'));
}
jQuery.fn.imgHoverOff = function() {
	jQuery(this).attr('src', jQuery(this).attr('src').replace('_hover', '_off'));
}
/* Other useful functions we will be using throught the site */
function DynamicForm(params, path, method) {
	method = method || 'post'; // Set method to post by default, if not specified.
	path = path || '/edealinv/servlet/AddStoreOrderItem'; // Set path to the default addStoreOrderItem by default, if not specified.
	var form = doc.createElement('form'); //Create our Form
	form.setAttribute('method', method); //Set the Method of the form
	form.setAttribute('action', path); //set the attribute of the form
	parameters = params.split('|') // Lets split our parameters list
	//Now we will loop through our parameters
	for ( var i = 0; i < parameters.length; ++i ) {
		var pair = parameters[i].split('='); //Split the value to get our name and value
		var hiddenField = doc.createElement('input'); //add input element
		hiddenField.setAttribute('type', 'hidden'); //lets make it hidden since we do not need to see it
		hiddenField.setAttribute('name', pair[0].replace(/^\s\s*/, '').replace(/\s\s*$/, '')); //Assign the name and trim the name in case we have some whitespace from velocity code
		hiddenField.setAttribute('value', pair[1].replace(/^\s\s*/, '').replace(/\s\s*$/, '')); //Assign the value and trim the value in case we have some whitespace from velocity code
		form.appendChild(hiddenField); //append the input to our form
	}
	doc.body.appendChild(form); //append the form to the DOM
	form.submit(); //submit the form
	doc.body.removeChild(form);//Just in case we will remove the form from the DOM
}
// Test if the user is logged in if so the flCustLogon flag will be true
var flCustLogon = false;
if (getCookie('EISESSION_ID') && getCookie('EISESSION_ID') != '') flCustLogon = true;
/* This is for accessing the query string if we need it
**USAGE
	to retrieve value urlObj['query_string_variable_name']
	to test for value if ('query_string_variable_name' in urlObj)
*/
var urlObj = new Object();
win.location.search.replace (
	new RegExp( '([^?=&]+)(=([^&]*))?', 'g' ),
	function( $0, $1, $2, $3 ) { urlObj[ $1 ] = $3; }
);
//This is for getting the cookie pretty simple
function getCookie(cookieName) {
  var results = doc.cookie.match('(^|;) ?' + cookieName + '=([^;]*)(;|$)');
  if (results) return ( unescape(results[2]));
  else return null;
}
//This is for setting cookies pretty self explanitory cookieName and cookieValue are required otherwise it will use default values that are not sent default expiry is 10 years
function setCookie(cookieName, cookieValue, cookieExpireHours, cookiePath, cookieDomain, cookieSecure) {
	var expires = 3153600000000;
	var today = new Date();
	today.setTime( today.getTime() );
	if (cookieExpireHours == "session") { expires = ""; cookieExpireHours = null; }
	if (cookieExpireHours) expires = cookieExpireHours * 1000 * 60;
	var expires_date = new Date( today.getTime() + (expires) );
	doc.cookie = cookieName + '=' +escape( cookieValue ) + ((cookieExpireHours) ? ';expires=' + expires_date.toGMTString() : '') + 	((cookiePath) ? ';path=' + cookiePath : '') + (( cookieDomain) ? ';domain=' + cookieDomain : '') + ((cookieSecure) ? ';secure' : '');
}
//This will delete a cookie value
function delCookie(cookieName, cookiePath, cookieDomain) {
	if (getCookie(cookieName)) document.cookie = cookieName + '=' + ((cookiePath) ? ';path=' + cookiePath : '') + ((cookieDomain) ? ';domain=' + cookieDomain : '') + ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
//SF: product page custom add to cart function
function custBuyItemMini(form, siId, qty, skuoption_1, csku_master, attr_val_0)
{
	//alert("BuyItemMini "+csku_master+":"+attr_val_0);
	// this is on the mini cart page, so we want to refresh back to whatever URL
	// called it
	var oldlocation = document.location.href;

	//validate quantity
	var num = new Number(parseInt(qty));
	if(num.toString()=="NaN")
	{
		alert(qty +" is not a valid quantity.  Please double-check the quantity to add to your shopping cart.");
		return;
	}//if

	var randomnumber = Math.floor(Math.random()*1001);
	var combination = skuoption_1.value+"_"+randomnumber;
	skuoption_1.value = combination;

	form.action = "/edealinv/servlet/AddStoreOrderItem";
	form.nurl.value = "control/AddOrder.vm";

	form.eurl.value = "control/AddOrder.vm";
	form.returnPath.value = oldlocation;
	//form.returnPath.value = "";

	form.siId.value = siId;
	form.siQty.value = qty;
	form.method = "post";

	//AH:  This is for master variant stuff
	if(csku_master && form.csku_master)
	{
		form.csku_master.value = csku_master;
	}
	if(attr_val_0 && form.attr_val_0)
	{
		form.attr_val_0.value = attr_val_0;
	}
	form.submit()
}

// TKO: 10/11/2005
// This function should be used on all the pages except for the home page.
//SF: product page custom add to cart function
function custBuyItem(form, siId, qty, skuoption_1)
{
	//validate quantity
	var num = new Number(parseInt(qty));
	if(num.toString()=="NaN"){
		alert(qty +" is not a valid quantity.  Please double-check the quantity to add to your shopping cart.");
		return;
	}//if

	var randomnumber = Math.floor(Math.random()*1001);
	var combination = skuoption_1.value+"_"+randomnumber;
	skuoption_1.value = combination;

	form.action = "/edealinv/servlet/AddStoreOrderItem";
	form.nurl.value = "control/AddOrder.vm";

	form.eurl.value = "control/StoreItem.vm";
	if (form.ourl) {
	  form.ourl.value = "control/StoreItem.vm";
	}
	form.siId.value = siId;
	form.siQty.value = qty;
	form.method = "post";
	form.submit();
}

var defaultPattern = 'Currently you have {currentBonusPoints} points, if you add {extraItemcount} more item(s) you can earn a total of {potentialTotalPoints} points.'; 
function outputPointsMessage(points, pattern, id, object) { 
	id = id || 'pointsMessage';
	pattern = pattern || defaultPattern; 
	object = object || {};
	for(prop in object) {
		var propKey = '{'+ prop +'}';
		pattern = pattern.replace(new RegExp(propKey, 'g'),object[prop]); 
	}
	if(loyaltyBonusTotal != null && loyaltyBonusTotal != 'undefined') {
		var potentialTotalPoints = parseInt(loyaltyBonusTotal) + points;
		pattern = pattern.replace(new RegExp('{potentialTotalPoints}', 'g'), potentialTotalPoints);
		pattern = pattern.replace(new RegExp('{currentBonusPoints}', 'g'), loyaltyBonusTotal);
		pattern = pattern.replace(new RegExp('{cartAbsoluteItemTotal}', 'g'), cartAbsoluteItemTotal);
	}
	$('#'+id).html(pattern); 
}

/*Some customized validation*/
var invalidChars = "\'\"<>&?";
function TestInvalidChars(val) {
	for (var i = 0; i < val.length; i++)
		if (invalidChars.indexOf(val.charAt(i)) != -1) return false;
	return true;
}
function stripPhone(val) {
	var pattern = /[^0-9]/g;
	val = val.replace(pattern, "");
	return val;
}
function customTestPhone(val) {
	if (val == "") {
		return true;
	} else {
		var expression = /^\d{10}$/;
		return expression.test(val);
	}
}
function validateAirmiles(val) {
	var expression = /^8\d{10}$/;
	return expression.test(val);
}
function validateAeroplan(val) {
	var expression = /^\d{9}$/;
	return expression.test(val);
}
function validateRequired(form, input, title) {
	var myField = doc.getElementById(input)
	var valid = TestRequired(myField.value);
	displayValidationOutPut(input, title, valid);
	return valid
}
function validateRequiredCustomMessage(form, input, title, errorMsg) {
	var myField = doc.getElementById(input)
	var valid = TestRequired(myField.value);
	displayValidationOutPut(input, title, valid, errorMsg);
	return valid
}
function validateRequiredNoMessage(form, input) {
	var myField = doc.getElementById(input)
	var valid = TestRequired(myField.value);
	return valid
}
function validateChars(form, input, title) {
	var myField = doc.getElementById(input)
	var valid = TestInvalidChars(myField.value);
	displayValidationOutPut(input, title, valid, 'An invalid character(' + invalidChars + ') in {title}');
	return valid
}
function displayValidationOutPut(input, title, valid, errorTextPattern) {
	errorTextPattern = errorTextPattern ||  validationDefaultMessage; // Set the default error text pattern
	inlineValidationDisplay(input, title, valid, errorTextPattern);
	submitValidationDisplay(input, title, valid, errorTextPattern);
}
/* Address Book Checks*/
function validateVca_Name(form) {
	if( !jQuery('input#vca_name')[0] ) return true;
	var valid = validateRequired(form, 'vca_name', 'Nickname');
	if (valid) valid = validateChars(form, 'vca_name', 'Nickname');
	return valid;
}
/*Registration checks*/
function validateUsName(form) {
	if( !jQuery('input#usname')[0] ) return true;
	var valid = validateRequired(form, 'usname', 'User Name');
	if (valid) valid = validateChars(form, 'usname', 'User Name');
	return valid;
}
function validateUsrName(form) {
	if( !jQuery('input#usrname')[0] ) return true;
	var valid = validateRequired(form, 'usrname', 'User Name');
	if (valid) valid = validateChars(form, 'usrname', 'User Name');
	return valid;
}
function validatePwd(form) {
	if( !jQuery('input#pwd')[0] ) return true;
	var valid = validateRequired(form, 'pwd', 'Password');
	if (valid) valid = TestLength(form.pwd.value, 4);
	displayValidationOutPut('pwd', 'Password', valid);
	return valid;
}
function validatePwd_Conf(form) {
	if( !jQuery('input#pwd_conf')[0] ) return true;
	var valid = validateRequired(form, 'pwd_conf', 'Password Confirmation');
	var valid = TestRequired(form.pwd_conf.value);
	if (valid) {
		valid = TestCompareValues(form.pwd.value, form.pwd_conf.value);
		displayValidationOutPut('pwd_conf', 'Password Confirmation', valid, 'Passwords does not match.');
	}
	return valid;
}
function validateConfirmPwd(form) {
	if( !jQuery('input#confirmpwd')[0] ) return true;
	var valid = TestRequired(form.confirmpwd.value);
	var valid = validateRequired(form, 'confirmpwd', 'Password Confirmation');
	if (valid){
		valid = TestCompareValues(form.pwd.value, form.confirmpwd.value);
		displayValidationOutPut('confirmpwd', 'Password Confirmation', valid, 'Passwords does not match');
	}
	return valid;
}
/*Shipping Address Checks*/
function validateFName(form) {
	if( !jQuery('input#fname')[0] ) return true;
	var valid = validateRequired(form, 'fname', labelFirstName);
	if (valid) valid = validateChars(form, 'fname', labelFirstName);
	return valid;
}
function validateLName(form) {
	if( !jQuery('input#lname')[0] ) return true;
	var valid = validateRequired(form, 'lname', labelLastName);
	if (valid) valid = validateChars(form, 'lname', labelLastName);
	return valid;
}
function validateAddr1(form) {
	if( !jQuery('input#addr1')[0] ) return true;
	var valid = validateRequired(form, 'addr1', labelAddr1);
	if (valid) valid = validateChars(form, 'addr1', labelAddr1);
	return valid;
}
function validateAddr2(form) {
	if( !jQuery('input#addr2')[0] ) return true;
	valid = validateChars(form, 'addr2', labelAddr2);
	return valid;
}
function validateCity(form) {
	if( !jQuery('input#city')[0] ) return true;
	var valid = validateRequired(form, 'city', labelCity);
	if (valid) valid = validateChars(form, 'city', labelCity);
	return valid;
}
function validateCompany_Name(form) {
	if( !jQuery('input#company_name')[0] ) return true;
	valid = validateChars(form, 'company_name', labelCompany);
	return valid;
}
function validateCntry(form) {
	if( !jQuery('input#cntry')[0] ) return true;
	var valid = validateRequired(form, 'cntry', labelCountry);
	return valid;
}
function validateState(form) {
	if( !jQuery('input#state')[0] && !jQuery('select#state')[0]) return true;
	var valid = validateRequired(form, 'state', labelState);
	return valid;
}
function validateZipC(form) {
	if( !jQuery('input#zipc')[0] ) return true;
	var valid = validateRequired(form, 'zipc', labelPostalCode);
	if (valid) {
		valid = TestCode(form.zipc.value, form.cntry.value);
		displayValidationOutPut('zipc', labelPostalCode, valid, errorValidMsg);
	}
	return valid;
}
function validateEmail(form) {
	if( !jQuery('input#email')[0] ) return true;
	var valid = validateRequired(form, 'email', labelEmail);
	if (valid) {
		valid = TestEmail(form.email.value);
		displayValidationOutPut('email', labelEmail, valid, errorValidMsg);
	}
	return valid;
}
function validatePhone(form) {
	if( !jQuery('input#phone')[0] ) return true;
	form.phone.value = stripPhone(form.phone.value);
	if (form.phone.value == "") {
		valid = true;
		jQuery('input#phone').addClass("phoneIndent");
		form.phone.value = "5555555555";
	} else {
		valid = customTestPhone(form.phone.value);
		displayValidationOutPut('phone', labelPhone, valid, errorValidMsg);
	}
	return valid;
}
function validateEmail_Conf(form) {
	if( !jQuery('input#email_conf')[0] ) return true;
	var valid = validateRequired(form, 'email_conf', labelEmailConf);
	if (valid) {
		valid = TestCompareValues(form.email.value, form.email_conf.value);
		displayValidationOutPut('email_conf', labelEmailConf, valid, errorEmailMatchMsg);
	}
	return valid;
}
function validateLoyaltyNumber(form) {
	if( !jQuery('input#orderCustomField1')[0] ) return true;
	var type = jQuery('input#orderCustomField1').attr('dataLoyaltyProgram');
	var programNumber = type+' Number" or "NONE';
	if(lang == "fr_FR") {
		var errorMsg = "Pour obtenir vos milles " + type + ", veuillez entrer votre numéro de membre. Autrement, veuillez inscrire 'aucun'.";
	} else {
	var errorMsg = 'Please enter your ' + type + ' number or NONE if you do not have one.';
	}
	
	var valid = validateRequiredCustomMessage(form, 'orderCustomField1', programNumber, errorMsg);
	if (valid) {
		switch(type) {
			case 'AEROPLAN':
				if(form.orderCustomField1.value.toUpperCase() == 'NONE' || form.orderCustomField1.value.toUpperCase() == 'AUCUN') {
					valid=true;
				} else {
					valid=validateAeroplan(form.orderCustomField1.value);
				}
				break;
			case 'AIRMILES':
				if(form.orderCustomField1.value.toUpperCase() == 'NONE' || form.orderCustomField1.value.toUpperCase() == 'AUCUN') {
					valid=true;
				} else {
					valid=validateAirmiles(form.orderCustomField1.value);
				}
				break;
		}
		displayValidationOutPut('orderCustomField1', programNumber, valid, errorMsg);
	}
	return valid;
}

/*Billing Address checks*/
function BAvalidateFName(form) {
	if( !jQuery('input#ba_fname')[0] ) return true;
	var valid = validateRequired(form, 'ba_fname', labelFirstName);
	if (valid) valid = validateChars(form, 'ba_fname', labelFirstName);
	return valid;
}
function BAvalidateLName(form) {
	if( !jQuery('input#ba_lname')[0] ) return true;
	var valid = validateRequired(form, 'ba_lname', labelLastName);
	if (valid) valid = validateChars(form, 'ba_lname', labelLastName);
	return valid;
}
function BAvalidateAddr1(form) {
	if( !jQuery('input#ba_addr1')[0] ) return true;
	var valid = validateRequired(form, 'ba_addr1', labelAddr1);
	if (valid) valid = validateChars(form, 'ba_addr1', labelAddr1);
	return valid;
}
function BAvalidateAddr2(form) {
	if( !jQuery('input#ba_addr2')[0] ) return true;
	valid = validateChars(form, 'ba_addr2', labelAddr2);
	return valid;
}
function BAvalidateCity(form) {
	if( !jQuery('input#ba_city')[0] ) return true;
	var valid = validateRequired(form, 'ba_city', labelCity);
	if (valid) valid = validateChars(form, 'ba_city', labelCity);
	return valid;
}
function BAvalidateCompany_Name(form) {
	if( !jQuery('input#ba_company_name')[0] ) return true;
	valid = validateChars(form, 'ba_company_name', labelCompany);
	return valid;
}
function BAvalidateCntry(form) {
	if( !jQuery('input#ba_cntry')[0] ) return true;
	var valid = validateRequired(form, 'ba_cntry', labelCountry);
	return valid;
}
function BAvalidateState(form) {
	if( !jQuery('input#ba_state')[0] && !jQuery('select#ba_state')[0]) return true;
	var valid = validateRequired(form, 'ba_state', labelState);
	return valid;
}
function BAvalidateZipC(form) {
	if( !jQuery('input#ba_zipc')[0] ) return true;
	var valid = validateRequired(form, 'ba_zipc', labelPostalCode);
	if (valid) {
		valid = TestCode(form.ba_zipc.value, form.ba_cntry.value);
		displayValidationOutPut('ba_zipc', labelPostalCode, valid, errorValidMsg);
	}
	return valid;
}
function BAvalidateEmail(form) {
	if( !jQuery('input#ba_email')[0] ) return true;
	var valid = validateRequired(form, 'ba_email', labelEmail);
	if (valid) {
		valid = TestEmail(form.ba_email.value);
		displayValidationOutPut('ba_email', labelEmail, valid, errorValidMsg);
	}
	return valid;
}
function BAvalidatePhone(form) {
	if( !jQuery('input#ba_phone')[0] ) return true;
	var valid = validateRequired(form, 'ba_phone', labelPhone);
	form.ba_phone.value = stripPhone(form.ba_phone.value);
	if (valid) {
		valid = customTestPhone(form.ba_phone.value);
		displayValidationOutPut('ba_phone', labelPhone, valid, errorValidMsg);
	}
	return valid;
}
/*Billing Address checks*/
function BillingvalidateFName(form) {
	if( !jQuery('input#billing_fname')[0] ) return true;
	var valid = validateRequired(form, 'billing_fname', labelFirstName);
	if (valid) valid = validateChars(form, 'billing_fname', labelFirstName);
	return valid;
}
function BillingvalidateLName(form) {
	if( !jQuery('input#billing_lname')[0] ) return true;
	var valid = validateRequired(form, 'billing_lname', labelLastName);
	if (valid) valid = validateChars(form, 'billing_lname', labelLastName);
	return valid;
}
function BillingvalidateAddr1(form) {
	if( !jQuery('input#billing_addr1')[0] ) return true;
	var valid = validateRequired(form, 'billing_addr1', labelAddr1);
	if (valid) valid = validateChars(form, 'billing_addr1', labelAddr1);
	return valid;
}
function BillingvalidateAddr2(form) {
	if( !jQuery('input#billing_addr2')[0] ) return true;
	valid = validateChars(form, 'billing_addr2', labelAddr2);
	return valid;
}
function BillingvalidateCity(form) {
	if( !jQuery('input#billing_city')[0] ) return true;
	var valid = validateRequired(form, 'billing_city', labelCity);
	if (valid) valid = validateChars(form, 'billing_city', labelCity);
	return valid;
}
function BillingvalidateCompany_Name(form) {
	if( !jQuery('input#billing_company_name')[0] ) return true;
	valid = validateChars(form, 'billing_company_name', 'Company Name');
	return valid;
}
function BillingvalidateCntry(form) {
	if( !jQuery('input#billing_cntry')[0] ) return true;
	var valid = validateRequired(form, 'billing_cntry', labelCompany);
	return valid;
}
function BillingvalidateState(form) {
	if( !jQuery('input#billing_state')[0] && !jQuery('select#billing_state')[0]) return true;
	var valid = validateRequired(form, 'billing_state', labelState);
	return valid;
}
function BillingvalidateZipC(form) {
	if( !jQuery('input#billing_zipc')[0] ) return true;
	var valid = validateRequired(form, 'billing_zipc', labelZipCode);
	if (valid) {
		valid = TestCode(form.billing_zipc.value, form.billing_cntry.value);
		displayValidationOutPut('billing_zipc', labelZipCode, valid, errorValidMsg);
	}
	return valid;
}
function BillingvalidateEmail(form) {
	if( !jQuery('input#billing_email')[0] ) return true;
	var valid = validateRequired(form, 'billing_email', labelEmail);
	if (valid) {
		valid = TestEmail(form.billing_email.value);
		displayValidationOutPut('billing_email', labelEmail, valid, errorValidMsg);
	}
	return valid;
}
function BillingvalidatePhone(form) {
	if( !jQuery('input#billing_phone')[0] ) return true;
	form.billing_phone.value = stripPhone(form.billing_phone.value);
	if (form.billing_phone.value == "") {
		valid = true;
		jQuery('input#billing_phone').addClass("phoneIndent");
		form.billing_phone.value = "5555555555";
	} else {
		valid = customTestPhone(form.billing_phone.value);
		displayValidationOutPut('billing_phone', labelPhone, valid, errorValidMsg);
	}
	return valid;
}
function validateCCtype(form) {
	if( !jQuery('select#cctype')[0] ) return true;
	var valid = validateRequired(form, 'cctype', labelCardType);
	if (valid) {
		if( !jQuery('input#ccnumberMasked')[0] ) return true;
		if( jQuery('input#ccnumber').val() != "" ) {
			valid = TestCreditCard(jQuery('input#ccnumber').val(), jQuery('select#cctype').val());
			displayValidationOutPut('ccnumberMasked', labelCardNo, valid, errorValidMsg);
		}
	}
	return valid;
}
function validateCCNumber(form) {
	if( !jQuery('input#ccnumberMasked')[0] ) return true;
	var valid = validateRequired(form, 'ccnumberMasked', labelCardNo);
	if (valid) {
		if( !jQuery('select#cctype')[0] ) return true;
		if( jQuery('select#cctype').val() != "" ) {
			valid = TestCreditCard(jQuery('input#ccnumber').val(), jQuery('select#cctype').val());
			displayValidationOutPut('ccnumberMasked', labelCardNo, valid, errorValidMsg);
		}
	}

	return valid;
}
function validateExpiryDate(form) {
	if( !jQuery('select#ccmonth')[0]  ) return true;
	if( !jQuery('select#ccyear')[0]  ) return true;
	var validMonth = validateRequiredNoMessage(form, 'ccmonth');
	var validYear = validateRequiredNoMessage(form, 'ccyear');
	var validPastTime = TestCreditCardExpiration(jQuery('select#ccmonth').val(), jQuery('select#ccyear').val());
	var valid = validMonth && validYear && validPastTime;
	displayValidationOutPut('ccyear', labelExpiryDate, valid, errorExpiryDateMsg);
	
	return valid;
}
function validateForms(form) {
	// example of how to turn inline validation off and use summary note summary requires a div with id errorMessage this is the begining
	//var oldvalidationInline = validationInline;
	//validationInline = false;
	validateUsName(form);
	validateUsrName(form);
	validatePwd(form);
	validatePwd_Conf(form);
	validateVca_Name(form);
	validateFName(form);
	validateLName(form);
	validateAddr1(form);
	validateAddr2(form);
	validateCompany_Name(form);
	validateCity(form);
	//validateCntry(form);
	validateState(form);
	validateZipC(form);
	validatePhone(form);
	validateEmail(form);
	validateEmail_Conf(form);
	validateLoyaltyNumber(form);
	BAvalidateFName(form);
	BAvalidateLName(form);
	BAvalidateAddr1(form);
	BAvalidateAddr2(form);
	BAvalidateCity(form);
	BAvalidateCompany_Name(form);
	//BAvalidateCntry(form);
	BAvalidateState(form);
	BAvalidateZipC(form);
	BAvalidateEmail(form);
	BAvalidatePhone(form);
	BillingvalidateFName(form);
	BillingvalidateLName(form);
	BillingvalidateAddr1(form);
	BillingvalidateAddr2(form);
	BillingvalidateCity(form);
	BillingvalidateCompany_Name(form);
	//BillingvalidateCntry(form);
	BillingvalidateState(form);
	BillingvalidateZipC(form);
	BillingvalidatePhone(form);
	BillingvalidateEmail(form);
	
	validateCCtype(form);
	validateCCNumber(form);
	validateExpiryDate(form);
	return writeErrorMessage();
	// example of how to turn inline validation off and use summary note summary requires a div with id errorMessage this is the finisher
	//validationInline = oldvalidationInline;

}

