// Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)
// YOU MUST INCLUDE window.js BEFORE
//
// Object to store hide/show windows status in a cookie
// Just add at the end of your HTML file this javascript line: WindowStore.init()
/**
 * @deprecated
 */
WindowStore = {
    doSetCookie: false,
    cookieName:  "__window_store__",
    expired:     null,

    // Init function with two optional parameters
    // - cookieName (default = __window_store__)
    // - expiration date (default 3 years from now)
    init: function(cookieName, expired) {
        WindowStore.cookieName = cookieName || WindowStore.cookieName

        if (! expired) {
            var today = new Date();
            today.setYear(today.getYear()+1903);
            WindowStore.expired = today;
        }
        else
            WindowStore.expired = expired;

        Windows.windows.each(function(win) {
            win.setCookie(win.getId(), WindowStore.expired);
        });

        // Create observer on show/hide events
        var myObserver = {
            onShow: function(eventName, win) {
                WindowStore._saveCookie();
            },

            onClose: function(eventName, win) {
                WindowStore._saveCookie();
            },

            onHide: function(eventName, win) {
                WindowStore._saveCookie();
            }
        }
        Windows.addObserver(myObserver);

        WindowStore._restoreWindows();
        WindowStore._saveCookie();
    },

    show: function(win) {
        eval("var cookie = " + WindowUtilities.getCookie(WindowStore.cookieName));
        if (cookie != null) {
            if (cookie[win.getId()])
                win.show();
        }
        else
            win.show();
    },

    // Function to store windows show/hide status in a cookie
    _saveCookie: function() {
        if (!doSetCookie)
            return;

        var cookieValue = "{";
        Windows.windows.each(function(win) {
            if (cookieValue != "{")
                cookieValue += ","
            cookieValue += win.getId() + ": " + win.isVisible();
        });
        cookieValue += "}"

        WindowUtilities.setCookie(cookieValue, [WindowStore.cookieName, WindowStore.expired]);
    },

    // Function to restore windows show/hide status from a cookie if exists
    _restoreWindows: function() {
        eval("var cookie = " + WindowUtilities.getCookie(WindowStore.cookieName));
        if (cookie != null) {
            doSetCookie = false;
            Windows.windows.each(function(win) {
                if (cookie[win.getId()])
                    win.show();
            });
        }
        doSetCookie = true;
    }
};

// Object to set a close key an all windows
WindowCloseKey = {
    keyCode: Event.KEY_ESC,

    init: function(keyCode) {
        if (keyCode)
            WindowCloseKey.keyCode = keyCode;

        Event.observe(document, 'keydown', this._closeCurrentWindow.bindAsEventListener(this));
    },

    _closeCurrentWindow: function(event) {
        var e = event || window.event
        var characterCode = e.which || e.keyCode;

        // Check if there is a top window (it means it's an URL content)
        var win = top.Windows.focusedWindow;
        if (characterCode == WindowCloseKey.keyCode && win) {
            if (win.cancelCallback)
                top.Dialog.cancelCallback();
            else if (win.okCallback)
                top.Dialog.okCallback();
            else
                top.Windows.close(top.Windows.focusedWindow.getId());
        }
    }
};
