/**<config>**/
fadeColor = "#3399FF";  // color to fade to
//fadeColor = "#0";
stepIn = 10; // delay when fading in
stepOut = 40; // 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 = false;  

/* 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;

/** </config>**/


/*
var agt=navigator.userAgent.toLowerCase();
var is_gecko = (agt.indexOf('gecko') != -1);
var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
if (is_gecko || is_ie)
  {
  ss = document.styleSheets;
  for(ii=0;ii<ss.length;ii++) {
  if (is_gecko) 
    {
    for(i=0;i<ss[0].cssRules.length;i++) {
     
       if (ss[ii].cssRules[i].selectorText.toLowerCase() == ".fade")
          {
          var startColor=ss[ii].cssRules[i].style.color;
  //        alert (startColor);
          re = /([0-9]+), ([0-9]+), ([0-9]+)/;
          z=startColor.match(re);
          var value=0;
          var convert = new Array()
          var hexbase= new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
          for (x=0; x<16; x++){
          for (y=0; y<16; y++){convert[value]= hexbase[x] + hexbase[y];
          value++;
          }
          }
          redx = convert[z[1]]
          greenx = convert[z[2]]
          bluex = convert[z[3]]
          startColor = "#"+redx+greenx+bluex;
          }
    }
    if (!startColor) var startColor='#000000';
    }
  }
}
var my_id=1;
*/



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;

fadeColor = dehexize(fadeColor.toLowerCase());

function FadeObject ()
  {
  this.timers= new Array();
  this.ClearTimers = ClearTimers;
  }

function ClearTimers ()
  {
  var i=0;
  while(i < this.timers.length) {
    clearTimeout(this.timers[i]);
    i++;
    }
  this.timers = Array();    
  }

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) {
	if(document.all || document.getElementById){
	  if (document.all)
	    {
		var srcElement = event.srcElement;
		if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
				if (!srcElement.startColor) {
					srcElement.startColor = (srcElement.style.color)? srcElement.style.color: srcElement.currentStyle.color;
					srcElement.startColor = dehexize(srcElement.startColor.toLowerCase());
				}
				var link = (macCompat? srcElement.name: srcElement.uniqueID);
				if (link) fade(srcElement.startColor,fadeColor,link,stepIn, "in");				
				else if (macCompat) alert("Error: Mac Compatility mode enabled, but link has no name.");
		}
	    }	
	    else
	    {
		var srcElement = e.target;
		if (!srcElement.id)
		  {
                  srcElement.id=my_id;
		  my_id++;
		  }
		if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
				if (!srcElement.startColor) {
					srcElement.startColor = startColor;
					srcElement.startColor = dehexize(srcElement.startColor.toLowerCase());
//					alert (startColor);
				}
				var link = (macCompat? srcElement.name: srcElement.id);
				if (link) fade(srcElement.startColor,fadeColor,link,stepIn, "in");				
				else if (macCompat) alert("Error: Mac Compatility mode enabled, but link has no name.");
		}
	    }
	}
}

function domouseout(e) {
	if (document.all || document.getElementById){
	  if (document.all)
	    {
		var srcElement = event.srcElement;
		if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
			var link = (macCompat? srcElement.name: srcElement.uniqueID);
			if (link) fade(fadeColor,srcElement.startColor,link,stepOut, "out");
		}
	    }	
	    else
	    {
		var srcElement = e.target;
		if (!srcElement.id)
		  {
                  srcElement.id=my_id;
		  my_id++;
		  }
		if ((srcElement.tagName == "A" && autoFade && srcElement.className != "nofade") || srcElement.className == "fade" || (sloppyClass && srcElement.className.indexOf("fade") != -1)) {
			var link = (macCompat? srcElement.name: srcElement.id);
			if (link) fade(fadeColor,srcElement.startColor,link,stepOut, "out");
		}
	    }
	}
}

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.all) element=document.getElementById(element);
      element.style.color = "#"+hr+hg+hb;
}

function fade(s,e,element,step, inout) {
	var sr = s[0]; var sg = s[1]; var sb = s[2];
	var er = e[0]; var eg = e[1]; var eb = e[2];
	var timers = new Array();
//	if (fadeId[0, element] != null && fadeId[0, element] == element && eval(fadeId[0, element])) {
//	        if (document.all)
//	           {
//	           alert (fadeId[0, element]);
//		   var orig = eval(fadeId[0, element]);
//                   setColor(orig.startColor[0],orig.startColor[1],orig.startColor[2],orig);
//		   }
//		   else
//		   {
//                   var orig = fadeId[0];
//		   }


		
//		var i = 1;
//		while(i < fadeId.length) {
//			clearTimeout(fadeId[i, element]);
//			i++;
//		}
//	}
	if (fadeId[element] == null)
	  {
	  fadeId[element] = new FadeObject();
	  }
	if (inout == 'out')
	   {
	   shift=stepIn;
	   }
	   else
	   {
           fadeId[element].ClearTimers();
           var orig = eval(element);
           if (!document.all)
             {
             orig1=document.getElementById(orig);
             setColor(orig1.startColor[0],orig1.startColor[1],orig1.startColor[2],orig);
             }
             else
             {
             
             setColor(orig.startColor[0],orig.startColor[1],orig.startColor[2],orig);
             }
           shift=0;
           }
	for(var i = (0 + shift); i <= (step + shift); i++) {
		fadeId[element].timers[i] = setTimeout("setColor(Math.floor(" +sr+ " *(( " +step+ " - " +i+ " )/ " +step+ " ) + " +er+ " * (" +i+ "/" +
			step+ ")),Math.floor(" +sg+ " * (( " +step+ " - " +i+ " )/ " +step+ " ) + " +eg+ " * (" +i+ "/" +step+
			")),Math.floor(" +sb+ " * ((" +step+ "-" +i+ ")/" +step+ ") + " +eb+ " * (" +i+ "/" +step+ ")),"+element+");",i*step);
	}
	
  	
}



