function Point(x, y) {
	this.x = x;
	this.y = y;
}

function Size(width, height) {
	this.width = width;
	this.height = height;
}

if (Array.prototype.addUnique == null)
	Array.prototype.addUnique = ZebuUtil_addUnique;
if (Array.prototype.findUnique == null)
	Array.prototype.findUnique = ZebuUtil_findUnique;
if (Array.prototype.removeUnique == null)
	Array.prototype.removeUnique = ZebuUtil_removeUnique;


function ZebuUtil_addUnique(object, equalProperty) {
	if (this.findUnique(object, equalProperty) != -1)
		return;
	
	this[this.length] = object;
}

function ZebuUtil_removeUnique(object, equalProperty) {
	var pos = this.findUnique(object, equalProperty);
	if (pos == -1)
		return;

	for (var i=pos; i < this.length; i++) {
		this[i] = this[i+1]; 	
	}

	delete this[this.length-1];
	this.length--;
}

function ZebuUtil_findUnique(object, equalProperty) {
	for (var i=0; i < this.length; i++) {
		if (this[i] == object)
			return i;

		if (equalProperty) {
			var equal = true;
			for (prop in object) {
				if (object[prop] != this[i][prop]) {
					equal = false;
					break;
				}
			}
			if (equal)
				return i;
		}
	}
	
	return -1;
}

function ZebuDOM() {
}
ZebuDOM.init = ZebuDOM_init;
ZebuDOM.checkVersion = ZebuDOM_checkVersion;
ZebuDOM.getWindowSize = ZebuDOM_getWindowSize;
ZebuDOM.getFrameDocument = ZebuDOM_getFrameDocument;
ZebuDOM.turnIntoZebuDocument = ZebuDOM_turnIntoZebuDocument;
ZebuDOM.turnIntoZebuElement = ZebuDOM_turnIntoZebuElement;

function ZebuDOM_init() {
	if (ZebuDOM.initialized)
		return;

	ZebuDOM.initialized = true;

	ZebuDOM.checkVersion();
	ZebuDOM.turnIntoZebuDocument(document);

	if (ZebuDOM.listenerChain == null) 
		ZebuDOM.listenerChain =  new Array();

	window.onload = ZebuDOM_onLoad;
}

function ZebuDOM_onLoad() {
	if (ZebuDOM.isNS4) {
		reloadLayer = new Layer(0);
		layerNo = document.layers.length;
		window.onresize = zebuReload;
	}

	if (typeof(zebuLoad) != "undefined")
		setTimeout("zebuLoad()", 100);
}

function ZebuDOM_checkVersion() {
	var ua = navigator.userAgent.toLowerCase();

	ZebuDOM.isNS  = (ua.indexOf("mozilla") != -1) && (ua.indexOf("compatible") == -1);
	ZebuDOM.isIE   = (ua.indexOf("msie") != -1); 

	ZebuDOM.major = parseInt(navigator.appVersion); 

	ZebuDOM.isNS4 = (ZebuDOM.isNS && ZebuDOM.major == 4);
	ZebuDOM.isNS4up = (ZebuDOM.isNS && ZebuDOM.major >= 4);
	ZebuDOM.isNS5 = (ZebuDOM.isNS && ZebuDOM.major == 5);
	ZebuDOM.isNS5up = (ZebuDOM.isNS && ZebuDOM.major >= 5);

	ZebuDOM.isIE4 = (ZebuDOM.isIE && ZebuDOM.major == 4 && ua.indexOf("msie 4") != -1);
	ZebuDOM.isIE4up = (ZebuDOM.isIE && ZebuDOM.major >= 4);
	// ie5's major is also 4, so we need to test "msie 5.0"
	ZebuDOM.isIE5 = (ZebuDOM.isIE && ZebuDOM.major == 4 && (ua.indexOf("msie 5") != -1));
	ZebuDOM.isIE5up = (ZebuDOM.isIE && ZebuDOM.major >= 4 && !ZebuDOM.isIE4);
}

