
function getAndPrepareParametersSelected(){
	getMaterialValues();
	getCategoriesValues();
	getDataValue();
}

// From selector of front
function getMaterialValues() {
	var res = new Array();
	$("input:checkbox[name=checkBoxMaterials"+busObject.modal+"]:checked").each(function() {		
		res.push($(this).val());
	});
	busObject.materialValue = res;
}

// From selector of front
function getCategoriesValues() {
	var res = new Array();
	$("input:checkbox[name=checkBoxCategorias]:checked").each(function() {	
		res.push($(this).val());
	});
	busObject.categoryValue =res;
}

// To establish Data Value To make Api Calls in Backend
function getDataValue() {
	busObject.dataValue = $("input[name=radioButtonSelector]:checked").val();
}

// Se utiliza por ser objetos array, los reiniciamos en cada busqueda, si fueran inidividuales se sobreescribiria, pero estamos haciendo push al objeto 
function resetParams() {
	//console.debug("entramos en reset params");	
	busObject.categoryValue = undefined;
	busObject.materialValue = undefined;
}
$(window).resize(function() {
	if (typeof busObject != 'undefined' && !busObject.modeSlider){
	    if (window.innerWidth <= 991) {
	        noStickyMode();
	    	
	    } else {
            stickyMode();
	    }
	
	    var divToDetectClass = document.getElementById('divMother');
	
	    if (window.innerWidth <= 1195 && window.innerWidth > 892) {
	        if (divToDetectClass.className == 'col-xs-12 col-sm-12 col-md-3') {
	        }
	    } else {
	        if (divToDetectClass.className == 'col-xs-12 col-sm-12 col-md-4') {
	        }
	    }
	    if (window.innerWidth <= 991) {
			jQuery('#divFather').css('top',0);	
		}
	    /*if (window.innerWidth <= 425) {
			jQuery('#divFather').css('top',0);
		}*/
	    else{
	    	//console.log("aqui lo ejecuta" + $(window).width());
			reTopFather();
		}
	}
	
	
});

function reTopFather(){
	/* if (window.innerWidth <= 425) {
			jQuery(".fila1, .fila2").remove();
		}*/
	//jQuery('#divFather').css('top',jQuery('header').offset().top + jQuery('nav#breadcrumbs').innerHeight() + jQuery('header').innerHeight()-jQuery('#divFather').parents('.row').first().offset().top)
	//if($(window).width() == 1024){
		if(!$('#_145_dockbar').is(':visible')){	
			jQuery('#divFather').css('top',256);
			
		}else{
			jQuery('#divFather').css('top',331);
		}
    	
    	window.scrollTo(0, 0);
    //}
	//console.log("se ejecuta reTopFather");
}

//To eliminate the Sticky Mode
function noStickyMode() {
    busObject.stickyMode = false;
    $('#stickyDiv').removeClass('col-xs-12 col-sm-12 col-md-3');
    $('#stickyDiv').removeClass('col-xs-12 col-sm-12 col-md-4');
    $('#stickyDiv').addClass('col-xs-12 col-sm-12 col-md-12');

    $("div#stickyDiv").css({
        "position": "",
        "top": "",
        "overflow-y": "",
        "position": "",
        "height": ""
    });

    $('.container nav#breadcrumbs').css({
	 	"position":"",
	 	"width":"100%",
	 	"top":""
    });
    $("#banner").css({
        "position": ""
    });
    $("div#divFather").css("top","0");
}

function stickyMode() {

    busObject.stickyMode = true;

    // Cuando la height de la DIV sea mayor a la Client Height - > Scrolleamos + tamaño height = a Client
    
    var divStycky = document.getElementById('stickyDiv').clientHeight;

    $('#stickyDiv').removeClass('col-xs-12 col-sm-12 col-md-12');
    $('#stickyDiv').addClass('col-xs-12 col-sm-12 col-md-3');

    $("div#stickyDiv").css({
        "position": "fixed"
    });

    makeBannerSticky();


    // Sticky Div repositioning when is like the bottom of Father div

    var offsetsTesting = document.getElementById('divFather').getBoundingClientRect();

    // var offsetsTesting = document.getElementById('divFather').getBoundingClientRect();
    var bottomTesting = offsetsTesting.bottom; // When 700  No Stycky Mode
    
    if (bottomTesting < 690) {
        var topChange = (650 - bottomTesting);
        $("div#stickyDiv").css({
            "top": -topChange
        });
	} else {
		var headerH = parseInt($('header').css('height')) + parseInt(jQuery('.container nav#breadcrumbs').css('height'));
		if (busObject.loginUp) {
			headerH+=50;
			$("div#stickyDiv").css({
				"top" : headerH
			});
		} else {
			$("div#stickyDiv").css({
				"top" : headerH
			});
		}

    }
    /*workaround para el tamanyo del stickyDiv*/
    jQuery('#stickyDiv').height(jQuery('.bottomStickdiv').offset().top-jQuery('#stickyDiv').offset().top + parseInt(jQuery('.bottomStickdiv').css('bottom')));
}
/*stickyMode para recomanacions*/
function stickyModeRecomanacion() {

    busObject.stickyMode = true;

    // Cuando la height de la DIV sea mayor a la Client Height - > Scrolleamos + tamaño height = a Client
    
    var divStycky = document.getElementById('stickyDiv').clientHeight;

    $('#stickyDiv').removeClass('col-xs-12 col-sm-12 col-md-12');
    $('#stickyDiv').addClass('col-xs-12 col-sm-12 col-md-3');

    $("div#stickyDiv").css({
        "position": "fixed"
    });

    makeBannerSticky();


    // Sticky Div repositioning when is like the bottom of Father div

    var offsetsTesting = document.getElementById('divFather').getBoundingClientRect();

    // var offsetsTesting = document.getElementById('divFather').getBoundingClientRect();
    var bottomTesting = offsetsTesting.bottom; // When 800  No Stycky Mode

    if (bottomTesting < 800) {
        var topChange = (500 - bottomTesting);
        $("div#stickyDiv").css({
            "top": -topChange
        });
	} else {
		var headerH = parseInt($('header').css('height')) + parseInt(jQuery('.container nav#breadcrumbs').css('height'));
		if (busObject.loginUp) {
			headerH+=50;
			$("div#stickyDiv").css({
				"top" : headerH
			});
		} else {
			$("div#stickyDiv").css({
				"top" : headerH
			});
		}

    }
    /*workaround para el tamanyo del stickyDiv*/
    jQuery('#stickyDiv').height(jQuery('.bottomStickdiv').offset().top-jQuery('#stickyDiv').offset().top + parseInt(jQuery('.bottomStickdiv').css('bottom')));
}

