//	JavaScript Document
//	added by philip.preston@servasport.com

//	This is a Javascript Library used for positioning elements, cross browser


//	Global Variables
var isCSS, isW3C, isIE4, isNN4, isIE6CSS;


//	Initialise upon load to let browsers to establish content objects
function initDHTMLAPI() {
	if(document.images) {
		isCSS = (document.body && document.body.style) ? true : false;
		isW3C = (isCSS && document.getElementById) ? true : false;
		isIE4 = (isCSS && document.all) ? true : false;
		isNN4 = (document.layers) ? true : false;
		isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
	}
}


// Set event handler to initialse API
window.onload = initDHTMLAPI;


//	Nested NN4 layer from string 
function seekLayer(doc, name) {
	var theObj;
	for(var i=0; i<doc.layers.length; i++) {
		if(doc.layers[i].name == name) {
			theObj = doc.layers[i];
			break;
		}
		
		// dive into nested layers 
		if(doc.layers[i].document.layers.length > 0) {
			theObj = seekLayer(document.layers[i].document,name);
		}
	}
	return theObj
}


// 	Convert Object name string or object reference into
//	valid element object reference
function getRawObject(obj) {
	var theObj;
	if(typeof obj == "string") {
		if(isW3C) {
			theObj = document.getElementById(obj);
		} else if(isIE4) {
			theObj = document.all(obj);
		} else if(isNN4) {
			theObj = seekLayer(document, obj);
		}
	} else {
		// pass through the object reference
		theObj = obj;
	}
	return theObj;
}



//	Convert  object name string or object reference 
//	into valid style ( or NN4 layer) reference
function getObject(obj) {
	var theObj = getRawObject(obj);
	if(theObj && isCSS) {
		theObj = theObj.style
	}
	return theObj;
}


//	Posistion an Object at a specific pixel coordination
function shiftTo(obj, x, y) {
	var theObj = getObject(obj);
	if(theObj) {
		if(isCSS) {
			//	equalise incorrect numeric value type
			var units = (typeof theObj.left == "string") ? "px": 0;
			theObj.left = x + units;
			theObj.top = y + units;
		} else if (isNN4) {
			theObj.moveTo(x,y);
		}
	}
}



//	Move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
	var theObj = getObject(obj);
	if(theObj) {
		if(isCSS) {
			//	equalise incorrect numeric value type
			var units = (typeof theObj.left == "string") ? "px" : 0;
			theObj.left = getObjectLeft(obj) + deltaX + units;
			theObj.top = getObjectTop(obj) + deltaY + units;
		} else if(isNN4) {
			theObj.moveBy(deltaX,deltaY);
		}
	}
}


//	Set z order of object
function setZIndex(obj, zOrder) {
	var theObj = getObject(obj);
	if(theObj) {
		theObj.zIndex = zOrder;
	}
}


//	Set the Background Colour of an object
function setBGColor(obj, color) {
	var theObj = getObject(obj);
	if(theObj) {
		if(isNN4) {
			theObj.bgColor = color;
		} else if(isCSS) {
			theObj.backgroundColor = color;
		}
	}
}



// Set visibility of an object to visible
function show(obj) {
	var theObj = getObject(obj);
	if(theObj) {
		theObj.visibility = "visible";
	}
}


//	Set Visibility of an object to hidden
function hide(obj) {
	var theObj = getObject(obj);
	if(theObj) {
		theObj.visibility = "hidden";
	}
}


// Retrieve the xcoordinate of a positionable object
function getObjectLeft(obj) {
	var elem = getRawObject(obj);
	var result = 0;
	if(document.defaultView) {
		var style = document.defaultView;
		var cssDel = style.getComputedStyle(elem,"");
		result = cssDecl.getPropertyValue("left");
	} else if(elem.currentStyle) {
		result = elem.currentStyle.left;
	} else if(elem.style) {
		result = elem.style.left;
	} else if(isNN4) {
		result = elem.left;
	}
	return parseInt(result);
}


