// window.js - handle window resizing (and fix? ns bug)

// startup flag
var gMod_Window = true;

/////////////////////////////////////////////////////////////////////////////////////////////

window.onresize = windowResize;

/////////////////////////////////////////////////////////////////////////////////////////////

// WindowManager object

function WindowManager(name){

	this.name = name;

	this.sizeEvents = new Array();
	this.addSize = WindowManager_AddSize;

	this.scrollEvents = new Array();
	this.addScroll = WindowManager_AddScroll;

	this.width = WindowManager_GetWidth;
	this.height = WindowManager_GetHeight;

	this.winWidth = WindowManager_GetWindowWidth;
	this.winHeight = WindowManager_GetWindowHeight;

	this.scrollX = WindowManager_ScrollX;
	this.scrollY = WindowManager_ScrollY;

	this.curScrollX = -1;
	this.curScrollY = -1;

	this.windowScroll = WindowManager_WindowScroll;
	window.setInterval(name+".windowScroll();",100);

}

function WindowManager_ScrollY(){
	if (document.body){if (document.body.scrollTop){return document.body.scrollTop;}}
	if (window.pageYOffset){return window.pageYOffset;}
	return 0;
}

function WindowManager_ScrollX(){
	if (document.body){if (document.body.scrollLeft){return document.body.scrollLeft;}}
	if (window.pageXOffset){return window.pageXOffset;}
	return 0;
}

function WindowManager_AddSize(value){
	this.sizeEvents[this.sizeEvents.length] = value;
}

function WindowManager_AddScroll(value){
	this.scrollEvents[this.scrollEvents.length] = value;
}

function WindowManager_GetWidth(){
	if (is.ns5){return window.innerWidth;}
	return (document.layers) ? window.innerWidth:document.body.clientWidth;
}

function WindowManager_GetHeight(){
	if (is.ns5){return window.innerHeight;}
	return (document.layers) ? window.innerHeight:document.body.clientHeight;
}

function WindowManager_GetWindowWidth(){
	if (document.body.offsetWidth){
		return document.body.offsetWidth;
	}else{
		return this.width;
	}
}

function WindowManager_GetWindowHeight(){
	if (document.body.offsetHeight){
		return document.body.offsetHeight;
	}else{
		return this.height;
	}
}

function WindowManager_WindowScroll() {

	//alert(this.scrollY());

	//have we scrolled?
	if ((this.curScrollX == this.scrollX()) && (this.curScrollY == this.scrollY())){return;}

	this.curScrollX = this.scrollX();	
	this.curScrollY = this.scrollY();

	//call scroll events
	for(var i=0;i<this.scrollEvents.length;i++){
		eval("var res = "+this.scrollEvents[i]+"("+this.scrollX()+","+this.scrollY()+")");
		if (!res){return false;}
	}
}


winman = new WindowManager("winman");

/////////////////////////////////////////////////////////////////////////////////////////////

//check for window sizing problem

var doSizeFix = false;

var initWindowWidth = 0;
var initWindowHeight = 0;

if ((navigator.appName == 'Netscape') && (parseInt(navigator.appVersion) == 4)) {
	if (typeof document.WM == 'undefined'){document.WM = new Object;}
	if (typeof document.WM.WM_scaleFont == 'undefined') {
		initWindowWidth = window.innerWidth;
		initWindowHeight = window.innerHeight;
		}
	winman.addSize("DoSizeFix");
	doSizefix = true;
	}

/////////////////////////////////////////////////////////////////////////////////////////////

function windowResize() {
	//call resize events
	for(var i=0;i<winman.sizeEvents.length;i++){
		eval("var res = "+winman.sizeEvents[i]+"("+winman.width()+","+winman.height()+")");
		if (!res){return false;}
	}
}

function DoSizeFix(){
	if (initWindowWidth != window.innerWidth || initWindowHeight != window.innerHeight){
		document.location = document.location;
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////
