/** * jQuery Interdependencies library * * http://miohtama.github.com/jquery-interdependencies/ * https://github.com/miohtama/jquery-interdependencies * * Copyright 2012-2013 Mikko Ohtamaa, others */ !function(t){"use strict";function n(t){window.console&&window.console.log&&console.log(t)}function e(n,e){return"#"==e[0]&&e.indexOf(" ")<0?t(e):n.find(e)}function o(t,n,e){this.init(t,n,e)}function i(){this.rules=[]}t.extend(o.prototype,{init:function(t,n,e){this.controller=t,this.condition=n,this.value=e,this.rules=[],this.controls=[]},evalCondition:function(n,e,o,i,r){if("=="==o||"OR"==o)return this.checkBoolean(i)==this.checkBoolean(r);if("!="==o)return this.checkBoolean(i)!=this.checkBoolean(r);if(">="==o)return Number(r)>=Number(i);if("<="==o)return Number(r)<=Number(i);if(">"==o)return Number(r)>Number(i);if("<"==o)return Number(r)-1;if("not-any"==o)return-1==t.inArray(r,i.split(","));throw new Error("Unknown condition:"+o)},checkBoolean:function(t){switch(t){case!0:case"true":case 1:case"1":t=!0;break;case!1:case"false":case 0:case"0":t=!1}return t},checkCondition:function(t,e){if(!this.condition)return!0;var o=t.find(this.controller);0===o.size()&&e.log&&n("Evaling condition: Could not find controller input "+this.controller);var i=this.getControlValue(t,o);return e.log&&void 0===i&&n("Evaling condition: Could not exctract value from input "+this.controller),void 0!==i&&(i=this.normalizeValue(o,this.value,i),this.evalCondition(t,o,this.condition,this.value,i))},normalizeValue:function(t,n,e){return"number"==typeof n?parseFloat(e):e},getControlValue:function(t,n){return("radio"==n.attr("type")||"checkbox"==n.attr("type"))&&n.size()>1?n.filter(":checked").val():"checkbox"==n.attr("type")||"radio"==n.attr("type")?n.is(":checked"):n.val()},createRule:function(t,n,e){var i=new o(t,n,e);return this.rules.push(i),i},include:function(t){if(!t)throw new Error("Must give an input selector");this.controls.push(t)},applyRule:function(e,o,i){var r;r=void 0===i?this.checkCondition(e,o):i,o.log&&n("Applying rule on "+this.controller+"=="+this.value+" enforced:"+i+" result:"+r),o.log&&!this.controls.length&&n("Zero length controls slipped through");var l=o.show||function(t){t.show()},s=o.hide||function(t){t.hide()},c=t.map(this.controls,function(t,i){var r=e.find(t);return o.log&&0===r.size()&&n("Could not find element:"+t),r});r?(t(c).each(function(){o.log&&0===t(this).size()&&(n("Control selection is empty when showing"),n(this)),l(this)}),t(this.rules).each(function(){"OR"!==this.condition&&this.applyRule(e,o)})):(t(c).each(function(){o.log&&0===t(this).size()&&(n("Control selection is empty when hiding:"),n(this)),s(this)}),t(this.rules).each(function(){"OR"!==this.condition?this.applyRule(e,o,!1):this.applyRule(e,o)}))}}),t.extend(i.prototype,{createRule:function(t,n,e){var i=new o(t,n,e);return this.rules.push(i),i},applyRules:function(t,e){var o;for((e=e||{}).log&&n("Starting evaluation ruleset of "+this.rules.length+" rules"),o=0;o