(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: "InPage" //"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
        //visualizzo il box ricerca
        $("#CercaAgenzia_" + Config.Layout).show();
    }


    function CercaAgenzieByReg() {
        var parameters = {};
        parameters.action = "SelAgenzieByReg";
        $.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) {
            $("#ListaAgenzie").remove();
            $content = $("<div/>", { "id": "ListaAgenzie" });
            $content.append($("<div/>", { "class": "titolo" }).html("Clicca sul nome dell'agenzia per selezionare dove effettuare il pagamento"));

            // creo la lista di agenzie (divise x regione)
            var $lista = $("<div/>", { "class": "lista" }).appendTo($content);
            var regione = "";
            var regioni = [];
            $.each(Config.Agenzie, function (i) {
                if (regione != Config.Agenzie[i].Regione) {
                    regione = Config.Agenzie[i].Regione;
                    regioni.push(regione);
                    if (i != 0) {
                        $("<div>", { "class": "spacer" }).appendTo($lista);
                    }
                    $("<h1>").html(regione).appendTo($lista);
                    $("<a>", { "name": regione }).css({ "position": "relative" }).appendTo($lista);
                }
                var htmlAgenzia = RenderizzaAgenzia(Config.TplAgenzia, Config.Agenzie[i], Config.Agenzie[i].Id);
                $lista.append($(htmlAgenzia));
            });

            // creo il sommario
            var $sommario = $("<div/>", { "class": "sommario" }).appendTo($content);
            $("<div>", { "class": "title" }).html("Scegli la regione:").appendTo($sommario);
            $.each(regioni, function (i) {
                var $a = $("<a>", { "rel": regioni[i] }).html(regioni[i]).appendTo($sommario);
                if (i == 0) { $a.addClass("active"); }

                // click sul sommario
                $a.bind("click", function () {
                    $("#ListaAgenzie a.active").removeClass("active");
                    $(this).addClass("active");
                    $lista.scrollTo($("a[name='" + $(this).attr("rel") + "']"), 200);
                });

            });

            ApriPopUp("Frigerio Viaggi Network", $content, 750, 400);
        } else {
            ShowMessage("Attenzione", "Non sono state trovate agenzie.");
        }
    }


    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 () {
                    if ($("input:radio[name=selAgenzia]:checked").length > 0) {
                        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];
                                Config.AgenziaScelta = true;
                                return;
                            }
                        });
                        $("#acquista").trigger({ type: "agenziaCambiata", agenzia: Agenzia });
                        $(this).dialog("close");
                    } else {
                        ShowMessage("Attenzione", "Selezionare un agenzia prima di continuare.");
                    }
                }
            },
            close: function () {
                $(this).dialog("destroy");
            }
        });
        $($content).dialog('open');
    }

    function CercaAgenzie() {
        CercaAgenzieByReg();
        //var prov = $("#CercaAgenzia_" + Config.Layout + " .inputProv").val();
        //var cap = $("#CercaAgenzia_" + Config.Layout + " .inputCAP").val();
        //        if (cap.match(/^[\-\+]?\d+$/)) {
        //            CercaAgenzieByCap();
        //        } else if ((cap == "Cerca per 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.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);
