/**
 * AUDI JavaScript library: Layer
 * 
 * @projectDescription	Layer class providing basic layer functionality
 * @namespace			layer
 *
 * @author 				$Author: hhoettecke $
 * @version				$Revision: 9429 $
 * @copyright			NEUE DIGITALE GmbH, Berlin
 * 
 * @jslint: 2008-10-31
 * 
 * @file:				audi_ngw.layer.js
 * $URL: https://svn.pvtool.org/svn/day_audi_ngw/trunk/ngw_base/frontend/js/audi/audi.layer.js $
 */

/* create namespace */
audi_ngw.namespace(audi_ngw,'layer');
/**
 * Set ie6 fixes:
 * - create iframe spanning either the whole body or just below the current element
 *   to prevent selects shining throught
 * @param {HTMLElement} element
 * @param {Object} options
 * @param {Bool} Flag that indicates if this element is above a modal layer
 * @return {this}
 */
audi_ngw.layer.setIE6Fix = function (element,options,isModalAdvice) {
	// debug
//	if ( true == true) {
	// force ie 6 
//	if (jQuery.browser.msie === true && jQuery.browser.version < 6.5 ) {
	if (jQuery.browser.msie === true && parseFloat(jQuery.browser.version) < 6.5 ) {

		var scope = audi_ngw.layer;
		// grab element 
		var $element = jQuery(element);
		var _$elParent = (element == 'body') ? jQuery('body') :  $element.parent();

		// ensure we're using just one iframe 
 		// create new iframe element if necessary 
		if (!scope._elIframe && !isModalAdvice) {
//			 scope._elIframe = jQuery('<div id="audi_layer_iframe" src="" style="background: red;">')
			 scope._elIframe  = jQuery('<iframe id="audi_layer_iframe" src="">')
			.css({
				opacity: 1,
				position: 'absolute',
				zIndex: '8000',
				height: $element.outerHeight() + 'px',
				width: $element.outerWidth() + 'px'
			})
			.appendTo(_$elParent);
			//.hide();
		} 
		
		// create a second iframe if this element should be displayed above a modal layer 
		if (!scope._elIframeModalAdvice && isModalAdvice) {
			// add an iframe to prevent select options from bleeding through
//			scope._elIframeModalAdvice = jQuery('<div id="audi_layer_iframe_modaladvice" src="" style="background: red;">')
			scope._elIframeModalAdvice = jQuery('<iframe id="audi_layer_iframe" src="">')
			.css({
				opacity: 1,
				position: 'absolute',
				zIndex: '8000',
				height: $element.outerHeight() + 'px',
				width: $element.outerWidth() + 'px'
			})
			.appendTo(_$elParent);
			//.hide();
		}
		
		// set and cache elements
		var $_elIframe = scope._elIframe;
		var $_elIframeModalAdvice = scope._elIframeModalAdvice;
		
		// span body
		if (element == 'body') {
			// set resize event listener
			jQuery(window).bind('resize.IFRAMEFIX',audi_ngw.layer.onResizeIframeDimensions);
			$_elIframe
				.css({
					left: 0,
					top: 0,
					height: (jQuery('body').outerHeight()) + 'px',
					width: (jQuery('body').outerWidth()) + 'px'
				});
		}

		// span element => advice tooltip, small layer
		if (element != 'body' ) {
			var _$curIframe = (isModalAdvice === true) ? $_elIframeModalAdvice : $_elIframe;
			_$curIframe
				.css({
					left: options.left || $element.position().left + 'px',
					bottom: options.bottom || 0,
					height: $element.outerHeight() + 'px',
					width: $element.outerWidth() + 'px'
				});
			return;
		}
		
		// clear memory
		$_elIframe = null;
		$_elIframeModalAdvice = null;
	}
	return this;
};


/**
 * Set advice-tooltip <iframe> height to match content height, e.g. xhr-content
 * @param {HTMLElement} element
 */
