//  this function validates that all the whitespaces has been
//  trimmed off, also it validates that something has been 
//  typed in.  the function trimAndHasValue makes a call to 
//  the trim function.

function trim(formInput)
  {
  value = formInput.value;
  while (value.length > 0)
    if (value.charAt(0) == ' ')
      value = value.substring(1);
    else if (value.charAt(value.length -1) == ' ')
      value = value.substring(0, value.length - 1);
    else
      break;
  formInput.value = value;
  }
  


function trimAndHasValue1(formInput)
  {
  return trimAndHasValue2(formInput, 1);
  }
  
function trimAndHasValue2(formInput, minLength)
  {
  trim(formInput);
  return formInput.value.length >= minLength;
  }

function trimAndHasValue3(formInput, minCharacters, maxCharacters)
  {
  index = formInput.value.length;
  if ((minCharacters != null) && (index < minCharacters))
    return false;
  else if ((maxCharacters != null) && (index > maxCharacters))
    return false;
  else
    return true;
  }
  
  
function trimAndHasValueOrIsEmpty(formInput, minLength)
  {
  trim(formInput);
  if (formInput.value.length == 0)
    return true;
  else
    return formInput.value.length >= minLength;
  }


function trimIsPositiveIntegerOrEmpty(formInput)
  {
  trim(formInput)
  if (formInput.value.length == 0)
    return true;
  else
    return isPositiveInteger(formInput.value)
  }
  
  
function trimIsPositiveFloatOrEmpty(formInput)
  {
  trim(formInput)
  if (formInput.value.length == 0)
    return true;
  else
    return isPositiveFloat(formInput.value, null, null)
  }


function trimIsNonRequiredInteger(formInput, max)
  {
  if (trimAndHasValue1(formInput))
    {
    if (!isPositiveInteger(formInput.value, 0, max))
      return false;
    }
  return true;
  }

  
function trimIsPositiveInteger(formInput, min, max)
  {
  if (!trimAndHasValue1(formInput))
    return false;
  else if (!isPositiveInteger(formInput.value, min, max))
    return false;
  return true;
  }
  
  
function trimIsPositiveFloat(formInput)
  {
  if (!trimAndHasValue1(formInput))
    return false;
  else if (!isPositiveFloat(formInput.value, null, null))
    return false;
  return true;
  }


function trimIsPositiveInteger1(formInput)
  {
  return trimIsPositiveInteger(formInput, null, null);
  }


function isSelectionSelected(formInput)
  {
  if ((formInput.selectedIndex == 0) 
      || (formInput.selectedIndex == -1) 
      || (formInput.selectedIndex == null))
    {
    return false;
    }
  return true;
  }


function validateEmailAddress(formInput)
  {
  if (trimAndHasValue1(formInput))
    if (!validateRequiredEmailAddress(formInput))
      return false;
  return true;
  }

function validateRequiredEmailAddress(formInput)
  {
  trim(formInput);
  checkFor = 1;
  value = formInput.value;
  for (var index = 2; index <= value.length; index++)
    {
    if ((checkFor == 1) && (value.charAt(index) == '@'))
        checkFor = 2;
    else if ((checkFor == 2) && (value.charAt(index) == '.'))
      checkFor = 3;
    }
  if (checkFor == 3)
    return true;
  else
    return false;
  }

function validateNonRequiredNumber(formInput)
  {
  if (trimAndHasValue1(formInput))
    if (!validatePhoneNumber(formInput))
      return false;
  return true;
  }

function validatePhoneNumber(formInput)
  {
  if (!trimAndHasValue1(formInput))
    return false;
  formInput.value = removeNonNumbers(formInput.value);
  if (!isPositiveInteger(formInput.value, 10, 10))
    return false;
  else
    {
    formInput.value = addDashes(formInput.value);
    return true;
    }
  }

function validateExtention(formInput)
  {
  if (trimAndHasValue1(formInput))
    if (!isPositiveInteger(formInput.value))
      return false;
  return true;
  }


