fullcolorpicker = false;
simplecolorpicker = false;

function buildColorPickers() {
	if (!fullcolorpicker) {
		fullcolorpicker = document.createElement('div');
		}
	if (!simplecolorpicker) {
		simplecolorpicker = document.createElement('div');
// 		simplecolorpicker.setAttribute('id','colorpicker_div');
// 		simplecolorpicker.style.zIndex = 2000;
// 		
// 		spa0 = document.createElement('a');
// 		spa0.setAttribute('href','select_a_color()');
// 		spa0.setAttribute('onclick','registercolor()');
// 		simplecolorpicker.appendChild(spa0);
// 		spimg0 = document.createElement('img');
// 		spimg0.src = "/_root/_lib2/images/colors/colorbar.gif";
// 		spimg0.style.border = '0px';
// 		spimg0.style.width = '16px';
// 		spimg0.style.height = '16px';
// 		spa0.appendChild(spimg0);
// 		br = document.createElement('br');
// 		simplecolorpicker.appendChild(br);
// 		spa1 = document.createElement('a');
// 		spa1.setAttribute('href','select_a_color()');
// 		spa1.setAttribute('onclick','registerandsetcolor()');
// 		simplecolorpicker.appendChild(spa1);
// 		spimg0 = document.createElement('img');
// 		spimg0.src = "/_root/_lib2/images/colors/colorbaricon.gif";
// 		spimg0.style.border = '0px';
// 		spimg0.style.width = '16px';
// 		spimg0.style.height = '16px';
// 		spa1.appendChild(spimg0);
// 		document.body.appendChild(simplecolorpicker);
	}
}
function setcolor(h,l,s,div,field,x,y) {
	h /= 360.0;
	rgb = hls_2_rgb(h,l,s)
	hex = _rgb_2_hex(rgb[0], rgb[1], rgb[2]);
	changeproperty(div,'','style.background',hex,'div');
	changeproperty(field,'','value',hex);
	if ((!x)&&(hlx)) x = hlx;if ((!y)&&(hly)) y = hly;
	expertpanel(h*360,l,s,hex,x,y);
	if (colorpick==3) _setsaturationmarker(s);
	}
function expertpanel(h,l,s,hex,x,y) {
	xpertf = new Array('hval','lval','sval','hexval','xval','yval');
	if (h<0) h+=360;
	xrgb = hls_2_rgb(h/360.0,l+(1-l)/2,s);
	bckcol = _rgb_2_hex(xrgb[0], xrgb[1], xrgb[2]);
	changeproperty('hval','','value',Math.round(h));
	changeproperty('lval','','value',(Math.round(100*l))/100);
	changeproperty('sval','','value',(Math.round(100*s))/100);
	changeproperty('hexval','','value',hex.toUpperCase());
	changeproperty('xval','','value',x);
	changeproperty('yval','','value',y);
	for (i=0;i<xpertf.length;i++) changeproperty(xpertf[i],'','style.backgroundColor',bckcol);
	}
function setfullcursorposition() {
	hex = getproperty(cp_field,'value');
	rgb = _hex_2_rgb(hex);
	hls = _rgb_2_hls(rgb.r,rgb.g,rgb.b);
	hlx = Math.round(ccr*(1-hls.l)*Math.cos(Math.PI*hls.h/180));
	hly = Math.round(ccr*(1-hls.l)*Math.sin(Math.PI*hls.h/180));
	expertpanel(hls.h,hls.l,hls.s,hex,hlx,hly);
	_setfullcolorcursor();
	_setfullcolormarker();
	_setsaturationcursor();
	_setsaturationmarker();
	return hls;
	}
function _setfullcolorcursor() {
	cc = findobject('colorcircle');
	if (colorpick == 0) cc.style.cursor='auto';
	else cc.style.cursor='crosshair';
	}
