/*****************************************\
||       Fade Script Version 3.1         ||
||   http://anarchos.xs.mw/fade.phtml    ||
||            (c) July 2001              ||
|| _____________________________________ ||
|| Created by:                           ||
|| Anarchos    > anarchos.xs.mw          ||
|| _____________________________________ ||
|| auto-startColor by Mike West          ||
|| mike@westman.org                      ||
|| _____________________________________ ||
|| uniqueID upgrade by DubMatrix         ||
|| http://www.princefari.com             ||
|| _____________________________________ ||
|| Color conversion from decimal to      ||
|| hex (dehexize function) by:           ||
|| Litejet > litejet@hotmail.com         ||
|| _____________________________________ ||
|| Fade, hex, setColor functions by:     ||
|| Dak Phoenix > phoenix-archetypes.com  ||
|| _____________________________________ ||
|| domouseover/out based on scripts by   ||
|| The Shadow  > www.icon.co.za/~andrewk ||
|| _____________________________________ ||
|| Browser compatibility by DavVv        ||
|| http://www.paradiz-portal.com         ||
||                                       ||
\*****************************************/

/*************
**** <config>
**/

fadeColor = "#02BE02";  // color to fade to
//fadeColor = "#0";
stepIn = 15; // delay when fading in
stepOut = 15; // delay when fading out

/* set to true or false; true will
** cause all links to fade automatically
** (you won't need to add class="fade")
***/
autoFade = true;  

/* set to true or false; true will cause all CSS
** classes with "fade" in them to fade onmouseover
***/
sloppyClass = false;

/* set to true or false; true will make the script
** work for Macs (IE 5+), but you will have to give
** a name (name="blah") to each link that you want
** to fade.
***/
macCompat = false;

/* DON'T TOUCH TO THIS ONE
** it will give a uniqueID to each link
** in order to make it Firefox Compatible
***/
n_link = 0;

/** 
**** </config>
**************/

/*************
**** <install>
**

Now, once you have customized your fading colors,
you need to include your customized .js file on
every page that you want to use it in. You can
include javascript files using this syntax (in
the head of a document):

<script src="fade.js" language="Javascript"></script>

Now that you have the file included, you need to
setup your links a small bit.  Each link that you
want to fade needs to use the fade class.

Example:

<a href="blah.html" class="fade">click here</a>

Also, the link must be plain text.  This means
that you can't have <b>'s, <i>'s, <font>'s, etc.
inside of the link.

Example of what not to do:

<a href="blah.html" class="fade"><b>click</b> here</a>

Have fun!
-Anarchos-

** 
**** </install>
**************/

hexa = new makearray(16);
for(var i = 0; i < 10; i++)
    hexa[i] = i;
hexa[10]="a"; hexa[11]="b"; hexa[12]="c";
hexa[13]="d"; hexa[14]="e"; hexa[15]="f";

//document.onmouseover = domouseover;
//document.onmouseout = domouseout;

if (window.addEventListener)
{
	document.addEventListener("mouseover",domouseover,false);
	document.addEventListener("mouseout",domouseout,false);
}
else if (window.attachEvent)
{	
	document.attachEvent("onmouseover", domouseover);
	document.attachEvent("onmouseout", domouseout);
}

fadeColor = dehexize(fadeColor.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(e) {	
	var srcElement;
	if(document.all) {
		srcElement = event.srcElement;
	}
	else {
		if (e) {
			/*var node = e.target;				
			while(node.nodeType != node.ELEMENT_NODE)
				node = node.parentNode;
			srcElement = node;*/
			srcElement = e.target;
		}
	}
		
	if (srcElement) {		
		if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {			
			if (!srcElement.endColor) {
				srcElement.endColor = Get_endColor(srcElement.className);				
				if (window.getComputedStyle) {
					var startColor = Get_startColor(srcElement.className);
					srcElement.startColor = window.getComputedStyle(srcElement, null).getPropertyValue('color');
					srcElement.startColor = convertToHexColor(srcElement.startColor);			
					srcElement.startColor = (srcElement.startColor.toLowerCase()==srcElement.endColor.toLowerCase()) ? startColor : srcElement.startColor;
				}
				else {
					srcElement.startColor = (srcElement.style.color)? srcElement.style.color: srcElement.currentStyle.color;
				}					
				srcElement.startColor = dehexize(srcElement.startColor.toLowerCase());
				srcElement.endColor = dehexize(srcElement.endColor.toLowerCase());
				srcElement.id = (srcElement.id ? srcElement.id: "ff_uniqueID_fadinglink_"+n_link);
				n_link = n_link + 1;
			}				
			var elt = srcElement.id; //(macCompat? srcElement.name: srcElement.uniqueID);
			if (elt) fade(srcElement.startColor,srcElement.endColor,elt,stepIn);
			//else if (macCompat) alert("Error: Mac Compatility mode enabled, but link has no name.");					
		}	
	}
}

function domouseout(e) {
	var srcElement;
	if(document.all) {
		srcElement = event.srcElement;
	}
	else {
		srcElement = e.target;
	}	
	
	if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
		var elt = (srcElement.id) ? srcElement.id : ""; //(macCompat? srcElement.name: srcElement.uniqueID);
		if (elt) fade(srcElement.endColor,srcElement.startColor,elt,stepIn);
	}
}

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, element) {
      var hr = hex(r); var hg = hex(g); var hb = hex(b);
	  if (document.getElementById(element)) document.getElementById(element).style.color = "#"+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];		
	
	for(var i = 0; i <= step; i++) {
		var r = Math.floor( sr*( ( step - i )/ step ) + er * (i/step) );
		var g = Math.floor( sg*( ( step - i )/ step ) + eg * (i/step) );
		var b = Math.floor( sb*( ( step - i )/ step ) + eb * (i/step) );
		clearTimeout(fadeId[i+1]);
		fadeId[i+1] = setTimeout("setColor('"+r+"','"+g+"','"+b+"','"+element+"');",i*step);
		//if (i==0) alert("setColor('"+r+"','"+g+"','"+b+"','"+element+"');",i*step);
	}	

	//if (fadeId[0] != null && fade[0] != element && eval(fadeId[0])) {
	if ( (fadeId[0] != null) && (fadeId[0] != element) ) {
		var orig = document.getElementById(fadeId[0]);
		setColor(orig.startColor[0],orig.startColor[1],orig.startColor[2],fadeId[0]);
		/*var j = 1;
		while(j <= step) {
			clearTimeout(fadeId[j]);
			j++;
		}*/
	}	

	fadeId[0] = element;
}

function convertToHexColor(ss)
{ if (ss.charAt(0) == '#') return ss;
  else if (ss.substring(0,3) == 'rgb')
  { var array = new Array();
    var hex = "0123456789abcdef";
    array = ss.split(',');
    array[0] = array[0].replace(/\D/g,'');
    array[1] = array[1].replace(/\D/g,'');
    array[2] = array[2].replace(/\D/g,'');
    with (Math)
    { var x0 = hex.charAt(floor(array[0] / 16));
      var x1 = hex.charAt(array[0] % 16);
      var x2 = hex.charAt(floor(array[1] / 16));
      var x3 = hex.charAt(array[1] % 16);
      var x4 = hex.charAt(floor(array[2] / 16));
      var x5 = hex.charAt(array[2] % 16);
    }
    return "#" + x0 + x1 + x2 + x3 + x4 + x5;
  }
  else return "#ffffff";
}


