
function alphaCheck(val, msg) {
  var nrl = val;
  var flag = 0;
  var alphaErrorMsg = msg;
  
  if(val == "") return false;
  if(alphaErrorMsg == null) {
    alphaErrorMsg = "This entry accepts only letters, periods, commas, hyphens and spaces.";
  }
  for (var i=0; i<nrl.length;i++) {
    cmp = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,-";
	cmp += " ";
    tst = nrl.substring(i,i+1);
    if (cmp.indexOf(tst)<0)
    {
      flag++;
    }
  }
  if (flag != 0) {
    if(alphaErrorMsg != "nomsg") {
	  alert(alphaErrorMsg);
	}  
    return false;
  }
  return true;
}

// Aplhacheck that has options to check alpha only
// or AlphaNumeric with out special Characters. -GN
function validAlpha(val,typeCheck,msg)
{
  var tempVal = val;
  var Errormsg = msg;
  var flag = 0;
  switch(typeCheck) {
    case 1:  //alpha + , . -, for names ect.
      cmp="ABCDEFGHIJKLMNOPQRSTUVWXYZ -abcdefghijklmnopqrstuvwxyz,.'";
      break;
    case 2: //alpha, numeric, + ,.-# , for addresses
      cmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ -abcdefghijklmnopqrstuvwxyz0123456789.,'#";
      break;
    default:
      cmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ -abcdefghijklmnopqrstuvwxyz,.'";
      break;
    }
  if (Errormsg == null)
  {
    Errormsg = "You have entered an invalid character in this field.";
  }
  for(var i= 0; i < tempVal.length; i++)
  {
    test = tempVal.substring(i,i + 1);
    if(cmp.indexOf(test)< 0)
    {
      flag = -1;
    }
  }
  if(flag != 0)
  {
    if(Errormsg != "nomsg") {
	  alert(Errormsg);
	}  
    return false;
  }
  return true;
}		 

function numericCheck(val, type, msg) {
  var nr1 = val;
  var typeCheck = type;
  var flag = 0;
  var numberErrorMsg = msg;
  
  if(val == "") return false;
  if (numberErrorMsg == null) {
    numberErrorMsg = "This entry must be a number.  Please remove all letters, special characters, and spaces.";
  }
  for (var i=0; i<nr1.length; i++) {
    switch(typeCheck) {
	  case 0: //int
	    cmp = "0123456789";
	    break;
      case 1:  //int + commas
	    cmp="0123456789,";
		break;
	  case 2: //float
	    cmp = "0123456789.,";
	    break;
	  case 3: //currency
	    cmp = "0123456789.,$-";
	    break;
	  case 4: //int + point
	    cmp = "0123456789.";
	    break;
	  default:
	    cmp = "0123456789";
	    break;
	}
    tst = nr1.substring(i,i+1);
    if ((cmp.indexOf(tst)<0) || (cmp.indexOf(" ") != -1))
    {
      flag++;
    }
  }
  if (flag != 0) {
    if(numberErrorMsg != "nomsg") {
	  alert(numberErrorMsg);
	}  
    return false;
  }
  return true;
}

