// Funkcje konwertujace opis koloru w formacie 'rgb(r, g, b)' oraz '#rgb' lub '#rrggbb'
// na wartosc numeryczna zapisana tekstowo jako liczba hexadecymalna

function value2hex(val) {
	if (typeof(val) == 'undefined' || typeof(val) == 'unknown' || typeof(val) == 'string' && val.length == 0) {
		return '0';
	}
	if (val.charAt(0) == '#') {
		return hash2hex(val);
	}
	if (val.substr(0, 3) == 'rgb') {
		return rgb2hex(val);
	}
	return '0';
}

function hash2hex(val) {
	var r1 = /^#([0-9a-fA-F]{6})$/;
	var r2 = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;
	if (val.match(r1)) {
		return val.replace(r1, '$1');
	}
	if (val.match(r2)) {
		return val.replace(r2, '$1$1$2$2$3$3');
	}
	return '0';
}

function digit2hex(digit) {
	if (digit < 0)
		return 0;
	else if (digit >= 0 && digit <= 9)
		return new String(digit);
	return String.fromCharCode(87 + digit);
}

function dec2hex(dec) {
	var msd = dec >> 4;
	var lsd = dec - (msd << 4);
	if (msd == 0) return digit2hex(lsd);
	return dec2hex(msd) + digit2hex(lsd);
}

function rgb2hex(val) {
	var re = /^rgb[(](\d+), (\d+), (\d+)[)]$/;
	if (val.match(re)) {
		var r = dec2hex(Number(val.replace(re, "$1"))); if (r.length < 2) r = '0' + r;
		var g = dec2hex(Number(val.replace(re, "$2"))); if (g.length < 2) g = '0' + g;
		var b = dec2hex(Number(val.replace(re, "$3"))); if (b.length < 2) b = '0' + b;
		return r + g + b;
	}
	return '0';
}
