// JavaScript Document// Dynamic Text Fader (2.20)// (Updated on 20/12/2000)// Script created by Nicholas Poh Tze Siang aka Programatix// Copyright (c) 2000// (hwinmain@yahoo.com)var strFaderName = 'Dynamic Text Fader 2.20';var strCopyright = 'Copyright (c) Nicholas Poh 2000';// Check for browser and versionvar g_fBrowser = 0;var navName = navigator.appName;var navVer  = parseFloat(navigator.appVersion);if (document.all) {	// Microsoft Internet Explorer 5 or compatible	g_fBrowser = 2;} else if (document.getElementById) {	// Netscape 6 or DOM compatible browser	g_fBrowser = 3;} else if (document.layers) {	// Netscape 4 or compatible	g_fBrowser = 1;} else {	// Sometimes Netscape 4 reaches here. So, make sure it still works.	if (navName == "Netscape" && navVer >= 4) {		g_fBrowser = 1;	} else {		// unknown and not supported		g_fBrowser = 0;	}}// End of check// Global variablesvar DynFaderList = new Array();		// List of Dynamic Faders// End of Global variables// Create a hex convertor array (Dex2Hex[])var hexbase= new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");var value=0;var Dec2Hex=new Array();for (x=0; x<16; x++){	for (y=0; y<16; y++){		Dec2Hex[value]= hexbase[x] + hexbase[y];		value++;	}}// End of create a hex convertor array (Dex2Hex[])// Combine RGB colour function RGB(r, g, b){	return ((r&0xFF)<<16) + ((g&0xFF)<<8) + (b&0xFF);}// Convert RGB colour from string to numericfunction StrRGB2Num(color){	var temp;	temp = color;	return Number('0x'+temp.substr(1,temp.length));}// Convert RGB colour to string basefunction RGB2STR(rgbcolor){	return Dec2Hex[rgbcolor>>16] + Dec2Hex[(rgbcolor>>8)&0xFF] + Dec2Hex[rgbcolor&0xFF];}// Find layerfunction findLayer(name, doc){	if (document.layers) {		var i, layer;			for (i = 0; i < doc.layers.length; i++) {			layer = doc.layers[i];			if (layer.name == name) return layer;			if (layer.document.layers.length > 0) {				layer = findLayer(name, layer.document);				if (layer != null) return layer;			}		}	}	return null;}// Change the HTML textfunction changeHTMLText(element, newText, object){	if (document.all) {		// Microsoft Internet Explorer 5 or compatible		element.innerHTML = newText;	} else if (document.getElementById) {		// Netscape 6 or DOM compatible browser		rng = document.createRange();		rng.setStartBefore(element);		htmlFrag = rng.createContextualFragment(newText);		while (element.hasChildNodes()) element.removeChild(element.lastChild);		element.appendChild(htmlFrag);	} else if (document.layers) {		// Netscape 4 or compatible		strTemp = '<DIV CLASS="' + object.name + '">' + newText + '</DIV>';				element.document.open();		element.document.fgColor = object.curcolor & 0xFFFFFF;				element.document.writeln(strTemp);		element.document.close();	}}function insertPlaceHolder(strName, width, height, align, bgcolor, border, bordercolor){	if (String(width)  =="undefined") var width   = "100%";	if (String(height) =="undefined") var height  = 100;	if (String(align)  =="undefined") var align   = "left";	if (String(bgcolor)=="undefined") var bgcolor = "";	if (String(border) =="undefined") var border  = 0;	if (String(bordercolor)=="undefined") var bordercolor = "";		if (g_fBrowser == 0) {		document.writeln("Browser not supported");		return;	}	switch(g_fBrowser) {	case 1:		document.writeln(			'<TABLE ALIGN="' + align + '" CELLSPACING="0" CELLPADDING="0" BORDER="' + border + '" BORDERCOLOR="' + bordercolor + '">' +			'<TR><TD>' +			'<ILAYER NAME="' + strName + '" BGCOLOR="' + bgcolor + '" VISIBILITY="inherit">' +			'<LAYER NAME="Content" WIDTH=' + width + ' HEIGHT=' + height + ' VISIBILITY="inherit">' +			'</LAYER>' +			'</ILAYER>' +			'</TD></TR>' +			'</TABLE>'		);		break;	case 2:	case 3:		document.writeln(			'<DIV ALIGN=' + align + '>' +			'<DIV ID="'+strName+'" STYLE="width:' + width +'; height:' + height + '; overflow:hidden; background:'+bgcolor+'; border-style:outset; border-width:'+border+'; border-color:'+bordercolor+'">' +			'<DIV ID="'+strName+'Content" STYLE="position:relative; width:100%;">' +			'</DIV>' +			'</DIV>' +			'</DIV>'		);		break;	}}function DynFader(){	this.name;	this.width;	this.height;	this.contentHeight;	this.offset  = 20;	this.curXPos = 0;	this.curYPos = -this.offset;	this.curPos = 0;	this.midYPos = 0;	this.ydir = 1;	this.xdir = 0;	this.placeholder;	this.content;	this.text = new Array();	this.curText = -1;		this.loop = -1;	this.paused = true;	this.started = false;	this.pauseInterval = 125;	this.pauseTextInterval = 0;	this.curpauseInterval = 0;	this.fgcolor  = 0x000000;	this.bgcolor  = 0xFFFFFF;	this.dfcolor  = 0;	this.curdfcolor  = 0;	this.curcolor = 0;	this.dfRed   = 0;	this.dfGreen = 0;	this.dfBlue  = 0;		this.isFade = false;		// Define methods	this.addText = DynFaderAddText;	this.attachPlaceHolder = DynFaderAttachPlaceHolder;	this.setTextColor = DynFaderSetTextColor;	this.start = DynFaderStart;	this.stop = DynFaderStop;	this.beginFade = DynFaderBeginFade;	this.calcColorDif = DynFaderCalcColorDif;	this.getColorDif = DynFaderGetColorDif;	this.setFont = DynFaderSetFont;	this.setFontSize = DynFaderSetFontSize;	this.setBackground = DynFaderSetBackground;	this.setDirection = DynFaderSetDirection;	this.setSpeed = DynFaderSpeed;	this.setPauseMidInterval = DynFaderSetPauseMidInterval;	this.setPauseTextInterval = DynFaderSetPauseTextInterval;	this.getContentHeight = DynFaderGetContentHeight;	this.setLoop = DynFaderSetLoop;	this.setGlow = DynFaderSetGlow;		DynFaderList[DynFaderList.length] = this;}function DynFaderAddText(newText){	this.text[this.text.length] = newText;}function DynFaderAttachPlaceHolder(strPlaceHolder){	switch(g_fBrowser) {	case 1:		this.name = strPlaceHolder;		this.placeholder = findLayer(strPlaceHolder, document);		this.content = this.placeholder.document.Content;		this.width   = this.placeholder.clip.width;		this.height  = this.placeholder.clip.height;		this.content.top = this.curYPos;		break;			case 2:		this.placeholder = eval('document.all.' + strPlaceHolder);		this.content = eval('document.all.' + strPlaceHolder+'Content');		this.width   = this.placeholder.style.pixelWidth;		this.height  = this.placeholder.style.pixelHeight;		this.content.style.pixelTop = this.curYPos;		break;			case 3:		this.placeholder = document.getElementById(strPlaceHolder);		this.content = document.getElementById(strPlaceHolder+'Content');		this.width   = parseInt(this.placeholder.style.width);		this.height  = parseInt(this.placeholder.style.height);		this.content.style.top = this.curYPos;		break;	}}function DynFaderSetTextColor(r, g, b){	this.fgcolor = RGB(r, g, b);	switch(g_fBrowser) {	case 1:		this.content.document.fgColor = this.fgcolor;		break;			case 2:		this.content.style.color = this.fgcolor;		break;	case 3:		this.content.style.color = "#" + RGB2STR(this.fgcolor);		break;	}}function DynFaderSetTextColor(strColor){	if (isNaN(strColor)) this.fgcolor = StrRGB2Num(strColor);	this.curcolor = this.fgcolor;	switch(g_fBrowser) {	case 1:		this.content.document.fgColor = this.color;		break;			case 2:		this.content.style.color = this.fgcolor;		break;	case 3:		this.content.style.color = "#" + RGB2STR(this.fgcolor);		break;	}}function DynFaderStart(){	if (this.ydir > 0) {		this.curYPos = this.height + 1;	} else {		this.curYPos = -this.getContentHeight() - 1;	}	this.started = true;}function DynFaderStop(){	this.started = false;}function DynFaderBeginFade(){	this.calcColorDif();	this.isFade = true;	this.start();}function DynFaderCalcColorDif(){	switch(g_fBrowser) {	case 1:		this.bgcolor = this.placeholder.bgColor;		if (this.bgcolor == null) this.bgcolor = StrRGB2Num(document.bgColor);		break;	case 2:	case 3:		this.bgcolor = StrRGB2Num(this.placeholder.style.backgroundColor);		if (isNaN(this.bgcolor)) this.bgcolor = StrRGB2Num(document.bgColor);		break;	}	this.dfRed   = ((this.bgcolor>>16) - (this.fgcolor>>16));	this.dfGreen = (((this.bgcolor>>8)&0xFF) - ((this.fgcolor>>8)&0xFF));	this.dfBlue  = ((this.bgcolor&0xFF) - (this.fgcolor&0xFF));	this.curcolor = this.bgcolor;}function DynFaderGetColorDif(steps){	steps  += this.height;	steps >>= 1;	steps  /= Math.abs(this.ydir);	this.curdfcolor = this.dfcolor = -(((this.dfRed/steps)<<16) + ((this.dfGreen/steps)<<8) + (this.dfBlue/steps));}function DynFaderSetFont(fontfamily, fontweight, textalign){	switch(g_fBrowser) {	case 1:		if (fontfamily) document.classes[this.name].all.fontFamily = fontfamily;		if (fontweight) document.classes[this.name].all.fontWeight = fontweight;		if (textalign)  document.classes[this.name].all.textAlign = textalign;		break;			case 2:	case 3:		if (fontfamily) this.content.style.fontFamily = fontfamily;		if (fontweight) this.content.style.fontWeight = fontweight;		if (textalign)  this.content.style.textAlign  = textalign;		break;	}}function DynFaderSetFontSize(fontsize){	// Unit is required for Netscape 6	if (!isNaN(fontsize)) fontsize += 'pt';	switch(g_fBrowser) {	case 1:		if (fontsize) document.classes[this.name].all.fontSize = fontsize;		break;			case 2:		this.content.style.fontSize = fontsize;		break;	case 3:		this.content.style.fontSize = fontsize;		break;	}}function DynFaderSetBackground(image){	switch(g_fBrowser) {	case 1:		this.placeholder.background.src = image;		break;			case 2:	case 3:		this.placeholder.style.backgroundImage = 'url('+image+')';		break;	}}function DynFaderSetDirection(iDir){	switch(iDir) {	case 0:		this.ydir = Math.abs(this.ydir);		break;			case 1:		this.ydir = -Math.abs(this.ydir);		break;			default:		this.ydir = Math.abs(this.ydir);	}}function DynFaderSpeed(Speed){	if (this.ydir > 0) {		this.ydir = Math.abs(Speed);	} else {		this.ydir = -Math.abs(Speed);	}}function DynFaderSetPauseMidInterval(time){	this.pauseInterval = Math.abs(time);}function DynFaderSetPauseTextInterval(time){	this.pauseTextInterval = Math.abs(time);}function DynFaderGetContentHeight(){	switch(g_fBrowser) {	case 1:		this.contentHeight = this.content.document.height;		break;	case 2:		this.contentHeight = this.content.clientHeight;		break;	case 3:		this.contentHeight = this.content.offsetHeight;		break;	}	return this.contentHeight;}function DynFaderSetLoop(loops){	this.loop = loops;}function DynFaderSetGlow(strength, glowColor, fgColor){	switch(g_fBrowser) {	case 1:		break;			case 2:		if (String(fgColor) != "undefined") this.setTextColor(fgColor);		this.content.style.filter = "glow(color="+glowColor+",strength="+strength+")";		break;	case 3:		break;	}}// Scrolling sectionfunction ScrollFader(){	var fader;	if (String(DynFaderList[0]) == "undefined") return;		for (var i in DynFaderList) {		fader = DynFaderList[i];		if (fader.started == false) continue;		if (fader.paused) {			if (fader.curpauseInterval-- <= 0) {				fader.paused = false;			}		} else {			fader.curYPos += fader.ydir;//			fader.curXPos += fader.xdir;						if (fader.curYPos == fader.midYPos) {				if (fader.pauseInterval) {					fader.curpauseInterval = fader.pauseInterval;					fader.paused = true;				}				fader.curYPos = (fader.height - fader.contentHeight) >> 1;				if (fader.isFade) {					fader.curdfcolor = -fader.dfcolor;					fader.curcolor = fader.fgcolor;				}			} 			if (fader.isFade) {				// Change text colour				switch(g_fBrowser) {				case 1:					if (fader.curText >= 0) {						changeHTMLText(fader.content, fader.text[fader.curText], fader);					}					break;				case 2:					fader.content.style.color = fader.curcolor;					break;									case 3:					fader.content.style.color = "#" + RGB2STR(fader.curcolor);					break;				}								fader.curcolor+= fader.curdfcolor;			}						if (fader.curYPos > fader.height || fader.curYPos < -fader.contentHeight) {				// Prepare for next text				var ShowCopyright = false;				if (++fader.curText > fader.text.length - 1) {					// End of text array reached					fader.curText = 0;					if (this.loop == -1) {						// infinite loop						if (Math.round(Math.random()*20) == 7) {							ShowCopyright = true;							fader.curText = -1;						}					} else {						if (--fader.loop == 0) {							// Last loop reached							fader.stop();						}											}				}				// Rewrite the text				switch(g_fBrowser) {				case 1:					fader.content.top = fader.height;					break;								case 2:					fader.content.style.pixelTop = fader.height;									case 3:					fader.content.style.top = fader.height;					break;				}				if (ShowCopyright) {					changeHTMLText(fader.content, strFaderName + '<BR>' + strCopyright, fader);				} else {					changeHTMLText(fader.content, fader.text[fader.curText], fader);				}								// Reset values				fader.getContentHeight();								if (fader.isFade) {					fader.getColorDif(fader.contentHeight);					fader.curcolor = fader.bgcolor;				}				if (fader.ydir > 0) {					fader.midYPos = ((fader.height - fader.contentHeight) >> 1) + fader.contentHeight;					fader.midYPos = (Math.round(fader.midYPos / fader.ydir) * fader.ydir) - fader.contentHeight;					fader.curYPos = -fader.contentHeight;				} else {					fader.midYPos = ((fader.height - fader.contentHeight) >> 1) + fader.height;					fader.midYPos = (Math.round(fader.midYPos / fader.ydir) * fader.ydir) - fader.height;					fader.curYPos = fader.height;				}				if (fader.pauseTextInterval) {					fader.curpauseInterval = fader.pauseTextInterval;					fader.paused = true;				}			}					// Scroll text			switch(g_fBrowser) {			case 1:				fader.content.top = fader.curYPos;				break;							case 2:				fader.content.style.pixelTop = fader.curYPos;				break;			case 3:				fader.content.style.top = fader.curYPos;				break;			}		}	}}// Start timervar g_timerID;if (g_fBrowser == 1) {	var g_winWidth;	var g_winHeight;	g_winWidth  = window.innerWidth;	g_winHeight = window.innerHeight;	window.captureEvents(Event.RESIZE);	window.onResize = FaderReload;}setTimeout('FaderStart()', 600);function FaderStart(){	g_timerID = setInterval(ScrollFader, 20);	window.onUnload = FaderUnload;}function FaderUnload(e){	clearInterval(g_timerID);	return window.routeEvent(e);}function FaderReload(e){	if (g_winWidth == window.innerWidth && g_winHeight == window.innerHeight) return;	this.location.href = this.location.href;	this.focus();	return window.routeEvent(e);;}