(function ($) {

    var Config = {
        Container: "",
        CurrentPlugin: "",
        IsFirefox: false,
        IsFirstCall: false
    }

    $.fn.Travelmind = function (options) {
        // sovrascrivo le proprietà con quelle eventualmente passate
        if (options) {
            Config = $.extend(Config, options);
        }
        Config.Container = $(this);
        Init();
    };

    function Init() {

        // ricavo il tipo di browser
        BrowserDetect();

        // avvio il plugin di login
        InitLogin();

        // avvio il plugin per la gestione degli stati di pagina
        InitHistoryBrowser();

        // avvio il plugin di utility
        $.fn.Utility();

        // imposto i bindings
        Bindings();
    }


    function BrowserDetect() {
        if (navigator.userAgent.indexOf("Firefox") != -1) {
            Config.IsFirefox = true;
        }
    }

    function Bindings() {
        // gestisco il refresh del browser        
        window.onbeforeunload = function () {
            if (Config.IsFirefox) {
                RestorePlugin(Config.CurrentPlugin);
            } else {
                var result = true; // confirm("L'operazione richiesta comporta il riavvio o il termine dell'applicazione.\nSi desidera proseguire?");
                if (result) {
                    $.history.load("Home");
                } else {
                    return false;
                }
            }
        };
    }


    function InitLogin() {

        var sid = $.request("sid");
        var isB2B2C = false;
        var isB2b = false;

        if (sid != "") {
            isB2b = true;
        } else {
            //var url = 'http://gattacaviaggi.b2b2c.vacanze.frigerioviaggi.com';  // per prova b2b2c
            //alert(url);
            var url = window.location.href;
            if (url.indexOf(".b2b2c.") != -1) {
                url = url.replace("http://", "");
                url = url.split(".");
                sid = url[0];
                isB2B2C = true;
            //    alert('entro');
            }
            else {
                // Omer 19/04/2011
                // CREAZIONE CANALE FRIGERIO B2C
                // Attenzione modifica eseguita per agganciare al b2c il markup b2b
                // E' necessario impostare il sid = 0 così valorizza l'oggetto agenzia nella loginautomatica
                // ma non trovando un agenzia valida mette l'idagenzia a 0 
                // quindi con idagenzia a 0 e isb2b =true possiamo applicre il markupb2b anche in accesso b2c 
                // senza cambiare nulla nel resto della applicativo se non qui con queste 2 istruzioni

                // Stefano
                // "senza cambiare nulla nel resto dell'applicativo?", ma ci abbiamo pensato bene?
                // tutte le logiche dell'applicativo che accendono/spengono le funzionalità b2b/b2c si basano su queste variabili.
                // di fatto ora il b2c ha accesso a funzionalità b2b che non dovrebbe poter accedere.
                // ora per correggere questo problema dobbiamo inserire altre pezze (un po' dappertutto), e il programma degenera sempre di più..
                // questo tipo di interventi deve essere assolutamente essere abolito se vogliamo garantire un minimo di longevità al programma.
                // è da pianificare un intervento di bonifica x questa parte.

                isB2b = true;
                sid = "0";
                // ***********************************************************************************
            }
        }
        var screenWidth = window.screen.width;
        var left = ((screenWidth - 1000) / 2) + 290;
        $("#box_login").css({ "left": left + "px", "top": "80px" });
        $("#box_login").Login({ Sid: sid, IsB2B2C: isB2B2C, IsB2B: isB2b });
    }


    function InitHistoryBrowser() {
        $.history.init(function (plugin) {
            if (plugin == "") {
                Config.IsFirstCall = true;
                InitApplication();
            } else {
                Config.IsFirstCall = false;
                if (plugin != Config.CurrentPlugin) {
                    RestorePlugin(plugin);
                }
            }
        }, { unescape: ",/" });
    }


    function LoadPlugin(plugin, config) {
        // distruggo il plugin corrente prima di passare al successivo
        if (Config.CurrentPlugin != "" && Config.CurrentPlugin != plugin) {
            eval("$.fn." + Config.CurrentPlugin + ".Destroy();");
        }
        // setto il nome del nuovo plugin che vado a caricare
        Config.CurrentPlugin = plugin;

        // avvio il plugin        
        $("#page").fadeOut("fast", function () {
            if (!Config.IsFirstCall) {
                ShowLoader();
            }
            eval('$("#page").' + plugin + '(config);');
            $("#page").unbind("ComponentLoaded");
            $("#page").bind("ComponentLoaded", function () {
                $("#page").fadeIn("fast", function () {
                    if (!Config.IsFirstCall) {
                        CloseLoader();
                    }
                    $("html, body").animate({ scrollTop: 0 }, 'slow');
                });
            });
        });

    }


    // ricava le configurazioni salvate e riavvia il plugin
    function RestorePlugin(plugin) {

        // ricavo le configurazioni del plugin
        var config = {};
        if (Config.IsFirefox) {
            var sessionData = $("#session" + plugin).val();
            config = $.parseJSON(sessionData);
        } else {
            config = $.data(Config.Container, plugin);
        }

        LoadPlugin(plugin, config);
    }

    // salva lo stato del plugin nell'history del browser
    function SalvaStato(plugin, config) {
        if (Config.IsFirefox) {
            var sessionData = JSON.stringify(config);
            $("#session" + plugin).val(sessionData);
        } else {
            var newConfig = $.extend(true, {}, config);
            $.data(Config.Container, plugin, newConfig);
        }
        $.history.load(plugin);
    }

    // inizializza l'applicazione
    function InitApplication() {
        plugin = $.request("Page");
        plugin = (plugin == "") ? "Home" : plugin;
        var FormData = $.requestAll();
        FormData = (FormData != "") ? FormData : {};
        FormData.EntryPage = plugin;
        var config = { FormData: FormData };
        LoadPlugin(plugin, config);
    }


    // FUNZIONI DI PUBBLICO ACCESSO
    $.fn.Travelmind.LoadPlugin = function (plugin, formData) {
        var config = { "FormData": formData };
        LoadPlugin(plugin, config);
    }

    $.fn.Travelmind.RestorePlugin = function (plugin) {
        RestorePlugin(plugin);
    }

    $.fn.Travelmind.SaveState = function (plugin, config) {
        SalvaStato(plugin, config);
    }


    function ShowLoader() {
        $("#loader").dialog({
            width: 610,
            title: "Caricamento...",
            modal: true,
            draggable: false,
            close: function () {
                $(this).dialog("destroy");
            }
        });
        $("#loader").dialog('open');
    }

    function CloseLoader() {
        $("#loader").dialog("close");
    }


    $.fn.Travelmind.AdjustBoxHeight = function (box1, box2) {
        var box1Height = $(box1).height();
        var box2Height = $(box2).height();
        if (box1Height > box2Height) {
            $(box2).height(box1Height);
        } else {
            $(box1).height(box2Height);
        }
    }

    $.fn.Travelmind.RoundCorners = function () {
        //$(".rounded").corner();
        //$(".rounded_top").corner("top");
        //$(".rounded_right").corner("right");
        //$(".rounded_bottom").corner("bottom");
        //$(".rounded_left").corner("left");
        //$(".rounded_input").corner("2px");
        //$(".rounded_check").corner("2px");
    }

})(jQuery);
