/**
 * AUDI JavaScript library: simple accordion
 * 
 * @projectDescription	
 * @namespace			
 *
 * @author 				$Author: apegam $
 * @version				$Revision: 12015 $
 * @copyright			NEUE DIGITALE GmbH, Berlin
 * 
 * @jslint: 2008-10-31
 * 
 * @file:				audi_ngw.animation.slideDistributor.js
 * $URL: https://svn.pvtool.org/svn/day_audi_ngw/tags/ngw_base/ngw_base-1.28.1/ngw_base/src/main/webapp/docroot/ngw_base/js/audi/audi.animation.simpleAccordion.js $
 */
/* create namespace */
audi_ngw.namespace(audi_ngw,'animation.simpleAccordion');


/**
 * Add Events
 */
// add events 
audi_ngw.animation.simpleAccordion._addEvents = function(sIdContainer){
	var	_options = audi_ngw.animation.simpleAccordion.getOptions(sIdContainer);

	// Apply click events to #containers and .containers children
	var $object = jQuery("#"+_options.sIdContainer+" > "+_options.sListType+ ", ."+_options.sIdContainer+" > "+_options.sListType).children(_options.sAnchorElType);

	if( '' !== _options.sClassExceptedElements ) {
		$object = $object.not("."+_options.sClassExceptedElements);
	}
	
	$object.unbind('click.simpleAccordion').bind('click.simpleAccordion', function(){
		audi_ngw.animation.simpleAccordion.toggle(this, _options.sIdContainer);
		return false;
	});
	
	$object.siblings('.open').addClass('clearfix');
	
	// Apply event to show all switch
	if (_options.sIdToggleAll) {
		jQuery("." + _options.sIdToggleAll).click(function(){
 
			if (jQuery(this).attr("checked")) {
				audi_ngw.animation.simpleAccordion.openAllElements(_options.sIdContainer);
			}
			if (!jQuery(this).attr("checked")) {
				audi_ngw.animation.simpleAccordion.closeAllElements(_options.sIdContainer);
			}
		});
	}
};

/**
 * 
 * @param {Object} event
 * @param {Object} sId Accordion id
 */
audi_ngw.animation.simpleAccordion.toggle = function (element, sId) {
	audi_ngw.animation.simpleAccordion._doToggle(element, sId);
};

/**
 * Get registered Accordion options by id 
 * @param {Object} sId
 * @return {Object || Boolean}
 */
audi_ngw.animation.simpleAccordion.getOptions = function (sId) {
	return audi_ngw.animation.simpleAccordion._oRegisteredSimpleAccordions[sId] || false;
};

audi_ngw.animation.simpleAccordion._doToggle = function (element, sId) {
	var _options = audi_ngw.animation.simpleAccordion.getOptions(sId);
	if( jQuery(element).hasClass("open") ) {
		// just close this element and nothing else
		audi_ngw.animation.simpleAccordion.closeElement(element);	
	} else if (_options.fCloseAll) {
		// close all open elements if fCloseAll is enabled
		audi_ngw.animation.simpleAccordion.closeAllElements(_options.sIdContainer);
		
		// , and open clicked element
		audi_ngw.animation.simpleAccordion.openElement(element);
	} else {
		// dont close anything, just open clicked element
		audi_ngw.animation.simpleAccordion.openElement(element);
	}
	
};
audi_ngw.animation.simpleAccordion.closeElement = function(element) {
	audi_ngw.animation.slideUp(jQuery(element).next(), {fnCb: function() {
		_iframe = jQuery(element).parents('.template-iframe-modal');
		if (_iframe.length) {
			window.parent.audi_ngw.iframe.onUpdate();
		}
	}});
};
audi_ngw.animation.simpleAccordion.openElement = function(element) {
	jQuery(element).next().addClass('clearfix');
	audi_ngw.animation.slideDown(jQuery(element).next(), {fnCb: function() {
		_iframe = jQuery(element).parents('.template-iframe-modal');
		if (_iframe.length) {
			window.parent.audi_ngw.iframe.onUpdate();
		}
	}});
};
audi_ngw.animation.simpleAccordion.openAllElements = function(sId) {
	var _options = audi_ngw.animation.simpleAccordion.getOptions(sId);
	var $object = jQuery("#"+_options.sIdContainer+" > "+_options.sListType+", ."+_options.sIdContainer+" > "+_options.sListType).children(_options.sAnchorElType);
	if( '' !== _options.sClassExceptedElements ) {
		$object = $object.not("."+_options.sClassExceptedElements);
	}
	$object.each(function() {
		audi_ngw.animation.simpleAccordion.openElement(jQuery(this));
	});
};
audi_ngw.animation.simpleAccordion.closeAllElements = function(sId) {
	var _options = audi_ngw.animation.simpleAccordion.getOptions(sId);
	var $object = jQuery("#"+_options.sIdContainer+" > "+_options.sListType+", ."+_options.sIdContainer+" > "+_options.sListType).children(_options.sAnchorElType);
	if( '' !== _options.sClassExceptedElements ) {
		$object = $object.not("."+_options.sClassExceptedElements);
	}
	$object.each(function() {
		audi_ngw.animation.simpleAccordion.closeElement(jQuery(this));
	});
};
/**
 *Initialize animation "simpleAccordion"
 * @method initialize
 * @constructor
 * @param {Object} Options 
 * @return {Void}
 */
