/*

dom_helpers.js
Purpose - generic helper functions for dom scripting
Dependencies: 
none
Version history
1.0 Initial release IA October 16, 2007
1.01 Added tracer function IA October 19, 2007
1.02 Added getXHR function IA November 1, 2007

*/

function getElementsByClassName(className) {
	var results = [];
	walkTheDom(document.body, function (node) {
		var a, c = node.className, i;
		if (c) {
			a = c.split(' ');
			for (i = 0; i < a.length; i++) {
				if (a[i] == className) {
					results.push(node);
					break;
				}
			}
		}
	});
	return results;
}

function walkTheDom(node, func) {
	func(node);
	node = node.firstChild;
	while (node) {
		walkTheDom(node, func);
		node = node.nextSibling;
	}
}

function cancel(event) {
	event.cancelBubble = true;
	if (event.stopPropagation) {
	     event.stopPropagation()
	}
}

function addEvent(event, targ, func) {
	if (targ.attachEvent) {
	   targ.attachEvent('on' + event, func); 
	} else {
	   targ.addEventListener(event, func, false); 
	}
}

function trace(msg) {
	document.tracer = document.tracer || false;
	if (!document.tracer) {
		n = document.createElement('div');
		n.setAttribute('id', "tracer");
		document.body.appendChild(n);
		document.tracer = true;
	}
	el = document.getElementById('tracer');
	el.innerHTML += msg + '<br />';
}

function getXHR() {
  var xhr = false;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}
