/************************************************************
 * MouseTail.js - Display text as tail of the mouse pointer *
 * Written 2001-03-17 by Fabian Pietsch                     *
 ************************************************************/
var mouseTailActive=false;
var mouseTailToggleState=0;
var mouseTailChars;
var mouseTailCharsX=new Array();
var mouseTailCharsY=new Array();
var mouseTailCharsColor=new Array();
var mouseTailCharsVisible=new Array();
var mouseTailTimer;
var mouseTailColor="#000000";
var mouseTailColorRed=0;
var mouseTailColorGreen=0;
var mouseTailColorBlue=0;
var mouseTailColorAddRed=0;
var mouseTailColorAddGreen=0;
var mouseTailColorAddBlue=0;

document.write("<SPAN id=mouseTailSpan style=\"position: absolute; display: \"\"; border: 0; margin: 0; text-indent: 0; padding: 0\"></SPAN>");

document.onload=mouseTailOnLoad;
document.onmousemove=mouseTailOnMouseMove;
document.onmouseover=mouseTailOnMouseOver;
document.onmouseout=mouseTailOnMouseOut;

function mouseTailToggle() {
	if (mouseTailActive) {
		switch (mouseTailToggleState) {
		case 0:
			mouseTailInit("UFPS");
			mouseTailToggleState=1;
			setTimeout("mouseTailToggle()", 2000);
			break;
		case 1:
			mouseTailInit("Unique Fabian Pietsch Software");
			mouseTailToggleState=2;
			setTimeout("mouseTailToggle()", 10000);
			break;
		case 2:
			mouseTailInit("© Fabian Pietsch, 2001");
			mouseTailToggleState=0;
			setTimeout("mouseTailToggle()", 10000);
			break;
		};
	};
};

function mouseTailOnLoad(e) {
	var spans=document.all.tags("SPAN");
	var spansText;
	var spansChars;

/*	if (spans!=null) {
		for (i=0; i<spans.length; i++) 
			if (spans[i].id="rotateColor") {
				spansText=spans[i].innerText;
				spans[i].innerText="";
				spansChars=spansText.split("");
				for (i=0; i<spansChars.length; i++) {
					spans[i].insertAdjacentHTML("BeforeEnd", "<SPAN style=\"color: #000000\">" + spansChars[i] + "</SPAN>");
				};
			};
	}; */
	mouseTailInit(" ");
	setTimeout("mouseTailToggle()", 100);
};

function mouseTailOnMouseMove(e) {
	mouseTailCharsVisible[-1]=1;
//	mouseTailCharsX[-1]=document.body.scrollLeft + event.clientX + 10;
	mouseTailCharsX[-1]=document.body.scrollLeft + event.clientX - 14;
//	mouseTailCharsX[-1]=document.body.scrollLeft + event.clientX + 4;
//	mouseTailCharsY[-1]=document.body.scrollTop + event.clientY;
	mouseTailCharsY[-1]=document.body.scrollTop + event.clientY;
//	mouseTailCharsY[-1]=document.body.scrollTop + event.clientY - 16;
};

function mouseTailOnMouseOver(e) {
	mouseTailCharsVisible[-1]=1;
};

function mouseTailOnMouseOut(e) {
	mouseTailCharsVisible[-1]=0;
};

function mouseTailDoMouseTail() {
	var left=0;
	var i;
	var mouseTailChar;

	if (!mouseTailActive) {return; };
	mouseTailDoColor();
	mouseTailCharsColor[-1]=mouseTailColor;
	for (i=mouseTailChars.length-1; i>=0; i--) {
		mouseTailCharsX[i]=mouseTailCharsX[i-1];
		mouseTailCharsY[i]=mouseTailCharsY[i-1];
		mouseTailCharsColor[i]=mouseTailCharsColor[i-1];
		mouseTailCharsVisible[i]=mouseTailCharsVisible[i-1];
	};
	for (i=0; i<mouseTailChars.length; i++) {
		mouseTailChar=eval("mouseTailCharSpan" + i);
		mouseTailChar.style.posLeft=mouseTailCharsX[i] + left;
		left=left + mouseTailChar.scrollWidth;
		mouseTailChar.style.posTop=mouseTailCharsY[i];
		mouseTailChar.style.color=mouseTailCharsColor[i];
		mouseTailChar.style.display=mouseTailCharsVisible[i] ? "" : "none"
	};

	var spans=document.all.tags("SPAN");
	var spansSub;
/*	if (spans!=null) {
		for (i=0; i<spans.length; i++) 
			if (spans[i].id="rotateColor") {
				spansSub=spans[i].children.tags("SPAN");
				if (spansSub!=null) {
					for (i=spansSub.length-1; i>=0; i--) {
						if (i=0) {
							spansSub[i].style.color=mouseTailColor;
						}
						else {
							spansSub[i-1].style.color=spansSub[i].style.color;
						};
					};
				};
			};
	}; */
};

