/* 
fade.js

This code is from Dynamic Web Coding 
www.dyn-web.com 
Copyright 2001 by Sharon Paine 
Permission granted to use this code as long as this 
entire notice is included.
*/

// default values (should be set in page, but just in case...)
// start and end colors 
var dkClr = "##669966";
var ltClr = "#ffffff";
var stClr = dkClr;	// Which color is start color? dkClr or ltClr
// fadeDiv background and padding, if you want fadeDiv
// to be a different bgColor than page bgColor
fadeBgClr='';	// usually empty string
fadePad = 0;	// usually 0
// font and size
var fadeFontFamily = "verdana, arial, helvetica, sans-serif";
var fadeFontSize = "24px";
var fadeTextAlign = "left";
var fadeWd = 300;
var fadeHt = 60;
// position of fadeDiv - absolute or "center"
var fadeTop = 10;
var fadeLeft = 10;
// What to do when cycled through items?
// repeat loop, go to url, or call function? 
// put "repeat", a url in quotes, or javascript pseudo-url
var fadeDest = "javascript: void (0)"; // do nothing

var pause = 1500;	// linger before fade out
var spd = 20;	// millisecond value for setTimeout 
var dv = 25;	// divisor - controls number of loops
// end defaults

// browser check
dom = (document.getElementById) ? true : false;
ns5 = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
ns4 = (document.layers && !dom) ? true : false;
ie4 = (document.all && !dom) ? true : false;
nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

// construct fade objects
function fadeObj(lyr,wd,ht) {
	this.el= (ns4)? document.layers[lyr]: (ie4)? document.all[lyr]: (ie5||ns5)? document.getElementById(lyr): null;
	this.doc= (ns4)? this.el.document: this.el;
	this.css= (ns4)? this.el: (ie4||ie5||ns5)? this.el.style: null;
	this.width=wd; this.height=ht;
	if (ns4) this.css.clip.width=this.width;
	else this.css.width=this.width+"px";
	if (ns4) this.css.clip.height=this.height;
	else this.css.height=this.height+"px";
	// to attach font specs in ns4 re-writes
	if (ns4) this.startTxt = '<table width="'+this.width+'" height="'+this.height+'" cellpadding="'+fadePad+'"><tr><td valign="top" align="'+fadeTextAlign+'"><span style="font-size:'+fadeFontSize+' ; font-family:'+fadeFontFamily+'; color:';	
	this.items=new Array();	this.addItem=addFadeItem; this.ctr=0;
	this.ctlWrite=ctlWrite; this.doFade=doFade; this.ctlFade=ctlFade;
	this.shiftTo=shiftTo; this.show=show; this.hide=hide;
	this.centerInWindow=fd_centerInWindow;
	// from bratta, for setTimeouts/Intervals
	this.obj = lyr + "Object"; 	eval(this.obj + "=this"); return this
}

function addFadeItem(item) {
	this.items[this.items.length] = item;
}	

// controls writing of fadeObj's
function ctlWrite() {
	if (this.ctr < this.items.length) {				
		if (ns4) {
			cntnt = this.startTxt + stClr + '">' + this.items[this.ctr] + '</span></td></tr></table>';
			this.doc.write(cntnt); this.doc.close();
		} else if (ie4 || ie5 || ns5) {
			this.css.color = stClr;
			this.doc.innerHTML = this.items[this.ctr];
		}
		this.doFade();
	} else {
	// choices for when fades done
		if (fadeDest=="repeat") {
			this.ctr = 0;					// to repeat loop
			this.ctlWrite();	
		} else if (fadeDest.indexOf("javascript")!= -1) {
			eval(fadeDest);
		} else window.location = fadeDest;
	}
}

