// JavaScript Document
function IsNumeric(sText){
	   var ValidChars = "0123456789";
	   var IsNumber=true;
	   var Char;
	
	 
	   for (i = 0; i < sText.length && IsNumber == true; i++) 
		  { 
		  Char = sText.charAt(i); 
		  if (ValidChars.indexOf(Char) == -1) 
			 {
			 IsNumber = false;
			 }
		  }
	   return IsNumber;
	   
}
function verifyEmail(emailStr) { 
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	
	if (matchArray==null) {
	alert("Email address seems incorrect (check @ and .'s)");
	return false;
	}
	
	var user=matchArray[1];
	var domain=matchArray[2];
	
	for (i=0; i<user.length; i++) {
	if (user.charCodeAt(i)>127) {
	alert("Ths Email username contains invalid characters.");
	return false;
	}
	}
	for (i=0; i<domain.length; i++) {
	if (domain.charCodeAt(i)>127) {
	alert("Ths Email domain name contains invalid characters.");
	return false;
	}
	}
	
	
	if (user.match(userPat)==null) {
	alert("The Email username doesn't seem to be valid.");
	return false;
	}
	
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
	for (var i=1;i<=4;i++) {
	if (IPArray[i]>255) {
	alert("The Email destination IP address is invalid!");
	return false;
	}
	}
	return true;
	}
	
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
	if (domArr[i].search(atomPat)==-1) {
	alert("The Email domain name does not seem to be valid.");
	return false;
	}
	}
	
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].search(knownDomsPat)==-1) {
	alert("The Email address must end in a well-known domain or two letter " + "country.");
	return false;
	}
	
	if (len<2) {
	alert("The Email address is missing a hostname!");
	return false;
	}
	
	return true;
}



//formElement = this(the object/form element being sent), maxLen = integer value
function checkLength(formElement,maxLen) {
if(formElement.value.length > maxLen) {
                alert("I'm sorry, this field will only accept up to " + maxLen + " characters.");
                formElement.value = formElement.value.substring(0,maxLen); 
                }
}





// 090204:  Additional Credit Card Validation Functions:
//
// isValidExpDate(formField,fieldLabel,required)
//   -- checks for date in the format MM/YY or MM/YYYY against the current date
// isValidCreditCardNumber(formField,ccType,fieldLabel,required)
//   -- checks for valid credit card format using the Luhn check and known digits about various cards
//  -- original code pulled from http://javascript.about.com/library/scripts/blccvalid.htm and then modified 
// (ie, did not need exp date checking...

function validRequired(formField,fieldLabel)
{
                var result = true;
                
                if (formField.value == "")
                {
                                alert('Please enter a value for the ' + fieldLabel + ' field.');
                                formField.focus();
                                result = false;
                }
                
                return result;
}


function allDigits(str)
{
                return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
                var result = true;
                
                for (var i=0;i<str.length;i++)
                                if (charset.indexOf(str.substr(i,1))<0)
                                {
                                                result = false;
                                                break;
                                }
                
                return result;
}

function isValidCreditCardNumber(formField,ccType,fieldLabel,required)
{
                var result = true;
                var ccNum = formField.value;

                if (required && !validRequired(formField,fieldLabel))
                                result = false;
 
                if (result && (formField.value.length>0))
                { 
                                if (!allDigits(ccNum))
                                {
                                                alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.');
                                                formField.focus();
                                                result = false;
                                }              

                                if (result)
                                { 
                                                
                                                if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum))
                                                {
                                                                alert('Please enter a valid ' + ccType + ' number in the ' + fieldLabel + ' field.\nIf the number appears correct, confirm that the\ncorrect card type has been selected.');
                                                                formField.focus();
                                                                result = false;
                                                }              
                                } 

                } 
                
                return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var 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)
    result = false;
    
  return result;
}



function GetRadioValue(rArray)
{
                for (var i=0;i<rArray.length;i++)
                {
                                if (rArray[i].checked)
                                                return rArray[i].value;
                }
                
                return null;
}


function validateCCNum(cardType,cardNum)
{
                var result = false;
                cardType = cardType.toUpperCase();
                
                var cardLen = cardNum.length;
                var firstdig = cardNum.substring(0,1);
                var seconddig = cardNum.substring(1,2);
                var first4digs = cardNum.substring(0,4);

                switch (cardType)
                {
                                case "VISA":
                                                result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
                                                break;
                                case "AMERICAN EXPRESS":
                                                var validNums = "47";
                                                result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
                                                break;
                                case "MASTERCARD":
                                                var validNums = "12345";
                                                result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
                                                break;
                                case "DISCOVER":
                                                result = (cardLen == 16) && (first4digs == "6011");
                                                break;
                                case "DINERS":
                                                var validNums = "068";
                                                result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
                                                break;
                }
                return result;
}

function validCCForm(ccTypeField,ccNumField,ccExpMo, ccExpYr)
{
                if(validateCardInfo()) {
                var result = isValidCreditCardNumber(ccNumField,ccTypeField.value,"card number",true);
                                if(result && isValidExpDate(ccExpMo, ccExpYr)){
                                                document.getElementById('orderSubmitButton').disabled=true;
                                                document.getElementById("form").submit()
                                }
                                else
                                                result = false;
                return result;
                }
                else
                return false;
}

function isValidExpDate(ccExpMo, ccExpYr){
                var curDate = new Date();
                var currMo = curDate.getMonth() + 1;
                var currYr = curDate.getYear();
                var result = true;

                if (ccExpYr.value < currYr ){
                                result = false;
                                alert('Please enter a valid credit card expiration date.');
                                }
                else if (ccExpYr.value == currYr && ccExpMo.value < currMo){
                                result = false;
                                alert('Please enter a valid credit card expiration date.');
                                }
                return result;
                
}


var int = '0123456789';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var misc = ' .\''

function isValid(parm,val) {
                if (parm == "") return true;
                for (i=0; i<parm.length; i++) {
                                if (val.indexOf(parm.charAt(i),0) == -1) return false;
                }
                return true;
}
function validateCharsAndMisc(formField, fieldLabel){
                if(!isValid(formField.value,lwr+upr+misc)){
                                alert('Please enter a valid ' + fieldLabel + ' (no numeric values or symbols)');
                                return false;
                                }
                return true;
};

function validateCharsIntandMisc(formField, fieldLabel){
                if(!isValid(formField.value,lwr+upr+misc+int)){
                                alert('Please enter a valid ' + fieldLabel);
                                return false;
                                }
                return true;
};
