var dom = document.getElementById;
var iex = document.all;
var ns4 = document.layers;
var rollOvers = new Object(), rollOverList = new Object();
var mouseX, mouseY, enterX, enterY;
var currentItem, currentText, currentClient, currentNumPages, currentPageNum;

function popup( filename, params, width, height, resizable, scrollbars, windowName, centered )
{
	if ( width == 0 ) width = screen.availWidth - 20;
	if ( height == 0 ) height = screen.availHeight - 20;
	if ( centered == true ) {
		topX = (screen.availWidth/2)-(width/2);
		topY = (screen.availHeight/2)-(height/2);
	} else {
		topX = 20;
		topY = 20;
	}
	if ( params != "" ) params = "?" + params;
	window.open( filename + params, windowName, "resizable=" + resizable + ",scrollbars=" + scrollbars + ",top=" + topY + ", left=" + topX + ",width=" + width + ",height=" + height);
}

RollOver = function(root, ext)
{
	this.root = root;
	this.ext = ext;
	this.states = new Object();
	this.states.over = new Image();
	this.states.over.src = this.root+"-over"+this.ext;
	this.states.out = new Image();
	this.states.out.src = this.root+this.ext;
}

RollOver.prototype.addState = function( state )
{
	this.states[state] = new Image();
	this.states[state].src = this.root+"-"+state+this.ext;
}

RollOverSet = function() {
	this.rollOvers = new Object();
	this.rollOverList = new Object();
}

RollOverSet.prototype.addRollOver = function( name, path, ext)
{
	var ro = new Object();
	ro.path = path;
	ro.ext = ext;
	ro.states = new Object();
	this.rollOverList[name] = ro;
}

RollOverSet.prototype.addRollOverState = function( name, state )
{
	this.rollOverList[name].states[state] = "";
}

RollOverSet.prototype.loadRollOvers = function()
{
	var name, i;
	for ( name in this.rollOverList ) {
		var rol = this.rollOverList[name];
		this.rollOvers[name] = new RollOver( rol.path, rol.ext );
		for ( i in rol.states ) {
			this.rollOvers[name].addState(i);
		}
	}
}

RollOverSet.prototype.mouseOver = function( imgName )
{
	getElement(imgName).src = this.rollOvers[imgName].states.over.src;
}

RollOverSet.prototype.mouseOut = function( imgName )
{
	getElement(imgName).src = this.rollOvers[imgName].states.out.src;
}

RollOverSet.prototype.doState = function( imgName, state )
{
	getElement(imgName).src = this.rollOvers[imgName].states[state].src;
}

function addEvent(event,method)
{
	this[event] = method;
	if(ns4) this.captureEvents(Event[event.substr(2,event.length).toUpperCase()]);
}

function removeEvent(event)
{
	this[event] = null;
	if(ns4) this.releaseEvents(Event[event.substr(2,event.length).toUpperCase()]);
}

function getElement(name)
{
	var el = dom ? document.getElementById(name) : iex ? document.all[name] : ns4 ? eval("document."+name) : false;
	if ( el == null ) return null;
	el.css = ns4 ? el : el.style;
	el.getTop = function(){return parseInt(el.css.top) || 0};
	el.setTop = function(y){el.css.top = ns4 ? y: y+"px"};
	el.getLeft = function(){return parseInt(el.css.left) || 0};
	el.setLeft = function(x){el.css.left = ns4 ? x: x+"px"};
	el.getHeight = function(){return ns4 ? el.document.height : el.offsetHeight};
	el.getWidth = function(){return ns4 ? el.document.width : el.offsetWidth};
	el.getClipHeight = function(){return ns4 ? el.clip.height : el.offsetHeight};
	el.hideVis = function(){el.css.visibility="hidden"};
	el.showVis = function(){el.css.visibility="visible"};
	el.addEvent = addEvent;
	el.removeEvent = removeEvent;
	return el;
}

function getYMouse(e)
{
	return iex ? event.clientY : e.pageY;
}

document.addEvent = addEvent;
document.removeEvent = removeEvent;

