﻿// #- Constructor -#
function mouse_follower() {
	this.elements = new Array();
	this.add_element = mouse_follower_add_element;
	this.remove_element = mouse_follower_remove_element;
	this.mouseX = mouse_follower_mouseX;
	this.mouseY = mouse_follower_mouseY;
	this.follow = mouse_follower_follow;
}

// #- add_element -#
function mouse_follower_add_element(elementID, offX, offY) {
	this.elements.push(new Array(elementID, offX, offY));
}

// #- remove_element -#
function mouse_follower_remove_element(elementID) {
	var elements_length = this.elements.length;
	for (var x = 0; x < elements_length; x++) {	
		if (this.elements[x][0] == elementID) {
			this.elements.splice(x, 1);
			elements_length--;
			x--;
		}
	}
}

// #- follow -#
function mouse_follower_follow(evt) {
	var elements_length = this.elements.length;
	if (elements_length > 0) {
		var mouse_posX = parseInt(this.mouseX(evt));
		var mouse_posY = parseInt(this.mouseY(evt));
		for (var x = 0; x < elements_length; x++) {	
			if (document.getElementById) {		
				var obj = document.getElementById(this.elements[x][0]).style;
				obj.left = (mouse_posX + this.elements[x][1]) + 'px';
				obj.top = (mouse_posY + this.elements[x][2]) + 'px';
			}
		}
	}   
}

// #- mouseX -#
function mouse_follower_mouseX(evt) {
	if (!evt) {
		evt = window.event;
	}
	if (evt.pageX) {	//works in firefox
		return evt.pageX;
	} else if (evt.clientX) {	//works in ie
		return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft);
	} else {
		return 0;
	}
}

// #- mouseY -#
function mouse_follower_mouseY(evt) {
	if (!evt) {
		evt = window.event;
	}
	if (evt.pageY) {
		return evt.pageY;
	} else if (evt.clientY) {
		return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	} else {
		return 0;
	}
}
