/* * *
	BIND AS EVENT LISTENER
* * */
Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

/* * *
	EXTEND ELEMENT 
* * */
Object.extend(Element, {
	getHeight: function(element) {
    element = $(element);
    return element.offsetHeight;
  },
	setWidth: function(element, w){
    	$(element).style.width = w +"px";
	},
	setHeight: function(element, h){
    	$(element).style.height = h +"px";
	},
	setTop: function(element, t){
    	$(element).style.top = t +"px";
	},
	setLeft: function(element, l){
    	$(element).style.left = l +"px";
	},
	showBlock: function(element){
    	$(element).style.display = 'block';
	}
});


/* * *
	GET PAGE SCROLL
* * */
function getPageScroll(){
	var xScroll, yScroll;
	if(self.pageYOffset){
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	}else if(document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	}else if(document.body){// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}
	return [xScroll, yScroll];
}


/* * *
	GET PAGE SIZE
* * */
function getPageSize(){
	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){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	}else{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		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){ // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	}else if(document.body){ // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	var pageWidth, pageHeight;
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight)
		pageHeight = windowHeight;
	else
		pageHeight = yScroll;

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth)
		pageWidth = xScroll;		
	else
		pageWidth = windowWidth;

	return [pageWidth, pageHeight, windowWidth, windowHeight];
}


/* * *
	CONTENT LOADED
* * */
function ContentLoaded (w, fn) {
	var d = w.document,
		u = w.navigator.userAgent.toLowerCase();

	function init(e) {
		if (!arguments.callee.done) {
			arguments.callee.done = true;
			fn(e);
		}
	}

	// konqueror/safari
	if (/khtml|webkit/.test(u)) {

		(function () {
			if (/complete|loaded/.test(d.readyState)) {
				init('poll');
			} else {
				setTimeout(arguments.callee, 10);
			}
		})();

	// internet explorer all versions
	} else if (/msie/.test(u) && !w.opera) {

		(function () {
			try {
				d.documentElement.doScroll('left');
			} catch (e) {
				setTimeout(arguments.callee, 10);
				return;
			}
			init('poll');
		})();
		d.attachEvent('onreadystatechange',
			function (e) {
				if (d.readyState == 'complete') {
					d.detachEvent('on'+e.type, arguments.callee);
					init(e.type);
				}
			}
		);

	// browsers having native DOMContentLoaded
	} else if (d.addEventListener &&
		(/gecko/.test(u) && parseFloat(u.split('rv:')[1]) >= 1.8) ||
		(/opera/.test(u) && parseFloat(u.split('opera ')[1]) > 9)) {

		d.addEventListener('DOMContentLoaded',
			function (e) {
				this.removeEventListener(e.type, arguments.callee, false);
				init(e.type);
			}, false
		);

	// fallback to last resort
	} else {

		// from Simon Willison
		var oldonload = w.onload;
		w.onload = function (e) {
			if (typeof oldonload == 'function') {
				oldonload(e || w.event);
			}
			init((e || w.event).type);
		};

	}
}


/* * *
	BANNER
* * */
var banner = new Object();
Object.extend(banner, {
	/* ACTIVE */
	activate: function(){
		Event.observe('overlay', 'click', this.deactivate.bindAsEventListener(this), false);
		Event.observe('lightbox', 'click', this.checkDeactivate.bindAsEventListener(this), false);

		Element.showBlock('lightbox');
		
		var arrayPageSize = getPageSize();
		Element.setWidth('overlay', arrayPageSize[0]);
		Element.setHeight('overlay', arrayPageSize[1]);
		
		var arrayPageScroll = getPageScroll();
		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] - Element.getHeight('lightbox_banner'))/2;
		var lightboxLeft = arrayPageScroll[0];
		Element.setTop('lightbox', lightboxTop);
		Element.setLeft('lightbox', lightboxLeft);		
		
		Element.showBlock('overlay');
	},
	
	/* CHECK DEACTIVE */
	checkDeactivate: function(e){
		var id = Event.element(e).id
		if(id == 'lightbox')
			this.deactivate(e);
	},
	
	/* DEACTIVE */
	deactivate: function(event){
		if(event)
			Event.stop(event);
		Element.hide('overlay');
		Element.hide('lightbox');
	}
});

ContentLoaded(window, banner.activate.bind(banner));
