// <![CDATA[
/* 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 validRadio(radOptions) {
    if (radOptions == null) return true;

    for (i=0; i<radOptions.length; i++)
        if (radOptions[i].checked == true)
		    return true;

    return false;
}

// 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 "";
}

// Validate credit card using the following validation values:
//
// Card Type             Length Prefix
// --------------------- ------ ---------
// Visa                  13,16  4
// American Express      15     34,37
// MasterCard            16     51-55
// Home Depot            11     7000-7900,7902-7999,9000-9803
//
function validCreditCard(creditCardBrand, creditCardNumber, setFocus) {

  // These brand IDs must match those in ecom_ccard_brands
  var VISA = "1";
  var AMEX = "2";
  var MASTERCARD = "3";
  var HOMEDEPOT = "5";
    
  var errorMessage = "This credit card number is not valid for this card type.\n";
  
  var creditCardNumberValue = creditCardNumber.value;  
  
  // Make sure a value is entered
  if (creditCardNumberValue.length == 0) {
    if (setFocus) creditCardNumber.focus();
    return "Please enter a credit card number.\n";  
  }
    
  // Get credit card number with non-numeric values removed
  var c;
  var cleanCreditCardNumber = "";
  
  for (var i = 0; i < creditCardNumberValue.length; i++) {
    c = creditCardNumberValue.charAt(i);
    if (c != "-" && c != " ") {
        if (c >= "0" && c <= "9") {
            cleanCreditCardNumber = cleanCreditCardNumber + c;
        } else {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;
        }
    }
  }  
  

  // Validate length and first digits based on card type
  var creditCardNumberLength = cleanCreditCardNumber.length;

  if (creditCardBrand.value == VISA) {
    if (creditCardNumberLength != 13 && creditCardNumberLength != 16) {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;
    } else {
        if (cleanCreditCardNumber.substring(0,1) != "4") {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;        
        }
    }
  }
  

  if (creditCardBrand.value == AMEX) {
    if (creditCardNumberLength != 13 && creditCardNumberLength != 15) {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;
    } else {
        if (cleanCreditCardNumber.substring(0,2) != "34" && cleanCreditCardNumber.substring(0,2) != "37") {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;        
        }
    }
  }  
  
  if (creditCardBrand.value == MASTERCARD) {
    if (creditCardNumberLength != 16) {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;
    } else {
        if (cleanCreditCardNumber.substring(0,2) < "51" || cleanCreditCardNumber.substring(0,2) > "55") {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;        
        }
    }
  }     

  if (creditCardBrand.value == HOMEDEPOT) {
    if (creditCardNumberLength != 11) {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;
    } else {
        var leadDigits = cleanCreditCardNumber.substring(0,4);
        if ((leadDigits < 7000 || leadDigits > 7900) &&
            (leadDigits < 7902 || leadDigits > 7999) &&
            (leadDigits < 9000 || leadDigits > 9803)) {
            if (setFocus) creditCardNumber.focus();
            return errorMessage;        
        }
    }
  }     

  // Checksum validation

  // Reverse the credit card number 
  var reversedCardNumber = "";
  for (var i = 0; i < creditCardNumberLength; i++) {
    reversedCardNumber = cleanCreditCardNumber.charAt(i) + reversedCardNumber;
  }

  // Create checksum
  var digit;
  var sumString = "";
  for (var i = 0; i < reversedCardNumber.length; i++) {
    digit = parseInt(reversedCardNumber.charAt(i), 10);
    if (i % 2 != 0)
        digit = digit * 2;
    sumString = sumString + digit;
  }
  
  var checkSum = 0;
  for (var i = 0; i< sumString.length; i++) {
    digit = parseInt(sumString.charAt(i), 10);
    checkSum = checkSum + digit;
  }
  
  if (checkSum % 10 == 0)
    return "";
  else {
    if (setFocus) creditCardNumber.focus();
    return errorMessage;
  }
}



// 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;

}
function stripHTML(sHtmlData){
    var re= /<\S[^><]*>/g
    return sHtmlData.replace(re, "")
}

// ]]>

