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