function CalcResults(form) 
{
	form.ElectricSavings.value=Math.round((form.FanPower.value*8760*(1-form.Compressor.value/100)*0.75*1.333)-(8760*1.2*form.Compressor.value/100000))
	form.MonetarySavings.value=Math.round(form.ElecRate.value*form.ElectricSavings.value)
	form.Payback.value=(Math.round(10*(form.ARTControl.value/form.MonetarySavings.value)))/10
  }
var useragent = navigator.userAgent;
var bName = (useragent.indexOf('Opera') > -1) ? 'Opera' : navigator.appName;
var pos = useragent.indexOf('MSIE');
if (pos > -1) {
bVer = useragent.substring(pos + 5);
var pos = bVer.indexOf(';');
var bVer = bVer.substring(0,pos);
}
var pos = useragent.indexOf('Opera');
if (pos > -1)	{
bVer = useragent.substring(pos + 6);
var pos = bVer.indexOf(' ');
var bVer = bVer.substring(0, pos);
}
if (bName == "Netscape") {
var bVer = useragent.substring(8);
var pos = bVer.indexOf(' ');
var bVer = bVer.substring(0, pos);
}
if (bName == "Netscape" && parseInt(navigator.appVersion) >= 5) {
var pos = useragent.lastIndexOf('/');
var bVer = useragent.substring(pos + 1);
}

function checkForNotNull( input )
{
	var canSubmit = false;
	for ( var i = 0; i < input.length; i++ )
	{
		if ( input[i].value !=  null )
		{
			canSubmit = true;
		}
		else
		{
			alert( "This field " + i + input[i] + " cannot be blank, please enter valid data" )
			//input[i].focus();
			canSubmit = false;
			break;
		}
	}
	return canSubmit;
}

var empty = new Image(); empty.src = "fieldempty.gif";
var email = new Image(); email.src = "emailerror.gif";
var zipcd = new Image(); zipcd.src = "ziperror.gif";
var phone = new Image(); phone.src = "phoneerror.gif";

var haveerrors = 0;
function showImage(imagename, imageurl, errors) {
document[imagename].src = imageurl;
if (!haveerrors && errors) haveerrors = errors;
}

function validateForm(f) {
haveerrors = 0;
(f.firstname.value.length < 1) // validate first name length
? showImage("firstnameerror", "/Images/Forms/Errors/fieldempty.gif", true)   // no semi-colon after this line!
: showImage("firstnameerror", "/Images/Forms/Errors/blankimage.gif", false); // true = errors, false = no errors

(f.lastname.value.length < 1) // validate last name length
? showImage("lastnameerror", "/Images/Forms/Errors/fieldempty.gif", true)
: showImage("lastnameerror", "/Images/Forms/Errors/blankimage.gif", false);
return (!haveerrors);
}

// VARIABLE DECLARATIONS
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = "."
var phoneNumberDelimiters = "()- ";
var accountNumberDelimiters = "-";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
var SSNDelimiters = "- ";
var validSSNChars = digits + SSNDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInUSPhoneNumber = 10;
var digitsInGRUAccountNumber = 12;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var creditCardDelimiters = " "
var mPrefix = "You did not enter a value into the "
var mSuffix = " field. This is a required field. Please enter it now."
var sUSLastName = "Last Name"
var sUSFirstName = "First Name"
var sWorldLastName = "Family Name"
var sWorldFirstName = "Given Name"
var sTitle = "Title"
var sCompanyName = "Company Name"
var sUSAddress = "Street Address"
var sWorldAddress = "Address"
var sCity = "City"
var sStateCode = "State Code"
var sWorldState = "State, Province, or Prefecture"
var sCountry = "Country"
var sZIPCode = "ZIP Code"
var sWorldPostalCode = "Postal Code"
var sPhone = "Phone Number"
var sFax = "Fax Number"
var sDateOfBirth = "Date of Birth"
var sExpirationDate = "Expiration Date"
var sEmail = "Email"
var sSSN = "Social Security Number"
var sCreditCardNumber = "Credit Card Number"
var sOtherInfo = "Other Information"