function mouseTailInit(mouseTailText) {
	mouseTailActive=false;
	if (mouseTailTimer) {
		clearInterval(mouseTailTimer);
		mouseTailTimer=0;
	};
	mouseTailSpan.innerText="";

	if (mouseTailText=="") {return; };

	mouseTailChars=mouseTailText.split("");
	for (i=0;i<mouseTailChars.length;i++) {
		mouseTailCharsX[i]=0;
		mouseTailCharsY[i]=0;
		mouseTailCharsVisible[i]=0;
		if (mouseTailChars[i]==" ") {
			mouseTailChars[i]="&nbsp;";
		}
		else {
			if (mouseTailChars[i]=="©") {
				mouseTailChars[i]="&copy;";
			};
		};
		mouseTailSpan.insertAdjacentHTML("BeforeEnd","<SPAN id='mouseTailCharSpan" + i + "' style=\"position: absolute; display: none; border: 0; margin: 0; text-indent: 0; padding: 0\">" + mouseTailChars[i] + "</SPAN>");
	};

	mouseTailTimer=setInterval("mouseTailDoMouseTail()", 42);

	mouseTailActive=true;
};

function mouseTailDoColor() {
	if (mouseTailColorAddRed==0)
		mouseTailColorAddRed=Math.random() * 128 - 64;
	if (mouseTailColorAddGreen==0)
		mouseTailColorAddGreen=Math.random() * 128 - 64;
	if (mouseTailColorAddBlue==0)
		mouseTailColorAddBlue=Math.random() * 128 - 64;

	mouseTailColorRed+=mouseTailColorAddRed;
	if ((mouseTailColorRed < 0) || (mouseTailColorRed > 255)) {
		mouseTailColorAddRed=(-mouseTailColorAddRed * Math.random() * 2);
		if (Math.abs(mouseTailColorAddRed) > 64) 
			mouseTailColorAddRed=Math.random() * 128 - 64;
		mouseTailColorRed = Math.max(Math.min(mouseTailColorRed + mouseTailColorAddRed, 255), 0);
	};

	mouseTailColorGreen+=mouseTailColorAddGreen;
	if ((mouseTailColorGreen < 0) || (mouseTailColorGreen > 255)) {
		mouseTailColorAddGreen=(-mouseTailColorAddGreen * Math.random() * 2);
		if (Math.abs(mouseTailColorAddGreen) > 64)
			mouseTailColorAddGreen=Math.random() * 128 - 64;
		mouseTailColorGreen=Math.max(Math.min(mouseTailColorGreen + mouseTailColorAddGreen, 255), 0);
	};

	mouseTailColorBlue+=mouseTailColorAddBlue;
	if ((mouseTailColorBlue < 0) || (mouseTailColorBlue > 255)) {
		mouseTailColorAddBlue=(-mouseTailColorAddBlue * Math.random() * 2);
		if (Math.abs(mouseTailColorAddBlue) > 64)
			mouseTailColorAddBlue=Math.random() * 128 - 64;
		mouseTailColorBlue=Math.max(Math.min(mouseTailColorBlue + mouseTailColorAddBlue, 255), 0);
	};

	if (mouseTailColorAddRed==0) mouseTailColorAddRed=16;
	if (Math.abs(mouseTailColorAddRed)<16)
		mouseTailColorAddRed=mouseTailColorAddRed/Math.abs(mouseTailColorAddRed)*16;
	if (Math.abs(mouseTailColorAddRed)>64)
		mouseTailColorAddRed=mouseTailColorAddRed/Math.abs(mouseTailColorAddRed)*64;
	if (mouseTailColorAddGreen==0) mouseTailColorAddGreen=16;
	if (Math.abs(mouseTailColorAddGreen)<16)
		mouseTailColorAddGreen=mouseTailColorAddGreen/Math.abs(mouseTailColorAddGreen)*16;
	if (Math.abs(mouseTailColorAddGreen)>64)
		mouseTailColorAddGreen=mouseTailColorAddGreen/Math.abs(mouseTailColorAddGreen)*64;
	if (mouseTailColorAddBlue==0) mouseTailColorAddBlue=16;
	if (Math.abs(mouseTailColorAddBlue)<16)
		mouseTailColorAddBlue=mouseTailColorAddBlue/Math.abs(mouseTailColorAddBlue)*16;
	if (Math.abs(mouseTailColorAddBlue)>64)
		mouseTailColorAddBlue=mouseTailColorAddBlue/Math.abs(mouseTailColorAddBlue)*64;

	mouseTailColor="#" + numToHexString(mouseTailColorRed) + numToHexString(mouseTailColorGreen) + numToHexString(mouseTailColorBlue);
};

function numToHexString(num) {
	var tmpNum=Math.round(num);
	var tmpNumMod=0;
	var tmpRet="";
	if (tmpNum==0) {return("00"); };
	while (tmpNum>0) {
		tmpNumMod=tmpNum % 16
		switch (tmpNumMod) {
		case 10:	tmpRet="a" + tmpRet; break;
		case 11:	tmpRet="b" + tmpRet; break;
		case 12:	tmpRet="c" + tmpRet; break;
		case 13:	tmpRet="d" + tmpRet; break;
		case 14:	tmpRet="e" + tmpRet; break;
		case 15:	tmpRet="f" + tmpRet; break;
		default:	tmpRet=tmpNumMod + tmpRet; break;
		};
		tmpNum=(tmpNum - tmpNumMod) / 16;
	};
	if (tmpRet.length==1)
		tmpRet="0" + tmpRet;
	return(tmpRet);
};