audi_ngw.layer.setIE6FixResize = function(element){
	if (jQuery.browser.msie === true && parseFloat(jQuery.browser.version) < 6.5) {
		var $element = jQuery(element);
		// get current iframe, decide between advice tooltips above / without modal layers 
		var _$curIframe = (jQuery('#audi_modal_overlay').css('display') != 'none') ? audi_ngw.layer._elIframeModalAdvice : audi_ngw.layer._elIframe;
		_$curIframe.css({
			height: $element.outerHeight() + 'px',
			width: $element.outerWidth() + 'px'
		});
		_$curIframe = null;
	}
};

/**
 * Resizes Iframe on window.resize
 * @return {Void}
 */
audi_ngw.layer.onResizeIframeDimensions = function () {
	audi_ngw.layer._elIframe.css({
		left: 0,
		top: 0,
		height: (jQuery('body').outerHeight()) + 'px',
		width: (jQuery('body').outerWidth()) + 'px'
	});
};

/**
 * Unset ie6 fixes
 * - removes iframe
 * @return {this}
 * 
 */
audi_ngw.layer.unsetIE6Fix = function () {
	// force ie 6 
	if ( jQuery.browser.msie === true && jQuery.browser.version < 6.5) {

		var scope = audi_ngw.layer;
		// remove <iframe> above modal layers
		if (scope._elIframeModalAdvice) {
			scope._elIframeModalAdvice.remove();
			scope._elIframeModalAdvice = null;
		}
		// remove "normal" (body||layer) <iframe> if no modal layer is present 
		if (jQuery('#audi_modal_overlay').css('display') == 'none' && scope._elIframe) {
			scope._elIframe.remove();
			scope._elIframe = null;
			// remove eventlistener
			jQuery(window).unbind('resize.IFRAMEFIX');
		}
	}
	return this;
};

/**
 * Calculates layer positionin relation to supplied element
 * @param {EventElement} $eventElement
 * @return {Object}
 */

audi_ngw.layer.cloneContent= function(sIdToClone,sClass){

	var _$elLayerClone = document.getElementById(sIdToClone).cloneNode(true);
 
	audi_ngw.layer[sClass]._$elLayerClone = jQuery(_$elLayerClone)
					.attr('id',sIdToClone+'_clone')
					.addClass('clone')
					.show()
					.appendTo(jQuery('#'+sIdToClone).parent());
	_$elLayerClone = null;
	return audi_ngw.layer[sClass]._$elLayerClone;
};

/**
 * Calculates layer positionin relation to supplied element
 * @param {EventElement} $eventElement
 * @return {Object}
 */

audi_ngw.layer._calculatePosition = function ($element,sPosition,$eventElement) {
 
	var _top, _right, _bottom, _left;
	switch(sPosition) {
		case 'element':
			// cache scope
			var _scope = audi_ngw.layer.simple;	
		
			// cache wrapper height 
			var $elWrapperHeight = jQuery('#audi_container_main').outerHeight();
			
			// get link position
			var _oLinkPos = $eventElement.position();
		
			// calculate left related to link
			_left = _oLinkPos.left;
			// calculate bottom related to link
			_bottom  = $elWrapperHeight - _oLinkPos.top +$eventElement.height();
			_top = $elWrapperHeight - _oLinkPos.top +$eventElement.height();
		break;

		case 'center':
			_left = Math.floor(((jQuery('#audi_container_page').outerWidth() / 2) - ($element.outerWidth() / 2)));
			_top =Math.floor( (jQuery('#audi_container_page').outerHeight() / 2) - ($element.outerHeight() / 2) );
			_bottom =Math.floor( (jQuery('#audi_container_page').outerHeight() / 2) + ($element.outerHeight()) );
		break;

 

	}
	// add units
	_left += 'px';
	_top  += 'px';
	_bottom  += 'px';

	return {
		iHeight: $element.outerHeight() ,
		iWidth: $element.outerWidth(),
		sLeft:_left ,
		sTop:_top,
		sBottom:_bottom
	};
};

/**
 * Sets content, bridge to _doSetContent
 * @param {EventElement} $eventElement
 * @return {void}
 */
