				function validateServiceLocatorZip(theForm)
				{
					var validZip = true;
					var zip = theForm.txtServiceLocator.value;
					var validChars = "0123456789";
					if (zip == null || zip.length==0 || zip.length!=5)
					{
						validZip = false;
					}    
					for (var i=0; i < zip.length; i++) {
						temp = "" + zip.substring(i, i+1);
				        if (validChars.indexOf(temp) == "-1") {
							validZip = false;
				        }
					}
					if (!validZip) {
						alert("Please enter a valid Zip code.");
					}
					return validZip;
				}

/* Tabs to the next field after some numbers of characters have been entered in the current field.
  - 'input' is the name of the current field (generally 'this')
  - 'len' is the max number of characters for the current field
  - 'e' is the event ('event')
*/
function autoTab(input,len, e) {

    var isNN = (navigator.appName.indexOf("Netscape")!=-1);

    // ASCII value of pressed key
    var keyCode = (isNN) ? e.which : e.keyCode; 
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

    // Focus on next field    
    if(input.value.length >= len && !containsElement(filter,keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input)+1) % input.form.length].focus();
    }

    // Check if element is in array
    function containsElement(arr, ele) {
        var found = false, index = 0;
        while(!found && index < arr.length) {
            if(arr[index] == ele)
                found = true;
            else
                index++;
        }
        return found;
    }

    // Get index of next form element
    function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1) {
            if (input.form[i] == input)
                index = i;
            else 
                i++;
        }                
        return index;
    }
    
    return true;
}


// trims the white space from either end of a text value
function trim(textValue) {
    // remove from end
    while (''+textValue.charAt(textValue.length - 1) == ' ') {
        textValue = textValue.substring(0, textValue.length - 1);  
    }

    // remove from beginning
    while (''+textValue.charAt(0) == ' ') {
        textValue = textValue.substr(1);
    }
    
    return textValue;
}

// Return true if a non-0-length value is selected in the selectBox
function validSelect(selectBox) {
    if (selectBox == null) return true;
    selIdx = selectBox.selectedIndex;
    choice = selectBox.options[selIdx].value;
    if (choice.length == 0) {
        return false;
    } else 
    return true;
}

// Check for valid email address. NOTE: This passes the field, not the field value.

function isEmail(fieldname, setFocus) {

	if (fieldname == null) return "";
	var field = fieldname.value;
	if (field.length==0) return "";

	if (field.length < 7) {
		if (setFocus)  {
			fieldname.focus();
		}
	    return "The e-mail address you entered is not valid. Please verify.\n";
	}

	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)|( +)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{1,3}|[0-9]{1,3})(\\]?)$");
	if(!r1.test(field) && r2.test(field))
		return "";
	else
	{
		if (setFocus) {
			fieldname.focus();
		}
		return "The e-mail address you entered is not valid. Please verify.\n";
	}
}


// Check for valid number
function isNumber(fieldname, message, fieldLength, setFocus) {
    if (fieldname == null) return "";

    var digits = "0123456789";   
    var field = fieldname.value;
    
    if (field.length==0) return ""; 
    
    if (fieldLength > 0) {
      if (field.length != fieldLength) {
        if (setFocus) fieldname.focus();
        return message;
      }
    }

    for (var i=0; i < field.length; i++) {
        temp = field.substring(i, i+1);
        if ((digits.indexOf(temp) == "-1")) {
            if (setFocus) fieldname.focus();
            return message;
        }
    }
        
    return "";
}

// Check for valid number with hyphens
function isNumberWithHyphens(fieldname, message, numberLength, setFocus) {
    if (fieldname == null) return "";
 
    var digits = "0123456789- ";
    var valid = "- ";
    var notadigit = 0;
    var field = fieldname.value;
    
    if (field.length==0) return ""; 
    
    for (var i=0; i < field.length; i++) {
        temp = "" + field.substring(i, i+1);
        if (valid.indexOf(temp) != "-1") notadigit++;
        if ((digits.indexOf(temp) == "-1")&& (valid.indexOf(temp) == "-1")) {
            if (setFocus) fieldname.focus();
            return message;
        }
    }
    
    if ((field.length-notadigit)!=numberLength) {
        if (setFocus) fieldname.focus();
        return message;
    }
    
    return "";
}