function _setfullcolormarker() {
	if ((colorpick==2)||(colorpick<0)) showhideobject(marker_hl,'','hide');
	else showhideobject(marker_hl,'','show');
	changeproperty(marker_hl,'','style.left',(ccx + ccr + hlx - 10) + 'px');
	changeproperty(marker_hl,'','style.top',(ccy + ccr - hly - 10) + 'px');
	}
function _setsaturationcursor() {
	if (colorpick == 0) sb.style.cursor='auto';
	else sb.style.cursor='auto';
	}
function _setsaturationmarker() {
	if (_setsaturationmarker.arguments.length>0) sat=_setsaturationmarker.arguments[0];
	else sat = hls.s
	if (colorpick < 0) showhideobject(marker_s,'','hide');
	else showhideobject(marker_s,'','show');
	changeproperty(marker_s,'','style.left',(sbx-2) + 'px');
	changeproperty(marker_s,'','style.top',(sby + (1-sat)*sbh - 10) + 'px');
	}
function registerandsetcolor() {
	_set_onmousemove();
	colorpick = 0;
	showhideobject(cp_pick,'','hide');
	newcolor = getproperty(cp_field,'value');
	updateinputbackcolor(cp_div,newcolor);
// 	changeproperty(cp_div,'','style.background',newcolor);
// 	divobj = findobject(cp_div);
// 	cptds = divobj.getElementsByTagName('td');
// 	for (i=0;i<cptds.length;i++) cptds[i].style.backgroundColor = newcolor
	}
function registerandsetfullcolor() {
	colorpick = -1;
	_setfullcolormarker();
	_setsaturationmarker();
	_set_onmousemove();
	colorpick = 0;
	showhideobject(cp_pick,'','hide');
	newcolor = getproperty(cp_field,'value');
	updateinputbackcolor(cp_div,newcolor);
// 	divobj = findobject(cp_div);
// 	cptds = divobj.getElementsByTagName('td');
// 	for (i=0;i<cptds.length;i++) cptds[i].style.backgroundColor = newcolor
// 	changeproperty(cp_div,'','style.backgroundColor',newcolor);
	}
function updateinputbackcolor(div,newcolor) {
	divobj = findobject(div);
	cptds = divobj.getElementsByTagName('td');
	for (i=0;i<cptds.length;i++) cptds[i].style.backgroundColor = newcolor
	changeproperty(div,'','style.backgroundColor',newcolor);
	}
function registercolor() {
	colorpick = colpickers[colorpick];
	_set_onmousemove();
	cp_xpos = parseInt(getproperty(cp_pick,'style.left'));
	cp_ypos = getproperty(cp_pick,'style.top');
	}
function registersaturatecolor() {
	colorpick = fullsatcolpickers[colorpick];
	_set_onmousemove();
	cp_ypos = sby + cpy;
	setfullcursorposition()
	}
function registerfullcolor() {
	colorpick = fullcolpickers[colorpick];
	_setfullcolorcursor();
	_setfullcolormarker();
	_set_onmousemove();
	cp_xpos = ccx + cpx;
	cp_ypos = ccy + cpy;
	setfullcursorposition()
	}
colorpick = 0;
colpickers = new Array(1,0,1,1)
fullcolpickers = new Array(2,2,0,2)
fullsatcolpickers = new Array(3,3,3,0)
function undocolor(div,a,b){ 
	newcolor = getproperty(b,'value');
	changeproperty(a,'','value',newcolor);
	changeproperty(div,'','style.background',newcolor);
	updateinputbackcolor(div,newcolor);
	}