// i is an abbreviation for "invalid"
var iStateCode = "This field must be a valid two character U.S. state abbreviation (like FL for California). Please reenter it now."
var iZIPCode = "This field must be a 5 or 9 digit U.S. ZIP Code (like 32601). Please reenter it now."
var iUSPhone = "This field must be a 10 digit U.S. phone number (like 352 555 1212). Please reenter it now."
var iGRUAccountNumber = "This field must be a 12 digit GRU Account number (like 1234-5678-9101). Please reenter it now."
var iWorldPhone = "This field must be a valid international phone number. Please reenter it now."
var iSSN = "This field must be a 9 digit U.S. social security number (like 123 45 6789). Please reenter it now."
var iEmail = "This field must be a valid email address (like user@gru.net). Please reenter it now."
var iCreditCardPrefix = "This is not a valid "
var iCreditCardSuffix = " credit card number. Please reenter it now."
var iDay = "This field must be a day number between 1 and 31.  Please reenter it now."
var iMonth = "This field must be a month number between 1 and 12.  Please reenter it now."
var iYear = "This field must be a 4 digit year number.  Please reenter it now."
var iDatePrefix = "The Day, Month, and Year for "
var iDateSuffix = " do not form a valid date.  Please reenter them now."

// p is an abbreviation for "prompt"
var pEntryPrompt = "Please enter a "
var pStateCode = "2 character code (like FL)."
var pZIPCode = "5 or 9 digit U.S. ZIP Code (like 32601)."
var pUSPhone = "10 digit U.S. phone number (like 352 555 1212)."
var pWorldPhone = "international phone number."
var pSSN = "9 digit U.S. social security number (like 123 45 6789)."
var pEmail = "valid email address (like user@gru.net)."
var pCreditCard = "valid credit card number."
var pDay = "day number between 1 and 31."
var pMonth = "month number between 1 and 12."
var pYear = "4 digit year number."

var defaultEmptyOK = false

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

var USStateCodeDelimiter = "|";
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"

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 stripCharsNotInBag (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 stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
     i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isDigit(c)) 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 isFloat (s)
{   var i;
    var seenDecimalPoint = false;
    if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);
    if (s == decimalPointDelimiter) return false;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);

        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }
    return true;
}

function isSignedFloat (s)

{   if (isEmpty(s)) 
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);
	else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;
        if (isSignedFloat.arguments.length > 1)
            secondArg = isSignedFloat.arguments[1];
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isFloat(s.substring(startPos, s.length), secondArg))
    }
}

function isAlphabetic (s)
{   var i;
    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }
    return true;
}

function isAlphanumeric (s)
{   var i;
    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }
    return true;
}
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 isSSN (s)
{   if (isEmpty(s)) 
       if (isSSN.arguments.length == 1) return defaultEmptyOK;
       else return (isSSN.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInSocialSecurityNumber)
}
function isGRUAccountNumber(s) {
	if (isEmpty(s)) {
		if (isGRUAccountNumber.arguments.length == 1) {
			return defaultEmptyOK;
		} else {
			return isGRUAccountNumber.arguments[1] == true;
		}		
	} else {
		return isInteger(s) && s.length == digitsInGRUAccountNumber;
	}
}
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 isInternationalPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isInternationalPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isInternationalPhoneNumber.arguments[1] == true);
    return (isPositiveInteger(s))
}
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 isStateCode(s)
{   if (isEmpty(s)) 
       if (isStateCode.arguments.length == 1) return defaultEmptyOK;
       else return (isStateCode.arguments[1] == true);
    return ( (USStateCodes.indexOf(s) != -1) &&
             (s.indexOf(USStateCodeDelimiter) == -1) )
}
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 isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 4));
}

function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;

    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}

function isMonth (s)
{   
	if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}

function daysInFebruary (year)
{
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate (year, month, day)
{   
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}

function prompt (s)
{   window.status = s
}

function promptEntry (s)
{   window.status = pEntryPrompt + s
}

function warnEmpty (theField, s)
{   theField.focus()
    alert(mPrefix + s + mSuffix)
    return false
}

function warnInvalid (theField, s)
{   theField.focus()
    alert(s)
    return false
}

function checkString (theField, s, emptyOK)
{
	if (checkString.arguments.length == 2) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (isWhitespace(theField.value) || theField.value == "null") {
       return warnEmpty (theField, s);
	 }
    else return true;
}

function checkStateCode (theField, emptyOK)
{   if (checkStateCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  theField.value = theField.value.toUpperCase();
       if (!isStateCode(theField.value, false)) 
          return warnInvalid (theField, iStateCode);
       else return true;
    }
}

function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}

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, iZIPCode);
	      else 
	      {  // if you don't want to insert a hyphen, comment next line out
	         theField.value = reformatZIPCode(normalizedZIP)
	         return true;
	      }
	    }
}



