﻿/* Il sito chiama questo file come kkk.min.js. */
/*global $ document window alert GBrowserIsCompatible GClientGeocoder  GMap2 GUnload GLatLng  GLargeMapControl GMarker fnsearch*/
var vPdvBoxQS;
var map;
var geocoder;
var searchInProgress = false;
var sGuid;
var POPUP_FEATURES = 'resizable=yes,location=0,statusbar=0,menubar=0,width=690,height=600,scrollbars=yes';
var TTR = '';

/***********************************************************************************************************************
Errore generico in pagina
***********************************************************************************************************************/
/*
$(window).error(
    function (msg, url, line) {
        alert(msg);
        $.post("/jsError.aspx", { msg: msg, remoteurl: url, line: line });
    }
);
*/

/***********************************************************************************************************************
Errori immagini non trovate
***********************************************************************************************************************/
$("img").error(
    function () {
        $(this).hide();
    }
);

/***********************************************************************************************************************
Randomico
**********************************************************************************************************************/
function rnd() {
    return String(Math.random()).replace('.', '');
}

/***********************************************************************************************************************
AJAX GLOBAL SETTINGS - ajaxError
**********************************************************************************************************************/
/*
$(document).ready(
    function () {
        $(document).bind("ajaxError", function (event, request, settings) {
            $.ajax(
                {global: false,
                 type: "POST",
                 url : '/jsError.aspx',
                 data: "&requestedurl=" + settings.url
                }
           );
        });
    }//function
);
*/

/***********************************************************************************************************************
Cookies
***********************************************************************************************************************/
function setCookie(key, val) {
    $.cookie(key, val, {path: '/'});
}

function delCookie(key) {
    setCookie(key, null, {path: '/'});
}

function isEmptyCookie(key) {
    return ($.cookie(key) === null) || ($.cookie(key) === '') || ($.cookie(key) === 'null');
}
    
function setProv(siglaProvinciale) {
		$('select#provincia', $('#frmsearch')).val(siglaProvinciale);
}

/***********************************************************************************************************************
Popolo un elemento <SELECT> con le province italiane
***********************************************************************************************************************/
function getProvinces(o) {
    $.getJSON("/web/province.aspx", function (data) {
        o.append('<option value=""></option>');     
        var p = (!isEmptyCookie('_prov') ? $.cookie('_prov') : '');
        var js = false;     
        $.each(data.object, 
            function (i, item) {
                if (js) {
                    o.append("<option value='" + item.provSigla + "'>" + item.provSigla + "</option>");
                } else {
                    if (p === item.provSigla) {
                        o.append("<option selected value='" + item.provSigla + "'>" + item.provSigla + "</option>");    
                        js = true;
                    } else {
                        o.append("<option value='" + item.provSigla + "'>" + item.provSigla + "</option>"); 
                    }                   
                }
                
            }
        );      
    });
}

/***********************************************************************************************************************
Valore in query string
***********************************************************************************************************************/
function QS(key) {
    var x = $.jqURL.get(key);   
    if (x === undefined) {
        return null;
    } else if (x === null) {
        return null;
    } else {
        return x.replace('#','');
    }   
}

/***********************************************************************************************************************
se "true" l'utente è LOGGATO
***********************************************************************************************************************/
function isLogged() {
    return !isEmptyCookie('KlikkaPromo');
}

/***********************************************************************************************************************
basketId
***********************************************************************************************************************/
function bskId() {
    return $.cookie('_bskid');
}

/***********************************************************************************************************************
Imposta i valori di indirizzo partenza ricerche nei campi di ricerca
***********************************************************************************************************************/
function BindData() {
    $('input#sessionid', '#frmsearch').val($.cookie('_sessionid'));
    $('input#lat', '#frmsearch').val($.cookie('_lat'));
    $('input#lng', '#frmsearch').val($.cookie('_lng')); 
    if ($.cookie('_via') !== null) {
        $('input#via', '#frmsearch').val($.cookie('_via'));
    }
    if ($.cookie('_comune') !== null) {
        $('input#comune', '#frmsearch').val($.cookie('_comune'));
    }   
    if (!isEmptyCookie('_prov') && ($('select#provincia', $('#frmsearch')).val() === null || $('select#provincia', $('#frmsearch')).val() === '')) {
        setProv($.cookie('_prov'));
    }
}



/***********************************************************************************************************************
Utilizzata dall funzione initUser. Ricava l'id dell'insegna 
***********************************************************************************************************************/
function getIds(data) {
    return $.map(
        data,
        function (item, i) {
            return item.showCaseId;
        }
    );
}

/***********************************************************************************************************************
Inizializza le informazioni dell'utene quando questo è loggato
***********************************************************************************************************************/
function initUser() {
    try {
        // se non ci sono cookie validi, prova a settarli con i dati utente....
        if (isEmptyCookie('_sessionid') && isLogged()) {
            $.getJSON(
                '/webusrenv.aspx',
                {output: 'JSON', rnd: rnd(), bskid: bskId()},
                function (data) {
                    try {                   
                        // Start Point
                        if (data.Table.length > 0) {
                            setCookie('_via', data.Table[0].via);
                            setCookie('_comune', data.Table[0].city);
                            setCookie('_prov',  data.Table[0].prov);
                        } // if
                        // inclusioni insegne TUTTE/IN/IN-FED
                        if (data.Table1.length > 0) {                   
                            setCookie('_chainIds', getIds(data.Table1));
                        }
                        if (data.Table2.length > 0) {
                            setCookie('_chainIdsNoFed', getIds(data.Table2));
                        }
                        if (data.Table3.length > 0) {
                            setCookie('_chainIdsFed', getIds(data.Table3));
                        }
                        // esclusioni insegne
                        if (data.Table4.length > 0) {
                            setCookie('_chainIdsNotIn', getIds(data.Table4));
                        }
                        // categorie
                        if (data.Table5.length > 0) {
                            setCookie('_catIds', $.map(data.Table5, 
                                function (item, i) {
                                    return item.catId;
                                })
                            );
                        }                       
                        // pdvs
                        if (data.Table6.length > 0) {
                            setCookie('_pdvId', $.map(data.Table6, 
                                function (item, i) {
                                    return item.pdvId;
                                })
                            );
                        }           
                        BindData(); 
                        resetTools();
                    } catch (e) {
                        // alert(e);
                    }
                } // function CallBack
            );
        } 
    } catch (e) {
        // alert(e)
    }
}

