function checkForm(){
    inputs = document.getElementsByTagName("input");
    selects = document.getElementsByTagName("select");
	textareas = document.getElementsByTagName("textarea");
    var flag = true;

    for(i =0; i<inputs.length ; i++){
        required = inputs[i].getAttribute("required");
        if(required != undefined && required != "checkbox" && required != "radio"){
            fieldName = (inputs[i].getAttribute("pretty")!= undefined) ? inputs[i].getAttribute("pretty") : inputs[i].name;
            requiredLength = (inputs[i].getAttribute("requiredLength")!= undefined) ? inputs[i].getAttribute("requiredLength") : 1;
            if(!lengthValid(inputs[i], requiredLength, fieldName)){            
                flag = false;
            }
            else if(required == "date" && ! dateValid(inputs[i], fieldName)){            
                flag = false;
            }
            else if(required == "email" && ! emailValid(inputs[i], fieldName)){            
                flag = false;
            }
            else if(required == "number" && ! numberValid(inputs[i], fieldName)){
                flag = false;
			}
            else if(required == "phoneNumber" && ! phoneNumberValid(inputs[i], fieldName)){
                flag = false;
            }
        }else if(required != undefined && required == "radio"){
            fieldName = inputs[i].name;    
               prettyText = (inputs[i].getAttribute("pretty")!= undefined) ? inputs[i].getAttribute("pretty") : inputs[i].name;
               radios = eval("document." + inputs[i].form.name + "." + fieldName);
               radiosLength = radios.length;
               if(!radioValid(radios,radiosLength,prettyText)){
            
					flag = false;
               }
        }else if(required != undefined && required == "checkbox"){
            requiredNumber = (inputs[i].getAttribute("requiredNumber")!= undefined) ? inputs[i].getAttribute("requiredNumber") : 1;
            fieldName = inputs[i].name;    
               prettyText = (inputs[i].getAttribute("pretty")!= undefined) ? inputs[i].getAttribute("pretty") : inputs[i].name;
               checkboxes = eval("document." + inputs[i].form.name + "." + fieldName);
               checkboxesLength = checkboxes.length;
               if(!checkboxValid(checkboxes,checkboxesLength,requiredNumber,prettyText)){
            
					flag = false;
               }
        }
    }
    for(i =0; i<selects.length ; i++){
        required = selects[i].getAttribute("required");
       if(required != undefined){
            fieldName = (selects[i].getAttribute("pretty")!= undefined) ? selects[i].getAttribute("pretty") : selects[i].name;
            if(required == "select" && ! selectValid(selects[i], fieldName)){
            
				flag = false;
            }
        }
    }
	
	for(i=0; i<textareas.length; i++){
		required = textareas[i].getAttribute("required");
		if(required != undefined){
			fieldName = (textareas[i].getAttribute("pretty")!= undefined) ? textareas[i].getAttribute("pretty") : textareas[i].name;
            requiredLength = (textareas[i].getAttribute("requiredLength")!= undefined) ? textareas[i].getAttribute("requiredLength") : 1;
			if(!lengthValid(textareas[i], requiredLength, fieldName)){
            
				flag = false;
            }
		}
	}
	
    return flag;
}


//function to validate US dates
function dateValid(element, text){
        good = true;
        dar =element.value.split("/");
        if(dar.length < 3){
                good = false;
        }
        if(isNaN(parseInt(dar[0], 10)) || isNaN(parseInt(dar[1], 10)) || isNaN(parseInt(dar[2], 10))){
                good = false;
        }
        month = parseInt(dar[0], 10);
        day = parseInt(dar[1], 10);
        year = parseInt(dar[2], 10);
        if(month< 1 || month > 12){
                good = false;
        }
        else if(day < 1 || day > 31){
                good = false;
        }
        else if(year < 1900 || year > 2100){
                good = false;
        }
        else if(
        (year % 4 != 0 && day > 28 && month == 2) ||     (month == 4 || month ==6 || month == 9 || month == 11) && day > 30     || (year % 4 == 0 && day > 29 && month == 2)){
                good = false;
        }
        if(! good){
                    alert( text + " is a not a valid date");
                    element.focus();
                    return false;
        }
        return true;
}

