<!--//
// Support Functions
function strip(filter,str)
{
  var i,curChar;
  var retStr = '';
  var len = str.length;
  for(i=0; i<len; i++){
	 curChar = str.charAt(i);
	 if(filter.indexOf(curChar)<0) 
	   //not in filter, keep it
		retStr += curChar;
  }
  return retStr;
}
   
function reformat(str)
{
  var arg;
  var pos = 0;
  var retStr = '';
  var len = reformat.arguments.length;
  for(var i=1; i<len; i++){
	 arg = reformat.arguments[i];
	 if(i%2==1)
		retStr += arg;
	 else{
		retStr += str.substring(pos, pos + arg);
		pos += arg;
	 }
  }
  return retStr;
}
//End Support Functions

   //Validation Rules
function notEmpty(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a string is not empty.
	
	PARAMETERS:
		str - String to be tested
	
	RETURNS:
		True if the string contains a value, otherwise false.
	******************************************************************************/
	if(strip(" \n\r\t",str).length ==0)
		return false;
	else
		return true;
}

function  validateNumeric(str) 
{
	/******************************************************************************
	DESCRIPTION: Validates that a string contains only valid numbers.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	
	//check for numeric characters
	return objRegExp.test(str);
}

function validateInteger(str) 
{
	/************************************************
	DESCRIPTION: Validates that a string contains only
		valid integer number.
	
	PARAMETERS:
	   strValue - String to be tested for validity
	
	RETURNS:
	   True if valid, otherwise false.
	******************************************************************************/
  var objRegExp  = /(^-?\d\d*$)/;

  //check for integer characters
  return objRegExp.test(str);
}


function validateYear(year)
{
	/******************************************************************************
	DESCRIPTION: Validates that a year contains four characters.
	
	PARAMETERS:
		year - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	if (year.length!=4)
		return false;
	else
		return true;
}

function validateFloat(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a string contains a valid number.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	str = strip(' \n\r\t',str);
	
	//remove leading zeros, if any
	while(str.length > 1 && str.substring(0,1) == '0')
	{
		str = str.substring(1,str.length);
	}
	
	var val = parseFloat(str);
	
	if(isNaN(val))
		return false;
	else
		return true;
}

function validateUSPhone(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a string contains a valid US phone number.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp  = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/;

	//check for valid us phone with or without space between
	//area code
	return objRegExp.test(str);
}

   
  function validateZip(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a string contains a valid zip code.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;

  //check for valid US Zipcode
  return objRegExp.test(str);
}


   
function validateDate(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a  datestring is in mm/dd/yyyy format.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
	
	if(!objRegExp.test(str))
	{
		return false; //doesn't match pattern, bad date
	}else{
		var strSeparator = str.substring(str.length-5,str.length-4) //find date separator
		var arrDate = str.split(strSeparator); //split date into month, day, year

		var oDate = new Date();
		
		oDate.setMonth(eval(arrDate[0]-1));
		oDate.setDate(arrDate[1]);
		oDate.setFullYear(arrDate[2]);

		// Validate whether the date itself is a valid calendar date.
		if ((arrDate[2] != oDate.getFullYear()) || (eval(arrDate[0]-1) != oDate.getMonth()))
		{
			return false;
		}else{
			return true;
		}
	}
	
}

function validateShortDate(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a  datestring is in mm/yyyy format.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp = /^\d{1,2}(\-|\/|\.)\d{4}$/;
	
	if(!objRegExp.test(str))
	{
		return false; //doesn't match pattern, bad date
	}else{
		var strSeparator = str.substring(str.length-5,str.length-4) //find date separator
		var arrDate = str.split(strSeparator); //split date into month,  year

		var oDate = new Date();
		
		oDate.setMonth(eval(arrDate[0]-1));
		oDate.setDate(1);
		oDate.setFullYear(arrDate[1]);

		// Validate whether the date itself is a valid calendar date.
		if ((arrDate[1] != oDate.getFullYear()) || (eval(arrDate[0]-1) != oDate.getMonth()))
		{
			return false;
		}else{
			return true;
		}
	}
	
}


function validateEMail(str)
{
	/******************************************************************************
	DESCRIPTION: Validates that a string contains a valid email address format.
	
	PARAMETERS:
		str - String to be tested for validity
	
	RETURNS:
		True if valid, otherwise false.
	******************************************************************************/
	var objRegExp  = /^.+@.+\..{2,3}$/;
	
	//check for valid email
	return objRegExp.test(str);
}

function validateRadio(radioArray)
{
	/******************************************************************************
	DESCRIPTION: Validates that a choice has been made in a radio button array.
	
	PARAMETERS:
		radioArray - radioArray to be tested for validity
	
	RETURNS:
		True if a choice has been made, otherwise false.
	******************************************************************************/
	for(i=0; i<radioArray.length; i++)
	{
		if(radioArray[i].checked) return radioArray[i].value;
	}
	return false;
}

