function CarigeMaps() {

    this.loaded = false;
    this.initByParam = false;
    this.paramsProcessed = false;

    this.querystring = location.search;
    this.debug = (this.querystring == "?debug=1");

    this.brandDesc = new Object();
    this.brandDesc["carige"] = i18n.bcarige;
    this.brandDesc["carisa"] = i18n.bcarisa;
    this.brandDesc["carica"] = i18n.bcarica;
    this.brandDesc["monte_lucca"] = i18n.bmontelucca;
    this.brandDesc["cesare_ponti"] = i18n.bcesareponti;
    this.brandDesc["carige_assicurazioni"] = i18n.bcarigeass;
    this.brandDesc["punto_mutui"] = i18n.bpuntomutui;
    this.brandDesc["carige_vita_nuova"] = i18n.bcarigevitanuova;
    //this.brandDesc["ca_cvn"] = "Carige Assicurazioni/Carige Vita Nuova";

    this.mapTypesArr = [G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP,G_PHYSICAL_MAP];

    this.mapTypes = new Object();
    this.mapTypes["mappa"] = G_NORMAL_MAP;
    this.mapTypes["satellite"] = G_SATELLITE_MAP;
    this.mapTypes["ibrida"] = G_HYBRID_MAP;
    this.mapTypes["terreno"] = G_PHYSICAL_MAP;

    this.is_ie6 = (
    	window.external &&
    	typeof window.XMLHttpRequest == "undefined"
    );

    this.ie6 = this.is_ie6 ? "ie6" : "";

    this.lastSearchTimestamp = 0;

    /**
     * Inizializzazione del sistema
     */
    this.init = function() {
        if (GBrowserIsCompatible()) {
            this.map = new GMap2(document.getElementById("rf_map"),
                {backgroundColor: "#dff3f5", mapTypes: this.mapTypesArr});

            this.map.setCenter(new GLatLng(41.895466,12.482324), 5);

            GEvent.addListener(this.map, "maptypechanged", function() {
                var currentMapType = window.carigeMaps.map.getCurrentMapType();
                if (window.carigeMaps.mapTypes["mappa"] == currentMapType) {
                    $("#rf_map_style > option:eq(0)").attr("selected", true);
                } else if (window.carigeMaps.mapTypes["satellite"] == currentMapType) {
                    $("#rf_map_style > option:eq(1)").attr("selected", true);
                } else if (window.carigeMaps.mapTypes["ibrida"] == currentMapType) {
                    $("#rf_map_style > option:eq(2)").attr("selected", true);
                } else if (window.carigeMaps.mapTypes["terreno"] == currentMapType) {
                    $("#rf_map_style > option:eq(3)").attr("selected", true);
                }

            });

            //this.map.setMapType(G_HYBRID_MAP);

            // icona base per i marker
            this.baseIcon = new GIcon(G_DEFAULT_ICON);
            this.baseIcon.shadow = IMG_PATH + "ombra_marker.png";
            this.baseIcon.transparent = IMG_PATH + "transparent_marker.png";
            this.baseIcon.iconSize = new GSize(51, 35);
            this.baseIcon.imageMap = [7,4, 49,4, 49,26, 7,26];
            this.baseIcon.shadowSize = new GSize(72, 37);
            this.baseIcon.iconAnchor = new GPoint(39, 35);
            this.baseIcon.infoWindowAnchor = new GPoint(38, 35);

            this.map.addControl(new GLargeMapControl());
            this.map.addControl(new GMenuMapTypeControl());
            this.map.addControl(new GScaleControl());

            this.geocoder = new GClientGeocoder();
            //this.geocoder.setBaseCountryCode("IT");
            this.geocoder.setBaseCountryCode(i18n.langCode.toUpperCase());

            this.gdir = new GDirections(this.map, document.getElementById("rf_path"));
            GEvent.addListener(this.gdir, "load", this.onGDirectionsLoad);
            GEvent.addListener(this.gdir, "error", this.handleDirectionsErrors);

            $('#rf_citta').bind('keypress', function(e) {
                if(e.keyCode==13){
                    window.carigeMaps.searchAgBm();
                }
            });

            $('#rf_regione').bind('keypress', function(e) {
                if(e.keyCode==13){
                    window.carigeMaps.searchReg();
                }
            });

            // controllo se ci sono i parametri per visualizzare
            // subito dei risultati
            if (window.latParam != undefined &&
                    window.lngParam != undefined &&
                    window.brandParam != undefined &&
                    window.latParam != "" &&
                    window.lngParam != "" &&
                    window.brandParam != "") {

                this.initByParam = true;

                $("#rf_bcarige").attr('checked', false);
                $("#rf_bcarisa").attr('checked', false);
                $("#rf_bcarigeass").attr('checked', false);
                $("#rf_bcarica").attr('checked', false);
                $("#rf_bcesareponti").attr('checked', false);
                $("#rf_bmontelucca").attr('checked', false);
                $("#rf_bpuntomutui").attr('checked', false);
                $("#rf_bcarigevitanuova").attr('checked', false);

                $("#rf_b" + window.brandParam).attr('checked', true);

                setTimeout("window.carigeMaps.searchAgBm()", 3000);

            } else {
                this.showRiepilogoRegioni();

            }

            if( typeof prendiAppuntamento === "undefined" ) {
                window.prendiAppuntamento = false;

            }

            this.loaded = true;

        }
    };

    this.onGDirectionsLoad = function() {
      // accesso ai dati della ricerca
    };

    this.handleDirectionsErrors = function() {
       if (window.carigeMaps.gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) {
           alert(i18n.geoUnknownAddress);
       } else if (window.carigeMaps.gdir.getStatus().code == G_GEO_MISSING_QUERY) {
           alert(i18n.geoMissingQuery);
       } else {
           alert(i18n.geoUnavailable);
       }
    };

    /**
     *
     */
    this.searchAgBmCB = function(point) {

        this.cleanSearchResults();
        var dist = $("#rf_distanza").val();
        var tipo = $("input[@name='radio_agenzie_bancomat']:checked").val();
        var indirizzo = $("#rf_citta").val();
        var bcarige = $("#rf_bcarige").is(":checked");
        var bcarisa = $("#rf_bcarisa").is(":checked");
        var bcarigeass = $("#rf_bcarigeass").is(":checked");
        var bcarica = $("#rf_bcarica").is(":checked");
        var bcesareponti = $("#rf_bcesareponti").is(":checked");
        var bmontelucca = $("#rf_bmontelucca").is(":checked");
        var bpuntomutui = $("#rf_bpuntomutui").is(":checked");
        var bcarigevitanuova = $("#rf_bcarigevitanuova").is(":checked");

        var ts = new Date();
        window.carigeMaps.lastSearchTimestamp = ts.getTime();
        var url = "find.jsp?ts=" + window.carigeMaps.lastSearchTimestamp + "&tipo=" + tipo + "&lang=" + i18n.langCode;

//        url += "&citta=" + citta;

        if (point != null) {
            url += "&vicinoalat=" + point.lat() + "&vicinoalong=" + point.lng();

        }

        if (dist != null && dist != "" && dist != "0" && dist.match(/^[\d\.,]+$/)) {
            url += "&maxdist=" + dist;
        }

        if (bcarige) {
            url += "&bcarige=" + 1;
        }
        if (bcarisa) {
            url += "&bcarisa=" + 1;
        }
        if (bcarigeass) {
            url += "&bcarigeass=" + 1;
        }
        if (bcarica) {
            url += "&bcarica=" + 1;
        }
        if (bcesareponti) {
            url += "&bcesareponti=" + 1;
        }
        if (bmontelucca) {
            url += "&bmontelucca=" + 1;
        }
        if (bpuntomutui) {
            url += "&bpuntomutui=" + 1;
        }
        if (bcarigevitanuova) {
            url += "&bcarigevitanuova=" + 1;
        }

        var resultsTitle = tipo;

        if( ! window.carigeMaps.initByParam || window.carigeMaps.paramsProcessed ) {
            resultsTitle += " " + i18n.vicinoA + " " + indirizzo;

            if (dist == null || dist == "" || dist == "0" || ! dist.match(/^[\d\.,]+$/)) {
                dist = DEFAULT_DIST;
            }
            resultsTitle += " " + i18n.nelRaggioDi + " " + dist + " " + i18n.km;
        }

        window.carigeMaps.doAutoCenterZoom = true;

        $("#rf_results_title").html(resultsTitle);

        $("#rf_loading").show();

        $.getJSON(url, window.carigeMaps.ajaxRequestHandler);

    };

    /**
     *
     */
    this.searchAgBm = function() {
        var address = $("#rf_citta").val();
        if (address == "" && (! window.carigeMaps.initByParam || window.carigeMaps.paramsProcessed)) {
            alert(i18n.doveObbligatorio);
            return;
        }

        $("#rf_regione option:first").attr("selected", true);
        $("#rf_tab_ricerca_regione ul.cb_banche input:checkbox").attr("checked", false);

        //se ho i parametri lat lng non geocodifico
        if ( window.carigeMaps.initByParam &&
                ! window.carigeMaps.paramsProcessed &&
                window.latParam != undefined &&
                window.lngParam != undefined &&
                window.latParam != "" &&
                window.lngParam != "") {
            var point = new GLatLng(window.latParam, window.lngParam);

            window.carigeMaps.doAutoCenterZoom = true;

            window.carigeMaps.searchAgBmCB(point);
            return;
        }

        // se è un CAP aggiungo italia per non sbagliare nazione

        // cerco se è un comune, se sì aggiungo la provincia
        var ts = new Date();
        var url = "checkComune.jsp?ts=" + ts.getTime() + "&q=" + encodeURIComponent(address);
        $.get(url,
            function(data){
//                var data = jsonData.searchTerm;
                //var data = decodeURIComponent(encData.replace(/\+/g," "));


                $("#rf_citta").val(data);

                var searchAddress = data;

                if ( data.match(/\d{5}/) ) {
                    searchAddress += ", Italia";
                }

                window.carigeMaps.geocoder.getLatLng(searchAddress,
                    function(point) {
                        if (point == null) {
                            alert(data + " " + i18n.addressNotFound);
                            return;

                        }

                        window.carigeMaps.searchAgBmCB(point);

                    }
                );

            }

        );

    };

    /**
     *
     */
    this.searchReg = function() {
        var regione = $("#rf_regione").val();
        if (regione == "") {
            alert(i18n.regioneObbligatoria);
            return;
        } else if (regione == "ALL") {
            this.showRiepilogoRegioni();
            return;

        }

        this.cleanSearchResults();

        $("#rf_citta").val("");
        $("#rf_distanza").val(DEFAULT_DIST);
        $("#rf_radio_agenzie").attr("checked", true);
        $("#rf_tab_ricerca_libera ul.cb_banche input:checkbox").attr("checked", false);

        var bcarige = $("#rf_bcarige_reg").is(":checked");
        var bcarisa = $("#rf_bcarisa_reg").is(":checked");
        var bcarigeass = $("#rf_bcarigeass_reg").is(":checked");
        var bcarica = $("#rf_bcarica_reg").is(":checked");
        var bcesareponti = $("#rf_bcesareponti_reg").is(":checked");
        var bmontelucca = $("#rf_bmontelucca_reg").is(":checked");
        var bpuntomutui = $("#rf_bpuntomutui_reg").is(":checked");
        var bcarigevitanuova = $("#rf_bcarigevitanuova_reg").is(":checked");

        var ts = new Date();
        window.carigeMaps.lastSearchTimestamp = ts.getTime();
        var url = "find.jsp?ts=" +
                window.carigeMaps.lastSearchTimestamp + "&regione=" + regione + "&lang=" + i18n.langCode;


        if (bcarige) {
            url += "&bcarige=" + 1;
        }
        if (bcarisa) {
            url += "&bcarisa=" + 1;
        }
        if (bcarigeass) {
            url += "&bcarigeass=" + 1;
        }
        if (bcarica) {
            url += "&bcarica=" + 1;
        }
        if (bcesareponti) {
            url += "&bcesareponti=" + 1;
        }
        if (bmontelucca) {
            url += "&bmontelucca=" + 1;
        }
        if (bpuntomutui) {
            url += "&bpuntomutui=" + 1;
        }
        if (bcarigevitanuova) {
            url += "&bcarigevitanuova=" + 1;
        }

        $("#rf_results_title").html(i18n.agenzieNellaRegione + " " + regione.toUpperCase() );

        window.carigeMaps.doAutoCenterZoom = true;

        $("#rf_loading").show();

        $.getJSON(url, window.carigeMaps.ajaxRequestHandler);

    };

    this.ajaxRequestHandler = function(data) {
        if (data.searchMetaData.timestamp !=
                window.carigeMaps.lastSearchTimestamp) {
            return;
        }

        $("#rf_loading").hide();

        if (data.results.length == 0) {
            if (data.searchMetaData.searchType == "REG" ) {
                $("#rf_results").html("<p>" + i18n.nessunaFilialeTrovata + "</p>");
            }
            else {
                $("#rf_results").html("<p>" + i18n.nessunaFilialeTrovata + "<br>" +
                        i18n.affinaLaRicercaHtml + "</p>");
            }
            return;
        }

        window.carigeMaps.results = data.results;

        window.carigeMaps.searchMetaData = data.searchMetaData;

        window.carigeMaps.showResults();

        if (window.carigeMaps.doAutoCenterZoom) {
          window.carigeMaps.autoCenterZoomMap();
        }

        if (window.carigeMaps.initByParam && !window.carigeMaps.paramsProcessed) {
            window.carigeMaps.paramsProcessed = true;

        }

    };

    this.showResults = function() {
        if ( this.searchMetaData.searchType == "REG" ) {

            this.regResultList = new Object();

            for (var i in this.results) {
                var obj = this.results[i];
                this.showMarkers(obj);
                if (this.regResultList[obj.brand]) {
                    this.regResultList[obj.brand]++;
                } else {
                    this.regResultList[obj.brand] = 1;
                }

            }

            this.showResultListReg();

        } else {
            var counter = 0;
            for (var i in this.results) {
                var obj = this.results[i];
                this.showMarkers(obj);
                this.showResultListAgBm(obj);

                counter++;

                if (this.initByParam && ! this.paramsProcessed &&
                        window.resParam != undefined &&
                        parseInt(window.resParam) == counter ) {

                    if(counter == 1){
                        this.openInfoWindow(obj.id, 0);
                    }

                    break;
                }

            }
        }
    };

    this.showRiepilogoRegioni = function() {
        $("#rf_results_title").html(i18n.titoloRiepilogoRegioni);

        $("#rf_loading").show();

        $("#rf_citta").val("");
        $("#rf_distanza").val(DEFAULT_DIST);
        $("#rf_radio_agenzie").attr("checked", true);
        $("#rf_tab_ricerca_libera ul.cb_banche input:checkbox").attr("checked", false);


        var bcarige = $("#rf_bcarige_reg").is(":checked");
        var bcarisa = $("#rf_bcarisa_reg").is(":checked");
        var bcarigeass = $("#rf_bcarigeass_reg").is(":checked");
        var bcarica = $("#rf_bcarica_reg").is(":checked");
        var bcesareponti = $("#rf_bcesareponti_reg").is(":checked");
        var bmontelucca = $("#rf_bmontelucca_reg").is(":checked");
        var bpuntomutui = $("#rf_bpuntomutui_reg").is(":checked");
        var bcarigevitanuova = $("#rf_bcarigevitanuova_reg").is(":checked");

        var ts = new Date();
        var url = "riepilogo_regioni.jsp?ts=" + ts.getTime() + "&lang=" + i18n.langCode;


        if (bcarige) {
            url += "&bcarige=" + 1;
        }
        if (bcarisa) {
            url += "&bcarisa=" + 1;
        }
        if (bcarigeass) {
            url += "&bcarigeass=" + 1;
        }
        if (bcarica) {
            url += "&bcarica=" + 1;
        }
        if (bcesareponti) {
            url += "&bcesareponti=" + 1;
        }
        if (bmontelucca) {
            url += "&bmontelucca=" + 1;
        }
        if (bpuntomutui) {
            url += "&bpuntomutui=" + 1;
        }
        if (bcarigevitanuova) {
            url += "&bcarigevitanuova=" + 1;
        }

        $.get(url, null, function(htmlStr){
            $("#rf_loading").hide();
            $("#rf_results").html(htmlStr);

        });
    };

    this.showMarkers = function(obj) {
        obj._tabs = this.buildMapTabs(obj);
        obj._marker = this.createMarker(
            new GLatLng(obj.latitudine, obj.longitudine), obj.brand, obj._tabs);

        GEvent.addListener(obj._marker, "click", function() {
            //obj._marker.openInfoWindowTabsHtml(obj._tabs);
            window.carigeMaps.selectTab(0, obj.id);
        });

        this.map.addOverlay( obj._marker );

    };

    this.showResultListAgBm = function(obj) {
        var desc = this.buildShortDescAgBm(obj);
        $("#rf_results").append(desc);

    };

    this.showResultListReg = function() {
        for (var i in this.regResultList) {
            var desc = this.buildShortDescReg(i, this.regResultList[i]);
            $("#rf_results").append(desc);
        }

    };

    this.buildMapTabs = function(obj) {
        var tab1 = "<div style=\"width:330px;height:150px;margin:8px;\" class=\"infoWindowTabContainer\"><h3>" +
            obj.cod + " - " + obj.nome + "</h3><p>" + obj.indirizzo + "<br>" + obj.cap;
            if (obj.quartiere != "") {
                tab1 += " " + obj.quartiere;
            }
            if (obj.localita != "" &&
                    obj.localita.toUpperCase() != obj.comune.toUpperCase()) {
                tab1 += " " + obj.localita;
            }
            if (obj.comune != "") {
                tab1 += " " + obj.comune;
            }
            if (obj.provincia != "") {
                tab1 += " (" + obj.provincia + ")";
            }
            if (obj.telefono != "") {
                tab1 += "<br><strong>" + i18n.telefono + ":</strong> " + obj.telefono;
            }
            if (obj.fax != "") {
                tab1 += "<br><strong>" + i18n.fax + ":</strong>&nbsp;" + obj.fax;
            }

            tab1 += "</p><p><a href=\"javascript:window.carigeMaps.selectTab(1);\">"+i18n.dettaglio+"</a> "+
            "<a href=\"javascript:window.carigeMaps.selectTab(2);\">"+i18n.percorso+"</a>";

            if (prendiAppuntamento) {
                tab1 += " <a href=\"#\" onclick=\"window.carigeMaps.prendiAppuntamento('" +
                    obj.cod + "','" + obj.nome + "');\">"+i18n.prendiAppuntamento+"</a>";
            }

            tab1 += "</p></div>";


        var tab2 = "<div style=\"width:330px;height:150px;margin:8px;\" class=\"infoWindowTabContainer\"><h3>" +
            obj.cod + " - " + obj.nome + "</h3>";
            if (obj.immagine != "") {
                tab2 += "<img src=\"" + IMG_PATH + "" + obj.immagine +
                "\" class=\"imgInfoWindow\" alt=\"" + i18n.immagineFiliale + " " +
                obj.nome + "\" style=\"float:right;\" />";
            }
            tab2 += "<p>" + obj.indirizzo + "<br>" + obj.cap;
            if (obj.quartiere != "") {
                tab2 += " " + obj.quartiere;
            }
            if (obj.localita != "" &&
                    obj.localita.toUpperCase() != obj.comune.toUpperCase()) {
                tab2 += " " + obj.localita;
            }
            if (obj.comune != "") {
                tab2 += " " + obj.comune;
            }
            if (obj.provincia != "") {
                tab2 += " (" + obj.provincia + ")";
            }
            if (obj.telefono != "") {
                tab2 += "<br><strong>" + i18n.telefono + ":</strong> " + obj.telefono;
            }
            if (obj.fax != "") {
                tab2 += "<br><strong>" + i18n.fax + ":</strong>&nbsp;" + obj.fax;
            }

            tab2 += "</p><p>";
            if (obj.abi != "") {
                tab2 += "<strong>" + i18n.abi + ":</strong>&nbsp;" + obj.abi;
            }
            if (obj.cab != "") {
                tab2 += " <strong>" + i18n.cab + ":</strong>&nbsp;" + obj.cab;
            }
            if (obj.email != "") {
                tab2 += " <strong>" + i18n.email + ":</strong>&nbsp;" + obj.email;
            }

            tab2 += "</p>";

            if (obj.santoPatrono != "") {
                tab2 += "<p><strong>" + i18n.santoPatrono + ":</strong>&nbsp;" + obj.santoPatrono + "</p>";
            }
            if (obj.orario != "") {
                tab2 += "<p><strong>" + i18n.orario + ":</strong>&nbsp;" + obj.orario + "</p>";
            }
            if (obj.servizi != "") {
                tab2 += "<p><strong>" + i18n.servizi + ":</strong>&nbsp;" + obj.servizi + "</p>";
            }

            tab2 += "</div>";

        var tab3 = "<div style=\"width:330px;height:150px;margin:8px;\" class=\"infoWindowTabContainer\">" +
            "<h3>"+i18n.titoloIndicazioniStradali+"</h3><p>"+i18n.testoIndicazioniStradali+"</p>" +
            "<p><strong>"+i18n.indirizzo+":</strong> <input type=\"text\" id=\"rf_fp_addr_" + obj.id + "\" /><br>" +
            "<p><strong>"+i18n.citta+":</strong> <input type=\"text\" id=\"rf_fp_citta_" + obj.id + "\" /> " +
            "<a href=\"javascript:carigeMaps.findPath('" + obj.id +
            "');\" title=\""+i18n.vai+"\"><img src=\"/gruppo/html/"+i18n.currentLang+"/gifs/vai.gif\" " +
            "alt=\""+i18n.vai+"\" /></a></p></div>";

        var infoWindowTabs = [];
        infoWindowTabs.push(new GInfoWindowTab(i18n.infoGenerali, tab1));
        infoWindowTabs.push(new GInfoWindowTab(i18n.dettaglio, tab2));
        infoWindowTabs.push(new GInfoWindowTab(i18n.percorso, tab3));

        return infoWindowTabs;
    };

    this.buildShortDescAgBm = function(obj) {
        var desc = "<p id=\"rf_result_" + obj.id + "\"><img src=\"" + IMG_PATH + "p_" + obj.brand +
            ".png\" class=\"icoResultsList\" alt=\""+i18n.icona+" " + this.brandDesc[obj.brand] + "\" />" +
            "<a href=\"javascript:window.carigeMaps.selectTab(0, '" +
            obj.id + "');\"><strong>" + obj.cod + " - " + obj.nome + "</strong></a><br>" +
            obj.indirizzo + "<br>" + obj.cap;
            if (obj.quartiere != "") {
                desc += " " + obj.quartiere;
            }
            if (obj.localita != "" &&
                    obj.localita.toUpperCase() != obj.comune.toUpperCase()) {
                desc += " " + obj.localita;
            }
            if (obj.comune != "") {
                desc += " " + obj.comune;
            }
            if (obj.provincia != "") {
                desc += " (" + obj.provincia + ")";
            }
            if (obj.telefono != "") {
                desc += "<br><strong>" + i18n.telefono + ":</strong> " + obj.telefono;
            }
            if (obj.fax != "") {
                desc += "<br><strong>" + i18n.fax + ":</strong> " + obj.fax;
            }

            desc += "<br><strong>" + i18n.distanzaIndicativa + ":</strong> " + Math.ceil(obj.distanza) + " Km";

            desc += " <a style=\"margin-left: 10px;\" href=\"javascript:window.carigeMaps.selectTab(1, '" +
            obj.id + "');\">"+i18n.dettaglio+"</a> "+
            " <a style=\"margin-left: 10px;\" href=\"javascript:window.carigeMaps.selectTab(2, '" +
            obj.id + "');\">"+i18n.percorso+"</a>";

            if (prendiAppuntamento) {
                desc += " <a style=\"margin-left: 10px;\" href=\"#\" onclick=\"window.carigeMaps.prendiAppuntamento('" +
                    obj.cod + "','" + obj.nome + "');\">" + i18n.prendiAppuntamento+"</a>";
            }

            desc += "</p>"

        return desc;

    };

    this.buildShortDescReg = function(brand, n) {
        var desc = "<p><img src=\"" + IMG_PATH + "p_" + brand +
            ".png\" class=\"icoResultsList\" alt=\""+i18n.icona+" " + this.brandDesc[brand] + "\" />" +
            "<strong>" + this.brandDesc[brand] + ":</strong> " + n + "</p>";

        return desc;

    };

    this.findPath = function(objId) {
        var obj = this.getResultById(objId);
        var addressInput = $("#rf_fp_addr_" + objId);
        var address = addressInput.val();

        var cittaInput = $("#rf_fp_citta_" + objId);
        var citta = cittaInput.val();

        var fullAddr = address;
        if (citta != "") {
            fullAddr += ", " + citta;
        }

        var pointTo = obj._marker.getLatLng();

        window.carigeMaps.map.closeInfoWindow();

        this.geocoder.getLatLng(fullAddr,
            function(pointFrom) {
                window.carigeMaps.drawDirections(pointFrom, pointTo, obj);
            }
        );
    };

    this.drawDirections = function(pointFrom, pointTo, obj) {
        if (!pointFrom) {
            alert(address + " " + i18n.notFound);
        } else {
            this.gdir.clear();
            this.gdir.loadFromWaypoints([pointFrom, pointTo], {"locale": i18n.langCode});

            var objDesc = this.buildShortDescAgBm(obj);
            $("#rf_path_header").html(objDesc);

            $("#rf_results_container").hide();
            $("#rf_path_container").show();

        }

    };

    this.backToResults = function() {
        $("#rf_path_container").hide();
        $("#rf_results_container").show();

    };


    this.createMarker = function(point, iconName, infoWindowTabs) {
        // Create a lettered icon for this point using our icon class

        var bankIcon = new GIcon(this.baseIcon);
        bankIcon.image = IMG_PATH + iconName + ".png";

        // Set up our GMarkerOptions object
        markerOptions = {icon:bankIcon};
        var marker = new GMarker(point, markerOptions);

        return marker;
    };

    this.selectResult = function(objId) {
        if (this.selectedResultId != objId) {
            this.selectedResultId = objId;
            $("#rf_results > p").removeClass("selected");
            $("#rf_result_"+objId).addClass("selected");
            return true;
        }

        return false;

    };

    /**
     * Visualizza l'infowindow al click su un risultato nella lista
     */
    this.openInfoWindow = function(objId, tabIndex) {
        var obj = this.getResultById(objId);
        var selTab = 0;
        if (tabIndex) {
            selTab = tabIndex;
        }
        obj._marker.openInfoWindowTabsHtml(obj._tabs, {selectedTab: selTab});

        this.selectResult(objId);

    };

    /**
     * Rimuove tutto ciò che è stato aggiunto alla mappa
     */
    this.cleanSearchResults = function() {
        $("#rf_results").html("");
        $("#rf_results_container").scrollTop(0);
        $("#rf_path_container").scrollTop(0);
        $("#rf_path_header").html("");
        $("#rf_path").html("");

        this.selectResult(null);

        this.map.clearOverlays();

        this.backToResults();

    };

    /**
     * Recupera un risultato dall'array dei risultati.
     */
    this.getResultById = function(id) {
        if (this.results) {
            for (var i = 0; i < this.results.length; i++) {
                if (this.results[i].id == id) {
                    return this.results[i];
                }
            }
        }

        return null;
    };

    /**
     *
     */
    this.autoCenterZoomMap = function() {
        if (this.results) {

            var numRes = this.results.length;
            if (this.initByParam && ! this.paramsProcessed && parseInt(window.resParam) < this.results.length) {
                numRes = parseInt(window.resParam);
            }

            var bounds = new GLatLngBounds();
            for (var i = 0; i < numRes; i++) {
                bounds.extend(this.results[i]._marker.getLatLng());
            }
            this.map.setZoom(this.map.getBoundsZoomLevel(bounds));
            this.map.setCenter(bounds.getCenter());

        }
    };

    this.pan = function(dx, dy) {
        this.map.panDirection(dx, dy);
    };

    this.zoomIn = function() {
        this.map.zoomIn();
    };

    this.zoomOut = function() {
        this.map.zoomOut();
    };

    this.setMapType = function() {
        var mapType = $("#rf_map_style").val();
        this.map.setMapType(this.mapTypes[mapType]);
    };

    this.selectTab = function(tabIndex, objId) {
        if (this.map.getInfoWindow().isHidden() ||
            (objId && this.selectResult(objId))) {
            this.openInfoWindow(objId, tabIndex);
        } else {
            this.map.getInfoWindow().selectTab(tabIndex);
        }

    };

    this.showHelpRicerca = function() {
         $("#rf_help_ricerca").show();
    };

    this.hideHelpRicerca = function() {
         $("#rf_help_ricerca").hide();
    };

    this.prendiAppuntamento = function(cod, nome) {
        $.colorbox({inline:"true", href:"#prendiAppuntamento"});
        window.carigeMaps.codFilialeAppuntamento = cod;
        window.carigeMaps.nomeFilialeAppuntamento = nome;

    };

    this.inviaMailAppuntamento = function() {

        var clientebanca = $("#prendi_app_clientebanca").val();
        var agenzia = $("#prendi_app_agenzia").val();
        var nome = $("#prendi_app_nome").val();
        var cognome = $("#prendi_app_cognome").val();
        var indirizzo = $("#prendi_app_indirizzo").val();
        var citta = $("#prendi_app_citta").val();
        var telefono = $("#prendi_app_telefono").val();
        var cellulare = $("#prendi_app_cellulare").val();
        var email = $("#prendi_app_email").val();
        var codfis = $("#prendi_app_codfis").val();
        var occupazione = $("#prendi_app_occupazione").val();
        var infosu = $("#prendi_app_infosu").val();
        var tipocontatto = $("#prendi_app_tipocontatto").val();
        var fasciaorariacontatto = $("#prendi_app_fasciaorariacontatto").val();
        var testorichiesta = $("#prendi_app_testorichiesta").val();
        var constratt = $("input[@name='constratt']:checked").val();

        //"&agenzia=" + agenzia +
        var ts = new Date();
        var url = "prendiAppEmail.jsp?ts=" + ts.getTime() +
            "&clientebanca=" + clientebanca +
            "&nome=" + nome +
            "&cognome=" + cognome +
            "&indirizzo=" + indirizzo +
            "&citta=" + citta +
            "&telefono=" + telefono +
            "&cellulare=" + cellulare +
            "&email=" + email +
            "&codfis=" + codfis +
            "&occupazione=" + occupazione +
            "&infosu=" + infosu +
            "&tipocontatto=" + tipocontatto +
            "&fasciaorariacontatto=" + fasciaorariacontatto +
            "&testorichiesta=" + testorichiesta +
            "&constratt=" + constratt +
            "&constratt=" + constratt +
            "&codfiliale=" + window.carigeMaps.codFilialeAppuntamento +
            "&nomefiliale=" + window.carigeMaps.nomeFilialeAppuntamento +
            "&lang=" + i18n.langCode;

        $.getJSON(url, window.carigeMaps.prendiAppRequestHandler);

        $.colorbox({inline:"true", href:"#prendiAppuntamentoLoading"});

    };

    this.prendiAppRequestHandler = function(data) {

        if (data.result == "OK") {
            $("#prendi_app_result_msg").html(data.message);
            $("#prendi_app_error_msg").html("");
            $.colorbox({inline:"true", href:"#prendiAppuntamentoResult"});

        } else {
            $("#prendi_app_error_msg").html(data.message);
            $.colorbox({inline:"true", href:"#prendiAppuntamento"});

        }

        

    };

    this.checkLength = function() {
    //ContaCar e' l'inputbox (disabled) che visualizza i caratteri rimanenti)
        var chars=$("#prendi_app_testorichiesta").val();
        if (chars.length > 500) {
            $("#prendi_app_testorichiesta").val(chars.substr(0,500));
            //document.mail02.testorichiesta.blur();
        }

        $("#prendi_app_ContaCar").val(500-$("#prendi_app_testorichiesta").val().length);

    };

};

