(function ($) {

    var Config = {
        ServerURL: "/Controller/Login.ashx",
        ServerUtilityURL: "/Controller/Utility.ashx",
        ClientURL: "/Plugins/modLogin/Login.htm",
        StyleURL: "/Plugins/modLogin/Login.css",
        B2bURL: "http://www.tobook.it/b2b/HomeAgenzia.aspx?i=[IdAgenzia]",
        Container: "",
        IdAgenzia: "",
        Sid: "",
        IsB2B2C: false,
        IsB2B: false,
        Agenzia: {},
        UseForPromo: false
    };


    $.fn.Login = function (options) {
        // integro le configurazioni con quelle passate (injection di parametri)
        if (options) {
            Config = $.extend(Config, options);
        }
        // setto il container
        Config.Container = $(this);
        // lancio la funzione di ingresso
        Init();
    };


    $.fn.Login.Destroy = function () { }


    function Init() {
        //if plugin is used for 'Codice Cliente', not for Login
        //if (Config.UseForPromo) {
        //    Config.Container.find("#btn-CodiceCliente:first").bind("click", function () { return LoginPromo(Config.Container.find('#ricerca_codice_cliente:first').val()); });
        //    return;
        //}

        // carico la pagina html
        Config.Container.load(Config.ClientURL, function () {

            // cerco di caricare l'agenzia dalla sessione
            CaricaAgenziaDaSessione();

            // Renderizza Login
            RenderizzaLogin();

            // creo i bindigns sull'interfaccia
            Bindings();

            // stondo gli angoli
            $.fn.Travelmind.RoundCorners();
        });
    }


    function RenderizzaLogin() {

        // 1) l'agenzia è già in sessione
        //if (!$.isEmptyObject(Config.Agenzia) && Config.Agenzia.Id != "0") {
        //    $("#logged #username").html(Config.Agenzia.RagioneSociale);
        //    $("#logged").show();
        //    return;
        //}

        // 2) l'agenzia non è in sessione ma il cliente ci passa l'id_agenzia per il login automatico
        //if (Config.IdAgenzia != "") {
        //    LogInAutomatico();
        //    return;
        //}

        if (Config.Sid != "") {
            LogInAutomatico();
            return;
        }

        // 3) mostro il form di login 
        //$("#not_logged").show();
    }


    function CaricaAgenziaDaSessione() {
        var parameters = {};
        parameters.action = "SelAgenzia";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerUtilityURL,
            data: parameters,
            success: function (returnData) {
                Config.Agenzia = (returnData != "-1") ? $.parseJSON(returnData) : {};
            }
        });
    }


    function Bindings() {
        // validation engine
        $("#login #not_logged").validationEngine({
            success: false,
            failure: function () { },
            validationEventTrigger: "blur",
            promptPosition: "bottomRight"
        });

        // validazione campi
        $("#txtUsername").addClass("validate[required]");
        $("#txtPassword").addClass("validate[required]");

        // bottone login
        $("#btn-login").bind("click", LogIn);

        // bottone b2b
        $("#btn-b2b").bind("click", ApriB2B);

        // bottone logout
        $("#btn-logout").bind("click", LogOut);
    }


    function LogIn() {
        if ($("#login #not_logged").validationEngine('validate')) {
            var parameters = {};
            parameters.action = "LogIn";
            parameters.username = $("#txtUsername").val();
            parameters.password = $("#txtPassword").val();
            $.ajax({
                async: false,
                cache: false,
                type: "POST",
                url: Config.ServerURL,
                data: parameters,
                success: function (returnData) {
                    RenderizzaBenvenuto(returnData);
                    $(document).trigger("login");
                }
            });
        }
    }

    //To be completed by Fabio
    function LoginPromo(codice_cliente) {
        Config.IdAgenzia = codice_cliente;
        LogInAutomatico();
    }


    function LogInAutomatico() {
        var parameters = {};
        parameters.action = "LogIn";
        //parameters.idAgenzia = Config.IdAgenzia;
        parameters.idAgenzia = Config.Sid;
        parameters.IsB2B2C = Config.IsB2B2C;
        parameters.IsB2B = Config.IsB2B;
        $.ajax({
            async: false,
            cache: false,
            type: "POST",
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) { RenderizzaBenvenuto(returnData); }
        });
    }


    function RenderizzaBenvenuto(returnData) {
        // il server è andato in errore
        if (returnData == "-1") {
            ShowMessage("Errore", "Si è verificato un errore durante il login, se il problema persiste contattare un amministratore.");
            return;
        }
        // l'utente non è stato riconosciuto
        if (returnData == "0") {
            ShowMessage("Attenzione", "L'utenza non è stata riconosciuta, si prega di riprovare.");
            return;
        }
        // è andato tutto bene
        if (returnData != "") {
            Config.Agenzia = $.parseJSON(returnData);
            $("#not_logged").fadeOut("fast", function () {
                //$.fn.Travelmind.LoadPlugin("Home");
                $("#logged #username").html(Config.Agenzia.RagioneSociale);
                $("#logged").fadeIn("slow");
                return;
            });
        }
    }


    function LogOut() {
        var parameters = {};
        parameters.action = "LogOut";
        $.ajax({
            async: false,
            cache: false,
            url: Config.ServerURL,
            data: parameters,
            success: function (returnData) {
                if (returnData != "-1") {
                    $("#logged").fadeOut("fast", function () {
                        Config.Agenzia = {};
                        $.fn.Travelmind.LoadPlugin("Home");
                        $("#txtUsername").val("");
                        $("#txtPassword").val("");
                        $("#not_logged").fadeIn("slow");
                        $(document).trigger("logout");
                    });
                } else {
                    ShowMessage("Errore", "Si è verificato un errore durante il logout, se il problema persiste contattare un amministratore");
                }
            }
        });
    }


    function ApriB2B() {
        var url = Config.B2bURL;
        url = url.replace("[IdAgenzia]", Config.IdAgenzia);
        window.open(url, "b2b");
    }


    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);
