/*	dcFader.js Version 1.01
	copyright Digital Crew 2001 - Programmed by Topper
	
	If you want to use this javascript file, please send
	an email to peter@digital-crew.com just to let me know. ;)

	To Use you should define the following variables BEFORE including
	this script file in yout html document like so...
	
	<script language="JavaScript1.2">
	var dcDullSpeed = 50;//time in miliseconds between fades
	var dcSteps = 100;//how many steps?
	var dcStartCol = "FF0000";//start color
	var dcEndCol = "000077";//end color
	</script>
	<script src="js/dcfader.js" defer></script>

	To Use:
	<td onMouseOver="dcGlow(this)" onMouseOut="dcDull(this)">Hover over me to see me GLOW!</td>
	
*/
//defaults
if(!dcDullSpeed)var dcDullSpeed="30";
if(!dcSteps)	var dcSteps = 40;
if(!dcStartCol)	var dcStartCol = "D5E1F5";
if(!dcEndCol)	var dcEndCol = "FFFFFF";
//required variables...
var dcClist=new Array();var dcStepPos=new Array();var dcStepDir=new Array();
var dcUseDHML=((document.all) || (document.layers))?true:false;
var dcSRed = dcStartCol.substr(0,2);
var dcSGrn = dcStartCol.substr(2,2);
var dcSBlu = dcStartCol.substr(4,2);
var dcERed = dcEndCol.substr(0,2);
var dcEGrn = dcEndCol.substr(2,2);
var dcEBlu = dcEndCol.substr(4,2);
//calculates the color wanted at step 'step' of 'dcSteps' steps between two RGB colors... returns an integer color value
function CalcColor(step,sred,sgrn,sblu,ered,egrn,eblu){
var epct=step/dcSteps; 
var spct=1-epct; 
return  Math.floor(sred*spct+ered*epct)*256*256+Math.floor(sgrn*spct+egrn*epct)*256+Math.floor(sblu*spct+eblu*epct);
}

function deleteElement(array, n){//delete the nth element of array
  var length = array.length;
  if(n >= length || n<0) return;
  for (var i=n; i<length-1; i++){array[i] = array[i+1];}
  array.length--;
}
function dcRemoveElement(i)//remove 1 element from arrays
{
//in a pefect world, ie5.5 we could use...
//	dcClist.splice(i,1);
//	dcStepPos.splice(i,1);
//	dcStepDir.splice(i,1);
	deleteElement(dcClist,i);
	deleteElement(dcStepPos,i);
	deleteElement(dcStepDir,i);
}
function dcFader(){if(dcUseDHML){if(dcClist.length!=0){
	for(i=0;i<dcClist.length;i++)//for each color
	{
		dcStepPos[i]++;//move down one step
		if(dcStepDir[i])//fade up
			{dcClist[i].bgColor = eval("CalcColor( dcStepPos[i], 0x"+dcERed+",0x"+dcEGrn+",0x"+dcEBlu+", 0x"+dcSRed+",0x"+dcSGrn+",0x"+dcSBlu+")");}
		else//fade down
			{dcClist[i].bgColor = eval("CalcColor( dcStepPos[i], 0x"+dcSRed+",0x"+dcSGrn+",0x"+dcSBlu+", 0x"+dcERed+",0x"+dcEGrn+",0x"+dcEBlu+")");}
		if(dcStepPos[i]==dcSteps)//if we reach the final step, then stop
		{
			dcRemoveElement(i);//remove 1 element!
			i--;//must slide back to compensate
		}
	}
	setTimeout("dcFader()", dcDullSpeed);//keep fading
}}}
function dcStopFade(t)//if this color is in the dull cycle, then remove it
{if(dcUseDHML){
	for(i=0;i<dcClist.length;i++)
	{
		if(dcClist[i]==t){//match found
			dcRemoveElement(i);//remove 1 element!
			return;
		}
	}
}}
function dcFade(t){if(dcUseDHML){
	dcStopFade(t);
	dcClist[dcClist.length] = t;//add object
	dcStepPos[dcStepPos.length] = 0;//add step position
	dcStepDir[dcStepDir.length] = 0;//add direction, 0 = down, 1 = up, set to down!
	if(dcClist.length==1)dcFader();//start fade if not already started
}}
function dcGlow(t){if(dcUseDHML){
	dcStopFade(t);
	dcClist[dcClist.length] = t;//add object
	dcStepPos[dcStepPos.length] = 0;//add step position
	dcStepDir[dcStepDir.length] = 1;//add direction, 0 = down, 1 = up, set to down!
	if(dcClist.length==1)dcFader();//start fade if not already started
}}
function dcHigh(t){if(dcUseDHML){//set item to highlight (start) color
	dcStopFade(t);
	t.bgColor= ("#"+dcEndCol);
}}
function dcLow(t){if(dcUseDHML){//set item to dull (end) color
	dcStopFade(t);
	t.bgColor= ("#"+dcStartCol);
}}
function dcSetColor(t,c){if(dcUseDHML){
	dcStopFade(t);
	t.bgColor=c;
}}