function daysInFebruary (year) {
  return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate (year, month, day) {
  var daysInMonth = new Array(12);
  daysInMonth[1] = 31;
  daysInMonth[2] = 29;
  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;

  if (month <1 || month > 12) return false;
  if (day <1 || day > 31) return false;
  var intYear = parseInt(year, 10);
  var intMonth = parseInt(month, 10);
  var intDay = parseInt(day, 10);
  if (intDay > daysInMonth[intMonth]) return false; 
  if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
  return true;
}

function validDate(val, textBox, msg, msg2){
  var dateErrorMsg = msg;
  var spaceErrorMsg = msg2;
  var indate = val;
  var flag = 0;

  if (indate == "") return false;
  if (dateErrorMsg == null) { 
    dateErrorMsg = "You've entered an invalid date or date format.  Please use the MM/DD/YYYY format.";
  }
  if (spaceErrorMsg == null) {
    spaceErrorMsg = "Please re-enter your date without spaces.";
  }
  if (indate.indexOf(" ")!=-1) {
    if(dateErrorMsg != "nomsg") {
	  alert(spaceErrorMsg);
	}  
    return false;
  }	
  if (indate.indexOf("-")!=-1) {
    var delimeter = "-";
  }
  else if (indate.indexOf("/")!=-1){
    var delimeter = "/";
  }
  else if (indate.indexOf(".")!=-1){
    var delimeter = ".";
  }
  else {
    flag++;
  }
  var dateArray = indate.split(delimeter);
  if((dateArray.length != 3) || ((dateArray[2].length != 2) && (dateArray[2].length != 4)) ||
    (dateArray[0].length < 1) || (dateArray[0].length > 2) || (dateArray[1].length < 1) ||
    (dateArray[1].length > 2))  {
      flag++;
  }
  else if ((numericCheck(dateArray[0], 0, dateErrorMsg)==false) || (numericCheck(dateArray[1], 0, dateErrorMsg)==false) || (numericCheck(dateArray[2], 0, dateErrorMsg)==false)) {
	return false;
  }
  var intYear = parseInt(dateArray[2], 10);
  if ((intYear >= 0) & (intYear <= 29)) {
    dateArray[2] = 2000 + intYear;
  } 
  else if ((intYear >= 30) & (intYear <= 99)) {
    dateArray[2] = 1900 + intYear;
  }
  if (isDate(dateArray[2], dateArray[0], dateArray[1])==false) { 
    flag++;
  }
  if(flag != 0) {
    if(dateErrorMsg != "nomsg") {
      alert(dateErrorMsg);
    }
	return false;
  }
  if ((dateArray[2] > 99) & (dateArray[2] < 1753)) {
    if(dateErrorMsg != "nomsg") {
      alert("We do not support searches on years before 1753.  Please choose a later year and try again.");
    }
	return false;
  }	
  indate = dateArray[0] + "/" + dateArray[1] + "/" + dateArray[2];
  textBox.value = indate;  // Set the date in the form to the modified date.
  return true;
}

// Check for valid Area Code in separate input box. -GN
function validAreaCode(val,msg)
{
  var tempVal = val;
  var Errormsg = msg;
  var flag = 0;
  var tempComp = "0123456789";
			
  if(val == "") return false;
  if(Errormsg == null)
  {
    Errormsg = "You have entered an invalid Area Code.  Please try again.";
  }
  for(var i=0; i < tempVal.length; i++)
  {
    tempTest = tempVal.substring(i,i+1);
    if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1)
    {
      flag = -1;
    }
  }
  if(tempVal.length < 3)
  {
    flag = -1;
  }
  else
  {
    for(var i=0; i < tempVal.length; i++)
    {
      tempTest = tempVal.substring(i,i+1);
      if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1)
      {
        flag = -1;
      }
    }
  }
  if(flag != 0)
  {
    if(Errormsg != "nomsg") {
      alert(Errormsg);
	}
	return false;  
  }
  return true;
}
	
//Check for valid phone number if phone is separate input from area code and extension. -GN
function validPhoneNum(val,msg)
{
  var tempVal = val;
  var Errormsg = msg;
  var flag = 0;
  var tempComp = "0123456789-";
  //var isNum = numericCheck(tempVal,3)
			
  if(val == "") return false;
  if(Errormsg == null)
  {
    Errormsg = "You have entered an invalid Phone Number.  Please try again.";
  }
  for(var i; i < tempVal.length; i++)
  {
    tempTest = tempVal.substring(i,i+1);
    if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1)
    {
      flag = -1;
    }
  }
  if(tempVal.indexOf("-") != -1)
  {
    if(tempVal.length != 8)
    {
      flag = -1;
    }
    else
    {
      for(var j=0; j < tempVal.length; j++)
      {
        tempTest = tempVal.substring(j,j+1);
        if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1)
        {
          flag = -1;
        }
      }
    }
  }
  else if(tempVal.length != 7)
  {
    flag = -1;
  }
  else
  {
    for(var j=0; j < tempVal.length; j++)
    {
      tempTest = tempVal.substring(j,j+1);
      if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1)
      {
        flag = -1;
      }
    }
  }
  if(flag != 0)
  {
    if(Errormsg != "nomsg") {
      alert(Errormsg);
    }
    return false;
  }
  return true;
}

