// elements (by ID), which terminate the lightbox
var lightboxElementsTerminator = Array('close_lightbox', 'close_meta_lightbox', 'publications_order_finish_frame', 'close_lightbox_publications');

// available lightboxes for multiple displaying
var lightboxContainer = Array('lightbox', 'meta_lightbox');

// unique id
var lightboxUID;

// pattern for our event-listener => for infos: ExtJS.DomQuery
// NOTE: Don't use ".callLightbox" without successor, as that would attach the listener to the *containers* of the targeted nodes!
var eventListenerPattern = '.callLightbox img, .callLightbox a, .callLightbox div';
var eventListenerPatternMeta = '.callLightboxMeta div'; // separated, to init these events only one time

// target
var lightboxSelector;

// Global Image-Icon-Dirname
var _imageIconDirname = '/system/img/icons/';



// -----------------------------------------------------------------------

/**
 * @param {Event} evt
 */
function closeLightbox( evt, target )
{
	var theId = Ext.get(target.id).parent().id;//( Ext.isIE && target!=undefined ) ? target : evt.target.parentNode.id;
	
	//if( Ext.isIE ) alert( Ext.get(target.id).parent().id ); 
	
	for( a=0; a<lightboxElementsTerminator.length; a++ ) 
		try
		{
			if( theId==lightboxElementsTerminator[a] )
			{
				triggerLightbox( 'close', theId );
				return;
			}
		}
		catch( err ){}
}
	
// -----------------------------------------------------------------------

/**
 * @param {String} action Choose between "close" or "open"
 * @param {String} id Element id
 */
function triggerLightbox(action, id)
{
	var renderLightbox = 0;
	
	// check if clicked on meta-link
	if (action == 'close')
	{
		if (id == 'close_meta_lightbox')
		{
			lightbox = Ext.get('meta_lightbox');
			lightboxSelector = 'meta_lightbox'
		}
	}
	else
	{
			if (id.substring(0, 4) == 'meta')
			{
				lightbox = Ext.get('meta_lightbox');
				lightboxSelector = 'meta_lightbox';
			}
			else 
				lightboxSelector = 'lightbox';
			
			//highlightMetaNaviIcon(id);
	}
	
	var lightboxElem = lightboxSelector;
	var lightbox = Ext.get(lightboxSelector);
	
	// detect if lightbox is active
	if( Ext.DomQuery.is(lightbox, '{display*=none}') && action == 'open' && lightboxUID != 1 )
	{
		lightboxUID = 1;
		
		lightbox.setStyle({ display: 'block' });
		
		retrieveLightboxContent(id); // e.g. facts_agencies_general_3
		
		var swfHolder = getFlashMovie("swfHolder");
		if( swfHolder && swfHolder.disableScreen ) swfHolder.disableScreen();
		
	}
	else if (action == 'close' && lightboxUID == 1)
		fadeoutLighbox();
	return false;
}

// -----------------------------------------------------------------------

function fadeoutLighbox( immediate )
{
	var lightbox = Ext.get(lightboxSelector);
	var swfHolder = getFlashMovie("swfHolder");
	if(swfHolder) swfHolder.enableScreen();
	
	if(lightbox) lightbox.setStyle({ display: 'none' });
	clearLightboxContent();
	
	lightboxUID = 0;
	resetMetaNaviIcon();
}


// -----------------------------------------------------------------------


// refresh lightbox events
function eventListenerRefresh( rootID )
{
	Ext.select( eventListenerPattern, true, rootID ).on( 'click', refreshedClickHandler, this );
}

function refreshedClickHandler( evt, target )
{
	closeLightbox(evt,target);
	handleChange(evt);
}

// -----------------------------------------------------------------------


// refresh lightbox events
function eventListenerInit( rootID )
{
	Ext.select( eventListenerPattern, true, rootID ).on( 'click', inititialClickHandler, this );
	
	/* if you add inititialClickHandler(), and reopenLightbox() later, you'll get an infinite loop of adding events */
	Ext.select( eventListenerPatternMeta, true, rootID ).on( 'click', reopenLightbox, this );
}
function inititialClickHandler( evt )
{
	initLightbox( evt );
	handleChange( evt );
}


// -----------------------------------------------------------------------


function clearLightboxContent()
{
	if( Ext.get(lightboxSelector + '_content') )
		Ext.get(lightboxSelector + '_content').update('');
}


// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------

// highlight the active meta-nav-icon
/**
 * @param {String} t Target name
 */
