function getElement(name) {	// cross-platform version of getElementById
	d = (arguments.length == 2 ? arguments[2] : document);
	return(d.getElementById ? d.getElementById(name) : d.all[name]);
}
function getRelativePos(e) {	// Get mouse relative to an enclosing element 
	return(new Point((e.offsetX ? e.offsetX : e.layerX),
					 e.offsetY ? e.offsetY : e.layerY));
}
function getPosition(event) {
	return(new Point(event.clientX, event.clientY));
}
function eventTarget(event) {	// get element that was clicked on out of event
	return((event.target ? event.target : window.event.srcElement));
}
function stopEvent(event) { // Prevent the default mouse action from happening
	if (event.preventDefault) { 		// NS
		event.preventDefault();
	} else {							// IE
		window.event.cancelBubble = true;
		window.event.returnValue = false; 
	}
}

// These functions setup/teardown mouse capturing events
function mouseDragStart(dragGo, dragStop) {
  if (document.attachEvent) {		// IE
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
  } else {							// NS
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
  }
}
function mouseDragStop(dragGo, dragStop) {
  // Stop capturing mousemove and mouseup events.
  if (document.detachEvent) {		// IE
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  } else {							// NS
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

// Use this instead of img.onload
function waitforimage(img,callback,timeout) {
	if (timeout == 0) timeout = 100;
	if (img.complete) return(callback(img));
	setTimeout(function() { waitforimage(img,callback,timeout); }, timeout);
}
// Basic CSS get/put functions for size and position
function getElementSize(obj) {
	return(new Point(parseInt(obj.style.width,10), 
					 parseInt(obj.style.height,10)));
}
function getElementPosition(obj) {
	return(new Point(parseInt(obj.style.left,10), parseInt(obj.style.top,10)));
}
function setElementSize(obj,x,y) {
	obj.style.width = x + "px";
	obj.style.height = y + "px";
}
function setElementPosition(obj, x, y) {
	obj.style.left = x + "px";
	obj.style.top = y + "px";
}
function moveElement(obj, x, y) {	// move element N pixels.
	var pt = getElementPosition(obj);
	setElementPosition(obj, pt.x - x, pt.y -y);
}

//-------------------------------
//  Button tools
//-------------------------------
function enableButton(name) {
    var obj = getElement(name);
    obj.disabled = false;
}

function disableButton(name) {
    var obj = getElement(name);
    obj.disabled = true;
}

//----------------------------------------
//  Change border color of element
//----------------------------------------
function showBorder(name) {
    getElement(name).style.borderColor = "#FA0";
}

function hideBorder(name) {
    getElement(name).style.borderColor = "#000";
}

//-------------------------------------------------------------
// Set an object's opacity to regular 
// (intended for .opaqueHolder and .fadeHolder classes)
//-------------------------------------------------------------

function highlightThumb(id) {
   getElement(id).className = "opaqueHolder";
}

function fadeThumb(id) {
   getElement(id).className = "fadeHolder";
}

//------------------------------------------------------
// John Resig's cross-browser event handling functions
//------------------------------------------------------
function addEvent( obj, type, fn ) {
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   }
   else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}  
   
function removeEvent( obj, type, fn ) {
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   }  
   else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }  
}