audi_ngw.animation.simpleAccordion.initialize = function($scope){

	
	this.__className =  'audi_ngw.animation.simpleAccordion';
	this.__classVersion= '1.2';
	
	this._oRegisteredSimpleAccordions = {};
 
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'audi_foldout_faq',
			sIdToggleAll:			'',
			sClassExceptedElements:	'',
			sListType:				'dl',
			sAnchorElType: 			'dt',
			sContentElType: 		'dd',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);
	// register foldout generally for flex_foldout_2col
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'audi_foldout', // id or classname
			sIdToggleAll:			'audi_foldout_toggleall',
			sClassExceptedElements: 'singleLn',
			sListType:				'dl',
			sAnchorElType: 			'dt',
			sContentElType: 		'dd',
			sClassOpen:				'open',
			fCloseAll:				false
		}
	);
	// register foldout generally for func_downloadcenter
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'audi_func_downloadcenter_pulldown',
			sIdToggleAll:			'',
			sClassExceptedElements: '',
			sListType:				'dl',
			sAnchorElType: 			'dt',
			sContentElType: 		'dd',
			sClassOpen:				'open',
			fCloseAll:				false
		}
	);
	// register foldout for con_gallery
	
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'con_gallery_foldout',
			sIdToggleAll:			'',
			sClassExceptedElements: '',
			sListType:				'li',
			sAnchorElType: 			'a',
			sContentElType: 		'div',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);
	
	// register foldout on myaudi card data 
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'myaudi_foldout',
			sIdToggleAll:			'',
			sClassExceptedElements:	'',
			sListType:				'dl',
			sAnchorElType: 			'dt',
			sContentElType: 		'dd',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'myaudi_foldout2', // id or classname
			sIdToggleAll:			'myaudi_foldout_toggleall',
			sClassExceptedElements: 'singleLn',
			sListType:				'dl',
			sAnchorElType: 			'dt',
			sContentElType: 		'dd',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);
	audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'con_ablage_foldout',
			sIdToggleAll:			'',
			sClassExceptedElements: '',
			sListType:				'li',
			sAnchorElType: 			'a',
			sContentElType: 		'div',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);
	/*audi_ngw.animation.simpleAccordion.register(
		{
			sIdContainer: 			'forum_list',
			sIdToggleAll:			'',
			sClassExceptedElements: '',
			sListType:				'li',
			sAnchorElType: 			'a',
			sContentElType: 		'table',
			sClassOpen:				'open',
			fCloseAll:				true
		}
	);*/
 // accordion gruppe => id des containers
 // wer ist accordion element
 
};


/**
 * 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.animation.simpleAccordion.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.animation.simpleAccordion.onAjaxModalContentReady",arguments);	
	var $scope = jQuery('#'+audi_ngw.url.getContentId());
	
	// execute funtions on new content
	audi_ngw.animation.simpleAccordion.initialize($scope);
	
	// trigger event 
	audi_ngw.event.trigger('ajaxModalContentPrepared');
 };

/**
 * Custom Event: wil be fired as soon as we injected the xhr-snippet 
 * @param {Object} event
 * @param {Object} data {sId: new HTML parent Id}
 */
audi_ngw.animation.simpleAccordion.onAjaxSnippetReady = function(event,data){

	var $scope = jQuery(data.sId);
	
	//audi_ngw.log("EVENT - ajaxSnippetPrepared: audi_ngw.animation.simpleAccordion.onAjaxSnippetReady",arguments);

	audi_ngw.animation.simpleAccordion.initialize($scope);
	
	// trigger event 
	audi_ngw.event.trigger('ajaxSnippetPrepared');
};
 
audi_ngw.animation.simpleAccordion.register = function(options) {

	// cache 
	this._oRegisteredSimpleAccordions[options.sIdContainer] = options;	
	 
	// add events, pass id as param
	this._addEvents(options.sIdContainer);
	
};


audi_ngw.animation.simpleAccordion.prepare = function() {
	
	// register ajaxModalContentReady event
	audi_ngw.event.bind('ajaxModalContentReady.animationSimpleAccordion.',audi_ngw.animation.simpleAccordion.onAjaxModalContentReady);

	audi_ngw.event.bind('ajaxSnippetReady',audi_ngw.animation.simpleAccordion.onAjaxSnippetReady);

 
};
 

	
