function TGradient()
{
	//private
		function int2Hex(value)
		{
			result = '';
			digits = '0123456789ABCDEF';
			
			//groesstes vielfache ermitteln
			factor = 16;
			while (factor < value)
			{
				factor *= 16;
			}

			//solange zahl mit vielfachen dividieren bis wert < 16
			while (value > 15)		
			{
				naturalpart = Math.floor(value / factor);
				decimalpart = (value % factor);

				result += digits.charAt(naturalpart);
				value  -= naturalpart*factor;
		
				//vielfache um basis 16 verringern um an nächste hex stelle zu kommen
				factor = factor / 16;
			}

			if (result.substr(0,1) == '0') { result = result.substr(1,result.length); }

			while (factor >= 16)
			{
				result += "0";
				factor = factor / 16;
			}
		
			result += digits.charAt(value);

			while ((result.length % 2 > 0) || (result.length < 6))
			{
				result = '0'+result;	
			}

			return '#'+result;
		}

		function hex2Int(value)
		{
			var s = value.substr(1,value.length).toUpperCase();
			var c = s.length-1;
			var v = 0;
			var result = 0;

			while (c >= 0)
			{
				switch(s.substr(c,1))
				{
					case '0' : v = 0; break;
					case '1' : v = 1; break;
					case '2' : v = 2; break;
					case '3' : v = 3; break;
					case '4' : v = 4; break;
					case '5' : v = 5; break;
					case '6' : v = 6; break;
					case '7' : v = 7; break;
					case '8' : v = 8; break;
					case '9' : v = 9; break;
					case 'A' : v = 10; break;
					case 'B' : v = 11; break;
					case 'C' : v = 12; break;
					case 'D' : v = 13; break;
					case 'E' : v = 14; break;
					case 'F' : v = 15;
				}
				
				result = result + (v << (4*(s.length-1-c)));

				c--;
			}			

			return result;
		}

	//public
		this.version = '0.2';
		this.beginColor = '#000000';
		this.endColor = '#FFFFFF';
		this.resolution = 1;
		this.vertical = false;
		this.elementClass = 'gradientElement';
		this.transparencyOnly = false;
		this.transparencyEnabled = true;

		this.apply = function(container)
		{
			container.style.position = 'relative';

			var r = hex2Int('#'+this.beginColor.substr(1,2));
			var g = hex2Int('#'+this.beginColor.substr(3,2));
			var b = hex2Int('#'+this.beginColor.substr(5,2));

			var rb = r;
			var gb = r;
			var bb = r;

			var re = hex2Int('#'+this.endColor.substr(1,2));
			var ge = hex2Int('#'+this.endColor.substr(3,2));
			var be = hex2Int('#'+this.endColor.substr(5,2));

			var list = new Array();

			while(r != re || g != ge || b != be)
			{
				var l = document.createElement('div');
				l.style.position = 'relative';
				
				if (!this.vertical)
				{
					if(window.showModalDialog)
					{
						l.style.styleFloat = 'right'; //ie
					}
					else
					{
						l.style.cssFloat = 'right'; //moz
					}
				}

				l.className =  this.elementClass;

				if (!this.transparencyOnly)
				{
					l.style.backgroundColor = int2Hex((r << 16)+(g << 8)+b);
				}
				else
				{
					l.style.backgroundColor = int2Hex((rb << 16)+(gb << 8)+bb);
				}

				container.appendChild(l);
				list.push(l);

				if (r+this.resolution <= re) { r += this.resolution; }
				if (g+this.resolution <= ge) { g += this.resolution; }
				if (b+this.resolution <= be) { b += this.resolution; }
			}

			if (this.transparencyEnabled)
			{
				var c = 0;

				while (c <= list.length-1)	
				{
					list[c].style.filter = 'alpha(opacity='+Math.round(100-(100*c/(list.length-1)))+')';	
					list[c].style.opacity = 1-1*c/(list.length-1);	

					c++;
				}
			}		
		}	
}
