// api_Jesus.js - Animation API Scripts
//
// Performing miracles one function at a time.
//
// Requires JavaScript 1.2 and the
// Practical Browser Sniffer API (ua.js or api_BrowserSniffer.js)
/*
The contents of this file began from the example animation API
given in "Dynamic HTML:  The Definitive Reference"
by Danny Goodman.
It has been modified from that basis to what you see here.
In general it has been revised to take into account standards browsers
such as Netscape/Gecko based browsers.
*/

var isNav, isGecko, isIE, intervalID, objString;
var styleObj = "";
if (navigator.family == 'nn4') {
  isNav = true;
}
else if (navigator.family == 'ie4' && navigator.version >=4) {
  isIE = true;
}
else if (navigator.DOMHTML && navigator.DOMCSS2) {
  isGecko = true;
}

//Navigator 4.x resize handler
/*
function handleResize() {
  location.reload()
  return false
}
if (isNav) {
  window.captureEvents(Event.RESIZE)
  window.onresize = handleResize
}
*/

// Utility function returns height of object in pixels
function getObjHeight(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    return objString.clip.height;
  }
  else if (isIE) {
    //objString=eval("document.all." + obj + ".style");
    //return objString.pixelHeight;
    objString=document.getElementById(obj);
	  return objString.offsetHeight;
	  //Does the above work?
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj);
	return objString.offsetHeight;
  }
}

// Utility function returns width of object in pixels
function getObjWidth(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    return objString.clip.width;
  }
  else if (isIE) {
    //objString=eval("document." + obj);
    //return parseInt(objString.width);
    objString=document.getElementById(obj);
	  return objString.offsetWidth;
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj);
	  return objString.offsetWidth;
  }
}

// Utility function returns the x coordinate of a positionable object
function getObjLeft(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    return objString.left;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    return objString.pixelLeft;
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj);
	  return objString.offsetLeft;
  }
}

// Utility function returns the y coordinate of a positionable object
function getObjTop(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    return objString.top;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    return objString.pixelTop;
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj);
	  return objString.offsetTop;
  }
}

// Utility function returns the available content width space in browser window
function getInsideWindowWidth(obj) {
  if (isNav) {
    //objString=eval("document." + obj);
    return window.innerWidth;
  }
  else if (isIE) {
    //objString=eval("document.all." + obj + ".style");
    return document.body.clientWidth;
  }
  else if (isGecko) {
    // Don't know if this works
    //objString="document.getElementById(obj).style";
	  return window.innerWidth;
  }
}

// Utility function returns  the available content height space in browser window
function getInsideWindowHeight(obj) {
  if (isNav) {
    //objString=eval("document." + obj);
    return window.innerHeight;
  }
  else if (isIE) {
    //objString=eval("document.all." + obj + ".style");
    return document.body.clientHeight;
  }
  else if (isGecko) {
    // Don't know if this works
    //objString=document.getElementById(obj).style;
	  return window.innerHeight;
  }
}

// Utility function sets the visibility of an object to visible
function show(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.visibility = "visible";
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.visibility = "visible";
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj).style;
    objString.visibility = "visible";
  }
}

// Utility function sets the visibility of an object to hidden
function hide(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.visibility = "hidden";
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.visibility = "hidden";
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj).style;
    objString.visibility = "hidden";
  }
}

// Utility function sets an object to take up space
function uncollapse(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.display = "block";
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.display = "block";
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj).style;
    objString.display = "block";
  }
}

// Utility function sets an object to not take up space
function collapse(obj) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.display = "none";
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.display = "none";
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj).style;
    objString.display = "none";
  }
}



// Utility function to position an element at a specific x,y location
function shiftTo(obj, x, y) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.left = x;
    objString.top = y;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.pixelLeft = x;
    objString.pixelTop = y;
  }
  else if (isGecko) {
    // Don't know if this works
    objString=document.getElementById(obj).style;
    objString.left=x+"px";
    objString.top=y+"px";
  }
}

// Utility function to move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
  if (isNav) {
    objString=eval("document." + obj);
    objString.left += deltaX;
    objString.top += deltaY;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.pixelLeft += deltaX;
    objString.pixelTop += deltaY;
  }
  else if (isGecko) {
    objString=document.getElementById(obj).style;
    objString2=document.getElementById(obj);
    x=objString2.offsetLeft + deltaX
    y=objString2.offsetTop + deltaY
    objString.left=x+"px";
    objString.top=y+"px";
  }
}

// Utility function set height of an object
function setObjHeight(obj, height) {
  if (isNav) {
    // NN 4.x doesn't seem to care about the height of a DIV object
    // or at least not its background color. :(
    objString=eval("document." + obj);
    objString.height = height;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.pixelHeight = height;
  }
  else if (isGecko) {
    // This doesn't work... why?
    objString=document.getElementById(obj).style;
    //objString2=document.getElementById(obj);
	objString.height = height;
  }
}

// Utility function set width of an object
// Does this work???
function setObjWidth(obj, width) {
  if (isNav) {
    // NN 4.x doesn't seem to care about the height of a DIV object
    // or at least not its background color. :(
    objString=eval("document." + obj);
    objString.width = width;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.pixelWidth = width;
  }
  else if (isGecko) {
    // Does this work?
    objString=document.getElementById(obj).style;
    objString2=document.getElementById(obj);
	objString.width = width;
  }
}

// Experimental:
// Utility function to determine the 'clip' bounding box of an object
function clipValues(obj,which) {
  if (isNav) {
    objString=eval("document." + obj);
		if (which=="t") return objString.clip.top
		if (which=="r") return objString.clip.right
		if (which=="b") return objString.clip.bottom
		if (which=="l") return objString.clip.left
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
		var clipv = objString.clip.split("rect(")[1].split(")")[0].split("px")
		if (which=="t") return Number(clipv[0])
		if (which=="r") return Number(clipv[1])
		if (which=="b") return Number(clipv[2])
		if (which=="l") return Number(clipv[3])
  }
}

// Utility function to set the background color of an object
function setBGColor(obj, color) {
  if (isNav) {
    // Does this work?
    objString=eval("document." + obj);
    objString.bgColor = color;
  }
  else if (isIE) {
    objString=eval("document.all." + obj + ".style");
    objString.backgroundColor = color;
  }
  else if (isGecko) {
    objString=document.getElementById(obj).style;
	objString.backgroundColor = color;
  }
}

// Experimental:
// Utility function to toggle whether object should be displayed/take up space
function setObjectDisplay(obj) {
  if (isNav) {
    // Don't know if this works!
    //objString=eval("document." + obj);
    obj.display = (obj.display == "none" ) ? "" : "none";
  }
  else if (isIE) {
    //objString=eval(obj + ".style");
    //objString.display = displayChange;
    obj.style.display = (obj.style.display == "none" ) ? "" : "none";
  }
  else if (isGecko) {
    //objString=document.getElementById(obj).style;
    //objString.display = (objString.display == "none" ) ? "" : "none";
    obj.style.display = (obj.style.display == "none" ) ? "" : "none";
  }
}

// Experimental:
// Utility function to change opacity of an object
function setOpacity(obj, fade) {
  if (isNav) {
    // Do nothing for now...
  }
  else if (isIE) {
    objString=eval(obj + ".style");
    objString.filter="alpha(opacity="+fade+")";
  }
  else if (isGecko) {
    objString=document.getElementById(obj).style;
    //objString=eval(obj + ".style");
    objString.MozOpacity=fade/100;
  }
}

// ***End "Jesus" Animation API Library Code***