(function ($) {

    var Config = {
        ServerURL: "/Controller/AcquistaPlus.ashx",
        ServerUtilityURL: "/Controller/Utility.ashx",
        ClientURL: "/Plugins/comAcquistaPlus/AcquistaPlus.htm",
        StyleURL: "/Plugins/comAcquistaPlus/AcquistaPlus.css",
        Container: "",
        FormData: {},
        IdProdotto: "",
        IdListino: "",
        Partenza: "",
        txtemail: "",
        txtnome: "",
        txtcognome: "",
        txttelefono: "",
        ConfigCamere: {},
        RiepilogoCosti: {},
        Nazionalita: {},
        Agenzia: {},
        IsB2B2C: false, //messo a true con B2B2C e agenzia dove andare ad acquistare selezionata dalla ricerca per CAP
        MostraPrezzoNetto: false,
        CheckDisponibilita: false,
        ConfermaConnettori: {},
        NumeroOrdine: "",
        TentativiCarta: 0,
        IsMessaggioStampato: false,
        TrattamentoScelto: ""
    };


    $.fn.AcquistaPlus = 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.txtemail = Config.FormData.txtemail;
            Config.txtnome = Config.FormData.txtnome;
            Config.txtcognome = Config.FormData.txtcognome;
            Config.txttelefono = Config.FormData.txttelefono;
            Config.NumeroOrdine = Config.FormData.NumeroOrdine;
            Config.Partenza = Config.FormData.Partenza;
            Config.TrattamentoScelto = Config.FormData.TrattamentoScelto;
            // alert(Config.txtemail);
        }

        // setto il container
        Config.Container = $(this);

        // lancio la funzione di ingresso
        Init();
    };

    $.fn.AcquistaPlus.GetConfig = function () {
        return Config;
    }

    function Init() {
        // carico la pagina html
        Config.Container.load(Config.ClientURL, function () {

            //Loggo su google Analytics
            $.fn.Utility.Analytics("PAGEVIEW", "/Default.htm#AcquistaPlus");

            var checkDisponibilita = true;

            // calcola il totale, la quota base, e i costi della prenotazione            
            PreparaTotaliPrenotazione();

            // controllo se è previsto il check di disponibilità per il tour operator del prodotto
            // Cristian 27/04/2011
            CheckDisponibilita();

            // Default
            $("#acquirenteRq").hide();
            $("#privacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#chkPrivacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#linkAcquista").show();


            // verifico la disponibilita su open tour se il prodotto lo prevede
            if (Config.CheckDisponibilita) {

                VerificaDisponibilitaProdotto();
                RenderizzaDisponibilitaProdotto();

                // controllo che si possa proseguire con l'acquisto                        
                if (!$.isEmptyObject(Config.ConfermaConnettori) && Config.ConfermaConnettori.Stato == "NON_DISPONIBILE") {
                    checkDisponibilita = false;
                    $.fn.Utility.Analytics("EVENT", "ACQUISTA_PLUS", "PRODOTTO_NON_DISPONIBILE", "Prod: " + Config.IdProdotto);
                }
            }

            // proseguo con la costruzion della pagina
            if (checkDisponibilita) {

                // renderizzo ricerca agenzia
                VisualizzaRicercaAgenzia();

                // 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();

                // form agenzia
                RenderizzaFormAgenzia();

                // form acquirente
                RenderizzaFormAcquirente();

                // form pax
                RenderizzaFormPax();

                // form condizioni
                RenderizzaFormCondizioni();

                // form pagamenti
                RenderizzaFormPagamenti();

                // renderizza totale
                RenderizzaTotale();
            }
            else {

            }

            // setto i bindings sull'interfaccia
            Bindings();

            // salvo lo stato del plugin
            $.fn.Travelmind.SaveState("AcquistaPlus", Config);

            // smusso gli angoli dell'interfaccia
            $.fn.Travelmind.RoundCorners();

            // rilancio l'evento "pagina pronta"            
            $(Config.Container).trigger("ComponentLoaded");

            if (checkDisponibilita) {
                // controllo comunque se è un last second
                RenderizzaLastSecond();
            }
            // $("#tot").hide(); 

        });
    }


    $.fn.AcquistaPlus.Destroy = function () {
        // distruzione degli oggetti interni al plugin        
        Config.Container = "";
        Config.FormData = {};
        Config.IdProdotto = {};
        Config.IdListino = {};
        Config.ConfigCamere = {};
        Config.Nazionalita = {};
        Config.Partenza = {};
        Config.Agenzia = {};
        Config.RiepilogoCosti = {};
        Config.ConfermaConnettori = {};
        Config.MostraPrezzoNetto = false;
        Config.CheckDisponibilita = false;
        Config.NumeroOrdine = "";
        Config.TentativiCarta = 0;
        Config.txtemail = "";
        Config.txtnome = "";
        Config.txtcognome = "";
        Config.txttelefono = "";
        Config.IsMessaggioStampato = false;
        Config.TrattamentoScelto = "";
        $("#form_acquistaPlus").validationEngine("hideAll");
    };


    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 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 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 PreparaTotaliPrenotazione() {
        var parameters = {};
        parameters.action = "PreparaTotaliPrenotazione";

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) { }
        });
    }

    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 VisualizzaRicercaAgenzia() {
        $("#cerca_agenzia .contents").CercaAgenzia({ "Layout": "Left", "SearchByCAP": true, "SearchByProv": true });

        $("#acquistaPlus").bind("agenziaCambiata", function (event) {
            Config.Agenzia = event.agenzia;
            if (!$.isEmptyObject(Config.Agenzia)) {
                RenderizzaFormAgenzia();
                Config.IsB2B2C = true;
                $("#agenzia .header").html("<strong>Dati agenzia di riferimento</strong>");
                $("#agenzia").show();
                $("#concludi").attr("src", "/Plugins/comAcquistaPlus/Images/btn-PagaAgenzia.png");
                $("#acquistaPlus #divTestoPagAge").show();
                //RenderizzaPagaInAgenzia($("#paga_in_agenzia .contents"));
                //$("#paga_in_agenzia").show();
                $("#pagamenti").hide();
            } else {
                Config.IsB2B2C = false;
                $("#pagamenti").show();
                $("#agenzia").hide();
                $("#concludi").attr("src", "/Plugins/comAcquistaPlus/Images/btn-concludi.png");
                $("#acquistaPlus #divTestoPagAge").hide();
                //$("paga_in_agenzia").hide();
            }
            $("#ListaAgenzie").dialog("close");
        });
    }


    function RenderizzaPagaInAgenzia(content) {
        $("<div/>", { "class": "ragionesociale" }).html(Config.Agenzia.RagioneSociale).appendTo(content);
        $("<div/>", { "class": "indirizzo" }).html(Config.Agenzia.Indirizzo).appendTo(content);
        $("<div/>", { "class": "cap" }).html(" - " + Config.Agenzia.Cap).appendTo(content);
        $("<div/>", { "class": "citta" }).html(Config.Agenzia.Citta).appendTo(content);
        $("<div/>", { "class": "provincia" }).html(Config.Agenzia.Prov).appendTo(content);
        $("<div/>", { "class": "cellulare1" }).html(Config.Agenzia.Cellulare1).appendTo(content);
        $("<div/>", { "class": "email" }).html(Config.Agenzia.Email).appendTo(content);
    }


    function RenderizzaDisponibilitaProdotto() {

        if (!$.isEmptyObject(Config.ConfermaConnettori)) {

            var stato = Config.ConfermaConnettori.Stato.toLowerCase();
            var $box_border = $("<div/>", { "class": "box_border" }).prependTo("#acquistaPlus #right");
            $box = $("<div/>", { "class": "box" }).appendTo($box_border);
            $("<div/>", { "class": "header" }).html("Verifica Disponibilit&agrave; Prodotto:").appendTo($box);
            var $contents = $("<div/>", { "class": "contents" }).appendTo($box);


            var dataPartenza = $("#riepilogo_prodotto .data_partenza").html();


            var dataPartenza = Config.Partenza;
            var sdataPartenza = dataPartenza.toString('dd-MM-yyyy');


            var now = new Date();
            var day = now.getDay();

            var sgiorno = now.getDate();

            if (sgiorno < 10)
                sgiorno = "0" + sgiorno;



            var smese = now.getMonth() + 1;
            if (smese.toString().length == 1) {
                smese = "0" + smese;
            }



            var then = sgiorno + '/' + smese + '/' + now.getFullYear();
            var sDataOggi = then;




            var diff = dateDiff(sDataOggi, sdataPartenza);


            if (stato != "non_disponibile") {
                if (diff <= 4) {
                    stato = "non_disponibile";


                }
                else {
                    stato = "disponibile"

                }
            }

            //***********************************************************************************


            var image_name = "";
            switch (stato) {
                case "non_disponibile":
                    //image_name = "ico-error.png";
                    image_name = "ico-phone.png";

                    break;
                case "disponibile":
                    image_name = "ico-ok.png";
                    break;
                default:
                    // image_name = "ico-warning.png";
                    image_name = "ico-phone.png";
                    break;
            }


            if (Config.IsMessaggioStampato == false) {

                $("<img/>", { "src": "/Plugins/comAcquistaPlus/Images/" + image_name }).css({ "float": "right" }).appendTo($contents);

                // sovrascrivo il messaggio non disponibile (solo x edreams)
                if (stato != "disponibile") {
                    // $("<div/>").css({ "float": "left", "width": "570px" }).html("Al momento il prodotto richiesto non &egrave; confermabile on-line, chiamaci per parlare con un nostro agente di viaggi al numero 02-67.48.05.303, oppure clicca qui per tornare alla pagina risultati.").appendTo($contents);
                    $("<div/>").css({ "float": "left", "width": "570px" }).html("Per procedere alla prenotazione di questa vacanza &egrave; necessaria una verifica da parte del nostro ufficio prenotazioni. <BR /><BR />Inviaci i tuoi dati e sarai contattato gratuitamente e senza impegno da un nostro consulente di viaggio, oppure telefonaci al numero 02/67.48.05.888.").appendTo($contents);
                    // Nuovo giro OMER
                    //                if (Config.FormData.EntryPage != "Preventivo") {
                    //                    var $torna_risultati = $("<img/>", { "src": "/Plugins/comAcquistaPlus/Images/btn-torna-risultati.png" }).css({ "margin-top": "20px", "cursor": "pointer", "float": "left" }).appendTo($contents);
                    //                    $torna_risultati.bind("click", function () {
                    //                        $.fn.Travelmind.RestorePlugin("Risultati");
                    //                    });
                    //                }

                    // messaggi standard (provengono dal server)
                } else {
                    $("<div/>").css({ "float": "left" }).html(Config.ConfermaConnettori.Messaggio).appendTo($contents);
                }

                Config.IsMessaggioStampato = true;
            }



            // se il prodotto non è disponibile nascondo il resto della pagina
            if (stato == "disponibile") {

                $("#acquirenteRq").hide();
                $("#privacyRq").hide();
                $("#linkPrenotaRQ").hide();
                $("#chkPrivacyRq").hide();
                $("#linkPrenotaRQ").hide();
                $("#linkAcquista").show();

            }
            else {



                $("#acquirenteRq").show();
                $("#privacyRq").show();
                $("#linkPrenotaRQ").show();
                $("#chkPrivacyRq").show();
                $("#linkPrenotaRQ").show();
                $("#linkAcquista").hide();
                $("#agenzia").hide();
                $("#cerca_agenzia").hide();
                $("#acquirente").hide();
                $("#pax").hide();
                $("#condizioni").hide();
                $("#pagamenti").hide();
                $("#note").hide();
                $("#tot").hide();
                $("#concludi").hide();
                $("#riepilogo_pacchetto_vacanza").hide();
                $("#riepilogo_costi").hide();
                $("#download_preventivo").hide();


                $("#txtAcquirenteNomeRq").addClass("validate[required]");
                $("#txtAcquirenteNomeRq").val(Config.txtnome);



                $("#txtAcquirenteCognomeRq").addClass("validate[required]");
                $("#txtAcquirenteCognomeRq").val(Config.txtcognome);


                $("#txtAcquirenteCellulare1Rq").addClass("validate[required,custom[onlyNumber]]");
                $("#txtAcquirenteCellulare1Rq").val(Config.txttelefono);


                $("#txtAcquirenteEmailRq").addClass("validate[required,custom[email]]");
                $("#txtAcquirenteEmailRq").val(Config.txtemail);




            }
        }
        else {

            $("#acquirenteRq").hide();
            $("#privacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#chkPrivacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#linkAcquista").show();
        }
    }

    function RenderizzaLastSecond() {




        var Prodotto = Config.Prodotto;


        // Gestisco i Last Second 
        // Se la data partenza è compresa tra oggi e 4 giorni forzo lo stato a non_disponibile
        var dataPartenza = Config.Partenza;
        var sdataPartenza = dataPartenza.toString('dd-MM-yyyy');

        //  alert("DataPartenza: " + dataPartenza);




        var now = new Date();
        var day = now.getDay();

        var sgiorno = now.getDate();

        if (sgiorno < 10)
            sgiorno = "0" + sgiorno;


        //        if (sgiorno.toString().length == 1) {
        //            sgiorno = "0" + now.getDay();
        //        }

        var smese = now.getMonth() + 1;
        if (smese.toString().length == 1) {
            smese = "0" + smese;
        }



        var then = sgiorno + '/' + smese + '/' + now.getFullYear();
        var sDataOggi = then;

        // alert("DataOggi: " + sDataOggi);


        var diff = dateDiff(sDataOggi, sdataPartenza);


        //   alert("Differenza: " + diff);

        if (diff <= 4) {
            stato = "non_disponibile";


        }
        else {
            stato = "disponibile"

        }

        //***********************************************************************************




        var image_name = "";

        switch (stato) {
            case "non_disponibile":
                //image_name = "ico-error.png";
                image_name = "ico-phone.png";

                break;
            case "disponibile":
                image_name = "ico-ok.png";
                break;
            default:
                // image_name = "ico-warning.png";
                image_name = "ico-phone.png";
                break;
        }


        if (stato == "disponibile") {

            $("#acquirenteRq").hide();
            $("#privacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#chkPrivacyRq").hide();
            $("#linkPrenotaRQ").hide();
            $("#linkAcquista").show();

        }
        else {

            if (Config.IsMessaggioStampato == false) {

                var $box_border = $("<div/>", { "class": "box_border" }).prependTo("#acquistaPlus #right");
                $box = $("<div/>", { "class": "box" }).appendTo($box_border);
                $("<div/>", { "class": "header" }).html("Verifica Disponibilit&agrave; Prodotto:").appendTo($box);
                var $contents = $("<div/>", { "class": "contents" }).appendTo($box);


                $("<img/>", { "src": "/Plugins/comAcquista/Images/" + image_name }).css({ "float": "right" }).appendTo($contents);

                // sovrascrivo il messaggio non disponibile (solo x edreams)
                if (stato != "disponibile") {
                    $("<div/>").css({ "float": "left", "width": "570px" }).html("Per procedere alla prenotazione di questa vacanza &egrave; necessaria una verifica da parte del nostro ufficio prenotazioni. <BR /><BR />Inviaci i tuoi dati e sarai contattato gratuitamente e senza impegno da un nostro consulente di viaggio, oppure telefonaci al numero 02/67.48.05.888.").appendTo($contents);

                }
                Config.IsMessaggioStampato = true;

            }

            $("#txtAcquirenteNomeRq").addClass("validate[required]");
            $("#txtAcquirenteNomeRq").val(Config.txtnome);



            $("#txtAcquirenteCognomeRq").addClass("validate[required]");
            $("#txtAcquirenteCognomeRq").val(Config.txtcognome);


            $("#txtAcquirenteCellulare1Rq").addClass("validate[required,custom[onlyNumber]]");
            $("#txtAcquirenteCellulare1Rq").val(Config.txttelefono);


            $("#txtAcquirenteEmailRq").addClass("validate[required,custom[email]]");
            $("#txtAcquirenteEmailRq").val(Config.txtemail);
            $("#acquirenteRq").show();
            $("#privacyRq").show();
            $("#linkPrenotaRQ").show();
            $("#chkPrivacyRq").show();
            $("#linkPrenotaRQ").show();
            $("#linkAcquista").hide();
            $("#agenzia").hide();
            $("#cerca_agenzia").hide();
            $("#acquirente").hide();
            $("#pax").hide();
            $("#condizioni").hide();
            $("#pagamenti").hide();
            $("#note").hide();
            $("#tot").hide();
            $("#concludi").hide();
            $("#riepilogo_pacchetto_vacanza").hide();
            $("#riepilogo_costi").hide();
            $("#download_preventivo").hide();

        }

    }
    function Bindings() {

        //pulsante concludi
        $("#concludi").bind("click", VaiAllaConferma);
        $("#concludiRq").bind("click", VaiAllaConfermaRq);

        // navigation menu
        var homeBack = (Config.FormData.HistoryBack != undefined && Config.FormData.HistoryBack != "") ? Config.FormData.HistoryBack : "Home";
        $("#nav_menu #riavvia_ricerca").bind("click", function () {
            //Loggo su google Analytics
            $.fn.Utility.Analytics("EVENT", "ACQUISTA_NUOVA_RICERCA_PLUS", "CLICK", "");
            $.fn.Travelmind.RestorePlugin(homeBack);
        });

        $("#nav_menu #torna_risultati").bind("click", function () {
            //Loggo su google Analytics
            $.fn.Utility.Analytics("EVENT", "ACQUISTA_TORNA_RISULTATI_PLUS", "CLICK", "");
            $.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_acquistaPlus").validationEngine({
            success: false,
            failure: function () { },
            validationEventTrigger: "blur"
        });

        // download preventivo
        $("#download_preventivo .contents").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) {
                //Loggo su google Analytics
                $.fn.Utility.Analytics("EVENT", "ACQUISTA_SCHEDA_TECNICA_PLUS", "CLICK", pdf);

                window.open("/Docs/Contratti/vm.pdf");
            }
            else {
                //Loggo su google Analytics
                $.fn.Utility.Analytics("EVENT", "ACQUISTA_SCHEDA_TECNICA_PLUS", "CLICK", pdf);

                window.open("/Docs/Contratti/" + pdf);
            }

        });

        // link scheda tecnica tour operator
        //Fabio:
        //richiesta rimozione da Porro in data 14/11/2011
        //        $("#scheda_tecnicaED").bind("click", function () {
        //            //Loggo su google Analytics
        //            $.fn.Utility.Analytics("EVENT", "ACQUISTA_SCHEDA_TECNICA_PLUS", "CLICK", "EDREAMS");

        //            window.open("/Docs/Contratti/miavacanza.pdf");
        //        });

        // link privacy tour operator
        $("#privacy").bind("click", function () {
            //Loggo su google Analytics
            $.fn.Utility.Analytics("EVENT", "ACQUISTA_PRIVACY_PLUS", "CLICK", "");

            window.open("/Docs/Contratti/privacy.pdf");
        });

        // tooltip pagamenti
        $(".img_pagamento").tooltip({
            effect: 'slide',
            slideOffset: 10,
            offset: [10, 2],
            tipClass: 'tooltip_pagamento',
            cancelDefault: true
        });

        // pulsante rimuovi agenzia
        $("#btnRimuoviAgenzia").bind("click", RimuoviAgenzia);


        //  $("#pagamenti").hide();
        // $("#condizioni").hide();
        // $("#paga_in_agenzia").hide();
        // $("#pax").hide(); 

        $("#linkAcquista").bind("click", function (ev) {
            if ($("#linkAcquista").attr("href") == "") {
                ev.preventDefault();
            }
        });

        $("#linkPrenotaRQ").bind("click", function (ev) {
            ev.preventDefault();
        });

        $("#txtAcquirenteNomeRq").addClass("validate[required]");
        $("#txtAcquirenteCognomeRq").addClass("validate[required]");
        $("#txtAcquirenteCellulare1Rq").addClass("validate[required,custom[onlyNumber]]");
        $("#chkPrivacyRq").addClass("validate[required]");
        $("#txtAcquirenteEmailRq").addClass("validate[required,custom[email]]");

    }


    function RimuoviAgenzia() {
        // azzero l'agenzia
        var Agenzia = {};
        $("#acquistaPlus").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.MostraPrezzoNetto == false) {
                    Config.MostraPrezzoNetto = true;
                    ConvertiCostiNetto(true);
                }
                break;

            case 120: // F9: prezzo lordo                
                if ($.fn.Utility.IsAgenziaLoggata() && 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 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 RenderizzaTotale() {
        if (!$.isEmptyObject(Config.RiepilogoCosti)) {
            var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;
            $("#prezzo_totale").html(RiepilogoCosti[RiepilogoCosti.length - 1].Value + " &euro;");

            if (Config.MostraPrezzoNetto) {
                $("#prezzo_totale").addClass("netto");
            } else {
                $("#prezzo_totale").removeClass("netto");
            }
        }
    }


    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) {
            // precompilo il form dell'agenzia (non necessita di validazione perchè è tutto readonly).
            $("#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);

            // se l'agenzia non necessita di avere i dati del proprio cliente nascondo il form acquirente
            //$("#acquirente").hide();
            $("#agenzia").show();

        } 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                    
                }
            }
        });

        var RiepilogoCosti = (Config.MostraPrezzoNetto) ? Config.RiepilogoCosti.CostiNetti : Config.RiepilogoCosti.CostiBase;
        var totaleOrdine = RiepilogoCosti[RiepilogoCosti.length - 1].Value;
        var totaleOrdineNoPunto = totaleOrdine.replace(".", "");
        // bindings
        $("#txtAcquirenteStato").bind("change", function () {

            //    alert(totaleOrdine);
            if ($(this).val() != "Italia") {
                $("#txtAcquirenteProvincia").val("--").attr("disabled", true);

                //      alert("CF NON obligatorio");
                $("#txtAcquirenteCodiceFiscale").removeClass("validate[required,custom[codice_fiscale]]");
                $("#txtAcquirenteProvincia").attr("disabled", false);


            } else {

                if (totaleOrdineNoPunto > 3000) {
                    //        alert("CF obligatorio " + totaleOrdine);
                    $("#txtAcquirenteCodiceFiscale").addClass("validate[required,custom[codice_fiscale]]");

                }
                else {
                    //      alert("CF NON obligatorio Prezzo " + totaleOrdine);
                    $("#txtAcquirenteCodiceFiscale").removeClass("validate[required,custom[codice_fiscale]]");
                }



            }

        });

        if (totaleOrdineNoPunto > 3000) {
            //alert("CF obligatorio " + totaleOrdine);
            $("#txtAcquirenteCodiceFiscale").addClass("validate[required,custom[codice_fiscale]]");

        }
        else {
            //alert("CF NON obligatorio Prezzo " + totaleOrdine);
            $("#txtAcquirenteCodiceFiscale").removeClass("validate[required,custom[codice_fiscale]]");
        }

        $("#txtAcquirenteCodiceFiscale").bind("keyup", function () {
            $(this).val($(this).val().toUpperCase());
        });

        // inserisco le classi di validazione

        $("#txtAcquirenteNome").addClass("validate[required]");
        $("#txtAcquirenteNome").val(Config.txtnome);

        $("#txtAcquirenteCognome").addClass("validate[required]");
        $("#txtAcquirenteCognome").val(Config.txtcognome);




        $("#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[required,custom[onlyNumber]]");
        $("#txtAcquirenteCellulare1").val(Config.txttelefono);


        $("#txtAcquirenteCellulare2").addClass("validate[custom[onlyNumber]]");


        $("#txtAcquirenteEmail").addClass("validate[required,custom[email]]");
        $("#txtAcquirenteEmail").val(Config.txtemail);




    }


    function RenderizzaFormCondizioni() {
        $("#txtCondizioni").addClass("validate[required]");
        $("#txtPrivacy").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", "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() {
        var $div = null;
        var $input = null;
        var $label = null;
        var title = "";

        // bonifico
        title = "<BR>Puoi scegliere di pagare la tua vacanza attraverso bonifico bancario."
        + "Tale modalit&agrave; &egrave; disponibile se stai prenotando la tua vacanza con ALMENO 15 GIORNI DI ANTICIPO sulla data di partenza e  non ti garantisce il blocco immediato di disponibilit&agrave; e prezzo, ma la vacanza ti viene confermata a pagamento avvenuto.<BR>"
        + "Per tutte le prenotazioni effettuate la mattina (tra le 00:01 e le 14:00) chiediamo l'ordine dei bonifico entro le ore 16 del giorno stesso e l'invio della copia del medesimo, riportante anche il numero di CRO al fax 02/93.66.48.70 entro la giornata successiva.<BR>"
        + "Per tutte le prenotazioni effettuate il pomeriggio (tra le 14:01 e le 24:00) chiederemo l'esecuzione del bonifico entro le ore 12 del giorno successivo e l'invio della copia del medesimo, riportante anche il numero di CRO al fax 02/93.66.48.70 entro la giornata successiva.<BR>"
        + "Al ricevimento del fax con numero di CRO confermeremo la vostra prenotazione inviando i documenti all'indirizzo da voi indicato nel form di prenotazione. Per prenotazioni vicine alla data di partenza &egrave; necessario utilizzare gli altri sistemi di pagamento che assicurano maggiore celerit&agrave;.<BR>";
        $div = $("<div/>").appendTo("#pagamenti .contents");
        $input = $("<input/>", { "type": "radio", "id": "txtPagamenti", "name": "txtPagamenti", "value": "bonifico" }).css({ "float": "left" }).appendTo($div);
        $img = $("<img/>", { "class": "img_pagamento", "rel": "bonifico", "src": "/Plugins/comAcquistaPlus/Images/BONIFICO.png", "title": title }).css({ "float": "left", "margin-right": "20px" }).appendTo($div);

        // carta di credito
        title = "<BR>Puoi scegliere di pagare la tua vacanza utilizzando la tua carta di credito."
        + "Tale modalit&agrave; ti permette di bloccare immediatamente disponibilit&agrave; ed eventuali prezzi in promozione, assicurandoti sin d'ora la vacanza da te scelta.<BR>"
        + "Seleziona la modalit&agrave carta di credito e verifica che la tua carta sia tra quelle accettate per perfezionare l'acquisto.<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/comAcquistaPlus/Images/CARTA-DI-CREDITO.png", "title": title }).css({ "float": "left", "margin-right": "20px" }).appendTo($div);

        // paga in conto
        title = "PagOnline &egrave; il servizio di pagamento online di UniCredit che consente di effettuare<br>"
        + "acquisti sul sito di edreams.miavacanza.it senza usare la carta di credito, ma<br>"
        + "addebitando l'importo direttamente sul tuo conto corrente. <br>"
        + "Se sei cliente UniCredit, e hai attivato il Servizio di Banca via Internet, ecco come<br>"
        + "utilizzare il servizio PagOnline: <br><br>"
        + "- In fase di pagamento, seleziona l'opzione 'PagOnline' e il sistema ti collegher&agrave; in modalit&agrave; protetta al sito di UniCredit. <br>"
        + "- Inserisci i codici d'accesso (codice adesione e PIN), ed utilizza la password 'usa e getta' della tua Password Card o dell'UniCredit Pass, "
        + "il dispositivo elettronico di UniCredit che visualizza password diverse ogni 60 secondi, garantendo la sicurezza totale della tua operazione <br>"
        + "- Con l'autorizzazione della banca, l'acquisto sar&agrave; completato e tornerai alla pagina di conferma del nostro sito <br>"
        + "- A fronte dell'acquisto, riceverai un'email con l'esito dell'operazione effettuata da parte della Banca <br> <br>"
        + "Se non sei cliente UniCredit vai sul sito UniCredit.it e scegli il conto corrente  pi&ugrave; adatto alle tue esigenze, puoi richiederlo direttamente online. <br>"
        $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/comAcquistaPlus/Images/PAGA-IN-CONTO.png", "title": title }).css({ "float": "left", "margin-right": "20px" }).appendTo($div);

        // paga al telefono
        title = "<BR>Puoi scegliere di pagare la tua vacanza comunicandoci al telefono gli estremi della tua carta o concordando un acconto con carta e saldo con bonifico.<BR>"
        + "Tale modalit&agrave; ti permette di bloccare immediatamente disponibilit&agrave; ed eventuali prezzi in promozione e pagare in sicurezza con un nostro operatore abilitato.<BR>"
        + "Seleziona la modalit&agrave; 'paga al telefono' e prenota la tua vacanza!<BR>";
        $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/comAcquistaPlus/Images/PAGA-AL-TELEFONO.png", "title": title }).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/comAcquistaPlus/Images/PAYPAL.png" }).css({ "float": "left" }).appendTo($div);		

        // validazione
        $("input[name='txtPagamenti']").addClass("validate[required]");
    }


    function VaiAllaConfermaRq() {

        if ($("#form_acquistaPlus").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 {

                var FormData = {};
                FormData.HistoryBack = Config.FormData.HistoryBack;
                FormData.IdProdotto = Config.IdProdotto;
                FormData.IdListino = Config.IdListino;
                FormData.Pax = [];

                // 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();

                    // Inverte mese con giorno se Giorno <=12 
                    var newData = getDateSql($(this).find(".txtDataNascita").val());
                    Pax.DataNascita = newData;



                    Pax.CameraNumero = $(this).attr("numero_camera");
                    FormData.Pax.push(Pax);
                });

                // ricavo i dati dell'acquirente
                var Acquirente = {};
                Acquirente.Nome = $("#txtAcquirenteNomeRq").val();
                Acquirente.Cognome = $("#txtAcquirenteCognomeRq").val();
                Acquirente.CodiceFiscale = "";
                Acquirente.Indirizzo = "";
                Acquirente.Cap = "";
                Acquirente.Citta = "";
                Acquirente.Provincia = "";
                Acquirente.Stato = "";
                Acquirente.Cellulare1 = $("#txtAcquirenteCellulare1Rq").val();
                Acquirente.Cellulare2 = "";
                Acquirente.Email = $("#txtAcquirenteEmailRq").val();
                FormData.Acquirente = Acquirente;

                // ricavo il tipo di pagamento
                FormData.Pagamento = "rq";

                // ricavo le note
                FormData.Note = $("#txtNote").val();

                // Elimino la prenotazione per il ricontatto (prv)
                var ritornoElimina;
                //alert(Config.NumeroOrdine);
                ritornoElimina = EliminaPrenotazioneRicontatto(FormData, Config.NumeroOrdine);
                //alert(ritornoElimina);

                Config.NumeroOrdine = "";
                // salvo la prenotazione                
                Config.NumeroOrdine = SalvaPrenotazione(FormData, Config.NumeroOrdine);

                // alert(Config.NumeroOrdine);

                if (Config.NumeroOrdine != "-1" && Config.NumeroOrdine != "" && Config.NumeroOrdine != "PREZZO_CPP_ERRATO") {

                    // 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 {
                        GoogleConversion(); // triggero la conversion di google_analytics/google_adword
                        $.fn.Travelmind.LoadPlugin("Conferma", FormData);
                    }

                } else {

                    if (Config.NumeroOrdine == "PREZZO_CPP_ERRATO") {
                        ShowMessage("Attenzione", "abbiamo registrato positivamente la sua richiesta di acquisto<br> su un prodotto disponibile nel nostro sistema,<br> la chiameremo il prima possibile per verificare il prezzo definitivo<br> e concordare con lei il modo di pagamento");

                    }
                    else {
                        ShowMessage("Attenzione", "Si &egrave; verificato un errore nel salvataggio della prenotazione.");

                    }

                }

            }
        }
    }



    function VaiAllaConferma() {

        if ($("#form_acquistaPlus").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 {

                var FormData = {};
                FormData.HistoryBack = Config.FormData.HistoryBack;
                FormData.IdProdotto = Config.IdProdotto;
                FormData.IdListino = Config.IdListino;
                FormData.Pax = [];

                // 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 = $("input[name='txtPagamenti']:checked").val();

                // ricavo le note
                FormData.Note = $("#txtNote").val();

                // Elimino la prenotazione per il ricontatto (prv)
                var ritornoElimina;
                //alert(Config.NumeroOrdine);
                ritornoElimina = EliminaPrenotazioneRicontatto(FormData, Config.NumeroOrdine);
                //alert(ritornoElimina);

                Config.NumeroOrdine = "";
                // salvo la prenotazione                
                Config.NumeroOrdine = SalvaPrenotazione(FormData, Config.NumeroOrdine);





                if (Config.NumeroOrdine != "-1" && Config.NumeroOrdine != "" && Config.NumeroOrdine != "PREZZO_CPP_ERRATO") {

                    // 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 {
                        GoogleConversion(); // triggero la conversion di google_analytics/google_adword
                        $.fn.Travelmind.LoadPlugin("Conferma", FormData);
                    }

                } else {

                    if (Config.NumeroOrdine == "PREZZO_CPP_ERRATO") {
                        ShowMessage("Attenzione", "abbiamo registrato positivamente la sua richiesta di acquisto<br> su un prodotto disponibile nel nostro sistema,<br> la chiameremo il prima possibile per verificare il prezzo definitivo<br> e concordare con lei il modo di pagamento");
                    }
                    else {
                        ShowMessage("Attenzione", "Si &egrave; verificato un errore nel salvataggio della prenotazione.");
                    }

                }

            }
        }
    }




    function GoogleConversion() {
        try {
            //la quota base e' il primo elemento del riepilogo costi
            var costoBase = Config.RiepilogoCosti.CostiBase[0].Value;

            //elimino il punto come separatore di migliaia
            costoBase = costoBase.replace("\.", "");

            //converto la virgola in punto come separatore decimale
            costoBase = costoBase.replace(",", ".");

            var realConversion = 0;

            // se per qualche motivo non ottengo un numero, imposto il tutto a 0
            if (isNaN(costoBase)) {
                realConversion = 0;
            } else {
                realConversion = costoBase * 5 / 100;
            }

            myHref = $("#linkAcquista").attr("href");
            $("#linkAcquista").attr("href", "/GoogleConversion.htm?cnv=" + realConversion);

        } catch (ex) {
        }
    }

    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.IsB2B2C && Config.Agenzia.Id != 0) {
            parameters.IsB2B2C = true;
            parameters.IdAgenzia = Config.Agenzia.Id;
            FormData.Pagamento = "paga_agenzia";
            parameters.Pagamento = "paga_agenzia";
        }

        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            type: "POST",
            success: function (returnData) {
                result = returnData;
            }
        });

        return result;
    }
    function EliminaPrenotazioneRicontatto(FormData, numeroOrdine) {
        var result = "";
        var parameters = {};
        parameters.action = "EliminaPrenotazione";
        parameters.numeroOrdine = numeroOrdine;
        $.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/Unicredit/GoUnicredit.aspx?numeroOrdine=" + numeroOrdine + "&totaleOrdine=" + totaleOrdine + "&tipoPagamento=" + tipoPagamento;
        window.open(url, "unicredit", "width=800,height=550,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');
    }




})(jQuery);