/***********************************************************************************************************************
Funzione scatenata ad ogni caricamento pagina
***********************************************************************************************************************/
function initialize() {
    // inizializza il geocoder
    if (GBrowserIsCompatible()) {
        geocoder = new GClientGeocoder();
    }
    // inizializza i cookie (Se mancanti) in base alla query string
    if (1 === 1) {
        if (isEmptyCookie('_sessionid')) {
            setCookie('_sessionid', QS('sessionid'));
        } // if
        //alert(QS('sessionid'));
        if (isEmptyCookie('_lat')) {
            setCookie('_lat', QS('lat'));
        } // if
        if (isEmptyCookie('_lng')) {
            setCookie('_lng', QS('lng'));
        } // if
        if (isEmptyCookie('_via')) {
            setCookie('_via', QS('via'));
        } // if
        if (isEmptyCookie('_prov')) {
            setCookie('_prov', QS('provincia'));
        } // if
        if (isEmptyCookie('_comune')) {
            setCookie('_comune', QS('comune'));
        } // if             
    }
        
    // province
    getProvinces($('select#provincia'));
    // banner
    $(".headerbanner").jMyCarousel({visible: '400px', auto: true, speed: 2000});    
    // inizializza l'utente registrato e loggato
    initUser(); 
    // form
    BindData(); 
    // comuni
    $('input#comune', 'form#frmsearch').autocomplete(
        '/comuni.aspx', 
        {       
            width: 300,
            minChars: 1,
            delay: 5,
            selectFirst: true,          
            cacheLength: 0,
            matchSubset: false,
            max: 20,
            extraParams: {
                provSigla: function () { 
                    return $('select#provincia').val();
                },
                output: 'BIND'          
            }
        }
    );  
    // bind unload consigliato da google
    $("body").bind("unload", GUnload);  

        $(window).bind("scroll", function (e) {
            /*  - ingombro logo rotondo in alto = 235px
            - altezza barra tools = 410px
            - il top della barra deve trovarsi sotto 235px
            - il bottom della barra = topBarra+410 deve trovarsi sopra wrapperHeight
            */
            var ingombroLogo = 235;
            var altezzaBarra = 410;
            var wrapperHeight = $('div#wrapper').height();

            var topBarra = ($(this).scrollTop() < 238) ? 238 : $(this).scrollTop() + 125;
            if (topBarra > wrapperHeight - 410) topBarra = wrapperHeight - 410;
            $('#tools').css('top', topBarra + 'px');
        });
        $('#toolcart').attr('href', '/lista-spesa/index.html?bsk=' + bskId());
}

// altra funzione relativa al popup tools
function bookmarksite(title, url) {
    if (document.all)
        window.external.AddFavorite(url, title);
    else if (window.sidebar)
        window.sidebar.addPanel(title, url, "")
}

/***********************************************************************************************************************
Ritorna l'indirizzo immesso nel form di ricerca. 
Questa stringa viene utilizzata per la GEOLOCALIZZAZIONE. 
E' possibile cambiare l'ordine delle informazioni concatenate. 
***********************************************************************************************************************/
function getAddress() {
    var provincia = $.trim($('#frmsearch select#provincia').val());
    var comune = $.trim($('#frmsearch input#comune').val());
    var via  = $.trim($('#frmsearch input#via').val());
    //provincia = (provincia === 'MB' ?  'MI' : provincia);
    via = ((via === '') && (comune === 'Como') && (provincia === 'CO') ? 'centro' : via);
    return via + (via !== '' ? ', ' : '') + comune + ', ' + provincia + ', italy';  
    /* 
    var prov = $('#frmsearch select#provincia').val();
    prov = (prov === 'MB' ?  'MI' : prov);
    var address = $('#frmsearch input#via').val() + ',' + $('#frmsearch input#comune').val() + ',' + prov +  ',italy';
    return address;
    */
}

/***********************************************************************************************************************
Visualizza, all'occorrenza, una mappa, la centra, 
***********************************************************************************************************************/
function displayGMap(ohtml, glat, glon, htmlmark) {
    map = new GMap2(document.getElementById(ohtml));
    var mpoint = new GLatLng(glat, glon);
    map.setCenter(mpoint, 13);
    var mmarker = new GMarker(mpoint);
    map.addOverlay(mmarker);
    map.addControl(new GLargeMapControl()); 
}

/***********************************************************************************************************************
Resetta tutti i cookie dell'applicazione
***********************************************************************************************************************/
function resetCookies() {
    searchInProgress = false;
    delCookie('_sessionid');
    delCookie('_lat');
    delCookie('_lng');
    delCookie('_via');
    delCookie('_comune');
    delCookie('_prov');
    delCookie('_psize');
    delCookie('_pindex');
    delCookie('_chainIdsNoFed');
    delCookie('_chainIdsFed');
    delCookie('_chainIds');
    delCookie('_pdvId');
    delCookie('_q');
    delCookie('_sconto');
    delCookie('_catIds');
} // function

/***********************************************************************************************************************
Effettua il geocoding di base impostando i cookie
************************************************************************************************************************/
function GeoCoding(addr, fn, fnko) {
    if (geocoder) {
        if (!addr) {
            addr = getAddress();
        }
        geocoder.getLatLng(
            addr,
            function (point) {
                if (!point) {                   
                    $.ajax({url: '/geocodingfailed.aspx', global: false, type: 'POST', data: 'address=' + addr});                   
                    if (!$.isFunction(fnko)) {
                        alert('Non localizzabile');
                        resetCookies();                     
                    } else {
                        fnko();
                    }
                } else {
                    fn(point);
                }
            }                       
        );
    } // if
} // GeoConding

/***********************************************************************************************************************
Valida il form di ricerca base (Indirizzo)
***********************************************************************************************************************/
function ValidateAddressBar() {
    var errIndex = 0;
    var errMsg   = "";  
    // validazione comune
    if ($.trim($('input#comune', 'form#frmsearch').val()) === '') {
        errIndex ++;
        errMsg += errIndex + ')' + 'Il comune è obbligatorio' + '\n';
    } // if
    // validazione comune
    if ($.trim($('select#provincia', 'form#frmsearch').val()) === '') {
        errIndex ++;
        errMsg += errIndex + ')' + 'La provincia è obbligatoria' + '\n';
    } // if
    // IF DI USCITA
    if (errIndex === 0) {
        return true;
    } else {
        alert(errMsg);
        return false;
    } // if uscita  
} // function