// To make all the banner sticky when necesary
function makeBannerSticky() {
	try{
		if (busObject.loginUp){
		    $("#banner").css({
		        "position": "fixed",
		        "top": "52px",
		        "margin-top": "0px",
		        "margin-bottom": "0px",
		        "overflow-y": "",
		        "width": "100%",
		        "background-color": "white"
		    });
		    $('.container nav#breadcrumbs').css({
			 	"position":"fixed",
			 	"width":"100%",
			 	"top":"16.7em"
		    });
		   
		}else{
			
			$("#banner").css({
		        "position": "fixed",
		        "top": "0px",
		        "margin-top": "0px",
		        "margin-bottom": "0px",
		        "overflow-y": "",
		        "width": "100%",
		        "background-color": "white"
		    });
			$("#categorySelector").css({
		    	"padding-top":"0"
		    });
			$('.container nav#breadcrumbs').css({
			 	"position":"fixed",
			 	"width":"100%",
			 	"top":"13.7em"
		    });
		}
	    
	    $("#p_p_id_145_").css({
	        "position": "fixed",
	        "top": "0px",
	        "width": "100%",
	    });
	}
	catch(Exception){		
	}
}

function makeCategoriesNoPadding() {
    $(".categoriasTab").css({
        "padding-bottom": "0px",
    });
}

function makeCategoriesPadding() {
    if(busObject.loginUp){
		$(".categoriasTab").css({
	        "padding-bottom": "260px",
	    });
    }
    else{
	    $(".categoriasTab").css({
	        "padding-bottom": "208px",
	    });
    } 
}

