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.mandFunc = new Array();
	this.mandEQ = new Array();
	this.mandReg = 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',
							' supports only a-z,0-9,_ and -',
							' 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 = 10;
								this.errArr[10] += 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;
							}
						}
					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(fldObj.type){
					if(this.mandFunc[i]){
						var chk = eval(this.mandFunc[i] + '(this,'+i+')');
						if(!chk){
							this.errorCode = 1;
						}
					}
				}
				
				if(this.errorCode >= 0){
					if(this.errorType == 1){
						this.markField(i, fldObj, this.errorCode);
					}else{
						this.errStr += this.mandCaptions[i] + " ("+this.errArr[this.errorCode]+" )\n";
					}
					if(this.alertType == 1){
						fldObj.focus();
						return false;
					}
					this.errorCode = -1;
				}
			}
		}
		if(this.errStr){
			if(this.errorType != 1){
				alert("Following fields are either blank or filled incorrectly\n\n" + this.errStr);
			}
			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;
			}
		}
	};
}
function checkEmail(validObj, fld){
	var fldObj = document.forms[validObj.formName].elements[validObj.mandFields[fld]];
	var chkAt = fldObj.value.indexOf("@");
	var chkDot= fldObj.value.indexOf(".");
	var chkHack= fldObj.value.indexOf("@.");
	var chkHackA= fldObj.value.indexOf(".@");
	if((chkAt >= 0) && (chkDot >= 0) && (chkHack == -1) && (chkHackA == -1) ) {
		return true;
	}
	return false;
}