// http://transparent-message.xilinus.com/
// Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)

Position.windowInfo = function() { var windowWidth, windowHeight; var pageWidth, pageHeight; if (window.innerHeight && window.scrollMaxY) { pageWidth = document.body.scrollWidth; pageHeight = window.innerHeight + window.scrollMaxY;} else if (document.body.scrollHeight > document.body.offsetHeight){ pageWidth = document.body.scrollWidth; pageHeight = document.body.scrollHeight;} else { pageWidth = document.body.offsetWidth; pageHeight = document.body.offsetHeight;}
if (self.innerHeight) { windowWidth = self.innerWidth; windowHeight = self.innerHeight;} else if (document.documentElement && document.documentElement.clientHeight) { windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight;} else if (document.body) { windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight;}
var xScroll = document.documentElement.scrollLeft || document.body.scrollLeft; var yScroll = document.documentElement.scrollTop || document.body.scrollTop; pageHeight = Math.max(windowHeight, pageHeight); pageWidth = Math.max(windowWidth, pageWidth); return { width: windowWidth, height: windowHeight, pageWidth: pageWidth, pageHeight: pageHeight, xScroll: xScroll, yScroll: yScroll};}
var TransparentMenu = Class.create(); TransparentMenu.DefaultOptions = { top: null, left: null, showEffect: Effect.Appear, showEffectOptions: {duration: 0.2}, hideEffect: Effect.Fade, hideEffectOptions: {duration: 0.2}, showMode: "onload", hideMode: "timeout", hideDelay: 2, insideElement: {id: null, width: "auto", height: "auto"}, afterElement: null, fullscreen: false
}
TransparentMenu.instances = $H(); TransparentMenu.hide = function(id) { if (TransparentMenu.instances[id])
TransparentMenu.instances[id].hide();}
TransparentMenu.show = function(id) { if (TransparentMenu.instances[id])
TransparentMenu.instances[id].show(); else
new TransparentMenu(id, arguments[1]);}
TransparentMenu.prototype = { initialize: function(id) { this.options = Object.extend(Object.extend({},TransparentMenu.DefaultOptions), arguments[1] || {}); this.options.insideElement = Object.extend(Object.extend({},TransparentMenu.DefaultOptions.insideElement), this.options.insideElement || {}); this.id = id; if (this.options.displayMode == "onload")
Event.observe(window, "load", this._init.bindAsEventListener(this)); else
this._init(null); TransparentMenu.instances[id] = this;}, show: function() { new this.options.showEffect(this.element, this.options.showEffectOptions); if (navigator.appVersion.match(/Konqueror|Safari|KHTML/))
setTimeout(this._setPostion.bindAsEventListener(this), 10)
if (this.options.hideMode == "timeout")
setTimeout(this.hide.bindAsEventListener(this), this.options.hideDelay*1000); else if (this.options.hideMode == "click" || this.options.hideMode == "mousemove") { this.bindEvent = this._startHideEvent.bindAsEventListener(this); Event.observe(document.body, this.options.hideMode, this.bindEvent);}
}, hide: function() { new this.options.hideEffect(this.element, this.options.hideEffectOptions);}, _init: function(event) { this.element = $(this.id); this._setPostion(); if (this.element.getOpacity() && this.options.showEffect == Effect.Appear && ! this.options.showEffectOptions.to)
this.options.showEffectOptions.to = this.element.getOpacity(); this.show();}, _setPostion: function() { var windowInfo = Position.windowInfo(); var dim = this.element.getDimensions(); if (this.options.insideElement.id != null) { var relativeElement = $(this.options.insideElement.id); var position = Position.cumulativeOffset(relativeElement); var dimension = relativeElement.getDimensions(); this.element.style.left = position[0] + "px"; this.element.style.top = position[1] + "px"; if (this.options.insideElement.width == 'auto') { this.element.style.width = dimension.width + "px";}
if (this.options.insideElement.height == 'auto')
this.element.style.height = dimension.height + "px";}
else if (this.options.fullscreen) { this.element.style.left = "0px"; this.element.style.top = "0px"; this.element.style.width = windowInfo.pageWidth + "px"; this.element.style.height = windowInfo.pageHeight + "px";}
else { var dy = 0; if (this.options.afterElement != null) { var position = Position.cumulativeOffset($(this.options.afterElement)); dy = position[1];}
else
dy = windowInfo.yScroll; if (this.options.left != null)
this.element.style.left = windowInfo.xScroll + this.options.left + "px"; else
this.element.style.left = windowInfo.xScroll + ((windowInfo.width - dim.width) / 2 ) + "px"; if (this.options.top != null)
this.element.style.top = dy + this.options.top + "px"; else
this.element.style.top = dy + ((windowInfo.height - dim.height) / 2 ) + "px";}
}, _startHideEvent: function() { var dim = this.element.getDimensions(); Event.stopObserving(window, this.options.hideMode, this.bindEvent); setTimeout(this.hide.bindAsEventListener(this), this.options.hideDelay*1000);}
}