var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var phoneNumberDelimiters = "()-.extension ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9

// i for "invalid"
var iZIPCode = "This field must be a 5 digit U.S. ZIP Code. Please reenter it."
var iPhone = "Please enter a valid phone number."
var iFax = "Please enter a valid US fax number."
var iEmail = "Please enter a valid email address."
var iYear = "Please enter a 4 digit year number."
var iModelYear = "Please select a vehicle year."
var iModel = "Please select a vehicle model."
var iTransmission = "Please select a transmission type."

// p for "prompt"
var pEntryPrompt = "Please enter a "
var pLastName = "Please enter your last name."
var pFirstName = "Please enter your first name."
var pPhone = "Please enter a valid phone number."
var pFax = "Please enter a valid US fax number."
var pEmail = "Please enter a valid email address."
var pModelYear = "Please select a vehicle year."
var pModelName = "Please select a vehicle model."
var pTransmission = "Please select a transmission type."
var pPartsInfo = "Please tell us what you need for your vehicle."
var pYear = "Please enter a 4 digit year number."

// Check whether string s is empty.
function isEmpty(s)
{   
    return ((s == null) || (s.length == 0))
}

// Returns true if string s is empty or whitespace characters only.
function isWhitespace (s)
{   var i;
    // Is s empty?
    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

function warnEmpty (theField, s)
{   theField.focus();
    alert(s);
    return false;
}

function warnInvalid (theField, s)
{   theField.focus();
    alert(s);
    return false;
}

// Display data entry prompt string s in status bar.
function promptEntry (s)
{   
    window.status = s;
}

function isEmail (s)
{   
    if (isEmpty(s)) return false;

    // is s whitespace?
    if (isWhitespace(s)) return false;
    
    // there must be >= 1 character before @, so we start looking at character position 1 
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least two characters after the .
    if ((i >= sLength - 2) || (s.charAt(i) != ".")) return false;
    else return true;
}

function checkEmail (theField, required)
{   
    if (checkEmail.arguments.length == 1) {
	required= false;
    } 

    if ((required == false) && (isEmpty(theField.value))) {
    	return true;
    } else if (!isEmail(theField.value)) {
       return warnInvalid (theField, iEmail);
    } else {
    	return true;
    }
}

function checkString (theField, s, required)
{   
    if (checkString.arguments.length == 2) required = false;
    if ((required) && (isEmpty(theField.value) || isWhitespace(theField.value))) 
	return warnInvalid (theField, s);
    else	
	return true;
}

function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    for (i = 0; i < s.length; i++) {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

function isDigit (c)
{   
    return ((c >= "0") && (c <= "9"))
}

function isInteger (s)
{   
    var i;
    if (isEmpty(s)) return false;

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }

    return true;
}

function isMixed (s)
{   
    var i;
    if (isEmpty(s)) return false;
    var c = s.charAt(0);

    for (i = 0; i < s.length; i++) {   
        if (s.charAt(i) != c) return true;
    }

    return false;
}

function isPhoneNumber (s)
{   
    return (s.length > 10 && isInteger(s) && isMixed(s))
}

function isUSPhoneNumber (s)
{   
    return (s.length == 10 && isInteger(s) && isMixed(s.substring(0, 3)) 
    && isMixed(s.substring(3, 6)))
}

function isUSPhoneNumber2 (s)
{   
    if (isEmpty(s) || isWhitespace(s)) {
    	return false;
    } else {
       var normalizedPhone = stripCharsInBag(s,  phoneNumberDelimiters);

       if (isUSPhoneNumber(normalizedPhone)) {
          return true;
       } else if (isPhoneNumber(normalizedPhone)) {
          return true;	
       } else {
          return false;
       } 
    }
}

function getUSPhoneNumber (s)
{   
    if (isEmpty(s) || isWhitespace(s)) {
    	return "";
    } else {
       var normalizedPhone = stripCharsInBag(s, phoneNumberDelimiters);

       if (isUSPhoneNumber(normalizedPhone)) {
          return reformatUSPhone(normalizedPhone);
       } else if (isPhoneNumber(normalizedPhone)) {
          return normalizedPhone;
       } else {
          return "";
       } 
    }
}

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 reformatUSPhone (USPhone)
{   
	return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

function checkPhone (theField, required)
{   
    if (checkPhone.arguments.length == 1) required = false;

    if ((required) && (isEmpty(theField.value) || isWhitespace(theField.value))) {
    	return warnInvalid (theField, iPhone);
    } else {
       if (isEmpty(theField.value)) return true;
       var normalizedPhone = stripCharsInBag(theField.value,  phoneNumberDelimiters);

       if (isUSPhoneNumber(normalizedPhone)) {
          theField.value = reformatUSPhone(normalizedPhone);
          return true;
       } else if (isPhoneNumber(normalizedPhone)) {
          return true;	
       } else {
          return warnInvalid (theField, iPhone);
       } 
    }
}

function isZIPCode (s)
{  
    return ((s.length == 5) && isInteger(s))
}

function checkModelYear(theField, required)
{
	//alert(theField.options[theField.selectedIndex].value);

	if	(theField.options[theField.selectedIndex].value > "0")
		return true;
	else 
	       return warnInvalid (theField, pModelYear);
}

function checkModelName(theField, required)
{
	if	(theField.options[theField.selectedIndex].value > "0")
		return true;
	else 
	       return warnInvalid (theField, pModelName);
}

function checkTransmission(theField, required)
{
	if	(theField.options[theField.selectedIndex].value > "0")
		return true;
	else 
       return warnInvalid (theField, pTransmission);
}

function checkPartsRequest(theField, required)
{
	var strPartsRequest = theField.value;
	if (strPartsRequest.length > 10 && isMixed(strPartsRequest))
		return true;
	else 
       return warnInvalid (theField, pPartsInfo);
}

function displayValidation(form)
{     
    var validationResult = "<HTML><HEAD><TITLE>Results</TITLE></HEAD><BODY><H1>Data Validation Passed!</H1></BODY></HTML>";
    document.writeln(validationResult);
    document.close();
    return true;
}