ScrollObj = function(speed, groupName)
{
	this.sidecar = null;
	this.speed = speed;
	this.trackObj = getElement(groupName+"ScrollTrack");
	this.upObj = getElement(groupName+"ScrollUp");
	this.downObj = getElement(groupName+"ScrollDown");
	this.dragObj = getElement(groupName+"ScrollThumb");
	this.contentMaskObj = getElement(groupName+"ContentClip");
	this.contentObj = getElement(groupName+"Content");
	this.obj = groupName+"ContentObject";
	eval(this.obj+"=this");
	
	this.contentMaskHeight = this.contentMaskObj.getClipHeight();
	this.contentHeight = this.contentObj.getHeight();
	this.contentLength = this.contentHeight-this.contentMaskHeight;
	if ( this.dragObj != null ) this.dragHeight = this.dragObj.getHeight()-2 - (iex ? 4 : 0);
	if ( this.trackObj != null ) {
		this.trackHeight = getElement(groupName+"ScrollThumbTrack").getHeight();
		this.trackTop = this.trackObj.getTop();
		this.trackLength = this.trackHeight-this.dragHeight;
		this.trackBottom = this.trackTop+this.trackLength;
		this.scrollLength = this.trackLength/this.contentLength;
	}
	this.scrollTimer = null;
	
	if ( this.trackObj != null ) {
		if (this.contentHeight <= this.contentMaskHeight) {
			this.dragObj.hideVis();
			if ( this.upObj != null ) this.upObj.hideVis();
			if ( this.downObj != null ) this.downObj.hideVis();
			this.trackObj.hideVis();
		} else {
			var self = this;
			this.trackObj.addEvent("onmousedown", function(e){self.scrollJump(e);return false});
			if ( this.upObj != null ) {
				this.upObj.addEvent("onmousedown", function(){self.scroll(self.speed);return false});
				this.upObj.addEvent("onmouseup", function(){self.stopScroll()});
				this.upObj.addEvent("onmouseout", function(){self.stopScroll()});
			}
			if ( this.downObj != null ) {
				this.downObj.addEvent("onmousedown", function(){self.scroll(-self.speed);return false});
				this.downObj.addEvent("onmouseup", function(){self.stopScroll()});
				this.downObj.addEvent("onmouseout", function(){self.stopScroll()});
			}
			this.dragObj.addEvent("onmousedown", function(e){self.startDrag(e);return false});
			if(iex) this.dragObj.addEvent("ondragstart", function(){return false});
		}
	}
}

ScrollObj.prototype.addSidecar = function( groupName )
{
	this.sidecar = new ScrollObj( this.speed, groupName);
	this.sidecar.scrollLength = this.trackLength/this.sidecar.contentLength;
}

ScrollObj.prototype.startDrag = function(e)
{
	this.dragStartMouse = getYMouse(e);
	this.dragStartOffset = this.dragObj.getTop();
	var self = this;
	document.removeEvent("onmousemove");
	document.addEvent("onmousemove", function(e){self.drag(e)});
	document.addEvent("onmouseup", function(){self.stopDrag()});
}

ScrollObj.prototype.stopDrag = function() 
{
	document.removeEvent("onmousemove");
	document.addEvent("onmousemove", getMouse);
	document.removeEvent("onmouseup");
}

ScrollObj.prototype.drag = function(e)
{
	var currentMouse = getYMouse(e);
//	var currentMouse = getMouseY();
	var mouseDifference = currentMouse-this.dragStartMouse;
	var dragDistance = this.dragStartOffset+mouseDifference;
	var dragMovement = (dragDistance<this.trackTop) ? this.trackTop : (dragDistance>this.trackBottom) ? this.trackBottom : dragDistance;
	this.dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-this.trackTop)*(1/this.scrollLength);
	this.contentObj.setTop(contentMovement);
	if ( this.sidecar != null ) {
		contentMovement = -(dragMovement-this.trackTop)*(1/this.sidecar.scrollLength);
		this.sidecar.contentObj.setTop(contentMovement);
	}
}

ScrollObj.prototype.scroll = function(speed)
{
	var contentMovement = this.contentObj.getTop()+speed;
	var dragMovement = this.trackTop-Math.round(this.contentObj.getTop()*(this.trackLength/this.contentLength));
	if(contentMovement > 0){
		contentMovement = 0;
	}else if(contentMovement < -this.contentLength){
		contentMovement = -this.contentLength;
	}
	if ( dragMovement < this.trackTop ) {
		dragMovement = this.trackTop;
	} else if ( dragMovement > this.trackBottom ) {
		dragMovement = this.trackBottom;
	}
	this.contentObj.setTop(contentMovement);
	this.dragObj.setTop(dragMovement);
	this.scrollTimer = window.setTimeout(this.obj+".scroll("+speed+")",25);
}