function ZebuDOM_getWindowSize() {
	if (ZebuDOM.isIE4up)
		return new Size(document.body.clientWidth, document.body.clientHeight);
	else if (ZebuDOM.isNS4 || ZebuDOM.isNS5up) 
		return new Size(window.innerWidth, window.innerHeight);
}

function ZebuDOM_getFrameDocument(/*a list of frame IDs*/) {
	if (arguments.length == 0) 
		return null;

	var frameString = "top";
	for (var i=0; i < arguments.length; i++) {
		frameString += "." + arguments[i];
	}
	frameString += ".document";

	var doc = eval(frameString);
	ZebuDOM.turnIntoZebuDocument(doc);

	return doc;
}

function ZebuDOM_turnIntoZebuDocument(doc) {
	if (doc.brand == "zebu")
		return;

	doc.brand = "zebu";

	doc.zbGetElementById = ZebuDocument_getElementById;

	doc.zbGetForms = ZebuDocument_getForms;
	doc.zbGetImages = ZebuDocument_getImages;
	doc.zbGetLinks = ZebuDocument_getLinks;
	doc.zbGetAnchors = ZebuDocument_getAnchors;

	doc.zbAppendLayer = ZebuDocument_appendLayer;
	doc.zbRemoveLayer = ZebuDocument_removeLayer;

	doc.zbComputeSize = ZebuDocument_computeSize;

	doc.zbAddEventListener = ZebuEventTarget_addEventListener;
	doc.zbRemoveEventListener = ZebuEventTarget_removeEventListener;
}

function ZebuDOM_turnIntoZebuElement(element) {
	if (element.brand == "zebu")
		return;

	element.brand = "zebu";
	if (ZebuDOM.isNS4) 
		element.ns4 = new Object();

	element.zbGetBackgroundColor = ZebuElement_getBackgroundColor;
	element.zbSetBackgroundColor = ZebuElement_setBackgroundColor;
	element.zbGetClass = ZebuElement_getClass;
	element.zbSetClass = ZebuElement_setClass;

	element.zbGetLocation = ZebuElement_getLocation;
	element.zbSetLocation = ZebuElement_setLocation;
	element.zbGetLocationOnPage = ZebuElement_getLocationOnPage;
	element.zbGetSize = ZebuElement_getSize;
	element.zbSetSize = ZebuElement_setSize;

	element.zbGetClip = ZebuElement_getClip;
	element.zbSetClip = ZebuElement_setClip;
	element.zbGetVisibility = ZebuElement_getVisibility;
	element.zbSetVisibility = ZebuElement_setVisibility;
	element.zbGetZIndex = ZebuElement_getZIndex;
	element.zbSetZIndex = ZebuElement_setZIndex;

	element.zbGetContent = ZebuElement_getContent;
	element.zbSetContent = ZebuElement_setContent;
	element.zbLoad = ZebuElement_load;
	element.zbGetLoadDocument = ZebuElement_getLoadDocument;

	element.zbAddEventListener = ZebuEventTarget_addEventListener;
	element.zbRemoveEventListener = ZebuEventTarget_removeEventListener;
}


function ZebuDocument_getElementById(/*a list of IDs*/) {
	if (arguments.length == 0) 
		return null;

	var element = null;
	
	if (ZebuDOM.isIE4up) 
		element = this.all[arguments[arguments.length-1]];
	else if (ZebuDOM.isNS4) {
		var refString = "this." + arguments[0];
		for (var i=1; i < arguments.length; i++) {
			refString += ".document." + arguments[i];
		}
		element = eval(refString);
	}
	else if (ZebuDOM.isNS5up) 
		element = this.getElementById(arguments[arguments.length-1]);

	if (element != null) 
		ZebuDOM.turnIntoZebuElement(element);

	return element;
}

function ZebuDocument_getForms(layer) {
	if (ZebuDOM.isNS4) {
		var doc = document;
		if (layer != null)
			doc = layer.document;
		return doc.forms;
	}
	else 
		return document.forms;
}

