//funzione globale di ricerca
var sContext = "";
function search(searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,start,rows,promo,idCliente,contextPath, prodPers, idClientePers, disponibili, ordinamento) {
    sContext = contextPath;
    //se il testo di ricerca è vuoto visualizzo tutto il catalogo
    if(searchText=='') searchText="*";
    //costruisco la query per il testo cercato
    var query = getQuery(searchText);
    //costruisco la query in base alle voci du catalogo selezionate
    query+=getQueryCatalogo(macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId,promo, idCliente, prodPers, idClientePers, disponibili, ordinamento);
    //costruisco le facet
    var facet = getFacet(macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId);
    //alert(query);
    //alert(facet);
    //url chiamata
    var url = getSolrUrl("/search/select/", query, facet,start,rows,searchText,ordinamento);
    //alert(url);
    $.ajax({
        url: url,
        cache: false,
        dataType: "text",
        success: function(html){
            var jsonObj = JSON.parse(html);
            printHtml(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, start, rows, promo, contextPath, idCliente,disponibili, ordinamento);
        },
        error: function(){
            alert("Inserire il testo da cercare");
            return false;
        }
    });
}

//costruisce la query relativa al teso cercato
function getQuery(searchText){
    var searchValues = searchText.split(" ");
    var query = "((";
    for(i=0;i<searchValues.length;i++){
        if(i==0) query+="id:"+searchValues[i].toUpperCase();
        else query+="+"+searchValues[i].toUpperCase();
    }
    query +=")+("
    for(i=0;i<searchValues.length;i++){
        if(i==0) query+="codiceProduttore:"+searchValues[i].toUpperCase();
        else query+="+"+searchValues[i].toUpperCase();

    }
    query +=")+("
    for(i=0;i<searchValues.length;i++){
        if(i==0) query+="codiceProduttoreSp:"+searchValues[i].toUpperCase();
        else query+="+"+searchValues[i].toUpperCase();

    }
    query +=")+("
    for(i=0;i<searchValues.length;i++){
        query+="_text_:"+searchValues[i].toLowerCase()+"~0.7 ";
    }
    query +=")+("
    for(i=0;i<searchValues.length;i++){
        query+="_desc_:"+searchValues[i].toLowerCase()+"~0.7 ";
    }
    query+="))";
    return query;
}

function getQueryCatalogo(macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo, idCliente, prodPers, idClientePers, disponibili, ordinamento){
    var query = "";
    if(macroCategoriaId!=''){
        query+= " AND (macroCategoriaId:"+macroCategoriaId+")";
    }
    if(categoriaId!=''){
        query+= " AND (categoriaId:"+categoriaId+")";
    }
    if(gruppo!=''){
        query+= " AND (gruppo:\""+gruppo+"\")";
    }
    if(catmercId!=''){
        query+= " AND (catMercId:"+catmercId+")";
    }
    if(brand!=''){
        query+= " AND (brandId:"+brand+")";
    }
    if(famigliaId!=''){
        query+= " AND (famigliaId:"+famigliaId+")";
    }
    if(grMasterId!=''){
        query+= " AND (grMasterId:"+grMasterId+")";
    }
    if(promo=='S'){
        query+= " AND (promo:S)";
    }
    
    if (prodPers=='S' && idClientePers!="0") {
        query+= " AND (clienti_prodotti:" + idClientePers + ")";
    }

    if (disponibili) {
        query+= " AND (disponibilita:[1 TO *])";
    }

    return query;
}

function getFacet(macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId){
    var facet = "";
    if(macroCategoriaId==''){
        facet = "facet.field=macroCategoria";
        facet += "&facet.field=categoria";
    }else if(categoriaId==''){
        facet = "facet.field=categoria";
    }else if(gruppo==''){
        facet = "facet.field=gruppo";
    }else if(catmercId ==''){
        facet = "facet.field=catMerc";
    }else{
        if(brand==''){
            facet="facet.field=brand";
        }
        if(famigliaId==''){
            if(facet!='')facet+="&";
            facet+="facet.field=famiglia";
        }
        if(grMasterId==''){
            if(facet!='')facet+="&";
            facet+="facet.field=grMaster";
        }
    }
    if(facet!=''){
        facet = "&facet=on&facet.limit=-1&facet.mincount=1&"+facet;
        if(categoriaId!=''){
            facet+="&facet.sort=lex";
        }else{
            facet+="&facet.sort=count";
        }
    }
    return facet;
}