function validateDropdown(dropdown) 
{
	/******************************************************************************
	DESCRIPTION: Validates that a choice has been made in a dropdown list.
	
	PARAMETERS:
		dropdown - dropdown to be tested for validity
	
	RETURNS:
		True if a choice has been made, otherwise false.
	******************************************************************************/
	if (dropdown.selectedIndex==0) 
	{
		return false;
	}else{
		return true;
	}
} 
//END Validation Rules
   
//BEGIN Formatting functions
function formatPhone(str)
{
	/******************************************************************************
	DESCRIPTION: Reformats string to US phone format (nnn) nnn-nnnn.
	
	PARAMETERS:
		str - String to be reformatted
	
	RETURNS:
		Reformatted string.
	******************************************************************************/
	str = strip("*() -./_\n\r\t\\",str);
	
	if(str.length==10)
		return reformat(str,"(",3,") ",3,"-",4);
	if(str.length==7)
		return reformat(str,"",3,"-",4);
}

function formatSSN(str)
{
	/******************************************************************************
	DESCRIPTION: Reformats string to SSN format nnn-nn-nnnn.
	
	PARAMETERS:
		str - String to be reformatted
	
	RETURNS:
		Reformatted string.
	******************************************************************************/
	str = strip(" -.\n\r\t",str);
	
	return reformat(str,"",3,"-",2,"-",4);
}

function formatZip(str)
{
	/******************************************************************************
	DESCRIPTION: Reformats string to US zip code format nnnnn (with optional +4 -nnnn).
	
	PARAMETERS:
		str - String to be reformatted
	
	RETURNS:
		Reformatted string.
	******************************************************************************/
	str = strip("- \n\r\t",str);
	
	if(str.length==5)
		return str;
	if(str.length==9)
		return reformat(str,"",5,"-",4);
}


function formatDate(str,style)
{
	/******************************************************************************
	DESCRIPTION: Reformats string to date format based on style argument.
	
	PARAMETERS:
		str - String to be reformatted
		style - string mask for format style
	
	RETURNS:
		Reformatted string.
	******************************************************************************/
	var dateVar = new Date(str);
	var year = dateVar.getYear();
	
	if(year<10)
		year += 2000;
	if(year<100)
		year += 1900;
		
	switch(style)
	{
		case "MM/DD/YY":
			return (dateVar.getMonth() + 1) + "/" + 
			dateVar.getDate() + "/" + year;
			break;
		case "DD/MM/YY":
			return dateVar.getDate() + "/" + 
			(dateVar.getMonth() + 1) + "/" + year;
			break;
		case "Month Day, Year":
			return getMonthName(dateVar) + " " + 
			dateVar.getDate() + ", " + year;
			break;
		case "Day, Month Day, Year":
			return getDayName(dateVar) + ", " + 
			getMonthName(dateVar) + " " + 
			dateVar.getDate() + ", " + year;
			break;
		default:
			return (dateVar.getMonth() + 1) + "/" + 
			dateVar.getDate() + "/" + year;
			break;
	}
}
//End Formatting Functions
   
   //Form Validator
   function validator(form){
     
	 //Validate applicant name
	  if(notEmpty(form.name.value)==false){
		 alert("Please enter your name.");
         form.name.focus();
         return false;
      }
	  
	  //Validate at least 1 line of address is entered
	  if(notEmpty(form.address1.value)==false){
		 alert("Enter your address.");
         form.address1.focus();
         return false;
      }
	  
	  //Skip address 2, not necessarily required
	   
	   //Validate applicant city
	  if(notEmpty(form.city.value)==false){
		 alert("Enter your city.");
         form.city.focus();
         return false;
      }
	  
	  //Validate applicant state
	   	if(validateDropdown(form.state)==false){
		 alert("Choose your state from the list.");
         form.state.focus();
         return false;
		 }
		 
		 //Validate applicant zip code
	   if(notEmpty(form.zip.value)==false){
		 alert("Enter your zip code.");
         form.zip.focus();
         return false;
      }
	  else{
	  //form.zip.value = formatZip(form.zip.value);
       if(validateZip(form.zip.value)==false){
		 alert("Enter a valid zip code.");
         form.zip.focus();
         return false;
         }
	  }
	  
	  //Validate applicant phone number
	   if(notEmpty(form.telephone.value)==false){
		 alert("Enter your phone number.");
         form.telephone.focus();
         return false;
      }
	  else{
	 // form.telephone.value = formatPhone(form.telephone.value);
	  if(validateUSPhone(form.telephone.value)==false){
		 alert("Enter a valid phone number.");
         form.telephone.focus();
         return false;
         }
		}
		
		//Validate contact email
	   if(notEmpty(form.email.value)==false){
		 alert("Please enter your email address (i.e. 'yourname@yourdomain.com').");
         form.email.focus();
         return false;
      }
	  else{
	  //form.email.value = strip(" \n\r\t",form.email.value); 
		if(validateEMail(form.email.value)==false){
		 alert("Please enter a valid email address (i.e. 'yourname@yourdomain.com').");
         form.email.focus();
         return false;
         }
		}
		
		 //End form validator code	
	  
}
//-->