var overlayStack = new Array();

var Overlay = Class.create({
    element: null,
    overlayContainer: null,
    overlay: null,
    overlayBg: null,
    config: null,
    
	initialize : function(id, config) {
		this.element = $(id);
		this.overlayContainer = $('overlayContainer');
		this.overlay = $('overlay');
		this.overlayBg = $('overlayBg');

    	if (config != null) {
    		this.config = config;
    	} else {
	    	try {
	    		this.config = this.element.getConfiguration('Overlay');
	    	} catch(e) {
	    		this.config = {};
	    	}
    	}
		
		this.initButtons();
	},
	
	initButtons : function() {
		if (this.element && this.overlayContainer && this.overlay) {
			var id = this.element.id;
	    	var openHandlers = $$('.' + id + 'OpenHandler');
	    	var closeHandlers = $$('.' + id + 'CloseHandler');
	    	
	    	openHandlers.each(function(el, i) {
	    		el.overlayHandler = this;
	    		el.onclick = this.showButtonClick;
	    	}.bind(this));
	    	
	    	closeHandlers.each(function(el, i) {
	    		el.onclick = this.hide.bind(this);
	    	}.bind(this));
	    	
			if (navigator.userAgent.indexOf('IE 6') != -1) {
				this.isIE6 = true;
				Event.observe(window, 'scroll', this.scaleBgIE6.bind(this));
			}
		}
	},

	showButtonClick : function() {
		var that = this.overlayHandler;
		that.show();
		var hooks = this.overlayHandlerHooks;
		if (hooks) {
			hooks.each(function(hook) {
				hook.hookFunction(this, hook.hookOptions);
			}.bind(this));
		}
		return false;
	},

	show : function() {
		if (overlayStack.length > 0) {
			var currentOverlay = overlayStack[overlayStack.length - 1];
			currentOverlay.hideTemporary();
		} else {
			this.overlayContainer.style.display = 'block';
			if (this.isIE6) {
				this.hideSelectFields();
			}
		}
		overlayStack.push(this);
		this.element.style.display = 'block';

		this.adjustSize();
		
		this.overlay.fire('overlay:shown');
	},
	
	adjustSize: function() {
		var y = window.scrollY ? window.scrollY : document.documentElement.scrollTop+document.body.scrollTop;
		var addY = 0;
		var useY = true;
		if (this.config) {
			if (this.config.centerVertical) {
				addY = (document.viewport.getHeight() / 2) - (this.element.getHeight() / 2);
			} else if (this.config.centerOnElement) {
				var el = this.config.centerOnElement;
				useY = false;
				
				var cumulativeOffset = el.cumulativeOffset();
				var dimensions = el.getDimensions();
				var myDimensions = this.element.getDimensions();
				
				var x = cumulativeOffset.left;
				y = cumulativeOffset.top;
				
				var addX = (dimensions.width / 2) - (myDimensions.width / 2);
				addY = (dimensions.height / 2) - (myDimensions.height / 2);
				
				this.element.setStyle({
					position: 'absolute',
					top: (y + addY) + 'px',
					left: (x + addX) + 'px'
				});
			} else if (this.config.marginTop) {
				addY = this.config.marginTop;
			}
		}
		if (useY) {
			this.element.style.marginTop = (y + addY) + 'px';
		}
	},
	
	update : function( html ) {
		this.element.update( html );
		this.adjustSize();
		this.initButtons();
	},
	
	showTemporaryHiddenOverlay : function() {
		this.element.show();
	},

	hideTemporary : function() {
		this.element.hide();
	},

	hide : function() {
		overlayStack.pop();
		this.element.hide();
		if (overlayStack.length > 0) {
			var currentOverlay = overlayStack[overlayStack.length - 1];
			currentOverlay.showTemporaryHiddenOverlay();
		} else {
			this.overlayContainer.hide();
			if (this.isIE6) {
				this.showSelectFields();
			}
		}
		
		this.overlay.fire('overlay:hidden');
		
		return false;		
	},
	
	scaleBgIE6 : function() {
		var height = document.documentElement.scrollTop + document.body.offsetHeight;
		this.overlayBg.style.height = height + 'px';
	},
  
	hideSelectFields : function() {
		$('main').getElementsBySelector('select').each(function(el,i){
			el.style.visibility = 'hidden';
		}); 
	},
  
	showSelectFields : function() {
		$('main').getElementsBySelector('select').each(function(el,i){
			el.style.visibility='visible';
		}); 
	},
	
	registerOverlayHook : function(element, hook, options) {
		if (element && element.overlayHandler && element.overlayHandler == this) {
			var overlayHandlerHooks = element.overlayHandlerHooks;
			if (!overlayHandlerHooks) {
				overlayHandlerHooks = new Array();
				element.overlayHandlerHooks = overlayHandlerHooks;
			}
			overlayHandlerHooks.push({hookFunction: hook, hookOptions: options});
		}
	}
  
});

Overlay.hideAll = function() {
	if (overlayStack.length > 0) {
		while (overlayStack.length > 0) {
			var currentOverlay = overlayStack[overlayStack.length - 1];
			currentOverlay.hide();
		}
	}
}

// Area for Feedback-Overlay
function showFeedbackLayer(url){
	var ajaxRequest = new Ajax.Request(url, {
		method: 'get',  
		evalScripts: true, 
		asynchronous: true,
		onComplete: successFuncFB,
		onFailure: failureFuncFB
	}); 

}

function successFuncFB(response){
        
	try{
		var ovQv = new Overlay('quickview');        
		ovQv.hide();
	}catch(e){
	}

	var container = $('feedback');
	var content = response.responseText;
	container.update(content);
	var fbOverlay = new Overlay('feedback');
	fbOverlay.initialize('feedback');
	fbOverlay.show();
    
}

function failureFuncFB(){
}


function sendFeedbackMessage(url, message, captcha){

    var url = url + '?message=' +  encodeURIComponent(message) + '&captcha=' +  encodeURIComponent(captcha);
	var ajaxRequest = new Ajax.Request(url, {
		method: 'get',  
		evalScripts: true, 
		asynchronous: true,
		onComplete: successSendingFeedbackMessage,
		onFailure: failureFuncFB
	}); 
}

function successSendingFeedbackMessage(response){


	var container = $('feedback');
	var content = response.responseText;
	container.update(content);
    var fbOverlay = new Overlay('feedback');
    fbOverlay.initialize('feedback')
}

