function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}



function isdefined(variable)
{
    return (typeof(window[variable]) == "undefined")?  false: true;
}

if (isdefined('jQuery'))
{
	jQuery.validator.addMethod("nospaces", function(value, element){
		return !value.match(/\s/);
		},
		"Username cannot contain spaces."
	);	
	
	jQuery.validator.addMethod("alphanumeric", function(value, element){
		return !value.match(/[^\w\d]/);
		},
		"Alphanumeric characters only."
	);
	
	jQuery.validator.addMethod("validpass", function(value, element){
		return !value.match(/[^A-Za-z0-9]/);
		},
		"Letters and digits allowed only."
	);
	
	jQuery.validator.addMethod("notequal", function(value, element, params) {
		return (value.toLowerCase() != $("#" + params).val().toLowerCase());
		}, 
		"For security reasons, your password must be different from your username."
	);
	
	jQuery.validator.addMethod("phonenumber", function(value, element){
		var clearNum = value.replace(/[\s\-\.\(\)]/g, '');
		if (clearNum.length < 10) return false;
		return !value.match(/[^\d\s\-\.\(\)]/);
		},
		"Specify correct phone number at least with 10 digits."
	);	
	
	jQuery.validator.addMethod("faxnumber", function(value, element){
		return !value.match(/[^\d\s\-\.\(\)]/);
		},
		"Specify correct fax number."
	);		
	
	$(document).ready(function(){
		$("#loginForm").validate({
			rules: {
				username: {
					required: true,
					minlength: 2,
					maxlength: 12
				},
				password: {
					required: true,
					minlength: 3,
					maxlength: 8
				}
			},
	  		errorClass: "invalidComment",
	  		highlight: function(element, errorClass) {
				$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
	  		}
		})
	});
	
	function showBottomHint() {
		var bottomHintID = $(this).attr("id") + '_bottom_hint';
		var bottomHint = $("div[id='"+bottomHintID+"']");
		bottomHint.show();	
	}
	
	function hideRightHint() {
		$("#rightHint").hide();
	}
}

function selectValue(selectElementID, valueToSelect, defaultValue)
{
	var selectElement = document.getElementById(selectElementID);
	if (!selectElement || !valueToSelect) return false;
	
	var floatValue = parseFloat(valueToSelect);
	var valueToCompare = (isNaN(floatValue)) ? valueToSelect : floatValue;

	var selected = false;
	
	for (var i = 0; i < selectElement.options.length; i++)
	{
		if (selectElement.options[i].value == valueToCompare.toString())
		{
			selectElement.options[i].selected = 'selected';
			selected = true;
			break;
		}
	}
	
	if (defaultValue && !selected)
		selectElement.value = defaultValue;
}

var statesCA = new Array();
statesCA["AB"] = "Alberta";
statesCA["BC"] = "British Columbia";
statesCA["MB"] = "Manitoba";
statesCA["NB"] = "New Brunswick";
statesCA["NF"] = "Newfoundland/Labrador";
statesCA["NT"] = "Northwest Territories";
statesCA["NS"] = "Nova Scotia";
statesCA["NU"] = "Nunavut";
statesCA["ON"] = "Ontario";
statesCA["PE"] = "Prince Edward Island";
statesCA["QC"] = "Quebec";
statesCA["SK"] = "Saskatchewan";
statesCA["YT"] = "Yukon";

var statesUS = new Array();
statesUS["AL"] = "Alabama";
statesUS["AK"] = "Alaska";
statesUS["AZ"] = "Arizona";
statesUS["AR"] = "Arkansas";
statesUS["CA"] = "California";
statesUS["CO"] = "Colorado";
statesUS["CT"] = "Connecticut";
statesUS["DE"] = "Delaware";
statesUS["DC"] = "District of Columbia";
statesUS["FL"] = "Florida";
statesUS["GA"] = "Georgia";
statesUS["GU"] = "Guam";
statesUS["HI"] = "Hawaii";
statesUS["ID"] = "Idaho";
statesUS["IL"] = "Illinois";
statesUS["IN"] = "Indiana";
statesUS["IA"] = "Iowa";
statesUS["KS"] = "Kansas";
statesUS["KY"] = "Kentucky";
statesUS["LA"] = "Louisiana";
statesUS["ME"] = "Maine";
statesUS["MD"] = "Maryland";
statesUS["MA"] = "Massachusetts";
statesUS["MI"] = "Michigan";
statesUS["MN"] = "Minnesota";
statesUS["MS"] = "Mississippi";
statesUS["MO"] = "Missouri";
statesUS["MT"] = "Montana";
statesUS["NE"] = "Nebraska";
statesUS["NV"] = "Nevada";
statesUS["NH"] = "New Hampshire";
statesUS["NJ"] = "New Jersey";
statesUS["NM"] = "New Mexico";
statesUS["NY"] = "New York";
statesUS["NC"] = "North Carolina";
statesUS["ND"] = "North Dakota";
statesUS["OH"] = "Ohio";
statesUS["OK"] = "Oklahoma";
statesUS["OR"] = "Oregon";
statesUS["PA"] = "Pennsylvania";
statesUS["PR"] = "Puerto Rico";
statesUS["RI"] = "Rhode Island";
statesUS["SC"] = "South Carolina";
statesUS["SD"] = "South Dakota";
statesUS["TN"] = "Tennessee";
statesUS["TX"] = "Texas";
statesUS["UT"] = "Utah";
statesUS["VT"] = "Vermont";
statesUS["VI"] = "Virgin Islands";
statesUS["VA"] = "Virginia";
statesUS["WA"] = "Washington";
statesUS["WV"] = "West Virginia";
statesUS["WI"] = "Wisconsin";
statesUS["WY"] = "Wyoming";

