(function ($) {

    var Config = {
        ServerURL: "/Controller/Acquista.ashx",
        ServerUtilityURL: "/Controller/Utility.ashx",
        ClientURL: "/Plugins/comAcquista/Acquista.htm",
        StyleURL: "/Plugins/comAcquista/Acquista.css",
        Container: "",
        FormData: {},
        IdProdotto: "",
        IdListino: "",
        ConfigCamere: {},
        RiepilogoCosti: {},
        Nazionalita: {},
        Agenzia: {},
        MostraPrezzoNetto: false,
        ConnettoriAttivi: false,
        ConnettoriScrittura: false,
        CheckDisponibilita: false,
        ConfermaConnettori: {},
        IsRQ: false,
        NumeroOrdine: "",
        TentativiCarta: 0,
        AgenziaScelta: false,
        TrattamentoScelto: ""
    };


    $.fn.Acquista = 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;
            Config.IsRQ = Config.FormData.IsRQ;
            Config.TrattamentoScelto = Config.FormData.TrattamentoScelto;
        }

        // setto il container
        Config.Container = $(this);

        // lancio la funzione di ingresso
        Init();
    };

    $.fn.Acquista.GetConfig = function () {
        return Config;
    }

    function Init() {
        // carico la pagina html
        Config.Container.load(Config.ClientURL, function () {

            var checkDisponibilita = true;

            // calcola il totale, la quota base, e i costi della prenotazione            
            PreparaTotaliPrenotazione();

            CheckConnettoriAttivi();

            CheckConnettoriScrittura();
            // controllo se è previsto il check di disponibilità per il tour operator del prodotto
            // Cristian 27/04/2011
            CheckDisponibilita();

            // verifico la disponibilita su open tour se il prodotto lo prevede
            if (Config.CheckDisponibilita) {

                VerificaDisponibilitaProdotto();
                RenderizzaDisponibilitaProdotto();

                // controllo che si possa proseguire con l'acquisto   
                //alert(Config.ConfermaConnettori.Stato);
                if (!$.isEmptyObject(Config.ConfermaConnettori) && Config.ConfermaConnettori.Stato == "NON_DISPONIBILE") {
                    checkDisponibilita = false;
                }
            }

            // proseguo con la costruzion della pagina
            if (checkDisponibilita) {

                // carico le configurazioni
                CaricaConfigurazioniCamere();

                // carico la lista di nazionalità
                CaricaNazionalita();

                // riepilogo prodotto
                RenderizzaRiepilogoProdotto();

                // carico il riepilogo costi
                CaricaRiepilogoCosti();

                // renderizzo riepilogo costi
                RenderizzaRiepilogoCosti();

                // carico l'agenzia
                CaricaAgenzia();


                //visualizzo il box ricerca agenzia solo se NON sono in B2B (in B2B ho l'agenzia valorizzata)
                VisualizzaRicercaAgenzia();

                // form agenzia
                RenderizzaFormAgenzia();

                // form acquirente
                RenderizzaFormAcquirente();

                // form pax
                RenderizzaFormPax();

                // form condizioni
                RenderizzaFormCondizioni();

                // form pagamenti
                RenderizzaFormPagamenti();

                // presonalizzo le impostazioni b2b/b2c
                GestisciB2bB2c();

                // renderizza totale
                RenderizzaTotale();
            }

            // setto i bindings sull'interfaccia
            Bindings();

            // salvo lo stato del plugin
            $.fn.Travelmind.SaveState("Acquista", Config);

            // smusso gli angoli dell'interfaccia
            $.fn.Travelmind.RoundCorners();

            // rilancio l'evento "pagina pronta"            
            $(Config.Container).trigger("ComponentLoaded");

            // pareggio le altezze (destra, sinistra)
            $.fn.Travelmind.AdjustBoxHeight("#acquista #left", "#acquista #right");

            var RiepilogoProdotto = $.fn.RiepilogoProdotto.GetRiepilogoProdotto();
            if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B) {
                if (!Config.ConnettoriScrittura) {
                    // alert("No Scrittura");
                    $("#concludi").hide();

                    //var RiepilogoProdotto = $.fn.RiepilogoProdotto.GetRiepilogoProdotto();

                    // Dovrebbe visualizzarsi solo se VM o XLS
                    if (RiepilogoProdotto.Operatore.Nome.indexOf("VM") != -1
                        || RiepilogoProdotto.Nome.toLowerCase().indexOf("mercatini di natale") != -1
                        || RiepilogoProdotto.Operatore.Nome=="FRIGERIO VIAGGI") {

                       // alert("Entro Mercatini o VM!");
                        $("#concludinoTool").hide();
                        $("#invia_richiesta").hide();
                        $("#acquirente").show();
                        document.getElementById("concludi").setAttribute('title', '');
                        $("#concludi").show();

                    } else {
                        $("#concludinoTool").hide();
                        $("#invia_richiesta").show();
                        document.getElementById("concludi").setAttribute('title', '');
                        $("#concludi").hide();
                    }

                }
                else {
                    if (Config.ConnettoriAttivi) {
                        //alert("Conn attivi No Scrittura ");
                        $("#concludinoTool").hide();
                        //alert("concludi1");
                        $("#concludi").show();
                        $("#invia_richiesta").show();
                    } else {
                        // alert("Conn NO attivi No Scrittura ");
                        $("#concludinoTool").hide();
                        //alert("concludi2");
                        $("#concludi").show();
                        $("#invia_richiesta").show();
                    }
                }
            }
            else {
                //alert("B2C ");
                $("#invia_richiesta").hide();
                if (Config.ConfermaConnettori.Stato == "NON_DISPONIBILE") {
                    $("#concludinoTool").hide();
                }
                else {
                    $("#concludinoTool").show();
                }

                document.getElementById("concludi").setAttribute('title', '');
                $("#concludi").hide();
            }


            if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B && (RiepilogoProdotto.Operatore.Nome.indexOf("VM") != -1 || RiepilogoProdotto.Nome.toLowerCase().indexOf("mercatini di natale") != -1)
            ) {
                $("#pagamenti").hide();
                $("#cerca_agenzia").hide()

            }
             
            if ($.fn.Utility.IsAgenziaLoggata()) {
                if (Config.Agenzia.IsB2B) {
                    $("img#varia_prezzi").fadeIn("fast");
                }
                else {
                    $("img#varia_prezzi").hide();
                }
            }
            else {
                $("img#varia_prezzi").hide();
            }
        });
    }


    $.fn.Acquista.Destroy = function () {
        // distruzione degli oggetti interni al plugin        
        Config.Container = "";
        Config.FormData = {};
        Config.IdProdotto = {};
        Config.IdListino = {};
        Config.ConfigCamere = {};
        Config.Nazionalita = {};
        Config.Agenzia = {};
        Config.RiepilogoCosti = {};
        Config.ConfermaConnettori = {};
        Config.MostraPrezzoNetto = false;
        Config.ConnettoriAttivi = false;
        Config.ConnettoriScrittura = false;
        Config.CheckDisponibilita = false;
        Config.IsRQ = false;
        Config.NumeroOrdine = "";
        Config.TentativiCarta = 0;
        Config.TrattamentoScelto = "";
        $("#form_acquista").validationEngine("hideAll");
    };



    function GestisciB2bB2c() {
        if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B) {
            //B2B
            if (Config.Agenzia.id > 0) {
                $("#pagamenti").show();
            }

            $("#condizioni").hide();
            $("#acquirente").hide();
            if (Config.ConnettoriAttivi) {
                $("#info_prenotazione").show();
            }

        } else if ($.fn.Utility.IsAgenziaLoggata()) {
            //B2B2C                        
            $("#pagamenti").hide();
        }



        if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B) {
            var RiepilogoProdotto = $.fn.RiepilogoProdotto.GetRiepilogoProdotto();
            // Se non è VM abilito il bottone Vai a sito TO
            if (RiepilogoProdotto.Operatore.Nome.indexOf("VM") == -1
             || RiepilogoProdotto.Nome.toLowerCase().indexOf("mercatini di natale") == -1) {
                $("#invia_richiesta").bind("click", InviaRichiestaPrenotazione);
                $("#invia_richiesta").show();
            } else {
                $("#invia_richiesta").hide();
            }
        } else {
            $("#invia_richiesta").hide();
            $("#concludi").show();
            $("#concludinoTo").hide();

        }


    }


    function CheckConnettoriAttivi() {
        var parameters = {};
        parameters.action = "CheckConnettoriAttivi";
        parameters.idProdotto = Config.IdProdotto;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.ConnettoriAttivi = (returnData == "1") ? true : false;
            }
        });
    }


    function CheckConnettoriScrittura() {
        var parameters = {};
        parameters.action = "CheckConnettoriScrittura";
        parameters.idProdotto = Config.IdProdotto;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.ConnettoriScrittura = (returnData == "1") ? true : false;
            }
        });
    }


    function CheckDisponibilita() {
        var parameters = {};
        parameters.action = "CheckDisponibilita";
        parameters.idProdotto = Config.IdProdotto;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.CheckDisponibilita = (returnData == "1") ? true : false;
            }
        });
    }



    function VerificaDisponibilitaProdotto() {
        var parameters = {};
        parameters.action = "VerificaDisponibilita";
        parameters.idListino = Config.IdListino;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                Config.ConfermaConnettori = (returnData != "" && returnData != "-1") ? $.parseJSON(returnData) : {};
            }
        });
    }



    function PreparaTotaliPrenotazione() {
        var parameters = {};
        parameters.action = "PreparaTotaliPrenotazione";

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) { }
        });
    }


    function RenderizzaDisponibilitaProdotto() {

        if (!$.isEmptyObject(Config.ConfermaConnettori)) {

            var stato = Config.ConfermaConnettori.Stato.toLowerCase();
            var $box_border = $("<div/>", { "class": "box_border rounded" }).prependTo("#acquista #right");
            $box = $("<div/>", { "class": "box rounded" }).appendTo($box_border);
            $("<div/>", { "class": "header_" + stato + " rounded_top" }).html("Verifica Disponibilit&agrave; Prodotto:").appendTo($box);
            $("<div/>", { "class": "contents" }).html(Config.ConfermaConnettori.Messaggio).appendTo($box);

            // se il prodotto non è disponibile nascondo il resto della pagina
            //alert(stato);
            if (stato == "non_disponibile") {

                $("#agenzia").hide();
                $("#acquirente").hide();
                $("#pax").hide();
                $("#condizioni").hide();
                $("#pagamenti").hide();
                $("#note").hide();
                $("#tot").hide();
                $("#concludi").hide();
                $("#concludinoTool").hide();
                $("#riepilogo_pacchetto_vacanza").hide();
                $("#riepilogo_costi").hide();
                $("#box_preventivo_pdf").hide();
                $("#cerca_agenzia").hide();
            }

        }
    }


    function Bindings() {

        //pulsante concludi
        $("#concludi").bind("click", VaiAllaConferma);
        // pulsante modifica prezzo        
        $("img#varia_prezzi").bind("click", VariaPrezzo);
        //pulsante concludi senza tooltip
        $("#concludinoTool").bind("click", VaiAllaConferma);

        // navigation menu
        $("#nav_menu #riavvia_ricerca").bind("click", function () { $.fn.Travelmind.RestorePlugin("Home"); });
        $("#nav_menu #torna_risultati").bind("click", function () { $.fn.Travelmind.RestorePlugin("Risultati"); });
        if (Config.FormData.EntryPage == "Preventivo") {
            $("#nav_menu #torna_risultati").hide();
        }

        // gestione tastiera (F8/F9)        
        $(document).bind("keyup", GestisciTastiera);

        //datepicker
        $(".datepicker").datepicker({
            changeYear: true,
            yearRange: '1900:2020'
        });

        // validation engine
        $("#form_acquista").validationEngine({
            success: false,
            failure: function () { },
            validationEventTrigger: "blur"
        });

        // download preventivo
        $("#box_preventivo_pdf").PreventivoPdf({
            IdProdotto: Config.IdProdotto,
            IdListino: Config.IdListino
        });

        //immagini metodo pagamento (anche clickando l'immagine cambia il metodo di pagamento)
        $(".img_pagamento").bind("click", function () {
            var value = $(this).attr("rel");
            $("#txtPagamenti[value=" + value + "]").attr("checked", true);
        });


        // link scheda tecnica tour operator
        $("#scheda_tecnica").bind("click", function () {
            var pdf = $("#riepilogo_prodotto").attr("nome_tour_operator") + ".pdf";

            if (pdf.toLowerCase().indexOf(" vm") != -1)
                window.open("/Docs/Contratti/vm.pdf");
            else
                window.open("/Docs/Contratti/" + pdf);


        });


        // tooltip pagamenti
        $(".img_pagamento").tooltip({
            effect: 'slide',
            slideOffset: 10,
            offset: [10, 2],
            tipClass: 'tooltip_pagamento',
            cancelDefault: true
        });




        // tooltip pagamenti
        $(".img_TO").tooltip({
            effect: 'slide',
            slideOffset: 10,
            offset: [10, 2],
            tipClass: 'tooltip_BottoniProsegui',
            cancelDefault: true
        });

        // dialog variatore prezzi        
        $("#variatore_prezzi").dialog({
            width: 580,
            autoOpen: false,
            title: "Variatore Prezzi",
            modal: true,
            draggable: true,
            buttons: {
                "Annulla": function () { $("#variatore_prezzi").validationEngine("hideAll"); $(this).dialog("close"); },
                "Ricalcola": function () { CalcolaVariazionePrezziAcquista(); },
                "Prosegui": function () { SalvaVariazionePrezziAcquista(); }
            }
        });


        if (Config.ConnettoriScrittura) {
            // tooltip pagamenti

            $(".img_Concludi").tooltip({
                effect: 'slide',
                slideOffset: 10,
                offset: [10, 2],
                tipClass: 'tooltip_BottoniProsegui',
                cancelDefault: true
            });



        }
        else {

        }




        // link privacy tour operator
        $("#privacy").bind("click", function () {
            window.open("/Docs/Contratti/PRIVACY.pdf");
        });

        // pulsante rimuovi agenzia
        $("#btnRimuoviAgenzia").bind("click", RimuoviAgenzia);


        //alert("Connettori attivi " + Config.ConnettoriScrittura);
        if (!Config.ConnettoriScrittura)
            $("#concludi").hide();

    }

    function RimuoviAgenzia() {
        // azzero l'agenzia
        var Agenzia = {};
        Config.AgenziaScelta = false;
        $("#acquista").trigger({ type: "agenziaCambiata", agenzia: Agenzia });
    }

    function GestisciTastiera(event) {
        var e;
        if (event.which != "") { e = event.which; }
        else if (event.charCode != "") { e = event.charCode; }
        else if (event.keyCode != "") { e = event.keyCode; }
        switch (e) {
            case 119: // F8: prezzo netto                       
                if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B && Config.MostraPrezzoNetto == false) {
                    Config.MostraPrezzoNetto = true;
                    ConvertiCostiNetto(true);
                }
                break;

            case 120: // F9: prezzo lordo                
                if ($.fn.Utility.IsAgenziaLoggata() && Config.Agenzia.IsB2B && Config.MostraPrezzoNetto == true) {
                    Config.MostraPrezzoNetto = false;
                    ConvertiCostiNetto(false);
                }
                break;
        }
    }


    function ConvertiCostiNetto() {

        // seleziono l'elenco di costi coretto (netto o base)
        var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;

        // modifico riepilogo costi sx
        $("#riepilogo_costi .costo").each(function (i) {
            $(this).find(".value").html(RiepilogoCosti[i].Value + " &euro;");
            if (Config.MostraPrezzoNetto) {
                $(this).find(".value").addClass("netto");
            } else {
                $(this).find(".value").removeClass("netto");
            }
        });

        // modifico totale a dx        
        $("#prezzo_totale").html(RiepilogoCosti[RiepilogoCosti.length - 1].Value + " &euro;");
        if (Config.MostraPrezzoNetto) {
            $("#prezzo_totale").addClass("netto");
        } else {
            $("#prezzo_totale").removeClass("netto");
        }
    }


    function CaricaRiepilogoCosti() {
        //if ($.isEmptyObject(Config.RiepilogoCosti)) {
        var parameters = {};
        parameters.action = "RiepilogoCosti";
        parameters.idListino = Config.IdListino;
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            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 RenderizzaRiepilogoCosti() {
        var $div = null;
        var $text = null;
        var $value = null;
        if (!$.isEmptyObject(Config.RiepilogoCosti)) {
            var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;
            $('#riepilogo_costi .contents').empty();
            $.each(RiepilogoCosti, function (i) {
                $div = $("<div/>", { "class": "costo" }).appendTo("#riepilogo_costi .contents");
                //if (RiepilogoCosti[i].Text != 'Totale') {
                $text = $("<div/>", { "class": "text" }).html(RiepilogoCosti[i].Text).appendTo($div);
                $value = $("<div/>", { "class": "value" }).html(RiepilogoCosti[i].Value + " &euro;").appendTo($div);
                //}
                $("#prezzo_totale").html(RiepilogoCosti[i].Value + " &euro;");
                $("#prezzo_totale_left").html(RiepilogoCosti[RiepilogoCosti.length - 1].Value + " &euro;");
            });
        }
    }

    function RenderizzaTotale() {
        var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;
        $("#prezzo_totale").html(RiepilogoCosti[RiepilogoCosti.length - 1].Value + " &euro;");
    }


    function CaricaAgenzia() {
        if ($.isEmptyObject(Config.Agenzia)) {
            var parameters = {};
            parameters.action = "SelAgenzia";
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerUtilityURL,
                data: parameters,
                success: function (returnData) {
                    if (returnData != "-1") {
                        Config.Agenzia = $.parseJSON(returnData);
                    }
                }
            });
        }
    }


    function CaricaConfigurazioniCamere() {
        if ($.isEmptyObject(Config.ConfigCamere)) {
            var parameters = {};
            parameters.action = "SelConfigCameraPax";
            parameters.camere = JSON.stringify(Config.FormData.Camere);
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerURL,
                data: parameters,
                type: "POST",
                success: function (returnData) {
                    Config.ConfigCamere = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : {};
                }
            });
        }
    }


    function CaricaNazionalita() {
        if ($.isEmptyObject(Config.Nazionalita)) {
            var parameters = {};
            parameters.action = "SelNazionalitaLista";
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerURL,
                data: parameters,
                success: function (returnData) {
                    if (returnData != "-1") {
                        Config.Nazionalita = $.parseJSON(returnData);
                    }
                }
            });
        }
    }

    function RenderizzaRiepilogoProdotto() {
        $("#box_riepilogo_prodotto").RiepilogoProdotto({ "Align": "vertical", "IdProdotto": Config.IdProdotto, "IdListino": Config.IdListino, "TrattamentoScelto": Config.TrattamentoScelto });
        $("#box_riepilogo_prodotto").bind("ModuleLoaded", function () {
            return;
        });
    }


    function RenderizzaFormAgenzia() {
        if (!$.isEmptyObject(Config.Agenzia) && Config.Agenzia.Id != 0) {
            $("#txtAgenziaRagioneSociale").html(Config.Agenzia.RagioneSociale);
            $("#txtAgenziaCodiceFiscale").html(Config.Agenzia.CodiceFiscale);
            $("#txtAgenziaPartitaIva").html(Config.Agenzia.PartitaIva);
            $("#txtAgenziaNomeBanconista").html(Config.Agenzia.NomeBanconista);
            $("#txtAgenziaCognomeBanconista").html(Config.Agenzia.CognomeBanconista);
            $("#txtAgenziaIndirizzo").html(Config.Agenzia.Indirizzo);
            $("#txtAgenziaCap").html(Config.Agenzia.Cap);
            $("#txtAgenziaCitta").html(Config.Agenzia.Citta);
            $("#txtAgenziaProvincia").html(Config.Agenzia.Prov);
            $("#txtAgenziaStato").html(Config.Agenzia.Stato);
            $("#txtAgenziaCellulare1").html(Config.Agenzia.Cellulare1);
            $("#txtAgenziaCellulare2").html(Config.Agenzia.Cellulare2);
            $("#txtAgenziaEmail").html(Config.Agenzia.Email);

            if (Config.Agenzia.IsB2B) {
                $("#btnRimuoviAgenzia").hide();
            }

        } else {
            // se non c'è un agenzia in sessione tolgo il form agenzia
            $("#agenzia").hide();
        }
    }


    function RenderizzaFormAcquirente() {

        // riempio la combo provincie        
        var parameters = {};
        parameters.action = "SelProvinceLista";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                if (returnData != "-1") {
                    var Provincie = $.parseJSON(returnData);
                    var $option = null;
                    $option = $("<option/>", { "value": "--", "text": "--" }).appendTo("#txtAcquirenteProvincia");
                    $.each(Provincie, function (i) {
                        $option = $("<option/>", { "value": Provincie[i].Value, "text": Provincie[i].Text }).appendTo("#txtAcquirenteProvincia");
                    });
                }
            }
        });


        // riempio la combo stato
        var parameters = {};
        parameters.action = "SelNazioneLista";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                if (returnData != "-1") {
                    var Nazioni = $.parseJSON(returnData);
                    var $option = null;
                    $.each(Nazioni, function (i) {
                        $option = $("<option/>", { "value": Nazioni[i].Value, "text": Nazioni[i].Text }).appendTo("#txtAcquirenteStato");
                    });
                    $("#txtAcquirenteStato").val("Italia"); // default                    
                }
            }
        });

        // bindings
        $("#txtAcquirenteStato").bind("change", function () {
            if ($(this).val() != "Italia") {
                $("#txtAcquirenteProvincia").val("--").attr("disabled", true);
            } else {
                $("#txtAcquirenteProvincia").attr("disabled", false);
            }
        });

        $("#txtAcquirenteCodiceFiscale").bind("keyup", function () {
            $(this).val($(this).val().toUpperCase());
        });

        // inserisco le classi di validazione
        $("#txtAcquirenteNome").addClass("validate[required]");
        $("#txtAcquirenteCognome").addClass("validate[required]");
        $("#txtAcquirenteCodiceFiscale").addClass("validate[required,custom[codice_fiscale]]");
        $("#txtAcquirenteIndirizzo").addClass("validate[required]");
        $("#txtAcquirenteCap").addClass("validate[required,custom[onlyNumber]]");
        $("#txtAcquirenteCitta").addClass("validate[required]");
        $("#txtAcquirenteProvincia").addClass("validate[required]");
        $("#txtAcquirenteStato").addClass("validate[required]");
        $("#txtAcquirenteCellulare1").addClass("validate[custom[onlyNumber]]");
        $("#txtAcquirenteCellulare2").addClass("validate[custom[onlyNumber]]");
        $("#txtAcquirenteEmail").addClass("validate[required,custom[email]]");
    }


    function RenderizzaFormCondizioni() {
        $("#txtCondizioniSchedaTecnica").addClass("validate[required]");
        $("#txtCondizioniPrivacy").addClass("validate[required]");
    }


    function RenderizzaFormPax() {
        var camere = Config.ConfigCamere;

        // creo la tabella
        var $table = $("<table/>", { "id": "form_pax", "cellspacing": "0", "cellpadding": "3" }).appendTo("#pax .contents");
        var $row = null;

        var contatoreCamere = 0;
        // ciclo ogni tipo di camera
        for (x = 0; x < camere.length; x++) {

            // ciclo sul numero di sistemazioni x tipo di camera
            for (y = 0; y < camere[x].Qta; y++) {
                contatoreCamere++;
                // intestazione camera
                $row = $("<tr/>", { "class": "row_room rounded_top", "descrizione_camera": camere[x].Descrizione }).appendTo($table);
                $("<td/>", { "colspan": "6" }).html("Camera " + contatoreCamere + ": <span class='descrizione_camera'>" + camere[x].Descrizione + "</span>").appendTo($row);

                // intestazione colonne
                $row = $("<tr/>", { "class": "row_head" }).appendTo($table);
                $("<td/>", { "class": "genere" }).html("Genere").appendTo($row);
                $("<td/>", { "class": "nome" }).html("Nome").appendTo($row);
                $("<td/>", { "class": "cognome" }).html("Cognome").appendTo($row);
                $("<td/>", { "class": "nazionalita" }).html("Nazionalit&agrave;").appendTo($row);
                $("<td/>", { "class": "altro" }).html("Altro").appendTo($row);
                $("<td/>", { "class": "data_nascita" }).html("Data Nascita").appendTo($row);

                // adulti
                if (camere[x].Adulti > 0) {
                    $row = $("<tr/>", { "class": "row_pax_type" }).appendTo($table);
                    $("<td/>", { "colspan": "6" }).html("Adulti").appendTo($row);
                    for (z = 0; z < camere[x].Adulti; z++) {
                        var idSuffix = "-" + x + "-" + y + "-" + z;
                        $row = RenderizzaInputPax(camere[x], "Adulto", idSuffix, contatoreCamere);
                        $row.appendTo($table);
                    }
                }

                // bambini
                if (camere[x].Bambini > 0) {
                    $row = $("<tr/>", { "class": "row_pax_type" }).appendTo($table);
                    $("<td/>", { "colspan": "6" }).html("Bambini").appendTo($row);
                    for (z = 0; z < camere[x].Bambini; z++) {
                        var idSuffix = "-" + x + "-" + y + "-" + z;
                        $row = RenderizzaInputPax(camere[x], "Bambino", idSuffix, contatoreCamere);
                        $row.appendTo($table);
                    }
                }

                // separatore
                $row = $("<tr/>", { "class": "row_separator" }).appendTo($table);
                $("<td/>", { "colspan": "6" }).html("&nbsp;").appendTo($row);

            }
        }
    }


    function RenderizzaInputPax(Camera, tipoPax, idSuffix, numeroCamera) {
        var $row = $("<tr/>", { "class": "row_input", "descrizione_camera": Camera.Descrizione, "numero_camera": numeroCamera, "tipo_pax": tipoPax, "EtaBambino1Da": Camera.EtaBambino1Da, "EtaBambino1A": Camera.EtaBambino1A, "EtaBambino2Da": Camera.EtaBambino2Da, "EtaBambino2A": Camera.EtaBambino2A });
        var $col = null;
        var $roundBox = null;
        var $input = null;
        var validationClass = ""; // definisce il tipo di validazione da applicare al campo

        //genere
        $col = $("<td/>", { "class": "genere" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<select/>", { "id": "txtGenere" + tipoPax + idSuffix, "class": "inputbox txtGenere" }).appendTo($roundBox);
        $.each({ 0: "Mr", 1: "Mrs" }, function (key, value) {
            $("<option/>", { "value": value, "text": value }).appendTo($input);
        });
        validationClass = "validate[required]";
        $input.addClass(validationClass);

        //nome
        $col = $("<td/>", { "class": "nome" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<input/>", { "type": "text", "id": "txtNome" + tipoPax + idSuffix, "class": "inputbox txtNome" }).css({ "width:": "80px" }).appendTo($roundBox);
        validationClass = "validate[required]";
        $input.addClass(validationClass);

        //cognome
        $col = $("<td/>", { "class": "cognome" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<input/>", { "type": "text", "id": "txtCognome" + tipoPax + idSuffix, "class": "inputbox txtCognome" }).appendTo($roundBox);
        validationClass = "validate[required]";
        $input.addClass(validationClass);

        //nazionalità
        $col = $("<td/>", { "class": "nazionalita" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<select/>", { "id": "txtNazionalita" + tipoPax + idSuffix, "class": "inputbox txtNazionalita" }).appendTo($roundBox);
        $.each(Config.Nazionalita, function (x) {
            $("<option/>", { "value": Config.Nazionalita[x].Value, "text": Config.Nazionalita[x].Text }).appendTo($input);
        });
        // se nazionalità == "Altro" mostro l'input box "altro", altrimenti lo nascondo.
        $input.bind("change", function () {
            if ($(this).val().toUpperCase() == "ALTRO") {
                $(this).parents("tr").find(".txtAltraNazionalita").parent(".rounded_input").show();
                $(this).parents("tr").find(".txtAltraNazionalita").addClass("validate[required]");
            } else {
                $(this).parents("tr").find(".txtAltraNazionalita").val("");
                $(this).parents("tr").find(".txtAltraNazionalita").removeClass("validate[required]");
                $(this).parents("tr").find(".txtAltraNazionalita").parent(".rounded_input").hide();
            }
        });
        validationClass = "validate[required]";
        $input.addClass(validationClass);

        //altro
        $col = $("<td/>", { "class": "altro" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<input/>", { "type": "text", "id": "txtAltraNazionalita" + tipoPax + idSuffix, "class": "inputbox txtAltraNazionalita" }).appendTo($roundBox);
        validationClass = ""; // required se nazionalita = altro
        $input.addClass(validationClass);
        $roundBox.hide();

        // data nascita
        $col = $("<td/>", { "class": "data_nascita" }).appendTo($row);
        $roundBox = $("<div/>", { "class": "rounded_input" }).appendTo($col);
        $input = $("<input/>", { "type": "text", "id": "txtDataNascita" + tipoPax + idSuffix, "class": "inputbox datepicker txtDataNascita" }).appendTo($roundBox);
        validationClass = (tipoPax == "Adulto" && !Camera.DataAdultiObb) ? "" : "validate[required]";
        $input.addClass(validationClass);

        return $row;
    }


    function RenderizzaFormPagamenti() {
        $div = null;
        $input = null;
        $label = null;

        $div = $("<div/>").appendTo("#pagamenti .contents");

        //if (!Config.IsRQ && Config.ConnettoriAttivi) {

        // carta di credito
        // La carta si vede solo se non sono in B2B quindi Agenzia =0
        if (Config.Agenzia.Id == 0) {
            title = "<BR>Scegliendo questa modalit&agrave di pagamento per la Tua vacanza, <BR>effettui una vera e propria prenotazione online." + "<BR>" +
                    "Ti verr&agrave addebitato l'intero importo e riceverai i documenti di viaggio <BR>direttamente sulla Tua casella di posta elettronica.<BR>";
            $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "carta_credito" }).css({ "float": "left" }).appendTo($div);
            $img = $("<img/>", { "class": "img_pagamento", "rel": "carta_credito", "src": "/Plugins/comAcquista/Images/CARTA-DI-CREDITO.png", "title": title }).css({ "float": "left" }).appendTo($div);
        }

        //}


        // bonifico
        // solo se non sono in B2B
        if (Config.Agenzia.Id == 0) {
            title = "<BR>Scegliendo questa modalit&agrave di pagamento per la Tua vacanza," + "<BR>" +
                    "non viene effettuata una vera e propria prenotazione online, <BR> ma una richiesta di opzione posti. " + "<BR>" +
                    "Sarai contattato a breve dal nostro Servizio Clienti per confermare ,<BR> l'opzione alla quale dovr&agrave seguire bonifico <BR> a saldo al fine di confermare la pratica " + "<BR>"
            "(riceverai da noi tutti i dettagli per effettuare il bonifico).";
            $div = $("<div/>").appendTo("#pagamenti .contents");
            $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "bonifico", "checked": "checked" }).css({ "float": "left" }).appendTo($div);
            $img = $("<img/>", { "class": "img_pagamento", "rel": "bonifico", "src": "/Plugins/comAcquista/Images/BONIFICO.png", "title": title }).css({ "float": "left" }).appendTo($div);
        }
        else {
            $("#pagamenti").hide();
        }

        // Praticamente in B2B i pagamenti non li devo vedere

        //paga al telefono
        //        $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "paga_telefono" }).css({ "float": "left" }).appendTo($div);
        //        $img = $("<img/>", { "class": "img_pagamento", "rel": "paga_telefono", "src": "/Plugins/comAcquista/Images/PAGA-AL-TELEFONO.png" }).css({ "float": "left" }).appendTo($div);


        // paga in conto
        // if (!Config.IsRQ) {
        // $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "paga_conto" }).css({ "float": "left" }).appendTo($div);
        // $img = $("<img/>", { "class": "img_pagamento", "rel": "paga_conto", "src": "/Plugins/comAcquista/Images/PAGA-IN-CONTO.png" }).css({ "float": "left" }).appendTo($div);
        // }

        // paypal
        // $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "pay_pal" }).css({ "float": "left" }).appendTo($div);
        // $img = $("<img/>", { "class" : "img_pagamento", "rel": "pay_pal", "src": "/Plugins/comAcquista/Images/PAYPAL.png" }).css({ "float": "left" }).appendTo($div);

        // validazione
        $("input[name='txtPagamenti']").addClass("validate[required]");
    }


    function VaiAllaConferma() {

        if ($("#form_acquista").validationEngine('validate')) {

            // controllo che i bambini non siano al di sotto dei 12 anni
            var check = true;
            var count = 0;
            $("#form_pax .row_input").each(function () {
                var tipoPax = $(this).attr("tipo_pax");
                if (tipoPax == "Bambino") {
                    count++;
                    var dataNascita = $(this).find(".txtDataNascita").val();
                    var dataPartenza = $("#riepilogo_prodotto .data_partenza").html();
                    var anniDa = (count == 1) ? $(this).attr("EtaBambino1Da") : $(this).attr("EtaBambino2Da");
                    var anniA = (count == 1) ? $(this).attr("EtaBambino1A") : $(this).attr("EtaBambino2A");
                    var elementId = $(this).find(".txtDataNascita").attr("id");
                    var diff = dateDiff(dataNascita, dataPartenza);
                    if (!(age(dataNascita, anniDa) < diff && diff < age(dataNascita, anniA))) {
                        $("#" + elementId).validationEngine('showPrompt', "L'et&agrave; del bambino deve essere compresa tra " + anniDa + " e " + anniA + " anni.", "topRight", false);
                        check = false;
                    }
                }
            });


            if (!check) {
                $("html, body").animate({ scrollTop: 50 }, 'slow');
            } else {

                // se i connettori sono attivi richiedo una conferma all'utente
                if (Config.ConnettoriScrittura && $.fn.Utility.IsAgenziaLoggata()) {
                    var msgBox = $("<div/>");
                    $(Config.Container).append(msgBox);
                    $(msgBox).html("Procedendo si acceder&agrave; direttamente al database di  prenotazione del T.O. con addebito, ove previsto, delle relative fee.<br/>Si desidera proseguire?");
                    $(msgBox).dialog({
                        width: 500,
                        title: "Attenzione",
                        modal: true,
                        draggable: true,
                        buttons: {
                            "Si": function () { $(this).dialog("close"); ConfermaPrenotazione(); },
                            "No": function () { $(this).dialog("close"); }
                        },
                        close: function () {
                            $(this).dialog("destroy");
                        }
                    });
                    $(msgBox).dialog('open');
                } else {
                    ConfermaPrenotazione();
                }



            }
        }
    }


    function ConfermaPerSitoTo() {
        if ($("#form_acquista").validationEngine('validate')) {

            ConfermaPrenotazioneTO();

        }
    }


    function ConfermaPrenotazione() {

        var FormData = {};
        FormData.IdProdotto = Config.IdProdotto;
        FormData.IdListino = Config.IdListino;
        FormData.Pax = [];


        if (Config.AgenziaScelta) {
            FormData.RagSocAg = Config.Agenzia.RagioneSociale;
        } else {
            FormData.RagSocAg = "";
        }

        // ricavo i dati dei pax
        $("#form_pax .row_input").each(function () {
            var Pax = {};
            Pax.CameraDescrizione = $(this).attr("descrizione_camera");
            Pax.Tipo = $(this).attr("tipo_pax");
            Pax.Genere = $(this).find(".txtGenere").val();
            Pax.Nome = $(this).find(".txtNome").val();
            Pax.Cognome = $(this).find(".txtCognome").val();
            Pax.Nazionalita = ($(this).find(".txtNazionalita").val().toUpperCase() != "ALTRO") ? $(this).find(".txtNazionalita").val() : $(this).find(".txtAltraNazionalita").val();
            Pax.DataNascita = $(this).find(".txtDataNascita").val();
            Pax.CameraNumero = $(this).attr("numero_camera");
            FormData.Pax.push(Pax);
        });

        // ricavo i dati dell'acquirente
        var Acquirente = {};
        Acquirente.Nome = $("#txtAcquirenteNome").val();
        Acquirente.Cognome = $("#txtAcquirenteCognome").val();
        Acquirente.CodiceFiscale = $("#txtAcquirenteCodiceFiscale").val();
        Acquirente.Indirizzo = $("#txtAcquirenteIndirizzo").val();
        Acquirente.Cap = $("#txtAcquirenteCap").val();
        Acquirente.Citta = $("#txtAcquirenteCitta").val();
        Acquirente.Provincia = $("#txtAcquirenteProvincia").val();
        Acquirente.Stato = $("#txtAcquirenteStato").val();
        Acquirente.Cellulare1 = $("#txtAcquirenteCellulare1").val();
        Acquirente.Cellulare2 = $("#txtAcquirenteCellulare2").val();
        Acquirente.Email = $("#txtAcquirenteEmail").val();
        FormData.Acquirente = Acquirente;

        // ricavo il tipo di pagamento
        //alert($("input[name='txtPagamenti']:checked").val());
        FormData.Pagamento = $("input[name='txtPagamenti']:checked").val();

        // ricavo le note
        FormData.Note = $("#txtNote").val();

        // salvo la prenotazione                
        Config.NumeroOrdine = SalvaPrenotazione(FormData, Config.NumeroOrdine);
        if (Config.NumeroOrdine != "-1" && Config.NumeroOrdine != "") {

            // se richiesto gestisco i pagamenti con carta di credito
            if (FormData.Pagamento == "carta_credito" || FormData.Pagamento == "paga_conto") {
                GestisciPagamentoCarte(FormData.Pagamento, Config.NumeroOrdine);
                $("body").bind("PagamentoFinished", function () {
                    var statoPagamento = $("#statoPagamento").val();
                    if (statoPagamento.toUpperCase() == "OK") {
                        $.fn.Travelmind.LoadPlugin("Conferma", FormData);
                    } else {
                        ShowMessage("Attenzione", "Si &egrave; verificato un errore nel pagamento con carta di credito.");
                    }
                });

            } else {
                $.fn.Travelmind.LoadPlugin("Conferma", FormData);
            }

        } else {
            ShowMessage("Attenzione", "Si &egrave; verificato un errore nel salvataggio della prenotazione.");
        }

    }


    function ConfermaPrenotazioneTO() {

        var FormData = {};
        FormData.IdProdotto = Config.IdProdotto;
        FormData.IdListino = Config.IdListino;
        FormData.Pax = [];


        if (Config.AgenziaScelta) {
            FormData.RagSocAg = Config.Agenzia.RagioneSociale;
        } else {
            FormData.RagSocAg = "";
        }

        // ricavo i dati dei pax
        $("#form_pax .row_input").each(function () {
            var Pax = {};
            Pax.CameraDescrizione = $(this).attr("descrizione_camera");
            Pax.Tipo = $(this).attr("tipo_pax");
            Pax.Genere = $(this).find(".txtGenere").val();
            Pax.Nome = $(this).find(".txtNome").val();
            Pax.Cognome = $(this).find(".txtCognome").val();
            Pax.Nazionalita = ($(this).find(".txtNazionalita").val().toUpperCase() != "ALTRO") ? $(this).find(".txtNazionalita").val() : $(this).find(".txtAltraNazionalita").val();
            Pax.DataNascita = $(this).find(".txtDataNascita").val();
            Pax.CameraNumero = $(this).attr("numero_camera");
            FormData.Pax.push(Pax);
        });

        // ricavo i dati dell'acquirente
        var Acquirente = {};
        Acquirente.Nome = $("#txtAcquirenteNome").val();
        Acquirente.Cognome = $("#txtAcquirenteCognome").val();
        Acquirente.CodiceFiscale = $("#txtAcquirenteCodiceFiscale").val();
        Acquirente.Indirizzo = $("#txtAcquirenteIndirizzo").val();
        Acquirente.Cap = $("#txtAcquirenteCap").val();
        Acquirente.Citta = $("#txtAcquirenteCitta").val();
        Acquirente.Provincia = $("#txtAcquirenteProvincia").val();
        Acquirente.Stato = $("#txtAcquirenteStato").val();
        Acquirente.Cellulare1 = $("#txtAcquirenteCellulare1").val();
        Acquirente.Cellulare2 = $("#txtAcquirenteCellulare2").val();
        Acquirente.Email = $("#txtAcquirenteEmail").val();
        FormData.Acquirente = Acquirente;

        // ricavo il tipo di pagamento
        FormData.Pagamento = "Sito_TO";

        // ricavo le note
        FormData.Note = $("#txtNote").val();

        // salvo la prenotazione                
        Config.NumeroOrdine = SalvaPrenotazioneTO(FormData, Config.NumeroOrdine);
        //        if (Config.NumeroOrdine != "-1" && Config.NumeroOrdine != "") {

        //            // se richiesto gestisco i pagamenti con carta di credito
        //            if (FormData.Pagamento == "carta_credito" || FormData.Pagamento == "paga_conto") {
        //                GestisciPagamentoCarte(FormData.Pagamento, Config.NumeroOrdine);
        //                $("body").bind("PagamentoFinished", function () {
        //                    var statoPagamento = $("#statoPagamento").val();
        ////                    if (statoPagamento.toUpperCase() == "OK") {
        ////                        $.fn.Travelmind.LoadPlugin("Conferma", FormData);
        ////                    } else {
        ////                        ShowMessage("Attenzione", "Si &egrave; verificato un errore nel pagamento con carta di credito.");
        ////                    }
        //                });

        //            } else {
        //              //  $.fn.Travelmind.LoadPlugin("Conferma", FormData);
        //            }

        //        } else {
        //            ShowMessage("Attenzione", "Si &egrave; verificato un errore nel salvataggio della prenotazione.");
        //        }

    }

    function SalvaPrenotazioneTO(FormData, numeroOrdine) {
        var result = "";
        var parameters = {};
        parameters.action = "SalvaPrenotazionedaTO";
        parameters.Pax = JSON.stringify(FormData.Pax);
        parameters.Acquirente = JSON.stringify(FormData.Acquirente);
        parameters.Pagamento = FormData.Pagamento;
        parameters.Note = FormData.Note;
        parameters.NumeroOrdine = numeroOrdine;
        if (Config.AgenziaScelta) {
            parameters.IsB2B2C = true;
            parameters.IdAgenzia = Config.Agenzia.Id;
            FormData.Pagamento = "paga_agenzia";
            parameters.Pagamento = "paga_agenzia";
            Config.AgenziaScelta = false;
        }

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            type: "POST",
            success: function (returnData) {
                result = returnData;
            }
        });

        return result;
    }


    function SalvaPrenotazione(FormData, numeroOrdine) {
        var result = "";
        var parameters = {};
        parameters.action = "SalvaPrenotazione";
        parameters.Pax = JSON.stringify(FormData.Pax);
        parameters.Acquirente = JSON.stringify(FormData.Acquirente);
        parameters.Pagamento = FormData.Pagamento;
        parameters.Note = FormData.Note;
        parameters.NumeroOrdine = numeroOrdine;
        if (Config.AgenziaScelta) {
            parameters.IsB2B2C = true;
            parameters.IdAgenzia = Config.Agenzia.Id;
            FormData.Pagamento = "paga_agenzia";
            parameters.Pagamento = "paga_agenzia";
            Config.AgenziaScelta = false;
        }

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            type: "POST",
            success: function (returnData) {
                result = returnData;
            }
        });

        return result;
    }


    function GestisciPagamentoCarte(tipoPagamento, numeroOrdine) {
        var parameters = {};

        // gestisco il numero di tentativi (unicredit non consente di usare 2 volte lo stesso numero ordine quindi gli aggiungiamo un progressivo).
        if (Config.TentativiCarta > 0) {
            numeroOrdine += "_" + Config.TentativiCarta.toString();
        }
        Config.TentativiCarta++;

        // totale ordine
        var totaleOrdine = $.trim(Config.RiepilogoCosti.CostiBase[Config.RiepilogoCosti.CostiBase.length - 1].Value.replace(".", ""));
        totaleOrdine += "00"; // aggiungo "00" per adeguarmi allo standard ISO (ex: 100 = 1,00)

        // tipo pagamento (specifico x unicredit)        
        if (tipoPagamento == "carta_credito") {
            tipoPagamento = "CartCred";
        } else {
            tipoPagamento = "ContoCorr";
        }

        var url = "/Pagamenti/BSella/GoSella.aspx?numeroOrdine=" + numeroOrdine + "&totaleOrdine=" + totaleOrdine + "&tipoPagamento=" + tipoPagamento;
        window.open(url, "sella", "width=800,height=600,scrollbars=yes");

        // parametri x test carta di credito
        //numero carta: 4444499922200000 codice siurezza: 111 scadenza: 11/2019        
    }


    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');
    }


    function InviaRichiestaPrenotazione() {

        // Prima salvo nella nostra tabella prenotazione Altrimenti non abbiamo riscontro delle agenzie che entrano qui!!!

        ConfermaPerSitoTo();



        // devo passare i dati in post al servizio di eurospace: creo dinamicamente un form ed eseguo il submit
        var RiepilogoProdotto = $.fn.RiepilogoProdotto.GetRiepilogoProdotto();
        var action = "http://www.frigerioviaggi.com/Intranet/gateway/GatewayTO.asp";
        var codiceTO = RiepilogoProdotto.Operatore.CodGestionale; // è il campo usato per salvare gli id_operatore esterni
        var agencyKey = Config.Agenzia.SID_Frigerio;         // contiene il sid dell'agenzia che si è loggata

        var $form = $("<form/>", { "action": action, "method": "post", "target": "_blank" }).appendTo(Config.Container);
        $("<input/>", { "type": "hidden", "id": "AgencyKey", "name": "AgencyKey", "value": agencyKey }).appendTo($form);
        $("<input/>", { "type": "hidden", "id": "CodiceTO", "name": "CodiceTO", "value": codiceTO }).appendTo($form);
        $form.submit();

        // loggo l'operazione:
        var idProdotto = RiepilogoProdotto.Id;
        var idAgenzia = Config.Agenzia.Id;
        var dataPartenza = RiepilogoProdotto.Listini[0].Partenza;
        $.logInfo("prenotazione frigerio passata a eurospace: idagenzia: " + idAgenzia + " - idprodotto: " + idProdotto + " - datapartenza: " + dataPartenza);
    }


    function VisualizzaRicercaAgenzia() {
        if (Config.Agenzia.Id == 0) {
            $("#cerca_agenzia .contents").CercaAgenzia({ "Layout": "InPage", "SearchByCAP": true, "SearchByProv": false });

            $("#acquista").bind("agenziaCambiata", function (event) {
                Config.Agenzia = event.agenzia;
                if (!$.isEmptyObject(Config.Agenzia)) {
                    $("#cerca_agenzia").hide();
                    RenderizzaFormAgenzia();
                    Config.IsB2B2C = true;
                    $("#agenzia .header").html("<strong>DATI AGENZIA DI RIFERIMENTO</strong>");
                    $("#agenzia").show();
                    $("#concludi").attr("src", "/Plugins/comAcquista/Images/btn-PagaAgenzia.png");
                    $("#concludinoTool").attr("src", "/Plugins/comAcquista/Images/btn-PagaAgenzia.png");
                    $("#acquista #divTestoPagAge").show();
                    Config.AgenziaScelta = true;
                    $("#pagamenti").hide();
                } else {
                    $("#cerca_agenzia").show();
                    Config.AgenziaScelta = false;
                    Config.IsB2B2C = false;
                    $("#pagamenti").show();
                    $("#agenzia").hide();
                    $("#concludi").attr("src", "/Plugins/comAcquista/Images/btn-concludi.png");
                    $("#concludinoTool").attr("src", "/Plugins/comAcquista/Images/btn-PagaAgenzia.png");
                    $("#acquista #divTestoPagAge").hide();
                }
                $("#ListaAgenzie").dialog("close");
            });
        }
        else {

            $("#cerca_agenzia").hide();
            $("#btnRimuoviAgenzia").hide();
        }
    }

    function VariaPrezzo() {

        ApriVariatorePrezzi();

    }

    function ApriVariatorePrezzi() {
        // carico dal server l'oggetto con i dati
        CaricaVariatorePrezzi();

        // espongo i dati nell'interfaccia
        RenderizzaVariatorePrezzi();

        // apro la modale
        $("#variatore_prezzi").dialog("open");

    }

    function CaricaVariatorePrezzi() {
        var parameters = {};
        parameters.action = "SelVariatorePrezzi";
        parameters.idListino = Config.IdListino;

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {

                Config.VariatorePrezzi = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : {};
            }
        });
    }

    function CalcolaVariazionePrezziAcquista() {

        // leggo i dati dal form
        if ($("#variatore_prezzi").validationEngine('validate')) {
            Config.VariatorePrezzi.Origine = $("#variatore_prezzi #txtOrigine").val();
            Config.VariatorePrezzi.TipoPrezzo = $("#variatore_prezzi #txtTipoPrezzo").val();
            Config.VariatorePrezzi.Commissione = $("#variatore_prezzi #txtCommissione").val();
            Config.VariatorePrezzi.QuotaBase = $("#variatore_prezzi #txtQuotaBase").val();
            Config.VariatorePrezzi.CostiObbligatori = $("#variatore_prezzi #txtCostiObbligatori").val();
            Config.VariatorePrezzi.Markup = $("#variatore_prezzi #txtMarkup").val();
            Config.VariatorePrezzi.QuotaVendita = $("#variatore_prezzi #txtQuotaVendita").val();
            Config.VariatorePrezzi.Guadagno = $("#variatore_prezzi #txtGuadagno").val();
            Config.VariatorePrezzi.TotaleParziale = $("#variatore_prezzi #txtTotaleParziale").val();
            Config.VariatorePrezzi.Fee = $("#variatore_prezzi #txtFee").val();
            Config.VariatorePrezzi.Sconto = $("#variatore_prezzi #txtSconto").val();
            Config.VariatorePrezzi.TotalePratica = $("#variatore_prezzi #txtTotalePratica").val();

            // passo l'oggetto al server
            var parameters = {};
            parameters.action = "CalcolaVariatorePrezzi";
            parameters.variatorePrezzi = JSON.stringify(Config.VariatorePrezzi);
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerURL,
                data: parameters,
                success: function (returnData) {
                    Config.VariatorePrezzi = (returnData != "-1" && returnData != "") ? $.parseJSON(returnData) : {};
                }
            });

            // renderizzo il variatore prezzi
            RenderizzaVariatorePrezzi();
        }
    }

    function SalvaVariazionePrezziAcquista() {

        if ($("#variatore_prezzi").validationEngine('validate')) {

            CalcolaVariazionePrezziAcquista();
            var parameters = {};
            parameters.action = "SettaPrenotazioneConVariatorePrezzi";
            parameters.variatorePrezzi = JSON.stringify(Config.VariatorePrezzi);
            $.ajax({
                async: false,
                cache: false,
                url: Config.ServerURL,
                data: parameters,
                success: function (returnData) {
                    if (returnData == "1") {

                        $("#variatore_prezzi").dialog("close");
                        $(document).delay(1000);
                        CaricaRiepilogoCosti();
                        RenderizzaRiepilogoCosti();
                        RenderizzaTotale();

                    } else {
                        $.fn.Utility.ShowMessage("Errore", "Si &egrave; verificato un problema con la variazione dei prezzi, riprovare.");
                    }
                }
            });
        }
    }

    function RenderizzaVariatorePrezzi() {

        if (!$.isEmptyObject(Config.VariatorePrezzi)) {

            $("#variatore_prezzi #txtOrigine").val(Config.VariatorePrezzi.Origine);
            $("#variatore_prezzi #txtTipoPrezzo").val(Config.VariatorePrezzi.TipoPrezzo);
            $("#variatore_prezzi #txtCommissione").val(Config.VariatorePrezzi.Commissione);
            $("#variatore_prezzi #txtQuotaBase").val(Config.VariatorePrezzi.QuotaBase);
            $("#variatore_prezzi #txtCostiObbligatori").val(Config.VariatorePrezzi.CostiObbligatori);
            $("#variatore_prezzi #txtMarkup").val(Config.VariatorePrezzi.Markup);
            $("#variatore_prezzi #txtQuotaVendita").val(Config.VariatorePrezzi.QuotaVendita);
            $("#variatore_prezzi #txtGuadagno").val(Config.VariatorePrezzi.Guadagno);
            $("#variatore_prezzi #txtTotaleParziale").val(Config.VariatorePrezzi.TotaleParziale);
            $("#variatore_prezzi #txtFee").val(Config.VariatorePrezzi.Fee);
            $("#variatore_prezzi #txtSconto").val(Config.VariatorePrezzi.Sconto);
            $("#variatore_prezzi #txtTotalePratica").val(Config.VariatorePrezzi.TotalePratica);
        } else {
            $.fn.Utility.ShowMessage("Errore", "A causa di un errore di sistema non è possibile variare il prezzo.");
        }
    }


})(jQuery);