/***********************************************************************************************************************
DI BASE RIESEGUE LA FUNZIONE PASSATA, SE NON TROVA IL COOKIE SESSIONID PASSA PRIMA PER IL GEOCODING.
//'/web/sessionTicket.aspx?lat= ' + point.lat() + '&lng= ' + point.lng(),
***********************************************************************************************************************/
function UpdateSearch(fn) {
    if (!ValidateAddressBar()) {
        return false;
    }
    if (isEmptyCookie('_sessionid')) {
        //pageindex = 1;
        GeoCoding(
            getAddress(),
            function (point) {
                $.getJSON(                  
                    '/sessionTicket.aspx',
                    function (data) {
                        setCookie('_sessionid', data.SessionID);                        
                        setCookie('_via', $('#frmsearch input#via').val());
                        setCookie('_comune', $('#frmsearch input#comune').val());
                        setCookie('_prov', $('#frmsearch select#provincia').val());
                        setCookie('_lat', String(point.lat()).replace('#',''));
                        setCookie('_lng', String(point.lng()).replace('#',''));
                        setCookie('_pindex', 1);
                        BindData();
                        fn();
                    });
            } // function
        );
    } else {
        fn();
    }
} // fine update search

/***********************************************************************************************************************
Carica la lista della spesa in fondo alla pagina
***********************************************************************************************************************/
function loadBasketBottom() {
    $.get(
        '/basketsummary.aspx',
        {rnd: rnd(), guid: bskId()},
        function (data) {
            $('div#boxlista div.boxlistacent').html(data);
        }//
    );
} // function

/***********************************************************************************************************************
Svuota la lista della spesa
***********************************************************************************************************************/
function emptyBasket() {
    $.get(
        '/basketdx.aspx?rnd= ' + rnd(),
        {rnd: rnd(), guid: bskId(), inherits: 'basketsummary', empty: '1'},
        function (data) {
            $('div#boxlistadx div.boxlistadxcent center:eq(0)').html(data);
            loadBasketBottom();
            $('tr:gt(0) td.tools span').html('');
            //$('a:eq(1)', 'tr:gt(0) td.tools').hide();
        }//
    );
}

/***********************************************************************************************************************
Carica la sintesi della lista della spesa a destra
***********************************************************************************************************************/
function loadBasketDx() {
    $.get(
        '/basketdx.aspx',
        {rnd: rnd(), guid: bskId()},
        function (data) {
            $('div#boxlistadx div.boxlistadxcent center:eq(0)').html(data);
        }//
    );
} // function

/***********************************************************************************************************************
Aggiunge un articolo alla lista della spesa
***********************************************************************************************************************/
function addToBasket(prmId, pdvId, qta, fed, obj_a) {
    // si tratta del meno...
    if (qta === -1) {
        if (Number($(obj_a).attr('bcount')) === 0) {            
            //alert('Articolo non presente in lista.');
            return;
        }
    }   
    $.getJSON(
        '/addToBasket.aspx',
        {rnd : rnd(), prm: prmId, pdv: pdvId, quantity: qta, guid: bskId(), output: 'JSON', fidelity: fed},
        function (data) {
            if (data.Table[0].status === '200') {
                var n = Number(data.Table[0].count);                
                $('td.tools a[bcount]', 'tr[prmid=\'' + prmId + '\'][pdvid=\'' + pdvId + '\']').attr('bcount', n);                              
                $(obj_a).siblings().nextAll('span:eq(0)').html('' + (n === 0 ? '&nbsp;' : n));          
                loadBasketDx();
                loadBasketBottom();         
            } else {
                alert('Impossibile aggiungere l\'articolo alla lista della spesa');
            }
        } // callback
    ); // json
    
    
} //

/***********************************************************************************************************************
Box verde di resoconto ricerca.
***********************************************************************************************************************/
function UpdateResoconto(data) {
    if (data.length > 0) {
        $("div.boxresocent table:eq(0) tr:gt(1)").remove();
        $.each(data,
            function (i, item)  {           
                $("div.boxresocent table:eq(0) tbody").append("<tr id=\"dxsearchrow\"><td>" + item.scDesc + "</td><td>" + item.count + "</td></tr>");
            }
        );
    } // if
} // function

/***********************************************************************************************************************
Update del DIV del singolo PDV quando selezionato. 
***********************************************************************************************************************/
function UpdateSinglePdv() {
    // box singolo PDV
    if (!isEmptyCookie('_pdvId')) {     
        if ($.cookie('_pdvId').split(',').length === 1) {
            var pdvId = $.cookie('_pdvId');
            // controllo se esiste il box
            if ($('div#boxmarca').length > 0) {
                if ($('div#boxmarca').attr('pdvId') !== pdvId) {
                    $.get(
                        '/pdvmonobox.aspx',
                        {pdv: pdvId, rnd: rnd()},
                        function (data) {
                            $('div#boxmarca').replaceWith(data);
                        }
                    );
                }
            } else {
                //replace HTML
                $.get(
                    '/pdvmonobox.aspx',
                    {pdv: pdvId, rnd: rnd()},
                    function (data) {
                        $('div#boxbighp').after(data);
                    }
                );
            }
        }
    } else {
        if ($('div#boxmarca').length > 0) {
            $('div#boxmarca').fadeOut('fast');
        } //
    }//if
} // function

/***********************************************************************************************************************
Update del BOXPDV(s) di destra
***********************************************************************************************************************/
function UpdateBoxPdv(data) {
    // id dei pdv in "gioco"
    var ids = $.map(data,
        function (n, i) {
            return (n.pdvId);
        }
    );
    // chiamata per impaginare gli indirizzi dei pdv (PDVBOX). Gestione cache chiamate in pagina.
    var pdvQS = $.param({session: $.cookie('_sessionid'), pdv: ids.join(', '), showCaseIdsFed: $.cookie('_chainIdsFed')});
    if (vPdvBoxQS !== pdvQS) {
        $.get(
            '/pdvbox.aspx',
            {session: $.cookie('_sessionid'), rnd: rnd(), pdv: ids.join(', '), showCaseIdsFed: $.cookie('_chainIdsFed')},
            function (pdvs) {
                vPdvBoxQS = pdvQS;
                $('div#boxindirizzi div.boxindcent').html(pdvs);
            }
        );
    }
}//function