function selectcolor(hls_l, hls_s, colorpicker, div, field){
	buildColorPickers()
	showhideobject('fullcolorpicker_div','','hide');
	showhideobject('colorpicker_div','','hide');
	cp_l = parseFloat(hls_l);
	cp_s = parseFloat(hls_s);
	cp_div = div;
	cp_field = field;
	cp_pick = colorpicker;
	
	// Simulate hls adjusted color bar:
	
	cburl = '/_root/_lib2/py/colorpickerbar//l-'+cp_l+'/s-'+cp_s;
	requestColorBar(cburl);
// 	cl = '00'+parseInt(cp_l*10);
// 	cs = '00'+parseInt(cp_s*10);
// 	cl = cl.substr(cl.length-2)
// 	cs = cs.substr(cs.length-2)
// 	cb = '/_root/_lib2/images/_colorpickerbar/cb'+cl+cs+'.jpg'
// 	colorbar.src = cb;
	
	
	showhideobject(cp_pick,'','show');
	changeproperty(cp_pick,'','style.background',getproperty(cp_field,'value'));
	changeproperty(cp_pick,'','style.left',(clickx-16) + 'px');
	changeproperty(cp_pick,'','style.top',(clicky-16) + 'px');
	registercolor();
	}
function selectfullcolor(colorpicker, div, field){
	cp_div = div;
	cp_field = field;
	cp_pick = colorpicker;
	marker_hl = findobject('fullcolorpicker_div_colormark_hl');
	marker_s = findobject('fullcolorpicker_div_colormark_s');
	
	cpx = clickx-10;
	cpy = clicky-10
	changeproperty(cp_pick,'','style.background',getproperty(cp_field,'value'));
	changeproperty(cp_pick,'','style.left',cpx + 'px');
	changeproperty(cp_pick,'','style.top',cpy + 'px');

	cc = findobject('colorcircle');
	ccx = objectXXpos(cc) - cpx;
	ccy = objectYYpos(cc) - cpy;
	ccr = cc.width/2;
	sb = findobject('saturationbar');
	sbx = objectXXpos(sb) - cpx;
	sby = objectYYpos(sb) - cpy;
	sbh = sb.height;
	sbw = sb.width;

	hls = setfullcursorposition();
	showhideobject('fullcolorpicker_div','','hide');
	showhideobject('colorpicker_div','','hide');
	cp_h = hls.h;
	cp_l = hls.l;
	cp_s = hls.s;
	showhideobject(cp_pick,'','show');
	}