function validPhone(val, msg) {
  var phone = val;
  var flag = 0;						
  var phoneErrorMsg = msg;
  if(phone == "") return false;
  if (phoneErrorMsg == null) {
     phoneErrorMsg = "You've entered an invalid Phone Number.  Please input a valid Phone Number in the format xxx-xxx-xxxx.";
  }
  if(phone.indexOf(" ") != -1) {
    alert("Please re-enter your Phone Number without using spaces.");
	return false;
  }	
  if(phone.length < 10){
    flag++;
  }
  else {
   for (var i=0; i<phone.length; i++) {
      var cmp="0123456789()-.";
      tst=phone.substring(i,i+1);
      if (cmp.indexOf(tst)<0) {
        flag++;
		break;
      }
    }
  }
  if(flag > 0) {
    if(phoneErrorMsg != "nomsg") {
	  alert(phoneErrorMsg);
	}
	return false;  
  }
  return true;
}

function validState(val, msg) {
  var State = val;
  var StateErrorMsg = msg;
  var flag=0;
  var checkState = parseInt(State);
  
  if (State == "") return false;
  if (StateErrorMsg == null) {
   StateErrorMsg = "Please enter a valid State.";
  }	
  if (State.length > 0){
    if (State.length < 2) {
      flag++;
    }
  }
  if (State.length > 2)
  {
    flag++;
  }	
  
  if(alphaCheck(State, "nomsg") == false) {
    flag++;
  }	  
  if(flag != 0) {
    if(StateErrorMsg != "nomsg") {
      alert(StateErrorMsg);
    }
	return false;
  }
  return true;
}

function validEmail(val, msg) {
  var email = val;
  var flag = 0;						
  var emailErrorMsg = msg;
   
  if (email == "") return false;
  if(emailErrorMsg == null) {
    emailErrorMsg = "You have entered an invalid e-mail address.";
  }
  if(email.indexOf('@', 0) == -1) {
    flag++;
  }
  else if(email.indexOf('.', 0) == -1) {
    flag++;
  }
  if(flag > 0) {
    if(emailErrorMsg != "nomsg") {
      alert(emailErrorMsg);
    }
	return false;
  }
  return true;
}

function validYear(val, msg) {
  var year = val;
  var yearErrorMsg = msg;
  var flag=0;
  var checkYear = parseInt(year);
  
  if (year == "") return false;
  if (yearErrorMsg == null) {
    yearErrorMsg = "Please enter the year in YYYY format.  ex: 1990";
  }	
  if (year.length > 0){
    if (year.length < 4) {
      flag++;
    }
  }
  if (year.length > 4)
  {
    flag++;
  }	
  
  if(numericCheck(year, 0, "nomsg") == false) {
    flag++;
  }	  
  if(flag != 0) {
    if(yearErrorMsg != "nomsg") {
      alert(yearErrorMsg);
    }
	return false;
  }
  if (checkYear < 1753) {
    if(yearErrorMsg != "nomsg") {
      alert("Please input a year later than 1752.");
    }
	return false;
  }	
  return true;
}

function validZip(val, msg) {
  var zip = val;
  var zipErrorMsg = msg;
  var flag=0;
  var checkzip = parseInt(zip);
  
  if (zip == "") return false;
  if (zipErrorMsg == null) {
   zipErrorMsg = "Please enter a valid zip code.";
  }	
  if (zip.length > 0){
    if (zip.length < 5) {
      flag++;
    }
  }
  if (zip.length > 5)
  {
    flag++;
  }	
  
  if(numericCheck(zip, 0, "nomsg") == false) {
    flag++;
  }	  
  if(flag != 0) {
    if(zipErrorMsg != "nomsg") {
      alert(zipErrorMsg);
    }
	return false;
  }
  return true;
}

function isComboBoxNotSelected(theComboBox) {
	if(theComboBox == "NA") {
		return true;
	}
}

function isFieldBlank(theField) {
  var count = 0;
  
  if(theField == "") { 
    return true; 
  }
  
  for(i=0;i<theField.length;i++) {
    if(theField.indexOf(" ", i) == i)
	{
	  count++;
    }
  }

  if(count == theField.length)
    return true;
  else
    return false;
}

