//create onDomReady Event
window.onDomReady = DomReady;
//Setup the event
function DomReady(fn)
{
	if(document.addEventListener){ //W3C
		document.addEventListener("DOMContentLoaded", fn, false);
	}else{ // IE
		document.onreadystatechange = function(){readyState(fn)}
	}
}
window.onDomReady(onReady); //execute as soon as DOM is loaded
function onReady(){
	set_submit_handler();
}
function readyState(fn)
{
	if(document.readyState == "interactive")
	{
		fn();
	}
}

function set_submit_handler(){
	for(var i=0;i<document.forms.length;i++){
		var temp_form = document.forms[i];
		var text_elements = temp_form.getElementsByTagName("textarea");
		for(var j=0;j<text_elements.length;j++){
			text_element = text_elements[j];
			text_element.maxLength = checkMaxLength(text_element);
			if (text_element.maxLength !=-1 && text_element.maxLength !=0){
				text_element.onkeypress = function(event){
					if(typeof(this.onkeypress.arguments[0]) != 'undefined'){
						var keyCode = this.onkeypress.arguments[0].keyCode;
					}
					if (this.value.length < this.maxLength){
						this.value = this.value.substr(0,this.value.length); 
					}else{
						if (keyCode != 35 && keyCode != 36 && keyCode != 37 && keyCode != 39 && keyCode != 8 && keyCode != 46){
							return false;
						}
					}
				}
			}
		}
		temp_form.onsubmit = testing;
	}
}
function testLength(element,length){
	element = document.getElementById(element);
	if(typeof(element.onkeypress.arguments[0]) != 'undefined'){
		var keyCode = element.onkeypress.arguments[0].keyCode;
	}
	if (element.value.length){
		if (element.value.length < length){
			element.value = element.value.substr(0,element.value.length); 
		}else{
			if (keyCode != 35 && keyCode != 36 && keyCode != 37 && keyCode != 39 && keyCode != 8 && keyCode != 46){
				return false;
			}
		}
	}
}
function checkMaxLength(element){
	var maxLength = -1;
	var properties = new Array(0);
	if (element.previousSibling !=-1){
		propertyElement = element.previousSibling;
	}
	while (propertyElement.nodeType != 8 && propertyElement.previousSibling !=-1){
		propertyElement = propertyElement.previousSibling;
	}
	if (propertyElement.nodeType == 8){
		while (propertyElement.className !='js_validator_error' && propertyElement.nodeType !=1 && propertyElement.previousSibling){
			if (propertyElement.nodeType == 8){
				properties.push(propertyElement.nodeValue);
			}
			propertyElement = propertyElement.previousSibling;
		}
	}
	for (j=0;j<properties.length;j++){
		var property = properties[j];
		var args = property.split('||');
		if (args.length !=0){
			if (args[0] == 'property'){
				var property = args[1];
				var value = args[2];
				if (property == "maxlength"){
					return value;
				}		
			}
		}
	}
	return -1;
}
function testing(e){
return validate_form(this);
}
function validate_form(form,error_id){
	var form_elements = form.elements;
	var get_query = '';
	var err = 0;
	var method = form.method;
	var url = form.action;
	//alert(form.action);
  	for (var i=0;i<form_elements.length;i++){
		var element = form_elements[i];
		var regex = new Array(0);
		//alert(element.name +" -- "+regex.length);
		if (element.type != 'submit' && element.type !='button' && element.style.display !='none' && element.parentNode.style.display !='none'){
			if (element.previousSibling){
				regexElement = element.previousSibling;
			}
			while (regexElement.nodeType != 8 && regexElement.previousSibling){
				if (regexElement.nodeType == 1 && regexElement.className !='js_validator_error'){
					break;
				}else{
					regexElement = regexElement.previousSibling;
				}
			}
			if (regexElement.nodeType == 8){
				//if (regexElement.previousSibling){
			//		regexElement = regexElement.previousSibling;
			//	}
				while (regexElement.className !='js_validator_error' && regexElement.nodeType !=1 && regexElement.previousSibling){
					//alert(element.name+"--"+regexElement.nodeType+"++"+regexElement.nodeValue);
					if (regexElement.nodeType == 8){
						regex.push(regexElement.nodeValue);
					}
					regexElement = regexElement.previousSibling;
				}
			}
			var fail = 0;
			for (j=0;j<regex.length;j++){
				var comment = regex[j];
				var exp = comment.split('||');
				if (exp.length !=0){
					var reg = exp[0];
					var error_text = exp[1];
				}else{
					var reg = comment;
					var error_text = "Please check field and try again";
				}
				// Check reg type (regular expression or 'quick-expression')
				validated = 0;
				var reg = exp[0];
				if (exp.length != 0){
					switch (exp[2]){
						case 'not blank':
						if (element.value == ""){	
							continue;
						}
					}	
				}
				switch (reg){
					case 'required':
						if (!element.value){
							fail = 1;
							error_text = "Cannot be blank";
						}else{
							continue;
						}
					break;
					case 'email':
						reg = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
					break;
					case 'min':
					break;
					case 'max':
					break;
					case 'alpha-lower':
					break;
					case 'alpha-upper':
					break;
					case 'alpha':
						reg = "^[a-zA-Z\s_]+$";
					break;
					case 'numeric':
						reg = "^[0-9]+$";
					break;
					case 'alpha-numeric':
						reg = "^[-a-z0-9_\s_]+$";
					break;
					case 'alpha-numeric_strict':
						reg = "^[a-z0-9\s_]+$";
					break;
					default:
						continue;
					break;
				}
				var regexp = new RegExp(reg, "i");
				if (!regexp.test(element.value)){
					fail = 1;
					if (!error_text){
					error_text = "Please double check field, and try again";
					}
					break;
				}else{
					fail = 0;
					continue;
				}
			}
			if (fail){
				if (element.previousSibling){
					if (element.previousSibling.className == 'js_validator_error'){
						element.previousSibling.innerHTML = "<small><span style='color:#FF7575;'>"+error_text+"</span></small>";
					}else{
						errElement = document.createElement("div");
						errElement.className = "js_validator_error";
						errElement.innerHTML = "<small><span style='color:#FF7575;'>"+error_text+"</span></small>";
						element.parentNode.insertBefore(errElement,element);
					}
				}else{
					errElement = document.createElement("div");
					errElement.className = "js_validator_error";
					errElement.innerHTML = "<small><span style='color:#FF7575;'>"+error_text+"</span></small>";
					element.parentNode.insertBefore(errElement,element);
				}
				err = 1;
				element.style.borderColor ="#a74343";	
			}else{
				if (element.previousSibling){
					if (element.previousSibling.className == 'js_validator_error'){
						element.parentNode.removeChild(element.previousSibling);
					}
				}
				element.style.borderColor = "#5da743";
			}
		}
   	}
	if (err){
		return false;
	}else{
		return true;
	}
}