function objectXXpos(o) {
if ((obj=findobject(o))!=null) {
cx = (obj.offsetParent)?0:(obj.x)?obj.x:0;
if (obj.offsetParent) { while (obj.offsetParent) {cx += obj.offsetLeft;obj = obj.offsetParent;}}
return cx;
}
}
function objectYYpos(o) {
if ((obj=findobject(o))!=null) {
cy = (obj.offsetParent)?0:(obj.x)?obj.x:0;
if (obj.offsetParent) { while (obj.offsetParent) {cy += obj.offsetTop;obj = obj.offsetParent;}}
return cy;
}
}
function objectXX(obj) {
if (obj) {
var cx = 0;
if (obj.offsetParent) {
while (obj.offsetParent){
cx += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x) cx = obj.x;
return cx;
}
}
function select_bw(div, field, backcolor){
	showhideobject('fullcolorpicker_div','','hide');
	showhideobject('colorpicker_div','','hide');
	updateinputbackcolor(div,backcolor);
	//changeproperty(div,'','style.background',backcolor);
	changeproperty(field,'','value',backcolor);
	}

/* Ghost functions start */
function select_black(){}
function select_white(){}
function select_a_color(){}
function undo(){}
/* Ghost functions end */

function _set_onmousemove() {
	if (colorpick <= 0) {
		if (save_onmousemove) { document.onmousemove = save_onmousemove; }
		}
	else {
		if ( (ns4) || (ie4) || (ns6)) {
			if (document.onmousemove) { save_onmousemove = document.onmousemove; }
			else { save_onmousemove = ''; }
			document.onmousemove = colorpick_movehandler;
			if (ns4) { document.captureEvents(Event.MOUSEMOVE); }
			}
		}
	}

var ns4 = (navigator.appName == 'Netscape' && parseInt(navigator.appVersion) == 4);
var ns6 = (document.getElementById)? true:false;
var ie4 = (document.all)? true:false;

function colorpick_movehandler(e){
	if (is.ns) {
		movex = e.pageX;
		movey = e.pageY;
		}
	if (is.ie) {
		movex = parseInt(event.x);
		movey = parseInt(event.y);
		}
	if (colorpick==1) {
		hlx = false;
		hly = false;
		cp_h = movex - cp_xpos;
		if ((360 < cp_h) || (cp_h < 0)) { colorpick = 0; cp_h = 0; }
		setcolor(cp_h, cp_l, cp_s, cp_pick, cp_field);
		}
	else if (colorpick==2) {
		hlx = parseFloat((movex - cp_xpos) - ccr);
		hly = parseFloat(ccr - (movey - cp_ypos));
		if (hlx != 0) {  cp_h = parseInt(180*Math.atan(hly/hlx)/Math.PI); }
		else { 
			cp_h = 90;
			if (hly < 0) { cp_h += 180; }
			}
		cp_l = 1.0 - Math.sqrt(hly*hly + hlx*hlx)/ccr;
		if (cp_l < 0.0) { colorpick = 0; cp_l = 0.0 ;setfullcursorposition(); }
		if (hlx < 0) { cp_h += 180; }
		setcolor(cp_h, cp_l, cp_s, cp_pick, cp_field, hlx, hly);
		}
	else if (colorpick==3) {
		s = 1 - (movey - cp_ypos)/100.0;
		if (1.0 < s) { colorpick = 0; cp_s = 1.0; }
		else if (s < 0.0) { colorpick = 0; cp_s = 0.0; }
		else { cp_s = s; }
		setcolor(cp_h, cp_l, cp_s, cp_pick, cp_field);
		}
	}
function requestColorBar() {
	if (navigator.appName == "Microsoft Internet Explorer") req = new ActiveXObject("Microsoft.XMLHTTP");
	else req = new XMLHttpRequest(cburl);
	req.onreadystatechange = checkCbRequestResponse;
	req.open("GET", cburl, true);
	req.send(null);
	}

function checkCbRequestResponse() {
	if (req.readyState == 4) {
		response = req.responseText;
		processRawCbSrc(response);
		}
	}
function processRawCbSrc(input) {
	var start = '';
	var end = '';
	startstring = '<!--gethtmlupdatestart-->';
	resultsIndex = input.indexOf(startstring);
	colorbarImage = findobject('simplecolorpickerbar');
	if (resultsIndex > -1) {
		start = resultsIndex + startstring.length;
		end = input.indexOf("<!--gethtmlupdateend-->");
		output = input.substring(start, end);
		if (output) colorbarImage.src = output;
		}
	}
document.onmousedown = coordcheck;
var save_onmousemove;
function coordcheck(e) {
	if (is.ns) {
		clickx = e.pageX;
		clicky = e.pageY;
		}
	if (is.ie) {
		clickx = parseInt(event.x);
		clicky = parseInt(event.y);
		}
	}

function BrowserCheck() {
	var b = navigator.appName
	if (b=="Netscape") this.b = "ns"
	else if (b=="Microsoft Internet Explorer") this.b = "ie"
	else this.b = b
	this.version = navigator.appVersion
	this.v = parseInt(this.version)
	this.ns = (this.b=="ns" && 4<=this.v)
	this.ns4 = (this.b=="ns" && this.v==4)
	this.ns5 = (this.b=="ns" && this.v==5)
	this.ie = (this.b=="ie" && 4<=this.v)
	this.ie4 = (this.version.indexOf('MSIE 4')>0)
	this.ie5 = (this.version.indexOf('MSIE 5')>0)
	this.min = (this.ns||this.ie)
}
is = new BrowserCheck()

/* If 0 < colorpick: let colorpick_movehandler be document.onmousemove */
/* Solve outside - other javascripts (eg. overlib) is also using document.onmousemove */
/* 	document.onmousemove = colorpick_movehandler; */

