//+--------------------------------------------------------------------------+
//| generic functions                                                        |
//+--------------------------------------------------------------------------+

document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
  return elements;
}

document.addEvent = function(object, eventType,fn, useCapture) {
	if (object.addEventListener) {
		object.addEventListener(eventType, fn, useCapture);
		return true;
	} else {
		if (object.attachEvent) {
			var r = object.attachEvent("on"+eventType, fn);
			return r;
		}
	}
};

document.getElementLeft = function(element) {
    var left = element.offsetLeft;
    var parentElement = element.offsetParent;
    while (parentElement != null) {
        left += parentElement.offsetLeft;
        parentElement = parentElement.offsetParent;
    }
    return left;
}

document.getElementTop = function(element) {
    var top = element.offsetTop;
    var parentElement = element.offsetParent;
    while (parentElement != null) {
        top += parentElement.offsetTop;
        parentElement = parentElement.offsetParent;
    }
    return top;
}

document.getEventSource = function(e){
	var node = e.target || e.srcElement;
	// safari check
	if (node.nodeType == 3) { 
		node = node.parentNode;
	}
	if ( node.nodeName.toLowerCase() == 'a' ) {
		return node;	
	} else {
		return node.parentNode;
	}
}

function makeFalse() {
	return false;
}