function G(id) {
	return document.getElementById(id);
}

function GC(e) {
	return document.createElement(e);
}

function generateImg(element){

	var curImg;
	if((curImg = G(element.name+"_img")) == null){
		curImg = GC("img");
		curImg.id = element.name+"_img";
		curImg.src = "/images/icon_error.gif";
		var pElement = element.parentNode;
		pElement.appendChild(curImg); 
	}	
	return curImg;
}

function scount(str) 
{ 
    var i=0,j=0,c=0; 
    var t=/[a-zA-Z]+/; 
    var bo=false; 
    for(i=0,j=i+1;j<=str.length;i=j++) 
    { 
        if(t.test(str.substring(i,j)) && !bo) 
        { 
            bo=true;c++; 
        } 
        else if(!t.test(str.substring(i,j))) 
        { 
            bo=false; 
        } 
    } 
    return c; 
}

//function to validate by length    
function lengthValid(element, len, text) {
    text = Trim(text);    
    if (element.value.length < len)
    {
		var curImg = generateImg(element);
		curImg.alt = "Please enter at least " + len + " character(s) in the \"" + text + "\" field.";
        curImg.title = "Please enter at least " + len + " character(s) in the \"" + text + "\" field.";
		curImg.style.display="";
		return false;
    }else{
		if(G(element.name+"_img"))
			G(element.name+"_img").style.display="none";
        return true;
    }
}

//function to validate select drop-downs
function selectValid(element, text) {
    text = Trim(text);
    if (element[0].selected)
    {
        var curImg = generateImg(element);		
		curImg.alt = "Please select a " + text + ".";
        curImg.title = "Please select a " + text + ".";
		curImg.style.display="";
        return false;
    }else{
		if(G(element.name+"_img"))
			G(element.name+"_img").style.display="none";
        return true;
    }
}

//function to validate numerical fields
function numberValid(element, text) {
    text = Trim(text);
    if (isNaN(element.value))
    {        
        var curImg = generateImg(element);		
		curImg.alt = "Please enter a valid " + text + ".";
        curImg.title = "Please enter a valid " + text + ".";
		curImg.style.display="";
        return false;
    }else{
		if(G(element.name+"_img"))
			G(element.name+"_img").style.display="none";
        return true;
    }
}

