// ------------------------------
//  ImageHandler Class
// ------------------------------

function ImageHandler() {
	this.root = "/lib/images/";
	this.extension = ".gif";
	this.onstate = "_on";
	this.atstate = "_at";
	this.labelstart = "";
	this.labelend = "";
	this.showlabel = 1;
	this.activeid = "";
	this.atname = "";
	this.uselayers = 0;
	this.layerprefix = "l";
	this.layeranchorid = "";
	this.layershowid = "";
	this.browser  = new ih_browser();
	this.px = (this.browser.mac && !this.browser.nn4)?"px":"";
	this.images = new Array();
	this.add = new Function("id","name","ih_add(this,id,name)");
	this.swap = new Function("img","ison","return ih_swap(this,img,ison)");
	this.setup = new Function("ih_setup(this)");
	this.markThisPage = new Function("n","ih_markThisPage(this,n)");
	return this;
}

function ih_browser() {
	this.agent = navigator.userAgent;
	this.mac = (this.agent.indexOf("Mac")>-1) ? 1 : 0;		
	this.nn4 = (document.layers) ? 1 : 0;	
	this.nn = (this.agent.indexOf("Netscape")>-1 || this.nn4) ? 1 : 0;
	if (this.nn4) {
		this.styleref = "";
		this.hide = "hide";
		this.show = "show";
	} else {
		this.styleref = ".style";
		this.hide = "hidden";
		this.show = "visible";
	}
	return this;
}

function ih_add(ih,id,name) {
	ih.images[ih.images.length] = new ih_image(ih,id,name);
}

function ih_image(ih,id,name) {
	this.id = id;
	this.name = name;
     	this.img = new Image();
	this.img.src = ih.root + name + ih.onstate + ih.extension;
	this.layer = null;
	return this;
}

function ih_swap(ih,img,ison) {
	// Iterate through images
	var newactiveid = "";
	for (var i=0;i<ih.images.length;i++) {
		var ih_img = ih.images[i];

		// If old active or new deactive
		if (ih_img.name!=ih.atname && 
			((ison && ih_img.id==ih.activeid) || (!ison && ih_img.id==img))) {

			// Deactivate image
			document.images[ih_img.id].src = ih.root + ih_img.name + ih.extension;
			
			// Deactivate layer
			if (ih.uselayers && ih_img.layer) ih_setvisibility(ih,ih_img.layer,0);

			// Set message if deactivating
			if (!ison)  window.status="";
		}

		// If new active
		if (ih_img.name!=ih.atname && ison && ih_img.id==img) {

			// Activate image
			document.images[ih_img.id].src = ih.root + ih_img.name + ih.onstate + ih.extension;
			
			// Activate layer
			if (ih.uselayers && ih_img.layer) ih_setvisibility(ih,ih_img.layer,1);

			// Set message
			if (ison)  window.status=ih.labelstart + 
				document.images[ih_img.id].alt + ih.labelend;

			// Set new active item
			newactiveid  = img
		}

	}

	// Set active id and exit
	ih.activeid = newactiveid;
	return true;
}

function ih_setvisibility(ih,obj,ison) {
	eval('obj' + ih.browser.styleref + '.visibility="' + ((ison)?ih.browser.show:ih.browser.hide) + '"' );
}

function ih_setup(ih) {
	if (!ih.uselayers) return;
	var coords = new ih_objectcoords(ih.layeranchorid,'IMG');
	for (i=0;i<ih.images.length;i++) {
		var ih_img = ih.images[i];
		ih_img.layer = ih_getlayer(ih.layerprefix + ih_img.id);
		if (ih_img.layer) {
			var styleobj = eval('ih_img.layer' + ih.browser.styleref);
			styleobj.left = (parseInt(styleobj.left) + coords.left) + ih.px;
			styleobj.top = (parseInt(styleobj.top) + coords.top) + ih.px;
		}
		if (ih.layershowid==ih_img.id) ih.swap(ih_img.id,1);
	}

	if (document.layers) window.onresize=new Function("location.reload(true)");
}

function ih_objectcoords(id,typ) {
	var obj = ih_getlayer(id,typ);
	if (document.layers) {
		this.top=parseInt(obj.y);
		this.left=parseInt(obj.x);
		this.width=(typ=='IMG')?parseInt(obj.width):obj.clip.width;
		this.height=(typ=='IMG')?parseInt(obj.height):obj.clip.height;
	} else {
		this.top=0;
		this.left=0;	
		var pe = obj;
		while (pe) {
			this.top += parseInt(pe.offsetTop);
			this.left += parseInt(pe.offsetLeft);			
			pe = pe.offsetParent;
		}
		this.width=obj.offsetWidth;
		this.height=obj.offsetHeight;
	}
	return this;
}

function ih_getlayer(id,typ) {
	if (document.layers && typ=='IMG') return document.images[id];
	else if (document.layers) return document.layers[id];
	else return document.getElementById(id);
}

function ih_markThisPage(ih,n) {
	ih.atname = n;
	for (var i=0;i<ih.images.length;i++) {
		var ih_img = ih.images[i];
		if (ih_img.name==n) {
			document.images[ih_img.id].src = ih.root + n + 
				ih.atstate + ih.extension;
			return;
		}
	}
}
