/************************************************************************/

/*	Title: 		Generic HTML Form Validator								*/ 

/*	Developer: 	Battamir Adilbish, Mytech LLC							*/

/*	Base: 		fzvaliator												*/

/*	Date:		2007-1-30												*/

/*  																	*/

/*	Text																*/

/*		- email															*/

/*		- url															*/

/*		- Mongolian citizen registration number							*/

/*		- number														*/

/*	Checkbox															*/

/*	Radio																*/

/*	Textarea															*/

/************************************************************************/
function chvalidate(){
	if(validate(document.getElementById('form1'))){
		document.getElementById('form1').submit();
	}
}
function validate(targetForm) {

    var REGNUM = "^[АБВГДЕЁЖЗИЙКЛМНОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ][АБВГДЕЁЖЗИЙКЛМНОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"
 
	var NAME = "^[АБВГДЕЁЖЗИЙКЛМНОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ][абвгдеёжзийклмноөпрстуүфхцчшщъыьэюя]+([-][АЕЁИЙОӨУҮЭЮЯ]|[абвгдеёжзийклмноөпрстуүфхцчшщъыьэюя])[абвгдеёжзийклмноөпрстуүфхцчшщъыьэюя]+$"
	
	var NAMESHORT = "^[АБВГДЕЁЖЗИЙКЛМНОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ][абвгдеёжзийклмноөпрстуүфхцчшщъыьэюя]+$"

    var EMAIL = "^[a-zA-Z0-9_-]+(\.([a-zA-Z0-9_-])+)*@[a-zA-Z0-9_-]+[.][a-zA-Z0-9_-]+([.][a-zA-Z0-9_-]+)*$"

    var URL = "http://"

    var NUMBER = "^[0-9]*$"

    var PHONO = "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"

    for (var i = 0; i < targetForm.elements.length; i++) {

	if(targetForm.elements[i].getAttribute("strValue") != null) {

	    var message = targetForm.elements[i].getAttribute("message");

	    var strBound = targetForm.elements[i].getAttribute("strBound");	

	    var strVal = targetForm.elements[i].getAttribute("strValue");

   

	    if(eval('document.' + strBound + '.type') == 'select-one') {

		var sIndex = eval('document.' + strBound + '.selectedIndex');

		var strBoundVal = eval('document.' + strBound + '[' + sIndex + '].value'); 

	    }

	    if(strVal == strBoundVal){

		if(targetForm.elements[i].value == '') {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;

		}						

	    }

				

	}

	

	if(targetForm.elements[i].getAttribute("isReq")) {



	    var message = targetForm.elements[i].getAttribute("message");

	    

	    if(targetForm.elements[i].type == 'checkbox') {

		if(!targetForm.elements[i].checked) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;

		}

	    }

	    else if(targetForm.elements[i].type == 'text' || targetForm.elements[i].type == 'password' || targetForm.elements[i].type == 'file') {

		if(targetForm.elements[i].value == '') {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;								

		}

		if(targetForm.elements[i].getAttribute("regex") != null) {

		    var UserRegEx = targetForm.elements[i].getAttribute("regex");

		    var InputValue = targetForm.elements[i].value;

		    if(UserRegEx == 'EMAIL') {

			var re = new RegExp(EMAIL);

			if(!InputValue.match(re)) {

			    alert(message);

			    targetForm.elements[i].focus();	

			    return false;	

			}

		    }

		    else if(UserRegEx == 'URL') {

			var re = new RegExp(URL);

			if(!InputValue.match(re)) {

			    alert(message);

			    targetForm.elements[i].focus();	

			    return false;	

			}

		    }

		    else if(UserRegEx == 'NUMBER') {

			var re = new RegExp(NUMBER);

			if(!InputValue.match(re)) {

			    alert(message);

			    targetForm.elements[i].focus();	

			    return false;	

			}

		    }

		    else {

			var re = new RegExp(UserRegEx);

			if(!InputValue.match(re)) {

			    alert(message);

			    targetForm.elements[i].focus();	

			    return false;	

			}

		    }

		}

	    }

	    else if(targetForm.elements[i].type == 'select-one') {

		if(targetForm.elements[i].value == '') {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;								

		}

	    }

	    else if(targetForm.elements[i].type == 'textarea') {

		if(targetForm.elements[i].value == '') {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;								

		}

	    }

	    else if(targetForm.elements[i].type == 'radio') {

		var isSelected = false;

		var j = 0;

		while(targetForm.elements[i+j].type == 'radio' && 

		      targetForm.elements[i].name == targetForm.elements[i+j].name) {

		    if(targetForm.elements[i+j].checked) {

			isSelected = true;

		    }

		    j++;

					

		}

		

		j = 0;

		

		while(targetForm.elements[i-j].type == 'radio' && 

		      targetForm.elements[i].name == targetForm.elements[i-j].name) {

		    if(targetForm.elements[i-j].checked) {

			isSelected = true;

		    }

		

		    if(i-j <= 0) {

			break;

		    }

		

		    j++;					

		}				

		

		if(!isSelected) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;				

		}

	    }

	    else {

		return true;

	    }

	}





	if (targetForm.elements[i].getAttribute("depRequired") != null) {

	    var o = document.getElementById(targetForm.elements[i].getAttribute('depRequired'));



	    if (o.value != null) {

		if (o.value.length > 0 && targetForm.elements[i].value.length <= 0 ) {

		    alert(targetForm.elements[i].getAttribute("depMessage"));

		    targetForm.elements[i].focus();	

		    return false;

		}

	    }

	}



	if (targetForm.elements[i].getAttribute("regex") != null) {

	    var message = targetForm.elements[i].getAttribute("message");

	    var UserRegEx = targetForm.elements[i].getAttribute("regex");

	    var InputValue = targetForm.elements[i].value;

	    

	    if(UserRegEx == 'EMAIL') {

		var re = new RegExp(EMAIL);

		if(!InputValue.match(re)) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }

	    else if(UserRegEx == 'REGNUM') {

		var re = new RegExp(REGNUM);

		if(!InputValue.match(re)) {

			alert(re);

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }else if(UserRegEx == 'PHONO') {

		var re = new RegExp(PHONO);

		if(!InputValue.match(re)) {

			alert(re);

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }

	    else if(UserRegEx == 'NAME') {
			
		var NAMEREGEX=(InputValue.length < 4)?NAMESHORT:NAME;

		var re = new RegExp(NAMEREGEX);

		if(!InputValue.match(re)) {

			alert(re);

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }


	    else if(UserRegEx == 'URL') {

		var re = new RegExp(URL);

		if(!InputValue.match(re)) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }
		
		

	    else if(UserRegEx == 'NUMBER') {

		var re = new RegExp(NUMBER);

		if(!InputValue.match(re)) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }

	    else {

		var re = new RegExp(UserRegEx);

		if(!InputValue.match(re)) {

		    alert(message);

		    targetForm.elements[i].focus();	

		    return false;	

		}

	    }

	}





	/*

	    Existential RegEx use. This means that check if the 

	    field value length is bigger than zero and only if that is satisfied

	    check for the RegEx

	*/

	if (targetForm.elements[i].getAttribute("eregex") != null) {

	    var message = targetForm.elements[i].getAttribute("message");

	    var UserRegEx = targetForm.elements[i].getAttribute("eregex");

	    var InputValue = targetForm.elements[i].value;

	    

	    if (targetForm.elements[i].value.length > 0) {

		if(UserRegEx == 'EMAIL') {

		    var re = new RegExp(EMAIL);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

		else if(UserRegEx == 'REGNUM') {

		    var re = new RegExp(REGNUM);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}else if(UserRegEx == 'PHONO') {

		    var re = new RegExp(PHONO);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}
		
		else if(UserRegEx == 'NAME') {

			var NAMEREGEX=(InputValue.length < 4)?NAMESHORT:NAME;

			var re = new RegExp(NAMEREGEX);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

		else if(UserRegEx == 'NAME') {

			var NAMEREGEX=(InputValue.length < 4)?NAMESHORT:NAME;

			var re = new RegExp(NAMEREGEX);
	
		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

		else if(UserRegEx == 'URL') {

		    var re = new RegExp(URL);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

		else if(UserRegEx == 'NUMBER') {

		    var re = new RegExp(NUMBER);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

		else {

		    var re = new RegExp(UserRegEx);

		    if(!InputValue.match(re)) {

			alert(message);

			targetForm.elements[i].focus();	

			return false;	

		    }

		}

	    }

	} // end Existential RegEx





    }

    return true;		

}

