
function createHexArray(n) {
	this.length = n;
	for (var i = 1; i <= n; i++) {
		this[i] = i - 1;
	}
	this[11] = "A";
	this[12] = "B";
	this[13] = "C";
	this[14] = "D";
	this[15] = "E";
	this[16] = "F";
	return this;
}

function convertToHex(x) {
	var hx = new createHexArray(16);
	
	if (x < 17) x = 16;
	var high = x / 16;
	var s = high+"";
	s = s.substring(0, 2);
	high = parseInt(s, 10);
	var left = hx[high + 1];
	var low = x - high * 16;
	if (low < 1) low = 1;
	s = low + "";
	s = s.substring(0, 2);
	low = parseInt(s, 10);
	var right = hx[low + 1];
	var string = left + "" + right;
	return string;
}

function rainbowStyle(text) {
	var spektrumLength = 259;
	var i = 0;
	var rainbowText = '';
	var restBuchstaben = 0
	var color_d1 = 255;
	var mul = color_d1 / spektrumLength;
	for(var a = 0; a < text.length; a++) {

		color_d1 = 255 * Math.sin(i / (spektrumLength/ 30));
		color_h1 = convertToHex(color_d1);
		color_d2 = mul * i;
		color_h2 = convertToHex(color_d2);

		restBuchstaben = spektrumLength - i;
		if (restBuchstaben < 0) restBuchstaben = spektrumLength;
		color_d3 = mul * restBuchstaben;
		color_h3 = convertToHex(color_d3);
		rainbowText += '<span style="color: #' + color_h3 + color_h1 + color_h2 + ';">' + text.substring(i, i + 1) + "</span>";
		i++;
		if (i > spektrumLength) i = 0;
	}
	return rainbowText;
}