vanilla.namespace("joblib.critere");vanilla.Class("joblib.critere","Critere");joblib.critere.Critere.Prototype({Critere:function(d,c,b,f){this.form=d;this.node=$(c,d.node);var e=this.node.find("> ul");this.name=b;this.prefix=f;this.reg=new RegExp("id-(\\w?[0-9A-Z]+)");e.wrap($.create("div").addClass("popup"));this.popup=e.parent("div.popup").css("position","absolute").hide();var g=this;this.addLink=$.create("a",{href:"#"},$.create("span",{},"Ajouter")).addClass("add").insertBefore(this.popup).click(function(h){h.preventDefault();this.open()}.bind(this));this.removeLink=$.create("a",{href:"#"},$.create("span",{},"Aucun")).addClass("remove").insertBefore(this.popup).hide().click(function(h){h.preventDefault();if(this.getSelection().length>0){this.select([]);$(this).trigger("change")}}.bind(this));this.popup.css({top:this.addLink.position().top});$(document).click(function(i){var h=$(i.target).parents().add(i.target);if(this.popup.is(":visible")&&h.index(this.popup.get(0))<0&&h.index(this.addLink.get(0))<0){this.cancel()}}.bind(this)).keyup(function(h){if(this.popup.is(":visible")&&h.keyCode==vanilla.event.KEY_ESC){this.cancel()}}.bind(this));this.selection=$.create("ul").addClass("selection").insertAfter(this.removeLink);e.find("li").each(function(i){var h=$(this);var j=$.create("input",{type:"checkbox"}).addClass("checkbox").prependTo(this).change(function(){var k=this.checked;h.find("li input:checkbox").attr("checked",k);h.parents("li").each(function(){$(this).find("> input").attr("checked",$(this).find("> ul > li > input").not(":checked").length==0)});if(g.stateBeforeOpening){var k=g.popup.find("input:checked");var l=k.length!=g.stateBeforeOpening.length;if(!l){k.each(function(m){if(g.stateBeforeOpening.get(m)!=this){l=true;return false}})}g.applyButton.toggle(l)}}).click(function(){$(this).change()});$(this).find("> a").click(function(k){k.preventDefault();j.attr("checked",!j.is(":checked")).change()})});e.find("li.selected input:checkbox").attr("checked",true);this._applyCritere();var a=new SimpleThread(function(){if(this.hasFocus){this.filterList(this.searchField.val());return Thread.Continue}return Thread.Pause}.bind(this),100);this.searchField=$.create("input",{type:"text"}).prependTo(this.popup).focus(function(){g.hasFocus=true;if(a.isAlive()){a.resume()}else{a.start(true)}}).blur(function(){g.hasFocus=false});$.create("a",{href:"#"},"Fermer").addClass("close").insertAfter(this.searchField).click(function(h){h.preventDefault();g.cancel()});this.applyButton=$.create("a",{href:"#"},"Appliquer").addClass("apply").insertAfter(e).hide().click(function(h){h.preventDefault();g.apply()});this.node.find("> h4").clone().prependTo(this.popup)},filterList:function(c){c=c.toLowerCase();if(this.lastMatchValue!=c){var d=this;var b=c.replace(/[aàâ]/g,"[aàa]").replace(/[eéèêë]/g,"[eéèêë]").replace(/[iîï]/g,"[iîï]").replace(/[oôö]/g,"[oôö]").replace(/[uûü]/g,"[uûü]");var a=c.length;if(c&&this.lastMatchValue&&c.indexOf(this.lastMatchValue)>=0){this.popup.find("li:visible").each(function(){d._match($(this),b,a)})}else{this.popup.find("li").each(function(){d._match($(this),b,a)})}this.lastMatchValue=c}},_match:function(a,e,d){var c=a.find("> a span, > span");var f=c.text();var b=f.toLowerCase().search(e);if(!d||b<0){c.html(f);a.removeClass("match").toggle(d?a.parents("li").is(".match"):true)}else{c.html([f.substr(0,b),"<strong>",f.substr(b,d),"</strong>",f.substr(b+d)].join(""));a.toggleClass("match",true).show();a.parents("li").show()}},open:function(){this.popup.find("input").val("");this.filterList("");this.stateBeforeOpening=this.popup.find("input:checked");this.popup.fadeIn("normal",function(){this.popup.find("> input").focus()}.bind(this));this.applyButton.hide();if(vanilla.isBoggyIE){var a=vanilla.html.position.toBox(this.popup);this.selects=$("select").filter(function(){return $(this).css("visibility")!="hidden"&&vanilla.html.position.boxIntersect(vanilla.html.position.toBox(this),a)}).css("visibility","hidden")}},apply:function(){var a=this.getSelection();this.selection.empty();this._applyCritere();var b=this.getSelection();this.popup.fadeOut(function(){if(b.join(",")!=a.join(",")){$(this).trigger("change")}}.bind(this));if(this.selects){this.selects.css("visibility","visible")}this.stateBeforeOpening=null},cancel:function(){this.popup.find("input:checkbox").not(this.stateBeforeOpening).attr("checked","");this.stateBeforeOpening.attr("checked","checked");this.popup.fadeOut();this.stateBeforeOpening=null;if(this.selects){this.selects.css("visibility","visible")}},addCritere:function(b){var a=this.popup.find("li.id-"+b);if(!a.length){return}if(a.is(".selected")){return}this._addCritere(a.get(0));$(this).trigger("change")},_addCritere:function(b){var d=this.reg.exec(b.className)[1];var a="id-"+d;b=$(b);var c=b.find("> a span, > span").text();$.create("li",{},[c,$.create("a",{href:"#",title:'Enlever "'+c+'"'}).html("<span>Enlever</span>").click(function(f){f.preventDefault();this.removeCritere(d)}.bind(this))]).addClass(a).appendTo(this.selection)},_applyCritere:function(){this._traverseSelectedCritere(this.popup);this.removeLink.toggle(this.getSelection().length>0?true:false)},_traverseSelectedCritere:function(b){var a=this;$(b).find("> ul > li").each(function(){var c=$(this);if(c.is(":has(> input:checked)")){a._addCritere(this)}else{a._traverseSelectedCritere(this)}})},removeCritere:function(b){var a="id-"+b;this.popup.find("li."+a+" > input").attr("checked",false).change();this.selection.empty();this._applyCritere();$(this).trigger("change")},getSelection:function(c){var b=[];var a=this.reg;this.selection.find("li").each(function(){var e=a.exec(this.className)[1];if(c){var d=e.charAt(0);if(d!=c){return true}e=e.substr(1)}b.push(e)});return b},getSelectionLabels:function(){var a=[];this.selection.find("li").each(function(){a.push(this.firstChild.nodeValue)});return a},getSelectionsByName:function(){var b={};if(!this.prefix){b[this.name]=this.getSelection()}else{for(var a in this.prefix){b[this.prefix[a]]=this.getSelection(a)}}return b},select:function(b){this.selection.empty();var a=[];$(b).each(function(c,d){a.push("li.id-"+d+" input:checkbox")}.bind(this));this.popup.find("li input.checkbox").attr("checked",false).filter(a.join(",")).attr("checked",true).change();this._applyCritere()}});vanilla.Class("joblib.critere","Form");joblib.critere.Form.Prototype({Form:function(d,f,h,c){var a=$("#view-"+d.viewId);this.properties=d;this.node=$(f,a);this.action=h;this.resultNode=$(c,a);this.criteres=[];this.jeton=0;this.hash=null;this.hashThread=null;var g=$(".fieldContainer.recherche .fieldSet");var e=$.create("div",{"class":"tab"}).prependTo(g);var b=g.find("h3").each(function(){var j=$(this).parent().addClass("page");var i=$(this).addClass(j.attr("class").split(/\s/)[0]+"-title").appendTo(e).click(function(){g.find("> div.page").not(j).hide();j.show();b.not(i).toggleClass("selected",false);i.toggleClass("selected",true)});if(j.is(":visible")){i.addClass("selected")}});this.createCritere(this.node.find("div.critere.secteurs"),"secteur");this.createCritere(this.node.find("div.critere.postes"),"poste");this.createCritere(this.node.find("div.critere.magasinTypes"),"magasinType");this.createCritere(this.node.find("div.critere.regions"),"localisation",{d:"departement",r:"region"});this.lastValues=this.getValues()},init:function(){this.hashThread=new SimpleThread(this._hashWatcher.bind(this),500);this._hashWatcher()},_hashWatcher:function(){var d=window.location.hash||"";if(d&&d.charAt(0)=="#"){d=d.substr(1)}if(this.hash==null){var a=this._generateHash();if(a!=""){this._setHash(a);this.hashThread.start();return}else{if(d){}}}else{if(d==this.hash){return Thread.Continue}}var c=1;var b=[];$(d.split("/")).each(function(f,e){if(f==0){c=e?e:1;return true}if(!e){return true}var h=e.split(":");if(!h||h.length!=2){return true}var g=this.findCritereByName(h[0]);if(!g){return true}g.select(h[1].split("|"));b.push(g)}.bind(this));$(this.criteres).not(b).each(function(){this.select([])});this.execute(c);return Thread.Pause},_setHash:function(a){this.hash=a;window.location.hash=a},createCritere:function(b,a,d){var c=new joblib.critere.Critere(this,b,a,d);$(c).bind("change",this.execute.bind(this,1));this.criteres.push(c)},findCritereByName:function(a){var b=null;$(this.criteres).each(function(){if(this.name==a){b=this;return false}});return b},getValues:function(){var a=[];this._pushParam(a,"instanceCode",this.properties.pluginInstanceCode);this._pushParam(a,"page",this.properties.page);for(var b in this.properties.callbacks){var d=this.properties.callbacks[b];if(!d){continue}this._pushParam(a,"callback."+b+".url",d.url);this._pushParam(a,"callback."+b+".instanceCode",d.instanceCode);this._pushParam(a,"callback."+b+".signalName",d.signalName)}var c=this.properties.pluginInstanceCode+".";this.getCriteria(c,a);return a},getCriteria:function(b,a){a=a||[];b=b||"";var c=this;$(this.criteres).each(function(){var f=this.getSelectionsByName();for(var e in f){var d=f[e];if(d.length){c._pushParam(a,b+e+"[]",d)}}});return a},_generateHash:function(){var a="";$(this.criteres).each(function(){var b=this.getSelection();if(b.length){a+="/"+this.name+":"+b.join("|")}});return a},_pushParam:function(c,a,b){if($.isArray(b)){var d=this;$.each(b,function(){d._pushParam(c,a,this)})}else{c.push({name:a,value:b})}},execute:function(d){var c=this.properties.libraryURL+this.action+"?"+this.properties.pluginInstanceCode+"-search="+d;var f=$.create("div").addClass("loadingDiv").css({position:"absolute",height:this.resultNode.outerHeight()+10}).insertBefore(this.resultNode);var b=++this.jeton;var a=this.getValues();var e=d+this._generateHash();$.ajax({type:"post",url:c,data:a,success:function(g){if(b!=this.jeton||this.hash==e){if(this.hash==e){this._setHash(e)}f.remove();this.hashThread.isAlive()?this.hashThread.resume():this.hashThread.start();return}this.synchronize(function(){var h=$.param(this.lastValues);var i=$.param(a);var j=this;this.lastValues=a;this._setHash(e);this.resultNode.css({height:Math.max(this.resultNode.height()-10,0),overflow:"hidden"}).html(g).trigger("reload",[h!=i,this]).css({height:"auto",overflow:"visible"});f.height(this.resultNode.outerHeight()+10).wait(200).animate({opacity:0},function(){$(this).remove()});this.hashThread.isAlive()?this.hashThread.resume():this.hashThread.start()})}.bind(this),error:function(h,i,g){f.remove();this.hashThread.isAlive()?this.hashThread.resume():this.hashThread.start()}.bind(this)})},synchronize:function(a){$(this).synchronize(a.bind(this))}});
