function clearDefault(el) {
	if (el.defaultValue == el.value) el.value = ""
}
function replaceDefault(el) {
	if ( el.value == "" ) el.value = el.defaultValue
}
function toggle_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';
}
//		phoneValidator:	Input: string 'phone' containing the phone number to be validated
//						Return: false if there is an error, true otherwise
//		This function returns a boolean: false if there is an error
//		in the phone number string, true otherwise
function phoneValidator(phone)
{
	if ((phone == null) || (phone == ""))
		return false;
	
	if ((phone.indexOf('"') != -1) || (phone.indexOf("'") != -1))
		return false;

	if (phone.length == 10)
		return true;		
		
	var checkOK = "0123456789";
	
	switch(phone.length)
	{
		case 8:
			if (phone.charAt(3) != '-')
				return false;
			
			if ((checkOK.indexOf(phone.charAt(0)) == -1) || (checkOK.indexOf(phone.charAt(1)) == -1)
				|| (checkOK.indexOf(phone.charAt(2)) == -1) || (checkOK.indexOf(phone.charAt(4)) == -1)
				|| (checkOK.indexOf(phone.charAt(5)) == -1) || (checkOK.indexOf(phone.charAt(6)) == -1)
				|| (checkOK.indexOf(phone.charAt(7)) == -1))
				return false;

			return true;
		
		case 12:
			if ((phone.charAt(3) != '-') || (phone.charAt(7) != '-'))
				return false;
			
			if ((checkOK.indexOf(phone.charAt(0)) == -1) || (checkOK.indexOf(phone.charAt(1)) == -1)
				|| (checkOK.indexOf(phone.charAt(2)) == -1) || (checkOK.indexOf(phone.charAt(4)) == -1)
				|| (checkOK.indexOf(phone.charAt(5)) == -1) || (checkOK.indexOf(phone.charAt(6)) == -1)
				|| (checkOK.indexOf(phone.charAt(8)) == -1) || (checkOK.indexOf(phone.charAt(9)) == -1)
				|| (checkOK.indexOf(phone.charAt(10)) == -1) || (checkOK.indexOf(phone.charAt(11)) == -1))
				return false;

			return true;

		case 14:
			if ((phone.charAt(1) != '-') || (phone.charAt(5) != '-') || (phone.charAt(9) != '-'))
				return false;
			
			if ((checkOK.indexOf(phone.charAt(0)) == -1) || (checkOK.indexOf(phone.charAt(2)) == -1)
				|| (checkOK.indexOf(phone.charAt(3)) == -1) || (checkOK.indexOf(phone.charAt(4)) == -1)
				|| (checkOK.indexOf(phone.charAt(6)) == -1) || (checkOK.indexOf(phone.charAt(7)) == -1)
				|| (checkOK.indexOf(phone.charAt(8)) == -1) || (checkOK.indexOf(phone.charAt(10)) == -1)
				|| (checkOK.indexOf(phone.charAt(11)) == -1) || (checkOK.indexOf(phone.charAt(12)) == -1)
				|| (checkOK.indexOf(phone.charAt(13)) == -1))
				return false;

			return true;
		
		default:
			return false;
	}
}

//		emailValidator:	Input: string 'email' containing the email address to be validated
//						Return: false if there is an error, true otherwise
//		This function returns a boolean: false if there is an error
//		in the email address string, true otherwise
function emailValidator(email)
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   	if(reg.test(email) == false) 
	{
      	return false;
   	}
	else
	{
		return true;
	}
}

//		zipValidator:	Input: string 'zip' containing the zip code to be validated
//						Return: false if there is an error, true otherwise
//		This function returns a boolean: false if there is an error
//		in the zip code string, true otherwise
function zipValidator(zip)
{
	if ((zip == null) || (zip == ""))
		return false;
	
	if ((zip.indexOf('"') != -1) || (zip.indexOf("'") != -1))
		return false;

	var checkOK = "0123456789";

	switch(zip.length)
	{
		case 5:
			for(j = 0; j < 5; j++)
			{
				if (checkOK.indexOf(zip.charAt(j)) == -1)
					return false;
			}
			return true;
			
		case 10:
			for(j = 0; j < 5; j++)
			{
				if (checkOK.indexOf(zip.charAt(j)) == -1)
					return false;
			}

			for(j = 6; j < 10; j++)
			{
				if (checkOK.indexOf(zip.charAt(j)) == -1)
					return false;
			}

			return true;

		default:
			return false;
	}
	
	return true;
}