function minLength(textBox, min, msg) {
  var min_length = min;
  var data = textBox.value;
  var minLengthErrorMsg = msg;
  
  if (min == null) return false;
  if (data == "") return false;
  
  if (minLengthErrorMsg == null) {
    minLengthErrorMsg = "The "+textBox.name+" field requires at least "+min+" characters or more.";
  }
  if(textBox.value.length < min) {
    if(minLengthErrorMsg != "nomsg") {
      alert(minLengthErrorMsg);  	
    }
	return false;
  }
  return true;
}
    	
function validCreditCard(val, msg) {
  var cardNum = val;
  var creditErrorMsg = msg;
  
  if (cardNum == "") return false;

  if (creditErrorMsg == null) {
    creditErrorMsg = "Please enter a valid credit card.  We accept Visa, Mastercard or American Express only.";
  }
  	  
  if (ccValid(cardNum)==false) {
    if(creditErrorMsg != "nomsg") {
	  alert(creditErrorMsg);
	}  
	return false;
  }
  return true;
}
  
function ccValid(val) {
  var cardNum = val;
  var len = cardNum.length;
  var checksum = 0;
    
  if (len < 2)  {
    return false;
  }
  for (var i = 1; i < len; i++) {
    var ch = cardNum.charAt(len - 1 - i);
    var digit = parseInt(ch);
    var temp = digit * (1 + (i % 2));
    if (temp < 10)
      checksum = checksum + temp;
    else
      checksum = checksum + temp - 9;
  }

  checksum = (10 - (checksum % 10)) % 10;

  if (parseInt(cardNum.charAt(len - 1)) != checksum)
    return false;

  var company = Issuer(cardNum);

  if (company == "Unknown") {
      return false;
  }
  return true;
}
  
function Issuer(ccNum) {
  var cardNum = ccNum;
  var rv = "Unknown";
  var len = cardNum.length;

  if (len < 2) {
    return rv;
  }
  if (cardNum.substring(0,2) == "37") {
    rv = "American Express";
  } 
  else if (cardNum.charAt(0) == '5') {
    rv = "MasterCard";
  } 
  else if (cardNum.charAt(0) == '4') {
    rv = "Visa";
  } 
  else {
    rv = "Unknown";
  }
  return rv;
}

function creditYear(val, textBox, msg) {
  var frmYear = val;
  var yearErrorMsg = msg;
  var intYear = parseInt(frmYear);

  if (frmYear == "") return false;
  
  if (yearErrorMsg == null) {
    yearErrorMsg = "Please enter the year in YYYY format.  ex: 1990";
  }	  
  if(numericCheck(frmYear, yearErrorMsg)==false) {
    return false;
  }
  if ((intYear >= 0) & (intYear <= 29)) {
    frmYear = 2000 + intYear;
  } 
  else if ((intYear >= 30) & (intYear <= 99)) {
    frmYear = 1900 + intYear;
  }
  textBox.value = frmYear;
  return true;
}

function validTaxId(val,msg)
{
	var tempVal = val;
	var Errormsg = msg;
	var flag = 0;
	var tempComp = "0123456789-";
	//var isNum = numericCheck(tempVal,3)
	
	if(val == "") return false;
		if(Errormsg == null){
			Errormsg = "You have entered an invalid Tax Id Number.  Please try again.";
		}
		
		for(var i; i < tempVal.length; i++)
		{
			tempTest = tempVal.substring(i,i+1);
			if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1){
				flag = -1;
			}
		}
		
		if(tempVal.indexOf("-") != -1){
			if(tempVal.length != 11){
				flag = -1;
			}else{
				for(var j=0; j < tempVal.length; j++){
					tempTest = tempVal.substring(j,j+1);
					if(tempComp.indexOf(tempTest) < 0 || tempComp.indexOf(" ") != -1){
						flag = -1;
					}else{
						if((j == 3) || (j == 6)){
							if(tempTest != "-"){
								flag = -1;
							}
						}
					}
				}
			}
		}else if(tempVal.length != 9){
			flag = -1;
		}else{
			for(var j=0; j < tempVal.length; j++){
				tempTest = tempVal.substring(j,j+1);
				
				if(tempComp.indexOf(tempTest)<0 || tempComp.indexOf(" ") != -1){
					flag = -1;
				}
			}
		}
		
		if(flag != 0){
			if(Errormsg != "nomsg") {
				alert(Errormsg);
			}
			return false;
		}
		//end function
	return true;
} 
