
	function d2h(d) {return d.toString(16);} // decimal to hex
	function h2d(h) {return parseInt(h,16);} // hex to decimal
	
	function getRGB(elementColor) {
		if(elementColor.match(/rgb\s*\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)/gi)) {
			var result = elementColor.replace(/rgb\s*\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)/gi, '$1:$2:$3');
			var a = result.split(/:/);
			for(i = 0; i < a.length; i++) {
				a[i] = Number(a[i]);
			}
			return a;
		} else if(elementColor.match(/#[0-9a-f]{6}/i)) {
			var a = new Array(
				Number(h2d(elementColor.substring(1,3))),
				Number(h2d(elementColor.substring(3,5))),
				Number(h2d(elementColor.substring(5,7))));
			return a;
		}
		return null;
	}
	
	function makeRGB(red, green, blue) {
		var r = d2h(red);
		if(red < 16) { r = "0"+r; }
		var g = d2h(green);
		if(green < 16) { g = "0"+g;	}
		var b = d2h(blue);
		if(blue < 16) { b = "0"+b; }
		return "#"+r+g+b;
	}

	function adminglory(color1, color2, steps, fadedirection) {
		if(fadedirection != 1 && fadedirection != -1) { fadedirection = 1; }
		
		var c1 = getRGB(color1), c2 = getRGB(color2);
		var change = new Array(
			Math.ceil(((c2[0] - c1[0]) / steps * fadedirection)),
			Math.ceil(((c2[1] - c1[1]) / steps * fadedirection)),
			Math.ceil(((c2[2] - c1[2]) / steps * fadedirection))			
		);

		var e = document.getElementsByClassName("adminglory");
		var f = fadedirection;
		for(j = 0; j < e.length; j++) {
			if( e[j].style.color == null || e[j].style.color == "") {
				e[j].style.color = makeRGB(c1[0], c1[1], c1[2]);
			} else {
				var current = getRGB(e[j].style.color);
				
				var n = new Array(0,0,0);
				for(i = 0; i < n.length; i++) {
					n[i] = (Number(current[i]) + Number(change[i]));
					if(n[i] > 255) { n[i] = 255; }
					else if(n[i] < 0) { n[i] = 0; }
					if(f == 1) {
						if(Number(change[i]) > 0) {
							if(n[i] > c2[i]) { n[i] = c2[i]; }
						} else {
							if(n[i] < c2[i]) { n[i] = c2[i]; }
						}
					} else {
						if(Number(change[i]) < 0) {
							if(n[i] < c1[i]) { n[i] = c1[i]; }
						} else {
							if(n[i] > c1[i]) { n[i] = c1[i]; }
						}
					}
				}
				
				if(f == 1) {
					if(current[0] == c2[0] && current[1] == c2[1] && current[2] == c2[2]) {
						fadedirection = -1;
					}
				} else {
					if(current[0] == c1[0] && current[1] == c1[1] && current[2] == c1[2]) {
						fadedirection = 1;
					}
				}

				var nextcolor = makeRGB(n[0], n[1], n[2]);
				e[j].style.color = nextcolor;
			}
		}
		setTimeout('adminglory("'+color1+'", "'+color2+'", "'+steps+'", "'+fadedirection+'")', 100);
	}
	
	setTimeout('adminglory("#FF5555", "#FFE090", 10, 1)', 100);

