var formObjects = new Array();
var name2Number = new Array();
var language = new Array();
language["header"] = "Your submission contains the following errors :\n";
language["field"] = ". Field ";
language["require"] = " is required";
language["and"] = " and ";
language["smin"] = " must consist of between ";
language["nmin"] = " must contain a value between ";
language["chars"] = " characters";
language["num"]	= " must contain a number";
language["select"] = " must contain a valid selection";
language["email"] = " must contain a valid e-mail address";

var useThisColor = '#f0f0f0';
if ( typeof(failColor) != "undefined" ){
	useThisColor=failColor;
}

// Code to highlight unprocessed fields (Ben 23/02/2004)
// To use this function, put javascript:iceCheck(); in the Address Bar.
function iceCheck(){
	for(f=0;f<document.forms.length;f++){
		for(e=0;e<document.forms[f].elements.length;e++){
			if(document.forms[f].elements[e].ice_name != undefined){
				document.forms[f].elements[e].style.backgroundColor='#FF000';
				document.forms[f].elements[e].style.color='#FFFFFF';
			}
			//alert(document.forms[f].elements[e]).ice_name);
		}
	}
}

// End highlight unprocessed fields code

function define(formName, fieldName, desc, type, min, max, required){
var theFormField = new formField(formName, fieldName, desc, type, min, max, required);
name2Number[formName] = eval(formObjects.length);
formObjects[eval(formObjects.length)] = theFormField;
}

function formField(formName, fieldName, desc, type, min, max, required){
	this.formName = formName;
	this.fieldName = fieldName;
	this.type = type;
	this.desc = desc;
	this.min = min;
	this.max = max;
	this.isRequired = required;
	this.wasRequired = required;
}

