/*
* BEGIN CUSTOMIZED VALIDATION FUNCTIONS
*/

function validateOptionalField(validationIndex, type)
	{
	if(theForm[validation[validationIndex][0]].value == "")
		{
		return null
		}
	else
		{
		if(type == "textField")
			{
			validateTextField(validationIndex);

			return validation[validationIndex][1];
			}
		if(type == "number")
			{
			validateNumber(validationIndex);

			return validation[validationIndex][1];
			}
		}
	}

function validateTextField (validationIndex)
  {
  if (theForm[validation[validationIndex][0]].value == "")
    return validation[validationIndex][1];

  return null;
  }

function validateNumber (validationIndex)
  {
  var fieldValue = theForm[validation[validationIndex][0]].value;
  if ( fieldValue == "" || !isANumber( fieldValue ) )
    return validation[validationIndex][1];

  return null;
  }

function validateEmail (validationIndex)
  {
  if ( !isEmail( theForm[validation[validationIndex][0]].value ) )
    return validation[validationIndex][1];

  return null;
  }

function duplicateEmail (validationIndex, fieldToValidateAgainst)
  {
  var otherFieldValue = theForm[fieldToValidateAgainst].value;
  var thisFieldValue = theForm[validation[validationIndex][0]].value;

  if ( !isEmail( thisFieldValue ) || otherFieldValue != thisFieldValue )
    return validation[validationIndex][1];

  return null;
  }


function duplicateTextField (validationIndex, fieldToValidateAgainst)
  {
  var otherFieldValue = theForm[fieldToValidateAgainst].value;
  var thisFieldValue = theForm[validation[validationIndex][0]].value;

  if (otherFieldValue != thisFieldValue)
    return validation[validationIndex][1];

  return null;
  }


function validateCheckbox (validationIndex)
  {
  if ( !theForm[validation[validationIndex][0]].checked )
    return validation[validationIndex][1];

  return null;
  }

function validateCharRange (validationIndex, min, max)
  {
  if (theForm[validation[validationIndex][0]].value.length < min || theForm[validation[validationIndex][0]].value.length > max)
    return validation[validationIndex][1];

  return null;
  }

function validateSelect (validationIndex)
  {
  var currIndex = theForm[validation[validationIndex][0]].selectedIndex;

  if (theForm[validation[validationIndex][0]].options[currIndex].value == "")
    return validation[validationIndex][1];
  
  return null;
  }

function validateHiddenTextField (validationIndex)
  {
  if (theForm[validation[validationIndex][0]].value == "")
    {
    setFocus = false;
    return validation[validationIndex][1];
    }

  return null;
  }

function validateAlphaNum (validationIndex, min, max)
  {
  var legalChars = /^[A-Za-z0-9]*$/;
  var value = theForm[validation[validationIndex][0]].value;
  if (!legalChars.test(value) || value == "" || value.length < min || value.length > max)
    {
    return validation[validationIndex][1];
    }

  return null;
  }

function validatePassword (validationIndex, min, max)
  {
  var input = theForm[validation[validationIndex][0]];
  var value = input.value; var type = input.type;
  if(value.length < min || value.length > max || type == "text")
    {
    return validation[validationIndex][1];
    }

    return null;
  }

/*
* END CUSTOMIZED VALIDATION FUNCTIONS
*/

var theForm = null;
var setFocus = true;
var validation = new Array();

function validate(form)
  {
  var error = false;
  theForm = document.forms[form];
  validation = eval(form);

  for (var i=0; i<validation.length; i++)
    {
    // if the function to call exists (index 2), call it
    if (validation[i][2])
      {
      var argumentList = new Array();

      // create the argument list to pass to apply
      argumentList.push(i);
      for (var j=0; j<validation[i][3].length; j++)
        {
        argumentList.push(validation[i][3][j]);
        }

      // call the function
      functionReturn = eval(validation[i][2]).apply(this, argumentList);

      if (functionReturn)
        {
        alert(functionReturn);
        error = true;
        if(setFocus) theForm[validation[i][0]].focus();
        break;
        }
      
      }

    }

    if(!error) theForm.submit();
  }


function indexOf(field)
  {
  for (var i=0; i<validation.length; i++)
    if (validation[i][0] == field)
      return i;
  }


function isDigit (c)
 {
 return ((c >= "0") && (c <= "9"))
 }

function isANumber (s)
 {
 var i;

 for (i = 0; i < s.length; i++)
   {
   // Check that current character is number.
   var c = s.charAt(i);

   if (!isDigit(c))
     return false;
   }

 // All characters are numbers.
 return true;
 }

function isEmail (s)
 {
 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;
 }