function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

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, iUSPhone);
	       else 
	       {  // if you don't want to reformat as (123) 456-7890, comment next line out
	          theField.value = reformatUSPhone(normalizedPhone)
	          return true;
	       }
	    }
}

function reformatGRUAccountNumber(acctNum) {
	return reformat(acctNum, "", 4, "-", 4, "-", 4)
}

function checkGRUAccountNumber(field, emptyOK) {
	if (checkGRUAccountNumber.arguments.length == 1) emptyOK = defaultEmptyOK;
	
	if (emptyOK == true && isEmpty(field.value)) {
		return true;
	} else {
		var normalizedAccountNumber = stripCharsInBag(field.value, accountNumberDelimiters);
		if (!isGRUAccountNumber(normalizedAccountNumber, false)) {
			return warnInvalid(field, iGRUAccountNumber);
		} else {
			field.value = reformatGRUAccountNumber(normalizedAccountNumber);
			return true;
		}
	}
}

function checkInternationalPhone (theField, emptyOK)
{   if (checkInternationalPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  
		if (!isInternationalPhoneNumber(theField.value, false)) 
          return warnInvalid (theField, iWorldPhone);
       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, iEmail);
	    else return true;
}

function reformatSSN (SSN)
{   return (reformat (SSN, "", 3, "-", 2, "-", 4))
}


function checkSSN (theField, emptyOK)
{   
		if (checkSSN.arguments.length == 1) emptyOK = defaultEmptyOK;
	    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
	    else
	    {  var normalizedSSN = stripCharsInBag(theField.value, SSNDelimiters);
	       if (!isSSN(normalizedSSN, false)) 
	          return warnInvalid (theField, iSSN);
	       else 
	       {  // if you don't want to reformats as 123-456-7890, comment next line out
	          theField.value = reformatSSN(normalizedSSN)
	          return true;
	       }
	    }
}

function checkYear (theField, emptyOK)
{   if (checkYear.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isYear(theField.value, false))
    {
    	theField.value = "";
    	return warnInvalid (theField, iYear);
    }
    	
    else return true;
}
function checkMonth (theField, emptyOK)
{   
	if (checkMonth.arguments.length == 1) emptyOK = defaultEmptyOK;
  		if ((emptyOK == true) && (isEmpty(theField.value))) return true;
  		if (!isMonth(theField.value, false)) 
  			return warnInvalid (theField, iMonth);
   	else return true;
}
function checkDay (theField, emptyOK)
{   if (checkDay.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    if (!isDay(theField.value, false)) 
       return warnInvalid (theField, iDay);
    else return true;
}

function checkDate (yearField, monthField, dayField, labelString, OKtoOmitDay)
{   	
	    if (checkDate.arguments.length == 5) OKtoOmitDay = false;
	    if (!isYear(yearField.value)) return warnInvalid (yearField, iYear);
		if ( !isMonth(monthField.options[monthField.selectedIndex].value ) ) return warnInvalid (monthField, iMonth );	//use for select box
	    if ( (OKtoOmitDay == true) && isEmpty(dayField.value) ) return true;
		else if ( !isDay(dayField.options[dayField.selectedIndex].value) ) //use for select boxes
	       return warnInvalid (dayField, iDay);
		if ( isDate ( yearField.value, monthField.options[monthField.selectedIndex].value, dayField.options[dayField.selectedIndex].value ) ) //use for select boxes
	       return true;
	    alert (iDatePrefix + labelString + iDateSuffix)
	    return false
}

function checkDateNoDay (yearField, monthField, labelString)
{   	
	    //if (checkDate.arguments.length == 5) OKtoOmitDay = false;
	    if (!isYear(yearField.value)) 
			return warnInvalid (yearField, iYear);
		if ( !isMonth(monthField.options[monthField.selectedIndex].value ) ) 
			return warnInvalid (monthField, iMonth );	//use for select box
	    return true;
}

// Get checked value from radio button.
function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked) { break }
    }
    return radio[i].value
}

// Validate credit card info.
function checkCreditCard (theField)
{   
	if ( isVisa( theField.value ) )
	{
		var cardType = "Visa";
	}
	else if ( isMasterCard( theField.value ) )
	{
		var cardType = "MasterCard";
	}
	else if ( isDiscover( theField.value ) )
	{
		var cardType = "Discover";
	}
	else
	{
		cardType = "Unknown";
		return warnInvalid (theField, iCreditCardPrefix + cardType + iCreditCardSuffix);
	}
    var normalizedCCN = stripCharsInBag(theField.value, creditCardDelimiters)
    if (!isCardMatch(cardType, normalizedCCN)) 
       return warnInvalid (theField, iCreditCardPrefix + cardType + iCreditCardSuffix);
    else 
    {  
       	return true
    }
	
}