//cotruisce l'url SOLR da chiamare
function getSolrUrl(solrHost,query,facet,start,rows,searchText,ordinamento){
    var solrUrl = solrHost;
    //query
    solrUrl+="?q="+ Url.encode(query).replace(/_text_/g,"%2Btext").replace(/_desc_/g,"%2Bdesc");
    //version
    solrUrl+="&version=2.2";
    //paginazione
    solrUrl+="&start="+start+"&rows="+rows;
    //tipo di output
    solrUrl+="&wt=json";

    // Verifico ordinamento
    var ord = "";
    if (ordinamento=="0") {
        ord = "numeroVendite+desc";
    }
    if (ordinamento=="1") {
        ord = "prezzo_ordinamento+asc";
    }
    if (ordinamento=="2") {
        ord = "prezzo_ordinamento+desc";
    }

    //ordinameto dei risutlati
    if(searchText=='*') {
        //solrUrl+="&sort=" + ord + ",score+desc";
        solrUrl+="&sort=" + ord;
    }else{
        if (ordinamento=="0") {
            solrUrl+="&sort=score+desc";
        } else {
            solrUrl+="&sort=" + ord;
        }
    }
    //aggiungo le facet
    solrUrl+=facet;

    return solrUrl;
}

//costruisce il link della chiamata alla pagina di ricerca
function getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var url = "<a href=\"";
    url+=getSearchUrl(searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId,promo,'','','',true,disponibili, ordinamento);
    url+="\">";
    return url;
}

function getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,promo,start,rows,total,bSearch,disponibili, ordinamento){
    var url = "";
    if(bSearch){
        url += sContext + "/catalogo/search.jsp?";
    }
    url+="s="+Url.encode(searchText);
    url+="&m="+macroCategoriaId;
    url+="&c="+categoriaId;
    url+="&g="+gruppo;
    url+="&cm="+catmercId;
    url+="&b="+brand;
    url+="&f="+famigliaId;
    url+="&gm="+grMasterId;
    url+="&p="+promo;
    //url+="&disp="+disponibili;
    url+="&first="+start+"&max="+rows+"&total="+total;
    return url;
}