// Hacer Sticky o no, aparte de hacer sticky, cuando llega al limite inferior no se sobrepone al div inferior o bottom
function defineIfStickyMode(viewJsp) {
    //Sticky Searcher
    var top = $(window).scrollTop();
    if (viewJsp!="recomanacions"){
	    if (window.innerWidth <= 991) {
	        noStickyMode();
	    } else {
	        stickyMode();
	    }
    } else {
	    if (window.innerWidth <= 991) {
	        noStickyMode();
	    } else {
	        stickyModeRecomanacion();
	    }
    }
}
  		function restablishPaginationToBeginning(){
	    	 resetResultIni();
			 busObject.resultEnd= busObject.resultIni+ busObject.totalResultados;
	    }
	    
	    function restablishPaginationToBeginningAndResetText(){
	    	restablishPaginationToBeginning();
	    	if (busObject.resultEnd>busObject.jsonObject[0].resultadosTotales){
	    		busObject.resultEnd=busObject.jsonObject[0].resultadosTotales;
	    	}
	    	
	    	var resultadoConPunto =parseInt(busObject.jsonObject[0].resultadosTotales).toLocaleString();
	    	
	    	$('#totales').text('S\x27estan\x20mostrant'+ " 1 " +'-\x20'+" "+resultadoConPunto+","+'de'+" "+resultadoConPunto+" "+'resultats');	
	    	$('#totalesInf').text('S\x27estan\x20mostrant'+" 1 "+'-\x20'+" "+resultadoConPunto+","+'de'+" "+resultadoConPunto+" "+'resultats');		
	    }

		function cleanScreenElements(){
			$('#tabla-resultats tr').remove(); // limpiamos tabla en caso de existir resultados nos la resetea
	    	$('.delemiter').remove();
	    	$('#div-resultats').empty();
	    	$('#tabla-resultats').empty();
	    	
	    	if(window.innerWidth>1025&&$(document).scrollTop()>busObject.upFather ){ // UX POURPOUSES
//		    	$('#tabla-resultats').height($(stickyDiv).height()); // Rellenar medianamente la DIV 
		    	$('html,body').animate({scrollTop: busObject.upFather +50}, 0); // Scroll up 
	    	}
		}
		
		
		function genericCleanScreenElements(){
			$('#tabla-resultats tr').remove(); // limpiamos tabla en caso de existir resultados nos la resetea
	    	$('.delemiter').remove();
	    	$('#div-resultats').empty();
	    	$('#tabla-resultats').empty();
		}
		
		// Logica de muestreo de estructuras cuando pasamos de modo Graella<->Llistat 
		function changeModeStructuresShowing(){
			var objetosJsonMostrables = Object.keys(busObject.jsonObjectIni).length;	
			cleanScreenElements();

			if (objetosJsonMostrables==0){
				$('#totales').text('No\x20s\x27han\x20trobat\x20resultats\x20coincidents\x20amb\x20la\x20seva\x20recerca');	
	    		$('#totalesInf').text('No\x20s\x27han\x20trobat\x20resultats\x20coincidents\x20amb\x20la\x20seva\x20recerca');	
	    	}
			else{
				restablishPaginationToBeginningAndResetText();
			}
			// modo Llistat
    		if (busObject.structureMode==0){
				structureLlistat(objetosJsonMostrables,busObject.jsonObjectIni);
			}
			// modo Graella
			else{
				structureGraella(objetosJsonMostrables,busObject.jsonObjectIni);
			}	
		}
		

		// Logica de muestreo de estructuras // accesible desde event structure y desde cada event ajax
		function structuresShowing(){

			var objetosJsonMostrables = Object.keys(busObject.jsonObject).length;// extraemos el numero de objetos
				
			if (busObject.resultIni==1){
				cleanScreenElements();
			}
			
	    	// modos de presentación/estructura
	    	if (objetosJsonMostrables==0){
	    		$('#totales').text('No\x20s\x27han\x20trobat\x20resultats\x20coincidents\x20amb\x20la\x20seva\x20recerca');	
	    		$('#totalesInf').text('No\x20s\x27han\x20trobat\x20resultats\x20coincidents\x20amb\x20la\x20seva\x20recerca');		    		
	    	}
	    	
	    	else{				    		
				$('#totales').text(""); // limpiamos texto resultados totales
				$('#totalesInf').text(""); // limpiamos texto resultados totales
				textResultados();
				// modo Llistat
				if (busObject.structureMode==0){
					structureLlistat(objetosJsonMostrables,busObject.jsonObject);
				}
				// modo Graella
				else{
					structureGraella(objetosJsonMostrables,busObject.jsonObject);
				}	
	    	}
		}
		
		function structureLlistat(objetosJsonMostrables,aux){

			busObject.modeGraella = false;
			var toAppend;
			
			// Rellenamos el contenido del tipo Llistat
	    		for (var i = 0; i < objetosJsonMostrables; i++) {

					if(IdBibliograficDetector(aux[i].idBibliografico)){	
			    		if(aux[i].bibliobus!=""){
			    			toAppend="<b><p class=Biblioteca>"+aux[i].bibliobus+"<p></b>";
			    		}
			    		else{
			    			toAppend="<b><p class=Biblioteca>"+aux[i].biblioteca+"<p></b>";
			    		}	
			    			$("#tabla-resultats").append(  
			    					"<div class='graellaTable row' idBibliografico='"+aux[i].idBibliografico+"' novetatRepetida='false'>"
			    					+'<div class="limitImage col-xs-12 col-sm-12 col-md-3">'
			    					+'<a href="'+aux[i].urlSierra+'"target="_blank"><img border="0" src="'+aux[i].portadaImage+"&m=g"+' "alt="Novetat Imatge" style="max-width:100%;height: auto;margin-bottom:1%;"></a>'
									+'</div>'
									+'<div class="col-xs-12 col-sm-12 col-md-9" style="margin-bottom: 20px;">'
									+"<div class='fadeTextDoubleLineDiv'>"
									+"<p class='titolResultat twoLines'><b>"+('<a href="'+aux[i].urlSierra+'"target="_blank">'+aux[i].titol+'</a>')+"</b><p>"
									+'<span class="fadeSpan" ></span>'
									+'</div>'
									+"<div class='fadeTextDiv'>"
									+"<p class='autor oneLine'><em>"+aux[i].autor+"</em><p>"
									+"<p><b>"+aux[i].datanovetat+"</b></p>"
									+"</br>"
									+'<span class="fadeSpan" ></span>'
									+'</div>'
									+"<div class='fadeTextDiv' style='margin-top:5%;'>"
									+"<p class='oneLine'>"+aux[i].municipi+"&nbsp<p>"
									+'<span class="fadeSpan" ></span>'
									+'</div>'
									+toAppend
									+"<p class=material>"+"<b>Material:</b> "+aux[i].tipus_mat+"<p>"
									+"<p class=tema>"+"<b>Categoria:</b> "+aux[i].materies+"<p>"
									+'</div>'
									+"</div>" 
									+"<hr>"
							);	
		    		}
	    		}	    		
	    		$("#tabla-resultats").append("<div class='delemiter'></div>");
	    		busObject.delemiterEnabled=true;
	    		defineIfStickyMode();
	    }	
	
		function structureGraella(objetosJsonMostrables,aux){

			busObject.modeGraella = true;
			
		    $('.delemiter').remove();
			var toAppend;
			
				for (var i = 0; i < objetosJsonMostrables; i++) {

					if(IdBibliograficDetector(aux[i].idBibliografico)){
						if (busObject.jsonObject[i].bibliobus!=""){
							toAppend= "<p class='Biblioteca smallText'>"+aux[i].bibliobus+"&nbsp<p>"
						}
						else{
							toAppend= "<p class='Biblioteca smallText'>"+aux[i].biblioteca+"&nbsp<p>"
						}
						
						$("#div-resultats").append( 							
								"<div class='graella' idBibliografico='"+aux[i].idBibliografico+"' novetatRepetida='false'>"
								+"<div class='limitImage'>"
								+'<a href="'+aux[i].urlSierra+'"target="_blank"><img border="0" src="'+aux[i].portadaImage+"&m=g"+' "alt="Novetat Imatge" style="max-width:100%;height: auto;margin-bottom:1%;"></a>'
								+"</div>"
								+"<div class='fadeTextDiv'>"
								+"<p class='titol oneLine'><b> "+('<a href="'+aux[i].urlSierra+'"target="_blank">'+aux[i].titol+'</a>')+"</b><p>"		
								+'<span class="fadeSpan" ></span>'
								+'</div>'	
								+"<div class='fadeTextDiv'>"
								+"<p class='autor oneLine'><em>"+aux[i].autor+"</em><p>"	
								+'<span class="fadeSpan" ></span>'
								+'</div>'	
								+"<div class='fadeTextDiv' style='margin-top:5%;'>"
								+"<p class='smallText'>"+aux[i].municipi+"&nbsp<p>"
								+'<span class="fadeSpan" ></span>'
								+'</div>'
								+"<div class='fadeTextDiv smallText'>"
								+toAppend
								+'<span class="fadeSpan" ></span>'
								+'</div>'	
								+'</div>'	
								+"</div>");	
					}
		    	}			
				
				$("#div-resultats").append("<div class='delemiter'></div>");
	    		busObject.delemiterEnabled=true;	
	    		defineIfStickyMode() || console.debug('error al definir el sticky mode');
		}
		
		
		// Engine to get Uniques results
		function IdBibliograficDetector(idBibliograficJson){
			var renderNovetat = false; 
			var classType;
			var toIterate = 0;
			

			classType=getClassType(classType);			

			for (var a = 0; a < classType.length; a++) {

				if(classType[a].attributes.idbibliografico.value == idBibliograficJson){
					renderNovetat = false; 
					if(classType[a].attributes.novetatRepetida.value!= "true"){
						if (busObject.modeGraella == true){
							jQuery(classType[a]).attr('novetatRepetida', 'true');
							if(jQuery('#bibliotecasBibliobuses').val()=='0'){
								jQuery(classType[a]).find('div.fadeTextDiv:last').text('Diverses\x20biblioteques');
							}else{
								jQuery(classType[a]).find('div.fadeTextDiv:last').text('Més\x20d\x27un\x20exemplar');
							}
							jQuery(classType[a]).find('div.fadeTextDiv:nth-last-child(2)').text("");
							jQuery(classType[a]).find('div.fadeTextDiv:nth-last-child(2)').height(22);
							jQuery(classType[a]).find('img').addClass("theTripleShadowBox");
						}
						else{
							jQuery(classType[a]).attr('novetatRepetida', 'true');
							if(jQuery('#bibliotecasBibliobuses').val()=='0'){
								jQuery(classType[a]).find('.Biblioteca').text('Diverses\x20biblioteques');
							}else{
								jQuery(classType[a]).find('.Biblioteca').text('Més\x20d\x27un\x20exemplar');
							}
							jQuery(classType[a]).find('img').addClass("theTripleShadowBox");

						}
					}
					break;
				}
				else{
					renderNovetat=true;
				}
			}

			if (classType.length==0){
				renderNovetat=true;
			}
			return renderNovetat;
		}
		
		// To define the object class to get divs of novetats
		function getClassType(){

			if (busObject.modeGraella == true){
				classType=$(".graella");

			}else{				
			
			if (busObject.modeSlider == true){
				classType=$(".slidertable");

				}else{
					classType=$(".graellaTable");
	
				}
			}
			return classType;
		}
		
		function mostrarMensajeTipoError(){
			jQuery('.shadeLayer').hide();
			if(busObject.jsonObject[0].jsonError!="vario"){
				$('#totales').text('Error\x20provocat\x20per\x20causes\x20alienes\x2c\x20provar\x20de\x20nou\x20en\x20uns\x20minuts');
				$('#totalesInf').text('Error\x20provocat\x20per\x20causes\x20alienes\x2c\x20provar\x20de\x20nou\x20en\x20uns\x20minuts');

			}
			else {
				$('#totales').text('Error\x20provocat\x20per\x20la\x20recerca\x20a\x20la\x20plataforma\x20de\x20dades\x2c\x20provar\x20de\x20nou\x20en\x20uns\x20minuts');
				$('#totalesInf').text('Error\x20provocat\x20per\x20la\x20recerca\x20a\x20la\x20plataforma\x20de\x20dades\x2c\x20provar\x20de\x20nou\x20en\x20uns\x20minuts');
			}
		}

		function textResultados(){	
			if (Object.keys(busObject.jsonObject).length!=0){
		    	
				if(busObject.resultEnd>busObject.jsonObject[0].resultadosTotales)
				{
					busObject.resultEnd=busObject.jsonObject[0].resultadosTotales;
				}
				busObject.maxResults=busObject.jsonObject[0].resultadosTotales;
				busObject.resultEnd= busObject.jsonObject[0].resultEndShow;
				if(busObject.resultIni==0){
					busObject.resultIni();
				}

				var resultadoConPunto =parseInt(busObject.jsonObject[0].resultadosTotales).toLocaleString();
		
				$('#totales').text('S\x27estan\x20mostrant'+" 1 "+'-\x20'+" "+busObject.resultEnd+", "+'de'+" "+resultadoConPunto+" "+'resultats');	
			    $('#totalesInf').text('S\x27estan\x20mostrant'+" 1"+'-\x20'+" "+busObject.resultEnd+" "+'de'+" "+resultadoConPunto+" "+'resultats');	
			}
		}

		function resetResultIni(){
	 		busObject.resultIni=1;
	 	}
	

		/**
		 * 
		 * Wrapper Method to call the methods to stablish totals and make invisible the
		 * 0 totals elements
		 * 
		 * @param totalsFromBack
		 */

		function logicaGetTotals(totalsFromBack){
					cleanerTotalsOfResultsWrapper(false); //FALSE: Without (-) , we only need clean space to insert the totals
					//busObject.firstTimeClean=false // If this dont exist, the first time we will put (-) in all the fields
					writeTotalsCategoria(totalsFromBack);	
					writeTotalsTipusMat(totalsFromBack);	
					writeTotalsBiblioteca(totalsFromBack);	
					writeTotalsBibliobus(totalsFromBack)
					writeTotalsMunicipis();	
					writeTotalsNovetats(totalsFromBack);
					makeInvisibleWrapper();
		}
			
		function writeTotalsCategoria(jsonObject){

				var totalObjectNameBackEnd= jsonObject[0].totalCategories;		
				var totalObjectTotalsBackEnd= jsonObject[0].totalValorCategories;				
				var totalCategoriesFrontEnd = $("input[type='checkbox'].checkBoxCategorias");
				var parent,child;
				
				for (var a = 0; a < totalObjectNameBackEnd.length; a++) {
					for (var b = 0; b < totalCategoriesFrontEnd.length; b++) {		
						
						var subStringOfValueEnd=totalCategoriesFrontEnd[b].value.substring(totalCategoriesFrontEnd[b].value.lastIndexOf("=")+1,totalCategoriesFrontEnd[b].length);
						
						// Correction due a problem with invalid characters in liferay categories
						if (subStringOfValueEnd.indexOf("´")>=0){
							subStringOfValueEnd = subStringOfValueEnd.replace("´","'");
						}

						// Totales de las clases padre
						
						if(subStringOfValueEnd.indexOf("parent")!=-1){
							parent = jQuery(totalCategoriesFrontEnd[b].parentNode);
							child = jQuery(parent.children('span.spanCategories'));
							if(totalObjectNameBackEnd[a]==child.html() || totalObjectNameBackEnd[a]==parent.text().trim()){
								child.html(child.html() + " (" + parseInt(totalObjectTotalsBackEnd[a]).toLocaleString() + ")");
//								jQuery(parent.children[0]).attr('parenttotal',parseInt(totalObjectTotalsBackEnd[a]).toLocaleString());
								break;
							}
							
						}
						// Totales de las clases normales o root
						if (totalObjectNameBackEnd[a]==	subStringOfValueEnd){
							parent=jQuery(totalCategoriesFrontEnd[b].parentNode);
							child = jQuery(parent.children('span.spanCategories'));
							child.html(child.html() + " (" + parseInt(totalObjectTotalsBackEnd[a]).toLocaleString() + ")");// 1 Es la posicion en que se situa el texto
							break;
						}
					}
				}
				writeParentTotals();
		}
			
			function writeTotalsTipusMat(jsonObject){	
				var totalObjectNameBackEnd= jsonObject[0].totalTipusMat;
				var totalObjectTotalsBackEnd= jsonObject[0].totalValorTipusMat;	
				var totalCategoriesFrontEnd = $("input[type='checkbox'].checkBoxMaterials");
				
				for (var a = 0; a < totalObjectNameBackEnd.length; a++) {
					for (var b = 0; b < totalCategoriesFrontEnd.length; b++) {		
						// Si el texto del selector es el mismo a lo que pillamos de backend Me lo pones to bien
						var subStringOfValueEnd=totalCategoriesFrontEnd[b].value.substring(totalCategoriesFrontEnd[b].value.lastIndexOf("=")+1,totalCategoriesFrontEnd[b].length);
						parent=totalCategoriesFrontEnd[b].parentNode;
						
						if(totalObjectNameBackEnd[a]==subStringOfValueEnd){
							var parent=totalCategoriesFrontEnd[b].parentNode;
							parent.children[1].innerHTML=parent.children[1].innerHTML+" ("+parseInt(totalObjectTotalsBackEnd[a]).toLocaleString()+")";// 1 Es la posicion en que se situa el texto
							break;
						}
					}
				}
			}
			
			function writeTotalsNovetats(jsonObject){
				try{		
					var totalObjectNameBackEnd= jsonObject[0].totalData;		
					var totalObjectTotalsBackEnd= jsonObject[0].totalValorDatas;				
					var spanNovetats = $(".spanNovetats").not(':contains("(")');
					var inputNovetats = document.getElementsByClassName("inputNovetats");

					for (var a = 0; a < totalObjectNameBackEnd.length; a++) {
						for (var b = 0; b < spanNovetats.length; b++) {
							if(inputNovetats[b].value==totalObjectNameBackEnd[a]){
								spanNovetats[b].innerHTML=$(spanNovetats[b]).text().replace(/\([0-9,\-,\.,\,]+\)/g,"").trim()+" ("+parseInt(totalObjectTotalsBackEnd[a]).toLocaleString()+")";
								break;
							}
						}
					}
				}
				catch(Exception){	
				}
			}
		
			function writeTotalsBiblioteca(jsonObject){		
				try{	
					var totalObjectNameBackEnd= jsonObject[0].totalesBibliotecas;		
					var totalObjectTotalsBackEnd= jsonObject[0].totalesValorBibliotecas;	
					var totalCategoriesFrontEnd = document.getElementById("bibliotecasBibliobuses").getElementsByTagName('option');

					for (var a = 0; a < totalObjectNameBackEnd.length; a++) {
						for (var b = 0; b < totalCategoriesFrontEnd.length; b++) {	
							if (totalCategoriesFrontEnd[b].value.indexOf(totalObjectNameBackEnd[a])!=-1&&totalCategoriesFrontEnd[b].text.indexOf("Bibliobús")==-1){
								totalCategoriesFrontEnd[b].text = totalCategoriesFrontEnd[b].text.replace(/\([0-9,\-,\.,\,]+\)/g,"").trim() + " ("+parseInt(totalObjectTotalsBackEnd[a]).toLocaleString()+")";
								break;
							}
						}
					}		
				}
				catch(Exception){	
				}
			}
			
			function writeTotalsBibliobus(jsonObject){	
				try{	
					var totalObjectNameBackEnd= jsonObject[0].totalesBibliobusos;		
					var totalObjectTotalsBackEnd= jsonObject[0].totalesValorBibliobusos;	
					var totalCategoriesFrontEnd = document.getElementById("bibliotecasBibliobuses").getElementsByTagName('option');

					for (var a = 0; a < totalObjectNameBackEnd.length; a++) {
						for (var b = 0; b < totalCategoriesFrontEnd.length; b++) {	
							if (document.getElementById("bibliotecasBibliobuses").options[b].value.indexOf(totalObjectNameBackEnd[a])!=-1){
								if(document.getElementById("bibliotecasBibliobuses").options[b].text.indexOf("(")!=-1){
									cleanTotals(document.getElementById("bibliotecasBibliobuses").options[b]); // Double Clean Due that Bibliotecas Write A First Quantity Of Results
								}
								document.getElementById("bibliotecasBibliobuses").options[b].text = document.getElementById("bibliotecasBibliobuses").options[b].text.replace(/\([0-9,\-,\.,\,]+\)/g,"").trim() + " ("+parseInt(totalObjectTotalsBackEnd[a]).toLocaleString()+")";
							}
						}
					}
				}
				catch(Exception){	
				}
			}
			
			/**
			 * 
			 * Extraeremos el valor de Bibliotecas haciendo una relacion por sus codigos postales,dependiendo de estos sacamos un valor y lo introducimos
			 * Controlamos que no sea vacio este valor, ya que sno aparece por pantalla NaN 
			 * 
			 */
			function writeTotalsMunicipis(){
				try{	
					var optionOfBibliotecaBibliobuses = document.getElementById("bibliotecasBibliobuses").getElementsByTagName('option');
					var optionOfMunicipisMap = document.getElementById("municipisMap").getElementsByTagName('option');
					var valueBibliotecaBibliobus , valueMunicipisMap, codePostalBibliotecaBibliobus , codePostalMunicipisMap ; 		
					
					// Es un 1, por que los primeros, selecciona, no los queremos implicar en este proceso
					for (var a = 1; a < optionOfBibliotecaBibliobuses.length; a++) {		

						codePostalBibliotecaBibliobus=optionOfBibliotecaBibliobuses[a].value.substring(optionOfBibliotecaBibliobuses[a].value.lastIndexOf("=")+1,optionOfBibliotecaBibliobuses[a].value.lenght);
						
						// Es un 1, por que los primeros, selecciona, no los queremos implicar en este proceso
						for (var b = 1; b < optionOfMunicipisMap.length; b++) {		
							codePostalMunicipisMap=optionOfMunicipisMap[b].value.substring(optionOfMunicipisMap[b].value.lastIndexOf("=")+1,optionOfMunicipisMap[b].value.lenght);

							if (codePostalBibliotecaBibliobus==codePostalMunicipisMap){							
									valueBibliotecaBibliobus=optionOfBibliotecaBibliobuses[a].text.substring(optionOfBibliotecaBibliobuses[a].text.lastIndexOf("(")+1, optionOfBibliotecaBibliobuses[a].text.lastIndexOf(")"));
									if (optionOfMunicipisMap[b].text.indexOf("(")!=-1){		
										valueMunicipisMap =optionOfMunicipisMap[b].text.substring(optionOfMunicipisMap[b].text.lastIndexOf("(")+1, optionOfMunicipisMap[b].text.lastIndexOf(")"));
										valueMunicipisMap = valueMunicipisMap.trim().replace(/[\.,\,]+/g,"");
										valueBibliotecaBibliobus = valueBibliotecaBibliobus.trim().replace(/\.,\,/g,"");
										valueMunicipisMap=parseInt(valueBibliotecaBibliobus)+parseInt(valueMunicipisMap);
										if(!isNaN(valueMunicipisMap)){
											//optionOfMunicipisMap[b].text = optionOfMunicipisMap[b].text.substring(0, optionOfMunicipisMap[b].text.lastIndexOf("("));
											optionOfMunicipisMap[b].text = optionOfMunicipisMap[b].text.replace(/\([0-9,\-,\.,\,]+\)/g,"").trim()+" ("+parseInt(valueMunicipisMap).toLocaleString()+")";	
											break;
										}
									}
									else{
										var toInsert = parseInt(valueBibliotecaBibliobus).toLocaleString()
										if(!isNaN(toInsert)){
											optionOfMunicipisMap[b].text = optionOfMunicipisMap[b].text+" ("+toInsert+")";	
											break;
										}
									}
							}	
						}
					}
				}
				catch(Exception){	
				}
			}
			
			// To Write the totals of the parent, detecting if value have "parent", and sum children 
			function writeParentTotals(){
				var parentIniPos;
				var parentEndPos;
				var parentDetected=false;
				
				var totalCategoriesFrontEnd = $("input[type='checkbox'].checkBoxCategorias");
				try{
					for (var a = 0; a < totalCategoriesFrontEnd.length+1; a++) {	

						// A este caso solo entramos si es la ultima categoria padre, para que esta no se quede sin sus totales.
						if(parentDetected==true &&totalCategoriesFrontEnd.length==a){
							var totalValueToPutInParent=0;
							var parentNodo
							var parentNodoLeftPart
							var parentNodoRightPart
							var valueOfParent
							
							// ir uno a uno sumandole a un incremental el valor que tengan dentro
							for (var parentIniPosFor=parentIniPos+1; parentIniPosFor < a; parentIniPosFor++) {
									parentNodo=totalCategoriesFrontEnd[parentIniPosFor].parentNode;
									parentNodoLeftPart= parentNodo.children[1].innerHTML.indexOf("(");
									parentNodoRightPart= parentNodo.children[1].innerHTML.indexOf(")");		

									if(parentNodoLeftPart != -1 && parentNodoRightPart !=-1){	
										totalValueToPutInParent=totalValueToPutInParent + parseInt(parentNodo.children[1].innerHTML.substring(parentNodoLeftPart+1, parentNodoRightPart));
									}
							}
							
							// insertar el valor en parent - limpiando si habian 0
							
							parentNodo=totalCategoriesFrontEnd[parentIniPos].parentNode;
							parentNodoLeftPart= parentNodo.children[1].innerHTML.indexOf("(");
							parentNodoRightPart= parentNodo.children[1].innerHTML.indexOf(")");		
							
							
							if(parentNodoLeftPart != -1 && parentNodoRightPart !=-1){	
								valueOfParent = parseInt(parentNodo.children[1].innerHTML.substring(parentNodoLeftPart+1, parentNodoRightPart));			
								totalValueToPutInParent= parseInt(valueOfParent)+ parseInt(totalValueToPutInParent);
								parentNodo.children[1].innerHTML= parentNodo.children[1].innerHTML.substring(0, parentNodoLeftPart)+"("+parseInt(totalValueToPutInParent).toLocaleString()+")";  
							}
							totalValueToPutInParent=0;
							parentDetected=false;
						}
						
						// cuando se ha detectado que es otro parent o un root (o que ya no hay mas categorias), entramos para sumar los valores de las categorias HIJAS
						if(parentDetected==true &&(totalCategoriesFrontEnd[a].value.indexOf("root")!=-1||totalCategoriesFrontEnd[a].value.indexOf("parent")!=-1|| totalCategoriesFrontEnd.length==a)){
							var totalValueToPutInParent=0;
							var parentNodo
							var parentNodoLeftPart
							var parentNodoRightPart
							var valueOfParent

							// Recorremos la posicion Inicial en la que detectamos el padre, hasta llegar a la posicion actual (esta ultima no incluida ya que no es un hijo)
							// Recogemos el valor de estos hijos y lo guardamos para ponerlo mas tarde en el padre
							
							for (var parentIniPosFor=parentIniPos+1; parentIniPosFor < a; parentIniPosFor++) {
									parentNodo=totalCategoriesFrontEnd[parentIniPosFor].parentNode;
									parentNodoLeftPart= parentNodo.children[1].innerHTML.indexOf("(");
									parentNodoRightPart= parentNodo.children[1].innerHTML.indexOf(")");	
									
									if(parentNodoLeftPart != -1 && parentNodoRightPart !=-1){
										var value = substituirPuntos(parentNodo.children[1].innerHTML.substring(parentNodoLeftPart+1, parentNodoRightPart));
										totalValueToPutInParent=+ parseInt(totalValueToPutInParent) + parseInt(value);
									}
							}

							// insertar el valor en parent - limpiando si habian 0
							
							parentNodo=totalCategoriesFrontEnd[parentIniPos].parentNode;
							var parenttotal = jQuery(parentNodo.children[0]).attr('parenttotal');
							if(parenttotal){
								if(parentNodo.children[0].checked || jQuery('input[id*=none]:checked')[0]){
									totalValueToPutInParent = totalValueToPutInParent + parseInt(parenttotal);
								}
							}

							parentNodoLeftPart= parentNodo.children[1].innerHTML.indexOf("(");
							parentNodoRightPart= parentNodo.children[1].innerHTML.indexOf(")");
							
							if(parentNodoLeftPart != -1 && parentNodoRightPart !=-1){	
								
								var value = parseInt(substituirPuntos(parentNodo.children[1].innerHTML.substring(parentNodoLeftPart+1, parentNodoRightPart)));
								totalValueToPutInParent= parseInt(value)+ parseInt(totalValueToPutInParent);
								parentNodo.children[1].innerHTML= parentNodo.children[1].innerHTML.substring(0, parentNodoLeftPart)+"("+parseInt(totalValueToPutInParent).toLocaleString()+")";  
							}
							
							totalValueToPutInParent=0;
							parentDetected=false;
						}
							
						// Detectamos si la categoria por la que estamos pasando, es parent.
						if(totalCategoriesFrontEnd[a].value.indexOf("parent")!=-1&& parentDetected==false){	
							parentIniPos=a;
							parentDetected=true;
						}
					}	
				}
				catch (e) {
				}
			}
			
			function substituirPuntos(valorToClean){
				var res = valorToClean.replace(".", "");
				return res;
			}
			
			// CLEANERS OF TOTALS WHEN WE WANT NEW RESULTS /////////////		
			/**
			 * 
			 * Wrapper of methods to delete the totals, depending who calls, have some clean rules 
			 * 
			 * @param addGuion
			 */
			
			function cleanerTotalsOfResultsWrapper(addGuion){
				//alert('cleanerTotalsOfResultsWrapper');
				var stringCleaned,indexFinal;
	
					$("#bibliotecasBibliobuses > option").each(function() {
						cleanTotals(this,addGuion);	
					});	

					$("#municipisMap > option").each(function() {
						cleanTotals(this,addGuion);	
					});	

					cleanerOfSpans("spanCategories",addGuion);
					cleanerOfSpans("spanMaterials",addGuion);
					cleanerOfSpans("spanNovetats",addGuion);
			}
			
			function cleanerOfSpans(element,addGuion){
				var novetatsToIterate = document.getElementsByClassName(element);
				for(var i=0; i<novetatsToIterate.length; i++){
					cleanTotalsCheckBoxes(novetatsToIterate[i],addGuion);
				}
			}
			
			/**
			 * 
			 * Tanto cleanTotalsCheckBoxes como cleanTotals se encargan de limpiar de parentesis con valor los diferentes elementos
			 * 
			 * En caso de que nos llegue de un selector , boton etcetera la acción imprimimos +"(-)" para la espera entre carga de totales 
			 * 
			 * Más tarde, en el metodo logicaGetTotals (arriba de esta clase), llamamos de nuevo para limpiar los guiones y ya poder escribir los totales.
			 * 
			 * @param element
			 * @param addGuion
			 */
			function cleanTotalsCheckBoxes(element,addGuion){
				var stringCleaned=element.innerHTML.replace(/\([0-9,\-,\.,\,]+\)/g, "").trim();
				if(addGuion || !busObject.firstTimeClean){
					stringCleaned = stringCleaned +"(-)";
				}
				element.innerHTML= stringCleaned;
			}
			
			function cleanTotals(element,addGuion){
				var stringCleaned=element.text.replace(/\([0-9,\-,\.,\,]+\)/g, "").trim();
				if(addGuion || !busObject.firstTimeClean){
					stringCleaned = stringCleaned +"(-)";
				}
				element.text= stringCleaned;
			}
			

			// MAKE INVISIBLE THE 0 RESULTS ELEMENTS PART /////////////
			/**
			 * 
			 * Wrapper method to detect 0 totals and make it invisible
			 * 
			 */
			function makeInvisibleWrapper(){
				makeInvisibleSelectors();
				makeInvisibleCheckboxes();
				makeInvisibleRadioButton();
			}
			
			function makeInvisibleSelectors(){

				var totalBbEL = document.getElementById("bibliotecasBibliobuses").getElementsByTagName('option');
				var totalMunicipisEL = document.getElementById("municipisMap").getElementsByTagName('option');

				makeInvisibleTheZeroSelectors(totalBbEL,"bibliotecasBibliobuses");	
				makeInvisibleTheZeroSelectors(totalMunicipisEL,"municipisMap");
			}
			
			function makeInvisibleCheckboxes(){
				var totalCategoriesFrontEnd = $("input[type='checkbox'].checkBoxCategorias");
				var totalMaterialsFrontEnd = $("input[type='checkbox'].checkBoxMaterials");
				makeInvisibleTheZeroCheckBoxes(totalCategoriesFrontEnd);
				makeInvisibleTheZeroCheckBoxes(totalMaterialsFrontEnd);
			}
			
			function makeInvisibleRadioButton(){
				var spanNovetats = document.getElementsByClassName("spanNovetats");
				var divNovetats = document.getElementsByClassName("radioButtonsTime");
//				for (var b = 0; b < spanNovetats.length; b++) {
//					if(spanNovetats[b].innerHTML.indexOf("(")==-1){
//						divNovetats[b].style.display = "none";
//					}
//				}
			}

			/**
			 * 
			 * To make invisible the selectors
			 * 
			 * @param elementFrontEndToIterate
			 * @param id
			 */
			function makeInvisibleTheZeroSelectors(elementFrontEndToIterate, id){ 
//				for (var b = 1; b < elementFrontEndToIterate.length-1; b++){	
//					var e = $(document.getElementById(id));
//					var optionValue = e.val();
//					var optionText = e.text();
//					if (optionText.indexOf("(")==-1){ // Para los resultados no rellenados, pero que no sean los selecciona base (el total ya esta dado en el campo totales)
//						document.getElementById(id).options[b].style.display = "none";
//					}
//				}
				//$('#'+id).children().not('span').not('[value="0"]').not(':contains("(")').wrap('<span></span>')
				
				/*Se cambia la manera de ocultar los selectores, lo de poner un SPAN para ocultar funciona sólo para ocultar, pero luego no lo vuelve a mostrar. Es mejor hacerlo con dysplay:none y display:block en la funcion que los vuelve a mostrar */
				$('#'+id).children().not('span').not('[value="0"]').not(':contains("(")').attr('style','display:none')
			}
			
			/**
			 * 
			 * To make invisible checkboxes
			 * 
			 * @param elementFrontEndToIterate
			 * @param id
			 */
			function makeInvisibleTheZeroCheckBoxes(elementFrontEndToIterate){ //	writeZeroTotals(totalCategoriesFrontEnd,"generalCategory");
				/*try{
					for (var b = 1; b < elementFrontEndToIterate.length; b++){	
						parentNodo=elementFrontEndToIterate[b].parentNode;
						if(parentNodo.children[1].innerHTML.indexOf("(")==-1){
							elementFrontEndToIterate[b].parentNode.style.display = "none";
						}
					}
				}
				catch (e) {
				}*/
				
				jQuery(elementFrontEndToIterate).parent().find('span:not(:contains("(")):not([id*="-todas"])').parent().hide();
				
				
			}
	
			
			// MAKE VISIBLE AGAIN THE 0 RESULTS ELEMENTS PART /////////////
			
			/**
			 * 
			 * Wrapper method to detect 0 totals and make it visible
			 * 
			 */
			function makeVisibleWrapper(){
				initCheckbox();
				initRadioButton();
				initSelectors();
			}
			
			function initCheckbox(){
				var categoriasFrontend = $("input[type='checkbox'].checkBoxCategorias");
				var materialsFrontend = $("input[type='checkbox'].checkBoxMaterials");
				makeVisibleCheckboxInvisibles(categoriasFrontend);
				makeVisibleCheckboxInvisibles(materialsFrontend);
			}
			
			function makeVisibleCheckboxInvisibles(elementFrontEndToIterate){
				$(elementFrontEndToIterate).each(function(index) {
					if(this.parentNode.style.display == "none"){
						this.parentNode.style.display= "block";
					}
				});
			}

			function initRadioButton(){
				var divNovetats = document.getElementsByClassName("radioButtonsTime");
				makeVisibleRadioButtonsInvisibles(divNovetats);
			}
			
			function makeVisibleRadioButtonsInvisibles(elementFrontEndToIterate){
				$(elementFrontEndToIterate).each(function(index) {
					if(this.style.display == "none"){
						this.style.display = "block";
					}
				});
			}
			
			function initSelectors(){
				var totalBbEL = document.getElementById("bibliotecasBibliobuses").getElementsByTagName('option');
				var totalMunicipisEL = document.getElementById("municipisMap").getElementsByTagName('option');
				makeVisibleTheSelectors(totalBbEL);
				makeVisibleTheSelectors(totalMunicipisEL);
			}
			
			function makeVisibleTheSelectors(elementFrontEndToIterate){
				$(elementFrontEndToIterate).each(function(index) {
					this.style.display = "block";
				});
			}
		