/***********************************************************************************************************************
Cambia i . con ,
***********************************************************************************************************************/
function FormatDecimal(n) { 
    var ex = /\./;
    var rval;
    if (n === 0) {
        rval = '0';
    } else {
        var ns = String(n.toFixed(2));
        rval = ns.replace(ex, ',');
    }
    return rval;
} //

/***********************************************************************************************************************
Setta nel cookie una pagina che DOVRA' poi essere visualizzata
***********************************************************************************************************************/
function setPage(pIndex) {
    if (!searchInProgress) {
        setCookie('_pindex', Number(pIndex));
    }
}

/***********************************************************************************************************************
Gestisce la paginazione.
Stile google
***********************************************************************************************************************/
function pager(psize, pnumber, pindex) {
    var maxpshow = 15;
    var l1;
    var l2;
    var splitter;

    if (pnumber <= maxpshow) {
        l1 = 1;
        l2 = pnumber;
    } else {
        splitter = Math.floor(maxpshow / 2);
        l1 = pindex - splitter;
        if  (l1 <= 0) {
            l1 = 1;
        }
        l2 = l1 + (maxpshow - 1);
        if (l2 > pnumber) {
            l2 = pnumber;
            l1 = (pnumber - maxpshow) + 1;
        } //if
    } // else

    $('span#pager a[pid]', 'div.stools').remove();
    for (var i = l1; i <= l2; i ++) {
        $('span#pager a#next', 'div.stools').before("<a pid=\"" + i + "\">" + i + "</a>");
    }  // for
    
    $('span#pager a[pid!=\'' + pindex + '\']', 'div.stools').attr("href", "#").bind('click', function () {
        if (!searchInProgress) {
            $(this).css({'color': 'orange', 'opacity': '0.5'});
            setPage($(this).attr('pid'));
            fnsearch('');
        }
    });
    
    // seleziono la pagina corrente
    $('span#pager a[pid=\'' + pindex + '\']', 'div.stools').addClass('selected');

    // nascondo il link "precedente" quando serve
    if (pindex <= 1) {
        $('span#pager a#prev', 'div.stools').hide();
    } else {
        $('span#pager a#prev', 'div.stools').show();
    }

    // nascondo il link "successivo" quando serve
    if (pindex === pnumber) {
        $('span#pager a#next', 'div.stools').hide();
    } else {
        $('span#pager a#next', 'div.stools').show();
    }
}

/***********************************************************************************************************************
Aggiorna la toolsbar di ricerca.
Paginazione, ordinamento.
***********************************************************************************************************************/
function sToolsRefresh(rNumber, pSize, pNumber,  pIndex) {
    $('div.boxresocent table:eq(0) tr:eq(0) td:eq(1)').text('' + rNumber);
    $('#n', 'div.stools').text('' + rNumber);
    $('#oby', 'div.stools').val('' + $.cookie('_oby'));
    $('#psize', 'div.stools').val('' + pSize);  
    pager(pSize, pNumber, pIndex);
} // function

/***********************************************************************************************************************
Resetta i risultati della ricerca precedente. 
Visualizza l'icona "wait".
***********************************************************************************************************************/
function resetSearch() {
    /*
    var waitImage = String('/includes/img/indicator.gif');
    var waitText  = String('Attendere...caricamento in corso')
    $('tr:gt(0)', 'div.boxpromcent table tbody').remove();
    $('div.boxpromcent table tbody').append("<tr class=\"wait\"><td colspan=\"8\"><img src=\"" + waitImage + "\" />&nbsp;<span>" + waitText + "</span></td></tr>"); 
    // <tr class="wait"><td colspan="8"><img src="/includes/img/indicator.gif" />&nbsp;<span>Attendere...caricamento in corso</span></td></tr>
    */
    
    
    var base = String('div.boxpromcent table tbody');   
    var waitText  = String('Attendere...caricamento in corso');
    $('tr[class!=\'wait\']:gt(0) ', $(base)).remove();  
    $('tr.wait', $(base)).show();   
    /*
    var base = $('div.boxpromcent table:eq(0)');
    var o = $('tr.wait', $(base));
    $(base).html(null); 
    base = null;
    o = null;   
    */
    
} // function



function stdReplaceToken(item, tmphtml) {
    var re;
    re = /\#prmid\#/ig;
    tmphtml = tmphtml.replace(re, item.prmid);
    re = /\#prmprice\#/ig;
    tmphtml = tmphtml.replace(re, FormatDecimal(Number(item.prz) / 100));
    re = /\#prmlistprice\#/ig;
    tmphtml = tmphtml.replace(re, FormatDecimal(Number(item.lprz) / 100));
    re = /\#prmdiscperc\#/ig;
    tmphtml = tmphtml.replace(re, item.disc);   
    re = /\#showcasedesc\#/ig;
    tmphtml = tmphtml.replace(re, item.scdesc);
    re = /\#prddesc\#/ig;
    tmphtml = tmphtml.replace(re, item.pdesc);
    re = /\#brandDesc\#/ig;
    tmphtml = tmphtml.replace(re, (item.bdesc !== '' ? item.bdesc : 'Senza marca'));
    if (item.dw < item.w) {
        tmphtml = tmphtml.replace("#prdWeight#", item.w + ' / ' +  item.dw + ' sgocc.' );   
    } else {
        tmphtml = tmphtml.replace("#prdWeight#", item.dw ); 
    }
    tmphtml = tmphtml.replace("#prmTypeDesc#", item.tdesc);
    re = /\#note\#/ig;
    tmphtml = tmphtml.replace(re, (item.note || item.tdesc));   
    re = /\#showcasecode\#/ig;
    tmphtml = tmphtml.replace(re, item.sccode);
    tmphtml = tmphtml.replace("#imgsrc#", item.img);    
    tmphtml = tmphtml.replace("#prmUnitsDesc#", item.udesc);    
    tmphtml = tmphtml.replace("#prmStartDate#", item.d1);
    tmphtml = tmphtml.replace("#prmDueDate#", item.d2);
    re = /\#prmFedPoint\#/ig;
    tmphtml = tmphtml.replace(re, FormatDecimal(Number(item.fpnt / 100)));
    return tmphtml;
}

