/**
 * Tuatara Feet - Rotorua Distict Council
 * This file renders a series of footprints over the page.
 * Datacom Systems Ltd.
 */

// constants
var IMAGE_WIDTH = 50;
var IMAGE_HEIGHT = 50;
var IMAGE_DIR = '/CMSApp/Images/prints/';
var MAX_FOOTPRINTS = 5; //maximum number of images on screen at one time
var DELAY = 2000; //duration images stay on screen (in milliseconds)
var SPACER = 60; //distance to move mouse before next image appears
var EXTENSION = ".png";

//Browser checking and syntax variables
var docLayers = (document.layers) ? true:false;
var docId = (document.getElementById) ? true:false;
var docAll = (document.all) ? true:false;
var docbitK = (docLayers) ? "document.layers['":(docId) ? "document.getElementById('":(docAll) ? "document.all['":"document.";
var docbitendK = (docLayers) ? "']":(docId) ? "')":(docAll) ? "']":"";
var stylebitK = (docLayers) ? "":".style";
var showbitK = (docLayers) ? "show":"visible";
var hidebitK = (docLayers) ? "hide":"hidden";
var ns6=document.getElementById&&!document.all;
var animating;	// array of fading footsteps

//Variables used in script
var posX, posY, lastX, lastY;
var currFootprint = 0; //the last image DIV to be displayed (used for timer)
lastX = 0;
lastY = 0;

//Collection of functions to get mouse position and place the images
function doFootprints(e) {
	posX = getMouseXPos(e);
	posY = getMouseYPos(e);
	if (posX>(lastX+SPACER) || posX<(lastX-SPACER) || posY>(lastY+SPACER) || posY<(lastY-SPACER)) {
		// determine direction of movement by examing last footprint vs current location
		var dir = '';
		var v = (lastY - posY);
		var fudge = 40;
		
		// TODO - fudge factor for pure N|S movements
		if( (lastX - posX) < 0) {
			dir = 'e';
			if(v+fudge < 0){ dir = 'se'; }
			if(v-fudge > 0){ dir = 'ne'; }
		} else if( (lastX - posX) > 0) { //
			dir = 'w';
			if(v+fudge < 0 ){ dir = 'sw'; }
			if(v-fudge > 0 ){ dir = 'nw';	}
		} else {
			if(v > 0){ dir = 'n'; } 
			else { dir = 's'; }
		}
		showFootprints(posX,posY,dir);
		lastX = posX;
    	lastY = posY;
  	}
}

// Get the horizontal position of the mouse
function getMouseXPos(e) {
	if (document.layers || ns6) {
		return parseInt(e.pageX+10);
	} else {
		return (parseInt(event.clientX+10) + parseInt(document.body.scrollLeft));
	}
}

// Get the vartical position of the mouse
function getMouseYPos(e) {
	if (document.layers||ns6) {
		return parseInt(e.pageY);
	} else {
		return (parseInt(event.clientY) + parseInt(document.body.scrollTop));
	}
}

//Place the image and start timer so that it disappears after a period of time
function showFootprints(x,y,dir) {
  	var processedx=ns6? Math.min(x,window.innerWidth-75) : docAll? Math.min(x,document.body.clientWidth-55) : x;
  	if (currFootprint >= MAX_FOOTPRINTS) {currFootprint = 0}

  	var obj = eval(docbitK + "footprint" + currFootprint + docbitendK);
  	obj.style.left = processedx + 'px';
 	obj.style.top = y + 'px';
	obj.style.visibility = showbitK;
	
	if(animating[currFootprint] != -1) {
		clearTimeout(animating[currFootprint]);
		setOpacity(obj, 80);
	}
	
	var img = obj.getElementsByTagName('img')[0];
	if(img) img.src = IMAGE_DIR + dir + EXTENSION;
	/**
	if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer") {
		img.style.width = IMAGE_WIDTH+'px';
		img.style.height = IMAGE_HEIGHT+'px';
		img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.src + "', sizingMethod='scale')"
	}
	*/
	
	if (eval("typeof(DELAY" + currFootprint + ")")=="number") {
		eval("clearTimeout(DELAY" + currFootprint + ")");
	}
	eval("DELAY" + currFootprint + " = setTimeout('hideFootprints(" + currFootprint + ")',DELAY)");
	currFootprint++;
}

function setOpacity(obj, NewAlpha){
	  obj.style.opacity = (NewAlpha / 100);
	  obj.style.MozOpacity = obj.style.opacity;
	  obj.style.filter = 'alpha(opacity='+NewAlpha+')';
}

function fade(objID,CurrentAlpha,TargetAlpha,steps){
	  var obj = document.getElementById(objID);
	  
	  CurrentAlpha = parseInt(CurrentAlpha);
	  if (isNaN(CurrentAlpha)){
		   CurrentAlpha = parseInt(obj.style.opacity*100);
		   if (isNaN(CurrentAlpha))CurrentAlpha=100;
	  }
	  
	  var DeltaAlpha=parseInt((CurrentAlpha-TargetAlpha)/steps);
	  var NewAlpha = CurrentAlpha - DeltaAlpha;
	  
	  setOpacity(obj, NewAlpha);
	  
	  if (steps>1){
		var num = objID.substr('footprint'.length, objID.length - 'footprint'.length);
		animating[num] = setTimeout('fade("'+objID+'",'+NewAlpha+','+TargetAlpha+','+(steps-1)+')', 200);
	  } else {
		obj.style.visibility = hidebitK;
		 setOpacity(obj, 80); //reset opacity
	  }
}

//Make the image disappear
function hideFootprints(knum) {
	var footprint = eval(docbitK + "footprint" + knum + docbitendK);
	fade(footprint.id, 80, 20, 5);
}

function makeFootprints(){
	//Let the browser know when the mouse moves
	animating = new Array(MAX_FOOTPRINTS);
	for(var i=0; i<animating.length; i++){
		animating[i] = -1;
	}
	
	if(navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer"){
		EXTENSION = '.gif';
	}
		
	for (k=0;k<MAX_FOOTPRINTS;k++) {
		var div = document.createElement('div');
		div.id = 'footprint' + k;
		div.style.opacity = .80;
		div.style.MozOpacity = .80;
		div.style.filter = 'alpha(opacity='+80+')';
		div.className = 'footprint';
		var img = document.createElement('img');
		img.src = IMAGE_DIR + 'n' + EXTENSION;
		img.border = 0;
		img.width = IMAGE_WIDTH;
		img.height = IMAGE_HEIGHT;
		div.appendChild(img);
		document.body.appendChild(div);
	}
	
	// attach movement
	if (docLayers) {
	  	document.captureEvents(Event.MOUSEMOVE);
	  	document.onMouseMove = doFootprints;
	} else {
	  	document.onmousemove = doFootprints;
	}
}