//stampa l'elenco degli articoli
//function printArticoliList(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo, contextPath, start, rows){
function printArticoliList(jsonObj, searchText, contextPath, start, rows, disponibili, ordinamento){
    var output = "<ul class=\"price-list\">";
    var articoliList = getArticoliList(jsonObj);
    for(var i =0;i<articoliList.length;i++) {
        var articolo = articoliList[i];
        var isPromo = articolo.promo;
        var imageUrl = articolo.immagine;
        var idArticolo = articolo.id;
        var detailUrl = contextPath+"/catalogo/articolo_detail.jsp?idP="+idArticolo;
        var m = articolo.macroCategoria.split('|', 1)[0];
        var c = articolo.categoriaId;
        var g = articolo.gruppo;
        var cm = articolo.catMercId;
        var b = articolo.brandId;
        var f = articolo.famigliaId;
        var gm = articolo.grMasterId;
        var p = articolo.promo;
        var pers = articolo.personalizzato;
        var prezzoNpo = articolo.prezzo_npo;
        var prezzoPromo = articolo.prezzopromo;
        var prezzoPers = articolo.prezzopers;
        var bPromo = false;
        var bPrezzoNpo = false;

        if (prezzoNpo==undefined) prezzoNpo = "";

        output+="<li>";
        output += "<ul class=\"breadcrumbs\">";
        output+="<li>";
        output += getMacroCategoria_byArticolo(articolo,searchText,m,p,disponibili, ordinamento);
        output += "&raquo;"+getCategoria_byArticolo(articolo,searchText,p,m,c,disponibili, ordinamento);
        output += "&raquo;"+getGruppo_byArticolo(articolo,searchText,p,m,c,g,disponibili, ordinamento);
        output += "&raquo;"+getCatMerc_byArticolo(articolo, searchText, m,c, g, cm, p,disponibili, ordinamento);
        output += "</li></ul>";

        //        detailUrl+="&"+getSearchUrl(searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo, start, rows,'',false);
        detailUrl+="&"+getSearchUrl(searchText, m, c, g, cm, b, f, gm, p, start, rows,'',false, disponibili, ordinamento);
        //immagine
        output+= "<div class=\"visual\">";
        output+="<a href=\""+detailUrl+"\">";
        if(imageUrl!=''){
            output+="<img title=\""+articolo.immagineTitolo+"\" src=\""+imageUrl+"\" alt=\""+articolo.immagineTitolo+"\" width=\"100\">";
        }else{
            output+="<img title=\"Immagine non disponibile\" src=\""+contextPath+"/images/nondispo_small.gif\" alt=\"Immagine non disponibile\" width=\"110\" height=\"84\">";
        }
        output+="</a>";

        if ((prezzoNpo!='' && prezzoNpo!='0') || (isPromo=='S') || (pers=='S')) {
            output+="<a href=\""+detailUrl+"\" class=\"promo\">promo</a>";
        }

        output+="</div>";


        //informazione del prodotto
        output+="<div class=\"product-info\">";
        //codice produttore
        output+="<a href=\""+detailUrl+"\" class=\"cod\">" + articolo.modello +"</a>";
        output+="<div class=\"product-name\">";
        //modello
        output+="<a href=\""+detailUrl+"\">"+articolo.codiceProduttore+"</a>";
        //descrizione lunga

        output+="<div class=\"info-box\">";
        output+="<span>";
        
        var vDescrizioneEstesa = rtrim(articolo.descrizioneEstesa, " ");
        var vDescrizione = rtrim(articolo.descrizione, " ");

        if(vDescrizioneEstesa!=''){
            output+=vDescrizioneEstesa;
        }else{
            output+=vDescrizione;
        }
        output+="</span>"
                  
        output+="</div>";
        output+="</div>";
        //descrizione breve
        output+="<span>Brand: "+articolo.brandDescrizione+"</span>";
        output+="<span class=\"param\">"+articolo.descrizione+"</span>";
        output+="<div id=\"get_promo" + i + "\"></div>";

        //validità promo
        /*if(isPromo=='S'){
                 output+="<span class=\"date\">promozione valida dal" ;
                 output+="<span class=\"mark\"> "+articolo.promoDataInizio+"</span>";
                 output+=" al <span class=\"mark\"> "+articolo.promoDataFine+"</span>";
                 output+="</span>";
            }*/

        /*

            if ((prezzoNpo!='') && (prezzoNpo!='0')) {
                bPrezzoNpo = true;
            }
            else if (prezzoPers != null) {
                bPromo = true;
            } else if (prezzoPromo != null) {
                bPromo = true;
            }

            ///////////////////////////////////////////////////////

            if (bPromo) {
                if (prezzoPers == null) {
                    output+="<span class=\"date\">promozione valida dal <span class=\"mark\">" + articolo.promoDataInizio + "</span> al <span class=\"mark\">" + articolo.promoDataFine + "</span></span>";
                }
            }

            if (bPrezzoNpo) {
                    output+="<span class=\"date\">promozione valida dal <span class=\"mark\">" + articolo.data_da_prezzo_npo + "</span> al <span class=\"mark\">" + articolo.data_a_prezzo_npo + "</span></span>";
            }
        */

        /*if ((prezzoNpo!='') && (prezzoNpo!='0')) {
                 prezzo = prezzoNpo;
                 var dataInizioPrezzoNpo = articolo.data_da_prezzo_npo;
                 var dataFinePrezzoNpo = articolo.data_a_prezzo_npo;
                 if ((dataInizioPrezzoNpo!=undefined) && (dataFinePrezzoNpo!=undefined)) {
                     output+="<span class=\"date\">promozione valida dal" ;
                     output+="<span class=\"mark\"> "+dataInizioPrezzoNpo+"</span>";
                     output+=" al <span class=\"mark\"> "+dataFinePrezzoNpo+"</span>";
                     output+="</span>";
                 }
            }*/

        //prezzo
        output+="<strong class=\"price\"><div id=\"prezzo"+i+"\"></div></strong>";
        output+="</div>";

        //colonna destra
        output+="<div class=\"sub-box\">";
        output+="<dl>";
        //disponibilità
        output+="<dt>Disponibilit&agrave;:</dt>";
        output+="<dd>"+articolo.disponibilita+"</dd>";
        output+="<dt>In arrivo:</dt>";
        output+="<dd>"+articolo.arrivi+"</dd>";
        output+="</dl>";
        //form aggiunta al carrello
        output+="<form name=\"form"+i+"\" method=\"get\" action=\""+contextPath+"/cart/cart_add.jsp\" class=\"amount-form\"><fieldset><div class=\"row\">";
        output+="<input type=\"hidden\" name=\"a\" id=\"a\" value=\""+idArticolo+"\">";
        output+="<span><input type=\"text\" class=\"text\" name=\"q\" id=\"q\" value=\"1\" /></span>";
        output+="</div></fieldset></form>";

        output+="<ul class=\"aggiungi-links\"><li id=\"aggiungi"+i+"\">";
        output+="<a href=\"javascript:document.form"+i+".submit()\">";
        output+="<img title=\"Aggiungi al carrello\" src=\""+contextPath+"/images/ico02.gif\" alt=\"Aggiungi al carrello\">";
        output+="</a></li></ul>";
        output+="</div></li>";
    }
    output+="</ul>";
    return output;
}

