// v1.4
// vars
var animDirs;    // animation orientations
var animIdle;    // time between new animations
var animWait;    // time animation steps
var imageSRC;    // image used for animation
var lastAnim;    // timestamp of last animation
var mouseOffset; // animation offset from mouse
var startSize;   // width | height of initial animation frame
var stepShrink;  // width | height shrink for each step
var trailZone;   // trailZone dom element
var dc=document; // document reference
var dot=true;    // trail active
var done=false;  // page loaded, sort of buggy...
// trail settings
animDirs = [60, 180, 300];
	// when an animation is triggered
	// it does a new star for each of the directions
	// each new star "moves" while it shrinks in the direction specified
	// direction is in radians (0 = right, 90 = up, 180 = left, 270 = down)
animIdle = 80;
	// time to wait between new animation fires
	// making it 0 will cause problems on older computers
animWait = 80;
	// time to wait between each "shrink" on a star
imageSRC = 'images/flash.gif';
//imageSRC = 'images/trail.php';
	// star image path
mouseOffset = [-15, -20];
	// width and height mouseOffset from mouse x,y
startSize = [20, 20];
	// default image width | height
stepShrink = [3, 3];
	// shrink amount for width | height on each stepShrink
// particle class
function Particle(x, y, dir) {
	this.doStep = function () {
		this.w -= stepShrink[0];
		this.h -= stepShrink[1];
		if (this.w < 1 || this.h < 1) {
			this.purge();
			return;
		}
		this.x += this.COS * this.w;
		this.y -= this.SIN * this.h;
		this.show();
	};
	this.purge = function () {
		trailZone.removeChild(trailZone.lastChild.previousSibling);
	};
	this.show = function () {
		this.el.width = this.w;
		this.el.height = this.h;
		this.el.style.top = this.y + 'px';
		this.el.style.left = this.x + 'px';
		var curObj = this;
		setTimeout(function () { curObj.doStep(); }, animWait);
	};
	this.opDir = function () {
		this.COS = Math.cos(this.dir);
		this.SIN = Math.sin(this.dir);
	};
	this.init = function (x, y, dir) {
		this.x = x;
		this.y = y;
		this.dir = dir;
		this.opDir();
		this.w = startSize[0];
		this.h = startSize[1];
		this.el = dc.createElement('img');
		this.el.src = imageSRC;
		this.el.style.position = 'absolute';
		trailZone.insertBefore(this.el, trailZone.childNodes[0]);
		this.show();
	};
	this.init(x, y, dir);
}
// mouse move handler
function mouseMove(x, y) {
	if(!dot)return;
	var temp, now, i, len, spoof;
	temp = new Date();
	now = temp.getTime();
	if (now > lastAnim) {
		x += mouseOffset[0];
		y += mouseOffset[1];
		for(i=0,len=animDirs.length;i<len;i+=1) {
			spoof = new Particle(x,y,animDirs[i]);
		}
		lastAnim=now+animIdle;
	}
}
// mouse move event in IE
function mouseMoveIE(e) {
	mouseMove(event.clientX + dc.body.scrollLeft, event.clientY + dc.body.scrollTop);
}
function mouseMoveIEC(e) {
	mouseMove(event.clientX + dc.documentElement.scrollLeft, event.clientY + dc.documentElement.scrollTop);
}
// mouse move event in NS
function mouseMoveNS(e) {
	mouseMove(e.pageX, e.pageY);
}
// dir conversion from radians to degrees
function revampDirs() {
	var foo, i, len;
	foo = Math.PI / 180;
	for(i=0,len=animDirs.length;i<len;i+=1){
		animDirs[i]=animDirs[i]*foo;
	}
}
// addMMEvent
function addMMEvent(func, node) {
  var oldmm = node.onmousemove;
  if (typeof node.onmousemove != 'function') {
    node.onmousemove = func;
		return
  }
	node.onmousemove = function() {
		if (oldmm) {
			oldmm();
		}
		func();
	}
}
// stopTrail
function stopTrail(){dot=false;}
// startTrail
function startTrail(){dot=true;}
// fix js conflicts
function jsFixerScroller(){
	var fixer=dc.getElementById('scroller_table');
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerScroller, 500);
	}else{
		if(dc.all){
			fixer.onmouseleave=startTrail;
			fixer.onmouseenter=stopTrail;
		}else{
			fixer.onmouseout=startTrail;
			fixer.onmouseover=stopTrail;
		}
	}
}
function jsFixerMenu(){
	var fixer=dc.getElementById('mf_main_nav_table');
	var zone, old;
	var i,len;
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerMenu, 500);
	}else{
		if(dc.all){
			fixer.onmouseleave=startTrail;
			fixer.onmouseenter=stopTrail;
			zone=dc.getElementById('firstheadcol');
			zone=zone.parentNode;
			for(i=0,len=zone.childNodes.length;i<len;i+=1){
				fixer=zone.childNodes[i];
				if(fixer.childNodes[0].className=='headContainer'){
					fixer=fixer.childNodes[0];
					old=fixer.onmouseout;
					fixer.onmouseout=null;
					fixer.onmouseleave=old;
					old=fixer.onmouseover;
					fixer.onmouseover=null;
					fixer.onmouseenter=old;
				}
			}
		}else{
			fixer.onmouseout=startTrail;
			fixer.onmouseover=stopTrail;
		}
	}
}
function jsFixerBrowseCats(){
	var fixer=dc.getElementById('browsecatscursor');
	var oldout,oldover;
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerBrowseCats, 500);
	}else{
		fixer=fixer.parentNode;
		oldover=fixer.onmouseover;
		oldout=fixer.onmouseout;
		if(dc.all){
			fixer.onmouseout=null;
			fixer.onmouseleave=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=null;
			fixer.onmouseenter=function(){if(oldover)oldover();stopTrail();};
		}else{
			fixer.onmouseout=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=function(){if(oldover)oldover();stopTrail();};
		}
	}
}
function jsFixerScrollerControlls(){
	var fixer=dc.getElementById('scroller_controls');
	var oldout,oldover;
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerScrollerControlls, 500);
	}else{
		fixer=fixer.parentNode;
		oldover=fixer.onmouseover;
		oldout=fixer.onmouseout;
		if(dc.all){
			fixer.onmouseout=null;
			fixer.onmouseleave=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=null;
			fixer.onmouseenter=function(){if(oldover)oldover();stopTrail();};
		}else{
			fixer.onmouseout=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=function(){if(oldover)oldover();stopTrail();};
		}
	}
}
function jsFixerAttrib(){
	var fixer=dc.getElementById('attrib-1');
	var oldout,oldover;
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerAttrib, 500);
	}else{
		fixer=fixer.parentNode;
		oldover=fixer.onmouseover;
		oldout=fixer.onmouseout;
		if(dc.all){
			fixer.onmouseout=null;
			fixer.onmouseleave=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=null;
			fixer.onmouseenter=function(){if(oldover)oldover();stopTrail();};
		}else{
			fixer.onmouseout=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=function(){if(oldover)oldover();stopTrail();};
		}
	}
}
function jsFixerSearch(){
	var fixer=dc.getElementById('navMainSearch');
	var oldout,oldover;
	if(!fixer){
		if(done)return;
		setTimeout(jsFixerSearch, 500);
	}else{
		fixer=fixer.parentNode;
		oldover=fixer.onmouseover;
		oldout=fixer.onmouseout;
		if(dc.all){
			fixer.onmouseout=null;
			fixer.onmouseleave=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=null;
			fixer.onmouseenter=function(){if(oldover)oldover();stopTrail();};
		}else{
			fixer.onmouseout=function(){if(oldout)oldout();startTrail();};
			fixer.onmouseover=function(){if(oldover)oldover();stopTrail();};
		}
	}
}
// jsOptimFixers
function jsOptimFixers(){
	var optim=dc.getElementById('siteinfoLegal');
	if(!optim){
		setTimeout(jsOptimFixers, 500);
	}else{
		done=true;
	}
}
// load trail once page is initialized
function loadTrail(){
	jsFixerMenu();
	jsFixerScroller();
	jsFixerBrowseCats();
	//jsOptimFixers();
	jsFixerScrollerControlls();
	jsFixerAttrib();
	jsFixerSearch();
	// current time
	now = new Date();
	lastAnim = now.getTime();
	// mousemove type
	func = (dc.all)?((dc.compatMode&&dc.compatMode!='BackCompat')?mouseMoveIEC:mouseMoveIE):mouseMoveNS;
	dc.onmousemove=function(e){positiontip(e);func(e);};
}
// trail system entry point
function initTrail() {
	var bodyTag, now, func;
	bodyTag = dc.getElementsByTagName('body');
	if(bodyTag.length === 0){
		setTimeout( initTrail, 500);
	}else{
		// revamp dirs
		revampDirs();
		// insert trailZone
		trailZone = dc.createElement('span');
		trailZone.innerHTML = '<img src="'+imageSRC+'" style="position:absolute;left:-3000px;" onLoad="javascript:window.setTimeout(loadTrail,362);" />';
		bodyTag = bodyTag[0];
		bodyTag.insertBefore(trailZone, bodyTag.firstChild);
	}
}
// initalizer
initTrail();
