function validate(){
	this.formName = 'formname';
	this.alertType = 0;						//  0-> Show all and focus 1st 	1-> Show only 1 & focus
	this.errorType = 0;						//  0-> alert				1-> Display
	this.mandCaptions = new Array();
	this.mandFields = new Array();
	this.mandEQ = new Array();
	this.mandFunc = new Array();
	this.mandReg = new Array();
	this.mandErr = new Array();
	this.mandOR = new Array();
	this.mandNUM = new Array();
	this.mandMAXLIMIT = new Array();
	this.mandMAXLEN = new Array();
	this.mandLT = new Array();
	this.mandDATE = new Array();
	this.mandEXT = new Array();
	this.mandMULTIEXT = new Array();
	this.errStr = '';
	this.errArr = new Array('cannot be left blank',
							'is invalid',
							'is not selected',
							'mismatch',
							'form incomplete',
							'should be numeric',
							'should be less than initial end date',
							'cannot be more than ',
							'select is invalid',
							'cannot have charaters more than ');
							
	this.errorCode = -1;

	this.validateForm = function(){
		var frmObj = document.forms[this.formName];
		for(var i=0; i<this.mandFields.length; i++){
			var fldObj = frmObj.elements[this.mandFields[i]];
			if(fldObj){
				switch(fldObj.type){
					case 'password':
					case 'textarea':
					case 'text':
						if(this.mandOR[i]){
							if(!(fldObj.value) && !(document.forms[this.formName].elements[this.mandOR[i]].value)){
								this.errorCode = 4;
							}
						}else if(!fldObj.value || fldObj.value == ' '){
							this.errorCode = 0;
						}else if(this.mandEQ[i]){
							if(fldObj.value != document.forms[this.formName].elements[this.mandEQ[i]].value){
								this.errorCode = 3;
							}
						}else if(this.mandNUM[i]){
							if(isNaN(fldObj.value)){
								this.errorCode = 5;
							}
						}else if(this.mandMAXLIMIT[i]){
							if((fldObj.value) && parseInt(fldObj.value) > parseInt(this.mandMAXLIMIT[i],10)){
								this.errorCode = 7;
								this.errArr[7] += parseInt(this.mandMAXLIMIT[i],10);
							}
						}else if(this.mandMAXLEN[i]){
							if((fldObj.value) && fldObj.value.length > parseInt(this.mandMAXLEN[i],10)){
								this.errorCode = 9;
								this.errArr[9] += parseInt(this.mandMAXLEN[i],10);
							}
						}else if(this.mandDATE[i]){
							if(this.compareDate(frmObj, 'LT', fldObj.value, document.forms[this.formName].elements[this.mandLT[i]].value) == false){
								this.errorCode = 6;
							}
						}else if(this.mandReg[i]){
							var pattern = eval(this.mandReg[i]); 
							var patternMatch = pattern.test(fldObj.value);	
							if(patternMatch == false){
								this.errorCode = 9;
							}
						}else if(this.mandFunc[i]){
							var pattern = eval(this.mandFunc[i] + '(this)'); 
							if(pattern == false){
								this.errorCode = 1;
							}
						}
					break;
					case 'select-one':
					case 'select':
						if(!fldObj.value || fldObj.value == 0){
							this.errorCode = 2;
						}
					break;
					case 'file':
						if(!fldObj.value){
							this.errorCode = 0;
						}else if(this.mandEXT[i]){
							var contStr = fldObj.value;
							var comStr = contStr.substring(contStr.length - 4);
							if(comStr != this.mandEXT[i]){
								this.errorCode = 8;
							}
						}else if(this.mandMULTIEXT[i]){
							var contStr = fldObj.value;
							var comStr = contStr.substring(contStr.length - 4);
							comStr = comStr.toLowerCase();
							var passStr = this.mandMULTIEXT[i];
							var passStrArr = passStr.split(' ');
							for(var m=0; m<passStrArr.length;m++){
								if(comStr != passStrArr[m]){
									this.errorCode = 8;
									break;
								}
							}
						}
					break;
					default:
						alert(fldObj.type);
					break;
				}
				if(this.mandErr[i]){
					this.errorCode = -1;
					this.errArr[-1] = this.mandErr[i];
				}
				if(this.errorCode >= 0){
					if(this.errorType == 1){
						this.markField(i, fldObj, 0);
					}else{
						this.errStr += '<li>' + this.mandCaptions[i] + " <span class='info it'>("+this.errArr[this.errorCode]+")</span></li>";
					}
					if(this.alertType == 1){
						fldObj.focus();
						return false;
					}
					this.errorCode = -1;
				}
			}
		}
		if(this.errStr){
			if(this.errorType != 1){
				mAlert('<div class="tleft">Following fields are either blank or filled incorrectly<ul>' + this.errStr + '</ul>','500');
			}
			return false;
		}else{
			return true;
		}
	};
	this.markField = function(failIndex, fldObj, errType){
		if(fldObj.errBox){
			fldObj.parentNode.removeChild(fldObj.errBox);
			fldObj.errBox = null;
		}
		var errBox = document.createElement('div');
		errBox.innerHTML = '<div class="abs">'+this.mandCaptions[failIndex] + this.errArr[errType] + '</div>';
		errBox.style.fontSize = '10px';
		errBox.className = 'cboth error';
		fldObj.parentNode.appendChild(errBox);
		fldObj.errBox = errBox;
		fldObj.failIndex = failIndex;
		fldObj._self = this;
		
		if(fldObj){
			switch(fldObj.type){
				case 'select-one':
				case 'select':
					fldObj.oldonchange = fldObj.onchange;
					fldObj.onchange = function(e){
						if(this.errBox && this.value){
							this.parentNode.removeChild(this.errBox);
							this.errBox = null;
						}
						if(this.oldonchange) this.oldonchange();
					};
				break;	
				case 'file':
					fldObj.onchange = function(e){
						if(this.errBox && this.value){
							this.parentNode.removeChild(this.errBox);
							this.errBox = null;
						}
					};
				break;
				default:
					fldObj.onkeydown = function(e){
						if(this.errBox && this.value){
							this.parentNode.removeChild(this.errBox);
							this.errBox = null;
						}
					};
				break;	
			}
		}
	}
	
	this.compareDate = function(frmname, cmpType, cmpStr, pasDate){
		var todate = formatDate(pasDate);
		var fromdate = formatDate(cmpStr);
		if(cmpType == 'LT') {
			if(todate <= fromdate) {
				return false;
			}else{
				return true;
			}
		}
	};

}