ScrollObj.prototype.stopScroll = function()
{
	if(this.scrollTimer){
		window.clearTimeout(this.scrollTimer);
		this.scrollTimer = null;
	}
}

ScrollObj.prototype.scrollJump = function(e)
{
	var currentMouse = getYMouse(e);
	var dragDistance = currentMouse-(this.dragHeight/2);
	var dragMovement = (dragDistance<this.trackTop) ? this.trackTop : (dragDistance>this.trackBottom) ? this.trackBottom : dragDistance;
	this.dragObj.setTop(dragMovement);
	var contentMovement = -(dragMovement-this.trackTop)*(1/this.scrollLength);
	this.contentObj.setTop(contentMovement);
}

function changeClient( clientName )
{
	currentClient = clients[clientName];
	for ( p in currentClient.pages ) {
		page = currentClient.pages[p];
		page.img.src = page.filename;
	}
	setNumPages(currentClient.pages.length);
	changePage(currentNumPages);
	getElement("clientName").innerHTML = currentClient.name;
}

function setNumPages(numPages)
{
	for ( i = 1; i < 9; i++ ) {
		icon = getElement('pageIcon'+i);
		icon.src = "/images/page.gif";
		if ( i > numPages ) icon.hideVis();
		else icon.showVis();
	}
	currentNumPages = numPages;
}

function changePage(pageNum)
{
	page = currentClient.pages[currentNumPages-pageNum];
	ltBox = getElement("lightBox");
	ltBox.src = "/images/work/loading.jpg";
	ttl = getElement("pageTitle");
	ttl.innerHTML = page.title;
	desc = getElement("description");
	desc.innerHTML = page.description;
	icon = getElement('pageIcon' + pageNum);
	icon.src = "/images/page-on.gif";
	icon = getElement('pageIcon' + currentPageNum);
	if ( icon != null ) icon.src = "/images/page.gif";
	currentPageNum = pageNum;
	if ( page.filename != "" ) ltBox.src = page.img.src;
}

Client = function(name)
{
	this.name = name;
	this.pages = new Array();
	this.id = -1;
}

Page = function()
{
	this.title = "";
	this.description = "";
	this.filename = "";
	this.img = new Image();
}

FormButtons = function( formName, groupTitle )
{
	this.formName = formName;
	this.groupTitle = groupTitle;
	this.buttons = new Array();
	this.field = document[formName][groupTitle];
}

FormButtons.prototype.addButton = function( name, value, defaultSrc, selectedSrc )
{
	this.buttons[name] = new FormButton( this, name, value, defaultSrc, selectedSrc );
}

FormButtons.prototype.doClick = function( name ) 
{
	for ( i in this.buttons ) {
		var button = this.buttons[i];
		if ( button.name == name ) {
			button.selected = true;
			button.img.src = button.selectedImg.src;
			this.field.value = button.value;
		} else {
			button.selected = false;
			button.img.src = button.defaultImg.src;
		}
	}
}

FormButton = function( parent, name, value, defaultSrc, selectedSrc )
{
	this.parent = parent;
	this.name = name;
	this.value = value;
	this.img = getElement(name);
	var action = this.name;
	this.img.addEvent("onmouseup", function() { parent.doClick(action); } );
	this.defaultImg = new Image();
	this.defaultImg.src = defaultSrc;
	this.selectedImg = new Image();
	this.selectedImg.src = selectedSrc;
	this.selected = false;
}



function getMouse(e)
{
	mouseY = iex ? event.clientY : e.pageY;
	mouseX = iex ? event.clientX : e.pageX;
}

function getMouseY()
{
	return mouseY;
}

function fixNetscape4()
{
	if ( ns4origWidth != window.innerWidth || ns4origHeight != window.innerHeight ) {
		window.location.reload();
	}	
}

if (document.layers)
{
	ns4origWidth = window.innerWidth;
	ns4origHeight = window.innerHeight;
	window.onresize = fixNetscape4;
}

document.addEvent("onmousemove", getMouse);
