var browser=$.browser.msie;
$(document).ready(function() {
	//##### extra validation assign ########
	$("input[ext_validate!='']").each(function() { 
		var cond;
		if(this.getAttribute('ext_validate')=='isnumber') {
			cond='charCode > 31 && (charCode < 48 || charCode > 57)';
			this.onkeypress=(browser)? function(){ return isValid(event,cond,true,false); } : function(event){ return isValid(event,cond,true,false); };
		} else if(this.getAttribute('ext_validate')=='ischar') {
			cond='(charCode >=65 && charCode<=90) || (charCode >=97 && charCode<=122) || charCode==8 || (charCode>=37 && charCode<=40) || charCode==46';
			this.onkeypress=(browser)?function(){ return isValid(event,cond,false,true);}:function(event){ return isValid(event,cond,false,true);};
		} else if(this.getAttribute('ext_validate')=='isphone') {
			cond='charCode > 31 && (charCode < 48 || charCode > 57) && (charCode<40 || charCode>47)';
			this.onkeypress=(browser)?function(){ return isValid(event,cond,true,false);}:function(event){ return isValid(event,cond,true,false);};
		} else if(this.getAttribute('ext_validate')=='isusername') {
			this.onkeydown=(browser)?function(){ return chkUsername(event);}:function(event){ return chkUsername(event);};
		}
	});

	//######## required field ########

	//######### display errors #######
	$(":input[errmsg!='']").focus(function() {
		$("#errorSpan").remove();
		var chk_value,add_text=   "Please ",parentobj,text,elem,txtobj;
		if(this.type=='text' || this.type=='textarea' || this.type=='file' || this.type=='password')add_text+="Enter ";else add_text+="Select ";
		text=this.getAttribute('errmsg');
		chk_value=$.trim(this.value);
		if(text.search('mail')!='-1' && chk_value!="" && !isEmail(chk_value)) {
			add_text+="Valid ";
			chk_value="";

		} else if(text.search('Confirm Pass')!='-1' && chk_value!="" && (chk_value!=$.trim(document.getElementById("txt_password").value))) {
			add_text+="Password and Confirm password should be a same";
 			text="";
			chk_value="";
		}
		if(chk_value=="") {
			//########### display error ###########
			function displayError(obj) {
				parentobj=(obj.parentElement)?obj.parentElement:obj.parentNode;
				elem = document.createElement("div");
				elem.setAttribute("className","viewcss");
				elem.setAttribute("class","viewcss");
				
				elem.setAttribute("id","errorSpan");
				//txtobj = document.createTextNode(add_text+text);
				txtobj = add_text+text;
				elem.innerHTML=txtobj;
				parentobj.appendChild(elem);
				if($("#"+elem.id).css("padding-left")=="") {
					elem.style.paddingLeft="3px";
				}
				eleOffset = $(obj).offset();
				$("#errorSpan").css({left:eleOffset.left+$(obj).width()+17,top:eleOffset.top});
				$("#errorSpan:hidden").fadeIn('slow');
			}
			displayError(this);
		}
	});
	
	//####### close display errors ########
	$(":input[errmsg!='']").blur(function() {
		$("#errorSpan").fadeOut('slow');
	});

	//######## form submission validate ########
	$("form").submit(function() {
		var formname=this.name;
		var msg="";
		var firstobj;
		$(":input[errmsg!='']:visible").each(function() {
			if(formname==this.form.name) {
				var text=this.getAttribute('errmsg');
				if(this.value=='') {
					if(msg=="") firstobj=this;
					msg+=text+".\n";
				} else if(text.search('mail')!='-1' && !isEmail(this.value)) {
					if(msg=="") firstobj=this;
					msg+="Valid "+text+".\n";
				} else if(text.search('Confirm Pass')!='-1' && (this.value!=$.trim(document.getElementById("txt_password").value))) {
					if(msg=="") firstobj=this;
					msg+="Password and Confirm password should be a same.\n";
				}
			}
		});
		if(msg!="") {
			firstobj.focus();
			alert("Please enter the following fields\n****************************\n"+msg)
			return false;
		}
		return true;
	});

});

//######### all checking #######
function isValid(evt,con,flag,flag1) {
	var charCode = (evt.which) ? evt.which : evt.keyCode;
	if(charCode!=0) {
		if (eval(con))
			return flag1;
		return flag;			
	 }
}

//######### checking is valid username ########
function chkUsername(eve) {
	var keycode=(eve.which) ? eve.which: eve.keyCode;
	if(eve.shiftKey==false) {
		if((keycode<=90 && keycode>=65) || (keycode<=57 && keycode>=48) || (keycode<=105 && keycode>=96) || keycode==46 || keycode==8 || (keycode<=40 && keycode>=37) || keycode==9) {
			return true;
		} else {
			return false;
		}
	} else {
		if(eve.shiftKey && (keycode==189 || keycode==109 || keycode==9 || (keycode<=40 && keycode>=37))) {
			return true;
		} else {
			return false;
		}
	}
}

//######### checking is valid email ########
function isEmail(str_email) {
	validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	if(str_email.search(validRegExp) == -1) {
		return false;
	} else { 
		return true;
	}
}