function getPromoAjax(codice, contextPath, indice) {
    $.ajax({
        url: contextPath+"/util/get_promo.jsp?idP=" + codice,
        cache: false,
        success: function(html){
            $("#get_promo" + indice).html(html);
        },
        error: function(){
            //alert("Errore");
            return false;
        }
    });
}

function getMacroCategoriaSelected(jsonObj,searchText,macroCategoriaId,promo,disponibili, ordinamento){
    var output = "";
    var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,'','', '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.macroCategoriaDescrizione;
    output+= "</a>";
    return output;
}

//elenco categorie
function getMacroCategorie(jsonObj,searchText,promo,disponibili, ordinamento){
    var output = "";
    var macroCategorieList = jsonObj.facet_counts.facet_fields.macroCategoria;
    for(var i =0;i<macroCategorieList.length;i = i+2){
        if(macroCategorieList[i+1]!='0'){
            var macroCategorias = macroCategorieList[i].split("|");
            output += "<ul class=\"sub-nav"+macroCategorias[0]+"\">";
            output += "<li class=\"active\">";
            output+= getSearchLink(searchText,macroCategorias[0],'','', '', '', '','',promo,disponibili, ordinamento);
            output+= macroCategorias[1];
            output+= "</a>";
            output+=getCategorie(jsonObj, searchText, macroCategorias[0], promo,false,disponibili, ordinamento);
            output+="</li></ul>"
        }
    }
    return output;
}

//elenco categorie
function getCategorie(jsonObj,searchText,macroCategoriaId,promo,bPrintPromo,disponibili, ordinamento){
    var output = "<ul>";
    var categorieList = jsonObj.facet_counts.facet_fields.categoria;
    for(var i =0;i<categorieList.length;i = i+2){
        if(categorieList[i+1]!='0'){
            var categorias = categorieList[i].split("|");
            var macroId = categorias[2];
            if(macroId==macroCategoriaId){
                output+= "<li>";
                output+= getSearchLink(searchText,macroCategoriaId, categorias[0], '', '', '', '', '',promo,disponibili, ordinamento);
                output+= categorias[1] + " ("+ categorieList[i+1] +")";
                output+="</a></li>"
            }
        }else{
            break;
        }
    }
    if(bPrintPromo){
        output+=getPromo(searchText, macroCategoriaId, '', '', '', '', '', '', promo);
    }
    output+="</ul>";
    return output;
}

function getCategoriaSelected(jsonObj,searchText,promo,macroCategoriaId,categoriaId,disponibili, ordinamento){
    var output = "";
    var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,'', '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.categoriaDescrizione;
    output+= "</a>";
    output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,'','', '', '', '','',promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>"
    return output;
}

//elenco gruppi
function getGruppi(jsonObj,searchText,macroCategoriaId,categoriaId,promo,disponibili, ordinamento){
    var output = "<ul>";
    var gruppoList = jsonObj.facet_counts.facet_fields.gruppo;
    for(var i =0;i<gruppoList.length;i = i+2){
        if(gruppoList[i+1]!='0'){
            output+= "<li>";
            output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppoList[i], '', '', '', '',promo,disponibili, ordinamento);
            output+= gruppoList[i] + " ("+ gruppoList[i+1] +")";
            output+="</a></li>";
        }else{
            break;
        }
    }
    output+="</ul>";
    return output;
}