//	Retrieve the Y coordinate of a positionable object
function getObjectTop(obj) {
	var elem = getRawObject(obj);
	var result = 0;
	if(document.defaultView) {
		var style = document.defaultView;
		var cssDel = style.getComputedStyle(elem,"");
		result = cssDecl.getPropertyValue("top");
	} else if(elem.currentStyle) {
		result = elem.currentStyle.top;
	} else if(elem.style) {
		result = elem.style.top;
	} else if(isNN4) {
		result = elem.top;
	}
	return parseInt(result);
}



//	Retrieve the rendered width of an element
function getObjectWidth(obj) {
	var elem = getRawObject(obj);
	var result = 0;
	if(elem.offsetWidth) {
		result = elem.offsetWidth;
	} else if(elem.clip && elem.clip.width) {
		result = elem.clip.width;
	} else if(elem.style && elem.style.pixelWidth) {
		result = elem.style.pixelWidth;
	}
	return parseInt(result);
}



//	Retrieve the rendered height of the object
function getObjectHeight(obj) {
	var elem = getRawObject(obj);
	var result = 0;
	if(elem.offsetHeight) {
		result = elem.offsetHeight;
	} else if(elem.clip && elem.clip.height) {
		result = elem.clip.height;
	} else if(elem.style && elem.style.pixelHeight) {
		result = elem.style.pixelHeight;
	}
	return parseInt(result);
} 



//	Return the available content width space in browser window
function getInsideWindowWidth() {
	if(window.innerWidth) {
		return window.innerWidth;
	} else if(isIE6CSS) {
		return document.body.parentElement.clientWidth;
	} else if(document.body && document.body.clientWidth) {
		return document.body.clientWidth;
	}
	return 0;
}



//	Return the available content width space in browser window
function getInsideWindowHeight() {
	if(window.innerHeight) {
		return window.innerHeight;
	} else if(isIE6CSS) {
		return document.body.parentElement.clientHeight;
	} else if(document.body && document.body.clientHeight) {
		return document.body.clientHeight;
	}
	return 0;
}

function centerOnWindow(elemID) {
	var obj = getRawObject(elemID);
	var scrollX = 0, scrollY =0;
	if(document.body && typeof document.body.scrollTop != "undefined") {
		scrollX += document.body.scrollLeft;
		scrollY += document.body.scrollTop;
		if(document.body.parentNode && typeof document.body.parentNode.scrollTop != "undefined") {
			scrollX += document.body.parentNode.scrollLeft;
			scrollY += document.body.parentNode.scrollTop;
		}
	} else if(typeof window.pageXOffset != "undefined") {
		scrollX += window.pageXOffset;
		scrollY += window.pageYOffset;
	}
	var x = Math.round((getInsideWindowWidth()/2) - (getObjectWidth(obj)/2)) + scrollX;
	var y = Math.round((getInsideWindowHeight()/2) - (getObjectHeight(obj)/2)) + scrollY;
	//	If not IE then 8 pix offset to align add bar
	if(navigator.appName =="Netscape" && navigator.vendor != "Apple Computer, Inc.")
		x -= 8;
	shiftTo(obj,x,y);
	show(obj);
}

function centerOnWindowHoriz(elemID,top_val) {
	//	'obj' is the positionable object 
		var obj = getRawObject(elemID);
		//	Window Scroll factors
		var scrollX = 0, scrollY = 0;
		if(document.body 
		&& typeof document.body.scrollTop != "undefined") {
			scrollX += document.body.scrollLeft;
			scrollY += document.body.scrollTop;
			if(document.body.parentNode 
			&& typeof document.body.parentNode.scrollTop != "undefined") {
				scrollX += document.body.parentNode.scrollLeft;
				scrollY += document.body.parentNode.scrollTop;
			}
		}
		else if(typeof window.pageXOffSet != "undefined") {
			scrollX += window.pageXOffSet;
			scrollY += window.pageYOffSet;
		}
		var x = Math.round((getInsideWindowWidth()/2) -
			(getObjectWidth(obj)/2)) + scrollX;
		var y = top_val;
		//	If not IE then 8 pix offset to align add bar
		if(navigator.appName =="Netscape" && navigator.vendor != "Apple Computer, Inc.")
			x -= 8;	
		shiftTo(obj,x,y);
		show(obj);
}



