
(function($){(function($){var hideWhenCheck=function(element){element=this.clean(element);var rules=$(element).rules();var dependencyMismatch=false;var hideWhenRegex=/hideWhen\_/gi;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value,element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}
dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}
if(!result&&hideWhenRegex.test(method)){return false;}
if(!result){var e=$(element);while(e.get(0).nodeName.toUpperCase()!="FORM"){if($(e).css('display')=='none'||$(e).css('visibility')=='hidden'){return false;}
e=e.parent();}}
if(!result){this.formatAndAdd(element,rule);return false;}}catch(er){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id+", check the '"+
rule.method+"' method");throw er;}}
if(dependencyMismatch)
return;if(this.objectLength(rules))
this.successList.push(element);return true;}
$.validator.prototype.check=function(e){return hideWhenCheck.call(this,e);}
function fixFuntion(func){var fixedFunction=function(value,element,param){if(/radio|checkbox/i.test(element.type)){value=$("*[name="+$(element).attr("name")+"]:checked").val();}
return func.call(this,value,element,param);}
return fixedFunction;}
for(method in $.validator.methods){if(!/^hideWhen_/i.test(method)){var _hidevalid=fixFuntion($.validator.methods[method]);$.validator.addMethod("hideWhen_"+method,_hidevalid,"");}}})($);$.fn.hideWhen=function(options){var customHideValidation={checked:{action:function(value,element,param){var name=$(element).attr('name');value=$("*[name="+name+"]:checked").val();return(param==value);}},equal:{action:function(value,element,param){if(/radio|checkbox/i.test(element.type)){value=$("*[name="+$(element).attr("name")+"]:checked").val();}
return(param==value);}},match:{action:function(value,element,param){if(/select/i.test(element.type)){value=$(element).val();}else if(/radio|checkbox/i.test(element.type)){value=[$("*[name="+$(element).attr("name")+"]:checked").val()];}else{value=[value];}
for(reqVal in param){for(var i=0,l=value.length;i<l;i++){if(param[reqVal]==value[i]){return true;}}}
return false;}},radiocheck:{action:function(value,element,param){param=$.data(element,"radiocheck");if(/radio|checkbox/i.test(element.type)){value=$("*[name="+$(element).attr("name")+"]:checked").val();}
return(param==value);}}}
for(method in customHideValidation){if(!$.validator.methods[method]){$.validator.addMethod("hideWhen_"+method,customHideValidation[method].action,customHideValidation[method].message||"");}else{}}
return this.each(function(){var $this=$(this);if(!$this.validate){return null;}
var validator=$this.validate();for(var name in options){if(/^[#.]/.test(name)){$el=$(name,validator.currentForm);}else{$el=$("*[name="+name+"]",validator.currentForm);}
var rules=options[name].rules;for(var check in rules){if(!/^hideWhen_/i.test(check)){rules["hideWhen_"+check]=rules[check];if(check=="radiocheck"){$.data($el.get(0),"radiocheck",rules[check]);}
delete rules[check];}}
$el.rules("add",rules);var action=options[name].action;if(action){action=[((!action.hide)?[]:action.hide).join(","),((!action.show)?[]:action.show).join(",")];var eventType=(/radio/i.test($el.get(0).type))?'click':'change';$el.bind(eventType,[validator,action],function(event){var result=event.data[0].element(this);var action=event.data[1];toggle(result,action);});toggle(validator.element($el.get(0)),action);}
var selected=$("input[name="+$el.attr('name')+"]");if(selected.filter(":checked").length>0){selected.filter(":checked").click();}else if(selected.length>0){selected.filter(":first").click();}}});}
function toggle(state,action){(state)?(function(_){(!!_[0])?$(_[0]).hide():"";(!!_[1])?$(_[1]).show():"";})(action):(function(_){(!!_[1])?$(_[1]).hide():"";(!!_[0])?$(_[0]).show():"";})(action)}})(jQuery);