function ZebuDocument_getImages(layer) {
	if (ZebuDOM.isNS4) {
		var doc = document;
		if (layer != null)
			doc = layer.document;
		return doc.images;
	}
	else 
		return document.images;
}

function ZebuDocument_getLinks(layer) {
	if (ZebuDOM.isNS4) {
		var doc = document;
		if (layer != null)
			doc = layer.document;
		return doc.links;
	}
	else 
		return document.links;
}

function ZebuDocument_getAnchors(layer) {
	if (ZebuDOM.isNS4) {
		var doc = document;
		if (layer != null)
			doc = layer.document;
		return doc.anchors;
	}
	else 
		return document.anchors;
}


function ZebuDocument_appendLayer(id, width, height, parentLayer) {
	var w = (width == null ? 0 : width);
	var h = (height == null ? 0 : height);

	if (ZebuDOM.isIE4up) {
		var layerHtml = "<div id=" + id + " style='position:absolute;overflow:hidden;left:0;top:0;width:" + w + ";height:" + h + "'></div>";

		if (parentLayer == null || parentLayer == document) 
			this.body.insertAdjacentHTML("beforeEnd", layerHtml);
		else 
			parentLayer.insertAdjacentHTML("beforeEnd", layerHtml);

		var element = this.zbGetElementById(id);
	}
	else if (ZebuDOM.isNS4) {
		if (parentLayer == null || parentLayer == document) {
			var element = new Layer(w);
			eval("document."+id+"=element");
		}
		else {
			var element = new Layer(w, parentLayer);
			eval("parentLayer.document."+id+"=element");
		}
		element.visibility = "inherit";
	}
	else if (ZebuDOM.isNS5up) {
		var element = this.createElement("DIV");
		element.id = id;
		element.style.position = "absolute";
		element.style.left = "0px";
		element.style.top = "0px";
		element.style.width = w + "px";
		element.style.overflow = "hidden";

		if (parentLayer == null || parentLayer == this) 
			this.body.appendChild(element);
		else
			parentLayer.appendChild(element);
	}

	ZebuDOM.turnIntoZebuElement(element);

	element.zbSetSize(width, height);

	return element;


}

function ZebuDocument_removeLayer(element) {
	if (ZebuDOM.isIE4up) { 
		element.outerHTML = "";
	} 
	else if (ZebuDOM.isNS4) { 
		element.visibility = "hide";
		delete element;
	} 
	else if (ZebuDOM.isNS5up) {
		element.parentNode.removeChild(element);
	}
}


function ZebuDocument_computeSize(html, width) {
	if (ZebuDOM.isIE4up) { 
		if (typeof this.sizeLayer == "undefined") {
			var layerHtml = "<div id='sizeLayer' style='position:absolute; visibility:hidden; overflow:visible; left:0; top:0'></div>";

			document.body.insertAdjacentHTML("beforeEnd", layerHtml);
			this.sizeLayer = document.all.sizeLayer;
		}

		var w = (width ? width+"px" : "1px");
		this.sizeLayer.style.width = w;
		this.sizeLayer.innerHTML = html;

		if (ZebuDOM.isIE4)
			alert("IE4 needs this delay to compute size.");

		return new Size(this.sizeLayer.offsetWidth, this.sizeLayer.offsetHeight);
	} 
	else if (ZebuDOM.isNS4) { 
		var w = (width ? width : 0);
		if (typeof this.sizeLayer == "undefined" || this.sizeLayer.width != w) {
			this.sizeLayer = new Layer(w);
			this.sizeLayer.width = w;
		}

		this.sizeLayer.visibility = "hide";
		this.sizeLayer.document.write(html);
		this.sizeLayer.document.close();
		return new Size(this.sizeLayer.clip.width, this.sizeLayer.clip.height);
	}
	else if (ZebuDOM.isNS5up) {
		if (typeof this.sizeLayer == "undefined") {
			this.sizeLayer = document.createElement("DIV");
			this.sizeLayer.id = "sizeLayer";
			this.sizeLayer.style.position = "absolute";
			this.sizeLayer.style.left = "0px";
			this.sizeLayer.style.top = "0px";
			this.sizeLayer.style.overflow = "visible";
			this.sizeLayer.style.visibility = "hidden";
			document.body.appendChild(this.sizeLayer);
		}

		var w = (width ? width+"px" : "0px");
		this.sizeLayer.style.width = w;

		this.sizeLayer.innerHTML = html;
		return new Size(this.sizeLayer.offsetWidth, this.sizeLayer.offsetHeight);
	}
}