function validateDate(formInput)
  {
  var start = 0;
  var end;
  var temp = 0;
  var dates = new Array();
  var value = formInput.value;
  if (!trimAndHasValue1(formInput))
    return "This date must be filled in.";
  for (var i = 0; i < value.length; i++)
    {
    if ((value.charAt(i) < '0') || (value.charAt(i) > '9'))
      {
      end = i;
      dates[temp] = value.substring(start, end);
      temp++;
      start = i+1;
      }
    }
  if ((temp > 2) || (temp < 2))
    return "Invalid format, dates must be formated like MM/DD/YYYY.";
  dates[temp] = value.substring(start, value.length);
  if ((dates[0] < 1) || (dates[0] > 12))
    return "Invalid month, a month must be between 1 and 12.";
  else if ((dates[0] == 1 || dates[0] == 3 || dates[0] == 5 || dates[0] == 7 
   || dates[0] == 8 || dates[0] == 10 || dates[0] == 12) 
   && (dates[1] > 31 || dates[1] < 1))
    return "Invalid day, a day in this month must be between 1 and 31.";
  else if ((dates[0] == 4 || dates[0] == 6 || dates[0] == 9 || dates[0] == 11)
   && (dates[1] > 30 || dates[1] < 1))
    return "Invalid day, a day in this month must be between 1 and 30.";
  else if ((dates[2] < 1000) || (dates[2] > 9999))
    return "Invalid year, dates must be formated like MM/DD/YYYY.";
  else if (dates[0] == 2)
    {
    if (dates[1] < 1)
      return "Invalid day, a day must be greater than 1.";
    else if ((LeapYear(dates[2]) == true) && (dates[1] > 29))
      return "Invalid day, a day in a leap year in February must be between 1 and 29.";
    else if ((LeapYear(dates[2]) == false) && (dates[1] > 28))
      return "Invalid day, a day in a non leap year in February must be between 1 and 28.";
    }
  dates[0] = parseInt(dates[0], 10)
  dates[1] = parseInt(dates[1], 10);
  if (dates[0] < 10)
    dates[0] = "0" + dates[0];
  if (dates[1] < 10)
    dates[1] = "0" + dates[1];
  formInput.value = dates[0] + "/" + dates[1] + "/" + parseInt(dates[2], 10);
  return null;
  }


function LeapYear(intYear) 
  {
  if (intYear % 100 == 0) 
    {
    if (intYear % 400 == 0) 
      return true; 
    }
  else 
    {
    if ((intYear % 4) == 0) 
      return true;
    }
  return false;
  }


function validateNonRequiredDate(formInput)
  {
  if (trimAndHasValue1(formInput))
    return validateDate(formInput);
  return null;
  }

  
function checkCheckBoxes(formInput)
  {
  var length = formInput.elements.length;
  for (var i = 0; i < length; i++)
    {
    if (formInput.elements[i].checked)
      return true;
    }
  return false;
  }
  
  
function isCheckBoxChecked(formInput)
  {
  if (formInput.checked)
    return true;
  return false;
  }
  
  
function isRadioChecked(formInput)
  {
  if (formInput.checked)
    return true;
  for(i = 0; i < formInput.length; i++)
    {
    if (formInput[i].checked)
      return true;
    }
  return false;
  }

  
function validateMultipleInputDates(form)
  {
  var theLength = form.elements.length;
  var name;
  var index = 0;
  for (var i = 0; i < theLength-1; i++)
    {
    name = form.elements[i].name;
    index = name.length - 1;
    if (isInteger(name.charAt(index), null, null) && form.elements[i].value.length > 0)
      {
      output = validateDate(form.elements[i]);
      if (name.charAt(index) == 0)
        {
        if (output != null)
          {
          alert("The Expected Sub to GC has an error. " + output);
          return false;
          }
        }
      else if (name.charAt(index) == 1)
        {
        if (output != null)
          {
          alert("The Expected GC to Arch has an error. " + output);
          return false;
          }
        }
      else if (name.charAt(index) == 2)
        {
        if (output != null)
          {
          alert("The Expected Arch to GC has an error. " + output);
          return false;
          }
        }
      else if (name.charAt(index) == 3)
        {
        if (output != null)
          {
          alert("The Expected GC to Sub has an error. " + output);
          return false;
          }
        }
      }
    }
  return true;
  }
  
  
function validateOrderNumbers(form, keyName, columnNotRow)
  {
  var i = 0;
  var formElement = null;
  while (true)
    {
    if (columnNotRow)
      order = ":" + i;
    else
      order = i + ":";
    formElement = form.elements[keyName + "|" + order];
    if (formElement != null)
      {
      if (!isPositiveInteger(formElement.value, 1, null))
        {
        i++;
        return i;
        }
      }
    else
      break;
    i++;
    }
  return 0; 
  }
  

function validateCreditCardNum(cardNum)
  {
  return trimIsPositiveInteger(cardNum, 12, 20)
  }
  
  
function validateCreditCardExpireDate(expDate)
  {
  if (!trimIsPositiveInteger(expDate, 4, 4))
    return false;
  var dates = new Array();
  var value = expDate.value;
  dates[0] = value.substring(0, 2);
  dates[1] = value.substring(2, 4);
  if ((dates[0] < 1) || (dates[0] > 12))
    return false;
  if ((dates[1] < 4) || (dates[1] > 12))
    return false;
  return true;
  }
  
  
function validateCreditCardExpireDate2(expDate)
  {
//  if (!trimAndHasValue3(expDate, 5, 5))
//    return false;
  var dates = new Array();
  var value = expDate.value;
  dates[0] = value.substring(0, 2);
  dates[1] = value.substring(3, 5);
  if (!isPositiveInteger(dates[0], 2, 2))
    return false
  if (!isPositiveInteger(dates[1], 2, 2))
    return false
  if ((dates[0] < 1) || (dates[0] > 12))
    return false;
  if (dates[1] < 4)
    return false;
  return true;
  }