function highlightMetaNaviIcon( t )
{
	if (lightboxSelector == 'meta_lightbox')
	{
		var target = t.split('_');
		target.pop();
		var targetName = target.join('_');
		Ext.get(targetName).applyStyles({backgroundPosition: "0 -15px"});
	}
	return false;
}


// -----------------------------------------------------------------------


// reset meta-icon status
function resetMetaNaviIcon()
{
	if (lightboxSelector == 'meta_lightbox')
	{
		if (language == 'de') {
			var icons = Array('meta_info', 'meta_contact', 'meta_rss');
		} else {
			var icons = Array('meta_info_en', 'meta_contact_en', 'meta_rss');
		}
		
		for (i = 0; i < icons.length; i++)
		{
			// Ext.get(icons[i]).applyStyles({backgroundPosition: '0 0'});
			Ext.get(icons[i]).applyStyles({backgroundPosition: ''});
		}
	}
}


// -----------------------------------------------------------------------

/**
 * @param {Event} evt
 */
function initLightbox( evt, target )
{
	var swfHolder = getFlashMovie("swfHolder");
	if( swfHolder && swfHolder.disableScreen ) swfHolder.disableScreen();
	
	var theId = ( Ext.isIE && target!=undefined ) ? target : evt.target.parentNode.id;
	if( theId!='close_lightbox' ) triggerLightbox('open', theId );
	
	evt.stopEvent();
}


// -----------------------------------------------------------------------


// initialize click-event for an explicite node - e.g. after the element was replaced by sifr
/**
 * @param {String} nodeId Trigger element id
 */
function initLightboxEventListener( nodeId )
{
	Ext.get( nodeId ).on( 'click', initLightbox, this );
}


// -----------------------------------------------------------------------

/**
 * @param {Event} evt
 */
function reopenLightbox( evt, elem )
{
	var arr = Ext.get(elem.id).parent().id.split("_");
	
	if( arr[0]=="meta" )
	{
		// ---------------------------------------------------------------------
		//			Tracking for meta only!
		//Analytics:
		_gat._anonymizeIp(); 
		pageTracker._trackEvent("Meta", "Open", arr[1]);
		// ---------------------------------------------------------------------
	}
	
	handleChange(evt);
	fadeoutLighbox( true );
	
	if( Ext.isIE )
	initLightbox( evt, evt.target.parentNode.id );
	else
	initLightbox( evt );
}

// -----------------------------------------------------------------------

/**
 * @param {Event} evt
 * @param {Target} target
 */
function closeAllLightboxes(evt, target)
{
	switch( evt.target.id )
	{
		case 'meta_lightbox':
		case 'meta_lightbox_content_wrapper':
			triggerLightbox('close', 'close_meta_lightbox');
		break;
		case 'lightbox':
		case 'lightbox_view':
			fadeoutLighbox();
		break;
	}
}

// -----------------------------------------------------------------------

/**
 * @param {Integer} width
 * @param {Integer} height
 */
function videoResizeFromFlash(width, height)
{
	/*
	if( width < 896 ) {
		var offset =  896 / 2 - width / 2;
		Ext.get('lightbox_title').applyStyles("padding-left:" + offset + "px");
		Ext.get('close_lightbox').applyStyles("padding-right:" + offset + "px");
	}*/
}

// -----------------------------------------------------------------------

/**
 * @param {Object} xhr XMLHttpRequest object
 */
function handleNewLightboxContent( xhr )
{
	// hide ajax loader
	if (Ext.get('ajax_loader')) Ext.get('ajax_loader').applyStyles({display: 'none'});
	
	var newContent = xhr.responseText;
	Ext.get( lightboxSelector + '_content' ).update( newContent, true );
	
	/* Nur auf den neuen content anwenden */
	eventListenerRefresh( lightboxSelector + '_content' );
	
	return false;
}

// -----------------------------------------------------------------------

/**
 * @param {String} clickedNodeId Clicked element id
 * @param {String} formElementId Form id which should be submitted
 */
function retrieveLightboxContent(clickedNodeId, formElementId) // formElementId can be undefined
{
	// show ajax loader
	if (Ext.get('ajax_loader')) Ext.get('ajax_loader').applyStyles({display: 'block'});
	
	var ajaxRequest = Ext.Ajax.request({
		url: 'index.php/?/' + language + '/shared/ajax/retrieveLightboxContent/' + clickedNodeId,
		form: formElementId,
		fileUpload: false,
		disableCaching: false,
		success: handleNewLightboxContent,
		failure: function(){
			Ext.get(lightboxSelector + '_content').update('error'); // TODO: Error message
		}
	});
	
	return false;
}