function ZebuElement_getBackgroundColor() {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		return this.style.backgroundColor;
	else if (ZebuDOM.isNS4) 
		return this.bgColor;
}

function ZebuElement_setBackgroundColor(bgcolor) {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		this.style.backgroundColor = bgcolor;
	else if (ZebuDOM.isNS4) 
		this.bgColor = bgcolor;
}

function ZebuElement_getClass() {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		return this.className;
	else if (ZebuDOM.isNS4) 
		return this.ns4.className;
}

function ZebuElement_setClass(className) {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		this.className = className;
	else if (ZebuDOM.isNS4) {
		this.ns4.className = className;
		this.zbSetContent(this.ns4.content);
	}
}


function ZebuElement_getLocation() {
	if (ZebuDOM.isIE4up) 
		return new Point(this.style.pixelLeft, this.style.pixelTop);
	else if (ZebuDOM.isNS4) 
		return new Point(this.left, this.top);
	else if (ZebuDOM.isNS5up) {
		var x = (this.style.left=="" ? 0 : parseInt(this.style.left));
		var y = (this.style.top=="" ? 0 : parseInt(this.style.top));
		return new Point(x, y);
	}
}

function ZebuElement_setLocation(x, y) {
	if (ZebuDOM.isIE4up) {
		this.style.pixelLeft = x;
		this.style.pixelTop = y;
	}
	else if (ZebuDOM.isNS4) {
		this.left = x;
		this.top = y;
	}
	else if (ZebuDOM.isNS5up) {
		this.style.left = x + "px";
		this.style.top = y + "px";
	}
}

function ZebuElement_getLocationOnPage() {
	var left = 0, top = 0;
	var element = this;
	if (ZebuDOM.isIE4) {
		while (element != document.body) {
			left += element.offsetLeft;
			top += element.offsetTop;
			element = element.offsetParent;
		}
		return new Point(left, top);
	}
	else if (ZebuDOM.isIE5up) {
		while (element != document.body) {
			left += element.offsetLeft;
			top += element.offsetTop;
			element = element.offsetParent;
		}
		return new Point(left, top);
	}
	else if (ZebuDOM.isNS4) 
		return new Point(element.pageX, element.pageY);
	else if (ZebuDOM.isNS5up) {
		while (element != null) {
			left += element.offsetLeft;
			top += element.offsetTop;
			element = element.offsetParent;
		}
		return new Point(left, top);
	}
}

function ZebuElement_getSize() {
	if (ZebuDOM.isIE4up) 
		return new Size(this.style.pixelWidth, this.style.pixelHeight);
	else if (ZebuDOM.isNS4) 
		return new Size(this.clip.width, this.clip.height);
	else if (ZebuDOM.isNS5up) {
		var w = (this.style.width=="" ? 0 : parseInt(this.style.width));
		var h = (this.style.height=="" ? 0 : parseInt(this.style.height));
		return new Size(w, h);
	}
}

function ZebuElement_setSize(width, height) {
	if (ZebuDOM.isIE4) 
		this.zbSetClip("rect(" + 0 + " " + (width) + " " + (height) + " " + 0 +")");

	if (ZebuDOM.isIE4up) {
		this.style.pixelWidth = width;
		this.style.pixelHeight = height;
	}
	else if (ZebuDOM.isNS4) {
		this.clip.width = width;
		this.clip.height = height;
	}
	else if (ZebuDOM.isNS5up) {
		this.style.width = width + "px";
		this.style.height = height + "px";
	}
}