// Check for valid zip code:
//  - if 5 characters long, each character must be a digit
//  - if 10 characters long, each character except the 6th
//    must be a digit; the 6th must be a hyphen
function isZip(fieldname, message, setFocus) {
    if (fieldname == null) return "";

    var valid = "0123456789-";
    var field = fieldname.value;
    
    if (field.length==0) return ""; 

    // return error if there are not 5 or 10 characters in the zip
    if (field.length!=5 && field.length!=10) {
        if (setFocus) fieldname.focus();
        return message;
    }
    
    for (var i=0; i < field.length; i++) {
        temp = "" + field.substring(i, i+1);
        
        // return error if the character is not a digit or hyphen
        if (valid.indexOf(temp) == "-1") {
            if (setFocus) fieldname.focus();
            return message;
        }
        
        // return error if the character is a hyphen, but it is not in position 6
        if (temp == "-") {
            if (i != 5) {
                if (setFocus) fieldname.focus();
                return message;
            }
        }

        // return error if there are 10 characters and the 6th is not a hyphen
        if ((field.length==10) && ""+field.charAt(5)!="-") {
            if (setFocus) fieldname.focus();
            return message;
        }
    }
    return "";
}

// Checks for digits
function validPhone(area, exch, suffix, phoneType, setFocus) {
    errorMessage = "";
    errorMessage += isNumber(area, "Please enter a valid "+phoneType+" phone area code.\n", 3, setFocus);
    errorMessage += isNumber(exch, "Please enter a valid "+phoneType+" phone exchange.\n", 3, setFocus);
    errorMessage += isNumber(suffix, "Please enter a valid "+phoneType+" phone suffix.\n", 4, setFocus);
        
    return errorMessage;
}

// Check for complete phone number
function completePhone(area, exch, suffix, phoneType, setFocus) {
    errorMessage = "";

    if (area.value.length > 0 || exch.value.length > 0 || suffix.value.length > 0) {
        if (area.value.length == 0 || exch.value.length == 0 || suffix.value.length == 0) {
            errorMessage += "Please complete the "+phoneType+" phone number.\n";
            if (setFocus) area.focus();
        }
    }
    
    return errorMessage;
}

// Return error message if the field value length is 0
function requiredField(field, specificError, setFocus) {
    var nonblanks = 0;
    var thisChar;
    
    for (i = 0; i < field.value.length; i++) {
        thisChar = field.value.charCodeAt(i);
        
        // 32 is a blank; 9 is a tab
        if (thisChar != 32 && thisChar != 9) 
            nonblanks += 1;
    }
    
    if (nonblanks == 0) {
        if (setFocus) field.focus();
        return specificError;
    }
    return "";
}

// Return true if the string contains a double quote
function containsDoubleQuote(s) {
    var re = /.*\".*/;    
    return re.test(s);
}
function customPhoneValidations(area, exch, suffix, phoneType, setFocus) 
{
	var phnumber = "";
	var phareacode  = area.value;
	var phexchange = exch.value;
	var phsuffix = suffix.value;
	errorMessage = "";
   
	if ((phareacode != null || phareacode.length > 0) 
	&& (phexchange != null || phexchange.length > 0)
	&& (phsuffix != null || phsuffix.length > 0)) {
		phnumber = phareacode + phexchange + phsuffix;
	}
   
	if ( phnumber.length > 0 ) {
		errorMessage += arePhoneDigitsIdentical(phnumber, phoneType, setFocus);
		errorMessage += arePhoneDigitsInSequence(phnumber, phoneType, setFocus);
	}
   
	if ( setFocus ) {
		area.focus();
	}
   
	return errorMessage;
   
}

//check phone number has identical numbers
//like 0000000000 .. 9999999999
function arePhoneDigitsIdentical(phoneNumber, phoneType, setFocus) 
{
	errorMessage = "";
	var phoneDigitsIdentical = true;

	var phoneDigit = phoneNumber.substring(0,1);
	for (var idx=1; idx<phoneNumber.length; idx++) {
		if ( phoneDigit != phoneNumber.substring(idx, idx+1) ) {
			phoneDigitsIdentical = false;
			break;
		}  
	}
	if (phoneDigitsIdentical) {
		errorMessage += phoneType;
	}

	return errorMessage;
}


