/*
Event registration and the like.
NOTE: When registering a 'load' event, register it to the window, not the body
*/

// Register using an element's id
function registerEvent(eventName, elementId, handlerFunc)
{
	var element = document.getElementById(elementId);
	registerEventNode(eventName, element, handlerFunc);
}
// Register using a reference to the element's node
function registerEventNode(eventName, elementNode, handlerFunc)
{
	// register event handler in appropriate way
	if (elementNode.addEventListener)
	{ elementNode.addEventListener(eventName, handlerFunc, false); }
	else if (elementNode.attachEvent) // For IE
	{ elementNode.attachEvent('on' + eventName, handlerFunc); }
	else
	{
		var oldFunc = elementNode['on' + eventName];
		if (typeOf(oldFunc) == 'function')
		{ elementNode['on' + eventName] = function () { oldFunc; handlerFunc; }; }
		else
		{ elementNode['on' + eventName] = handlerFunc; }
	}
}

// Register using a reference to the element's node, preserving "this." as reference to the element
function registerEventNodeWithThis(eventName, elementNode, handlerFuncName)
{
	// register event handler in appropriate way
	if (elementNode.addEventListener)
	{ elementNode.addEventListener(eventName, function (e) {elementNode[handlerFuncName](e);}, false); }
	else if (elementNode.attachEvent) // For IE
	{ elementNode.attachEvent('on' + eventName, function (e) {elementNode[handlerFuncName](e);}); }
	else
	{
		var oldFunc = elementNode['on' + eventName];
		if (typeOf(oldFunc) == 'function')
		{ elementNode['on' + eventName] = function (e) { oldFunc(e); elementNode[handlerFuncName](e); }; }
		else
		{ elementNode['on' + eventName] = elementNode[handlerFuncName]; }
	}
}

// obtain an object holding mouse coords for event parameter
function getMouseCoords(e)
{
	// e should be obtained from a click event handler
	var posx = 0;
	var posy = 0;
	if (e.pageX || e.pageY)
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	
	// return an object with .x and .y properties
	return {x:posx,y:posy};
}

// run a function when enter key is pressed (convert to allow name OR id)
function parseEnter(e)
{
	var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
	if (keyCode == 13)
	{
		if (e.target)
		{
			evTargetName = e.target.name; /* Get name of triggering element (moz) */
		}
		else
		{
			// for IE: cancel event bubble and clear return value
			e.cancelBubble = true;
			e.returnValue = false;
			// Get name of triggering element
			evTargetName = e.srcElement.name;
		}
		
		// Trigger action
		enterAction(evTargetName); // function elsewhere in page (if required)
		return false; // Cancel usual effect for every other browser
	}
	else
	{ return true; }
}


