 function JimetFormValidatorObj() { 
 	this.jimetAjaxObj = null;
 	this.toggleDivId = null;
 	this.formId = null;
 	this.formObj = null;
 	this.action = null;
 	this.postData = null;
 	this.url = appRoot+'/FormValidatorAjax';
 	this.errMsg = null;
 	this.resultMsg = null;
 	this.endFunction = null;
 	
 	this.init = function(formId,divId){
 		if (!this.formObj){
 			if (!document.getElementById(formId)){
 				this.errMsg = 'Not a valid form Id';
 				return false;
 			}
 			else{
 				this.formId = formId;
 				this.toggleDivId = divId; 			
 				this.formObj = document.getElementById(this.formId);
 				this.jimetAjaxObj = new JimetAjaxObj();
 				//alert ("FORM ID : " + this.formId + "DIV ID : " + this.toggleDivId +"FORM OBJ : " +this.formObj);
 			}
 		}
 		return this.formObj;
 	};
 	
 	this.doValidate = function(formId,divId){
		if (!this.init(formId,divId)){
 			alert(this.errMsg);
			return; 	 	 
	 	}
	 	
		this.postData = "formId" + "="+ encodeURI(this.formId)+"&";
		this.postData += "action" + "="+ encodeURI(this.formObj.action.value);
	
		
		for(i=0; i<this.formObj.elements.length; i++) {
			if( (!(this.formObj.elements[i].type == 'radio')) && (!(this.formObj.elements[i].type == 'checkbox')) && (!(this.formObj.elements[i].type == 'button')) && (!(this.formObj.elements[i].type == 'submit'))&& (!(this.formObj.elements[i].type == 'file')) && (!(this.formObj.elements[i].multiple))){
		 		if(this.formObj.elements[i].getAttribute('validator'))
		 		{
			 		args = this.formObj.elements[i].getAttribute('validator').split(";");
			 		
			 		this.postData += "&"+this.formObj.elements[i].name + "="+ encodeURIComponent(this.formObj.elements[i].value.replace(/\r\n/g," "));
			 		this.postData += "&"+this.formObj.elements[i].name + "HtmlType=" + encodeURIComponent(this.formObj.elements[i].type);
		
			 		this.postData += "&"+this.formObj.elements[i].name + "Required=" + encodeURIComponent(args[0]);
			 		this.postData += "&"+this.formObj.elements[i].name + "ValidationType=" + encodeURIComponent(args[1]);
			 		this.postData += "&"+this.formObj.elements[i].name + "MinLength=" + encodeURIComponent(args[2]);
			 		this.postData += "&"+this.formObj.elements[i].name + "MaxLength=" + encodeURIComponent(args[3]);
			 		this.postData += "&"+this.formObj.elements[i].name + "RealLifeName=" + encodeURIComponent(args[4]);	 		
		 		}		
		   		else 
		   		{
		 			if(this.formObj.elements[i].value)
		 				this.postData += "&"+this.formObj.elements[i].name + "="+ encodeURIComponent(this.formObj.elements[i].value.replace(/\r\n/g," "));
		   		}	 		
			}
			else if(this.formObj.elements[i].type == 'radio' || this.formObj.elements[i].type == 'checkbox' || this.formObj.elements[i].multiple){
		 		if(this.formObj.elements[i].getAttribute('validator'))
		 		{
			 		args = this.formObj.elements[i].getAttribute('validator').split(";");
			 		
			 		this.postData += "&"+this.formObj.elements[i].name + "="+ encodeURI(this.formObj.elements[i].value);
			 		this.postData += "&"+this.formObj.elements[i].name + "HtmlType=" + encodeURI(this.formObj.elements[i].type);
			 		this.postData += "&"+this.formObj.elements[i].name + "isChecked=" + encodeURI(this.formObj.elements[i].checked);
			 		this.postData += "&"+this.formObj.elements[i].name + "Required=" + encodeURI(args[0]);
			 		this.postData += "&"+this.formObj.elements[i].name + "RealLifeName=" + encodeURI(args[4]);	 		
		 		}		
		 		else 
		 		{
		 			if(this.formObj.elements[i].multiple){
		 				this.formObjs = this.formObj.elements[i].options;
		 				for(q = 0 ; q<this.formObjs.length;q++)
		 					this.postData += "&"+this.formObj.elements[i].name + "="+ this.formObjs[q].value;
		 			}
		 			else
		 				this.postData += "&"+this.formObj.elements[i].name + "="+ encodeURI(this.formObj.elements[i].value.replace(/\r\n/g," "));
		 		}
			}
		}
		
		this.postData = this.postData.replace(/%25/g,encodeURI('?')); 	
		
		var self = this;
		
		this.jimetAjaxObj.setPostData(this.postData);
		this.formValidationResult = function(result){
			self.parseResult (result);
		};
		this.toggleLoading();
		this.jimetAjaxObj.doPost(this.url,self.formValidationResult);
	
 	};

	this.parseResult = function(result){
		
		var numOfErrors = 0;
		var qs = new Querystring(decodeURI(result));

		this.formObj = document.getElementById(qs.get("formId"));
		for(i=0; i<this.formObj.elements.length; i++) 
		{  
			if(document.getElementById(this.formObj.elements[i].name+'ErrMsg')){
				document.getElementById(this.formObj.elements[i].name+'ErrMsg').innerHTML = '';   
				document.getElementById(this.formObj.elements[i].name+'ErrMsg').style.visibility = 'hidden';
			}   
		}	
		
		for(i=0; i<this.formObj.elements.length; i++) 
		{        
			if(document.getElementById(this.formObj.elements[i].name+'ErrMsg') && ( (this.formObj.elements[i].getAttribute('validator')) || (this.formObj.elements[i].name=='it') || (this.formObj.elements[i].name=='combobox3') ) )
			{
				if(qs.get(this.formObj.elements[i].name+"ErrMsg") != 'ok') 
		   		{
		   			document.getElementById(this.formObj.elements[i].name+'ErrMsg').style.visibility = 'visible';
			   		document.getElementById(this.formObj.elements[i].name+'ErrMsg').innerHTML = qs.get(this.formObj.elements[i].name+"ErrMsg");        
					numOfErrors++;
				}
			}
		}
	
		if (qs.get("resultErrMsg"))
			numOfErrors++;	
		//alert (numOfErrors+" : " +qs.get("resultErrMsg")+" : " +qs.get("resultMsg"))
		this.toggleLoading();
	
		if (this.endFunction)
			this.endFunction(numOfErrors,qs.get("resultErrMsg"),qs.get("resultMsg"));	
	};
	
	this.setEndFunction = function(endFunc){
		this.endFunction = endFunc;
	};
	
	this.toggleLoading = function(){
		
		var mainDiv = document.getElementById('bodyDiv');	
		var loadingDiv = document.getElementById(this.toggleDivId+'Loading');
		
		if (mainDiv && loadingDiv){
			loadingDiv.style.position = 'absolute';
			loadingDiv.style.left = mainDiv.offsetLeft;
			loadingDiv.style.top = mainDiv.offsetTop;
			loadingDiv.style.height = mainDiv.offsetHeight;
			loadingDiv.style.width = mainDiv.offsetWidth;
			loadingDiv.style.display = loadingDiv.style.display == 'none'?'block':'none';		
		}
	};
 }