/*****
    File Name: domFunctions.js
    Author: Ryan Kinal
	Date: 05/19/06
	Description:  General-use functions, mostly for event handling
	Updated By:
	Updated Date: 6/16/06
	Last Change: Added a find to the Array prototype
*****/


/*****
	Cross-browser event handling for IE5+, NS6+, and Mozilla/Gecko
		By Scott Andrews
*****/
function addEvent(p_elm, p_evType, p_fn, p_useCapture)
{
	if (p_elm.addEventListener)
	{
		p_elm.addEventListener(p_evType, p_fn, p_useCapture);
		return true;
	}
	else if (p_elm.attachEvent)
	{
		return p_elm.attachEvent("on" + p_evType, p_fn);
	}
	else
	{
		p_elm["on" + p_evType] = fn;
	}
}

/*****
	Returns mouse position from event p_e.  This should only be called
	from an event handler, as Internet Explorer will not have an event
	to pass to this function, and instead relies on window.event.  This
	will return the mouse position as an object.  obj.x is the mouse's
	x position, obj.y is the mouse's y position.

	Author:  Ryan Kinal
*****/
function mousePos(p_e)
{
	posx = 0;
	posy = 0;

	if (!p_e)
		var e = window.event;
	else
		var e = p_e;

	if (e.pageX || e.pageY)
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX + document.body.scrollLeft;
		posy = e.clientY + document.body.scrollTop;
	}

	returnObj = new Object();
	returnObj.x = posx;
	returnObj.y = posy;
	return returnObj;
}

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 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;
}

/***
	A very simple find, added to the array prototype.
	Simply call with myArray.find(element)

	Author: Ryan Kinal
***/
Array.prototype.find = function(p_elem)
{
	for (var i = 0; i < this.length; i++)
	{
		if (this[i] == p_elem)
		{
			return i;
		}
	}

	return false;
}

Array.prototype.remove = function(p_elem)
{
	var index = this.find(p_elem);
	var before = this.slice(0, index);
	var after = this.slice(index + 1);
	before = before.concat(after);
	return before;
}