//	core.js
//	License: none
//		Use as you will but I'd appreciate an
//		email at tkegan@greenneondesign.com if 
//		you find a way to improve the code

//	Code shamelessly copied from Simon Willison's weblog
//		(http://simon.incutio.com/archive/2004/05/26/addLoadEvent)
function addLoadEvent(func) {
	var oldonload = window.onload;
	if(typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

//	Code shamelessly copied from Peter-Paul Koch's QuirksMode
//		(http://www.quirksmode.org/js/findpos.html)
function getObjectPosition(obj) {
    var curleft = 0;
      var curtop = 0;
      if(obj.offsetParent) {
            do {
                  curleft += obj.offsetLeft;
                  curtop += obj.offsetTop;
            } while(obj = obj.offsetParent);
      }
      return [curleft,curtop];
}

/**
 *	Finds all elements that are decesdants of the node with id:=root and of
 *	type:=tag with the given classname
 */
function getElementsByClassName(rootContainer, tag, elClass) {
	tag = tag || '*';
	var elementContainers = rootContainer.getElementsByTagName(tag);
	if(!elementContainers.length && (tag == '*' && root.all) ) {
		elementContainers = rootContainer.all; // IE < 6
	}
	
	var nodes = new Array();
	var re = new RegExp('(?:^|\\s+)' + elClass + '(?:\\s+|$)');

	for(var i = 0; i < elementContainers.length; i++) {
		element = elementContainers[i];
		if(re.test(element['className']))
			nodes[nodes.length] = element;
	}

	return nodes;
}

/**
 *	Sets the height of all elements that are decesdants of the node with id:=root
 *	and decesdants of elements with type:=parentType and class:=elClass and are of
 *	type:=type to the same height with a minimum set by minHeight
 */
function fixHeights(root, parentType, elClass, type, minHeight) {
	var maxHeight = minHeight;
	var elementCache = new Array();
	var elementContainers;
	var rootContainer = root != null ? document.getElementById(root) : document;

	if(parentType != null && elClass != null) {
		elementContainers = getElementsByClassName(rootContainer, parentType, elClass);
	} else {
		elementContainers = new Array();
		elementContainers[0] = rootContainer;
	}

	// and iterate through them to find max height
	for(var h = 0; h < elementContainers.length; h++) {
		var elements = elementContainers[h].getElementsByTagName(type);	// form list to search
		for (var i = 0; i < elements.length; i++) {	// iterate over the list
			if(maxHeight < elements[i].offsetHeight) {
				maxHeight = elements[i].offsetHeight;
			}
			elementCache[elementCache.length] = elements[i];
		}
	}
	for (var i = 0; i < elementCache.length; i++) {
		elementCache[i].style.height = maxHeight + 'px';
	}
}
