(function ($) {

    var Config = {
        ServerURL: "/Controller/CercaAgenzia.ashx",
        ServerUtilityURL: "/Controller/Utility.ashx",
        ClientURL: "/Plugins/modCercaAgenzia/CercaAgenzia.htm",
        StyleURL: "/Plugins/modCercaAgenzia/CercaAgenzia.css",
        AgenziaURL: "/Plugins/modCercaAgenzia/Agenzia.htm",
        TplProdotto: null,
        Container: "",
        Agenzie: [],
        SearchByCAP: true,
        SearchByProv: true,
        Layout: "Left" //"Left" o "InPage"
    };


    $.fn.CercaAgenzia = function (options) {
        // integro le configurazioni con quelle passate (injection di parametri)
        if (options) {
            Config = $.extend(Config, options);
        }
        // setto il container
        Config.Container = $(this);
        // lancio la funzione di ingresso
        Init();
    };


    $.fn.CercaAgenzia.Destroy = function () { }


    function Init() {
        // carico la pagina html
        Config.Container.load(Config.ClientURL, function () {

            // renderizzo box ricerca
            RenderizzaBoxRicerca();

            // carico il template per l'impaginazione delle Agenzie
            CaricaTemplateAgenzia();

            // creo i bindigns sull'interfaccia
            Bindings();

            // stondo gli angoli
            $.fn.Travelmind.RoundCorners();
        });
    }


    function CaricaTemplateAgenzia() {
        $.ajax({
            async: false,
            cache: false,
            url: Config.AgenziaURL,
            success: function (returnData) {
                Config.TplAgenzia = returnData;
            }
        });
    }


    function RenderizzaBoxRicerca() {
        //visualizzo o meno la ricerca per CAP
        if (Config.SearchByCAP) {
            $("#CercaAgenzia_" + Config.Layout + " .CAP").show();
        } else {
            $("#CercaAgenzia_" + Config.Layout + " .CAP").hide();
        }

        //visualizzo o meno la ricerca per Prov
        if (Config.SearchByProv) {

            // carico l'elenco delle provincie
            var Provincie = [];
            var parameters = {};
            parameters.action = "SelProvincieAgenzie";
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerUtilityURL,
                data: parameters,
                success: function (returnData) {
                    Provincie = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : [];
                }
            });

            $("<option/>", { "value": "", "text": "Cerca per Provincia" }).appendTo("#CercaAgenzia_" + Config.Layout + " select.Prov");
            if (Provincie.length > 0) {
                $.each(Provincie, function (i) {
                    $("<option/>", { "value": Provincie[i].Value, "text": Provincie[i].Text }).appendTo("#CercaAgenzia_" + Config.Layout + " select.Prov");
                });
            }


            $("#CercaAgenzia_" + Config.Layout + " .Prov").show();
        } else {
            $("#CercaAgenzia_" + Config.Layout + " .Prov").hide();
        }

        //visualizzo il box ricerca
        $("#CercaAgenzia_" + Config.Layout).show();
    }


    function CercaAgenzieByCap() {
        var parameters = {};
        parameters.action = "SelAgenzieByCAP";
        parameters.CAP = $("#CercaAgenzia_" + Config.Layout + " .inputCAP").val();
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.Agenzie = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : [];
            }
        });

        if (Config.Agenzie.length > 0) {
            $content = $("<div/>", { "id": "ListaAgenzie" });
            var txtIntro = "Le agenzie ''Club eDreams'' sono punti vendita indipendenti gestiti da professionisti in grado di offrirti tutte le proposte volo e hotel presenti sul sito di eDreams, accompagnandole con tutta la loro consulenza per assicurarti di aver scelto sempre il meglio. <br/>Sono il punto di appoggio per chi preferisce acquistare in negozio, senza perdere per&ograve; la convenienza unica di eDreams e le sue irripetibili condizioni di acquisto. <br/>Non sono punti di servizio post vendita per chi ha gi&aacute; comprato on line, che ha il call center e tutto lo staff della sede centrale di eDreams a propria disposizione, ai recapiti pubblicati sul sito. <br/>puoi cercare qua sotto l'agenzia pi&uacute; comoda per te: ti consigliamo per&ograve; di affrettarti perch&eacute; i posti possono essere limitati e se scegli di andare in agenzia non &egrave; possibile bloccarti subito la disponibilit&agrave; da parte nostra. Ti consigliamo anche di telefonare per accertarti che l'agenzia da te selezionata possa renderti disponibile la vacanza che hai scelto sul nostro sito.";
            $content.append($("<div/>", { "class": "intro" }).html(txtIntro));
            $content.append($("<div/>", { "class": "titolo" }).html("Clicca sul nome dell'agenzia per selezionare dove effettuare il pagamento"));
            $.each(Config.Agenzie, function (i) {
                var htmlAgenzia = RenderizzaAgenzia(Config.TplAgenzia, Config.Agenzie[i], Config.Agenzie[i].Id);
                $content.append($(htmlAgenzia));
            });
            ApriPopUp("puoi cercare anche in agenzia la vacanza eDreams dei tuoi sogni", $content, 800, 450);
        } else {
            ShowMessage("Attenzione", "Non sono state trovate agenzie per il cap selezionato");
        }
    }


    function CercaAgenzieByProv() {
        var parameters = {};
        parameters.action = "SelAgenzieByProv";
        parameters.provincia = $("#CercaAgenzia_" + Config.Layout + " .inputProv").val();
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.Agenzie = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : [];
            }
        });

        if (Config.Agenzie.length > 0) {
            $content = $("<div/>", { "id": "ListaAgenzie" });
            var txtIntro = "Le agenzie ''Club eDreams'' sono punti vendita indipendenti gestiti da professionisti in grado di offrirti tutte le proposte volo e hotel presenti sul sito di eDreams, accompagnandole con tutta la loro consulenza per assicurarti di aver scelto sempre il meglio. <br/>Sono il punto di appoggio per chi preferisce acquistare in negozio, senza perdere per&ograve; la convenienza unica di eDreams e le sue irripetibili condizioni di acquisto. <br/>Non sono punti di servizio post vendita per chi ha gi&aacute; comprato on line, che ha il call center e tutto lo staff della sede centrale di eDreams a propria disposizione, ai recapiti pubblicati sul sito. <br/>puoi cercare qua sotto l'agenzia pi&uacute; comoda per te: ti consigliamo per&ograve; di affrettarti perch&eacute; i posti possono essere limitati e se scegli di andare in agenzia non &egrave; possibile bloccarti subito la disponibilit&agrave; da parte nostra. Ti consigliamo anche di telefonare per accertarti che l'agenzia da te selezionata possa renderti disponibile la vacanza che hai scelto sul nostro sito.";
            $content.append($("<div/>", { "class": "intro" }).html(txtIntro));
            $content.append($("<div/>", { "class": "titolo" }).html("Clicca sul nome dell'agenzia per selezionare dove effettuare il pagamento"));
            $.each(Config.Agenzie, function (i) {
                var htmlAgenzia = RenderizzaAgenzia(Config.TplAgenzia, Config.Agenzie[i], Config.Agenzie[i].Id);
                $content.append($(htmlAgenzia));
            });
            ApriPopUp("puoi cercare anche in agenzia la vacanza eDreams dei tuoi sogni", $content, 800, 450);
        } else {
            ShowMessage("Attenzione", "Non sono state trovate agenzie per la provincia selezionata");
        }
    }

    function ApriPopUp(title, $content, width, height) {
        $(Config.Container).append($content);
        $($content).dialog({
            width: width,
            height: height,
            title: title,
            modal: true,
            draggable: true,
            buttons: {
                "Annulla": function () { $(this).dialog("close"); },
                "Continua": function () {
                    var Agenzia = {};
                    var idAgenzia = $("input:radio[name=selAgenzia]:checked").attr("id").replace("selAgenzia", "");
                    $.each(Config.Agenzie, function (i) {
                        if (Config.Agenzie[i].Id == idAgenzia) {
                            Agenzia = Config.Agenzie[i];
                            return;
                        }
                    });
                    $("#acquista").trigger({ type: "agenziaCambiata", agenzia: Agenzia });
                    $(this).dialog("close");
                }
            },
            close: function () {
                $(this).dialog("destroy");
            }
        });
        $($content).dialog('open');
    }

    function CercaAgenzie() {
        var prov = $("#CercaAgenzia_" + Config.Layout + " .inputProv").val();
        var cap = $("#CercaAgenzia_" + Config.Layout + " .inputCAP").val();
        if (cap.match(/^[\-\+]?\d+$/)) {
            CercaAgenzieByCap();
        } else if ((cap == "il tuo CAP" || cap == "") && prov != "") {
            CercaAgenzieByProv();
        } else {
            ShowMessage("Attenzione", "Compilare correttamente i campi di ricerca.");
        }
    }


    function Bindings() {
        // bottone login
        $(".btnCercaAgenzia").bind("click", CercaAgenzie);

        $(".inputCAP").bind("click", function () {
            if ($(this).val() == "il tuo CAP") {
                $(this).val("");
            }
        });

        $(".inputProv").bind("click", function () {
            if ($(this).val() == "Provincia") {
                $(this).val("");
            }
        });
    }


    function RenderizzaAgenzia(tplAgenzia, Agenzia, cnt) {
        tplAgenzia = $(tplAgenzia).clone();

        if (!$.isEmptyObject(Agenzia)) {
            // dati agenzia
            $(tplAgenzia).attr("id", Agenzia.Id);
            $(tplAgenzia).find("input.selAgenzia").attr("id", "selAgenzia" + Agenzia.Id);
            if (Agenzia.LogoPath != undefined && Agenzia.LogoPath != "") {
                $(tplAgenzia).find(".logoAdv").attr("src","Images/LoghiAdv/" + Agenzia.LogoPath);
            } else {
                $(tplAgenzia).find(".logoAdv").hide();
            }
            if (Agenzia.RagioneSociale != undefined) { $(tplAgenzia).find(".ragionesociale").html(Agenzia.RagioneSociale); }
            if (Agenzia.Indirizzo != undefined) { $(tplAgenzia).find(".indirizzo").html(Agenzia.Indirizzo); }
            if (Agenzia.Cap != undefined) { $(tplAgenzia).find(".cap").html(Agenzia.Cap); }
            if (Agenzia.Citta != undefined) { $(tplAgenzia).find(".citta").html(Agenzia.Citta); }
            if (Agenzia.Prov != undefined) { $(tplAgenzia).find(".provincia").html(Agenzia.Prov); }
            if (Agenzia.Cellulare1 != undefined) { $(tplAgenzia).find(".cellulare1").html(Agenzia.Cellulare1); }
            if (Agenzia.Email != undefined) { $(tplAgenzia).find(".email").html(Agenzia.Email); }
        } else {
            // dati agenzia NESSUNA
            $(tplAgenzia).attr("id", 0);
            $(tplAgenzia).find(".ragionesociale").html("NESSUNA AGENZIA");
        }

        return $(tplAgenzia);
    }


    function ShowMessage(title, msg) {
        var msgBox = $("<div/>");
        $(Config.Container).append(msgBox);
        $(msgBox).html(msg).dialog({
            width: 500,
            title: title,
            modal: true,
            draggable: true,
            buttons: {
                "Chiudi": function () { $(this).dialog("close"); }
            },
            close: function () {
                $(this).dialog("destroy");
            }
        });
        $(msgBox).dialog('open');
    }


})(jQuery);
