var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var phoneNumberDelimiters = "/\()-.xX ";
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var creditCardDelimiters = " -."
var validCreditCardChars = digits + creditCardDelimiters

var defaultEmptyOK = false

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
}
function isWhitespace (s) {
	var i;

	if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}
function stripCharsInBag (s, bag) {
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}
function reformat (s) {
	var arg;
	var sPos = 0;
	var resultString = "";

	for (var i = 1; i < reformat.arguments.length; i++) {
		arg = reformat.arguments[i];
		if (i % 2 == 1) resultString += arg;
		else {
			resultString += s.substring(sPos, sPos + arg);
			sPos += arg;
		}
	}
	return resultString;
}
function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}
function isInteger (s) {
	var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return true;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
	if (s == 0) {
		return false
	}	
    return true;
}
function isSignedInteger (s) {
	if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);
    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}
function isPositiveInteger (s) {
	var secondArg = defaultEmptyOK;

    if (isPositiveInteger.arguments.length > 1)
        secondArg = isPositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
}
function isNonnegativeInteger (s) {
	var secondArg = defaultEmptyOK;
	if (isNonnegativeInteger.arguments.length > 1)
		secondArg = isNonnegativeInteger.arguments[1];
	return (isSignedInteger(s, secondArg)
		&& ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isNegativeInteger (s) {
	var secondArg = defaultEmptyOK;

    if (isNegativeInteger.arguments.length > 1)
        secondArg = isNegativeInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
}
function isNonpositiveInteger (s) {
	var secondArg = defaultEmptyOK;

    if (isNonpositiveInteger.arguments.length > 1)
        secondArg = isNonpositiveInteger.arguments[1];
    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
}
function reformatZIPCode (ZIPString) {
	if (ZIPString.length == 5) return ZIPString;
	else return (reformat (ZIPString, "", 5, "-", 4));
}
function isZIPCode (s) {
	if (isEmpty(s)) 
		if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
		else return (isZIPCode.arguments[1] == true);
	return (isInteger(s) && ((s.length == digitsInZIPCode1) || (s.length == digitsInZIPCode2)))
}
function checkZIPCode (theField, emptyOK) {
	if (checkZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalid (theField, "Please provide a valid US Zip Code.");
      else 
      {
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}
function reformatUSPhone (USPhone) {
	if (USPhone.length > 10) {
		return (reformat (USPhone, "", 3, "-", 3, "-", 4, " x", 10))
	} else {
		return (reformat (USPhone, "", 3, "-", 3, "-", 4))
	}
}
function isUSPhoneNumber (s) {
	if (isEmpty(s)) 
    	if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isUSPhoneNumber.arguments[1] == true);
	return (isInteger(s) && s.length >= digitsInUSPhoneNumber)
}
function checkUSPhone (theField, emptyOK) {
	if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false)) 
          return warnInvalid (theField, "Please provide a valid US phone number using this format: 999-999-9999 x999.");
       else 
       {
          theField.value = reformatUSPhone(normalizedPhone)
          return true;
       }
    }
}
function isInternationalPhoneNumber (s) {
	if (isEmpty(s)) 
		if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
		else return (isInternationalPhoneNumber.arguments[1] == true);
    return (isPositiveInteger(s))
}
function checkInternationalPhone (theField, emptyOK) {
	if (checkInternationalPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
	if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else
	{	var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
		if (!isInternationalPhoneNumber(normalizedPhone, false)) 
		   return warnInvalid (theField, "Please provide a valid International phone number.");
		else
		{
	   		return true;
		}
	}
}
function isEmail (s) {
	if (isEmpty(s)) 
		if (isEmail.arguments.length == 1) return defaultEmptyOK;
		else return (isEmail.arguments[1] == true);
	if (isWhitespace(s)) return false;
	var i = 1;
	var sLength = s.length;
	while ((i < sLength) && (s.charAt(i) != "@")) {
		i++
	}
	if ((i >= sLength) || (s.charAt(i) != "@")) return false;
	else i += 2;

	while ((i < sLength) && (s.charAt(i) != ".")) {
		i++
	}
	if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
	else return true;
}
function checkEmail (theField, emptyOK) {
	if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
		if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	else if (!isEmail(theField.value, false)) 
    	return warnInvalid (theField, "Please provide a valid e-mail address.");
	else return true;
}
function formatCCNumber (theField) {
	var badChars = stripCharsInBag(theField.value, validCreditCardChars)
    var normalizedCCN = stripCharsInBag(theField.value, badChars)
	theField.value = normalizedCCN
}
function validateAddress(obj){
// validate the bill to address
	var i, flag, rtn, theField, theObj, CountryValue;

	flag = true;
	if (typeof obj == "string") {
		theObj = eval("document." + obj);
		
		CountryValue = theObj.Country.options[theObj.Country.selectedIndex].value;

		theField = theObj.FirstName
		if ((flag) & isEmpty(theField.value)) {
			rtn = warnInvalid (theField, "Please provide your first name.");
			theObj.FirstName.focus()
			flag = false;
		}
		theField = theObj.LastName
		if ((flag) & isEmpty(theField.value)) {
			rtn = warnInvalid (theField, "Please provide your last name.");
			theObj.LastName.focus()
			flag = false;
		}
		theField = theObj.Company
		if ((flag) & isEmpty(theField.value)) {
			rtn = warnInvalid (theField, "Please provide your company name.");
			theObj.Company.focus()
			flag = false;
		}
		theField = theObj.Address1
		if ((flag) & isEmpty(theField.value)) {
			rtn = warnInvalid (theField, "Please provide your street address.");
			theObj.Address1.focus()
			flag = false;
		}
		theField = theObj.City
		if ((flag) & isEmpty(theField.value)) {
			rtn = warnInvalid (theField, "Please provide your city.");
			theObj.City.focus()
			flag = false;
		}
		if (flag) {
			if ((CountryValue == "US") || (CountryValue == "CA")) {
				if (theObj.State.selectedIndex < 1) {
					window.alert("Please provide your state.");
					theObj.State.focus()
					flag = false;
				}
			} 
		}
		if ((flag) & (theObj.Country.selectedIndex < 1)) {
			window.alert("Please provide your country.");
			theObj.Country.focus()
			flag = false;
		}
		if ((flag) & (CountryValue == "US")) {
			rtn = checkZIPCode(theObj.ZipCode)
			if (!rtn) {
				theObj.ZipCode.focus()
				flag = false;
			}
		}
		if (flag) {
			if (CountryValue == "US") {
				rtn = checkUSPhone(theObj.Phone)
				if (!rtn) {
					theObj.Phone.focus()
					flag = false;
				}
			} else {
				rtn = checkInternationalPhone(theObj.Phone)
				if (!rtn) {
					theObj.Phone.focus()
					flag = false;
				}
			}
			
		}
		if (flag) {
			rtn = checkEmail(theObj.Email)
			if (!rtn) {
				flag = false;
			}
		}
	}
	return flag
}
function submitForm() {
	if (validateAddress("FormRequest")) {
		document.FormRequest.submit();
	}
}
function country_OnChange() {
	var refresh = false;
	var TCountryValue = document.FormRequest.tempCountry.value;
	var BCountryValue = document.FormRequest.Country.options[document.FormRequest.Country.selectedIndex].value;

	if ((TCountryValue == "US") && (BCountryValue != "US") && (BCountryValue != "")){
		refresh = true;
	}else if ((TCountryValue == "CA") && (BCountryValue != "CA") && (BCountryValue != "")){
		refresh = true;
	}else{	
		if (((TCountryValue != "US") || (TCountryValue != "CA")) && ((BCountryValue == "CA") || (BCountryValue == "US"))) {
			refresh = true;
		}
	}
	if(refresh){
		document.FormRequest.changed.value = "tempCountry";
		document.FormRequest.submit();
	}
}