audi_ngw.layer.setContent = function ($eventElement) {
	// get otpions
//	var oLayerOptions = audi_ngw.layer.getOptions($eventElement);
	var _oLayerOptions = audi_ngw.layer.getOptions($eventElement);
	// extract layer class
	var sClass = _oLayerOptions.sType;
	// cache layer
//	var $element = audi.layer[sClass]._$elLayer;
	var $element = audi_ngw.layer[sClass]._$elLayer;
	// set content
	audi_ngw.layer._doSetContent($element,$eventElement, sClass, _oLayerOptions);
};

/**
 * Sets layer content, handles different types, such as "ajax", "text"
 * @param {HTMLElement} $element / Layer
 * @param {EventElement} $eventElement
 * @param {String} sClass Layer class
 * @param {Object} oOptions
 */
audi_ngw.layer._doSetContent = function ($element,$eventElement, sClass, oOptions) {
	// construct scope
	var scope = audi_ngw.layer[sClass];	
	// extract content type
	var sContentType = oOptions.sContentType;
	var sUrl;
	var $elementClone;
	
	switch(sContentType) {
		
		// xhr, use cloning on simple layer
		case 'ajax':
				// load everything inside xhr/div#audi_content into $element's clone, due to resizing
				sUrl = oOptions.sContent; 
				// get clone from supplied layer class
				$elementClone = audi_ngw.layer.cloneContent(audi_ngw.layer[sClass]._options.sIdToClone, sClass); //audi_ngw.layer[sClass]._$elLayerClone;
				// go!
				$element.empty(); // clear content
				$elementClone.empty(); // clear content
				// get ajax content, copy everything below #audi_content_wrapper into clone
				jQuery.ajax({		
					url: sUrl,
					type: 'GET',
					dataType: "html",
					complete: function(data,status,xhr){
 						var _sRes = data.responseText;
						//onSuccess (status != error, necessary id audi_content_wrapper is present, audi_modal_container ain't )
						if (status != 'error' && _sRes.indexOf('audi_content_wrapper') !== -1 && _sRes.indexOf('audi_modal_container') === -1  )  {

							// insert everything below selector 
							// copy of $.load but without replacing all the scripts
							$elementClone.html(
								// Create a dummy div to hold the results
								jQuery("<div/>")
									// inject the contents of the document in, removing the scripts
									// to avoid any 'Permission Denied' errors in IE 
									.append(_sRes.replace(/<script(.|\s)*?\/script>/g,''))
									// Locate the specified elements
									.find(" #" + "audi_content_wrapper > *")
							);
							// evaluate scripts
							audi_ngw.navigation.loadScript(_sRes);

							audi_ngw.iframe.contentRedirects($element);
						}
						// onError
						else {
							audi_ngw.layer.simple.hide();
							return false;
						}
					}	
				});
		break;
		
		// modal layer 
		case 'ajax-layer':

			if (audi_ngw.url.validate(oOptions.sContent) === false ) { return false; }
 
 			// complete layer, skip cloning due to iframe bug on ie6
			if (!oOptions.sSelectorContainer) {
				// load everything inside xhr/div#audi_content into $element's clone, due to resizing
				sUrl = oOptions.sContent;  
				// get clone from supplied layer class
				// go!
				$element.empty().css('width', 'auto'); // clear content

				// get ajax content, copy everything below #audi_content_wrapper into clone
				jQuery.ajax({		
					url: sUrl,
					type: 'GET',
					dataType: "html",
					complete: function(data,status,xhr){
 						var _sRes = data.responseText;
						
						var teaserShopUrl = jQuery('a.audi_shop_teaser_iframe_url').attr('href');
						if( teaserShopUrl ) {
							_sRes = _sRes.replace(/###TEASER_SHOP_IFRAME_URL###/, teaserShopUrl);
						}
						
						
						
						
						//onSuccess (status != error, necessary id audi_content_wrapper is present, audi_modal_container ain't )
						if (status != 'error' && _sRes.indexOf('audi_content_wrapper') !== -1 && _sRes.indexOf('audi_modal_container') === -1  )  {
							// insert everything below selector 
							// copy of $.load but without replacing all the scripts
//							$elementClone.html(

							$element.html(
								// Create a dummy div to hold the results
								jQuery("<div/>")
									// inject the contents of the document in, removing the scripts
									// to avoid any 'Permission Denied' errors in IE 
									.append(_sRes.replace(/<script(.|\s)*?\/script>/g,''))
									// Locate the specified elements
									.find(" #" + "audi_content_wrapper > *")
							);
							


							// evaluate scripts
							audi_ngw.navigation.loadScript(_sRes);

							// set title 
							audi_ngw.navigation.setTitle(_sRes);
							
							 // set event listener for ajaxModalContentPrepared == onComplete callback for ajaxModalContentReady:
							 // ajaxModalContentPrepared will be fired every time an ""ajaxModalContentReady callback has been finished
							 // so we can decide when reconstruction the content is done 
	 						jQuery(document)
								.unbind("ajaxModalContentPrepared")
								.bind("ajaxModalContentPrepared",
									function  ()  {
										// count registered ajaxModalContentReady"-events, 
	 									//audi_ngw.log("------ajaxModalContentPrepared: " +audi_ngw.event.ajaxModalContentReadyCount);
										if (audi_ngw.event.ajaxModalContentReadyCount === 0) {
	//										console.log("--> execute audi_ngw.layer.xhrReallocate",$element, $elementClone, $eventElement, sClass, oOptions)
											// set position / dimensions of $element based on content width ($elementClone)
//											audi_ngw.layer.xhrReallocate($element, $elementClone, $eventElement, sClass, oOptions); 
											audi_ngw.layer.xhrReallocate($element, $element, $eventElement, sClass, oOptions); 
											// reset registered events					
											audi_ngw.event.ajaxModalContentReadyCount = audi_ngw.event.ajaxModalContentReadyCountCopy;
											//audi_ngw.log("RESERT EVENTS TO: "+audi_ngw.event.ajaxModalContentReadyCountCopy +' : '+ audi_ngw.event.ajaxModalContentReadyCount);
											jQuery(document).unbind("ajaxModalContentPrepared");
											return true;
										}
							});
							
							
							
							// fire custom event "ajaxModalContentReady" /TODO: count / fire next event
							jQuery(document).trigger("ajaxModalContentReady",[data]);
							
							/* remember the urls of layers (DANG-1712) */
							// so we can go back the queue when the user closes the layers again (only detailview/sendfriend opened from layers)
							var tmp = window.location.href;
							tmp = tmp.split('#');
							
							// if this is a detailview- or sendfriend-layer we add it to the existing array
							if( 'object' == typeof(audi_ngw.navigation.history) && 1 == jQuery('#audi_modal_header').parents('.detailview_image, .func_sendfriend').size() ) {
								
								// add it only if it's not in the array now
								if( -1 == jQuery.inArray(tmp[1], audi_ngw.navigation.history) ) {
									audi_ngw.navigation.history.push(tmp[1]);
								}								

							} else {
								// this page is not a detailview/sendfriend
								// or it is not called from a modal layer
								// so we create a new array
								audi_ngw.navigation.history = [tmp[1]];
							}

							audi_ngw.iframe.contentRedirects($element);
						}
						// onError
						else {
	
							audi_ngw.layer.modal.hide();
							audi_ngw.layer.simple.hide();
							return false;
						}
					}	
				});
			} 
			// content only
			else {
				// load content into part of current layer, skip reallocation due to complexity
				// possible smooth resize: load content into clone, get dimensions, resize selector
				sUrl = oOptions.sContent;  
				// go!
				$element = jQuery(oOptions.sSelectorContainer);
				$elementClone =  audi_ngw.layer.cloneContent(oOptions.sSelectorContainer.slice(1),sClass);  
				// go!
				$elementClone	// clear content
				.empty();	// perform request
				// go!
				$element.empty(); // clear content
				$elementClone.empty(); // clear content
				//.load(sUrl, null, function(data, status, xhr){
				// get ajax content, copy everything below #audi_content_wrapper into clone
				jQuery.ajax({		
					url: sUrl,
					type: 'GET',
					dataType: "html",
					complete: function(data,status,xhr){
 						var _sRes = data.responseText;
						//onSuccess (status != error, audi_modal_container ain't )
						if (status != 'error' && _sRes.indexOf('audi_modal_container') === -1  )  {
							
							// insert everything below selector
//							$elementClone.html(jQuery(_sRes).find(oOptions.sSelectorContainer+" > *"));
							// insert everything below selector 
							// copy of $.load but without replacing all the scripts
							$elementClone.html(
								// Create a dummy div to hold the results
								jQuery("<div/>")
									// inject the contents of the document in, removing the scripts
									// to avoid any 'Permission Denied' errors in IE
									.append(_sRes.replace(/<script(.|\s)*?\/script>/g,''))
									// Locate the specified elements
									.find(oOptions.sSelectorContainer+" > *")
							);
							// evaluate scripts
							audi_ngw.navigation.loadScript(_sRes);

							
							// set title 
							audi_ngw.navigation.setTitle(_sRes);
							
							 // set event listener for ajaxModalContentPrepared == onComplete callback for ajaxModalContentReady:
							 // ajaxModalContentPrepared will be fired every time an ""ajaxModalContentReady callback has been finished
							 // so we can decide when reconstruction the content is done 
	 						jQuery(document)
								.unbind("ajaxModalContentPrepared")
								.bind("ajaxModalContentPrepared",
									function  ()  {
										// count registered ajaxModalContentReady"-events, 
										audi_ngw.log("------ajaxModalContentPrepared:",audi_ngw.event.ajaxModalContentReadyCount);
										if (audi_ngw.event.ajaxModalContentReadyCount === 0) {
	//										console.log("--> execute audi_ngw.layer.xhrReallocate",$element, $elementClone, $eventElement, sClass, oOptions)
											// set position / dimensions of $element based on content width ($elementClone)
											audi_ngw.layer.xhrReallocate($element, $elementClone, $eventElement, sClass, oOptions); 
											// reset registered events						
											audi_ngw.log("RESERT EVENTS TO: ",audi_ngw.event.ajaxModalContentReadyCountCopy , audi_ngw.event.ajaxModalContentReadyCount);
											audi_ngw.event.ajaxModalContentReadyCount = audi_ngw.event.ajaxModalContentReadyCountCopy;
											jQuery(document).unbind("ajaxModalContentPrepared");
											return true;
										}
									});
							// fire custom event "ajaxModalContentReady" /TODO: count / fire next event
							jQuery(document).trigger("ajaxModalContentReady",[xhr]);
							
						//	audi_ngw.layer.xhrReallocate($element, $elementClone, $eventElement, sClass, oOptions);
						audi_ngw.iframe.contentRedirects($element);
							return true;
						}
						// onError
						else {
							audi_ngw.layer.modal.hide();
							audi_ngw.layer.simple.hide();
							return false;
						}
					}
						
				});
			}
 
		break;


		case 'text':
			$element
				.empty()
				.audi_unsetLoading()
				.text(oOptions.sContent);
			audi_ngw.iframe.contentRedirects($element);
		break;
		
		case 'confirm_dialog':
			_options = oOptions.sContent[0];
			
			$_c = '<div class="col_3 has_audi_generated_rounded_corners">';
			$_c += '<div id="audi_modal_round_head" class="2"><div id="audi_modal_top_right"/><div class="audi_modal_bg_bar"/><div id="audi_modal_top_left"/></div>';
			$_c += '<div id="audi_modal_header">';
			$_c += '<h1 class="sIFR">'+_options.confirmHeadline+'</h1><a id="modal_close" href="#"><span>'+audi_ngw.dictionary.CLOSE+'</span><img alt="'+audi_ngw.dictionary.CLOSE+'" src="'+audi_ngw.docroot+'img/advice/icon_close_modal_layer.gif"/></a>';
			$_c += '</div>';
			$_c += '<div id="audi_modal_body">';
			
			if (_options.confirmSubHeadline)
				$_c += '<h2 class="sIFR">'+_options.confirmSubHeadline+'</h2>';
			
			if (_options.confirmBoldMessage)
				$_c += '<p><strong>'+_options.confirmBoldMessage+'</strong></p>';
			
			$_c += '<p>'+_options.confirmMessage+'</p>';
			
			if (_options.yesButton) {
				$_c += '<button class="dialog_yes_button" value="basic" type="submit"><div class="submit basic"><span>'+_options.yesButton+'</span></div></button>';
			}
			if (_options.noButton) {
				$_c += '<button class="dialog_no_button" value="basic" type="submit"><div class="submit basic"><span>'+_options.noButton+'</span></div></button>';
			}
			
			$_c += '</div>';
			$_c += '<div id="audi_modal_round_bottom"><div id="audi_modal_bottom_right"/><div class="audi_modal_bg_bar"/><div id="audi_modal_bottom_left"/></div>';
			
			$element.empty()
				.audi_unsetLoading()
				.html($_c);
		audi_ngw.question.bindListeners();
		audi_ngw.layer.xhrReallocate($element,$elementClone,$eventElement,sClass,oOptions);
		audi_ngw.flash.replaceLayerHeadlines();
		audi_ngw.flash.initiate('audi_modal_header');
		//jQuery(document).trigger("ajaxModalContentReady",[options.sContent]);
		audi_ngw.iframe.contentRedirects($element);
		break;
		
		
		case 'html':
			_sRes = oOptions.sContent;			
			$element.html(
				jQuery("<div/>")
					.append(_sRes.replace(/<script(.|\s)*?\/script>/g,''))
					.find(" #" + "audi_content_wrapper > *"));

			audi_ngw.navigation.loadScript(_sRes);

			// set title 
			audi_ngw.navigation.setTitle(_sRes);
			jQuery(document)
				.unbind("ajaxModalContentPrepared")
				.bind("ajaxModalContentPrepared",
					function() {
						// count registered ajaxModalContentReady"-events, 
						audi_ngw.log("------ajaxModalContentPrepared:",audi_ngw.event.ajaxModalContentReadyCount);
						if (audi_ngw.event.ajaxModalContentReadyCount === 0) {
//										console.log("--> execute audi_ngw.layer.xhrReallocate",$element, $elementClone, $eventElement, sClass, oOptions)
							// set position / dimensions of $element based on content width ($elementClone)
							audi_ngw.layer.xhrReallocate($element, $elementClone, $eventElement, sClass, oOptions); 
							// reset registered events						
							audi_ngw.log("RESERT EVENTS TO: ",audi_ngw.event.ajaxModalContentReadyCountCopy , audi_ngw.event.ajaxModalContentReadyCount);
							audi_ngw.event.ajaxModalContentReadyCount = audi_ngw.event.ajaxModalContentReadyCountCopy;
							jQuery(document).unbind("ajaxModalContentPrepared");
							return true;
						}
					});
			jQuery(document).trigger("ajaxModalContentReady", oOptions.sXHRObj);
			audi_ngw.iframe.contentRedirects($element);
		break;
		default:
		break;
	}
};

//audi_ngw.layer.prepareContentAfterXHR = function(){
//	audi_ngw.layer.modal.TEST();
//	audi_ngw.layer.simple.TEST();
//	audi_ngw.flash.replaceLayerHeadlines();
//	audi_ngw.navigation.tab._addEvents();
//};

/**
 * Repositions / resizes $element aka layer after xhr-request. Gets dimensions from $elementClone
 * @param {Object} $element
 * @param {Object} $elementClone
 * @param {Object} $eventElement
 * @param {Object} sClass
 * @param {Object} oOptions
 */
audi_ngw.layer.xhrReallocate = function ($element,$elementClone,$eventElement,sClass,oOptions) {
 
	// set up
	var _oPos = {};
	var scope = audi_ngw.layer[sClass];
	// use class or default method to get dimensions 
	if (typeof scope._calculatePosition == 'function') {
		_oPos = scope._calculatePosition($elementClone,oOptions.sPosition,$eventElement);
	} else {
		_oPos = audi_ngw.layer._calculatePosition($elementClone,oOptions.sPosition,$eventElement);
	}
	// use class method for repositioning 
	scope._doXhrReallocation($element,_oPos);
};

/**
 * Get layer options, mixes supplied metadata-data (layerOptions) with default data
 * @param {EventElement} $eventElement
 * @return {Object}
 */
audi_ngw.layer.getOptions = function ($eventElement,sClassName) {
	// get data using metadata plugin
	var _oLayerOptions = $eventElement.metadata() || {};
	if (!_oLayerOptions.layerOptions) {_oLayerOptions.layerOptions = {}; }
	// check for layertype
	if (!_oLayerOptions.sType && !sClassName) { throw new Error("layerOptions: Missing required layer type 'sType'"); }
	// calculate class 
	var _sClass = (sClassName) ? sClassName : _oLayerOptions.layerOptions.sType.split('.')[1];
	// construct options using supplied || default values
	var _oOptions = {
		sBottom: _oLayerOptions.layerOptions.sBottom,
		sPosition : _oLayerOptions.layerOptions.sPosition || audi_ngw.layer[_sClass].oDefaults.sPosition, // _pos.sTop ,
		hasOutsideClick : (_oLayerOptions.layerOptions.hasOutsideClick === 'undefined' || _oLayerOptions.layerOptions.hasOutsideClick === undefined) ? audi_ngw.layer[_sClass].oDefaults.hasOutsideClick : _oLayerOptions.layerOptions.hasOutsideClick ,
		hasHideDelayed : (_oLayerOptions.layerOptions.hasHideDelayed === 'undefined' || _oLayerOptions.layerOptions.hasHideDelayed === undefined ) ? audi_ngw.layer[_sClass].oDefaults.hasHideDelayed : _oLayerOptions.layerOptions.hasHideDelayed ,
		sContentType: _oLayerOptions.layerOptions.sContentType || audi_ngw.layer[_sClass].oDefaults.sContentType,
		sContent: _oLayerOptions.layerOptions.sContent || audi_ngw.layer[_sClass].oDefaults.sContent,
		sWidth: _oLayerOptions.layerOptions.sWidth || null,
		sHeight: _oLayerOptions.layerOptions.sHeight || null,
		sRel : $eventElement.attr('rel') || null,
		sSelectorContainer: _oLayerOptions.layerOptions.sSelectorContainer || null
	};
	if (_oOptions.sContentType === 'ajax') {
		_oOptions.sContent = audi_ngw.url.addAjaxFragment($eventElement.attr('href'));
	}
 
	return _oOptions;
};

/**
 * Binds custom "events"
 * @param {String} sEventType
 * @param {Function} Callback
 */
audi_ngw.layer.bind = function(sEventType, sClass, fn){
	// construct scope
	var scope = audi_ngw.layer[sClass];	
	// get layer HTMLelement
	var $_elLayer = scope._$elLayer;
	// force function
	fn = (typeof fn == 'function') ? fn : function () {};
	
	// set event 
	switch (sEventType) {
		
		// hide element on click outside element
		case 'outsideClick':
			jQuery(document).bind('click.simple',fn,scope._doOutsideClick);
		break;

		// hide element after defined ms
		case 'hideDelayed':
			scope._oTimers.hideDelayed = window.setTimeout(
				function () {
					if (audi_ngw.dom.getUnique(scope._options.sIdLayer) === true ) {
						$_elLayer.fadeOut(scope.oDefaults.iFadeOutMS, scope.hide);
					}
				},
				scope.oDefaults.iHideDelayedMs);
		break;
		
	}
	
	fn = null;
};