function ZebuElement_getClip() {
	if (ZebuDOM.isIE4up) 
		return this.style.clip;
	else if (ZebuDOM.isNS4) 
		return ("rect(" + 
				this.clip.top + " " + this.clip.right + " " + 
				this.clip.bottom + " " + this.clip.left + ")");
	else if (ZebuDOM.isNS5up) 
		return this.style.clip;
}

function ZebuElement_setClip(clip) {
	if (ZebuDOM.isIE4up) {
		this.style.clip = clip;
	}
	else if (ZebuDOM.isNS4) {
		var s = clip.slice(clip.indexOf("(") + 1, clip.indexOf(")"));
		var c = s.split(" ");

		this.clip.top = parseInt(c[0]);
		this.clip.right = parseInt(c[1]);
		this.clip.bottom = parseInt(c[2]);
		this.clip.left = parseInt(c[3]);
	}
	else if (ZebuDOM.isNS5up) {
		this.style.clip = clip;
	}
}

function ZebuElement_getVisibility() {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		return this.style.visibility;
	else if (ZebuDOM.isNS4) {
		if (this.visibility == "show")
			return "visible";
		else if (this.visibility == "hide")
			return "hidden";
		else 
			return this.visibility;
	}
}

function ZebuElement_setVisibility(visibility) {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		this.style.visibility = visibility;
	else if (ZebuDOM.isNS4) {
		if (visibility == "visible")
			this.visibility = "show";
		else if (visibility == "hidden")
			this.visibility = "hide";
		else 			
			this.visibility = visibility;
	}
}

function ZebuElement_getZIndex() {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		return this.style.zIndex;
	else if (ZebuDOM.isNS4) 
		return this.zIndex;
}

function ZebuElement_setZIndex(zIndex) {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		this.style.zIndex = zIndex;
	else if (ZebuDOM.isNS4) 
		this.zIndex = zIndex;
}

function ZebuElement_getContent() {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up) 
		return this.innerHTML;
	else if (ZebuDOM.isNS4) 
		return this.ns4.content;
}

function ZebuElement_setContent(content) {
	if (ZebuDOM.isIE4up || ZebuDOM.isNS5up)
		this.innerHTML = content;
	else if (ZebuDOM.isNS4) {
		this.ns4.content = content;

		this.document.open("text/html", "replace");
		var html = content;
		if (this.ns4.className != null && this.ns4.className != "")
			html = "<span class='" + this.ns4.className + "'>" + content + "</span>";
		this.document.write(html);
		this.document.close();
	}
}


window.externalLoads = new Array();
window.externalOnLoad = ZBW_externalOnLoad;

function ZBW_externalOnLoad(pageId) {
	var layer = this.externalLoads[pageId];

	if (layer == null)
		return;

	if (ZebuDOM.isIE4up) {
		layer.loadDocument = this.document.frames[layer.id+"tmpiframe"].document;
		layer.innerHTML = layer.loadDocument.body.innerHTML;
	}
	else if (ZebuDOM.isNS5up) {
		layer.loadDocument = this.document.getElementById(layer.id+"tmpiframe").contentDocument;
		layer.innerHTML = layer.loadDocument.body.innerHTML;
	}
	else if (ZebuDOM.isNS4) 
		layer.loadDocument = layer.document;

	if (layer.handleLoaded)
		layer.handleLoaded();

	delete this.externalLoads[pageId];
}