// check if phone number has sequence of numbers
// 1234567890
function arePhoneDigitsInSequence(phoneNumber, phoneType, setFocus) {
	errorMessage = "";
   
	if ("1234567890" == phoneNumber || "0123456789" == phoneNumber) {
   		errorMessage += phoneType;
   	}
   
	return errorMessage;

}

var theFormSubmitted = false;

function ValidateForm(theForm)
{
       if (theFormSubmitted) {
        alert("This form has already been submitted.");
	    return false;    
	}

	var errorCount = 0;
	var errorArray = new Array();

	var errorMessage = "";

    // Clean and validate the name.       
	if (theForm.fName.value != null) {
		theForm.fName.value = theForm.fName.value.replace(/\"/g,"");
	}
                      
	errorMessage = requiredField(theForm.fName, "First Name", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

       if (theForm.lName.value != null) {
		theForm.lName.value = theForm.lName.value.replace(/\"/g,"");
	}

	errorMessage = requiredField(theForm.lName, "Last Name", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	// Clean and validate the address.
	if (theForm.add1.value != null) {
		theForm.add1.value = theForm.add1.value.replace(/\"/g,"");
	}

	errorMessage = requiredField(theForm.add1, "Address 1", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	if (theForm.add2.value != null) {
		theForm.add2.value = theForm.add2.value.replace(/\"/g,"");
	}

	if (theForm.city.value != null) {
		theForm.city.value = theForm.city.value.replace(/\"/g,"");
	}

	errorMessage = requiredField(theForm.city, "City", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	if (!validSelect(theForm.state)) {
		errorArray[errorCount++] = "State";
		if (errorCount == 1) {
			theForm.state.focus();
		}
	}

	if (theForm.zip.value != null) {
		theForm.zip.value = theForm.zip.value.replace(/ /g,"");
	}

	errorMessage = requiredField(theForm.zip, "ZIP Code", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isZip(theForm.zip, "ZIP Code", errorCount==0)
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	// Validate the phone numbers.
	errorMessage = requiredField(theForm.dayPhoneArea, "Day Phone Area Code", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneArea, "Day Phone Area Code", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.dayPhoneExch, "Day Phone Exchange", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneExch, "Day Phone Exchange", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.dayPhoneNum, "Day Phone Suffix", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneNum, "Day Phone Suffix", 4, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = isNumber(theForm.dayPhoneExt, "Day Phone Extension", 0, errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

       errorMessage = requiredField(theForm.evePhoneArea, "Evening Phone Area Code", errorCount==0);
    if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneArea, "Evening Phone Area Code", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.evePhoneExch, "Evening Phone Exchange", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneExch, "Evening Phone Exchange", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.evePhoneNum,  "Evening Phone Suffix", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneNum, "Evening Phone Suffix", 4, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = isNumber(theForm.evePhoneExt, "Evening Phone Extension", 0, errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = customPhoneValidations(theForm.dayPhoneArea, theForm.dayPhoneExch, theForm.dayPhoneNum, "Day phone", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}
	errorMessage = customPhoneValidations(theForm.evePhoneArea, theForm.evePhoneExch, theForm.evePhoneNum, "Evening phone", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;        
	}

	// Check the email
	errorMessage = requiredField(theForm.email, "E-mail address", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isEmail(theForm.email, errorCount==0);
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = "E-mail address"; 
	}

	// handle errors
	var errorMsg = "";

	// multiple standard errors
	if (errorCount > 1) {
		errorMsg = "Please specify a valid value for each of the following:\n";
		for (idx = 0; idx < errorCount; idx++) {
			errorMsg += "- " + errorArray[idx] + "\n";
		}
	}
	// single standard error
	else { 
		if (errorCount == 1) {
			errorMsg = "Please specify a valid value for " + errorArray[0];
		}
	}

	// alert the user to any errors else submit it
	if (errorMsg.length > 0) {
		alert(errorMsg);
		return false;
	}
	else {
		theFormSubmitted = true;
		return true;
	}
}

function PopWin(page, w, h)
{	
	//constants definitions
	var URL = page;
	var WINDOW_NAME = "newWin";
	var WLEFT = (screen.width/2)-(w/2);
	var WTOP = (screen.height/2)-(h/2);
	
	win = window.open(URL,WINDOW_NAME,'menubar=no, resizeable=yes, scrollbars=yes, width='+w+', height='+h+',left='+WLEFT+',top='+WTOP);
	win.focus();
}

/* dfw billing page */

	
function ValidateBillingForm(theForm)
{
       if (theFormSubmitted) {
        alert("This form has already been submitted.");
	    return false;    
	}

	var errorCount = 0;
	var errorArray = new Array();

	var errorMessage = "";

    // Clean and validate the name.       
	if (theForm.fName.value != null) {
		theForm.fName.value = theForm.fName.value.replace(/\"/g,"");
	}
                      
	errorMessage = requiredField(theForm.fName, "First Name", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

       if (theForm.lName.value != null) {
		theForm.lName.value = theForm.lName.value.replace(/\"/g,"");
	}

	errorMessage = requiredField(theForm.lName, "Last Name", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	// Validate the phone numbers.
	errorMessage = requiredField(theForm.dayPhoneArea, "Day Phone Area Code", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneArea, "Day Phone Area Code", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.dayPhoneExch, "Day Phone Exchange", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneExch, "Day Phone Exchange", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.dayPhoneNum, "Day Phone Suffix", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.dayPhoneNum, "Day Phone Suffix", 4, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = isNumber(theForm.dayPhoneExt, "Day Phone Extension", 0, errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

       errorMessage = requiredField(theForm.evePhoneArea, "Evening Phone Area Code", errorCount==0);
    if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneArea, "Evening Phone Area Code", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.evePhoneExch, "Evening Phone Exchange", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneExch, "Evening Phone Exchange", 3, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = requiredField(theForm.evePhoneNum,  "Evening Phone Suffix", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isNumber(theForm.evePhoneNum, "Evening Phone Suffix", 4, errorCount==0); 
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = isNumber(theForm.evePhoneExt, "Evening Phone Extension", 0, errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}

	errorMessage = customPhoneValidations(theForm.dayPhoneArea, theForm.dayPhoneExch, theForm.dayPhoneNum, "Day phone", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;
	}
	errorMessage = customPhoneValidations(theForm.evePhoneArea, theForm.evePhoneExch, theForm.evePhoneNum, "Evening phone", errorCount==0);
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = errorMessage;        
	}

	// Check the email
	errorMessage = requiredField(theForm.email, "E-mail address", errorCount==0);
	if (errorMessage.length == 0) {
		errorMessage = isEmail(theForm.email, errorCount==0);
	}
	if (errorMessage.length > 0) {
		errorArray[errorCount++] = "E-mail address"; 
	}
	
	// Check the cc number to see if it a validly formatted cc 
	errorMessage = requiredField(theForm.ccnum, "Credit Card Number", errorCount==0);
	if (errorMessage.length == 0) 
	{alert("selInd = " + theForm.cctype.options[cctype.selectedIndex])
		if(theForm.cctype.options[cctype.selectedIndex] == 0)
		{alert("inside ccnum err no type selected")
			errorArray[errorCount++] = "Credit Card Number (Please Select Correct Card Type)"; 
		}
		else
		{alert("inside else clause")
			errorMessage = checkCreditCard (theForm.ccnum.value, theForm.cctype.options[cctype.selectedIndex].value);
			if (errorMessage.length > 0) 
			{alert("ccnum failed")
				errorArray[errorCount++] = "Credit Card Number"; 
			}
		}
	}

	// handle errors
	var errorMsg = "";

	// multiple standard errors
	if (errorCount > 1) {
		errorMsg = "Please specify a valid value for each of the following:\n";
		for (idx = 0; idx < errorCount; idx++) {
			errorMsg += "- " + errorArray[idx] + "\n";
		}
	}
	// single standard error
	else { 
		if (errorCount == 1) {
			errorMsg = "Please specify a valid value for " + errorArray[0];
		}
	}

	// alert the user to any errors else submit it
	if (errorMsg.length > 0) {
		alert("" + errorMsg + "");
		return false;
	}
	else {
		theFormSubmitted = true;
		return true;
	}
}


