// JavaScript Document

function getColorComponents(numero)
{
	var res = new Array();

	res[0] = parseInt("0x" + numero.substr(0, 2));
	res[1] = parseInt("0x" + numero.substr(2, 2));
	res[2] = parseInt("0x" + numero.substr(4, 2));

	return res;
}

function getGradientComponent(n1, n2, z)
{		
	var i = 0;
	var n = 0;
	var res = new Array();

	n = (n1 - n2) / (z - 1);

	for(i = 0; i < z; i++)
	{
		res[i] = n2 + (n * ((z - 1) - i));
		res[i] = Math.floor(res[i]);
		res[i] = res[i].toString(16);

		if(res[i].length < 2) res[i] = "0" + res[i];
	}

	return  res;
}

function getGradientColours(firstColor, lastColor, gradientZones)
{
	var components1 = getColorComponents(firstColor);
	var components2 = getColorComponents(lastColor);

	var i = 0;
	var colors = new Array();
	var res = new Array();

	for(i = 0; i < components1.length; i++)
	{
		colors[i] = getGradientComponent(components1[i], components2[i], gradientZones);		
	}
	
	for(i = 0; i < gradientZones; i++)
	{
		res[i] = colors[0][i] + colors[1][i] + colors[2][i];
	}

	return res;	
}

function getGradientMiltiColours(colours, total)
{
	var res = new Array();	
	var temp = new Array();
	
	var gradientZones = Math.floor(total / (colours.length - 1));
	
	for(var i = 0; i < (colours.length - 1); i++)
	{
		temp = getGradientColours(colours[i], colours[i + 1], gradientZones);
		
		// Si no es el primer cálculo de colores, quitamos el primer elemento para evitar repeticiones.
		if(i != 0)
		{
			temp.shift();
		}
		
		res = res.concat(temp);
	}
	
	var toAdd = (total - res.length);
	
	/*
		Si queda un número par de colores por añadir, añadimos la mitad al inicio y la mitad al final.
		Si no, restamos uno, añadimos la mitad al principio y la mitad al final, y finalmente uno más al final.
	*/
	
	var repeatLast = false;
	if(toAdd % 2 != 0)
	{
		toAdd --;
		repeatLast = true;
	}
	
	var i = 0;
	toAdd = toAdd / 2;
	while(i < toAdd)
	{
		res.unshift(res[0]);
		res.push(res[res.length - 1]);
		i++;
	}
	
	if(repeatLast == true)
	{
		res.push(res[res.length - 1]);
	}
	
	return res;
}