function ZebuElement_load(pagefile, pageId, onload) {
	window.externalLoads[pageId] = this;
	this.handleLoaded = onload;

	if (ZebuDOM.isIE4up) {
		var iframeId = this.id + "tmpiframe";
		if (document.all[iframeId] == null)	{
			var s = "<iframe id=" + iframeId + " style='position:absolute;visibility:hidden'></iframe>";
			document.body.insertAdjacentHTML("beforeEnd", s);
		}
		document.all[iframeId].src = pagefile;
	}
	else if (ZebuDOM.isNS5up) {
		var iframe = document.getElementById(this.id+"tmpiframe");
		if (iframe == null)	{
			iframe = document.createElement("IFRAME");
			iframe.id = this.id + "tmpiframe";
			document.body.appendChild(iframe);
			iframe.height = 0;
			iframe.width = 0;
			iframe.frameBorder = 0;
		}
		iframe.src = "";
		iframe.src = pagefile;
	}
	else if (ZebuDOM.isNS4) {
		if (this.clip.width == 0)
			this.src = pagefile;
		else
			this.load(pagefile, this.clip.width);
	}
}

function ZebuElement_getLoadDocument() {
	ZebuDOM.turnIntoZebuDocument(this.loadDocument);
	return this.loadDocument;
}



function ZebuEventTarget_addEventListener(type, handleEvent, useCapture) {
	if (ZebuDOM.isNS5up) {
		this.addEventListener(type, handleEvent, useCapture);
	}
	else if (ZebuDOM.isIE4up || ZebuDOM.isNS4) {
		if (ZebuDOM.isNS4 && typeof this.captureEvents != "undefined") 
			this.captureEvents(eval("Event."+type.toUpperCase()));
		eval("this.on"+type+ "=ZebuEventTarget_onEvent");

		if (this.eventListeners == null)
			this.eventListeners = new Array();

		var zel = new ZebuEventListener(type, handleEvent, useCapture);
		this.eventListeners.addUnique(zel, true);
	}
}

function ZebuEventTarget_removeEventListener(type, handleEvent, useCapture) {
	if (ZebuDOM.isNS5up) {
		this.removeEventListener(type, handleEvent, useCapture);
	}
	else if (ZebuDOM.isIE4up || ZebuDOM.isNS4) {
		var zel = new ZebuEventListener(type, handleEvent, useCapture);
		this.eventListeners.removeUnique(zel, true);

		var count = 0;
		for (var i=0; i < this.eventListeners.length; i++) {
			if (this.eventListeners[i].type == type)
				count++;
		}

		if (count == 0) { // release event
			if (ZebuDOM.isNS4 && typeof this.captureEvents != "undefined") 
				this.releaseEvents(eval("Event."+type.toUpperCase()));
			eval("this.on"+type+ "=null");
		}
	}
}

function ZebuEventTarget_onEvent(e) {
	if (ZebuDOM.isIE4up) {
		e = window.event;
		window.event.cancelBubble = true;

		var target = this;
		while (target != null) {
			if (target.tagName == "HTML")
				target = document;

			if (target.brand == "zebu")
				ZebuDOM.listenerChain.addUnique(target);

			target = target.parentElement;
		}
	}
	else if (ZebuDOM.isNS4) {
		if (this.brand == "zebu")
			ZebuDOM.listenerChain.addUnique(this);

		if (this != e.target)
			routeEvent(e); // could cause an recursion
	}

	if (ZebuDOM.listenerChain.length == 0)
		return;

	if (ZebuDOM.isNS4) 
		ZebuDOM.listenerChain.reverse();

	if (ZebuDOM.isIE4up) 
		var eventTarget = window.event.srcElement;
	else if (ZebuDOM.isNS4) 
		var eventTarget = e.target;

	var evt;
	if (e.type.indexOf("mouse") != -1 || e.type.indexOf("click") != -1)
		evt = new ZebuMouseEvent(e, eventTarget);
	else 
		evt = new ZebuEvent(e.type, eventTarget, true, true);

	// trickle down (event capture)
	var target;
	for (var i=ZebuDOM.listenerChain.length-1; i > 0 && !evt.stop; i--) {
		target = ZebuDOM.listenerChain[i];
		if (target.eventListeners != null) {
			for (var j=0; j < target.eventListeners.length && !evt.stop; j++) {
				if (target.eventListeners[j].type == evt.type && 
					target.eventListeners[j].useCapture) {
					evt.currentTarget = target;
					target.handleEvent = target.eventListeners[j].handleEvent;
					target.handleEvent(evt);
				}
			}
		}
	}

	// bubble up
	for (var i=0; i < ZebuDOM.listenerChain.length && !evt.stop; i++) {
		target = ZebuDOM.listenerChain[i];

		if (evt.type == "mouseout" && ZebuDOM.isNS4 && target != eventTarget) 
			evt.stopPropagation();

		if (target.eventListeners != null) {
			for (var j=0; j < target.eventListeners.length && !evt.stop; j++) {
				if (target.eventListeners[j].type == evt.type && 
					!target.eventListeners[j].useCapture) {
					evt.currentTarget = target;
					target.handleEvent = target.eventListeners[j].handleEvent;
					target.handleEvent(evt);
				}
			}
		}

		if (evt.type == "mouseout") 
			evt.stopPropagation();
	}
	
	ZebuDOM.listenerChain.length = 0;

	if (evt.cancelable)	
		return (!evt.prevent);
	else 
		return true;
}