function getGruppoSelected(jsonObj,searchText,promo,macroCategoriaId,categoriaId,gruppo,disponibili, ordinamento){
    var output = "";
    var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.gruppo;
    output+= "</a>";
    output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,'', '', '', '','',promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>"
    return output;
}

//elenco categorie merceologiche
function getCatMercList(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,promo,disponibili, ordinamento){
    var output = "<ul>";
    var catmercList = jsonObj.facet_counts.facet_fields.catMerc;
    for(var i =0;i<catmercList.length;i = i+2){
        if(catmercList[i+1]!='0'){
            var catmercs = catmercList[i].split("|");
            output+= "<li>";
            output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, catmercs[1], '', '', '',promo,disponibili, ordinamento);
            output+= catmercs[0] + " ("+ catmercList[i+1] +")";
            output+="</a></li>";
        }else{
            break;
        }
    }
    output+="</ul>";
    return output;
}

function getCatMercSelected(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catMercId,promo,disponibili, ordinamento){
    var output = "";
    var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, catMercId, '', '','',promo,disponibili, ordinamento);
    output+= articolo.catMercDescrizione;
    output+= "</a>";
    output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo, '', '', '','',promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>"
    return output;
}

//articoli in promozione
function getPromo(searchText,macroCategoriaId,categoriaId,gruppo,catmerc,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var output = "<li class=\"active\">";
    output+=getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, catmerc, brand, famigliaId, grMasterId,'S',disponibili, ordinamento)
    output+="Tutte le promo</a>";
    if(promo=='S'){
        output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo, catmerc, brand, famigliaId, grMasterId,'','','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>"
    }
    output+="</li>";
    return output;
}

//elenco e brand o brand selezionato
function getBrand(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catmerc,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var output = "<li class=\"active\">";
    output+= "<a href=\"#\">Brand</a>";
    if(brand!=''){
        var articolo = getFirstArticolo(jsonObj);
        output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo, catmerc, '', famigliaId, grMasterId,promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>";
        output+="<ul><li class=\"active\"><ul><li>";
        output+="<a href=\"#\">"+articolo.brandDescrizione+"</a>";
        output+="</li></ul></li></ul>";
    }else{
        var brandList = jsonObj.facet_counts.facet_fields.brand;
        output+="<ul><li class=\"active\">";
        for(var i =0;i<brandList.length;i = i+2){
            if(brandList[i+1]!='0'){
                var brandObj = brandList[i].split("|");
                output+="<ul><li>";
                output+= getSearchLink(searchText,macroCategoriaId, categoriaId,gruppo, catmerc, brandObj[1], famigliaId, grMasterId,promo,disponibili, ordinamento);
                output+= brandObj[0] + " ("+ brandList[i+1] +")</a>";
                output+="</li></ul>";
            }else{
                break;
            }
        }
        output+="</li></ul>";
    }
    output+="</li>";
    return output;
}

//elenco famiglie o famiglia selezionata
function getFamiglia(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catmerc,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var output = "<li class=\"active\">";
    output+= "<a href=\"#\">Specifiche</a>";
    if(famigliaId!=''){
        var articolo = getFirstArticolo(jsonObj);
        output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo, catmerc, brand, '', grMasterId,promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>";
        output+="<ul><li class=\"active\"><ul><li>";
        output+="<a href=\"#\">"+articolo.famigliaDescrizione+"</a>";
        output+="</li></ul></li></ul>";
    }else{
        var famList = jsonObj.facet_counts.facet_fields.famiglia;
        output+="<ul><li class=\"active\">";
        for(var i =0;i<famList.length;i = i+2){
            if(famList[i+1]!='0'){
                var famiglia = famList[i].split("|");
                output+="<ul><li>";
                output+= getSearchLink(searchText,macroCategoriaId, categoriaId,gruppo, catmerc, brand, famiglia[1], grMasterId,promo,disponibili, ordinamento);
                output+= famiglia[0] + " ("+ famList[i+1] +")</a>";
                output+="</li></ul>";
            }else{
                break;
            }
        }
        output+="</li></ul>";
    }
    output+="</li>";
    return output;
}

