/* ############## Common Helper Functions used throughout the site */

function swapLayer(elementID, showLayer) {
	var obj = getDocObject(elementID);
	if (showLayer) {
		obj.style.display = "block";
		obj.style.visibility = "visible";
	} else {
		// This funny bit of code is to fix a Firefox bug... (yes, really)
		// see https://bugzilla.mozilla.org/show_bug.cgi?id=97506
		obj.style.display = "none";
		obj.style.display = "";
		obj.style.display = "none";
	}
}


// addEvent and removeEvent by Scott Andrew
// www.scottandrew.com
function addEvent(obj, evType, fn){
 if (obj.addEventListener){
   obj.addEventListener(evType, fn, false);
   return true;
 } else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
   return r;
 } else {
   return false;
 }
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

function moveObject(objectId, newX, newY) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
       // alert("before = " + styleObject.left);
	   styleObject.left = newX  + 'px';
	   //alert("after = " + styleObject.left);
	   styleObject.top = newY  + 'px';
	   return true;
    } else {
	   // we couldn't find the object, so we can't very well move it
	   return false;
    }
} // moveObject

function getStyleObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
	// W3C DOM
	return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
	// MSIE 4 DOM
	return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
	// NN 4 DOM.. note: this won't find nested layers
	return document.layers[objectId];
    } else {
	return false;
    }
} // getStyleObject

function getDocObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
    	// W3C DOM
    	return document.getElementById(objectId);
    } else if (document.all && document.all(objectId)) {
    	// MSIE 4 DOM
    	return document.all(objectId);
    } else if (document.layers && document.layers[objectId]) {
    	// NN 4 DOM.. note: this won't find nested layers
    	return document.layers[objectId];
    } else {
	   return false;
    }
} // getStyleObject

/*
function getDocObj(elem,parent) {
	if (document.layers) {
	    if (parent) {
	     return "document."+parent+".document."+elem;
	      }
	    else {
		return "document."+elem;
		     }
	  }
	    else if (document.all) {
		return "document.all."+elem;
	}
	    else if (document.getElementById) {
		return "document.getElementById('"+elem+"')";
	}
}

function getStyleObj(elem,parent) {
	if (document.layers) {
	    if (parent) {
	     return "document."+parent+".document."+elem;
	      }
	    else {
		return "document."+elem + ".style";
		     }
	  }
	    else if (document.all) {
		return "document.all."+elem + ".style";
	  }
	    else if (document.getElementById) {
		return "document.getElementById('"+elem+"').style";

	}
}*/

/* ############## fancy table enhance */

function domTableEnhance()
{
	if(!document.createTextNode){return;}
	var tableClass='datatable';
	var colourClass='enhancecol';
	var hoverClass='enhancehover';
	var activeClass='enhanceactive';
	var alltables,bodies,i,j,k,addClass,trs,c,a;
	alltables=document.getElementsByTagName('table');
	for (k=0;k<alltables.length;k++)
	{
		if(!alltables[k].className.match(tableClass)){continue;}
		bodies=alltables[k].getElementsByTagName('tbody');
		for (i=0;i<bodies.length;i++)
		{
			trs=bodies[i].getElementsByTagName('tr');
			for (j=0;j<trs.length;j++)
			{
				if(trs[j].getElementsByTagName('td').length>0)
				{
					addClass=j%2==0?' '+colourClass:'';
					trs[j].className=trs[j].className+addClass;
					trs[j].onclick=function()
					{
						if(this.className.match(activeClass))
						{
							var rep=this.className.match(' '+activeClass)?' '+activeClass:activeClass;
							this.className=this.className.replace(rep,'');
						} else {
							this.className+=this.className?' '+activeClass:activeClass;
						}
					}
					trs[j].onmouseover=function()
					{
						this.className=this.className+' '+hoverClass;
					}
					trs[j].onmouseout=function()
					{
						var rep=this.className.match(' '+hoverClass)?' '+hoverClass:hoverClass;
						this.className=this.className.replace(rep,'');
					}
				}
			}
		}
	}
}