var t1, t2;	// for setTimeouts
function doFade() {
	rd = Math.round(rd + incR); 
  grn = Math.round(grn + incG); 
	blu = Math.round(blu + incB);

	if (eval(destCheck)) {
	// if incremented color values still within range, apply to item
		var clr = "#" +getHx(rd) + getHx(grn) + getHx(blu);
		if (ns4) {
			cntnt = this.startTxt + clr + '">' + this.items[this.ctr] + '</span></td></tr></table>';
			this.doc.write(cntnt); this.doc.close();
		} else this.css.color = clr;
		t1 = setTimeout(this.obj+".doFade()",spd);
	
  } else {
	// if incremented values out of range, set color to destination color,
	// apply to item, stop calls to doFade
		clr = destClr;
		if (ns4) {
			cntnt = this.startTxt + clr + '">' + this.items[this.ctr] + '</span></td></tr></table>';
			this.doc.write(cntnt); this.doc.close();
		} else this.css.color = clr;
		this.ctlFade();
	}
}

function ctlFade() {
	// get r,g,b values
	rd=getR(destClr); grn=getG(destClr); blu=getB(destClr);		
	// reverse increments
	incR=-incR; incG=-incG; incB=-incB;
	if (destClr==stClr) {	// end of round
		if (stClr==dkClr) {	destClr=ltClr; destCheck=ltCheck; }
		else { destClr=dkClr; destCheck=dkCheck; }
		this.ctr++; this.ctlWrite();
	} else {
		if (destClr==dkClr) { destClr=ltClr; destCheck=ltCheck; }
		else { destClr=dkClr; destCheck=dkCheck; }
		t2 = setTimeout(this.obj+".doFade()",pause);
	}
}

///////////////////////////////////////////////////////////////////
// code below for calculating color values
// initialize values 
var rd, grn, blu, dkR, dkG, dkB, ltR, ltG, ltB;
var dkCheck, ltCheck, destClr, destCheck, incR, incG, incB;
function initFadeColorValues() {
	rd=getR(stClr);	grn=getG(stClr);	blu=getB(stClr);
	dkR = getR(dkClr);		ltR = getR(ltClr);
	dkG = getG(dkClr);		ltG = getG(ltClr);
	dkB = getB(dkClr);		ltB = getB(ltClr);
	
	// expressions for checking color values during fade
	dkCheck = "rd>=dkR && grn>=dkG && blu>=dkB";
	ltCheck = "rd<=ltR && grn<=ltG && blu<=ltB";
	
	// keep track of destination color for fade
	destClr = (stClr==dkClr)? ltClr: dkClr;
	destCheck	= (stClr==dkClr)? ltCheck: dkCheck;
	
	// find difference between light and dark values for r,g,b
	// divide by number of loops desired (dv variable)
	// to calculate increment values for r,g,b
	incR = getInc(ltR,dkR);
	incG = getInc(ltG,dkG);
	incB = getInc(ltB,dkB);
}

function getInc(lt,dk) { 
	if (stClr==dkClr) return (lt-dk)/dv; 
	else return -((lt-dk)/dv);
}

// get red, green and blue values from hex color string
function getR(clr) { return parseInt(clr.substr(1,2),16); }
function getG(clr) { return parseInt(clr.substr(3,2),16); }	
function getB(clr) { return parseInt(clr.substr(5,2),16); }

// converts r, g, b portions of color value to hex for
// concatenating back into hex color string
function getHx(cVal) {
	var cHx = cVal.toString(16);
	if (cHx.length==2) { return cHx } 
	else { return cHx ="" + "0" + cHx }
}

// end color-related code
/////////////////////////////////////////////////////////////////////

// center in window
function fd_centerInWindow() {
	var winWd=(ie4||ie5)? document.body.clientWidth: window.innerWidth;
	var winHt=(ie4||ie5)? document.body.clientHeight: window.innerHeight;
	var x=Math.round((winWd-this.width)/2);
	var y=Math.round((winHt-this.height)/2);
	this.shiftTo(x,y);
}

function shiftTo(x,y) {
	if (ns4) { this.css.moveTo(x,y); } 
	else { this.css.left=x+"px"; this.css.top=y+"px"; }
}

function show() { this.css.visibility = "visible"; }
function hide() { this.css.visibility = "hidden"; }
