/********
* cvhUtils - Useful things for saving time
* (c) 2008 Chris VandenHeuvel (fastballweb.com)
* version 1.3 (2008-02-27)
********/
var cvhUtils = {
  returnEvent : function(e) { // return the event, finding it for noncompliant browsers.
    if (!e) var e = window.event;
    return e;
  },
  eventTarget : function(e) { // return the target of an event.
    e = this.returnEvent(e);
    if (e.target) var targ = e.target;
    else if (e.srcElement) var targ = e.srcElement;
    if (targ.nodetype == 3) targ = targ.parentNode;
    return targ;
  },
  eventTargetHold : function(e) { // return the target and stop propagation.
    e = this.returnEvent(e);
    if(e.cancelBubble) e.cancelBubble = true;
    if(e.stopPropagation) e.stopPropagation();
    return this.eventTarget(e);
  },
  checkMouseMove : function(e, intendedTarget) { // test whether a mouseover/mouseout actually entered/left the intended target element.
    var returnValue = true;
    var e = this.returnEvent(e);
    var targ = this.eventTarget(e);
    // if (targ.nodeName.toLowerCase() != intendedTarget.nodeName.toLowerCase()) { returnValue = false; }
    var relTarg = e.relatedTarget || ((e.type.toLowerCase() == 'mouseover') ? e.fromElement : e.toElement);
    var testTarg = relTarg;
    while (relTarg && relTarg != intendedTarget && relTarg.parentNode) { 
      relTarg = relTarg.parentNode;
    }
    if (relTarg == intendedTarget) { returnValue = false; }
    return returnValue;
  },
  formatQueryString : function(query) { // sets ?'s and &'s properly in a url.
    query = query.replace(/\?/g, '&');
    query = query.replace('&', '?');
    return query;
  },
	lazySelect : function(select, clearLink) { // you don't have to hold ctrl to select multiple.
		var clear = function() {
			for (var i = 0; i < select.options.length; i++) {
				select.options[i].chosen = false;
				select.options[i].selected = false;
			}
		}
		var clickSelect = function() {
			this.chosen = this.chosen ? false : true;
			cycle(this.parentNode);
		}
		var cycle = function(select) {
			for (var i = 0; i < select.options.length; i++) {
				select.options[i].selected = select.options[i].chosen;
			}
		}
		if (clearLink) {
			if (typeof clearLink == 'boolean') {
				var link = document.createElement('span');
				link.className = 'clearSelect';
				link.style.display = 'block';
				link.style.cursor = 'pointer';
				link.onclick = clear;
				link.appendChild(document.createTextNode('Clear'));
				select.parentNode.insertBefore(link, select.nextSibling);
			} else {
				clearLink.onclick = clear;
			}
		}
		for (var i = 0; i < select.options.length; i++) {
			select.options[i].chosen = select.options[i].selected;
			select.options[i].onclick = clickSelect;
		}
	}
}
