/**
 * AUDI JavaScript library: static layer control. Manages "static layers" such as "newsletter", "audi code" or "wallpapers" (e.g. audibar, gallery, toolbox)
 * 
 * @projectDescription	
 * @namespace			
 *
 * @author 				$Author: jbambauer $
 * @version				$Revision: 179 $
 * @copyright			NEUE DIGITALE GmbH, Berlin
 * 
 * @jslint: 2008-01-31
 * 
 * @file:				audi_ngw.layer.static.js
 * $URL: https://svn.pvtool.org/svn/day_audi_ngw/trunk/ngw_base/frontend/js/audi/audi_ngw.layer.static.js $
 */

/* create namespace */
audi_ngw.namespace(audi_ngw,'layer.statics');

audi_ngw.layer.statics.lastEventShow = null;

/**
 * Add Events
 */
audi_ngw.layer.statics._addEvents = function(sIdContainer){

	var	_oOptions = audi_ngw.layer.statics.getOptions(sIdContainer);
	// Apply click events to containers children
	jQuery(_oOptions.sIdContainer + " > a[rel!='wallpaper']").unbind('click.staticsLayer').bind('click.staticsLayer',{oOptions:_oOptions},audi_ngw.layer.statics.show);
	
	jQuery(_oOptions.sIdContainer + " "+_oOptions.sClassClose).unbind('click.staticsLayer').bind('click.staticsLayer',{oOptions:_oOptions},audi_ngw.layer.statics.hide);
};

audi_ngw.layer.statics.absolutize = function($element){
//console.log($element.parents('#audi_navigation_footer').size())
	if(jQuery.browser.mozilla && (jQuery.browser.version.split(".")[0]+"."+jQuery.browser.version.split(".")[1]) < 1.9 ){
		if ($element.css('position') !== 'relative') {
			$element.audi_absolutize();
		}
	}
};

audi_ngw.layer.statics.deAbsolutize = function($element){
	if(jQuery.browser.mozilla && (jQuery.browser.version.split(".")[0]+"."+jQuery.browser.version.split(".")[1]) < 1.9 ){
		if ($element.css('position') !== 'relative') {
			$element.audi_deAbsolutize();
		}
	}
};


audi_ngw.layer.statics.show = function(event){
	event.preventDefault();
	audi_ngw.layer.statics.lastEventShow = event;
	var _oOptions = audi_ngw.layer.statics._oOptions = event.data.oOptions || null;
	audi_ngw.layer.statics.event = event;
	var $element = jQuery(event.target) || jQuery(event);
		if ($element.hasClass('open') || $element.parent('.open').size()) {return;}
		if ( !audi_ngw.layer.statics._bRunningAnimation ){
		if(!jQuery($element).parent().hasClass("active_overlay") && !jQuery($element).parent().parent().hasClass("active_overlay")) {
			// event => click
			if (_oOptions) {
				audi_ngw.layer.statics._doShow(jQuery(_oOptions.sIdContainer + " " + _oOptions.sClassElement));
			} 
			// element => hide
			else {
				audi_ngw.layer.statics._doShow($element);
			}
		}
	}
	return false;
};

audi_ngw.layer.statics._doShow = function($element) {
	$element = $element;
	// reset errors
	audi_ngw.form.validation.resetErrors($element);

	var event = audi_ngw.layer.statics.lastEventShow;
	var _oOptions = audi_ngw.layer.statics._oOptions || null;
	// no open element 
	if( audi_ngw.layer.statics.getOpenElement() === false ) {
		// absolutize to prevent flicker due to footer
		if ( $element.parents('#audi_navigation_footer').size()) { audi_ngw.layer.statics.absolutize(jQuery('#audi_container_footer')); }
 
		if (_oOptions.sIdContainer === "#func_toolbox_wallpaper" && jQuery.browser.msie === true && parseInt(jQuery.browser.version) < 8) {
			var _iPositionLeft = 0;
			
//			var _iContentOffsetLeft = (jQuery("#audi_content").offset() ) ? jQuery("#audi_content").offset().left  : 0;
//			var _iLeft = (jQuery(event.target).position().left) ? jQuery(event.target).position().left  : (jQuery(event.target).offset().left - _iContentOffsetLeft) + _iPositionLeft ;
			var _iLeft = (jQuery('#func_toolbox_wallpaper').position().left) + (jQuery.browser.version > 6.5 ? 16 : 0 );
			$element.css('left', parseInt(_iLeft, 10) + 'px');

		}
		
		audi_ngw.layer.statics.setOpenElement($element);
		$element.parent().addClass("active_overlay");
		audi_ngw.layer.statics._bRunningAnimation = true;
		$element.removeClass('closed');
		audi_ngw.animation.slideDown($element, { 
			fnCb: function(){
				if ( $element.parents('#audi_navigation_footer').size()) { 
					audi_ngw.layer.statics.deAbsolutize(jQuery('#audi_container_footer')); 
				}
				audi_ngw.layer.statics._bRunningAnimation = false;
				audi_ngw.animation.forceRepaint();
				// focus first input element except input-buttons
				if (!jQuery.browser.opera) {
					$element.find(':input').not('[type="image"], [type="submit"]').eq(0).focus();
				}
			}
		});
	} else {
		audi_ngw.layer.statics.hide(jQuery(audi_ngw.layer.statics.getOpenElement()),{
			fnCb : function() {
				audi_ngw.layer.statics._doShow($element);
			}
		});
	}
};

