var browser=$.browser.msie;
$(document).ready(function() {
	var selectbox_pos=new Array();
	var last_selobj="";
	$("select").each(function(i){
		obj=$(this);
		selectbox_pos["top"+i]=obj.position().top;
		selectbox_pos["left"+i]=obj.position().left;
		selectbox_pos["obj"+i]=this;
	});
	var html_disp_top='<table border="0" cellpadding="0" cellspacing="0" style="position:absolute;"><tr><td><img src="images/top_left.gif" border="0" alt="" vspace="" hspace=""></td><td bgcolor="#000000" width="100%" height="11"><img src="images/trans.gif" border="0" alt=""></td><td><img src="images/top_right.gif" border="0" alt="" vspace="" hspace=""></td></tr><tr><td bgcolor="#000000" height="40" colspan="3" style="color:#FFFFFF;font-family:Arial;font-size:12px;height:15px;padding:0px 10px" align="center" nowrap>';
	var html_disp_bottom='</td></tr><tr><td><img src="images/bottom_left.gif" border="0" alt="" vspace="" hspace=""></td><td bgcolor="#000000" height="11"><img src="images/trans.gif" border="0" alt=""></td><td><img src="images/bottom_right.gif" border="0" alt="" vspace="" hspace=""></td></tr><tr><td>&nbsp;</td><td colspan="2" style="padding-left:20px" valign="top"><img src="images/down_arrow.gif" border="0" alt=""></td></tr></table>';
	//##### 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=html_disp_top+txtobj+html_disp_bottom;
				parentobj.appendChild(elem);
				document.getElementById("errorSpan").style.left=$(obj).position().left;
				document.getElementById("errorSpan").style.top=$(obj).position().top-50;
				if($("#"+elem.id).css("padding-left")=="") {
					elem.style.paddingLeft="3px";
				}
				$("#errorSpan:hidden").fadeIn('slow');
				val=$("#errorSpan").position().top+$("#errorSpan").height()+10;
				val1=$("#errorSpan").position().left+$("#errorSpan").width();
				for(key in selectbox_pos) {
					if(key.indexOf("top")!=-1){
						if(val>selectbox_pos[key] && val1>selectbox_pos["left"+key.replace("top","")]) {
							if((val-selectbox_pos[key])<10) {
							last_selobj=selectbox_pos["obj"+key.replace("top","")];
							selectbox_pos["obj"+key.replace("top","")].style.visibility="hidden";
							break;
							}
						}
					}
				}
			}
			if(this.getAttribute('menu_dis')!="no")
				displayError(this);
		}
	});
	
	//####### close display errors ########
	$(":input[errmsg!='']").blur(function() {
		if(last_selobj)
			last_selobj.style.visibility="";
		$("#errorSpan").fadeOut('slow');
	});

	//######## form submission validate ########
	$("form").submit(function() {
		var formname=this.name;
		return frmValidate_j(formname);
	});
});

function frmValidate_j(formname) {
	var msg=oldtext=firstobj="";
	$(":input[errmsg!='']:visible").each(function() {
		var text=this.getAttribute('errmsg');
		if(this.form.name==formname && (text!=oldtext || oldtext=="")) {
			//if(this.value=='' || (this.checked!=true && this.type=="checkbox")) {
			if(this.value=='') {
				if(msg=="") firstobj=this;
				msg+=text+".\n";
				oldtext=text;
			} 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";
			} else if(this.getAttribute('ext_validate')!="" && (this.getAttribute('ext_validate')!=null)) {
				if(msg=="") firstobj=this;
				switch(this.getAttribute('ext_validate')) {
					/*case 'isnumber':
						if(this.value.indexOf("0")!="0" && this.value.indexOf("0")==-1)
							var ret_chk=""+parseInt(this.value);
						else
							var ret_chk=this.value;
						if(isNaN(ret_chk) || this.value.length!=ret_chk.length)
							msg+="Valid "+text+".\n";
					break;*/
					case 'ischar':
						var ret_chk=parseInt(this.value);
						if(!isNaN(ret_chk))
							msg+="Valid "+text+".\n";
					break;
					case 'isemail':
						if(!isEmail(this.value))
							msg+="Valid "+text+".\n";
					break;
					case 'isusername':
						if(this.value.indexOf(' ')!='-1')
							msg+="Valid "+text+".\n";
					break;
				}
			}
			/*if(this.type=="checkbox")*/
			//oldtext=text;
		}
	});
	if(msg!="") {
		firstobj.focus();
		//msg=msg.replace("Phone Number.\n","","2");
		alert("Please enter the following fields\n****************************\n"+msg)
		return false;
	}
	return true;
}

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

//######### 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;
	}
}