function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}
   
  return result;

}

function validNum(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validInt(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var num = parseInt(formField.value,10);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validDate(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var elems = formField.value.split("/");
 		
 		result = (elems.length == 3); // should be three components
 		
 		if (result)
 		{
 			var month = parseInt(elems[0],10);
  			var day = parseInt(elems[1],10);
 			var year = parseInt(elems[2],10);
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && (day > 0) && (day < 32) &&
					 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format MM/DD/YYYY for the "' + fieldLabel +'" field.');
			formField.focus();		
		}
	} 
	
	return result;
}

function validmask (formField,fieldLabel,required,mask) {
        // used to check a field value against an approved format
        // examples
        // date     : if (!mask(form.date.value, "##/##/##"))
        // zip code : if (!mask(form.zip.value, "#####-####"))

	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
		InString = formField.value;
        if (((InString.length ==0) || (mask.length ==0)) || (InString.length!= mask.length))
                result = false;
        TempString=""
        for (Count=0; Count<=InString.length; Count++)  {
                StrChar = InString.substring(Count, Count+1);
                MskChar = mask.substring(Count, Count+1);
                if (MskChar=='#')
                {
                        if(isNaN(StrChar))
                               result = false;
                }
                else if (MskChar=='*') {
                }
                else {
                        if (MskChar!=StrChar)
                               result = false;
                }
        }
  		if (!result)
 		{
 			alert('Please enter data in the format "' + mask + '" for the "' + fieldLabel +'" field.');
			formField.focus();
		}	
		else
		{
		result = true;
		}
	} 
	
	return result;
}

function contains(fullString, testString) {
        // used to verify a string contains a specific sequence of characters
        // examples:
        // email : if (!contains(form.email_addr.value, "@"))
        istrue = false
        fullLength = fullString.length
        testLength = testString.length
        //alert(fullLength);
        //alert(testLength);
        for (i=0;i<=fullLength;i++) {
                comp=fullString.substring(i-1,fullLength);
                comp=comp.substring(0,testLength);
                //alert(comp);
                if (comp == testString) {
                        istrue = true;
                        //alert("Match found!");
                        return istrue
                }
        }
        return istrue
}


function check(form) {
        // validates a form on submit; form tag : <form onsubmit="return check(this)">

        // check for empty field
        if (form.field.value == "") {
                alert("Please enter a value for field.");
                form.field.focus();
        }
        // check passwords match
        else if (form.password.value != form.password2.value) {
                alert("Both password entries must be the same. Please try again.");
                form.password.value = "";
                form.password2.value= "";
                form.password.focus();
        }
        // verify validity of email address
        else if (!emailCheck(form.email_addr.value)) {
                form.email_addr.focus();
        }
        // verify a field value is numeric
        else if ((isNaN(form.employee_no.value)) || (form.employee_no.value == "")) {
                alert("Please enter an employee number.");
                form.employee_no.value = "";
                form.employee_no.focus();
        }
        // validate date format
        else if (validmask(form.date.value, "##/##/####") == false) {
                alert("Please enter a date in MM/DD/YYYY format.");
                form.date.value = "";
                form.date.focus();
        }
        // validate a state
        else if ((!contains("AL,AK,AZ,AR,CA,CO,CT,DE,DC,FL,GA,HI,ID,IL,IN,IA,KS,KY,LA,ME,MD,MA,MI,MN,MS,MO,MT,NB,NV,NH,NJ,NM,NY,NC,ND,OH,OK,OR,PA,RI,SC,SD,TN,TX,UT,VT,VA,WA,WV,WI,WY", form.state.value)) || (form.state.value.length != 2)) {
                alert("Please enter a valid state abbreviation.");
                form.state.value = "";
                form.state.focus();
        }
        // validate a zip code
        else if ((!mask(form.zip.value, '#####')) && (!mask(form.zip.value, "#####-####"))) {
                alert('Please enter a valid zip code.');
                form.zip.focus();
        }
        // validate a phone number
        else if (mask(form.phone.value, "###-###-####") == false) {
                alert("Please enter a phone number in the form: ###-###-####");
                form.phone.value = "";
                form.phone.focus();
        } else {
                return true;
        }
        return false;
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") { return inputString; }
   var retValue = inputString;
   var ch = retValue.substring(0, 1);
   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);
   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }
   while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings
   }
   return retValue; // Return the trimmed string back to the user
}

function validRadio(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
		var myOption = -1;
	
		for (i=0; i<formField.length; i++) {
			if (formField[i].checked) {
				myOption = i;
				result = true;
			}
		}
	
		if (myOption == -1) {
			alert('Please select the "'  + fieldLabel +'" field.');
			result = false;
		}

	}
	return result;
}