function phoneNumberValid(element, text){
    text = Trim(text);
    var regExp = /^[0-9\(\)\-\#\+\s]*$/;
    if (!regExp.exec(element.value))
    {
        var curImg = generateImg(element);
        curImg.alt = "Please enter a valid format in the \"" + text + "\" field. Only numbers, spaces and these symbols (-, +, (, ), #) allowed.";
        curImg.title = "Please enter a valid format in the \"" + text + "\" field. Only numbers, spaces and these symbols (-, +, (, ), #) allowed.";
        curImg.style.display="";
        return false;
    }else{
        if(G(element.name+"_img"))
			G(element.name+"_img").style.display="none";
        return true;
    }
}

//function to validate email
function emailValid(element, text) {
        text = Trim(text);
        good = true;
    if(element.value.length < 5)
    {
            good = false;
    }

    if(element.value.indexOf("@") < 1 || element.value.lastIndexOf("@")  > element.value.length - 3 )
    {
            good = false;
    }
    if(element.value.indexOf(".") == -1 || element.value.lastIndexOf(".")  > element.value.length - 3 )
    {
			good = false;
    }
    if(element.value.lastIndexOf("@") !=  element.value.indexOf("@") )
    {
			good = false;
    }
    if(element.value.lastIndexOf("@") !=  element.value.indexOf("@") )
    {
			good = false;
    }
    if(element.value.lastIndexOf("@") >= element.value.lastIndexOf(".")-1 )
    {
			good = false;
    }
	if(!good){
		
		var curImg = generateImg(element);		
		curImg.alt = "Please enter a valid " + text + ".";
        curImg.title = "Please enter a valid " + text + ".";
		curImg.style.display="";
		return false;
	}
    if(G(element.name+"_img"))
		G(element.name+"_img").style.display="none";
    return true;
}

//function to validate at least 1 radio button is checked    
function radioValid(element, radios, text) {
    text = Trim(text);
    radios=radios-1;
    var varChecked=false;
    for(var radiostoCheck=0;radiostoCheck<=radios;radiostoCheck++)
    {
        if(element[radiostoCheck].checked)
        {
            varChecked=true;
        }
    }
    if (varChecked==false)
    {
        var curImg = generateImg(element);		
		curImg.alt = "Please select " + text + ".";
        curImg.title = "Please select " + text + ".";
		curImg.style.display="";
        return false;
    }else{
		if(G(element.name+"_img"))
			G(element.name+"_img").style.display="none";
        return true;
    }
}


//function to validate at a given number of checkboxes are checked    
function checkboxValid(element, checkboxesLength, requiredNumber,text) {
    text = Trim(text);
    checkboxesLength=checkboxesLength-1;
    var varChecked=0;
    for(var checkboxestoCheck=0;checkboxestoCheck<=checkboxesLength;checkboxestoCheck++)
    {
        if(element[checkboxestoCheck].checked)
        {
            varChecked++;
        }
    }
    if (varChecked < requiredNumber)
    {
        
        var curImg = generateImg(element[0]);		
	curImg.alt = "Please select at least " + requiredNumber + " " + text + ".";
        curImg.title = "Please select at least " + requiredNumber + " " + text + ".";
	curImg.style.display="";
        return false;
    }else{
	if(G(element[0].name+"_img"))
		G(element[0].name+"_img").style.display="none";
        return true;
    }
}

/*
//function to validate "other box" is not empty if checked    
function otherboxValid(otherradio,otherfield,len,text) {
    text = Trim(text);
    if (otherradio.checked && (otherfield.value.length<len))
      {
           alert("Please specify the " + text + ".");
        otherfield.focus();
        return false;
    }else{
        return true;
    }
}
*/

//function to validate radio checked if checkbox checked    
function checkboxRadio(checkfield, radiofield, radios, text) {
    text = Trim(text);
    if(checkfield.checked)
    {    
        radioValid(radiofield, radios, text);
    }
}





/*
==================================================================
LTrim(string) : Returns a copy of a string without leading spaces.
==================================================================
*/
function LTrim(str)
/*
   PURPOSE: Remove leading blanks from our string.
   IN: str - the string we want to LTrim
*/
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      // We have a string with leading blank(s)...

      var j=0, i = s.length;

      // Iterate from the far left of string until we
      // don't have any more whitespace...
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      // Get the substring from the first non-whitespace
      // character to the end of the string...
      s = s.substring(j, i);
   }
   return s;
}

/*
==================================================================
RTrim(string) : Returns a copy of a string without trailing spaces.
==================================================================
*/
function RTrim(str)
/*
   PURPOSE: Remove trailing blanks from our string.
   IN: str - the string we want to RTrim

*/
{
   // We don't want to trip JUST spaces, but also tabs,
   // line feeds, etc.  Add anything else you want to
   // "trim" here in Whitespace
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      // We have a string with trailing blank(s)...

      var i = s.length - 1;       // Get length of string

      // Iterate from the far right of string until we
      // don't have any more whitespace...
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;


      // Get the substring from the front of the string to
      // where the last non-whitespace character is...
      s = s.substring(0, i+1);
   }

   return s;
}

/*
=============================================================
Trim(string) : Returns a copy of a string without leading or trailing spaces
=============================================================
*/
function Trim(str)
/*
   PURPOSE: Remove trailing and leading blanks from our string.
   IN: str - the string we want to Trim

   RETVAL: A Trimmed string!
*/
{
   return RTrim(LTrim(str));
}
 

