

		var gxElementSizer =
		{
			/**
			 *	Object zum dynamischen vergrößern und verkleinern von HTML-Elementen.
			 *
			 *	Company: Gimmixx GBR
			 *	Programmer: Robert Engelhardt
			 *	E-Mail: engelhardt@gimmixx.de
			 *
			 *	Created: 16 November 2006
			 *
			 *
			 *	Element initialisierung:
			 *	------------------------
			 *	gxElementSizer.addElement('element1', 'height');
			 *	gxElementSizer.addElement('element2', 'width');
			 *
			 *
			 *	Durchführen der Größenveränderung:
			 *	----------------------------------
			 *	gxElementSizer.setElementSize('element1', 100, 50);
			 *	gxElementSizer.setElementSize('element2', 300, 20);
			 */

			addElement : function (element, sizeType)
			{
				/**
				 *	Methode zum initialisieren eines HTML-Elements über die ID
				 *
				 *	@param (element -> [object|string]) {
				 *		Enthält eine existierende ID oder eine direkte referenzierung auf HTML-Element.
				 *	}
				 *	@param (sizeType -> [string]) {
				 *		Enthält den Typ ('width' oder 'height') mit dem die Größe verändert werden soll.
				 *	}
				 */
				if (this.e == null)
				{
					this.e = {};
				}
				this.e[element] =
				{
					element  			: (typeof element == 'object') ? element : document.getElementById(element),
					sizeType 			: (sizeType.toLowerCase() == 'width') ? 'width' : 'height',
					count				: null,
					newElementSize		: null,
					currentElementSize	: null,
					sizeDifferenz		: null,
					interval			: null
				};
			},

			calculateSize : function (t, b, c, d)
			{
				/**
				 *	Methode berechnet den derzeitigen Wert zwischen einem Anfangs- und einem Endendwert
				 *	in abhängigkeit von den bestimmten Durchlaufschritten.
				 *
				 *	Robert Penner
				 *	Easing Equations v1.5
				 *	Math.easeInOutQuart
				 *	http://www.robertpenner.com
				 */
				if ((t/=d/2) < 1)
				
				{
					return c/2*t*t*t*t + b;
				}
					return -c/2 * ((t-=2)*t*t*t - 2) + b;
			},

			setElementSize : function (element, newSize, duration)

			{
				/**
				 *	Methode führt die Größenveränderung durch.
				 *
				 *	@param(element -> [string]) {
				 *		Enthält den anzusprechende ID-Namen des HTML-Elements.
				 *	}
				 *	@param(newSize -> [number]) {
				 *		Enthält die neues Größe.
				 *	}
				 *	@param(duration -> [number]) {
				 *		Enthält die anzahl der Durchlaufschritte.
				 *	}
				 */

				if(arguments[3] == null)

				{
					window.clearTimeout(this.e[element]['interval']);

					this.e[element]['count']				= 0;
					this.e[element]['newElementSize']		= newSize;
					this.e[element]['currentElementSize'] 	= parseInt(this.e[element]['element'][(this.e[element]['sizeType'] == 'width') ? 'offsetWidth' : 'offsetHeight']);
					this.e[element]['sizeDifferenz']		= this.e[element]['newElementSize'] - this.e[element]['currentElementSize'];
					this.e[element]['interval']				= 0;

				}

				if(this.e[element]['count'] < duration)

				{
					this.e[element]['element'].style[this.e[element]['sizeType']] = this.calculateSize(this.e[element]['count'], this.e[element]['currentElementSize'], this.e[element]['sizeDifferenz'], duration) + 'px';
					this.e[element]['count']++;
					this.e[element]['interval'] = window.setTimeout('gxElementSizer.setElementSize("' + element + '", ' + newSize + ', ' + duration + ', true)', duration);
				}

				else

				{
					this.e[element]['count'] 				= null;
					this.e[element]['newElementSize']		= null;
					this.e[element]['currentElementSize'] 	= null;
					this.e[element]['sizeDifferenz'] 		= null;
					this.e[element]['interval']				= null;
					window.clearTimeout(this.e[element]['interval']);
				}
			}
		};

		window.onload = function ()

		{
			gxElementSizer.addElement('element', 'height');

		};
