var multiSelect={modalWindow:null,initialized:null,$contMiddle:null,$multiselect:null,label:null,parentName:null,childName:null,selectedParents:new Array(),selectedChildren:new Array(),formId:"#buscador",$form:null,$handle:null,hiddenPrefix:"sp.",create:function(a){this.ensureInitialize();if(a.Localidades!=undefined){label="Localidades:";this.parentName="Localidades";this.childName="Barrios"}else{label="Localidades:";this.parentName="Barrios";this.childName="SubBarrios"}this.createControl(a);this.createHandle()},clear:function(){this.$contMiddle.find("input").attr("checked",false)},clearHiddens:function(){$("#buscador > input[name^='sp."+this.parentName+"']").remove();$("#buscador > input[name^='sp."+this.childName+"']").remove()},cancel:function(){this.modalWindow.jqmHide();this.$handle.show()},show:function(){this.loadState();this.modalWindow.jqmShow()},loadState:function(){this.clear();$(this.selectedParents).each(function(){$(this).attr("checked",true);multiSelect.selectChildren(this)});$(this.selectedChildren).attr("checked",true)},apply:function(){this.selectedParents=new Array();this.selectedChildren=new Array();this.clearHiddens();var c=this.$contMiddle.find("input");var a=c.filter("."+this.parentName+"[checked]");a.each(function(){multiSelect.selectedParents.push(this);multiSelect.appendHidden(multiSelect.parentName,$(this).val())});c.filter("."+this.childName+"[checked]").each(function(){if($(this).parent().parent().find("dt > input[checked]").length==0){multiSelect.selectedChildren.push(this);multiSelect.appendHidden(multiSelect.childName,$(this).val())}});var d="";var b=0;$(this.selectedChildren).each(function(){if(b==3){return false}if(b>0){d+=","}d+=$(this).next().text();b++});$(this.selectedParents).each(function(){if(b==3){return false}if(b>0){d+=","}d+=$(this).next().text();b++});if(d===""){d="Indistinto"}$("#multiselecthandle_select").html("<option>"+d+"</option>");this.modalWindow.jqmHide();this.$handle.show()},appendHidden:function(b,a){$('<input type="hidden" />').attr("name",this.hiddenPrefix+b+"_"+a).val(a).appendTo(this.$form)},cancel:function(){this.modalWindow.jqmHide();this.$handle.show()},ensureInitialize:function(){if(this.initialized==null){this.modalWindow=$("#jqmMultipleSeleccion").jqm({overlay:40,modal:true});this.$contMiddle=$("#ContMiddle").html("");this.$multiselect=$("#MultiSelect");this.$form=$(this.formId)}},createHandle:function(){this.$handle=$('<select id="multiselecthandle_select" style="z-index:1" onmousedown="return false;"><option>Indistinto</option></select>').mousedown(function(a){$(this).hide();multiSelect.show()});createComboZona(this.parentName+":",this.$handle)},createControl:function(b){this.$contMiddle.html("");var a=this.createNodes(b[this.parentName]);this.$multiselect.removeClass().addClass("MultiSelect");if(a<3){this.$multiselect.addClass("ColDos")}else{if(a==3){this.$multiselect.addClass("ColTres")}else{this.$multiselect.addClass("ColCuatro")}}},createNodes:function(i){var d=0;var a=20;var b=25;var g;d=this.getTotalNumberOfNodes(i);if(d<a){g=1}else{if(d<a*2){g=2}else{g=3}}var c=new Array(g);for(var e=0;e<g;e++){c[e]={Nodes:[]};d=this.getTotalNumberOfNodes(i);var h=d/(g-e);var f=this.getParentIndex(i,h);c[e].Nodes=i.splice(0,f)}for(var e=0;e<c.length;e++){this.$contMiddle.append(this.createColumn(c[e].Nodes))}return c.length},getTotalNumberOfNodes:function(a){var b=0;$(a).each(function(){b++;b+=$(this[multiSelect.childName]).length});return b},getParentIndex:function(b,e){var c=0;var d=0;var a=false;$(b).each(function(){c++;d++;if(c>=e){return false}c+=$(this[multiSelect.childName]).length;if(c>=e){return false}});return d},createColumn:function(b){var a=$("<div />").addClass("Columna");$(b).each(function(){var c=$('<dl><dt><input type="checkbox" value="'+this.Id+'" class="'+multiSelect.parentName+'" /><label>'+this.Nombre+"</label></dt></dl>");c.find("input").click(multiSelect.parentClick);$(this[multiSelect.childName]).each(function(){var d=$('<dd class="clearfix"><input type="checkbox" value="'+this.Id+'" class="'+multiSelect.childName+'" /><label>'+this.Nombre+"</label></dd>");d.find("input").click(multiSelect.childClick);d.appendTo(c)});a.append(c)});return a},parentClick:function(a){multiSelect.selectChildren(a.target)},selectChildren:function(a){var b=$(a);b.parent().nextAll().find("input").attr("checked",b.attr("checked"))},childClick:function(b){var e=$(b.target);var d=e.parent().prevAll("dt").find("input");if(!this.checked){d.attr("checked",false);return}var a=d.parent().nextAll().find("input");var c=a.filter("[checked=true]").length;if(c==a.length){d.attr("checked",true)}else{d.attr("checked",false)}}};$(document).ready(function(){$("#applyZonas").click(function(){multiSelect.apply()});$("#clearZonas").click(function(){multiSelect.clear()});$("#cancelZonas").click(function(){multiSelect.cancel()});$(jquery_id("sp.RegionBusqueda")).change(function(a){$(".BuscadorR > p > select:not([id])").parent().remove();$('.BuscadorR > p > select[id="multiselecthandle_select"]').parent().remove();multiSelect.clearHiddens();if(selectedValueIsNull(a)){return}blockControl($(a.target).attr("id"));$.getJSON(urlFindChildsByRegionBusqueda,{idRegionBusqueda:$(a.target).val()},function(b){createControl(b)})});$(jquery_id("sp.RegionBusqueda")).change();$(".BuscadorR > p > select").change(function(){$("#fakeSelectP").remove()});$(jquery_id("sp.Pais")).change(function(a){$(".BuscadorR > p > select:not([id])").parent().remove();$('.BuscadorR > p > select[id="multiselecthandle_select"]').parent().remove();multiSelect.clearHiddens();if(selectedValueIsNull(a)){return}blockControl($(a.target).attr("id"));$.getJSON(urlFindRegionesByPais,{idPais:$(a.target).val()},function(b){createControl(b)})});$(jquery_id("sp.Pais")).change();$(".BuscadorR > p > select").change(function(){$("#fakeSelectPais").remove()})});var mappings={Paises:{Label:"Pais:",Parameter:"idPais",Url:urlFindProvincias,HiddenSufix:"Pais"},Provincias:{Label:"Provincia:",Parameter:"idProvincia",Url:urlFindPartidos,HiddenSufix:"Provincia"},Partidos:{Label:"Partido:",Parameter:"idPartido",Url:urlFindLocalidadesDto,HiddenSufix:"Partido"},Regiones:{Label:"Región/Provincia:",Parameter:"idRegionBusqueda",Url:urlFindChildsByRegionBusqueda,HiddenSufix:"RegionBusqueda"}};function createControl(a){var e;var d;if(a.Regiones==undefined){if($('[name="sp.RegionBusqueda"]').children("option:selected").attr("ShowMatchedRegions")=="true"){d="block";if(a.Barrios!=undefined){multiSelect.create(a);unblockControl();return}if(a.Localidades!=undefined){multiSelect.create(a);unblockControl();return}}else{d="none"}}for(var c in mappings){var b=mappings[c];if(a[c]){createSingleSelect(a[c],b.Label,b.Url,b.Parameter,b.HiddenSufix,d)}}unblockControl()}function createSingleSelect(items,text,url,parameterName,hiddenSufix,display){if(items.length==0){return}var name="sp."+hiddenSufix;var $combo=$('<select style="display:'+display+';" name="'+name+'"><option value="">Indistinto</option></select>');$(items).each(function(){if(hiddenSufix=="RegionBusqueda"){$combo.append($("<option />").val(this.Id).text(this.Nombre).attr("ShowMatchedRegions",this.ShowMatchedRegions))}else{$combo.append($("<option />").val(this.Id).text(this.Nombre))}});$combo.change(function(evt){$(evt.target).parent().nextAll('p[id=""]').remove();if(selectedValueIsNull(evt)){return}blockControl($combo.attr("name"));$.getJSON(url,eval("({"+parameterName+":"+$(evt.target).val()+"})"),function(response){createControl(response)})});createComboZona(text,$combo)}function createComboZona(c,b){var a=$("<label />").text(c);$("#btnBuscar").before($('<p class ="clearfix" />').append(a).append(b))}function blockControl(a){if($(jquery_id(a))[0]!=null){$(jquery_id(a)).attr("disabled",true)}else{if($("[name='"+a+"']")[0]!=null){$("[name='"+a+"']").attr("disabled",true)}else{alert("Se ha producido un error al procesar la seleccion de los filtros.")}}$(jquery_id("blockId")).val(a)}function unblockControl(){var a=$(jquery_id("blockId")).val();if($(jquery_id(a))[0]!=null){$(jquery_id(a)).attr("disabled",false)}else{if($("[name='"+a+"']")[0]!=null){$("[name='"+a+"']").attr("disabled",false)}else{alert("Se ha producido un error al procesar la seleccion de los filtros.")}}$(jquery_id("blockId")).val("")};
