Object.extend(Element, {
	getPageScroll: function (){
	
		var xScroll, yScroll;
	
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} 
		else
			if (document.documentElement && document.documentElement.scrollTop){	
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} 
			else
				if (document.body) {
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;	
			}
	
		arrayPageScroll = new Array(xScroll,yScroll); 
		return arrayPageScroll;
	},	

	getPageSize: function(){
	
		var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		}
		else
			if (document.body.scrollHeight > document.body.offsetHeight){
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			}
			else {
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
		var windowWidth, windowHeight;
		
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			}
			else {
				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;
			}	
	
		if(yScroll < windowHeight) {
			pageHeight = windowHeight;
		}
		else { 
			pageHeight = yScroll;
		}
		if(xScroll < windowWidth) {	
			pageWidth = xScroll;		
		}
		else {
			pageWidth = windowWidth;
		}
	
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight); 
		return arrayPageSize;
	}
	
});

function Overlay() {
	var overlayOpacity = 0.8;
	var overlayDuration = 0.2;
	var id;
	
	function initialize() {
		var objBody = document.getElementsByTagName("body").item(0);
		id = 'Overlay' + new Date().getTime();
		var objOverlay = document.createElement("div");
		objOverlay.className = 'jsOverlay';
		objOverlay.setAttribute('id', id);
		objOverlay.style.display = 'none';
		objBody.appendChild(objOverlay);
	}
	
	this.show = function() {
		hideSelectBoxes();
		hideFlash();
		// stretch overlay to fill page and fade in
		var arrayPageSize = Element.getPageSize();		
		Element.setWidth(id, arrayPageSize[0]);
		Element.setHeight(id, arrayPageSize[1]);
		new Effect.Appear(id, { duration: overlayDuration, from: 0.0, to: overlayOpacity });
	}
	
	this.hide = function() {
		new Effect.Fade(id, { duration: overlayDuration});
		showSelectBoxes();
		showFlash();
	}
	
	function showSelectBoxes(){
		var selects = document.getElementsByTagName("select");
		for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "visible";
		}
	}

	function hideSelectBoxes(){
		var selects = document.getElementsByTagName("select");
		for (i = 0; i != selects.length; i++) {
			selects[i].style.visibility = "hidden";
		}
	}
	
	function showFlash(){
		var flashObjects = document.getElementsByTagName("object");
		for (i = 0; i < flashObjects.length; i++) {
			flashObjects[i].style.visibility = "visible";
		}
	
		var flashEmbeds = document.getElementsByTagName("embed");
		for (i = 0; i < flashEmbeds.length; i++) {
			flashEmbeds[i].style.visibility = "visible";
		}
	}
	
	function hideFlash(){
		var flashObjects = document.getElementsByTagName("object");
		for (i = 0; i < flashObjects.length; i++) {
			flashObjects[i].style.visibility = "hidden";
		}
	
		var flashEmbeds = document.getElementsByTagName("embed");
		for (i = 0; i < flashEmbeds.length; i++) {
			flashEmbeds[i].style.visibility = "hidden";
		}
	}
	
	initialize();
}

Overlay.instance = null;

Overlay.getInstance = function() {
	if (Overlay.instance == null)
		Overlay.instance = new Overlay();
		return Overlay.instance;
	return Overlay.instance;
}

function FixedPanel() {
	var _header;
	var _content;
	var id;
	var overlay;
	
	function initialize() {
		var objBody = document.getElementsByTagName('body').item(0);
		
		id = 'Panel' + new Date().getTime();
		_obj = document.createElement('div');
		_obj.className = 'jsPanel';
		_obj.setAttribute('id', id);
		_obj.style.display = 'none';
		objBody.appendChild(_obj);
		
		_header = document.createElement('div');
		_header.className = 'header';
		_obj.appendChild(_header);
		
		_content = document.createElement('div');
		_content.setAttribute('class','content');
		_content.setAttribute('className','content');		
		_obj.appendChild(_content);

		Event.observe(window, 'scroll', setPosition);		
		overlay = Overlay.getInstance();		
	}
	
	function setPosition() {
		var arrayPageSize = Element.getPageSize();
		var arrayPageScroll = Element.getPageScroll();
		var width = Element.getWidth(id);
		var height = Element.getHeight(id);
		var top = arrayPageScroll[1] + (arrayPageSize[3] - height) / 2;
		var left = arrayPageScroll[0] + (arrayPageSize[2] - width) / 2;
		Element.setTop(id, top);
		Element.setLeft(id, left);
	}
	
	this.setHeader = function(header) {
		_header.innerHTML = header;
	}
	
	this.setContent = function(content) {
		_content.innerHTML = content;
	}
	
	this.setWidth = function(width) {
		Element.setWidth(id, width);
	}
	
	this.show = function() {
		Element.show(id);
		setPosition();
		overlay.show();						
	}
	
	this.hide = function() {
		Element.hide(id);		
		overlay.hide();
	}
	
	initialize();
}