function ZebuEventListener(type, handleEvent, useCapture) {
	this.type = type;
	this.handleEvent = handleEvent;
	this.useCapture = useCapture;

	return this;
}


function ZebuEvent(type, target, canBubble, cancelable) {
	if (arguments[0] == "prototype") 
		return null;

	this.type = type;
	this.target = target;
	this.bubbles = canBubble;
	this.cancelable = cancelable;

	this.stop = false;
	this.prevent = false;

	return this;
}

ZebuEvent.CAPTURING_PHASE = 1;
ZebuEvent.AT_TARGET = 2;
ZebuEvent.BUBBLING_PHASE = 3;

ZebuEvent.prototype.stopPropagation = ZebuEvent_stopPropagation;
ZebuEvent.prototype.preventDefault = ZebuEvent_preventDefault;

function ZebuEvent_stopPropagation() {
	this.stop = true;
}

function ZebuEvent_preventDefault() {
	this.prevent = true;
}


function ZebuMouseEvent(e, target) {
	this.ZebuEvent = ZebuEvent;
	if (e.type == "mousemove") 
		this.ZebuEvent(e.type, target, true, false);
	else
		this.ZebuEvent(e.type, target, true, true);

	if (ZebuDOM.isIE4up) {
		this.screenX = e.screenX;
		this.screenY = e.screenY;

		this.clientX = e.clientX;
		this.clientY = e.clientY;

		this.pageX = e.clientX + document.body.scrollLeft;
		this.pageY = e.clientY + document.body.scrollTop;

		if (e.button == 1) // left button
			this.button = 0;
		else if (e.button == 4) // middle button
			this.button = 1;
		else if (e.button == 2) // right button
			this.button = 2;

		this.altKey = e.altKey;
		this.ctrlKey = e.ctrlKey;
		this.shiftKey = e.shiftKey;
		this.metaKey = false;
	}
	else if (ZebuDOM.isNS4) {
		this.screenX = e.screenX;
		this.screenY = e.screenY;

		this.clientX = e.layerX;
		this.clientY = e.layerY;

		this.pageX = e.pageX;
		this.pageY = e.pageY;
		
		if (e.which == 1)
			this.button = 0;
		else if (e.which == 2)
			this.button = 1;
		else if (e.which == 3)
			this.button = 2;

		this.altKey = ((e.modifiers & Event.ALT_MASK) > 0);
		this.ctrlKey = ((e.modifiers & Event.CTRL_MASK) > 0);
		this.shiftKey = ((e.modifiers & Event.SHIFT_MASK) > 0);
		this.metaKey = ((e.modifiers & Event.META_MASK) > 0);
	}

	return this;
}

ZebuMouseEvent.prototype = new ZebuEvent("prototype");



ZebuDOM.init();

function zebuReload() {
	if (layerNo > document.layers.length) {
		window.location.reload();
		reloadLayer = new Layer(0);
	}
}

