/**
* @fileOverview jui_filter_rules is a jQuery plugin, useful to create dataset filter rules as JSON object and the relevant WHERE SQL.
*
License MIT
*
Copyright 2013 - 2014 Christos Pontikis http://pontikis.net
*
Project page http://pontikis.net/labs/jui_filter_rules
*
Minified using Online YUI Compressor http://www.refresh-sf.com/yui/
* @version 1.0.4 (09 May 2014)
* @author Christos Pontikis http://pontikis.net
* @requires jquery, bowser.js (optional but highly recommended moment.js, jquery-ui, twitter bootstrap >= 2)
*/
"use strict";(function(e){var a="jui_filter_rules",h="jui_filter_rules_status",g=["text","number","date"],r=[{type:"equal",accept_values:"yes",apply_to:["text","number","date"],group:"equality"},{type:"not_equal",accept_values:"yes",apply_to:["text","number","date"],group:"equality"},{type:"in",accept_values:"yes",apply_to:["text","number","date"],group:"multiple_choice"},{type:"not_in",accept_values:"yes",apply_to:["text","number","date"],group:"multiple_choice"},{type:"less",accept_values:"yes",apply_to:["number","date"],group:"inequality"},{type:"less_or_equal",accept_values:"yes",apply_to:["number","date"],group:"inequality"},{type:"greater",accept_values:"yes",apply_to:["number","date"],group:"inequality"},{type:"greater_or_equal",accept_values:"yes",apply_to:["number","date"],group:"inequality"},{type:"begins_with",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"not_begins_with",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"contains",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"not_contains",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"ends_with",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"not_ends_with",accept_values:"yes",apply_to:["text"],group:"substring"},{type:"is_empty",accept_values:"no",apply_to:["text"],group:"empty_string"},{type:"is_not_empty",accept_values:"no",apply_to:["text"],group:"empty_string"},{type:"is_null",accept_values:"no",apply_to:["text","number","date"],group:"null"},{type:"is_not_null",accept_values:"no",apply_to:["text","number","date"],group:"null"}];var w={init:function(A){var B=this;return this.each(function(){var X=B.data(a);if(typeof(X)=="undefined"){var aa=false;if(A.hasOwnProperty("bootstrap_version")&&A.bootstrap_version=="3"){aa="3"}if(A.hasOwnProperty("bootstrap_version")&&A.bootstrap_version=="2"){aa="2"}var M=w.getDefaults.call(B,aa);X=e.extend({},M,A)}else{X=e.extend({},X,A)}B.data(a,X);if(typeof B.data(h)==="undefined"){B.data(h,{});B.data(h)["group_id"]=0;B.data(h)["rule_id"]=0}var U=B.attr("id");d(U);B.unbind("onValidationError").bind("onValidationError",X.onValidationError);var K=X.filters,R=n(X.filters_list_id_prefix,U)+"_",T=n(X.operators_container_id_prefix,U)+"_",L=n(X.operators_list_id_prefix,U)+"_",I,D=n(X.filter_value_container_id_prefix,U)+"_",Q=n(X.group_condition_id_prefix,U)+"_",W=n(X.group_tools_id_prefix,U)+"_",O=n(X.rule_tools_id_prefix,U)+"_",F,J,Z,Y,P,ae,ac,ad,S,V,H,E,N,ab,G=X.rulesListLiAppliedClass,C=X.rulesListLiErrorClass;if(B.data(h)["rule_id"]==0){if(K.length>0){B.html(o(U))}else{B.html('
'+rsc_jui_fr.no_filters_found+"
")}}B.addClass(X.containerClass);S='[id^="'+W+'"]';B.off("change",S).on("change",S,function(){V=W.length;H=e(this).attr("id").substr(V);N=e(this).val();switch(N){case"rule_insert_before":e(this).closest("dt").parent("dl").before(m(U));break;case"rule_insert_after":e(this).closest("dt").parent("dl").after(m(U));break;case"rule_insert_inside":e(this).closest("dt").next("dd:first").find("ul:first").prepend(m(U));break;case"group_insert_before":e(this).closest("dl").before(o(U));break;case"group_insert_after":e(this).closest("dl").after(o(U));break;case"group_insert_inside":e(this).closest("dt").next("dd:first").find("ul:first").prepend(o(U));break;case"group_delete":e(this).closest("dl").remove();break}e(this).prop("selectedIndex",0)});S='[id^="'+O+'"]';B.off("change",S).on("change",S,function(){V=O.length;H=e(this).attr("id").substr(V);ab=e(this).val();switch(ab){case"rule_insert_before":e(this).closest("li").before(m(U));break;case"rule_insert_after":e(this).closest("li").after(m(U));break;case"rule_clear":F=R+H;Z=T+H;Y=D+H;P=e("#"+F);ac=e("#"+Z);ad=e("#"+Y);P.prop("selectedIndex",0);ac.html("");ad.html("");B.jui_filter_rules("markRuleAsPending",e(this).closest("li").attr("id"));break;case"rule_delete":e(this).closest("li").remove();break;case"group_insert_before":e(this).closest("li").before(o(U));break;case"group_insert_after":e(this).closest("li").after(o(U));break}e(this).prop("selectedIndex",0)});S='[id^="'+Q+'"]';B.off("change",S).on("change",S,function(){e(this).closest("dl").find("li").each(function(){B.jui_filter_rules("markRuleAsApplied",e(this).attr("id"),false)})});S='[id^="'+R+'"]';B.off("change",S).on("change",S,function(){V=R.length;H=e(this).attr("id").substr(V);E=e(this).prop("selectedIndex")-1;Z=T+H;J=L+H;Y=D+H;ac=e("#"+Z);ad=e("#"+Y);ad.show();if(E>=0){ac.html(t(U,H,e(this).val()));ae=e("#"+J);j(U,H,e(this).val(),ae.val())}else{ac.html("");ad.html("")}B.jui_filter_rules("markRuleAsPending",e(this).closest("li").attr("id"))});S='[id^="'+L+'"]';B.off("change",S).on("change",S,function(){V=L.length;H=e(this).attr("id").substr(V);F=R+H;J=L+H;Y=D+H;P=e("#"+F);ae=e("#"+J);ad=e("#"+Y);I=i(e(this).val());if(I.accept_values!=="yes"){ad.hide()}else{ad.show();if(ad.html()==""){j(U,H,P.val(),ae.val())}}B.jui_filter_rules("markRuleAsPending",e(this).closest("li").attr("id"))})})},getVersion:function(){return"1.0.4"},getDefaults:function(B){var A={filters:[],decimal_separator:".",htmlentities:false,bootstrap_version:false,containerClass:"filter_rules_container",rulesGroupContainerClass:"rules_group_container",rulesGroupHeaderClass:"rules_group_header",rulesGroupBodyClass:"rules_group_body",rulesGroupConditionContainerClass:"rules_group_condition_container",rulesGroupConditionListClass:"rules_group_condition_list",rulesGroupToolsContainerClass:"rules_group_tools_container",rulesGroupToolsListClass:"rules_group_tools_list",rulesListClass:"rules_list",rulesListLiClass:"rules_list_li",rulesListLiErrorClass:"rules_list_error_li",rulesListLiAppliedClass:"rules_list_applied_li",filterContainerClass:"filter_container",filterListClass:"filter_list",operatorsListContainerClass:"operators_list_container",operatorsListClass:"operators_list",filterValueContainerClass:"filter_value_container",filterInputTextClass:"filter_input_text",filterInputNumberClass:"filter_input_number",filterInputDateClass:"filter_input_date",filterInputCheckboxClass:"filter_input_checkbox",filterInputRadioClass:"filter_input_radio",filterSelectClass:"filter_select",filterGroupListClass:"filter_group_list",filterGroupListItemHorizontalClass:"filter_group_list_item_horizontal",filterGroupListItemVerticalClass:"filter_group_list_item_vertical",ruleToolsContainerClass:"rule_tools_container",ruleToolsClass:"rule_tools_list",noFiltersFoundClass:"no_filters_found",group_dl_id_prefix:"group_",group_condition_id_prefix:"group_cond_",group_tools_id_prefix:"group_tools_",rule_li_id_prefix:"rule_",filters_list_id_prefix:"filters_list_",operators_container_id_prefix:"oper_wrap_",operators_list_id_prefix:"oper_list_",filter_value_container_id_prefix:"flt_wrap_",filter_element_id_prefix:"flt_",filter_element_name_prefix:"flt_name_",rule_tools_id_prefix:"rule_tools_",onValidationError:function(){}};if(B=="3"){A.bootstrap_version="3";A.containerClass="filter_rules_container";A.rulesGroupContainerClass="rules_group_container";A.rulesGroupHeaderClass="rules_group_header";A.rulesGroupBodyClass="rules_group_body";A.rulesGroupConditionContainerClass="rules_group_condition_container";A.rulesGroupConditionListClass="form-control input-sm rules_group_condition_list";A.rulesGroupToolsContainerClass="rules_group_tools_container";A.rulesGroupToolsListClass="form-control input-sm rules_group_tools_list";A.rulesListClass="rules_list";A.rulesListLiClass="rules_list_li";A.rulesListLiErrorClass="rules_list_error_li";A.rulesListLiAppliedClass="rules_list_applied_li";A.filterContainerClass="filter_container";A.filterListClass="form-control input-sm filter_list";A.operatorsListContainerClass="operators_list_container";A.operatorsListClass="form-control input-sm operators_list";A.filterValueContainerClass="filter_value_container";A.filterInputTextClass="form-control input-sm filter_input_text";A.filterInputNumberClass="form-control input-sm filter_input_number";A.filterInputDateClass="form-control input-sm filter_input_date";A.filterInputCheckboxClass="filter_input_checkbox";A.filterInputRadioClass="form-control input-sm filter_input_radio";A.filterSelectClass="form-control input-sm filter_select";A.filterGroupListClass="filter_group_list";A.filterGroupListItemHorizontalClass="filter_group_list_item_horizontal";A.filterGroupListItemVerticalClass="filter_group_list_item_vertical";A.ruleToolsContainerClass="rule_tools_container";A.ruleToolsClass="form-control input-sm rule_tools_list";A.noFiltersFoundClass="no_filters_found"}if(B=="2"){A.bootstrap_version="2";A.containerClass="filter_rules_container";A.rulesGroupContainerClass="rules_group_container";A.rulesGroupHeaderClass="rules_group_header";A.rulesGroupBodyClass="rules_group_body";A.rulesGroupConditionContainerClass="rules_group_condition_container";A.rulesGroupConditionListClass="form-control btn-small rules_group_condition_list";A.rulesGroupToolsContainerClass="rules_group_tools_container";A.rulesGroupToolsListClass="form-control btn-small rules_group_tools_list";A.rulesListClass="rules_list";A.rulesListLiClass="rules_list_li";A.rulesListLiErrorClass="rules_list_error_li";A.rulesListLiAppliedClass="rules_list_applied_li";A.filterContainerClass="filter_container";A.filterListClass="form-control btn-small filter_list";A.operatorsListContainerClass="operators_list_container";A.operatorsListClass="form-control btn-small operators_list";A.filterValueContainerClass="filter_value_container";A.filterInputTextClass="form-control btn-small filter_input_text";A.filterInputNumberClass="form-control btn-small filter_input_number";A.filterInputDateClass="form-control btn-small filter_input_date";A.filterInputCheckboxClass="filter_input_checkbox";A.filterInputRadioClass="form-control btn-small filter_input_radio";A.filterSelectClass="form-control btn-small filter_select";A.filterGroupListClass="filter_group_list";A.filterGroupListItemHorizontalClass="filter_group_list_item_horizontal";A.filterGroupListItemVerticalClass="filter_group_list_item_vertical";A.ruleToolsContainerClass="rule_tools_container";A.ruleToolsClass="form-control btn-small rule_tools_list";A.noFiltersFoundClass="no_filters_found"}return A},getOption:function(A){var B=this;return B.data(a)[A]},getAllOptions:function(){var A=this;return A.data(a)},setOption:function(A,D,C){var B=this;B.data(a)[A]=D;if(C){B.jui_filter_rules("init")}},refresh:function(){var A=this;A.jui_filter_rules()},destroy:function(){return e(this).each(function(){var A=e(this);A.removeData(a)})},getRules:function(S,O){var R=this,P=R.attr("id"),B,L,C,A,N,K,I,M,H,Q,D,E=n(R.jui_filter_rules("getOption","rule_li_id_prefix"),P)+"_",J=E.length,G,F;B=R.find("dl").eq(S);L=B.find("dt:first").find("select:first").val();C=B.find("dd:first").find("ul:first").children().get();A=C.length;for(N=0;N0){I.condition.filterValue=D}}if(i(H).accept_values=="yes"){if(Q.hasOwnProperty("filter_value_conversion_server_side")){I.filter_value_conversion_server_side=Q.filter_value_conversion_server_side}}I.logical_operator=L;O.push(I)}else{if(K.tagName=="DL"){I.condition=[];I.logical_operator=L;O.push(I);F=O.length-1;S=parseInt(S)+1;R.jui_filter_rules("getRules",S,O[F].condition);u(O)}}}return O},markRuleAsApplied:function(E,B){var C=this,D=e("#"+E),A=C.jui_filter_rules("getOption","rulesListLiAppliedClass");if(B){D.addClass(A)}else{D.removeClass(A)}},markRuleAsError:function(E,A){var C=this,D=e("#"+E),B=C.jui_filter_rules("getOption","rulesListLiErrorClass");if(A){D.addClass(B)}else{D.removeClass(B)}},markRuleAsPending:function(E){var C=this,D=e("#"+E),B=C.jui_filter_rules("getOption","rulesListLiErrorClass"),A=C.jui_filter_rules("getOption","rulesListLiAppliedClass");D.removeClass(B);D.removeClass(A)},markAllRulesAsApplied:function(){var D=this,B=D.jui_filter_rules("getOption","rulesListLiErrorClass"),A=D.jui_filter_rules("getOption","rulesListLiAppliedClass"),C=D.jui_filter_rules("getRules",0,[]);if(C!==false){if(C.length>0){D.find("li").each(function(){if(e(this).find("select:first").prop("selectedIndex")>0){D.jui_filter_rules("markRuleAsError",e(this).attr("id"),false);D.jui_filter_rules("markRuleAsApplied",e(this).attr("id"),true)}})}}},clearAllRules:function(){var A=this,B=A.attr("id");A.find("dl:first").html("");A.data(h)["group_id"]=0;A.data(h)["rule_id"]=0;A.jui_filter_rules("refresh")}};var d=function(F){var E=e("#"+F),G,A,D=E.jui_filter_rules("getOption","filters"),C=D.length,B=[];for(A=0;AERROR: '+G+"");e.error(G)}};var n=function(B,A){return B+A};var k=function(C){var B={},A=C.length,D;for(D=0;D").text(A).html()}else{return""}};var f=function(A){if(A){return e("").html(A).text()}else{return""}};var x=function(B){var A={},C;for(C in B){if(B.hasOwnProperty(C)){if(B[C]!==""){A[C]=B[C]}}}return A};var u=function(B){var C,D,A=B.length;for(C=0;C-1){continue}if(e.inArray(H,r[F].apply_to)>-1){K={};K.operator_type=r[F].type;K.operator_label=rsc_jui_fr["operator_"+r[F].type];K.group=r[F].group;D.push(K)}}return D};var i=function(C){var B,A=r.length,D=undefined;for(B=0;B';D+='";D+="";return D};var q=function(B){var A=e("#"+B),F=parseInt(A.data(h)["rule_id"]),E=A.jui_filter_rules("getOption","rulesGroupToolsContainerClass"),I=A.jui_filter_rules("getOption","rulesGroupToolsListClass"),C=n(A.jui_filter_rules("getOption","group_tools_id_prefix"),B)+"_"+F,D=(F==0?' disabled="disabled"':""),G=(bowser.msie&&parseInt(bowser.version)<9?"":" tools_list_shrink"),H="";H+='';H+='";H+="
";return H};var p=function(E){var D=e("#"+E),I=parseInt(D.data(h)["rule_id"]),C=D.jui_filter_rules("getOption","filters"),J=C.length,H=D.jui_filter_rules("getOption","filterContainerClass"),B=D.jui_filter_rules("getOption","filterListClass"),A=n(D.jui_filter_rules("getOption","filters_list_id_prefix"),E)+"_"+I,F,G="";G+='';G+='";G+="
";return G};var t=function(E,K,H){var B=e("#"+E),N=n(B.jui_filter_rules("getOption","operators_container_id_prefix"),E)+"_"+K,I=e("#"+N),D=B.jui_filter_rules("getOption","operatorsListClass"),F=n(B.jui_filter_rules("getOption","operators_list_id_prefix"),E)+"_",M=F+K,C,G,J,L="",A="";C=y(E,H);J=C.length;L+='";I.html(L)};var j=function(T,K,ad,R){var al=e("#"+T),am=i(R),D=n(al.jui_filter_rules("getOption","filter_value_container_id_prefix"),T)+"_"+K,af=e("#"+D),Q=al.jui_filter_rules("getOption","filters"),Z=x(l(T,ad)),U=Z.filterType,B=Z.filter_interface,H=B.length,ao,E,F,N,L="",O,aa,C=["id","name"],S="",an,ag,W,aj,X="",A="no",ak,J=al.jui_filter_rules("getOption","filterGroupListClass"),ai=al.jui_filter_rules("getOption","filterGroupListItemHorizontalClass"),ae=al.jui_filter_rules("getOption","filterGroupListItemVerticalClass"),I="";if(am.accept_values!=="yes"){af.html("");return true}if(Z.hasOwnProperty("lookup_values_ajax_url")){X=Z.lookup_values_ajax_url;e.ajax({url:X,success:(function(aq){an=e.parseJSON(aq);af.html(V());M()})})}else{if(Z.hasOwnProperty("lookup_values")){an=Z.lookup_values}af.html(V());M()}function V(){for(ao=0;ao';for(W=0;W';I+="<"+E;ac(W);I+=' id="'+F+'"';if(L=="radio"){ah();I+=' name="'+N+'"'}Y();I+=' value="'+an[W]["lk_value"]+'"';aj=(an[W]["lk_selected"]=="yes"?' checked="checked"':"");I+=aj;I+=">";I+='";I+=""}I+=""}else{I+="<"+E;ac(ao);I+=' id="'+F+'"';Y();I+=">";if(E=="select"){G()}if(E=="div"){I+=""}}}return I}function ac(aq){F=n(al.jui_filter_rules("getOption","filter_element_id_prefix"),T)+"_"+K+"_"+aq}function ah(){N=n(al.jui_filter_rules("getOption","filter_element_name_prefix"),T)+"_"+K}function P(){if(E=="input"){if(L=="text"){C=["id","name"]}else{if(L=="radio"){C=["id","name","value","checked"]}else{if(L=="checkbox"){C=["id","name","value","checked"]}}}}else{if(E=="select"){C=["id","name","value"]}}}function ab(){var aq="";S="";if(E=="input"){if(L=="text"){if(U=="text"){aq="filterInputTextClass"}else{if(U=="number"){aq="filterInputNumberClass"}else{if(U=="date"){aq="filterInputDateClass"}}}}else{if(L=="radio"){aq="filterInputRadioClass"}else{if(L=="checkbox"){aq="filterInputCheckboxClass"}}}}else{if(E=="select"){aq="filterSelectClass"}}if(aq!==""){S=al.jui_filter_rules("getOption",aq)}}function Y(){for(aa in O){if(O.hasOwnProperty(aa)){if(e.inArray(aa,C)>-1){continue}I+=" "+aa+'="'+O[aa]+'"'}}if(!O.hasOwnProperty("class")){ab();if(S!==""){I+=' class="'+S+'"'}}}function G(){ag=an.length;for(W=0;W"+an[W]["lk_option"]+""}I+=""}function ap(){A="no";if(B[ao].hasOwnProperty("vertical_orientation")){A=B[ao].vertical_orientation}ak=(A=="yes"?ae:ai)}function M(){if(L=="checkbox"||L=="radio"){return true}for(ao=0;ao';D+='";D+="";return D};var o=function(E){var B=e("#"+E),H=B.jui_filter_rules("getOption","group_dl_id_prefix"),G,J,I=B.jui_filter_rules("getOption","rulesGroupContainerClass"),C=B.jui_filter_rules("getOption","rulesGroupHeaderClass"),A=B.jui_filter_rules("getOption","rulesGroupBodyClass"),D=B.jui_filter_rules("getOption","rulesListClass"),F="";J=parseInt(B.data(h)["group_id"])+1;B.data(h)["group_id"]=J;G=n(H,E)+"_"+J;F+='';F+='- ';F+=v(E);F+=q(E);F+="
";F+='- ';F+='";F+="
";F+="
";return F};var m=function(D){var C=e("#"+D),G=C.jui_filter_rules("getOption","rulesListLiClass"),F=C.jui_filter_rules("getOption","operatorsListContainerClass"),E=C.jui_filter_rules("getOption","filterValueContainerClass"),L=n(C.jui_filter_rules("getOption","rule_li_id_prefix"),D)+"_",K=n(C.jui_filter_rules("getOption","operators_container_id_prefix"),D)+"_",I=n(C.jui_filter_rules("getOption","filter_value_container_id_prefix"),D)+"_",J,M,A,H,B="";H=parseInt(C.data(h)["rule_id"])+1;C.data(h)["rule_id"]=H;M=K+H;A=I+H;J=L+H;B+='';B+=p(D);B+='';B+="
";B+='';B+="
";B+=c(D);B+="";return B};var z=function(Q,J,V,N){var ad=e("#"+Q),R=V.filterType,D=V.filter_interface,I=D.length,af,F,E=n(ad.jui_filter_rules("getOption","filter_value_container_id_prefix"),Q)+"_"+J,aa=e("#"+E),C=ad.jui_filter_rules("getOption","filter_element_id_prefix"),G,L="",M,U,ae=i(N),Y=n(ad.jui_filter_rules("getOption","rule_li_id_prefix"),Q)+"_"+J,ah=e("#"+Y),H=ad.jui_filter_rules("getOption","rulesListLiErrorClass"),T=ad.jui_filter_rules("getOption","decimal_separator"),ai=new RegExp(s(T),"g"),aj=ad.jui_filter_rules("getOption","htmlentities"),al,W=[],P,Z,S=[],am,ab="",ac,B=[],K,ak;ah.removeClass(H);if(ae.accept_values!=="yes"){return W}for(af=0;afERROR: '+A+"");e.error(A)}if(w[B]){return w[B].apply(this,Array.prototype.slice.call(arguments,1))}else{if(typeof B==="object"||!B){return w.init.apply(this,arguments)}else{e.error("Method "+B+" does not exist on jQuery."+a)}}}})(jQuery);