/*
	Browser Compatibility Layer
	---------------------------
*/

// constructs a browser information object
// constructs a browser information object


//--------------------------------
function browserObject() {
//--------------------------------
	this.ver = navigator.appVersion;
	this.dom = document.getElementById?1:0;

	this.ie = (navigator.appName == "Microsoft Internet Explorer")?1:0;
	this.ns = (navigator.appName == "Netscape")?1:0;
	this.moz = ((navigator.userAgent.indexOf("Mozilla")!=-1)&&(navigator.userAgent.indexOf("Gecko")!=-1)&&(navigator.userAgent.indexOf("Netscape6")==-1));
	this.mac = (navigator.appVersion.indexOf("Mac")>0);
	this.win = (navigator.appVersion.indexOf("Win")>0);
	this.xwin = (navigator.appVersion.indexOf("X11")>0);
	this.opera = (navigator.userAgent.indexOf('Opera')!=-1)?1:0;
	this.ie4 = (this.ie&&!this.dom)?1:0;
	this.ie5 = (this.ie&&this.ver.indexOf("MSIE 5")>-1)?1:0;
	this.ie6 = (this.ie&&this.ver.indexOf("MSIE 6")>-1)?1:0;
	this.ns4 = (this.ns&&this.ver.indexOf("4.")>-1)?1:0;
	this.ns6 = (this.ns&&this.ver.indexOf("5.")>-1&&this.dom)?1:0;
	if(this.ns6) this.ie = true;

	this.compatible=((this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6) && !this.opera);
	this.width = null; //to be set later after document is loaded;
	this.height = null; //to be set later after document is loaded;
	return this;
}
var browser = new browserObject();


// check scrolling in Netscape
function testScroll() {
	// Initialize scrollbar cache if necessary
	if (window._pageXOffset==null) {
		window._pageXOffset = window.pageXOffset
		window._pageYOffset = window.pageYOffset
	}
	// Expose Internet Explorer compatible object model
	document.body.unwatch("scrollTop") 
	document.body.unwatch("scrollLeft")
	document.body.scrollTop = window.pageYOffset
	document.body.scrollLeft = window.pageXOffset
	window.document.body.scrollHeight = document.height
	window.document.body.scrollWidth = document.width    
	document.body.watch("scrollTop",CheckScrollTop)
	document.body.watch("scrollLeft",CheckScrollLeft)

	document.body.clientWidth = window.innerWidth-20; 
	document.body.clientHeight = window.innerHeight-20;

	// If cache!=current values, call the onscroll event
	if (((window.pageXOffset!=window._pageXOffset) || (window.pageYOffset!=window._pageYOffset)) && (window.onscroll)) 
		window.onscroll()
	// Cache new values
	window._pageXOffset = window.pageXOffset     
	window._pageYOffset = window.pageYOffset
}

// Watch body.scrollTop in NS and respond in values change
function CheckScrollTop(prop,temp,newValue) {
	window.pageYOffset = newValue;
	return newValue	
}

function CheckScrollLeft(prop,temp,newValue) {
	window.pageXOffset= newValue;
	return newValue	
}

// Move and Resize CCS layers.
function layerMoveBy( idTarget, x, y) {
	if (browser.ie) {
		idTarget.style.pixelLeft = idTarget.offsetLeft+x;
		idTarget.style.pixelTop = idTarget.offsetTop+y;
		//idTarget.style.pixelLeft = idTarget.style.pixelLeft+x;
		//idTarget.style.pixelTop = idTarget.style.pixelTop+y;
	}
	else {
		idTarget.left = idTarget.left+x;
		idTarget.top = idTarget.top+y;
	}
}

function layerMoveTo( idTarget, x, y) {
	if (browser.ie) {
		idTarget.style.pixelLeft = x;
		idTarget.style.pixelTop = y;
	}
	else {
		idTarget.left = x;
		idTarget.top = y;
	}
}

function layerResizeBy( idTarget, x, y) {
	if (browser.ie) {
		idTarget.style.pixelWidth = idTarget.offsetWidth+x;
		idTarget.style.pixelHeight = idTarget.offsetHeight+y;
	}
	else {
		idTarget.resizeBy( x, y)
	}
}

function layerResizeTo( idTarget, x, y) {
	if (browser.ie) {
		idTarget.style.pixelWidth = x;
		idTarget.style.pixelHeight = y;
	}
	else {
		idTarget.resizeTo( x, y);
	}
}

// get layer properties
function layerGetX( idTarget ) {
	return (browser.ie?idTarget.offsetLeft:idTarget.left);
}

function layerGetY( idTarget ) {
	return (browser.ie?idTarget.offsetTop:idTarget.top);
}

function layerGetWidth( idTarget ) {
	return (browser.ie?idTarget.offsetWidth:idTarget.clip.width);
}

