//
// form validation utilities
//


// check for valid email format
// return true if valid
function isEmail(s) { 
 if (s.length > 0) 
    // there must be >= 1 character before @, so we
    // start looking at character position 1 
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")) { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}


// check for string consisting of all digits
function allDigits(str) {
  return inValidCharSet(str,"0123456789");
}


// check for valid characters
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;
}


// check for valid date mm/dd/yyyy
// Input:
//    formField     value of field
//    fieldLabel    name of field
//    required      true if field is required
// Returns:
//    empty string if ok, else error message

function isValidExpDate(formField,fieldLabel,required) {
  var formValue = formField.value;
  var result = true;

  if (formValue.length == 0) {
    if (required) {
      return('Please enter a value for ' + fieldLabel);
    } else {
      return('');
    }
  }

  var elems = formValue.split("/");
  
  result = (elems.length == 3); // should be two components
  var expired = false;
  
  if (result) {
    var month = parseInt(elems[0],10);
    var day = parseInt(elems[1],10);
    var year = parseInt(elems[2],10);
    
    if (elems[2] < 2000) {
      return('The year you specified for' + fieldLabel + ' must be YYYY');
    }
    
    var now = new Date();
    
    var nowMonth = now.getMonth() + 1;
    var nowYear = now.getFullYear();
    
    expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
    if (expired) {
      formField.focus();
      return('The date you specified for ' + fieldLabel + ' has already occurred');
    }
    
    result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
                allDigits(elems[1]) && (day > 0) && (day < 31) &&
                allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
  }
  
  if (!result) {
    formField.focus();
    return('Please enter a date in the format mm/dd/yyyy for the "' + fieldLabel +'" field.');
  }
  else if (expired) {
    result = false;
    formField.focus();
    return('The date for "' + fieldLabel +'" has expired.');
  }

  return '';
}


// check for valid time hh:mm
// Input:
//    formField     value of field
//    fieldLabel    name of field
//    required      true if field is required
// Returns:
//    empty string if ok, else error message

function isValidExpTime(formField,fieldLabel,required) {
  var formValue = formField.value;
  var result = true;

  if (formValue.length == 0) {
    if (required) {
      return('Please enter a value for ' + fieldLabel);
    } else {
      return('');
    }
  }

  var elems = formValue.split(":");
  
  result = (elems.length == 2); // should be two components
  var expired = false;
  
  if (result) {
    var hour   = parseInt(elems[0],10);
    var minute = parseInt(elems[1],10);
    
    result = allDigits(elems[0]) && (hour >= 0) && (hour <= 12) &&
                allDigits(elems[1]) && (minute >= 0) && (minute < 60);
  }
  
  if (!result) {
    formField.focus();
    return('Please enter a time in the format hh:mm for the "' + fieldLabel +'" field.');
  }
  else if (expired) {
    result = false;
    formField.focus();
    return('The date for "' + fieldLabel +'" has expired.');
  }

  return '';
}

