/**
 * Html Element Class
 * 
 * @package	Frontend
 * @author	Sven Sanzenbacher <sven.sanzenbacher@burdadirect.de>
 * @author	Marcel detrois <marcel.detrois@burda.com>
 * @version $Id$
 * 
 * @param	string	element id
 */
var BdiHtmlElement = function( elementId )
{
	/**
	 * @var string		html element id
	 */
	var htmlElementId = elementId;

	/**
	 * @var object		html element object
	 */
	var $jQueryObject = null;



	/**
	 * @return 	string	element id
	 */
	this.getElementId = function()
	{
		return htmlElementId;
	};

	/**
	 * @return 	object	html element object
	 */
	this.getElementObject = function()
	{
		if ( $jQueryObject === null )
		{
			$jQueryObject = $('#' + this.getElementId() );
		}
		return $jQueryObject;
	};

	/**
	 * @return 	bool
	 */
	this.isHidden = function()
	{
		if ( this.getElementObject().css('display') == 'none' )
		{
			return false;
		}
		return true;
	};

	/**
	 * @return	void
	 */
	this.hide = function()
	{
		this.getElementObject().hide();
	};

	/**
	 * @return	void
	 */
	this.unhide = function()
	{
		this.getElementObject().show();
	};

	/**
	 * @return	void
	 */
	this.setChecked = function()
	{
		this.getElementObject().attr('checked', true);
	};

};

/**
 * Accordion Class
 * 
 * @package	Frontend
 * @author	Sven Sanzenbacher <sven.sanzenbacher@burdadirect.de>
 * @author	Marcel detrois <marcel.detrois@burda.com>
 * @version $Id$
 */
var BdiAccordion = function(newContainerId)
{
	/**
	 * @var string		element id of active html element 
	 */
	var activeElementId = null;
	
	/**
	 * @var string		element id of the container id 
	 */
	var containerId = newContainerId;

	/**
	 * @return	string		html element id
	 */
	this.getActiveElementId = function()
	{
		return activeElementId;
	};

	/**
	 * @param	string	element id of active html element 
	 * @return	void
	 */
	this.enable = function( htmlElementId )
	{
		activeElementId = htmlElementId;
		this.dispatch();
	};

	/**
	 * @return	void
	 */
	this.disable = function()
	{
		activeElementId = null;
		this.dispatch();
	};

	/**
	 * @return	void
	 */
	this.dispatch = function()
	{
		$('#' + containerId + ' > div').hide();
		
		if(activeElementId)
		{
			$('#' + activeElementId).show();
		}
	};
};

/**
 * Accordion Event Class
 * 
 * @package	Frontend
 * @author	Sven Sanzenbacher <sven.sanzenbacher@burdadirect.de>
 * @author	Marcel detrois <marcel.detrois@burda.com>
 * @version $Id$
 */
var BdiAccordionEvent = function()
{
	/**
	 * @var array		array with accordion event element objects
	 */
	var accordionEventElementObjects = new Array();

	/**
	 * @var bool		has shared accordion event elements
	 */
	var accordionEventElementShared = false;



	/**
	 * @param	string		html element id
	 * @return	BdiAccordionEventElement
	 */
	this.setAccordionEventElement = function( htmlElementId )
	{
		var $jQueryObject = new BdiAccordionEventElement( htmlElementId );
		accordionEventElementObjects.push( $jQueryObject );
		return $jQueryObject;
	};

	/**
	 * @return	bool		has shared accordion event elements
	 */
	this.hasAccordionEventElementShared = function()
	{
		return accordionEventElementShared;	};

	/**
	 * @param	bool		has shared accordion event elements
	 * @return	void
	 */
	this.setAccordionEventElementShared = function( status )
	{
		accordionEventElementShared = status;
	};

	/**
	 * @return	void
	 */
	this.event = function()
	{
		$.each(accordionEventElementObjects, function()
		{ 
			var enabledAccordionElements = this.getEnabledAccordionHtmlElements();
			var disabledAccordionElements = this.getDisabledAccordionHtmlElements();
			
			if ( this.getEventHtmlElementObject().is(':checked') )
			{
				$.each(enabledAccordionElements, function()
				{
					this.unhide();
				});
				
				if ( disabledAccordionElements.length > 0)
				{
					$.each(disabledAccordionElements, function()
					{
						this.hide();
					});
				}
			}
			else if (accordionEventElementShared === false)
			{
				$.each(enabledAccordionElements, function()
				{
					this.hide();
				});
				
				if ( disabledAccordionElements.length > 0)
				{
					$.each(disabledAccordionElements, function()
					{
						this.unhide();
					});
				}
			}
		});
	}
}

/**
 * Accordion Event Element Class
 * 
 * @package	Frontend
 * @author	Sven Sanzenbacher <sven.sanzenbacher@burdadirect.de>
 * @author	Marcel detrois <marcel.detrois@burda.com>
 * @version $Id$
 * 
 * @param	string		html element id of event element
 */
var BdiAccordionEventElement = function( elementId )
{
	/**
	 * @var string		html element id of event element
	 */
	var eventHtmlElementId = elementId;

	/**
	 * @var jQueryObject
	 */
	var $eventjQueryObject = null;

	/**
	 * @var array
	 */
	var enabledAccordionElementObjects = new Array();

	/**
	 * @var array
	 */
	var disabledAccordionElementObjects = new Array();



	/**
	 * @return	string		html element id
	 */
	this.getEventHtmlElementId = function()
	{
		return eventHtmlElementId;
	};

	/**
	 * @return 	object	html element object
	 */
	this.getEventHtmlElementObject = function()
	{
		if ( $eventjQueryObject === null )
		{
			$eventjQueryObject = $('#' + this.getEventHtmlElementId() );
		}
		return $eventjQueryObject;
	}

	/**
	 * @return	array
	 */
	this.getEnabledAccordionHtmlElements = function()
	{
		return enabledAccordionElementObjects;
	};

	/**
	 * @param	string		html element id
	 * @return	BdiHtmlElement
	 */
	this.setEnabledAccordionHtmlElement = function( htmlElementId )
	{
		var $jQueryObject = new BdiHtmlElement( htmlElementId );
		enabledAccordionElementObjects.push( $jQueryObject );
		return $jQueryObject;
	};

	/**
	 * @return	array
	 */
	this.getDisabledAccordionHtmlElements = function()
	{
		return disabledAccordionElementObjects;
	};

	/**
	 * @param	string		html element id
	 * @return	BdiHtmlElement
	 */
	this.setDisabledAccordionHtmlElement = function( htmlElementId )
	{
		var $jQueryObject = new BdiHtmlElement( htmlElementId );
		disabledAccordionElementObjects.push( $jQueryObject );
		return $jQueryObject;
	};
}
