﻿/* 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()
*/
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());
		}
	}
};