//		modForm:	Input: array of field names from the form
//					Return: false if there is an error, true otherwise
//		This function returns a boolean: false if there is an error
//		in the appropriate string variable, true otherwise. It will also
//		create an alert with a message containing the error, if there is one
function modForm (fieldNamesArray)
{

//	<% fieldary = array("chrName","txtDescription","chrPhone","chrEmail","chrZip","boolDisabled") %>
	var fieldName, fieldValue, reqFields, reqFieldsAry;

/*	Use ASP to write out the javascript array
	<%
	jscriptarraystring = "var jFieldArray = new Array("
	jscriptarraystring = jscriptarraystring & "'" & fieldary(0) & "'"
	for i=1 to	ubound(fieldary)
		jscriptarraystring = jscriptarraystring & ", " & "'" & fieldary(i) & "'"
	next

	jscriptarraystring = jscriptarraystring & ");"
	Response.write jscriptarraystring
	%> */

	reqFields = fieldNamesArray._requiredFields.value
	reqFieldsAry = reqFields.split(",")
	reqFieldNames = fieldNamesArray._requiredFieldNames.value
	reqFieldNamesAry = reqFieldNames.split(",")
	
	for(i = 0; i < fieldNamesArray.elements.length; i++)
	{
		fieldName = fieldNamesArray.elements[i].name;
		fieldValue = fieldNamesArray.elements[i].value;
		var fieldNameLC = fieldName.toLowerCase();
		
		if (fieldNamesArray.elements[i].type == 'text')
		{
			for(j = 0; j < reqFieldsAry.length; j++)
			{
				if (reqFieldsAry[j].toLowerCase() == fieldNameLC)
				{
					fieldNameString = new String(reqFieldNamesAry[j]);
	   				//fieldNameString = fieldNameString.replace(/_/g, " ");
					fieldNameString = fieldNameString.toUpperCase();
					if ((fieldValue == null) || (fieldValue == ""))
					{
						alert("Please enter a value for the " + fieldNameString + " field.");
						fieldNamesArray.elements[i].focus();
						return false;
					}
					
					if ((fieldValue.indexOf('"') != -1) || (fieldValue.indexOf("'") != -1))
					{
						alert("Please remove any single or double quotes from the " + fieldNameString + " field.");
						fieldNamesArray.elements[i].focus();
						return false;
					}
		
					if (fieldNameLC.indexOf('phone') != -1)
					{
						if (phoneValidator(fieldValue) == false)
						{
							alert("Invalid phone number. Please use one of the following formats:\n\t1-234-567-8901\n\t123-456-7890\n\t123-4567");
							fieldNamesArray.elements[i].focus();
							return false;
						}
					}
					else if (fieldNameLC.indexOf('email') != -1)
					{
						if (emailValidator(fieldValue) == false)
						{
							alert("Invalid email address. Please use the 'name@domain' format, for example:\n\ttjones@rayindustries.org\n\tbillray89@myemaildomain.com\n\tthewiz@techwizards.net");
							fieldNamesArray.elements[i].focus();
							return false;
						}
					}
					else if (fieldNameLC.indexOf('zip') != -1)
					{
						if (zipValidator(fieldValue) == false)
						{
							alert("Invalid zip code. Please use the '01234' or '98765-1234' format.");
							fieldNamesArray.elements[i].focus();
							return false;
						}
					}
					else
					{
						// do nothing
					}
					j = reqFieldsAry.length;
				}
			}
		}
		if (fieldNamesArray.elements[i].type == 'checkbox')
		{
			for(j = 0; j < reqFieldsAry.length; j++)
			{
				if (reqFieldsAry[j].toLowerCase() == fieldNameLC)
				{
					fieldNameString = new String(reqFieldNamesAry[j]);
	   				//fieldNameString = fieldNameString.replace(/_/g, " ");
					fieldNameString = fieldNameString.toUpperCase();		
					if (fieldNamesArray.elements[i].checked==false)
					{
						alert("The " + fieldNameString + " must be checked.");
						return false;
					}
				}
			}
		}
	}

	return true;
}
		function copyAddress(form){
			if (form.same.checked == true) {
				form.billing_address1.value = form.shipping_address1.value;	
				form.billing_address2.value = form.shipping_address2.value;	
				form.billing_city.value = form.shipping_city.value;	
				form.billing_state.value = form.shipping_state.value;	
				form.billing_zip.value = form.shipping_zip.value;	
			}else{
				form.billing_address1.value = "";	
				form.billing_address2.value = "";	
				form.billing_city.value = "";	
				form.billing_state.value = "";	
				form.billing_zip.value = "";	
			}
		}

		function checkLoginInfo(form){
			if (form.shipping_first_name.value == "" || form.shipping_last_name.value == "" || form.email.value=="" ||  form.phone.value=="" || form.billing_address1.value == "" || form.billing_city.value == "" || form.billing_state.value == "" || form.billing_zip.value == ""|| form.shipping_address1.value == "" || form.shipping_city.value == "" || form.shipping_state.value == ""){
				alert("Must fill out the required fields marked with a *.");
				return false;
			}else{
				if (form.po_number.value != ""){
					return true;	
				}else{
					return chkCCForm(form);	
				}
			}
		}

	function chkCCForm(form){
		if (form.CardName.value =="" || form.CardNumber.value ==""){
			alert("Please fill in all fields.");
			return false;
		}else{
			if(CheckCardNumber(form)==true){
				form.take_action.disabled = true;
				return true; //change to true 
			}else{
				return false;
			}
		}
	}

	var Cards = new makeArray(8);
	Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
	var MasterCard = Cards[0];
	Cards[1] = new CardType("VisaCard", "4", "13,16");
	var VisaCard = Cards[1];
	Cards[2] = new CardType("AmExCard", "34,37", "15");
	var AmExCard = Cards[2];
	Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
	var DinersClubCard = Cards[3];
	Cards[4] = new CardType("DiscoverCard", "6011", "16");
	var DiscoverCard = Cards[4];
	Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
	var enRouteCard = Cards[5];
	Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
	var JCBCard = Cards[6];
	var LuhnCheckSum = Cards[7] = new CardType();
	
	/*************************************************************************\
	CheckCardNumber(form)
	function called when users click the "check" button.
	\*************************************************************************/
	function CheckCardNumber(form) {
		var tmpyear;
		if (form.CardNumber.value.length == 0) {
			alert("Please enter a Card Number.");
			//form.CardNumber.focus();
			return false;
		}
		if (form.ExpYear.options[form.ExpYear.selectedIndex].value.length == 0) {
			alert("Please enter the Expiration Year.");
			//form.ExpYear.focus();
			return false;
		}
		if (form.ExpYear.options[form.ExpYear.selectedIndex].value > 96)
			tmpyear = "19" + form.ExpYear.options[form.ExpYear.selectedIndex].value;
		else if (form.ExpYear.value < 21)
			tmpyear = "20" + form.ExpYear.options[form.ExpYear.selectedIndex].value;
		else {
			alert("The Expiration Year is not valid.");
			return false;
		}
		tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
		// The following line doesn't work in IE3, you need to change it
		// to something like "(new CardType())...".
		// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
		if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
			alert("This card has already expired.");
			return false;
		}
		retval=false;
		card = form.CardType.options[form.CardType.selectedIndex].value;
		var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
		"\", " + tmpyear + ", " + tmpmonth + ");");
		
		cardname = "";
		
		if (retval){
		
		// comment this out if used on an order form
			//alert("This card number appears to be valid.");
			return true;
		}else {
		// The cardnumber has the valid luhn checksum, but we want to know which
		// cardtype it belongs to.
			for (var n = 0; n < Cards.size; n++) {
				if (Cards[n].checkCardNumber(form.CardNumber.value, tmpyear, tmpmonth)) {
					cardname = Cards[n].getCardType();
					break;
			   }
			}
			if (cardname.length > 0) {
				alert("This looks like a " + cardname + " number, not a " + card + " number.");
			}else {
				alert("This card number is not valid.");
			}
			return false;
		}
	}
	/*************************************************************************\
	Object CardType([String cardtype, String rules, String len, int year, 
	                                        int month])
	cardtype    : type of card, eg: MasterCard, Visa, etc.
	rules       : rules of the cardnumber, eg: "4", "6011", "34,37".
	len         : valid length of cardnumber, eg: "16,19", "13,16".
	year        : year of expiry date.
	month       : month of expiry date.
	eg:
	var VisaCard = new CardType("Visa", "4", "16");
	var AmExCard = new CardType("AmEx", "34,37", "15");
	\*************************************************************************/
	function CardType() {
		var n;
		var argv = CardType.arguments;
		var argc = CardType.arguments.length;
		
		this.objname = "object CardType";
		
		var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
		var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
		var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";
		
		this.setCardNumber = setCardNumber;  // set CardNumber method.
		this.setCardType = setCardType;  // setCardType method.
		this.setLen = setLen;  // setLen method.
		this.setRules = setRules;  // setRules method.
		this.setExpiryDate = setExpiryDate;  // setExpiryDate method.
		
		this.setCardType(tmpcardtype);
		this.setLen(tmplen);
		this.setRules(tmprules);
		if (argc > 4)
		this.setExpiryDate(argv[3], argv[4]);
		
		this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
		this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
		this.getCardType = getCardType;  // getCardType method.
		this.isCardNumber = isCardNumber;  // isCardNumber method.
		this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
		this.luhnCheck = luhnCheck;// luhnCheck method.
		return this;
	}
	
	/*************************************************************************\
	boolean checkCardNumber([String cardnumber, int year, int month])
	return true if cardnumber pass the luhncheck and the expiry date is
	valid, else return false.
	\*************************************************************************/
	function checkCardNumber() {
		var argv = checkCardNumber.arguments;
		var argc = checkCardNumber.arguments.length;
		var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
		var year = (argc > 1) ? argv[1] : this.year;
		var month = (argc > 2) ? argv[2] : this.month;
		
		this.setCardNumber(cardnumber);
		this.setExpiryDate(year, month);
		
		if (!this.isCardNumber())
			return false;
		if (!this.isExpiryDate())
			return false;
		
		return true;
	}
	/*************************************************************************\
	String getCardType()
	return the cardtype.
	\*************************************************************************/
	function getCardType() {
		return this.cardtype;
	}
	/*************************************************************************\
	String getExpiryDate()
	return the expiry date.
	\*************************************************************************/
	function getExpiryDate() {
		return this.month + "/" + this.year;
	}
	/*************************************************************************\
	boolean isCardNumber([String cardnumber])
	return true if cardnumber pass the luhncheck and the rules, else return
	false.
	\*************************************************************************/
	function isCardNumber() {
		var argv = isCardNumber.arguments;
		var argc = isCardNumber.arguments.length;
		var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
		if (!this.luhnCheck())
			return false;
		for (var n = 0; n < this.len.size; n++)
			if (cardnumber.toString().length == this.len[n]) {
				for (var m = 0; m < this.rules.size; m++) {
					var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
					if (headdigit == this.rules[m])
						return true;
				}
				return false;
			}
		return false;
	}
	
	/*************************************************************************\
	boolean isExpiryDate([int year, int month])
	return true if the date is a valid expiry date,
	else return false.
	\*************************************************************************/
	function isExpiryDate() {
		var argv = isExpiryDate.arguments;
		var argc = isExpiryDate.arguments.length;
		
		year = argc > 0 ? argv[0] : this.year;
		month = argc > 1 ? argv[1] : this.month;
		
		if (!isNum(year+""))
			return false;
		if (!isNum(month+""))
			return false;
		today = new Date();
		expiry = new Date(year, month);
		if (today.getTime() > expiry.getTime())
			return false;
		else
			return true;
	}
	
	/*************************************************************************\
	boolean isNum(String argvalue)
	return true if argvalue contains only numeric characters,
	else return false.
	\*************************************************************************/
	function isNum(argvalue) {
	argvalue = argvalue.toString();
	
	if (argvalue.length == 0)
		return false;
		
	for (var n = 0; n < argvalue.length; n++)
		if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
			return false;

	return true;
	}
	
	/*************************************************************************\
	boolean luhnCheck([String CardNumber])
	return true if CardNumber pass the luhn check else return false.
	Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
	\*************************************************************************/
	function luhnCheck() {
	var argv = luhnCheck.arguments;
	var argc = luhnCheck.arguments.length;
	
	var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
	
	if (! isNum(CardNumber)) {
		return false;
	}
	
	var no_digit = CardNumber.length;
	var oddoeven = no_digit & 1;
	var sum = 0;
	
	for (var count = 0; count < no_digit; count++) {
		var digit = parseInt(CardNumber.charAt(count));
		if (!((count & 1) ^ oddoeven)) {
			digit *= 2;
			if (digit > 9)
				digit -= 9;
		}
		sum += digit;
	}
	if (sum % 10 == 0)
		return true;
	else
		return false;
	}
	
	/*************************************************************************\
	ArrayObject makeArray(int size)
	return the array object in the size specified.
	\*************************************************************************/
	function makeArray(size) {
		this.size = size;
		return this;
	}
	
	/*************************************************************************\
	CardType setCardNumber(cardnumber)
	return the CardType object.
	\*************************************************************************/
	function setCardNumber(cardnumber) {
		this.cardnumber = cardnumber;
		return this;
	}
	
	/*************************************************************************\
	CardType setCardType(cardtype)
	return the CardType object.
	\*************************************************************************/
	function setCardType(cardtype) {
		this.cardtype = cardtype;
		return this;
	}
	
	/*************************************************************************\
	CardType setExpiryDate(year, month)
	return the CardType object.
	\*************************************************************************/
	function setExpiryDate(year, month) {
		this.year = year;
		this.month = month;
		return this;
	}
	
	/*************************************************************************\
	CardType setLen(len)
	return the CardType object.
	\*************************************************************************/
	function setLen(len) {
		// Create the len array.
		if (len.length == 0 || len == null)
			len = "13,14,15,16,19";
		
		var tmplen = len;
		n = 1;
		while (tmplen.indexOf(",") != -1) {
			tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
			n++;
		}
		this.len = new makeArray(n);
		n = 0;
		while (len.indexOf(",") != -1) {
			var tmpstr = len.substring(0, len.indexOf(","));
			this.len[n] = tmpstr;
			len = len.substring(len.indexOf(",") + 1, len.length);
			n++;
		}
		this.len[n] = len;
		return this;
	}
	
	/*************************************************************************\
	CardType setRules()
	return the CardType object.
	\*************************************************************************/
	function setRules(rules) {
		// Create the rules array.
		if (rules.length == 0 || rules == null)
			rules = "0,1,2,3,4,5,6,7,8,9";
		  
		var tmprules = rules;
		n = 1;
		while (tmprules.indexOf(",") != -1) {
			tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
			n++;
		}
		this.rules = new makeArray(n);
		n = 0;
		while (rules.indexOf(",") != -1) {
			var tmpstr = rules.substring(0, rules.indexOf(","));
			this.rules[n] = tmpstr;
			rules = rules.substring(rules.indexOf(",") + 1, rules.length);
			n++;
		}
		this.rules[n] = rules;
		return this;
	}

<!-- Begin
function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=300,height=300');");
}
// End -->

<!--
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) { //v3.0
  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); 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];}
}
//-->

