
var RGBConverter = {

	/*	RGB converter class
		(c) CopySense.co.uk 2002 ~ Martin Latter */

	loader: function() {

		document.getElementById("radiodh").onclick= function() {RGBConverter.mode(1);};
		document.getElementById("radiohd").onclick= function() {RGBConverter.mode(0);};
		document.getElementById("reset").onclick= function() {RGBConverter.mode(1);};
		document.getElementById("rgb").onsubmit = function() {return false;};
		document.getElementById("submit").onclick = function() {RGBConverter.convert(document.getElementById("r").value, document.getElementById("g").value, document.getElementById("b").value);};
	},

	mode: function(b) {

		var i = 2;
		var oRGBf = document.getElementById("rgb");
		var iMaxLen = 3;
		var sZeroValue = "0"; // dec default

		document.getElementById("hexcol").style.background = "#f7ffff";
		document.getElementById("hexbox").value = "";

		if (!b) {
			iMaxLen = 2;
			sZeroValue = "00";
		}

		for (; i < 5; i++) {
			oRGBf[i].maxLength = iMaxLen;
			oRGBf[i].value = sZeroValue;
		}
	},

	convert: function(r, g, b) {

		function dec2hex() {
			var sHchars = "0123456789abcdef";
			var rNck = /[0-9]{1}/;
			if (!rNck.test(r) || !rNck.test(g) || !rNck.test(b)) {
				alert("Input error -\ndecimal characters are 0-9 only\n(at least one character must be present).");
				return;
			}
			if (r > 255 || g > 255 || b > 255 || r < 0 || g < 0 || b < 0) {
				alert("0 - 255 only.");
				return;
			}
			var sHR = sHchars.charAt((r >> 4) & 0xf) + sHchars.charAt(r & 0xf);
			var sHG = sHchars.charAt((g >> 4) & 0xf) + sHchars.charAt(g & 0xf);
			var sHB = sHchars.charAt((b >> 4) & 0xf) + sHchars.charAt(b & 0xf);
			var sHexRGB = sHR + sHG + sHB;
			document.getElementById("hexbox").value = "# " + sHexRGB;
			document.getElementById("hexcol").style.background = "#" + sHexRGB;
		}

		function hex2dec() {
			var rHck = /[A-Fa-f0-9]{2}/;
			if (!rHck.test(r) || !rHck.test(g) || !rHck.test(b)) {
				alert("Input error -\nTwo characters (0-9, A-F) must be present\nin each input field for conversion to hex.");
				return;
			}
			var iDR = parseInt(r, 16);
			var iDG = parseInt(g, 16);
			var iDB = parseInt(b, 16);
			var sDTotal = r + g + b;
			document.getElementById("hexbox").value = (iDR + "," + iDG + "," + iDB);
			document.getElementById("hexcol").style.background = "#" + sDTotal;
		}

		document.getElementById("radiodh").checked? dec2hex() : hex2dec();
	}
};


window.onload = RGBConverter.loader;
window.onunload = function() {RGBConverter = null;};


