/**
 * exValidation
 *
 * @version      1.2
 * @author       nori (norimania@gmail.com)
 * @copyright    5509 (http://5509.me/)
 * @license      The MIT License
 * @link         http://5509.me/log/exvalidation
 *
 * 2010-01-17 23:50
 */
var validationRules={};(function(g){var a=function(h,m){if(h.length>1){alert("You cannot select any forms ");}this.form=h;var l=this,m=this.conf=g.extend({errInsertPos:"body",err:null,ok:null,errFocus:false,errHoverHide:false,stepValidation:false,scrollToErr:true,scrollDuration:500,scrollAdjust:-10,customScrollAdjust:false,errPosition:"absolute",errTipPos:"right",errTipCloseBtn:true,errTipCloseLabel:"×",errZIndex:500,errMsgPrefix:"* ",customAddError:null,customClearError:null,customSubmit:null,customListener:"blur keyup change focus",customBind:null,customGetErrHeight:null,firstValidate:false,inputs:'input:text,input:password,input:hidden,textarea,select,[class*="group"],[class*="radio"],[class*="checkbox"]',groupInputs:"input:text,input:password,input:checkbox,input:radio,select,textarea"},m||{});this.errFocus=function(r){if(!m.errFocus){return false;}c(r,m.errZIndex);};this.errFocusClear=function(){if(!m.errFocus){return false;}d(m.errZIndex);};if(f(m.customSubmit)){h.submit(function(){return false;});}g("input:checkbox,input:radio,input:button,input:submit,input:reset").click(function(){l.errFocusClear();});for(var n in m.rules){g("#"+n).addClass(m.rules[n]);}var i=g(h).attr("id")?"form_"+g(h).attr("id"):"form_"+e()*e();var k=g(m.inputs,h).filter(function(){return !g(this).parents().hasClass("group");}),o=b(),q="",p=function(t,s){var r=s?s:t;t.bind(m.customListener,function(){l.basicValidate(s?s:this,m.err,m.ok);l.errFocus("#err_"+r.attr("id"));}).blur(function(){l.errFocusClear();});};k.each(function(){var s=g(this),r=this.className,t=s.offset(),u=this.id;if(m.errTipPos=="right"){s.addClass("errPosRight");}if(r.match(o)){if(m.errInsertPos=="body"){g("body").append(l.generateErr(u,i));}else{s[m.errInsertPos](l.generateErr(u,i));s.addClass(m.errInsertPos);}if(m.errHoverHide){g("#err_"+u).mouseenter(function(){g(this).fadeOut();});}if(m.errTipCloseBtn){g("#err_"+u).append(g("<span/>").addClass("formErrorClose").text(m.errTipCloseLabel).click(function(){g(this).parent().fadeOut();}));}if(m.errPosition=="absolute"){if(f(m.customGetErrHeight)){l.customGetErrHeight(u);}else{l.getErrHeight(u,m.errZIndex);}g(window).resize(function(){if(f(m.customGetErrHeight)){l.customGetErrHeight(u);}else{l.getErrHeight(u,m.errZIndex);}});}g("#err_"+u).hide();}});if(m.firstValidate){k.each(function(){if(g(this).hasClass("group")){var r=g(this);p(g(m.groupInputs,r),r);}else{var r=g(this);p(r);}});}this.laterCall=function(r){l.basicValidate(r,m.err,m.ok);};function j(t){if(m.firstValidation){k.unbind("blur keyup change click");m.firstValidate=false;}k.each(function(){var x=g(this);l.basicValidate(this,m.err,m.ok,true);if(x.hasClass("group")){p(g(m.groupInputs,x),x);}else{p(x);}});var v=g('.formError:visible[class*="'+i+'"]');if(v.length>0){if(f(m.customAddError)){m.customAddError();}if(m.scrollToErr){var w,s=g.support.boxModel?navigator.appName.match(/Opera/)?"html":"html,body":"body";if(!m.customScrollAdjust){w=g(v[0]).offset().top,errTop=g(v[0]);for(var u=0;u<v.length;u++){w=g(v[u]).offset().top<w?g(v[u]).offset().top:w;errTop=g(v[u]).offset().top<w?g(v[u]):errTop;}if(m.errPosition=="fixed"){w-=g("#"+errTop.attr("id").replace("err_","")).attr("offsetHeight");}}else{w=f(m.customScrollAdjust)?parseFloat(m.customScrollAdjust()):parseFloat(m.customScrollAdjust);}g(s).animate({scrollTop:w+m.scrollAdjust},{easing:g.easing.easeInOutCirc?"easeInOutCirc":"swing",duration:m.scrollDuration});return false;}else{return false;}}else{if(f(m.customClearError)){var r=m.customClearError();if(r===false){return false;}}if(f(t)){t();return false;}else{if(f(m.customSubmit)){m.customSubmit();return false;}else{}}}}h.submit(j);if(m.customBind){m.customBind.object.bind(m.customBind.listener,function(){j(m.customBind.callback);return false;});}return this;};a.prototype={generateErr:function(i,h){return['<div id="err_'+i+'" class="formError userformError '+h+" "+this.conf.errPosition+'">','<div class="formErrorMsg formErrorContent"/>','<div class="formErrorArrow">','<div class="line10"/>','<div class="line9"/>','<div class="line8"/>','<div class="line7"/>','<div class="line6"/>','<div class="line5"/>','<div class="line4"/>','<div class="line3"/>','<div class="line2"/>','<div class="line1"/>',"</div>","</div>"].join("");},insertErrMsg:function(h,m,l,i){var j=g(".errMsg","#err_"+m),k=true;if(j.length>0){g.each(j,function(){if(g(this).hasClass(l)){k=false;}});}if(!k){return false;}g(".formErrorMsg","#err_"+m).append(g("<span/>").addClass("errMsg").addClass(l).text(i));this.getErrHeight(m);},getErrHeight:function(n,m){if(this.conf.errPosition!="absolute"){return false;}var h=g("#"+n),i=g("#err_"+n),k=h.is(":hidden")?h.next():h,l=k.offset();if(!!l){var j=k.hasClass("errPosRight")?l.left+k.attr("offsetWidth")-40:l.left-20;i.css({position:"absolute",top:l.top-i.attr("offsetHeight"),left:j});}if(m){i.css("zIndex",m);}},basicValidate:function(r,j,q){var l=g(r).attr("class"),p=validationRules,i=g(r).attr("id"),m="",n=this;if(g(r).hasClass("group")){var k=g(n.conf.groupInputs,r);k.each(function(s){m+=g(this).val();if(l.match(/email/)&&s==0&&g(this).val().length>0){m+="@";}});}else{m=g(r).val();}var h={isError:false,failed:function(s,v){var u=p[v][0];if(v.match(/min/i)&&l.match(/min(\d+)/i)){u=RegExp.$1+u;}else{if(v.match(/max/i)&&l.match(/max(\d+)/i)){u=RegExp.$1+u;}}if(f(j)){j(s,i,n.conf.errMsgPrefix+u);}else{g(s).addClass("err");g("."+v,"#err_"+i).show();g("#err_"+i).fadeIn();n.insertErrMsg(s,i,v,n.conf.errMsgPrefix+u);n.getErrHeight(i);}this.isError=true;}};var o;for(o in p){if(g(r).hasClass(o)||(o=="min"&&l.match(/(?:\s+|^)min\d+(?:\s+|$)/))||(o=="max"&&l.match(/(?:\s+|^)max\d+(?:\s+|$)/))||(l.match(o)&&l.match(/retype/))){if(typeof(p[o][1])!="function"){if(!m.match(p[o][1])){h.failed(r,o);}else{if(n.conf.stepValidation){if(g(".errMsg:visible","#err_"+i).length>1){g("."+o,"#err_"+i).hide();n.getErrHeight(i);}}}}else{if(!p[o][1](m,r)){h.failed(r,o);}else{if(n.conf.stepValidation){if(g(".errMsg:visible","#err_"+i).length>1){g("."+o,"#err_"+i).hide();n.getErrHeight(i);}}}}}}if(!h.isError){if(f(q)){q(r,i);}else{g(r).removeClass("err");g("#err_"+i).fadeOut();}}}};function b(){var h="";for(var i in validationRules){h+="(?:\\s+|^)"+i+"(?:\\s+|$)|";}h+="(?:\\s+|^)min\\d+(?:\\s+|$)|";h+="(?:\\s+|^)max\\d+(?:\\s+|$)|";h=h.replace(/\|$/,"");return new RegExp(h);}function d(h){g(".formError").removeClass("fadeOut").css("zIndex",h);}function c(i,h){g(".formError").removeClass("fadeOut").css("zIndex",h);g(".formError").not(i).addClass("fadeOut");g(i).css({zIndex:h+100});}function f(h){return h&&typeof h=="function";}function e(){return Math.floor(Math.random()*10)+1;}g.fn.exValidation=function(h){return new a(this,h);};if(!g.fn.validation){g.fn.validation=g.fn.exValidation;}})(jQuery);
