// Configuración
startColor = "#FFFFFF"; // Color al sacar el mouse
endColor = "#FFE2EE"; // FFE2EE, "#D0DEF6";Color al pasar el mouse
stepIn = 20; // retraso de fade in
stepOut = 20; // retraso de fade out

// No modificar nada a partir de aquí.
hexa = new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');

startColor = dehexize(startColor.toLowerCase());
endColor = dehexize(endColor.toLowerCase());

var fadeId = new Array();

function dehexize(Color) {
	var colorArr = new makearray(3);
	for (i=1; i<7; i++){
		for (j=0; j<16; j++){
			if (Color.charAt(i) == hexa[j]){
				if (i%2 !=0)
					colorArr[Math.floor((i-1)/2)]=eval(j)*16;
				else
					colorArr[Math.floor((i-1)/2)]+=eval(j);
			}
		}
	}
	return colorArr;
}

/*
function domouseover() {
	if (document.all) {
		var srcElement = event.srcElement;
		fade(startColor,endColor,srcElement.uniqueID,stepIn);
		return true;
	}
}

function domouseout() {
	if (document.all){
		var srcElement = event.srcElement;
		fade(endColor,startColor,srcElement.uniqueID,stepOut);
		return true;
	}
}
*/

function makearray(n) {
	this.length = n;
	for(var i = 1; i <= n; i++)
		this[i] = 0;
	return this;
}

function hex(i) {
	if (i < 0)
		return "00";
	else if (i > 255)
		return "ff";
	else
		return "" + hexa[Math.floor(i/16)] + hexa[i%16];
}

function setColor(r, g, b, elementId) {
	var hr = hex(r);
	var hg = hex(g);
	var hb = hex(b);
	element=document.getElementById(elementId);
if (!element) alert(elementId);
	element.style.backgroundColor = "#"+hr+hg+hb;
}

function fade(s,e, element,step) {
	var sr = s[0]; var sg = s[1]; var sb = s[2];
	var er = e[0]; var eg = e[1]; var eb = e[2];

	if (fadeId[0] != null && fade[0] != element.id) {
		setColor(sr,sg,sb,fadeId[0]);
		var i = 1;
		while(i < fadeId.length) {
			clearTimeout(fadeId[i]);
			i++;
		}
	}

	if (!element.id) {
		do {
			uniqId=Math.random()*1000;
		} while (document.getElementById(uniqId));
		element.id=uniqId;
	}

	for(var i = 0; i <= step; i++) {
		nr=Math.floor(sr*((step-i)/step)+er*(i/step))
		ng=Math.floor(sg*((step-i)/step)+eg*(i/step))
		nb=Math.floor(sb*((step-i)/step)+eb*(i/step))
		fadeId[i+1]=setTimeout("setColor("+nr+","+ng+","+nb+","+element.id+");",i*step);
	}
	fadeId[0] = element.id;
}

function Fover(ev,me) {
  // t contiene el elemento para el cual se dispara el evento
  if (ev.target) t=ev.target; else t=ev.srcElement;
  // ref contiene el elemento del que viene el ratón
  if (ev.relatedTarget) ref=ev.relatedTarget; else ref=ev.fromElement;
  // Si el elemento para el que se dispara el evento es el elemento al que se
  // asignó manualmente el evento original o si es alguno de sus hijos
  // ejecuto el código asociado
  if ((me==t)||contains(me,t))
	// Si el elemento para el que se dispara el evento no es el elemento del
	// que viene el puntero del ratón ni es un elemento hijo ejecuto el código
    // asociado
    if (me!=ref&&!contains(me,ref)) {
      fade(startColor,endColor,me,stepIn);
    }
}

function Fout(ev,me) {
  if (ev.target) t=ev.target; else t=ev.srcElement;
  if (ev.relatedTarget) ref=ev.relatedTarget; else ref=ev.toElement;
  if ((me==t)||contains(me,t))
  if (me!=ref&&!contains(me,ref)) {
    fade(endColor,startColor,me,stepOut);
  }
}

function contains(a, b) {
  if (!b) return false;
  if (a.contains) return a.contains(b);
  while (b.parentNode)
    if ((b = b.parentNode) == a)
      return true;
  return false;
}