/***********************************************************************************************************************
Replace dei tags della riga di risultato ricerca.
***********************************************************************************************************************/
function replaceToken(item, tmphtml) {
    var re;         
    tmphtml = stdReplaceToken(item, tmphtml);       
    re = /\#fedelity\#/ig;
    tmphtml = tmphtml.replace(re, item.fed);
    re = /\#pdvid\#/ig;
    tmphtml = tmphtml.replace(re, item.pdvid);  
    re = /\#prmunitaryprice\#/ig;
    tmphtml = tmphtml.replace(re, FormatDecimal(Number(item.uprz) / 100));
    tmphtml = tmphtml.replace("#prmunitarymeasurement#", item.updesc);
    tmphtml = tmphtml.replace("#prdId#", item.prdid);
    tmphtml = tmphtml.replace("#prdEan#", item.prdean);     
    tmphtml = tmphtml.replace("#pdvLocation#", item.pdvlocation);
    tmphtml = tmphtml.replace("#pdvName#", item.pdvname);           
    tmphtml = tmphtml.replace(/\#bcount\#/ig, item.bcount); 
    return tmphtml;
}




/***********************************************************************************************************************
Ricerca AJAX (.getJson).
***********************************************************************************************************************/
function fnsearch(vpath) {
    // se non ci sono ricerche in corso
    if (!searchInProgress) {                
        // indico che c'è una ricerca in corso
        searchInProgress = true;
        
        var obj = {};
        obj.rnd = rnd();                
        obj.sessionid = $.cookie('_sessionid');
        obj.lat = $.cookie('_lat');
        obj.lng = $.cookie('_lng');
        
        if (TTR === '') {
            TTR = $.trim($('table#trpromo tbody:eq(0)').html());
        }
        
        // reset della ricerca precedente               
        resetSearch();
        // preparazione cookie _q con contenuti da _sconto
        // usiamo il separatore testoSconto|||testoLibera
        var testoSconto = $.cookie('_sconto');
        var testoQ = $.cookie('_q');
        if (testoSconto) {
            // mapping dalle categorie collettive di sconto a quelle individuali sul db
            for (var propertyName in KKKscontoMapper) {
                if (KKKscontoMapper.hasOwnProperty(propertyName)) {
                    testoSconto = testoSconto.replace(propertyName,KKKscontoMapper[propertyName]);
                }
            }

            var testoQ_duringRequest = (testoQ ? testoSconto + '|||' + testoQ : testoSconto);
            setCookie('_q', testoQ_duringRequest);
        }
        // pagina che fornisce il JSON
        var url = vpath + '/websearch.aspx';
        $.getJSON(
            url,
            obj,
            function (data) {
                // per prima cosa rimetto a posto il cookie _q
                setCookie('_q', testoQ);
                resetTools();
                // callBack che impagina il JSON
                // sotto blocco try perchè in caso di errore ha una gestione grafica separata dallo standard.               
                try {
                    // ricava dai risultati gli estremi per la paginazione. 
                    var rNumber = Number(data.searchparam[0].count); // Numero di promo trovate
                    var pSize = Number(data.searchparam[0].psize); // Numero di promo per pagina
                    var pIndex = Number(data.searchparam[0].pindex); // Indice della pagina visualizzata                    
                    sGuid = data.searchparam[0].sguid;
                    // impostazioni di ricerca
                    var oby = String($.cookie('_oby'));
                    var bycat = ((isEmptyCookie('_oby')) || (oby === '3') || (oby === '0'));
                    var byprice = (oby === '7');
                    var o = $('div.boxpromcent table:eq(0) tbody:eq(0)');

                    // impaginazione dei risultati.
                    if (data.items.length > 0) {
                        // init
                        var catid = '';
                        var confronto = '';
                        // Template riga prodotto.
                        var html = TTR;
                        // page number
                        var pNumber = (rNumber % pSize) > 0 ? Math.floor(rNumber / pSize) + 1 : ((rNumber / pSize));
                        // grouping
                        var grpvaluefield = bycat ? 'cid' : 'ptid';
                        var grptextfield = bycat ? 'cdesc' : 'ptdesc';
                        var tmphtml = '';
                        var rowhtml = '';
                        // esegue il refresh della toolbar
                        sToolsRefresh(rNumber, pSize, pNumber, pIndex);
                        // loop items
                        $.each(
                            data.items,
                            function (i, item) {
                                // template per ogni riga. ogni volta ricavato per sostituzione tags
                                //var tmphtml = html;   
                                // replace tags
                                rowhtml = replaceToken(item, html);
                                // categorie...
                                if (bycat || byprice) {
                                    confronto = item[grpvaluefield];
                                    if (catid !== confronto) {
                                        rowhtml = '<tr><td class="categoria" colspan="8"><p>' + item[grptextfield] + '</p></td></tr>' + rowhtml;
                                        catid = confronto;
                                    }
                                } // if                                         
                                // aggiunge fisicamente la riga alla tabella dei risultati
                                $(o).append(rowhtml);
                            }
                        );

                        $('td:gt(2) span[num = \'0\']', 'div.boxpromcent table:eq(0) tbody tr').remove();
                        $('td.tools span[bcount=\'0\']', 'div.boxpromcent table:eq(0)').html('&nbsp;');
                        // se il file non esiste sul filesystem...
                        $("img.imgprod", 'div.boxpromcent table:eq(0) tbody tr').error(
                            function (e) {
                                $(this).attr("src", "/images/default.jpg");
                            }
                        );
                        // update BOX PDV
                        UpdateBoxPdv(data.pdvs);
                        // update BOX RESOCONTO
                        UpdateResoconto(data.scases);
                    } else {
                        // template no results                      
                        sToolsRefresh(0, pSize, 0, 0);
                        $(o).append("<tr><td colspan=\"8\" align=\"center\" class=\"prod\" style=\"padding:10px 0px 0px 0px; color:#F04900; font-size:12pt; font-weight:bold;\">NESSUNA OFFERTA PRESENTE</td></tr>");
                        $('div.boxresocent tr:gt(0)').remove();
                    }
                    // rimuove l'icona d'attesa
                    //$("tr.wait").remove();
                    $('tr.wait').hide();
                    // righe alternate
                    $('tr:gt(0)[prmid]:even', $(o)).addClass('bggreen');
                    searchInProgress = false;
                } catch (e) {
                    // impagina un errore 
                    sToolsRefresh(0, pSize, 0, 0);
                    $('tr.wait').remove();
                    $(o).append("<tr><td colspan=\"8\" align=\"center\" class=\"prod\" style=\"padding:10px 0px 0px 0px; color:#F04900; font-size:12pt; font-weight:bold;\">SI &#201; VERIFICATO UN ERRORE. RIPROVARE CON ALTRI PARAMETRI.</td></tr>");
                    $('div.boxresocent tr:gt(0)').remove();
                    searchInProgress = false;
                }  // catch             
            }
        );  // fine CallBack Json;
    }
}



/***********************************************************************************************************************
DETTAGLI PRODOTTO
***********************************************************************************************************************/
function displayPrmDetail(o, prmid, pdvid) { 
    
    $.get(
        '/prmdetail.aspx', {prm: prmid, pdv: pdvid, sguid: sGuid},                 
        function (data) {
            $('.prmDetailContainer').remove();                   
            var id = "popup" + prmid;
            $(o).after("<div class=\"prmDetailContainer\" id=\"" + id + "\">" + data + "</div>");                                
            //$('#' + id).animate({ opacity: "show"}, "slow");
            $('#' + id).css("top", -340);
            $('#' + id).fadeIn("slow");                    
            $('#' + id + ' a.cpopup').click(
                function () { 
                    $('.prmDetailContainer').fadeOut("slow");
                    return false;                        
                }
            );
        }               
    );
    
}

/***********************************************************************************************************************
Carica il box richiesto in ricerca avanzata.
***********************************************************************************************************************/
function advsearch(o, mode) {
    // TRUSCHINO - rimuovo ogni possibile precedente popup+la sua anchor
    $('#popup_libera').remove();
    $('#popup_insegna').remove();
    $('#popup_sconto').remove();
    $('#popup_categoria').remove();

    $('.pnlAdvSearchContainer').remove();

    var pop_w;
    var pop_l;
    var getLeft = function () { return (win_w > pop_w) ? Math.floor((win_w - pop_w) / 2) : 30; }
    var win_h = $(window).height();
    var win_w = $(window).width();
    /* si impone max_h = 95% win_h per garantire la scomparsa degli scrollbars 
    verticali nel popup insegne */
    var max_h  =  Math.floor(Number(win_h / 100 * 95));
    if (mode === 'libera' || mode === 'sconto') {
        max_h  = 500;
    }
    var popupHeight;
    var popupWidth;
    var popupLeft;
    var popupTop;
    var popupMaxHeight;
    // nome della funzione di inizializzazione
    var bindFunction = '';
    switch (mode) {
        case 'libera':
            pop_w = 400;
            popupTop = '120px';
            bindFunction = 'bind_libera_callback()';
            break;
        case 'sconto':
            pop_w = 480;
            popupTop = '120px';
            bindFunction = 'bind_sconto_callback()';
            break;
        case 'insegna':
            pop_w = 540;
            popupTop = '40px';
            bindFunction = 'bind_insegne_callback()';
            break;
        case 'categoria':
            pop_w = 840;
            popupTop = '90px';
            bindFunction = 'bind_Categories_callback()';
            break;
    }
    popupMaxHeight = max_h + 'px';
    popupWidth = '' + pop_w + 'px';
    popupLeft = getLeft() + 'px';

    // deragliatore per il popup SCONTO
    if (mode === 'sconto') {
        $.get(
	        '/advsearchparam_sconto.aspx',
	        { rnd: rnd(), mode: mode, session: (isEmptyCookie('_sessionid') ? '' : $.cookie('_sessionid')) },
		        function (data) {
		            var id = "popup_" + mode;

		            var anchorPopupDiv = $('<div>').attr('id', id).addClass('anchorPopupDiv');
		            var relativePopupDiv = $('<div>').addClass('relativePopupDiv pnlAdvSearchContainer');
		            relativePopupDiv.append(data);
		            anchorPopupDiv.append(relativePopupDiv);
		            $('body').prepend(anchorPopupDiv);

		            // l'anchor annulla spegne il relativePopupDiv (qui individuato tramite la sua classe accessoria)
		            $('.cpopup', '#' + id).click(
	                function () {
	                    $('.pnlAdvSearchContainer').hide();
	                    return false;
	                }
	            );
		            $('#' + id).fadeIn('slow').bgiframe();

		            // occorre posizionare il popup - NB: si decora il div ABSOLUTE
		            $('.absolutePopupDiv').css('top', popupTop).css('left', popupLeft);
		            $('.absolutePopupDiv').css('width', popupWidth).css('max-height', popupMaxHeight);

		            // lettura eventuali ricerche precedenti (EVAL is EVIL)
		            eval(bindFunction);

		            $('.cpopup').focus();
		        }
	    );
    	
    }
    
    else {
        var currentSession = isEmptyCookie('_sessionid') ? '' : $.cookie('_sessionid');
        $.get(
	        '/advsearchparam2.aspx',
	        { rnd: rnd(), mode: mode, session: currentSession },
	        function (data) {
	            var id = "popup_" + mode;

	            var anchorPopupDiv = $('<div>').attr('id', id).addClass('anchorPopupDiv');
	            var relativePopupDiv = $('<div>').addClass('relativePopupDiv pnlAdvSearchContainer');
	            // data è div#popupricercalib oppure div#popupricercadett (decisione delegata al codebehind dell'aspx)
	            relativePopupDiv.append(data);
	            anchorPopupDiv.append(relativePopupDiv);
	            $('body').prepend(anchorPopupDiv);

	            // l'anchor annulla spegne il relativePopupDiv (qui individuato tramite la sua classe accessoria)
	            $('.cpopup', '#' + id).click(
	                function () {
	                    $('.pnlAdvSearchContainer').hide();
	                    return false;
	                }
	            );
	            $('#' + id).fadeIn('slow').bgiframe();

	            // occorre posizionare il popup - NB: si decora il div ABSOLUTE
	            $('.absolutePopupDiv').css('top', popupTop).css('left', popupLeft);
	            $('.absolutePopupDiv').css('width', popupWidth).css('max-height', popupMaxHeight);

	            // lettura eventuali ricerche precedenti (EVAL is EVIL)
	            eval(bindFunction);

	            /* nel caso di insegne e categorie, occorre dare il focus all'input:submit nascosto per 
	            fare il dismiss della form anche col CR in IE */
	            $('.checkbox_insegna_con_parafulmine').click(function () {
	                $('#parafulminePerInsegna').focus()
	            });
	            $('.checkbox_categoria_con_parafulmine').click(function () {
	                $('#parafulminePerCategoria').focus()
	            });

	            $('.cpopup').focus();
	        }
	    );
  	}
}

/*********************************************************************************************************************
POPUP RICERCA PER SCONTO
**********************************************************************************************************************/
// definizione mapping checkbox --> stringhe di ricerca nel db
var KKKscontoMapper = {
    faiLaScorta: '2x1^3x2^4x2',
    sottocostoAlCosto: 'Al costo^Sottocosto',
    taglioPrezzo: 'Taglio prezzo',
    supersconti3050: 'Sconto 30%^Sconto 35^%Sconto 40%^Sconto 45%^Sconto 50%',
    ribassiFinoAl30: 'Sconto 10%^Sconto 15^%Sconto 20%^Sconto 25%^Sconto 30%',
    guadagnaPiuPuntiFedelta: 'Più punti fedeltà',
    prezziTondi: 'Prezzo tondo 1,00€^Prezzo tondo 1,50€^Prezzo tondo 2,00€^Prezzo tondo 2,50€^Prezzo tondo 3,00€',
    scontiBuoniSpesa: 'Sconto in buoni spesa'
};

// in qsto caso la scelta utente viene inglobata nel cookie _q, che contiene la ricerca libera
function track_sconto() {
    /* ATTENZIONE!! e.g. se ho scelto faiLaScorta && sottocostoAlCosto, il cookie _sconto diventerà ^faiLaScorta^sottocostoAlCosto^,
    mentre al cookie _q verrà aggiunto (al momento della chiamata ajax) il mapping ^2x1^3x2^4x2^Al costo^Sottocosto^ !!!! */
    var testoSconto = "^";
    $('[name="chosenSconto"]:checked').each(function () {
        testoSconto += $(this).val() + '^';
    });
    // if nothing checked e cookie vuoto, click on anchor 'annulla'
    if (testoSconto === '^') {
        // se cookie not null, reset and re-search
        if ($.cookie('_sconto')) {
            delCookie('_sconto');
            triggerSearch();
        } else {
            $('.cpopup').click();
            return false;
        }
	}
	else {
	    setCookie('_sconto', testoSconto);
		triggerSearch();
	}
}

// funzione chiamata dal callback ajax
function bind_sconto_callback() {
    // riempimento delle checkbox rilevanti
    if (!isEmptyCookie('_sconto')) {
        var testoSconto = $.cookie('_sconto');
        var scontiArray = testoSconto.split('^').slice(1); // il primo elemento è sicuramente ""
        $('[name="chosenSconto"]').each(function (index, element) {
            $(this).attr('checked', false);
            if (scontiArray.indexOf($(this).val()) != -1) $(this).attr('checked', 'checked');
        });
    }
} // fn

/*********************************************************************************************************************
POPUP RICERCA LIBERA (righe spostate qui dal advsearchparam2.aspx)
**********************************************************************************************************************/
function track_libera() {

    var testoLibera = $.trim($('.inputRicercaLibera').val());
    // se testo vuoto e cookie vuoto, click on anchor 'annulla'
    if (!testoLibera) {
        // se cookie not null, reset and re-search
        if ($.cookie('_q') != testoLibera) {
            delCookie('_q');
            triggerSearch();
        }
        else {
            $('.cpopup').click();
            return false;
        }
    }
    else {
        setCookie('_q', testoLibera);
        triggerSearch();
    }
}

// funzione vuota rimasta per soddisfare un $(document).ready() nel codebehind
function bind_libera() { }

// funzione chiamata dal callback ajax
function bind_libera_callback() {
    if (!isEmptyCookie('_q')) {
        $('.inputRicercaLibera', $('#popupricercalib')).val($.cookie('_q'));
    }
} // fn

function getShowCases(fed, fn) {
    var path = "input:checkbox:checked";
    if (fed) {
        path += "[card$='" + fed + "']";
    }

    return $.unique(
		$.map(
			$(path, 'div#insegna table:eq(0)'),
			function (o, i) {
			    if (fn) {
			        if ($.isFunction(fn)) {
			            return fn(o);
			        } else {
			            return $(o).attr('value');
			        }
			    } else {
			        return $(o).attr('value');
			    }

			}
		)
	)
}


/***********************************************************************************************************************
GEOLOCALIZZA (se necessario), e lancia la INITSEARCH (Se necessario), 
in modo da sapere quali Inegne sono nell'intorno utente 
***********************************************************************************************************************/
function advsearch2(o, mode) {
    UpdateSearch(function () {
        advsearch(o, mode);
    });
}

/***********************************************************************************************************************
Resetta la paginazione attuale.
***********************************************************************************************************************/
function resetPaging() {
    setCookie('_pindex', 1);
    setCookie('_psize', Number($("select#psize").val()));
}

/***********************************************************************************************************************
Nella tools di ricerca avanzata, si occupa di visualizzare/nascondere l'iconcina di spunta che avverte
della presenza del filtro impostato in memoria.
***********************************************************************************************************************/
function resetTools() {
    if ((!isEmptyCookie('_chainIds')) || (!isEmptyCookie('_pdvId'))) {
        $('a#resetinsegna').show();
    } else {
        $('a#resetinsegna').fadeOut("slow");
    } // if

    if (!isEmptyCookie('_q')) {
        $('a#resetlibera').show();
    }
    // otherwise lasciare visibile il check per la ricerca libera
    else {
        $('a#resetlibera').fadeOut("slow");
    } // if

    if (!isEmptyCookie('_sconto')) {
        $('a#resetsconto').show();
    } else {
        $('a#resetsconto').fadeOut();
    } // if

    if (!isEmptyCookie('_catIds')) {
        $('a#resetcategorie').show();
    } else {
        $('a#resetcategorie').fadeOut("slow");
    } // if
}

/***********************************************************************************************************************
Click dell'icona di spunta. Elimina il filtro passatogli e scatena una nuova ricerca.
***********************************************************************************************************************/
function deleteFilter(o, ck) {
    if (!searchInProgress) {
        delCookie(ck);
        // nascondo l'icona sender
        $(o).hide();    
        // scateno la ricerca
        resetPaging();
        resetSearch();
        $('div.pulsantecerca a:eq(0)').trigger('click');
    }
}

/***********************************************************************************************************************
Elimina filtro categoria
***********************************************************************************************************************/
function deletecategorie(o) {
    deleteFilter(o, '_catIds');
} // function

/***********************************************************************************************************************
Elimina filtro ricerca libera
***********************************************************************************************************************/
function deletelibera(o) {
    deleteFilter(o, '_q');  
} // function

/***********************************************************************************************************************
Elimina filtro ricerca per sconto
***********************************************************************************************************************/
function deletesconto(o) {
    deleteFilter(o, '_sconto');  
} // function

/***********************************************************************************************************************
Elimina filtro insegne
***********************************************************************************************************************/
function deleteinsegne(o) {
    delCookie('_chainIds');
    delCookie('_chainIdsFed');
    delCookie('_chainIdsNoFed');
    deleteFilter(o, '_pdvId');
} // function

/***********************************************************************************************************************
Cambia pagina e scatena la ricerca (NEXT/PREV)
***********************************************************************************************************************/
function stepPage(step) {
    if (!searchInProgress) {
        setPage(Number($.cookie('_pindex')) + step);
        fnsearch('');
    } // if
}

/***********************************************************************************************************************
Cambia l'ordinamento e scatena la ricerca
***********************************************************************************************************************/
function changeSortOrder(o) {
    if (!searchInProgress) {
        resetPaging();
        setCookie('_oby', $(o).val());
        fnsearch('');
    }
} // function

/***********************************************************************************************************************
Cambia il numero di record per pagina e scatena la ricerca
***********************************************************************************************************************/
function changeRecordPageNumber(o) {
    if (!searchInProgress) {
        resetPaging();
        setCookie('_psize', $(o).val());
        fnsearch('');
    } // if
} // function

/***********************************************************************************************************************
Apre la lista in modalità standard
***********************************************************************************************************************/
function stampaLista() {
    var win = window.open(document.location + '&mode=print', '_win', '');
} // function

/***********************************************************************************************************************
Elimina Lista della spesa da quelle salvate
***********************************************************************************************************************/
function deletelist(o, pdvid, bskguid, fn) {
    $(o).attr('disabled', 'disabled');
    $(o).nextAll('img.wait').css({'visibility' : 'visible'});
    $.get(
        '/basketDelete.aspx',
        {output: 'JSON', rnd: rnd(), guid: bskguid, pdv: pdvid},
        function (data) {
            fn();
        } // callback
    ); // json
    $(o).removeAttr('disabled');
    return false;
} // function

/***********************************************************************************************************************
Salva la lista della spesa
***********************************************************************************************************************/
function savelist(o, pdvid, bskguid) {
    $(o).attr('disabled', 'disabled');
    $('img.wait', $(o).parent()).css({'visibility' : 'visible'});
    var name =  $('input#namefor_' + pdvid).val();
    var note =  $('textarea#notefor_' + pdvid).val();
    $.get(
        '/basketSave.aspx',
        {output: 'JSON', rnd: rnd(), guid: bskguid, pdv: pdvid, bskName: name, bsknote: note },
        function (data) {
            window.location.reload();
        } // callback
    ); // json
    $(o).removeAttr('disabled');
    return false;
} // function

/***********************************************************************************************************************
Visualizza le liste della spesa Salvata
***********************************************************************************************************************/
function viewSavedLists() {
    $.get(
        '/basketsList.aspx',
        {output: 'BIND', rnd: rnd()},
        function (data) {
            if ($('div#mylists').size() === 0) {
                $('div.colonna1').children('div:eq(2)').before(data);
            } else {
                $('div#mylists').replaceWith(data);
            }
        }
    );
} // function


/* Accessible Pop-up Links
* http://www.alistapart.com/articles/popuplinks/
*/


/***********************************************************************************************************************
oggetto undefined
***********************************************************************************************************************/
function isUndefined(v) {
    var undef;
    return v === undef;
}

/***********************************************************************************************************************
pops up a window containing url optionally named target, optionally having features
***********************************************************************************************************************/
function raw_popup(url, target, features) { 
    if (isUndefined(features)) {
        features = POPUP_FEATURES;
    }
    if (isUndefined(target)) {
        target = '_blank';
    }
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    return theWindow;
}

/***********************************************************************************************************************
to be used in an html event handler as in: <a href="..." onclick="link_popup(this,...)" ...
pops up a window grabbing the url from the event source's href
***********************************************************************************************************************/
function link_popup(src, features) { 
    return raw_popup(src.getAttribute('href'), (src.getAttribute('target') || '_blank'), features);
}

     

function saveBasketNotes(bskid, pdvid, notes, a) {
    try {               
        $.ajax(
            {
                url: '/holdbasketnotes.aspx?output=JSON'
                , type : 'POST'
                , dataType: 'json'
                , data: {"bsk": bskid, "pdv": pdvid, "notes": notes}
                , success: function(data) {
                    //a.href
                    //window.location = url;                
                    window.open(a.attr('href'));                    
                }
            }
        );      
        return true;
    } catch (e) {       
        alert(e);
        return false;
    }
}
     
/***********************************************************************************************************************
INIT DELLA PAGINA
***********************************************************************************************************************/
$(document).ready(initialize);


/* ********************************************************************************************************************
TEMPORANEAMENTE QUI, finche non verranno implementata la fix della gestione insegne durante registrazione/update profilo
**********************************************************************************************************************/
function trackchoice(m) {
    switch (m) {
        case 'libera':
            track_libera();
            break;
        case 'sconto':
            track_sconto();
            break;
        case 'insegna':
            selection_getShowCasesAndPdv();
            break;
        case 'categoria':
            selection_getCategories();
            break;
    }
}
/* ********************************************************************************************************************
SCATENA LA RICERCA 
**********************************************************************************************************************/
function triggerSearch() {
    $('div.pulsantecerca a:eq(0)').trigger('click');
    closePanel();
} // function
/*********************************************************************************************************************
CHIUDE IL POP UP
**********************************************************************************************************************/
function closePanel() {
    $('div.pnlAdvSearchContainer').remove();
} // function



