/* Define IE style 'attachEvent' function for every HTML element  */
if(Object.isUndefined(document.attachEvent) && !Object.isUndefined(HTMLElement)) {
	HTMLElement.prototype.attachEvent = function(event, ref) {
		var evt = event.replace(/^on/, '');
		this.addEventListener(evt, ref, false);
	}

	window.attachEvent = function(event, ref) {
		var evt = event.replace(/^on/, '');
		this.addEventListener(evt, ref, false);
	}
}

/**
 * ProBaseObject. This class provides a few common functions for JavaScript objects.
 * To let your class extend this class you should do this: extendsProBaseClass(YourClass);
 */
function ProBaseObject(){}
ProBaseObject.prototype.addChild = function(Class)
{
	for(var e in this) {
		if (!Class.prototype[e]) {
			Class.prototype[e] = this[e];
		}
	}
	Class.prototype.parent = this;
}
ProBaseObject.prototype.isIE = document.attachEvent;
if (ProBaseObject.prototype.isIE) {
	ProBaseObject.prototype.moveElem = document;
} else {
	ProBaseObject.prototype.moveElem = window;
}
ProBaseObject.prototype.getElemFromEvent = function(event)
{
	if (this.isIE) {
		return event.srcElement;
	} else {
		return event.target;
	}
}
ProBaseObject.prototype.scrollElem = null;
ProBaseObject.prototype.getPos	= function(elem)
{
	var parent = elem;
	var xPos = yPos = 0;
	do {
		xPos += parent.offsetLeft;
		yPos += parent.offsetTop;
	} while (parent = parent.offsetParent);

	return new Array(xPos, yPos);
}
ProBaseObject.prototype.setStyle = function(elem, style)
{
	for (var e in style) {
		elem.style[e] = style[e];
	}
}
ProBaseObject.prototype.getScrollPos = function()
{
	if (this.scrollElem == null) {
		if (document.body.scrollLeft == 0) {
			var htmlElems = document.getElementsByTagName('html');
			this.scrollElem = htmlElems[0];
		} else {
			this.scrollElem = document.body;
		}
	}

	return new Array(this.scrollElem.scrollLeft, this.scrollElem.scrollTop);
}
ProBaseObject.prototype.getFixedClientPos = function(e)
{
	var scrollPos = this.getScrollPos();
	return new Array(e.clientX + scrollPos[0], e.clientY + scrollPos[1]);
}

/**
 * This function wraps the ProBasObject.prototype.addChild() function in a nicer syntax
 */
function extendsProBaseClass(Class)
{
	ProBaseObject.prototype.addChild(Class);
}