//elenco gruppi master o gruppo master selezionato
function getGrMaster(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catmerc,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var output = "<li class=\"active\">";
    output+= "<a href=\"#\">Modello</a>";
    if(grMasterId!=''){
        var articolo = getFirstArticolo(jsonObj);
        output+="<a href=\""+getSearchUrl(searchText,macroCategoriaId,categoriaId,gruppo, catmerc, brand, famigliaId, '',promo,'','','',true,disponibili, ordinamento)+"\" class=\"close\">close</a>";
        output+="<ul><li class=\"active\"><ul><li>";
        output+="<a href=\"#\">"+articolo.grMasterDescrizione+"</a>";
        output+="</li></ul></li></ul>";
    }else{
        var grMasterList = jsonObj.facet_counts.facet_fields.grMaster;
        output+="<ul><li class=\"active\">";
        for(var i =0;i<grMasterList.length;i = i+2){
            if(grMasterList[i+1]!='0'){
                var grMaster = grMasterList[i].split("|");
                output+="<ul><li>";
                output+= getSearchLink(searchText,macroCategoriaId, categoriaId,gruppo, catmerc, brand, famigliaId, grMaster[1],promo,disponibili, ordinamento);
                output+= grMaster[0] + " ("+ grMasterList[i+1] +")</a>";
                output+="</li></ul>";
            }else{
                break;
            }
        }
        output+="</li></ul>";
    }
    output+="</li>";
    return output;
}

//restiruisce la lista degli articoli presenti nell'oggetto json
function getArticoliList(jsonObj){
    return jsonObj.response.docs
}

//restituisce il primo articolo presente nella lista del risultato
function getFirstArticolo(jsonObj){
    var articolo;
    var articoliList = getArticoliList(jsonObj);
    for(var i =0;i<articoliList.length;i++){
        articolo = articoliList[i];
        break;
    }
    return articolo;
}

//cancella tutto il contenuto della pagina stampato in precendenza
function cleanHtml(){
    $("#div_totrec").html('');
    $("#div_search").html('');
    $("#div_cat").html('');
    $("#div_brand").html('');
    $("#div_fam").html('');
    $("#div_grMaster").html('');
}

//stampa l'html del risultato
function printHtml(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,start,rows,promo,contextPath,idCliente,disponibili, ordinamento){
    //totale articoli
    //$("#div_totrec").html("Totale articoli trovati: "+ jsonObj.response.numFound+"<br/>"+query+"<br/>"+url);
    var total = jsonObj.response.numFound;
    if(total==0){
        var message = "";
        if(promo=='S'){
            message = "Siamo spiacenti ma non sono presenti prodotti in promozione nella categoria selezionata.<br/>";
        }else{
            message = "Siamo spiacenti ma la ricerca non ha prodotto risultati.<br/>Se state cercando un prodotto non a catalogo contattate il nostro servizio clienti: <br/><br/>- numero verde: 800.10.12.12<br/>- email: <a href=\"mailto:info@npodirect.it\" style=\"text-decoration:underline;\">info@npodirect.it</a><br/>";
        }
        message+="<br/><br/><a href=\"javascript:history.back()\" style=\"text-decoration:underline;\">Indietro</a>";
        $("#articoli").html(message);
    }else{
        //elenco articoli
        //$("#articoli").html(printArticoliList(jsonObj,searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,promo,contextPath,start,rows));
        $("#articoli").html(printArticoliList(jsonObj, searchText, contextPath, start, rows,disponibili, ordinamento));
        var articoliList = getArticoliList(jsonObj);
        for(var i =0;i<articoliList.length;i++){
            var articolo = articoliList[i];
            getPrezzo(contextPath,articolo.id, idCliente,i);
            getPromoAjax(articolo.id, contextPath, i);
        }
        printPaginazione(total, start, rows,searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,promo,contextPath,disponibili, ordinamento);

        var htmlSideBar = "";
        if(macroCategoriaId==''){
            htmlSideBar = getMacroCategorie(jsonObj, searchText, promo,disponibili, ordinamento);
        }else{
            htmlSideBar = getSideBar(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo,disponibili, ordinamento);
        }

        $("#sidebar").html(htmlSideBar);
    }
}

