// JavaScript Document

	var sImgRoot = 'http://www.mushykeys.com/cursors/img/';
	var oBody = null;
	var oCursorContainer = null;
	var aElements = new Array();
	
	var cursorTypes = {
		Default : 0,
		Text : 1,
		Link : 2
	}
	
	function doMouseMove(e){
		var sCursor = '';
		var sCssCursor = '';
		var oPoint = getEventPageCoords(e);
		var currentCursor = cursorTypes['Default'];

 		for(i=0;i<aElements.length;i++){
			if(aElements[i].pointIsWithin(oPoint)){
				currentCursor = aElements[i].cursorType;
				break;
			}
		}

		switch(parseInt(currentCursor)){
			case cursorTypes['Default']:
				sCursor = 'default';
				sCssCursor = 'default';
				break;
			case cursorTypes['Text']:
				sCursor = 'text';
				sCssCursor = 'text';
				oPoint.x -= 5;
				oPoint.y -= 5;
				break;  
			case cursorTypes['Link']:
				sCursor = 'link';
				sCssCursor = 'hand';
				break;
			default:
				alert('no cursor set'+currentCursor);
		}
		
		oCursorContainer.innerHTML += '<img src="'+sImgRoot+sCursor+'Cursor.gif" onmouseover="setCursor('+currentCursor+')" style="position:absolute; top:'+oPoint.y+'px; left:'+oPoint.x+'px; cursor:pointer; cursor:'+sCssCursor+';" />';
		return true;
	}
	
	function getEventPageCoords(e){
		if (!e) e = window.event;    
		if (typeof e.pageY == 'number'){
		 	y = e.pageY;
		 	x = e.pageX;
		}
		else{
		 	y = (e.clientY) + document.documentElement.scrollTop;
		 	x = (e.clientX);
		}
		return new point(x, y);
	}
		
	function point(x, y){
		this.x = parseInt(x);
		this.y = parseInt(y);
	}
	
	function area(width, height){
		this.width = parseInt(width);
		this.height = parseInt(height);
	}
	
	function element(oPoint, oArea, oCursorType){
		this.point = oPoint;
		this.area = oArea;
		this.cursorType = oCursorType;
		this.pointIsWithin = element_pointIsWithin;
	}
	function element_pointIsWithin(oPoint){
		if((oPoint.x >= this.point.x && oPoint.x <= this.point.x+this.area.width) && (oPoint.y >= this.point.y && oPoint.y <= this.point.y+this.area.height)){
			return true;
		}
		return false;
	}

	function findPosY(obj){
		var curtop = 0;
		if(obj.offsetParent){
			while (obj.offsetParent){
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if(obj.y){
			curtop += obj.y;
		}
		return curtop;
	}
	function findPosX(obj){
		var curleft = 0;
		if(obj.offsetParent){
			while (obj.offsetParent){
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if(obj.x){
			curleft += obj.x;
		}
		return curleft;
	}
	
	function init(){
		if(document.getElementById('preventLoadingErrorSim') != null){alert('This page has been specifically coded not to allow this madness!\r\nTry it on a different site!'); return;}
		aElements = new Array();
		oBody = document.getElementsByTagName('body')[0];
		oBody.onmousemove = doMouseMove;
		
		if(!document.getElementById('cursorContainer')){
			oBody.innerHTML += '<div id="cursorContainer" style="position:absolute; top:0px; left:0px; z-index:100;"></div>';
		}
		oCursorContainer = document.getElementById('cursorContainer');
		
		initElements('a', cursorTypes['Link']);
		initElements('img', cursorTypes['Default']);
		initElements('h1', cursorTypes['Text']);
		initElements('h2', cursorTypes['Text']);
		initElements('h3', cursorTypes['Text']);
		initElements('span', cursorTypes['Text']);
		initElements('p', cursorTypes['Text']);
		
		var img1 = new Image();
		img1.src = sImgRoot+'defaultCursor.gif';
		var img2 = new Image();
		img2.src = sImgRoot+'linkCursor.gif';
		var img3 = new Image();
		img3.src = sImgRoot+'textCursor.gif';
	}
	function initElements(sTagName, oCursorType){
		var aTags = document.getElementsByTagName(sTagName);
		for(i=0;i<aTags.length;i++){
			aElements.push(new element(new point(findPosX(aTags[i]), findPosY(aTags[i])), new area(aTags[i].scrollWidth, aTags[i].scrollHeight), oCursorType));
		}
	}
	
	function setCursor(eCursor){
		currentCursor = eCursor;
		return true;
	}
	
	window.onload = init;
	window.onresize = init;
	
	init();
