/****************************************************
* JS VALIDATIONS  (Provided By - HWB MVC FrameWorks)
* @package : Javascript validation
* @author : Rajendra K Bhatta <rajen_k_bhtt@hotmail.com>
* @version : 1.3
*****************************************************/
// over-ride the alert method only if this a newer browser.
// Older browser will see standard alerts
/*if(document.getElementById) {
	window.alert = function(txt) {
		customAlert(txt);
	}
}*/
//var alertStyle = 0; // 0 - simple alert, 1 - Collective Alert, 2 - Div alert
var errorStr = "";
var errorArr = new Array();
var fieldArr = new Array();

var field_main;
// Bordering Effect
/*function markField(field){	
	field.focus();
	field.select();
	field.style.border = "2px solid #FF0000"; 	
}
// dont forget to uncomment the else {} under jsValidate()
function clearMark(field){	
	field.style.border = "";    
}*/

// Flashing Effect
function markField(field){	
	try{
		field.focus();
		field.select();		
		field.style.background = "orange";
		//field.style.border = "2px solid #FF0000"; 	
		field_main = field;
		setInterval("clearMark()",500);
	}catch(e){}
}
function clearMark(){		
	field_main.style.background = ""; 
	//field_main.style.border = "";    
}

function validate(field, form, alertStyle){
	try{		
		var lang = field.getAttribute("lang");
		var title = field.getAttribute("title");		
		if(lang == "required"){	
			//var req = field.getAttribute("req");
			var req = 1;
			//alert('asd'+lang);
			var pattern = "\\w{"+req+",}";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}
		}
		
		else if(lang == "email"){
			//var pattern = "^\\w{1,}@\\w{1,}(\\.\\w{1,}){1,}$";
			var pattern = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/;			
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}	
		}
		
		else if(lang == "url"){
			var pattern = "^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}$";			
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}	
		}
		
		else if(lang == "number"){			
			if((field.value.length < 1) || isNaN(field.value)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}	
				
		else if(lang == "alphabet"){
			//alert(lang);
			//var pattern = /^[a-zA-Z0-9]+$/; note the space after 9
			//Alternative 
			var pattern = "^[a-zA-Z]+$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}
		}
		
		else if(lang == "alphabetWS"){
			//alert(lang);
			//var pattern = /^[a-zA-Z0-9]+$/; note the space after 9
			//Alternative 
			//var pattern = "^[a-zA-Z(\s)?]+$";
			var pattern = "^[a-zA-Z][a-zA-Z ]*$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}
		}
		
		else if(lang == "alphaNumeric"){
			var pattern = "^[a-zA-Z0-9]+$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}									 
		}
		
		else if(lang == "alphaNumericWS"){
			//var pattern = "^[a-zA-Z0-9\s?]+$";
			var pattern = "^[a-zA-Z0-9][a-zA-Z0-9 ]*$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}									 
		}
		
		else if(lang == "alphaNumericHypen"){
			var pattern = "^[a-zA-Z0-9\-]+$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}
		
		else if(lang == "alphaNumericHypenWS"){
			//var pattern = "^[a-zA-Z0-9\-\s]+$";
			var pattern = "^[a-zA-Z0-9\-][a-zA-Z0-9\- ]*$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}
		
		else if(lang == "username"){
			var pattern = "^[a-zA-Z0-9_]+$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}
		
		else if(lang == "zipCode"){
			var pattern = "^[0-9]{5}$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}	
		}
		
		
		else if(lang == "select"){	
			if(field.value == '0' || field.value == ''){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);					
				}
			}		
		}	
		
		else if(lang == "checkbox"){	
			if(!field.checked){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}	
		
		else if(lang == "radio"){	
			if(!field.checked){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}		
		}	
		
		else if(lang == "radioSet"){
			var checked 	= false; 
			var jsRadioName = field.getAttribute("jsRadio");
			var buttons = form.elements[jsRadioName]; 
			for (var i=0; i<buttons.length; i++){  
				if (buttons[i].checked) {  
					checked = true; 
					break;  
				}  
			} 
			if(!checked){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}	
		}
		
		else if(lang == "date"){
			// YYYY-mm-dd format
			var pattern = "[0-9]{4}\\-[0-9]{1,2}\\-[0-9]{1,2}$";
			if(!field.value.match(pattern)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}
		}
		
		else if(lang == "picture"){
			var values = field.value.toLowerCase();
			//alert(values);
			if(values == ""){
				if(alertStyle == 0){
					alert(values+" is not a valid Image file");
					markField(field);
					return false;
				}else{
					errorStr += "- "+values+" is not a valid Image file !!\r\n";
					errorArr.push(values+" is not a valid Image file !!");
					fieldArr.push(field);
				}				
			}
		
		}
		
		else if(lang == "integer"){
			var bool = field.value.match("^[0-9]{1,9}$");	
			if(bool == 0){				
				if(alertStyle == 0){
					alert("Please enter a non-zero number !!");
					markField(field);
					return false;
				}else{
					errorStr += "- "+"Please enter a non-zero number !!\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}
			if((!bool) || isNaN(field.value) || (field.value.indexOf(".") != -1)){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}	
			}
		}		
		else if(lang == "callback"){			
			var jsFunction = field.getArribute("jsFunction");			
			var returnValue = eval(jsFunction);
			if(!returnValue){
				if(alertStyle == 0){
					alert(title);
					markField(field);
					return false;
				}else{
					errorStr += "- "+title+"\r\n";
					errorArr.push(title);
					fieldArr.push(field);
				}
			}	
		}
		
		/** Validation for Optional Classes **/
		else if(lang == "optional"){

			//alert(lang);
			if(field.value.length > 0){
				var jsChild = field.getAttribute("jsChild");
				//alert(jsChild);
				field.setAttribute("lang",jsChild);
				var lang = field.getAttribute("lang");
				//alert(lang);				
				if(!validate(field)){
					return false;
				}
			}			
		}		
		// If everything is OK		
		return true;
    }catch(ex){
		alert(ex.message);
		return true;
	}
}

function jsValidate(form,alertStyle){
	alertStyle = 0;
	for(var counter = 0; counter < form.length; counter++){
		//alert(form.length);
		var bool = validate(form[counter], form, alertStyle);
		if(!bool){
			return false;
			break;
		}/*else{
			clearMark(form[counter]);			
		}*/
	}
	// Furthur Processings with the collected Errors and Fields (According to the Alert Style)	
	if(errorStr != ""){
		// For AlertStyle = 1
		if(alertStyle == 1){			
			for(var i = 0; i < fieldArr.length; i++){
				markField(fieldArr[i]);	
			}
			alert(errorStr);
			// Reseting the errorStr and the errorArr
			errorStr = "";
			fieldArr = [];
		}
		// For alertStyle = 2
		if(alertStyle == 2){
			// Show the alert in the corresponding Div
			var field = document.getElementById("errorSection");
			//markField(field);
			//field.innerHTML = errorStr;
			var errorContents = "";
			for(var i = 0; i < errorArr.length; i++){				
				errorContents += errorArr[i]+"<br />";
			}
			field.innerHTML = errorContents;
			for(var j = 0; j < fieldArr.length; j++){
				markField(fieldArr[j]);	
			}
			// Finally Reseting all the strings and arrays
			errorContents = "";
			errorArr	  = [];
		}
		return false;
	}	
	return true;	
}