function validate(formName, button)
	{


		for(j=0;j<formObjects.length;j++)
		{
			if(formName==formObjects[j].formName)
			{

				formObjects[j].isrequired = formObjects[j].wasRequired;

				document.forms[formName].elements[formObjects[j].fieldName].style.backgroundColor = '#FFFFFF';
			}
		}

//disable the submit button
for(i=0;i<document.forms[formName].elements.length;i++){
	if (document.forms[formName].elements[i].type == 'submit' || document.forms[formName].elements[i].type == 'image'){
		submitElement = document.forms[formName].elements[i];	
	}
}
try{submitElement.disabled=true;submitElement.value2=submitElement.value;submitElement.value='Please Wait...';}catch(objErr){}

if ( typeof(failColor) != "undefined" ){
	useThisColor=failColor;
}

//Call out to external function (if exists) for any before validation action
try {
	if(beforeValidation(formName)==false){
		returnVal = false;
		//disable the submit button
		try{submitElement.disabled=false;submitElement.value=submitElement.value2;}catch(objErr){}
		return false;
	}
}catch(errorObject){
	//Handler might not be there so do nothing
}

if(button){
	button.disabled = true;
}


var errors = "";
var errorcount = 0;
for(i = 0; i < formObjects.length; i++) {
  if(formObjects[i].formName==formName){	
    valtoCheck = document.forms[formName].elements[formObjects[i].fieldName].value;
    
    //See if there is an overwridden description property in the HTML field
    sName = document.forms[formName].elements[formObjects[i].fieldName].description;
    
    if(sName==undefined){
		sName = formObjects[i].desc;
	}

    //Get the dependsOn name from the HTML field
    dependsOn = document.forms[formName].elements[formObjects[i].fieldName].dependsOn;


    dependsOnCondition = document.forms[formName].elements[formObjects[i].fieldName].condition; // true/false  dependsOn field set to dependsonvalue


    dependsOnValue = document.forms[formName].elements[formObjects[i].fieldName].dependsonvalue; // So can check for specific values of depends on field
    
    dependsOnValue2 = document.forms[formName].elements[formObjects[i].fieldName].dependsonvalue2; // So can check for specific values of depends on field
    
	if (dependsOn!=undefined){
	
		switch(dependsOnCondition){
			case 'checked':
				if (document.forms[formName].elements[dependsOn].checked==true){
					formObjects[i].isRequired =1;
				}else{
					formObjects[i].isRequired =0;
				}
				break;
			case 'unchecked':
				if (document.forms[formName].elements[dependsOn].checked==false){
					formObjects[i].isRequired =1;
				}else{
					formObjects[i].isRequired =0;
				}
				break;
			case 'false':
				arrFalse = new Array('No', 'False', 'no', 'false', 'n', 'N', 'nein', 'Nein', '0');
				marker = 0;
				for (fi=0; fi<arrFalse.length; fi++){
		
			
			if(dependsOnCondition==arrFalse[fi]) {
	
					  if (dependsOnValue!=undefined){
						  if (dependsOnValue == document.forms[formName].elements[dependsOn].value || dependsOnValue2 == document.forms[formName].elements[dependsOn].value) {
						    marker=0;  // condition = false & dependsOnValue == value
						  }else{
						    marker+=1;  //condition = false & dependsOnValue != value
						  }
					  }else{  // dependsOnValue = undefined
					   	marker+=1;
					   }
					  }
					}
								  
				if (marker > 0){
					formObjects[i].isRequired =1;
				}else{
					formObjects[i].isRequired =0;
				}
				break;
			case 'true':
				arrTrue = new Array('Yes', 'True', 'yes', 'true', 'y', 'Y', 'ya', 'Ya', '1');
				marker = 0;
				for (fi=0; fi<arrTrue.length; fi++){
						if(dependsOnCondition==arrTrue[fi]) {         
					  if (dependsOnValue!=undefined){
						if (dependsOnValue == document.forms[formName].elements[dependsOn].value || dependsOnValue2 == document.forms[formName].elements[dependsOn].value) {
						 marker+=1;  // condition = true & dependsOnValue == value
						 }else{
						 marker=0;  //condition = true & dependsOnValue != value
						}
					  }else{  // dependsOnValue = undefined
						marker+=1;
					  }
					}
				}
				if (marker > 0){
					formObjects[i].isRequired =1;
				}else{
					formObjects[i].isRequired =0;
                }
				//}
				break;
			default:
			break;
		}
	}
	
	
    switch(formObjects[i].type){
      case 'email':
      if(valtoCheck.length > 0){
		if((valtoCheck.indexOf("@") == -1) || (valtoCheck.charAt(0) == ".") || (valtoCheck.charAt(0) == "@") || (valtoCheck.length < 6) || (valtoCheck.indexOf(".") == -1) || (valtoCheck.charAt(valtoCheck.indexOf("@")+1) == ".") || (valtoCheck.charAt(valtoCheck.indexOf("@")-1) == ".")) {
		  errorcount++;
		  errors += errorcount + language['field'] + sName + language['email'] + "\n";
		  document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor; 
		}else{
		  if(valtoCheck.indexOf("&") != -1 || valtoCheck.indexOf("#") != -1 || valtoCheck.indexOf("!") != -1){
		    errorcount++;
		    errors += errorcount + language['field'] + sName + language['email'] + "\n";
		    document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor; 
		  }
		}
      }else if(formObjects[i].isRequired==1){
	errorcount++;
	errors += errorcount + language['field'] + sName + language['email'] + "\n"; 
	document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;		
      }
      break;
      case 'num':
      if(valtoCheck.length > 0){
  	if(isNaN(valtoCheck)) { 
    	  errorcount++;
    	  errors += errorcount + language['field'] + sName + language['num'] + "\n";
    	  document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
        }else if(formObjects[i].min!=null && formObjects[i].max!=null){
          if((valtoCheck < formObjects[i].min) || (valtoCheck > formObjects[i].max)){
    	    errorcount++;
    	    errors += errorcount + language['field'] + sName + language['nmin'] + formObjects[i].min + language['and'] + formObjects[i].max + "\n";
    	    document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
    	  }  
    	}
      }else if(formObjects[i].isRequired==1){
	errorcount++;
  	errors += errorcount + language['field'] + sName + language['require'] + language['and'] + language['num'] + "\n";
  	document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
      }
      break;
      case 'string':
     // alert(document.forms[formName].elements[formObjects[i].fieldName].name);
      if(valtoCheck.length > 0){
        if(formObjects[i].min!=null && formObjects[i].max!=null){
          if((valtoCheck.length < formObjects[i].min) || (valtoCheck.length > formObjects[i].max)){
            errorcount++;
            errors += errorcount + language['field'] + sName + language['smin'] + formObjects[i].min + language['and'] + formObjects[i].max + language["chars"] + "\n";
            document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
          }
        }
      }else if(formObjects[i].isRequired==1){
        errorcount++;
        errors += errorcount + language['field'] + sName + language['require'] + "\n";
        document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
      }
      break;
      case 'select':
      if(formObjects[i].isRequired==1){
	if(!valtoCheck){
	  errorcount++;
	  errors += errorcount + language['field'] + sName + language['select'] + "\n";
	  document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
	}  
      }
      default:	
      if(valtoCheck.length > 0){
	// Passed
      }else if(formObjects[i].isRequired==1){
        errorcount++;
        errors += errorcount + language['field'] + sName + language['require'] + "\n";
        document.forms[formName].elements[formObjects[i].fieldName].style.backgroundColor = useThisColor;
      }
      break;
    }
  }
}

//Call out to external function (if exists) for any before validation action
try {
	if(afterValidation(formName)==false){
		returnVal = false;
		try{submitElement.disabled=false;submitElement.value=submitElement.value2;}catch(objErr){}
		return false;
	}
}catch(errorObject){
	//Handler might not be there so do nothing
}

if(errors != "") {
  alert(language["header"].concat("\n" + errors));
  //errors = "";
   if(button){
	button.disabled = false;
  }
  returnVal = false;
  try{submitElement.disabled=false;submitElement.value=submitElement.value2;}catch(objErr){}
  return false;
}else{
  
  //Submit the form but return false to prevent the onSubmit firing another submission
  try {
	document.forms[formName].submit();
  }catch(errorObject){
	returnVal = true;
	return true;
  }
  
  try	{
  	//try to rewrite the ICE sub page div to show a please wait message
	ICEPageDiv.innerHTML = "<table><tr><td height=20></td></tr><tr><td><font face=verdana size=1><b>Please Wait...</b></font></td></tr></table>"

  }catch(errorObject){
	//No ICE Page Div on the page so don't error
  }

  returnVal = false;
  try{submitElement.disabled=false;submitElement.value=submitElement.value2;}catch(objErr){}
  return false;
}
}