var rgbToHsl = function(r, g, b){
	r /= 255, g /= 255, b /= 255;
	var max = Math.max(r, g, b);
	var min = Math.min(r, g, b);
	var h, s, l = (max + min) / 2;

	if(max == min){
		h = s = 0; // achromatic
	}else{
		var d = max - min;
		s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
		switch(max){
			case r: h = (g - b) / d + (g < b ? 6 : 0); break;
			case g: h = (b - r) / d + 2; break;
			case b: h = (r - g) / d + 4; break;
		}
		h /= 6;
	}

	return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];
};

var hslToRgb = function(h, s, l){
	h /= 360, s /= 100, l /= 100;
	var r, g, b;

	if(s == 0){
		r = g = b = l; // achromatic
	}else{
		function hue2rgb(p, q, t){
			if(t < 0) t += 1;
			if(t > 1) t -= 1;
			if(t < 1/6) return p + (q - p) * 6 * t;
			if(t < 1/2) return q;
			if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
			return p;
		};

		var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
		var p = 2 * l - q;
		r = hue2rgb(p, q, h + 1/3);
		g = hue2rgb(p, q, h);
		b = hue2rgb(p, q, h - 1/3);
	}

	return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
};

var cssToRgb = function(css){
	var rgb = new Array();
	if(css.search('#') > -1){
		switch(css.length){
			case 4:
				rgb[0] = parseInt(css.substring(1,2) + css.substring(1,2), 16);
				rgb[1] = parseInt(css.substring(2,3) + css.substring(2,3), 16);
				rgb[2] = parseInt(css.substring(3,4) + css.substring(3,4), 16);
				break;
			case 7:
				rgb[0] = parseInt(css.substring(1,3), 16);
				rgb[1] = parseInt(css.substring(3,5), 16);
				rgb[2] = parseInt(css.substring(5,7), 16);
				break;
		}
	} else if(css.search('rgb') > -1) {
		rgb = css.replace('rgb(','').replace(')','').split(", ");
	}
	return rgb;
};