// Version:	1.0 
// Author: 	Dwayne Lane
// Date:	12/4/01 


// declare error variable
  var err="";

// non-empty textbox
function isEmpty(theField) {
  var errExists = err;
  err = "";
  value = theField.value;
  value = trim(value);
  if ((value.length == 0)&&(errExists.length == 0)) {
     err = "You must complete this field to proceed.\n"
     alert(err); 
     theField.focus(); 
  }	  
  return err;
} 

// validate for letters only
// also checks for empty field
function isAlpha(theField) {
  err = isEmpty(theField);
  var value = theField.value;
  if(err==""){
    if(value != ""){
      var length = value.length;
      var letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
      for (var i=0; i<length; i++) {	
        if (letters.indexOf(value.charAt(i)) < 0) {
          err = "This field requires alpha characters only.";
          alert(err);
          theField.focus();
        }
      }
    }      		
  }
  return err;  
}

// valid number
// also checks for empty field
function isNumeric(theField) {
  err = isEmpty(theField);
  var number = theField.value;
  if(err==""){
    var theNum = 0;
    for (var i=0; i<number.length; i++) {
      theNum = number.charAt(i)
      if (isNaN(parseInt(theNum,10))) {
        err = "This field can only contain numbers.";
        alert(err);
        theField.focus();    
        break;
      }  	
    }	    
  }
  return err;
}

// email validation
// will always have at least one "." and an "@" symbol
// illegal characters var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
//  also checks for empty field
function validEmail (theField) {
  err = isEmpty(theField);
  if(err==""){
    var value = theField.value;
    var emailFilter=/^.+@.+\..{2,3}$/;
    if (!(emailFilter.test(value))) { 
      err = "Please enter a valid email address.\n";
      alert(err);
      theField.focus();      
    }else{
      //test email for illegal characters
      var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
      if (value.match(illegalChars)) {
        err = "The email address contains illegal characters.\n";
        alert(err);
        theField.focus();        
      }
    }  	
  }
  return err;    
}

// phone number section - check to insure numbers only and 
// the required length is met
// also checks to make sure value is a number and not empty
function checkPhoneSection (theField, reqLength){
  err = isNumeric(theField);
  if(err==""){
    var theLength = theField.value.length;
    if(theLength != reqLength){
      err = "The number entered is not a valid size for a phone number.";
      alert(err);
      theField.focus();              
    }
  }
  return err;
}

// phone number - strip out delimiters and check for 10 digits
function checkPhone (theField) {
  var value = theField.value;
  var stripped = value.replace(/[\(\)\.\-\ ]/g, ''); //remove acceptable non-numeric characters
  theField.value = stripped ; // set the value of the field to the stripped value
  err = isNumeric(theField);
  if(err==""){
    if (!(stripped.length == 10)) {
      err = "The phone number is the wrong length. Make sure you included an area code.\n";
      alert(err);
      theField.focus();
    } 
  }
  return err;
}

// password - between minlength-maxlength chars, uppercase, lowercase, and numeral
function checkPassword (theField, minlength, maxlength) {
  err = isEmpty(theField);
  if(err==""){
    var value = theField.value;
    var illegalChars = /[\W_]/; // allow only letters and numbers
    if ((value.length < minlength) || (value.length > maxlength)) {
      err = "The password is the wrong length.\n";
      alert(err);   
      theField.focus();
    }else if (illegalChars.test(value)) {
      err = "The password contains illegal characters.\n";
      alert(err);   
      theField.focus();
    }
  }  
  return err;    
}    

// username - between minlength-maxlength chars, uc, lc, and underscore only.
function checkUserName (theField, minlength, maxlength) {
  err = isEmpty(theField);
  if(err==""){
    var value = theField.value;
    var illegalChars = /\W/; // allow letters, numbers, and underscores
    if ((value.length < minlength) || (value.length > maxlength)) {
      err = "The username is the wrong length.\n";
      alert(err);   
      theField.focus();     
    }else if (illegalChars.test(value)) {
      err = "The username contains illegal characters.\n";
      alert(err);   
      theField.focus();     
    }
  }
  return err;
}       


// exactly one radio button is chosen
function checkRadio(theField) {
  var value = theField.value;
  if (theField.value == "") {
    err = "Please check a radio button.\n";
    alert(err);  
    return false;     
  }
  return true;

  
  
}

// at least one check box has been checked
function checkCheckbox(checkvalue) {
  if (!(checkvalue)) {
    err = "Please check at least one check box.\n";
  }
  return err;
}

// valid selector from dropdown list
function checkDropdown(choice) {
  if (choice == 0) {
    err = "You didn't choose an option from the drop-down list.\n";
  }    
  return err;
}    


// is under a specified value
function isUnderMaxValue(theField, max) {
  err = isNumeric(theField);
  if (err == "") {
    return err;
  }else if (number > max) {
    err = "The value entered exceeds the acceptable amount.\n";
  }
  return err;
}

// is over a specified value
function isOverMinValue(theField, min) {
  err = isNumeric(theField);
  if (err == "") {
    return err;
  }else if (number < min) {
    err = "The value entered does not meet the minimum acceptable amount.\n";
  }
  return err;
}

// is between two specified values
function isBetweenValues(number, min, max) {
  err = isNumeric(number);
  if (err == "") {
    return err;
  }else if ((number <= min) || (number >= max)) {
    err = "The value entered is not between "+min+" and "+max+".\n";
  }
  return err;
}

// valid date
function isValidDate(monthField, dayField, yearField)
{
   var year = yearField.value;
   var month = monthField.value;
   var day = dayField.value;
   var maxDay = 28;

   if (( month == 4) || ( month == 6) || ( month == 9) || ( month == 11)) {
      maxDay = 30;
   } else if ( month == 2 )   {
       if ( (year%100 == 0 ) && (year%400 != 0 )) {
          maxDay = 28;
       } else if ( year%4 == 0 ) {
          maxDay = 29;
       } else {
          maxDay = 28;
       }
   } else {
      maxDay = 31;
   }
   if ( day > maxDay ) {
      alert("Maximum allowed value for the day is : " + maxDay+"\n Please correct the date.\n");
      dayField.focus();
   }

}

// valid date
function isValidDateWithReturn(monthField, dayField, yearField)
{
   var year = yearField.value;
   var month = monthField.value;
   var day = dayField.value;
   var maxDay = 28;

   if (( month == 4) || ( month == 6) || ( month == 9) || ( month == 11)) {
      maxDay = 30;
   } else if ( month == 2 )   {
       if ( (year%100 == 0 ) && (year%400 != 0 )) {
          maxDay = 28;
       } else if ( year%4 == 0 ) {
          maxDay = 29;
       } else {
          maxDay = 28;
       }
   } else {
      maxDay = 31;
   }
   if ( day > maxDay ) {
   	  maxDay = maxDay + 1;
   	  err = "You have exceeded the maximum day value for this month.\n Please enter a number less than "+ maxDay+".\n";
      alert(err);
      dayField.focus();
      return err;
   }

}

// trim spaces off of the ends of a string
function trim ( s ){
  s = s.replace( /^\s*/, "" );
  s = s.replace( /\s*$/, "" );
  return s;
}

