 /**
 * Custom event handling. Wrapper for Custom events that relay on multiple custom events 
 * and an oncomplete action that should be fired when every listener claims his actions has been done.
 * 
 * @projectDescription	Wrapper for customs   event
 * @namespace			event.*
 *
 * @author 				$Author: mkrause $
 * @version				$Revision: 1 $
 * @copyright			NEUE DIGITALE GmbH, Berlin
 * 
 * @jslint: 2008-10-31
 * 
 * @file:				audi_ngw.event.js
 * $URL: https://svn.pvtool.org/svn/day_audi_ngw/trunk/ngw_base/frontend/js/audi/audi.event.onLoad.js $
 */

/* create namespace */
audi_ngw.namespace(audi_ngw,'event');

audi_ngw.event.ajaxModalContentReadyRegistered = [];
audi_ngw.event.ajaxModalContentReadyCount=0;
audi_ngw.event.ajaxModalContentReadyCountCopy=0;

 
 /**
  * Wrapper for custom events, 
  *  decreases number of registered events and fires oncomplete event 
  *  which checks for registered events == 0 before running oncomplete actions
  * @param {String} sEvent
  * @return {Void}
  */
audi_ngw.event.trigger = function (sEvent,data) {

	switch(sEvent) {
		
		// oncomplete callback ('ajaxModalContentPrepared') for ajaxModalContentReady is set at audi_ngw.layer.js
		case 'ajaxModalContentPrepared':
			// decrease counter
	 		audi_ngw.event.ajaxModalContentReadyCount--;
			jQuery(document).trigger("ajaxModalContentPrepared");
		break;

		case 'ajaxPageLoadContentReady':
			jQuery(document).trigger("ajaxPageLoadContentReady");
		break;
		
		case 'ajaxSnippetReady':
			jQuery(document).trigger("ajaxSnippetReady",data);
		break;

		case 'ajaxSnippetPrepared':
			jQuery(document).trigger("ajaxSnippetPrepared",data);
		break;
		
		// not used: added for future implementations 
//		case 'ajaxSnippetPrepared':
//			jQuery(document).trigger("ajaxSnippetPrepared");
//		break;
//		case 'ajaxSnippetComplete':
//			jQuery(document).trigger("ajaxSnippetComplete");
//		break;
//		case 'ajaxPageLoadContentPrepared':
//			jQuery(document).trigger("ajaxPageLoadContentPrepared");
//		break;
//		case 'ajaxPageLoadContentComplete':
//			jQuery(document).trigger("ajaxPageLoadContentComplete");
//		break;
		
		
		
	}

};

audi_ngw.event.unbind = function (sEvent) {

	var sNameSpace = sEvent.split('.')[1];
	sEvent = sEvent.split('.')[0];

	switch(sEvent) {
		
		case 'ajaxModalContentReady':

			if (jQuery.inArray(sNameSpace,audi_ngw.event.ajaxModalContentReadyRegistered) === -1 || !sNameSpace) {
				return;
			}

			jQuery(document).unbind("ajaxModalContentReady" + sNameSpace);

			audi_ngw.event.ajaxModalContentReadyRegistered = audi_ngw.arrayRemove(audi_ngw.event.ajaxModalContentReadyRegistered, sNameSpace);

			// decrease counters
		  	audi_ngw.event.ajaxModalContentReadyCount--;
			audi_ngw.event.ajaxModalContentReadyCountCopy--;



			break;
		
		// ajaxPageLoadContentReady is triggered after pageload html has been injected
		case 'ajaxPageLoadContentReady':
			jQuery(document).unbind("ajaxPageLoadContentReady",fn);
			break;

		// ajaxSnippetReady is triggered after an xhr responseText has been injected as html snippet ( e.g. simpleForm, advice_fragemnt)
		case 'ajaxSnippetReady':
			jQuery(document).unbind("ajaxSnippetReady",fn);
			break;

		case 'ajaxSnippetPrepared':
			jQuery(document).unbind("ajaxSnippetPrepared",fn);
			break;
			
	}
};

/**
 * Wrapper for custom events.
 * Increases numerb of registered events and adds eventlistener.
 * @param {String} sEvent
 * @param {Function} fn
 * @return {Void}
 */
audi_ngw.event.bind = function (sEvent,fn) {

	// get event / namspace
	var sNameSpace = sEvent.split('.')[1];
	sEvent = sEvent.split('.')[0];

	switch(sEvent) {
		
	 	// ajaxModalContentReady: modal content ready but not cloned
		// oncomplete callback: ajaxModalContentPrepared is set at audi_ngw.layer.js
		// implements cascading events
		case 'ajaxModalContentReady':

			// prevent multiple events from one class
			if (jQuery.inArray(sNameSpace,audi_ngw.event.ajaxModalContentReadyRegistered) !== -1 || !sNameSpace) {
				//audi_ngw.log("[event] ERROR already bound / missing namespace " +sEvent+'.'+sNameSpace);
				return;
			}
			// bind event
			jQuery(document).bind("ajaxModalContentReady." + sNameSpace, fn);
			// push namespace to control array
			audi_ngw.event.ajaxModalContentReadyRegistered.push(sNameSpace);
			// increase counters
		  	audi_ngw.event.ajaxModalContentReadyCount++;
			audi_ngw.event.ajaxModalContentReadyCountCopy++;

			//audi_ngw.log("[event] bound ["+audi_ngw.event.ajaxModalContentReadyCount+"="+ audi_ngw.event.ajaxModalContentReadyRegistered.length+"] " +sEvent+'.'+sNameSpace);

		break;
		
		// ajaxPageLoadContentReady is triggered after pageload html has been injected
		case 'ajaxPageLoadContentReady':
			jQuery(document).bind("ajaxPageLoadContentReady",fn);
		break;
		
		// ajaxSnippetReady is triggered after an xhr responseText has been injected as html snippet ( e.g. simpleForm, advice_fragemnt)
		case 'ajaxSnippetReady':
			jQuery(document).bind("ajaxSnippetReady",fn);

		break;
		case 'ajaxSnippetPrepared':
			jQuery(document).bind("ajaxSnippetPrepared",fn);
		break;
	}

};

 


