function hsb2rgb(h,s,b){
	if (s == 0) return [b,b,b]; 		// grau
	
	h = (((h%1)+1)%1)*6;				// sichergehen, daß nur gültige werte verwendet werden
	s = clip01(s);
	b = clip01(b);
	
	var i = Math.floor(h);				// sektor 0 bis 5
	
	var f = h - i;// factorial part of h
	var p = b * ( 1 - s );
	var q = b * ( 1 - s * f );
	var t = b * ( 1 - s * ( 1 - f ) );
	
	var r,g,b;
	
	if (i==0) {r = b; g = t; b = p;}
	if (i==1) {r = q; g = b; b = p;}
	if (i==2) {r = p; g = b; b = t;}
	if (i==3) {r = p; g = q; b = b;}
	if (i==4) {r = t; g = p; b = b;}
	if (i==5) {r = b; g = p; b = q;}
	
	return [r,g,b];
}

function clip01(zahl) {
	return Math.max(0.0, Math.min(1.0, zahl));
}

function toHex(integer, stellen) {
	var hex = (integer).toString(16);
	if (stellen) 						//für längere zahlen
		hex = ("0000000000").substring(0, Math.max(0, stellen - hex.length)) + hex;
	else if (integer < 16) 				//kleine zahlen sind mindestens zwei zeichen breit
		hex = "0" + hex;
	return(hex);
}

function hsb2rgbstring(hue,sat,bri) {
	rgb = hsb2rgb(hue,sat,bri);

	rI = Math.floor(rgb[0] * 255);
	gI = Math.floor(rgb[1] * 255);
	bI = Math.floor(rgb[2] * 255);
	
	return (toHex(rI) + toHex(gI) + toHex(bI));
}

function rgb2string(r,g,b) {
	rI = Math.floor(r * 255);
	gI = Math.floor(g * 255);
	bI = Math.floor(b * 255);
	
	return (toHex(rI) + toHex(gI) + toHex(bI));
}