function layerGetHeight( idTarget ) {
	return (browser.ie?idTarget.offsetHeight:idTarget.clip.height);
}

function layerGetContentHeight( idTarget ) {
	if (browser.ie) {
		return (idTarget.scrollHeight);
	}
	else {
		return (idTarget.document.height);
	}
}

function layerGetVisible( idTarget ) {
	if (browser.ie) {
		return (idTarget.style.visibility != "hidden");
	}
	else {
		return (idTarget.visibility != "hide");
	}
}

function layerGetZ( idTarget ) {
	if (browser.ie) {
		return (idTarget.style.zIndex);
	}
	else {
		return (idTarget.zIndex);  //might be incorrect
	}
}

function layerSetZ( idTarget, z ) {
	if (browser.ie) {
		idTarget.style.zIndex=z;
	}
	else {
		idTarget.zIndex=z;  //might be incorrect
	}
}

function layerShow( idTarget ) {
	if (browser.ie) {
		idTarget.style.visibility = "visible";
		idTarget.style.pixelHeight = layerGetContentHeight( idTarget );
	}
	else {
		idTarget.visibility = "show";
		idTarget.clip.height = layerGetContentHeight( idTarget );
	}
}

function layerHide( idTarget ) {
	if (browser.ie) {
		idTarget.style.visibility = "hidden";
		idTarget.style.pixelHeight = 0;
	}
	else {
		idTarget.visibility = "hide";
		idTarget.clip.height = 0;
	}
}

function layerInside( idTarget, x, y) {
	inside = false;
	if ((x>=layerGetX(idTarget)) && (x<=(layerGetX(idTarget)+layerGetWidth(idTarget))))
		if ((y>=layerGetY(idTarget)) && (y<=(layerGetY(idTarget)+layerGetContentHeight(idTarget))))
			inside = true;
	return (inside);
}

// fix resize bug in Netscape
function initResizeBug() {
	document.orPageWidth = innerWidth;
	document.orPageHeight = innerHeight;
	onresize = nsResizeBug;
}

function nsResizeBug() {
	if (innerWidth != document.orPageWidth || innerHeight != document.orPageHeight) location.reload();
}

// initiate the browser compatibility layer
// returns false if browser not compatible
function initBrowserComp() {
	if (browser.compatible) { // browser compatible ?
		if (browser.ns4) { // netscape 4? build a fake DOM
			document.all = document;
			document.body = new Object;
			document.body.clientWidth = window.innerWidth-20; 
			document.body.clientHeight = window.innerHeight-20
			document.body.scrollTop = window.pageXOffset; 
			document.body.scrollLeft = window.pageYOffset
			document.body.watch("scrollTop",CheckScrollTop);
			document.body.watch("scrollLeft",CheckScrollLeft);
			document.body.offsetParent = null;
			document.body.offsetLeft = document.body.offsetTop = 0;
			document.body.all = new Object;
			document.parentWindow = window;
			
			initResizeBug(); // init resize bug in NS
			
			testScroll();
			setInterval("testScroll()",50);	
			
			document.captureEvents( Event.MOUSEMOVE || Event.MOUSEDOWN );	
		}
		
		return (true);
	}
	else { // browser is not compatible
		return (false);
	}
}

// IMAGE PRELOAD AND SWAP

function preloadImages() { 
	if (document.images) {
		var imgStr = preloadImages.arguments;
		if (!document.preloadArray) document.preloadArray = new Array();
		var n = document.preloadArray.length;
		for (var i=0; i<preloadImages.arguments.length; i++) {
			document.preloadArray[n] = new Image;
			document.preloadArray[n].src = imgStr[i];
			n++;
		} 
	}
}

function swapImage(imgSrc,imgID,layerID,layerMother,layerGrandmother) { 
	if(browser.ns) {
		var layerStr = (swapImage.arguments.length > 4) ? "document." + layerGrandmother + "." : "";
		layerStr += (swapImage.arguments.length > 3) ? "document." + layerMother + "." : "";
		layerStr += (swapImage.arguments.length > 2) ? "document." + layerID + "." : "";
		eval(layerStr + "document." + imgID + ".src = '" + imgSrc + "'");
	} else {
		var layerStr = (swapImage.arguments.length > 2) ? "document.all." + layerID + "." : "";
		eval(layerStr + "document." + imgID + ".src = '" + imgSrc + "'");
	}
}

function mouseMove(e) {
	mouseX = (browser.ns)? e.pageX : event.x+document.body.scrollLeft
	mouseY = (browser.ns)? e.pageY : event.y+document.body.scrollTop
	if (activeMenu!=-1) {
		if (mouseY>the_height) resetMenu();
	}
	return true;
}