/* LAYER JAVASCRIPT */

var layer = {
	initialize:function(id)
	{
		if($('layer')) {
			layer.close();
		}
		$(id).appendChild(Builder.node('div',{id:'layer'}, [
					Builder.node('a',{className:'layer close', id:'closeLink', href: 'javascript:void(0);' },'schließen'),
					Builder.node('div', {id:'layerContent'}, 'lade ...')
				])
		);
		
		$$('.layer.close').invoke('observe', 'click', layer.close);
		
	},
	close:function()
	{
	
		$('layer').remove();
	
	}
};

var fireClose = function()
	{
		if($('dbnOverlay')) {
			$('dbnOverlay').remove();
		}
		$('dbnLayer').remove();
			
		// ALLE SELECTS SIND WIEDER DA
		$$('select').each(function(selects){ selects.style.visibility = "visible"; });
	};


var Layer = Class.create();
Object.extend(Layer.prototype, {

	options: {
	
		objBody: 		null,
		width: 			308,
		topOffset:		100,
		leftOffset: 	null,
		centerOffset:	true,
		overlay:		true,
		button:			true,
		select:			true,
		method:			'get',
		postBody:		''
	},
	initialize:function(target, options)
	{
		this.options = Object.extend(this.options, options);
		this.target = target;
		
		if($('dbnLayer')){ this.close(); }
		this.open();
	},
	open:function(event)
	{	
		if(this.options.select === true) {
			$$('select').each(function(selects){ selects.style.visibility = "hidden"; });
		}
		
		var objBody;
		if (!this.options.objBody) {
			objBody = $$('body')[0];
		} else {
			objBody = this.options.objBody;
		}
		var arrayWindowSize = this.getWindowSize();

		if(this.options.overlay === true) {
			objBody.appendChild(Builder.node('div',{id:'dbnOverlay'}));
			this.overlay = $('dbnOverlay');
			this.overlay.setStyle({ width: arrayWindowSize[0] + 'px', height: arrayWindowSize[1] + 'px' });
			new Effect.ScrollTo(this.overlay, {offset: 0, duration: 0});
		}
			
		objBody.appendChild(
			Builder.node('div',{id:'dbnLayer'}, [
				Builder.node('a',{className:'layer close', id:'closeButton', href: 'javascript:void(0);' },'schließen'),
				Builder.node('div', {id:'dbnLayerContent'}, 'lade ...')
			])
		);
				
		this.layer = $('dbnLayer');
		if(this.options.overlay === true) {
			Element.addClassName(this.layer, 'dbnLayer');
		}

		this.layer.style.width = this.options.width + "px";
		this.layer.style.top = this.options.topOffset + "px";
		
		if(this.options.centerOffset === true) {
			this.layer.style.left = "50%";
		}
		
		if(this.options.leftOffset) { 
			this.layer.style.marginLeft = this.options.leftOffset + "px"; 
		} else { 
			this.layer.style.marginLeft = "-" + (this.options.width / 2) + "px"; 
		}
		
		new Ajax.Updater('dbnLayerContent', this.target, {
			asynchronous: true, 
			evalScripts: true, 
			method: this.options.method,
			postBody: this.options.postBody,
			onComplete:function(){
				if(this.options.overlay === true) {
					if((this.options.topOffset + this.layer.offsetHeight) > this.overlay.offsetHeight) {
						var arrayWindowSize = this.getWindowSize();
						this.overlay.setStyle({ width: arrayWindowSize[0] + 'px', height: arrayWindowSize[1] + 20 + 'px' });
					}
				}
			}.bind(this)
		});			
		
		if(this.options.button === false) {
			$('closeButton').remove();
		} else {
			$$('.layer.close').invoke('observe', 'click', this.close);
		}
		
	},
	close:function(event)
	{
		fireClose();
	},
	getWindowSize: 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){ // 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;
		}	
		
		// 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];
	}
});

var searchLayerLinks = {
	initialize:function()
	{
		$$('.layer.open').invoke('observe', 'click', searchLayerLinks.getData);
	},
	getData:function(event)
	{
		
		var element = Event.element(event);
		while(!Element.hasClassName(element, 'layer')){
			element = element.parentNode;
		}
		
		Event.stop(event);
		var target = element.href;
		element.href = "#";
		var dimensions = element.rel.split("|");
		var widthLayer = parseInt(dimensions[0]);
		var topLayer = parseInt(dimensions[1]);
		var leftLayer = parseInt(dimensions[2]);

		var link = new Layer(target, {
			width: 		widthLayer,
			topOffset:	topLayer,
			leftOffset:	leftLayer,
			overlay:	true,
			objBody:	$$('body')[0],
			centerOffset: true,
			select: true
		});
		
		element.href = target;
		
		return false;
		
	}
}

Event.observe(window, 'load', searchLayerLinks.initialize);