function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);

  var sum = 0; var mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) == 0)
    return (true);
  else
    return (false);

} // END FUNCTION isCreditCard()


function isVisa(cc)
{
  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}  // END FUNCTION isVisa()

function isMasterCard(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 0) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isMasterCard()


function isAmericanExpress(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) &&
      ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isAmericanExpress()


function isDinersClub(cc)
{
  firstdig = cc.substring(0,1);
  seconddig = cc.substring(1,2);
  if ((cc.length == 14) && (firstdig == 3) &&
      ((seconddig == 0) || (seconddig == 6) || (seconddig == 8)))
    return isCreditCard(cc);
  return false;
}


function isCarteBlanche(cc)
{
  return isDinersClub(cc);
}

function isDiscover(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) && (first4digs == "6011"))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isDiscover()

function isEnRoute(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 15) &&
      ((first4digs == "2014") ||
       (first4digs == "2149")))
    return isCreditCard(cc);
  return false;
}

function isJCB(cc)
{
  first4digs = cc.substring(0,4);
  if ((cc.length == 16) &&
      ((first4digs == "3088") ||
       (first4digs == "3096") ||
       (first4digs == "3112") ||
       (first4digs == "3158") ||
       (first4digs == "3337") ||
       (first4digs == "3528")))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isJCB()

function isAnyCard(cc)
{
  if (!isCreditCard(cc))
    return false;
  if (!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc) && !isDinersClub(cc) &&
      !isDiscover(cc) && !isEnRoute(cc) && !isJCB(cc)) {
    return false;
  }
  return true;

} // END FUNCTION isAnyCard()



function isCardMatch (cardType, cardNumber)
{
	cardType = cardType.toUpperCase();
	var doesMatch = true;
	
	if ((cardType == "VISA") && (!isVisa(cardNumber)))
		doesMatch = false;
	if ((cardType == "MASTERCARD") && (!isMasterCard(cardNumber)))
		doesMatch = false;
	if ( ( (cardType == "AMERICANEXPRESS") || (cardType == "AMEX") )
                && (!isAmericanExpress(cardNumber))) doesMatch = false;
	if ((cardType == "DISCOVER") && (!isDiscover(cardNumber)))
		doesMatch = false;
	if ((cardType == "JCB") && (!isJCB(cardNumber)))
		doesMatch = false;
	if ((cardType == "DINERS") && (!isDinersClub(cardNumber)))
		doesMatch = false;
	if ((cardType == "CARTEBLANCHE") && (!isCarteBlanche(cardNumber)))
		doesMatch = false;
	if ((cardType == "ENROUTE") && (!isEnRoute(cardNumber)))
		doesMatch = false;
	return doesMatch;

}  // END FUNCTION CardMatch()



function IsCC (st) {
    return isCreditCard(st);
}

function IsVisa (cc)  {
  return isVisa(cc);
}

function IsVISA (cc)  {
  return isVisa(cc);
}

function IsMasterCard (cc)  {
  return isMasterCard(cc);
}

function IsMastercard (cc)  {
  return isMasterCard(cc);
}

function IsMC (cc)  {
  return isMasterCard(cc);
}

function IsAmericanExpress (cc)  {
  return isAmericanExpress(cc);
}

function IsAmEx (cc)  {
  return isAmericanExpress(cc);
}

function IsDinersClub (cc)  {
  return isDinersClub(cc);
}

function IsDC (cc)  {
  return isDinersClub(cc);
}

function IsDiners (cc)  {
  return isDinersClub(cc);
}

function IsCarteBlanche (cc)  {
  return isCarteBlanche(cc);
}

function IsCB (cc)  {
  return isCarteBlanche(cc);
}

function IsDiscover (cc)  {
  return isDiscover(cc);
}

function IsEnRoute (cc)  {
  return isEnRoute(cc);
}

function IsenRoute (cc)  {
  return isEnRoute(cc);
}

function IsJCB (cc)  {
  return isJCB(cc);
}

function IsAnyCard(cc)  {
  return isAnyCard(cc);
}

function IsCardMatch (cardType, cardNumber)  {
  return isCardMatch (cardType, cardNumber);
}

