(function ($) {

    var Config = {
        ServerURL: "/Controller/Conferma.ashx",
        ClientURL: "/Plugins/comConferma/Conferma.htm",
        EmailTemplateURL: "/Plugins/comConferma/MailConfirm.tmpl",
        StyleURL: "/Plugins/comConferma/Conferma.css",
        Container: "",
        FormData: {},
        MsgConferma: {},
        IdProdotto: "",
        IdListino: "",
        EsitoInvioMail: "",
        NumeroOrdine: "",
        MessaggioPrenotazione: ""
    };


    $.fn.Conferma = function (options) {
        // integro le configurazioni con quelle passate (injection di parametri)
        if (options) {
            Config = $.extend(Config, options);
            Config.IdProdotto = Config.FormData.IdProdotto;
            Config.IdListino = Config.FormData.IdListino;
        }

        // setto il container
        Config.Container = $(this);

        // lancio la funzione di ingresso
        Init();
    };

    $.fn.Conferma.GetConfig = function () {
        return Config;
    }


    function Init() {
        // carico la pagina html
        Config.Container.load(Config.ClientURL, function () {

            $.fn.Utility.CaricaBanner(".prezzoChiaro", "/prezzo.htm");

            // renderizzo riepilogo prodotto
            RenderizzaRiepilogoProdotto();
            $("#box_riepilogo_prodotto").bind("ModuleLoaded", function () {

                // carico il riepilogo costi
                CaricaRiepilogoCosti();

                // renderizzo riepilogo costi
                RenderizzaRiepilogoCosti();

                // cambio di stato alla prenotazione
                ConfermaPrenotazione();

                //passo al server i dati per l'invio della mail
                InviaMail();

                //Recupero il messaggo in base al tipo di prenotazione
                RecuperaMessaggioPrenotazione();

                // espongo la conferma dell'ordine
                MostraConfermaOrdine();

                // bindings interfaccia
                Bindings();

                // rilancio l'evento "pagina pronta"            
                $(Config.Container).trigger("ComponentLoaded");

                $.fn.Travelmind.SaveState("Conferma", Config);

                // smusso gli angoli dell'interfaccia
                $.fn.Travelmind.RoundCorners();

                // pareggio le altezze            
                $.fn.Travelmind.AdjustBoxHeight("#conferma #left", "#conferma #right");
            });
        });
    }

    $.fn.Conferma.Destroy = function () {
        // distruzione degli oggetti interni al plugin

    };


    function RenderizzaRiepilogoProdotto() {
        $("#box_riepilogo_prodotto").RiepilogoProdotto({ "Align": "vertical", "IdProdotto": Config.IdProdotto, "IdListino": Config.IdListino });
    }

    function CaricaRiepilogoCosti() {
        if ($.isEmptyObject(Config.RiepilogoCosti)) {
            var parameters = {};
            parameters.action = "RiepilogoCosti";
            parameters.idListino = Config.IdListino;
            $.ajax({
                async: false,
                cache: false,
                url: "/Controller/Acquista.ashx",
                data: parameters,
                success: function (returnData) {
                    Config.RiepilogoCosti = (returnData != "-1") ? $.parseJSON(returnData) : {};
                }
            });
        }
    }


    function RenderizzaRiepilogoCosti() {
        var $div = null;
        var $text = null;
        var $value = null;
        if (!$.isEmptyObject(Config.RiepilogoCosti)) {
            var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;
            $.each(RiepilogoCosti, function (i) {
                $div = $("<div/>", { "class": "costo" }).appendTo("#riepilogo_costi .contents");
                $text = $("<div/>", { "class": "text" }).html(RiepilogoCosti[i].Text).appendTo($div);
                $value = $("<div/>", { "class": "value" }).html(RiepilogoCosti[i].Value + " &euro;").appendTo($div);
            });
        }
    }

    function RecuperaMessaggioPrenotazione() {
        var parameters = {};
        parameters.action = "MostraMessaggioPrenotazione";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                Config.MessaggioPrenotazione = returnData;

            }
        });
    }


    function ConfermaPrenotazione() {
        var parameters = {};
        parameters.action = "ConfermaPrenotazione";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                Config.MsgConferma = (returnData != "-1") ? $.parseJSON(returnData) : {};

            }
        });
    }


    function MostraConfermaOrdine() {
        $("#riepilogo_ordine .header").html("CONFERMA ORDINE");
        $("#riepilogo_ordine #numero_ordine").html("IL TUO NUMERO D'ORDINE &Egrave; : " + Config.MsgConferma.NumeroOrdine);

        var $conferma = $("<div/>").appendTo("#riepilogo_ordine .contents");
        $conferma.html("<br/>" + Config.MessaggioPrenotazione);

        var testo = '';
        if (Config.MsgConferma.AttivaMsg == "1") {

            //Se non ci sono errori 
            if (Config.MsgConferma.Errore == "0") {
                // verifico se simulation o meno 
                if (Config.MsgConferma.Simulation == "1") {

                    testo = "<br/>Inoltre ti segnaliamo che la pratica &egrave; stata scritta (DA CONFERMARE) sul sistema del Tour Operator.";
                    testo = testo + "<br/><br/>N. pratica Tour Operator:" + Config.MsgConferma.NumeroPratica;
                }
                else {
                    testo = "<br/>Inoltre ti segnaliamo che la pratica &egrave; stata CONFERMATA sul sistema del Tour Operator.";
                    testo = testo + "<br/><br/>N. pratica Tour Operator:" + Config.MsgConferma.NumeroPratica;
                }
            }
            else {
                if (Config.MsgConferma.Errore == "1") {
                    //Errore durante la scrittura
                    testo = "<br/>Inoltre ti segnaliamo che questa pratica non &egrave; stata confermata sul sistema del Tour Operator.";
                    testo = testo + "<br/>Ricordati di contattare il TO per concludere la prenotazione.";
                }
                else if (Config.MsgConferma.Errore == "2") {
                    testo = "<br/>Inoltre ti segnaliamo che questa pratica non &egrave; stata confermata sul sistema del Tour Operator.";
                    testo = testo + "<br/>Le tue credenziali per il sistema del Tour Operator non sono corrette.";
                }
            }
        }

        $conferma.append("<br/>" + testo);

    }


    function InviaMail() {
        var parameters = {};
        parameters.action = "InviaMail";
        parameters.EmailTemplateUrl = Config.EmailTemplateURL;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                if (returnData != "-1") {
                    Config.EsitoInvioMail = $.parseJSON(returnData);
                }
            }
        });
    }



    function Bindings() {
        $("#torna_home").bind("click", function () { $.fn.Travelmind.RestorePlugin("Home"); });

        // download preventivo
        $("#download_preventivo .contents").PreventivoPdf({
            IdProdotto: Config.IdProdotto,
            IdListino: Config.IdListino
        });

        //se skype e' installato niente altrimenti fa puntare i links di skype alla pagina di download
        $.fn.Utility.UpdateSkypeLinks();
    }


    function VaiAllaHome() {
        var FormData = {};
        $.fn.Travelmind.LoadPlugin("Home", FormData);
    }


})(jQuery);
