    var valid = new Object();

    // REGEX Elements
	valid.text = /^\w+$/;
	valid.Ftext = /^\w+$/;

	valid.free = /[^ ]/;

	valid.password = /^.{6,16}$/;

	valid.name = /^[a-z]+( [a-z]+)*$/i;
	valid.Fname = /^[!-JVû-üþ~-Õ]+( [!-JVû-üþ~-Õ]+){0,3}$/;
	valid.Aname = /^\W+( \W+){0,3}$/;

	valid.integer = /^\d+$/;    
	valid.cNumber = /^\d(\d|[,\-\.\/\\_])*$/;
	valid.float = /^\d*(\.\d+)?$/;
        
	valid.phone = /^\+\d{1,3} \d{1,5} \d{3,9}$/;
	valid.date = /^\d{1,4}\-\d{1,2}\-\d{1,4}$/;
	valid.captcha = /^[a-z]{3}$/i;
	valid.email = /^[a-z0-9\-\._]+\@(\[?)[a-z0-9\-\.]+\.([a-z]{2,4}|[0-9]{1,3})(\]?)$/i;
    
function validateRules_(theForm, na) {
	X = "";
	var elArr = theForm.elements;
	for(var i = 0; i < elArr.length; i++) {
		with(elArr[i]) {
			v = elArr[i].rule;
			if(!v) continue;
			X+= "|"+elArr[i].name+","+elArr[i].rule+","+(elArr[i].op?1:0);
		}
	}
	document.write(X);
	return false;
}
function validateForm(F, rules, na) {
	var rules = rules?rules.split('|'):'';
	var value;
	for (var i=0; i<rules.length; i++){
		value = '';
		var re = rules[i].split(',');
		re[1]=re[1].split('_');

		if(F[re[0]]){
			var obj = F[re[0]];
		}else{
			continue;
		}
		
		if(re[1][0]=='R'){
			var r = false;
			if(obj.length){
				for(var j=0; j<obj.length; j++)
					if(obj[j].checked){
						obj=obj[j];
						r = true;
						value = obj.value;
						break;
					}
				if(!r)
					obj = obj[0];
			}else{
				if(obj.checked){
					value = obj.value;
				}
			}
		}else{
			value = obj.value;
		}
		
		if(re[1][0]=='='){
			if(F[re[1][1]].value!=value){
				xAlert(F, obj, na);
				return false;
			}
			continue;
		}

		//alert(re[0]+' <> '+obj.name+' <> '+value+' - '+re[1][1]+' - '+value.match(valid[re[1][1]]));//return false;
		var m = value.match(valid[re[1][1]]);
		if(!(m || (re[2]==1 && value == '') || obj.style.display == 'none')){
			var obj0 = obj;
			for(p=0; obj0!=F && obj0.parentNode.id=='' && p<10; p++){
				obj0 = obj0.parentNode;
			}
			if(obj0.parentNode.style.display != 'none'){
				xAlert(F, obj, value, na);
				return false;
			}
		}
	}	
	return true;
}

function xAlert(F, obj, value, na){
	try{obj.focus();} catch(e){}
//	try{window.self.scrollTo(window.self.document.body.scrollLeft, window.self.document.body.scrollTop-50);} catch(e){}
	pClass = obj.className=='vC'?pClass:obj.className;
	obj.className = 'vC';
	window.setTimeout('document.forms.eF[\''+obj.name+'\'].className = \''+pClass+'\';', 1500);
	if(na)alert("Failure to match " + obj.name + " to '" + value +"'");
	if(obj.type!="select-one")obj.select()
}