function checkFormFields( form, fields )
{
	var i;
	var submitOK = false;
	var newString, tempValue;
	var myindex, actualFieldName;
		for ( i = 0; i < fields.length; i++ )
		{
			newString = fields[i].substring( 0, 3 );
			if ( newString == "cbo" )
			{
				myindex = form.elements[fields[i]].selectedIndex;
				if ( isWhitespace( form.elements[fields[i]].options[myindex].value) )
				{
					submitOK = false;
					return warnEmpty( form.elements[fields[i]], fields[i] );					
				}
			}
			else
			{
				submitOK = checkString(form.elements[fields[i]], fields[i], false);
		 	}
			if ( ! submitOK )
			{
				return false;
			}
		}
	return true;
}

function checkForSelectedOption( optButton, fieldDescription )
{
	var i;
	var canSubmit = false;
	
	for ( i = 0; i < optButton.length; i++ )
	{
		if ( optButton[i].checked )
		{
			canSubmit = true;
		}
	}

	if ( ! canSubmit )
	{
		alert("You must select one of the available options for " + fieldDescription + ", please try again.");
		return canSubmit;
	}
	else
	{
		return true;
	}
}

function checkMinumumAge( monthField, dayField, yearField )
{
	var age;
	var minimumAge = 18;
	dd = dayField.value;
	mm = monthField.value;
	yy = yearField.value;
	if (yy.length != 4 || isNaN(yy)) {
		alert( "need 4 digit year" );
		return;
	}
	
	days = new Date();
	gdate = days.getDate();
	gmonth = days.getMonth();
	gyear = days.getYear();
	if (gyear < 2000) gyear += 1900;
	age = gyear - yy;
	if ((mm == (gmonth + 1)) && (dd <= parseInt(gdate))) {
	age = age; 
	} else {
	if (mm <= (gmonth)) {
	age = age;
	} else {
	age = age - 1; 
	   }
	}
	if (age == 0)
	age = age;
	if ( age < minimumAge )
	{
		alert ( "You must be at least 18 to sign up for service" );
		return false;
	}
	return true;
}
function checkDayOfWeek( thisDate, dateDescription )
{
	var today = new Date();
	var todayMonth = today.getMonth() + 1;
	var todayDate = today.getDate();
	var todayYear = today.getYear();
	var myDate = thisDate.substring( 0, thisDate.indexOf( "-" ) );
	var myMonth = thisDate.substring( thisDate.indexOf( "-" ) + 1, thisDate.indexOf( "-" ) + 4 )
	var myYear = thisDate.substring( thisDate.indexOf( "-" ) + 5, thisDate.length );
	var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
	for ( var i = 0; i < months.length; i ++ )
	{
		if ( myMonth == months[i] )
		{
			myMonth = i + 1;
		}
	}
	if ( todayMonth == myMonth && todayDate == myDate && todayYear == myYear )
	{
		alert ( "The day you entered for, " + dateDescription + ", is today.  Same day service is not available via the Web.  \nPlease contact Customer Service (352) 334-3434 for more information on same day service." );
		return false;
	}
	return true;
}
function checkRequired(f) 
{
    var strError = "";
    for (var intLoop = 0; intLoop < f.elements.length; intLoop++)
       if (null!=f.elements[intLoop].getAttribute("required"))
          if (isEmpty(f.elements[intLoop].value))
             strError += " " + f.elements[intLoop].name + "\n";
    if ("" != strError) {
       alert("Required data is missing:\n" + strError);
       return false;
  	}
	return true;
}

function createArrayOfRequiredFields( form )
{
	var requiredFields = [ "" ], i = 0;
	for (var intLoop = 0; intLoop < form.elements.length; intLoop++)
       if ( form.elements[intLoop].getAttribute("required") != null )
			requiredFields[i++] = form.elements[intLoop]
	
	return requiredFields;
}

//General purpose String functions
function inStr(findWhat,fromWhere) {
	strlen1 = findWhat.length;
	strlen2 = fromWhere.length;
	istrue = false;	
	for (i=0;i<=strlen2;i++) {
		comp=fromWhere.substring(i-1,strlen2);
		comp = comp.substring(0,strlen1);		
		if (comp == findWhat) {
			istrue = true;
			break;
		}
	}
	return istrue;
}

function checkAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
	field[i].checked = false ;
}

function isNumber(ch) {
  if(ch >= "0" && ch <= "9") return true
  return false
}