function printPaginazione(total,start,rows,searchText,macroCategoriaId,categoriaId,gruppo,catmercId,brand,famigliaId,grMasterId,promo,contextPath,disponibili, ordinamento){
    var url = contextPath+"/include/i_paginazione.jsp?";
    //aggiungo i parametri di ricerca
    url+=getSearchUrl(searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId,promo,start,rows,total,false,disponibili, ordinamento);
    //alert(url);
    $.ajax({
        url: url,
        cache: false,
        success: function(html){
            //alert(html);
            $("#div_pag_top").html(html);
            $("#div_pag_bottom").html(html);
        },
        error: function(){
            return false;
        }
    });
}

function getSideBar(jsonObj, searchText,macroCategoriaId, categoriaId, gruppo, catmercId,brand,famigliaId,grMasterId,promo,disponibili, ordinamento){
    var html = "<ul class=\"sub-nav"+macroCategoriaId+"\">";
    html += "<li class=\"active\">";
    //macro categoria selezionata
    html+=getMacroCategoriaSelected(jsonObj, searchText,macroCategoriaId, promo,disponibili, ordinamento);
    if(categoriaId==''){
        //elenco categorie
        html+= getCategorie(jsonObj,searchText,macroCategoriaId,promo,true,disponibili, ordinamento);
    }else{
        html+="<ul>";
        html+="<li class=\"active\">";
        //categoria selezionata
        html+=getCategoriaSelected(jsonObj, searchText, promo, macroCategoriaId, categoriaId,disponibili, ordinamento);
        if(gruppo==''){
            html+=getGruppi(jsonObj, searchText, macroCategoriaId, categoriaId, promo,disponibili, ordinamento);
        }else{
            //gruppo selezionato
            html+="<ul><li class=\"active\">";
            html+=getGruppoSelected(jsonObj, searchText, promo, macroCategoriaId, categoriaId, gruppo,disponibili, ordinamento);
            if(catmercId==''){
                html+=getCatMercList(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, promo,disponibili, ordinamento);
            }else{
                html+="<ul><li class=\"active\">";
                html+=getCatMercSelected(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, promo,disponibili, ordinamento);
                html+="</li></ul>";
            }
            html+="</li></ul>";
        }
        html+="</li>";
        html+=getPromo(searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo,disponibili, ordinamento);
        if(catmercId!=''){
            //brand
            html+=getBrand(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo,disponibili, ordinamento);
            //famiglia
            html+=getFamiglia(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo,disponibili, ordinamento);
            //modello
            html+=getGrMaster(jsonObj, searchText, macroCategoriaId, categoriaId, gruppo, catmercId, brand, famigliaId, grMasterId, promo,disponibili, ordinamento);
        }
        html+="</ul>";
    }
    html +="</li></ul>";
    return html;
}

function getPrezzo(contextPath,idArticolo,idCliente,divId){
    $.ajax({
        url: contextPath+"/util/prezzo_search.jsp?id="+idArticolo+"&cli="+idCliente,
        cache: false,
        success: function(html){
            if(html!=''){
                $("#prezzo"+divId).html(html);
            }
        },
        error: function(){
            $("#prezzo"+divId).html("");
        }
    });
}


function getMacroCategoria_byArticolo(articolo,searchText,macroCategoriaId,promo,disponibili, ordinamento){
    var output = "";
    //var articolo = articolo;
    output+= getSearchLink(searchText,macroCategoriaId,'','', '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.macroCategoriaDescrizione.toLowerCase();
    output+= "</a>";
    return output;
}


function getCategoria_byArticolo(articolo,searchText,promo,macroCategoriaId,categoriaId,disponibili, ordinamento){
    var output = "";
    // var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,'', '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.categoriaDescrizione.toLowerCase();
    output+= "</a>";
    return output;
}


function getGruppo_byArticolo(articolo,searchText,promo,macroCategoriaId,categoriaId,gruppo,disponibili, ordinamento){
    var output = "";
    //var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, '', '', '','',promo,disponibili, ordinamento);
    output+= articolo.gruppo.toLowerCase();
    output+= "</a>";
    
    return output;
}

function getCatMerc_byArticolo(articolo,searchText,macroCategoriaId,categoriaId,gruppo,catMercId,promo,disponibili, ordinamento){
    var output = "";
    //var articolo = getFirstArticolo(jsonObj);
    output+= getSearchLink(searchText,macroCategoriaId,categoriaId,gruppo, catMercId, '', '','',promo,disponibili, ordinamento);
    output+= articolo.catMercDescrizione.toLowerCase();
    output+= "</a>";

    return output;
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
