
var ColourCompare = {

	/* Colour Compare Class
		(c) CopySense.co.uk 2004/10 ~ Martin Latter */

	iWcFlag: 2,
	iWvFlag: 2,

	init: function() {

		cbsElemTxt("title");

		document.getElementById("f1").onsubmit = function() {return false;};
		document.getElementById("f2").onsubmit = function() {return false;};
		document.getElementById("f3").onsubmit = function() {return false;};

		document.getElementById("wscols").onclick = function() {ColourCompare.swsc();};
		document.getElementById("wincols").onclick = function() {ColourCompare.swc();};

		document.getElementById("importbut").onclick = function() {ColourCompare.imp();};
		document.getElementById("exportbut").onclick = function() {ColourCompare.ex();};
		document.getElementById("clearbut1").onclick = function() {ColourCompare.clearBox(0);};
		document.getElementById("clearbut2").onclick = function() {ColourCompare.clearBox(1);};
		document.getElementById("equals").onclick = function() {ColourCompare.harmonise();};

		document.getElementById("a1r1").onclick = function() {ColourCompare.cg("rd", 1);};
		document.getElementById("a1r2").onclick = function() {ColourCompare.cg("ru", 1);};
		document.getElementById("a1g1").onclick = function() {ColourCompare.cg("gd", 1);};
		document.getElementById("a1g2").onclick = function() {ColourCompare.cg("gu", 1);};
		document.getElementById("a1b1").onclick = function() {ColourCompare.cg("bd", 1);};
		document.getElementById("a1b2").onclick = function() {ColourCompare.cg("bu", 1);};

		document.getElementById("a2r1").onclick = function() {ColourCompare.cg("rd", 0);};
		document.getElementById("a2r2").onclick = function() {ColourCompare.cg("ru", 0);};
		document.getElementById("a2g1").onclick = function() {ColourCompare.cg("gd", 0);};
		document.getElementById("a2g2").onclick = function() {ColourCompare.cg("gu", 0);};
		document.getElementById("a2b1").onclick = function() {ColourCompare.cg("bd", 0);};
		document.getElementById("a2b2").onclick = function() {ColourCompare.cg("bu", 0);};

		document.getElementById("rr").onblur = function() {ColourCompare.cg(null, 1);};
		document.getElementById("gg").onblur = function() {ColourCompare.cg(null, 1);};
		document.getElementById("bb").onblur = function() {ColourCompare.cg(null, 1);};
	
		document.getElementById("rr2").onblur = function() {ColourCompare.cg(null, 0);};
		document.getElementById("gg2").onblur = function() {ColourCompare.cg(null, 0);};
		document.getElementById("bb2").onblur = function() {ColourCompare.cg(null, 0);};


		document.getElementById("arrows1").onselectstart = function() {return false;};
		document.getElementById("arrows2").onselectstart = function() {return false;};

		if (window.sidebar) {
			document.getElementById("arrows1").onmousedown = function() {return false;};
			document.getElementById("arrows2").onmousedown = function() {return false;};
			document.onclick = function() {return true;};
		//N6
		}
	},

	cg: function(sUDButton, iFNum) {

		var rHexChk = /[A-Fa-f0-9]{2}/;
		var rNum = /[0-9]/;
		var iFormID = iFNum? 1 : 2;
		var oRr, oGg, oBb, oStep, oCol;
		var iIncDec, iRed, iGreen, iBlue, iRZeroFlag, iGZeroFlag, iBZeroFlag;

		if (iFNum) {
			oRr = document.getElementById("rr");
			oGg = document.getElementById("gg");
			oBb = document.getElementById("bb");
			oStep = document.getElementById("step");
			oCol = document.getElementById("col");
		}
		else {
			oRr = document.getElementById("rr2");
			oGg = document.getElementById("gg2");
			oBb = document.getElementById("bb2");
			oStep = document.getElementById("step2");
			oCol = document.getElementById("col2");
		}

		if (!rHexChk.test(oRr.value) || !rHexChk.test(oGg.value) || !rHexChk.test(oBb.value)) {
			alert("Input eoRror - (oColour box " + iFormID + ")\nTwo characters (0-9, A-F) must be present\nin each input field.");
			return;
		}

		if (!rNum.test(oStep.value)) {
			alert("Step (oColour box " + iFormID + ")\n needs to be a number.");
			return;
		}

		iIncDec = parseInt(oStep.value, 10);

		if (iIncDec > 99 || iIncDec <= 0) {
			alert("Step (oColour box " + iFormID + ") needs to be 1 - 99.");
			return;
		}

		iRed = parseInt(oRr.value, 16);
		iGreen = parseInt(oGg.value, 16);
		iBlue = parseInt(oBb.value, 16);

		switch (sUDButton) {
			case "ru" : iRed += iIncDec; break;
			case "rd" : iRed -= iIncDec; break;
			case "gu" : iGreen += iIncDec; break;
			case "gd" : iGreen -= iIncDec; break;
			case "bu" : iBlue += iIncDec; break;
			case "bd" : iBlue -= iIncDec; break;
		}

		if (iRed > 255 || iRed < 0 || iGreen > 255 || iGreen < 0 || iBlue > 255 || iBlue < 0) {
			alert("You cannot exceed 0 or ff (255).");
			return;
		}

		iRZeroFlag = (iRed < 16)? 1 : 0;
		iGZeroFlag = (iGreen < 16)? 1 : 0;
		iBZeroFlag = (iBlue < 16)? 1 : 0;

		iRed = iRed.toString(16);
		iGreen = iGreen.toString(16);
		iBlue = iBlue.toString(16);

		if (iRZeroFlag) {
			iRed = "0" + iRed;
		}
		if (iGZeroFlag) {
			iGreen = "0" + iGreen;
		}
		if (iBZeroFlag) {
			iBlue = "0" + iBlue;
		}

		oRr.value = iRed;
		oGg.value = iGreen;
		oBb.value = iBlue;
		oCol.style.background = "#" + (iRed + iGreen + iBlue);
	},

	harmonise: function() {

		var aHex = ["rr", "gg", "bb"];
		for (var i = 0; i < 3; i++) {
			document.getElementById(aHex[i] + "2").value = document.getElementById(aHex[i]).value;
		}
		this.cg(null, 1);
		this.cg(null, 0);
	},

	ex: function() {

		var sR = document.getElementById("rr2").value;
		var sG = document.getElementById("gg2").value;
		var sB = document.getElementById("bb2").value;
		var sExport = sR + sG + sB;
		document.getElementById("exparea").value = "#" + sExport;
		document.getElementById("exparea2").value = "rgb(" + this.hex2dec(sR, sG, sB) + ")";
	},

	clickImp: function(sCol, iFv) {

		if (iFv) {
			sCol = sCol.charAt(0) + sCol.charAt(0) + sCol.charAt(1) + sCol.charAt(1) + sCol.charAt(2) + sCol.charAt(2);
		}
		document.getElementById("inparea").value = sCol;
		this.subCol(sCol);
	},

 	imp: function() {

		if (document.getElementsByName("base")[0].checked) {
			this.impSub1();
		}
		else {
			this.impSub2();
		}
	},

	impSub1: function() {

		var oInputArea = document.getElementById("inparea");
		var oInputArea2 = oInputArea.value;
		var rHash = /#/g;
		var rHex3 = /[0-9a-fA-F]{3}/;
		var rHex6 = /[0-9a-fA-F]{6}/;

		if (oInputArea.value === "") {
			alert("No hex string for import!");
			oInputArea.focus();
			return;
		}

		oInputArea2 = oInputArea2.replace(rHash, "");

		if (oInputArea2.length == 3) {
			if (!rHex3.test(oInputArea2)) {
				alert("Input error -\nhex characters are 0-9 and A-F\n(at least 3 characters must be used).");
				return;
			}
			else {
				var sTemp = oInputArea2.charAt(0) + oInputArea2.charAt(0) + oInputArea2.charAt(1) + oInputArea2.charAt(1) + oInputArea2.charAt(2) + oInputArea2.charAt(2);
			oInputArea2 = sTemp;
			}
		}
		else {
			if (!rHex6.test(oInputArea2)) {
				alert("Input error -\nhex characters are 0-9 and A-F\n(6 or 3 characters required).");
				return;
			}
		}

		this.subCol(oInputArea2);
	},

	impSub2: function() {

		var oInputArea = document.getElementById("inparea2");
		var aDecs = [];
		var rNoNum = /[0-9,]+/;
			//var rNoNum = /^[0-9,]/g;
		var rValidRGB = /\d{1,3},\d{1,3},\d{1,3}/;

		if (oInputArea.value === "") {
			alert ("No RGB string for import!");
			oInputArea.focus();
			return;
		}

		if (!rNoNum.test(oInputArea.value)) {
			alert ("RGB string contains non-numbers!");
			oInputArea.focus();
			return;
		}

		if (!rValidRGB.test(oInputArea.value)) {
			alert ("RGB string is not in the correct format.");
			oInputArea.focus();
			return;
		}

		aDecs = oInputArea.value.split(",");

		if (aDecs[0] > 255 || aDecs[1] > 255 || aDecs[2] > 255 || aDecs[0] < 0 || aDecs[1] < 0 || aDecs[2] < 0) {
			alert("Values < 0 or > 255 are not possible.");
			oInputArea.focus();
			return;
		}
		else {
			var sDh = this.dec2hex(aDecs[0], aDecs[1], aDecs[2]);
			document.getElementById("inparea").value = sDh;
			this.subCol(sDh);
		}
	},

	subCol: function(sCol) {

		var sRh = sCol.slice(0, 2);
		var sGh = sCol.slice(2, 4);
		var sBh = sCol.slice(4, 6);
		document.getElementById("inparea2").value = this.hex2dec(sRh, sGh, sBh);
		document.getElementById("rr").value = sRh;
		document.getElementById("gg").value = sGh;
		document.getElementById("bb").value = sBh;
		this.cg(null, 1);
	},

	clearBox: function(iFv) {

		if (iFv) {
			document.getElementById("col2").style.background = "#ccc";
		}
		else {
			document.getElementById("col").style.background = "#ccc";
		}
	},

	hex2dec: function(sH1, sH2, sH3) {

		var iDec1 = parseInt(sH1, 16);
		var iDec2 = parseInt(sH2, 16);
		var iDec3 = parseInt(sH3, 16);
		var sDtot = iDec1 + "," + iDec2 + "," + iDec3;
		return sDtot;
	},

	dec2hex: function(sD1, sD2, sD3) {

		var sHex = "0123456789abcdef";
		var sH1 = sHex.charAt((sD1 >> 4) & 0xf) + sHex.charAt(sD1 & 0xf);
		var sH2 = sHex.charAt((sD2 >> 4) & 0xf) + sHex.charAt(sD2 & 0xf);
		var sH3 = sHex.charAt((sD3 >> 4) & 0xf) + sHex.charAt(sD3 & 0xf);
		var sHtot = sH1 + sH2 + sH3;
		return sHtot;
	},

	fwsc: function() {

		var aWSHTML = [];
		var aWebSafeCols = ["fff","ccc","999","666","333","000","fc0","f90","f60","f30","9c0","c90","fc3","fc6","f96","f63","c30","c03","cf0","cf3","330","660","990","cc0","ff0","c93","c63","300","600","900","c00","f00","f36","f03","9f0","cf6","9c3","663","993","cc3",
	"ff3","960","930","633","933","c33","f33","c36","f69","f06","6f0","9f6","6c3","690","996","cc6","ff6","963","630","966","c66","f66","903","c39","f6c","f09","3f0","6f3","390","6c0","9f3","cc9","ff9","c96","c60","c99","f99","f39","c06","906","f3c",
	"f0c","0c0","3c0","360","693","9c6","cf9","ffc","fc9","f93","fcc","f9c","c69","936","603","c09","303","3c3","6c6","0f0","3f3","6f6","9f9","cfc","c9c","969","939","909","636","606","060","363","090","393","696","9c9","fcf","f9f","f6f","f3f","f0f",
	"c6c","c3c","030","0c3","063","396","6c9","9fc","cff","39f","9cf","ccf","c9f","96c","639","306","90c","c0c","0f3","3f6","093","0c6","3f9","9ff","9cc","06c","69c","99f","99c","93f","60c","609","c3f","c0f","0f6","6f9","3c6","096","6ff","6cc","699",
	"036","369","66f","66c","669","309","93c","c6f","90f","0f9","6fc","3c9","3ff","3cc","399","366","069","039","33f","33c","339","336","63c","96f","60f","0fc","3fc","0ff","0cc","099","066","033","39c","36c","00f","00c","009","006","003","63f","30f",
	"0c9","09c","3cf","6cf","69f","36f","03c","30c","0cf","09f","06f","03f"];

		aWSHTML.push('<table cellspacing="1" id="wsct"><tr>');

		for (var i = 0; i < 216; i++) {
			aWSHTML.push('<td style="background:#' + aWebSafeCols[i] + '"><a href="javascript://" onclick="ColourCompare.clickImp(\'' + aWebSafeCols[i] + '\',1)\" onmouseover="window.status=\'\';return true;"></a></td>');
			if (i == 9) {aWSHTML.push('<td colspan="6"></td></tr><tr>');}
			if (i == 10 || i == 16 || i == 204 || i == 210) {aWSHTML.push('<td colspan="4"></td>');}
			if (i == 17 || i == 33 || i == 49 || i == 65 || i == 81 || i == 97 || i == 110 || i == 123 || i == 139 || i == 155 || i == 171 || i == 187 || i == 203) {aWSHTML.push('</tr><tr>');}
			if (i == 104 || i == 116) {aWSHTML.push('<td colspan="3"></td>');}
			if (i == 211) {aWSHTML.push('</tr><tr><td colspan="6"></td>');}
		}
		aWSHTML.push('<td colspan="6"></td></tr></table>');
		document.getElementById("wscdiv").innerHTML = aWSHTML.join("");
	},

	swsc: function() {

		var oWsc = document.getElementById("wscdiv");

		if (this.iWvFlag == 2) {
			this.fwsc();
			this.iWvFlag = 1;
		}
		else {
			this.iWvFlag = !this.iWvFlag;
		}
		if (this.iWvFlag) {
			oWsc.style.display = "block";
		}
		else {
			oWsc.style.display = "none";
		}
	},

	swc: function() {

		var oWcd = document.getElementById("wcdiv");

		if (this.iWcFlag == 2) {
			this.wc();
			this.iWcFlag = 1;
		}
		else {
			this.iWcFlag = !this.iWcFlag;
		}

		if (this.iWcFlag) {
			oWcd.style.display = "block";
		}
		else {
			oWcd.style.display = "none";
		}
	},

	wc: function() {

		var aWinHTML = [];
		var aWinCols = ["f0f8ff","faebd7","00ffff","7fffd4","f0ffff","f5f5dc","ffe4c4","000000","ffebcd","0000ff","8a2be2","a52a2a","deb887","5f9ea0","7fff00","d2691e","ff7f50","6495ed","fff8dc","dc143c","00ffff","00008b","008b8b","b8860b","a9a9a9","006400",
	"bdb76b","8b008b","556b2f","ff8c00","9932cc","8b0000","e9967a","8fbc8f","483d8b","2f4f4f","00ced1","9400d3","ff1493","00bfff","696969","1e90ff","b22222","fffaf0","228b22","ff00ff","dcdcdc","f8f8ff","ffd700","daa520","808080","008000","adff2f",
	"f0fff0","ff69b4","cd5c5c","4b0082","fffff0","f0e68c","e6e6fa","fff0f5","7cfc00","fffacd","add8e6","f08080","e0ffff","fafad2","90ee90","d3d3d3","ffb6c1","ffa07a","20b2aa","87cefa","778899","b0c4de","ffffe0","00ff00","32cd32","faf0e6","ff00ff",
	"800000","66cdaa","0000cd","ba55d3","9370db","3cb371","7b68ee","00fa9a","48d1cc","c71585","191970","f5fffa","ffe4e1","ffe4b5","ffdead","000080","fdf5e6","808000","6b8e23","ffa500","ff4500","da70d6","eee8aa","98fb98","afeeee","db7093","ffefd5",
	"ffdab9","cd853f","ffc0cb","dda0dd","b0e0e6","800080","ff0000","bc8f8f","4169e1","8b4513","fa8072","f4a460","2e8b57","fff5ee","a0522d","c0c0c0","87ceeb","6a5acd","708090","fffafa","00ff7f","4682b4","d2b48c","008080","d8bfd8","ff6347","40e0d0",
	"ee82ee","f5deb3","ffffff","f5f5f5","ffff00","9acd32"];

		aWinHTML.push('<table cellspacing = "1" id = "wct"><tr>');

		for (var i = 0, j = 1; i < 140; i++, j++) {
			aWinHTML.push('<td style="background:#' + aWinCols[i] + '"><a href="javascript://" onclick="ColourCompare.clickImp(\'' + aWinCols[i]+'\',0)\" onmouseover="window.status = \'\';return true;"></a></td>');

			if (j == 10) {
				if (i > 138) {
					break;
				}
				aWinHTML.push("</tr><tr>");
				j = 0;
			}
		}

		aWinHTML.push("</tr></table>");
		document.getElementById("wcdiv").innerHTML = aWinHTML.join("");
	}
};


window.onload = ColourCompare.init;

window.onunload = function() {
	ColourCompare = null;
};