audi_ngw.layer.statics.hide = function(event,oParam){
	if (event.preventDefault) {
		event.preventDefault();
	}
	var $element = audi_ngw.layer.statics.getOpenElement();
	audi_ngw.layer.statics._doHide($element,oParam);
	return false;
};

audi_ngw.layer.statics._doHide = function($element,oParam) {
		if ( $element.parents('#audi_navigation_footer').size()) { audi_ngw.layer.statics.absolutize(jQuery('#audi_container_footer')); }
	audi_ngw.layer.statics._bRunningAnimation = true;
	audi_ngw.animation.slideUp($element,{
		fnCb : function() {
			$element.addClass('closed');
			$element.parent().removeClass("active_overlay");
			if ( $element.parents('#audi_navigation_footer').size()) { audi_ngw.layer.statics.deAbsolutize(jQuery('#audi_container_footer')); }
			audi_ngw.layer.statics.setOpenElement(false);
			audi_ngw.layer.statics._bRunningAnimation = false;
			if (oParam && typeof oParam.fnCb == 'function') { oParam.fnCb(); }
		}
	});
	
};


/**
 * Get registered Accordion options by id 
 * @param {Object} sId
 * @return {Object || Boolean}
 */
audi_ngw.layer.statics.getOptions = function (sId) {
	return audi_ngw.layer.statics._oRegisteredItems[sId] || false;
};
audi_ngw.layer.statics.getOpenElement = function () {
	return audi_ngw.layer.statics._sOpenElement || false;
};
audi_ngw.layer.statics.setOpenElement = function (sId) {
	audi_ngw.layer.statics._sOpenElement = sId;
};


/**
 * Custom Event: wil be fired as soon as we filled the ajax-content into the modal layer, just before "xhrReallocate"
 * @param {Object} event
 * @param {Object} xhr
 */
audi_ngw.layer.statics.onAjaxModalContentReady = function(event,xhr){
	// check if this xhr-response contains valid content
	if (!audi_ngw.url.hasXHRContent(xhr,event.timeStamp)) {return false;}
	//audi_ngw.log("-> "+audi_ngw.event.ajaxModalContentReadyCount+" EVENT - ajaxModalContentReady:audi_ngw.audi_ngw.layer.statics.onAjaxModalContentReady",arguments);
	// execute funtions on new content
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#func_toolbox_wallpaper',
			sClassElement:			'.overlay',
			sClassClose:			'.close'
			
		}
	);

	// trigger event 
	audi_ngw.event.trigger('ajaxModalContentPrepared');
};


/**
 *Initialize animation "audibar"
 * @method initialize
 * @constructor
 * @param {Object} Options 
 * @return {Void}
 */
audi_ngw.layer.statics.initialize = function(options){
	
	this.__className =  'audi_ngw.layer.statics';
	this.__classVersion= '1.2';
	
	this._oRegisteredItems = {};
 	
	this._sOpenElement = "";
	this._bRunningAnimation = false;

	 
	// register ajaxModalContentReady event
	audi_ngw.event.bind('ajaxModalContentReady.layerStatics',audi_ngw.layer.statics.onAjaxModalContentReady);


};
/**
 * 		{	
			sIdContainer:			'#audi_navigation_footer_newsletter', // wrapper to be animated
			sClassElement:			'.audi_navigation_footer_overlay', // overlay to show before animation 
			sClassClose:			'.close' // child of sIdContainer to add hide()
		}
 * @param {Object} options
 */
audi_ngw.layer.statics.register = function(options) {

	// cache 
	this._oRegisteredItems[options.sIdContainer] = options;	
	 

	// add events, pass id as param
	this._addEvents(options.sIdContainer);
	
};


// initialize
audi_ngw.layer.statics.prepare = function() {
	audi_ngw.layer.statics.initialize();
	
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#audi_navigation_footer_newsletter',
			sClassElement:			'.audi_navigation_footer_overlay',
			sClassClose:			'.close'
		}
	);
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#audi_navigation_footer_audicode',
			sClassElement:			'.audi_navigation_footer_overlay',
			sClassClose:			'.close'
		}
	);
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#audi_navigation_footer_dealer_offices',
			sClassElement:			'.audi_navigation_footer_overlay',
			sClassClose:			'.close'
		}
	);
	audi_ngw.layer.statics.register(
			{	
				sIdContainer:			'#dealer_offices_more',
				sClassElement:			'.dealer_offices_overlay',
				sClassClose:			'.close'
			}
	);
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#func_toolbox_wallpaper',
			sClassElement:			'.overlay',
			sClassClose:			'.close'
			
		}
	);
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#audi_navigation_footer_language',
			sClassElement:			'.audi_navigation_footer_overlay',
			sClassClose:			'.close'
			
		}
	);
	audi_ngw.layer.statics.register(
		{	
			sIdContainer:			'#audi_navigation_footer_vtp',
			sClassElement:			'.audi_navigation_footer_overlay',
			sClassClose:			'.close'
			
		}
	);
 
};
 

	
