//To be used in conjunction with regexp.js

function getObject(obj){

	if (document.getElementById){
		obj = document.getElementById(obj);
	}
	else if (document.all) {
		obj = document.all.item(obj);
	}
	else {
		obj = null;
	}

	return obj;
}
		
function chkForm(objForm, arrValues){
		
	/*
	Flags: R=Required, N=Not required (can be blank)
	A=Alphanumeric, N=Numeric, I=Integer, E=Email, D=Date
	*/
			
	strMessage="";

	for(intCount=0; intCount<arrValues.length; intCount=intCount+4){			
			
		strField=arrValues[intCount];
		objField=getObject(strField);
		if(objField!=null && objField!==undefined){
				
			strTypeFlag=arrValues[intCount+1];
			strMandatoryFlag=arrValues[intCount+2];
			strWarningMessage=arrValues[intCount+3];
					
			//If flag is mandatory and nothing is in the field, throw an error message
			if(strMandatoryFlag!="N" && (objField.value=="" || objField.value==null || objField.value===undefined)){
				strMessage+=strWarningMessage.replace(" Valid ", " ")+"\n";
				formErrorResponse(objField);
			}
			//Regardless of flag, check data is valid
			else{
				//If field isn't blank, validate it
				if(objField.value!="" && objField.value!=null && objField.value!==undefined){
						
					switch(strTypeFlag){
							
						case 'A':
							if(!isValidString(objField.value)){strMessage+=strWarningMessage+"\n";formErrorResponse(objField);}
							break;
									
						case 'N':
							if(!isNumeric(objField.value)){strMessage+=strWarningMessage+"\n";formErrorResponse(objField);}
							break;
								
						case 'I':
							if(!isInteger(objField.value)){strMessage+=strWarningMessage+"\n";formErrorResponse(objField);}
							break;
									
						case 'E':
							if(!isEmail(objField.value)){strMessage+=strWarningMessage+"\n";formErrorResponse(objField);}
							break;
							
						case 'C':
							if(!isValidCompanyName(objField.value)){strMessage+=strWarningMessage+"\n";formErrorResponse(objField);}
							break;	
							
						default:
							strMessage+="unrecognized flag\n";
							break;
							
					}
						
				}
			}
				
		}
			
	}
	
	return strMessage;
		
}

function chkFormLoop(objForm, intIterations, objErrorTarget){

	strMessage="";

	if(intIterations==0){
		arrArguments=new Array();		
		for(intCount=3; intCount<arguments.length; intCount++){
			arrArguments[intCount-3]=arguments[intCount];
		}
		strMessage+=chkForm(objForm, arrArguments);
	}
	
	else{
		for(intOuterCount=1; intOuterCount<intIterations+1; intOuterCount++){
			arrArguments=new Array();
			for(intCount=3; intCount<arguments.length; intCount=intCount+4){
				arrArguments[intCount-3]=arguments[intCount]+intOuterCount.toString();
				arrArguments[intCount-2]=arguments[intCount+1];
				arrArguments[intCount-1]=arguments[intCount+2];
				arrArguments[intCount]=arguments[intCount+3];
			}
			strMessage+=chkForm(objForm, arrArguments);
		}
	}
	
	if(strMessage==""){
		objForm.submit();
	}
	else{		
		objErrorOutput=getObject(objErrorTarget);
		if(objErrorOutput!=null && (objErrorOutput.innerHTML)){
			objErrorOutput.style.display="block";
			objErrorOutput.style.paddingBottom="1em";
			objErrorOutput.style.fontWeight="bold";
			
			arrMessage=strMessage.split("\n");
			strOutput="";
			
			for(arrCount=0; arrCount<arrMessage.length-1; arrCount++){
				strOutput+="<li>" + arrMessage[arrCount] + "</li>";
			}
			
			objErrorOutput.innerHTML="<p>The following errors have been detected:</p><ul style=\"color: #FF0000\; \">" + strOutput + "</ul>";

		}
		else{
			alert(strMessage);
		}
	}	

}

function formErrorResponse(objElement){
	objElement.style.borderColor="#FF0000";
}