// Set states to select element with statesSelectElementID for Canada or US
// and show state text input for other countries.
// Return true if states was set and false otherwise.
function changeStates(country, statesSelectElementID)
{
	var states = document.getElementById(statesSelectElementID);
	var states2 = document.getElementById(statesSelectElementID + '2');
	if (!states || !states2) return false;
	
	states.options.length = 0; // clear select options
	states.disabled = false;
	
	if (country != 'CA' && country != 'US')
	{
		states.style.display = 'none';
		states2.style.display = 'block';
		return false;
	}
	else
	{
		states2.style.display = 'none';
		states.style.display = 'block';
	
		// Initialization first state option to select
		var option = document.createElement('option');
		option.text = (country == 'US') ? '-- Select Your State --' : '-- Select Your Province --';
		option.value = '';
		try {
		  states.add(option, null); // standards compliant; doesn't work in IE
		}
		catch(ex) {
		  states.add(option); // IE only
		}
	}
	
	var statesArr = (country == 'CA') ? statesCA : statesUS;
	
	// Fill select options from states array
	for (var stateKey in statesArr)
	{
		var option = document.createElement('option');
		option.text = statesArr[stateKey];
		option.value = stateKey;

		try {
		  states.add(option, null); // standards compliant; doesn't work in IE
		}
		catch(ex) {
		  states.add(option); // IE only
		}
	}
	
	return true;
}

function ship2diffOpen()
{
	var obj = document.getElementById('ship2diff');
	var box = document.getElementById('ship_box');
	if (!obj || !box) return;
	
	if (obj.checked)
	{
		box.style.display = "";
		$('#duplicateLink').show();
	
		// Shipadd 	states initialization
		if (!isdefined('s_country')) s_country = '';
		var s_state = document.getElementById('s_state2').value;
		selectValue('s_country', s_country);
		changeStates(s_country, 's_state');
		selectValue('s_state', s_state);
	}
	else
	{
		// Hide shipadd states fields
		$("#s_state").hide();
		$("#s_state2").hide();
		
		box.style.display = "none";
		$('#duplicateLink').hide();
	}
}

function copyBillToShip()
{
	$('#s_address').val($('#b_address').val());
	$('#s_address2').val($('#b_address2').val());
	$('#s_city').val($('#b_city').val());
	$('#s_country').val($('#b_country').val());
	changeStates($('#s_country').val(), 's_state');
	$('#s_state').val($('#b_state').val());
	$('#s_state2').val($('#b_state2').val());
	$('#s_zip').val($('#b_zip').val());
}

function checkZipMinLength(countryElementId, zipElementId, zipMsgElementId)
{
	var countryElement = document.getElementById(countryElementId);
	if (!countryElement) return true;
	
	var country = countryElement.value
	var zip = document.getElementById(zipElementId).value;
	var zipMsgElement = document.getElementById(zipMsgElementId);

	if (zip.length == 0)
	{
		zipMsgElement.innerHTML = 'This field is required.';
		zipMsgElement.style.display = 'block';
		return false;		
	}
	
	if (country == 'US')
	{
		if (zip.length < 5)
		{
			zipMsgElement.innerHTML = 'Please enter at least 5 characters.';
			zipMsgElement.style.display = 'block';
			return false;
		}
	}
	else if (country == 'CA')
	{
		if (zip.length < 6)
		{
			zipMsgElement.innerHTML = 'Please enter at least 6 characters.';
			zipMsgElement.style.display = 'block';
			return false;
		}		
	}
	else if (zip.length < 4)
	{
		zipMsgElement.innerHTML = 'Please enter at least 4 characters.';
		zipMsgElement.style.display = 'block';
		return false;
	}	
	
	zipMsgElement.style.display = 'none';
	return true;
}

function checkZipCodes()
{
	if (!checkZipMinLength('b_country', 'b_zip', 'b_zip_msg'))
		return false;
	if ($("#ship2diff").is(":checked"))
		return checkZipMinLength('s_country', 's_zip', 's_zip_msg');
	return true;
}