var tag = new Array('dl', '', 'dt', 'dd');
var tabkey = new Array('Color-Sample', 'Color-Sample');
var d = document;
var rev = 0;
var xyz = new Array();

// color-table
function color_table(rgb) {
	var dt = d.getElementById('table');
	while (dt.childNodes[0]) dt.removeChild(dt.childNodes[0]);

	var dfc = d.forms['colors'];
	if (!dfc || !dfc['data']) return;
	var cstr = dfc['data'].value;
	var carr = cstr.split(/\r?\n/);

	// font-color
	var color = (dfc['color'] && dfc['color'].checked == true) ? 1 : 0;
	var font = (dfc['font'] && dfc['font'].value) ? dfc['font'].value : 0;

	// tab
	var tab = (dfc['tab'] && dfc['tab'].checked == true) ? 1 : 0;

	// line
	var line = (dfc['line'] && dfc['line'].value) ? dfc['line'].value : 20;

	// reverse
	rev = (dfc['rev'] && dfc['rev'].checked == true) ? 1 : 0;

	// sort
	if (!rgb && dfc['rgb']) {
		for (var i=0; i<dfc['rgb'].length; i++) {
			if (dfc['rgb'][i].checked == true) {
				rgb = dfc['rgb'][i].value; break;
			}
		}
	}
	if (rgb) {	// sort-rgb
		xyz =
			(rgb == 'rgb') ? new Array(2, 3, 4) :
			(rgb == 'rbg') ? new Array(2, 4, 3) :
			(rgb == 'grb') ? new Array(3, 2, 4) :
			(rgb == 'gbr') ? new Array(3, 4, 2) :
			(rgb == 'brg') ? new Array(4, 2, 3) :
			(rgb == 'bgr') ? new Array(4, 3, 2) : new Array(2, 3, 4);
		carr.sort(hikaku)
	} else if (rev) {
		carr.reverse();	// sort-name & reverse
	}

	// limit
		var limit = 0;
		var hex = (dfc['hex'] && dfc['hex'].checked == true) ? 16 : 10;	// hex ?
		// max
		var max = new Array();
		max[0] = (dfc['rmax'] && dfc['rmax'].value) ? dfc['rmax'].value : 0;
		max[1] = (dfc['gmax'] && dfc['gmax'].value) ? dfc['gmax'].value : 0;
		max[2] = (dfc['bmax'] && dfc['bmax'].value) ? dfc['bmax'].value : 0;
		// min
		var min = new Array();
		min[0] = (dfc['rmin'] && dfc['rmin'].value) ? dfc['rmin'].value : 0;
		min[1] = (dfc['gmin'] && dfc['gmin'].value) ? dfc['gmin'].value : 0;
		min[2] = (dfc['bmin'] && dfc['bmin'].value) ? dfc['bmin'].value : 0;
		// R, G, B
		for (var i=0; i<=2; i++) {
			// number
			max[i] = parseInt(max[i], hex); min[i] = parseInt(min[i], hex);
			// max < min ?
			if (max[i] < min[i]) { var n = max[i]; max[i] = min[i]; min[i] = n; }
			// max < 255 , max < 0
			if (max[i] < 0) max[i] = 0; if (max[i] > 255) max[i] = 255;
			if (min[i] < 0) min[i] = 0; if (min[i] > 255) min[i] = 255;
			// default ?
			if (max[i] != 255 || min[i] != 0) limit = 1;
		}

	// make-table
	var t = 0;
	var ta = d.createElement(tag[0]);
	if (tab) make_table_tab(ta);

	// data-list
	var j = 0;
	for (var i=0; i<carr.length; i++) {
		var ca = carr[i].split(/,/);	// red,ff0000,255,0,0

		// limit R-G-B
		if (limit) {
			for (var k=2; k<=4; k++) ca[k] = Number(ca[k]);	// number
			if (ca[2] > max[0] || ca[3] > max[1] || ca[4] > max[2] ||
				ca[2] < min[0] || ca[3] < min[1] || ca[4] < min[2]) continue;
		}

		// pause
		if (j % line == 0 && j) {
			dt.appendChild(ta);
			ta = d.createElement(tag[0]);
			if (tab) make_table_tab(ta);
		}
		j++;

		if (tag[1]) var tr = d.createElement(tag[1]);	// tr

		// background-color
		var td1 = d.createElement(tag[2]);
		td1.appendChild(d.createTextNode(ca[1]));
		td1.setAttribute('title', '#' + ca[1]);
		td1['style']['background'] = ca[0];

		var clr = font ? font : ca[0];
		td1['style']['color'] = clr;
		(tag[1]) ? tr.appendChild(td1) : ta.appendChild(td1);

		// color
		var td2 = d.createElement(tag[3]);
		td2.appendChild(d.createTextNode(ca[0]));
		td2.setAttribute('title', ca[0]);
		if (color) td2['style']['color'] = ca[0];
		(tag[1]) ? tr.appendChild(td2) : ta.appendChild(td2);

		if (tag[1]) ta.appendChild(tr);	// tr
	}
	dt.appendChild(ta);
}


// sort-system
function hikaku(a, b) {
	var aa = a.split(/,/);
	var an = (aa[xyz[0]] - 0) * 1000 * 1000 + (aa[xyz[1]] - 0) * 1000 + (aa[xyz[2]] - 0);
	var ba = b.split(/,/);
	var bn = (ba[xyz[0]] - 0) * 1000 * 1000 + (ba[xyz[1]] - 0) * 1000 + (ba[xyz[2]] - 0);
	return (rev) ? (an - bn) : (bn - an);
}


// table-tab
function make_table_tab(ta) {
	if (tag[1]) var tr = d.createElement(tag[1]);	// tr

	var td1 = d.createElement(tag[2]);
	td1.appendChild(d.createTextNode(tabkey[0]));
	td1.setAttribute('class', 'tab');
	td1.className = 'tab';
	(tag[1]) ? tr.appendChild(td1) : ta.appendChild(td1);

	var td2 = d.createElement(tag[3]);
	td2.appendChild(d.createTextNode(tabkey[1]));
	td2.setAttribute('class', 'tab');
	td2.className = 'tab';
	(tag[1]) ? tr.appendChild(td2) : ta.appendChild(td2);

	if (tag[1]) ta.appendChild(tr);	// tr
}


// font-color-on ?
function font_color_on() {
	var dt = d.getElementById('table');
	var dfc = d.forms['colors'];
	var color = (dfc['color'] && dfc['color'].checked == true) ? 1 : 0;
	var tts = dt.getElementsByTagName(tag[3]);
	var ie = 0;
	if (navigator.appName == 'Microsoft Internet Explorer' && !window.opera) ie = 1;

	for (var i=0; i<tts.length; i++) {
		var j = tts[i];
		j['style']['color'] = (color && j['title']) ? j['title'] : (ie) ? '' : 'inherit';
	}
}


// back_font_color ?
function back_font_color() {
	var dt = d.getElementById('table');
	var dfc = d.forms['colors'];
	var font = (dfc['font'] && dfc['font'].value) ? dfc['font'].value : 0;
	var tts = dt.getElementsByTagName(tag[2]);

	for (var i=0; i<tts.length; i++) {
		var j = tts[i];
		j['style']['color'] = (font) ? font : j['title'] ? j['title'] : '';
	}
}
