//////////////////////////////////////////////////////////////////////
// Add event listener to an object
//////////////////////////////////////////////////////////////////////
function AddEventListener(obj, event_name, listener)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(event_name, listener, false);
	}
	else if (obj.attachEvent)
	{
		obj.attachEvent("on" + event_name, listener);
	}
}


//////////////////////////////////////////////////////////////////////
// Set the opacity of a DOM object
//////////////////////////////////////////////////////////////////////
function SetOpacity(domObj, opacity)
{
	var style = domObj.style;

	style.opacity      = opacity / 100;
	style.MozOpacity   = opacity / 100;
	style.KhtmlOpaticy = opacity / 100;
	style.filter       = 'alpha(opacity=' + opacity + ')';
}

//////////////////////////////////////////////////////////////////////
// Get position of of an object relatively to the window, or to another object
//////////////////////////////////////////////////////////////////////
function GetRelativePosition(obj, refObj)
{
	var pos = { top: 0, left: 0 };
	if (obj.offsetParent)
	{
		do
		{
			if (refObj && obj.offsetParent === refObj)
			{
				return pos;
			}
			pos.top  += obj.offsetTop;
			pos.left += obj.offsetLeft;
		}
		while (obj = obj.offsetParent);
	}
	
	if (refObj)
	{
		var ref_pos = GetRelativePosition(refObj);
		pos.top  -= ref_pos.top;
		pos.left -= ref_pos.left;
	}

	return pos;
}

//////////////////////////////////////////////////////////////////////
// Add a bind method to Function class
//////////////////////////////////////////////////////////////////////
Function.prototype.bind = function(this_obj /*, ... and optionally more args */)
{
	var func = this;
	var args = [];
	for (var i = 1; i < arguments.length; ++i)
	{
		args.push(arguments[i]);
	} 

	return function(e)
	{
		func.apply(this_obj, args);
	}
}

