		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', 400, 50);

			 *	gxElementSizer.setElementSize('element2', 650, 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');

		};



