(function(){

	$.fn.form_validate = function(onvalidate){ 
		$(this).each(function(){ $(this).submit(function(){ if ($(this).form_is_valid(onvalidate)) return true; return false; }); });
	};
	
	$.fn.form_is_valid = function(onvalidate) { var nErr=0;$(this).find('*').filter('input, select, textarea').each(function(){
		if(!is_field_valid(this)){(nErr++);} }); if(nErr>0)return false;return true; 	
		function is_field_valid(el) { var val = el.id; if (!val) return true;
			var arr=val.split('_');var pre='#'+arr[0]+'_'+arr[1]+'_';if(arr.length==3){ 
				if (validate_field(arr[0],arr[1],el,arr[2])){ bErr = false; $(el).removeClass('err'); if (onvalidate) onvalidate($(el), true); return true; }
				else { $(el).addClass('err'); if (onvalidate) onvalidate($(el), false); return false; } 
			}
		return true; }
		function validate_field(fid,tid,e,type){ var value=$(e).val();if ($(e).hasClass('infotip')) value='';var tarr=type.split(':');for(var i=0;i<tarr.length;i++){var t=tarr[i];if(t=='rq'){if(!value||value=='')return false;}
			else if(t=='ck'){if(!e.checked)	return false;}
			else if(t=='un'){if(value){var reg=/^[a-z\d_]{4,28}$/i;if(reg.test(value)==false)return false;}}
			else if(t=='em'){if(value){var reg=/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;if(reg.test(value)==false)return false;}}
			else if(t=='ip'){if(value){var reg=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;if(reg.test(value)==false)return false;}}
			else if(t=='pn'){if(value){var reg=/^[0-9\-]+$/i;if(reg.test(value)==false)return false;}}
			else if(t=='ul'){if(value){var reg=/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; if(reg.test(value)==false)return false;}}
			else if(t=='cc'){if(value){var reg=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;if(reg.test(value)==false)return false;}}
			else if(t=='img'){if(value){var reg=/\b[a-z0-9_-]+\.(jpg|gif|png)\b/i;if(reg.test(value)==false)return false;}}
			else if(t=='csv'){if(value){var reg=/\b[a-z0-9_-]+\.(csv)\b/i;if(reg.test(value)==false)return false;}}
			else if(t=='vid'){if(value){var reg=/\b[a-z0-9_-]+\.(avi|flv|wmv|mov)\b/i;if(reg.test(value)==false)return false;}}
			else if(t=='mp3'){if(value){var reg=/\b[a-z0-9_-]+\.(mp3)\b/i;if(reg.test(value)==false)return false;}}
			else if(t=='dt'){if(value){var reg=/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;if(reg.test(value)==false)return false;}}
			else if(t=='tm'){if(value){var reg=/^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$|^([01]\d|2[0-3])(:[0-5]\d){0,2}$/;if(reg.test(value)==false)return false;}}
			else if(t=='nm'){if(value&&isNaN(value))return false;}
			else if(t=='ps'){if(value&&(isNaN(value)||parseInt(value)<=0))return false;}
			else if(t=='ta'){if(!value||value==''||value=='<BR>')return false;}
			else if(t=='rds'){var cnt = $('.choice::checked').size(); if (cnt == 48)return true;return false;}
			else if(t=='ur'){if(value){var reg=/^[a-z0-9\_\-]+$/i;if(reg.test(value)==false)return false;}}
			else if(t.search('min')!=-1){var min=parseInt(t.replace('min',''));if(value&&value.length<min)return false;}
			else if(t.search('max')!=-1){var max=parseInt(t.replace('max',''));if(value&&value.length>max)return false;}
			else if(t=="pw"){var tid=parseInt(tid);var ce=$("#"+fid+"_"+(tid-1)+"_rq"); if(value!=ce.attr('value'))return false;}
			else if(t=="eqm"){var tid=parseInt(tid);var ce=$("#"+fid+"_"+(tid-1)+"_rq\\:em");if(value!=ce.attr('value'))return false;}}
			return true;
		}
	};
	
	$.fn.limitCharacters=function(maxLen,infoDiv){ $(this).keyup(function(){var txt=$(this).val();if(txt.length>maxLen){$(this).val(txt.substr(0,maxLen));$('#'+infoDiv).html('0');return false;}else{$('#'+infoDiv).html(''+(maxLen-txt.length)); }
		return true;});$(this).keyup();
	};
	
	$.fn.captcha = function(imgSel) { var src = $(imgSel).attr('src'); 
		$(this).click(function(){ var d = new Date(); $(imgSel).attr('src', src + '/?d=' + d.getTime()); });
	};

})(jQuery);
