/*************************************************************************************
								Input
**************************************************************************************/
var root = "newsite";
var PCStyleSheet = "styles/style.css";
var MacStyleSheet = "styles/mac_style.css";
var NavStyleSheet = "styles/nav_style.css";
var spacer = "gfx/spacer.gif";
var redirectURL = "redirect.html";

//if(document.layers)window.captureEvents(Event.LOAD);
//window.onload = function (evt) {};

/*************************************************************************************
								Browser test
**************************************************************************************/
//Browser test
var NOT_SUPPORTED = false;
var NN = false;
var NN4 = false;
var NN6 = false;
var IE = false;
var IE4 = false;
var IE4_0 = false;
var IE4_5 = false;
var IE5 = false;
var IE5_0 = false;
var IE5_5 = false;
var MAC = false;
var MAC_STYLE = false;
var startIndex, endIndex, navVer, subVer;

if(navigator.appName == "Netscape") {
	NN = true;
	navVer = parseInt(navigator.appVersion);
	if(navVer < 4) NOT_SUPPORTED = true;	//not support ver3 browsers
	else if( navVer == 4) NN4 = true;
	else NN6 = true;
}
else {	//distinguish IE4 and IE5
	IE = true;
	startIndex = navigator.appVersion.indexOf("MSIE ");
	if(startIndex >= 0) startIndex += 5;
	navVer = parseInt(navigator.appVersion.substring(startIndex));	//if startindex is NaN checks start of string
	startIndex += 2;
	endIndex = startIndex + 1;
	subVer = parseInt(navigator.appVersion.substring(startIndex, endIndex));
	if(navVer < 4) NOT_SUPPORTED = true;	//if navVer is NaN then defaults to IE5
	else if(navVer == 4) {
		IE4 = true;
		if(subVer <= 4) IE4_0 = true;
		else IE4_5 = true;
	}
	else {
		IE5 = true;
		if(subVer <= 4) IE5_0 = true;
		else IE5_5 = true;
	}
}
if(navigator.appVersion.indexOf('Mac')>=0) {
	/* --commented out due to rendering problems in css with IE4_5 mac
	MAC = true;
	if(NN4 && IE4) MAC_STYLE = true;	//treat IE5 and NN6 on Mac like IE4 on PC
	*/
	MAC = true;
	
	if (IE4_5){
		MAC_STYLE = true;
	}
	if (NN4){
		MAC_STYLE = true;
	}
	/*if(IE4_0) {	//support IE4.5 not IE4.0 because of clipping bug
		//NOT_SUPPORTED = true;	//not support IE4.01 on Mac because clipping bug
	}*/
}
//redirect unsupported browsers
if(NOT_SUPPORTED) {
	location.replace(redirectURL);
}
/*************************************************************************************
							Style sheets & Root directory
**************************************************************************************/
//find root directory
var rootPath = location.protocol+ "//"+location.hostname;
if(location.port) rootPath += ":" + location.port;
rootPath += "/";
var loc = location.pathname.toLowerCase();
if(IE4) loc=(location.href).substring(rootPath.length-1);	//BUG FIX
if(typeof root == "string") {		//directory name
	var posRoot = (loc).indexOf("/" +root.toLowerCase()+ "/");
	if(posRoot == -1) posRoot = (loc).indexOf("\\" +root.toLowerCase()+ "\\");	//local
	if(posRoot != -1) rootPath += (loc).substring(1, (posRoot)+(root.length+2));
}
else if(typeof root == "number") {	//number of directories from top
	var endIndex = 0;
	for(var i=0; i<root; i++) {
		if(endIndex != -1) endIndex = loc.indexOf("/", endIndex+1);
	}
	if(endIndex != -1) rootPath += loc.substring(1, endIndex+1);
}

//import style sheets
var styleStr;
if(!MAC_STYLE) {
	//alert('not mac style')
	if(!NN4) {
		styleStr = '<LINK REL="stylesheet" TYPE="text/css" HREF="' +rootPath+PCStyleSheet+ '">';
	}
	else {
		styleStr = '<LINK REL="stylesheet" TYPE="text/css" HREF="' +rootPath+NavStyleSheet+ '">';
	}
}
else {
	styleStr = '<LINK REL="stylesheet" TYPE="text/css" HREF="' +rootPath+MacStyleSheet+ '">';
}
document.write(styleStr);

spacer = rootPath + spacer;
/*************************************************************************************
								Events & Window
**************************************************************************************/
var resize = "page = new Page();";
onresize = function() {eval(window.resize);}

var load = "";
onload = function() {eval(window.load);}
var loaded = false;
load += "window.loaded = true;";

var loop = "";
var loopStarted = false;
var loopDelay;
function doLoop() {eval(window.loop);}
function startLoop(delay) {
	if(!delay && !loopDelay) loopDelay = 50;
	else if(delay && !(loopDelay && loopDelay < delay))  loopDelay = delay;
	if(!loopStarted) {
		window.setInterval("doLoop()", loopDelay);
		loopStarted = true;
	}
}
//caching images

window.cachedImages = new Object();
function cacheImage(imgPath) {
	var imgName = escape(imgPath);
	if(!window.cachedImages[imgName]) {
		window.cachedImages[imgName] = new Image(); 
		window.cachedImages[imgName].src = imgPath;
	}
}
function getImageRef(imgPath) {
	var imgName = escape(imgPath);
	return "window.cachedImages['" +imgName+"']";
}
//navigations
var navs = new Array();
/*************************************************************************************
								Document
**************************************************************************************/
var identification = 0;
//getNewID
function getNewID(options) {
	var returnID = "ID" + window.identification;
	if(options != null) {
		if(!options["id"]) options["id"] = returnID;
	}
	window.identification++;
	return returnID;
}
/*************************************************************************************
						Browser compatibility functions
**************************************************************************************/
var HTMLElement = new Object();								//cache
//getElement
function getElement(element) {

	if(HTMLElement[element]) return HTMLElement[element];	//check cache	
	var returnObj;
	if((IE5 && !MAC) || NN6) {
		returnObj = document.getElementById(element);
	}
	else if(IE4 || (IE5 && MAC)) {
		returnObj = document.all[element];
	}
	else {
		returnObj = getLayer(element, document.layers);
	}
	HTMLElement[element] = returnObj;						//cache reference
	return returnObj;
}
//show element
function showElement(element) {
	if(!NN4) getElement(element).style.visibility = "inherit";
	else getElement(element).visibility = "inherit";
}
//hide element
function hideElement(element) {
	if(!NN4) getElement(element).style.visibility = "hidden";
	else getElement(element).visibility = "hide";
}
//moveX
function moveX(x, element) {
	if(!NN4) getElement(element).style.left = x + "px";
	else getElement(element).left = x;
}
//getX
function getX(element) {
	var x;
	if(!NN4) x = parseInt(getElement(element).style.left);
	else x = getElement(element).left;
	return x;
}
//moveY
function moveY(y, element) {
	if(!NN4) getElement(element).style.top = y + "px";
	else getElement(element).top = y;
}
//getY
function getY(element) {
	var y;
	if(!NN4) y = parseInt(getElement(element).style.top);
	else y = getElement(element).top;
	return y;
}
//getWidth
function getWidth(element) {
	var w;
	if(!NN4) w = parseInt(getElement(element).offsetWidth);
	else w = getElement(element).clip.width;
	return w;
}
//getHeight
function getHeight(element) {
	var h;
	if(!NN4) h = parseInt(getElement(element).offsetHeight);
	else h = getElement(element).clip.height
	return h;
}
//setWidth
function setWidth(w, element) {
	if(!NN4) getElement(element).style.width = w + "px";
	else {
		var lyr = getElement(element);
		lyr.resizeTo(w, lyr.clip.height);
	}
}
//setHeight
function setHeight(h, element) {
	if(!NN4) getElement(element).style.height = h + "px";
	else {
		var lyr = getElement(element);
		lyr.resizeTo(lyr.clip.width, h);
	}
}//getZ
function getZ(element) {
	var z;
	if(!NN4) z = parseInt(getElement(element).style.zIndex);
	else z = getElement(element).zIndex;
	return z;
}
//setZ
function setZ(z, element) {
	if(!NN4) getElement(element).style.zIndex = z;
	else getElement(element).zIndex = z;
}
//setColor
function setColor(color, element) {
	if(!NN4) getElement(element).style.backgroundColor = color;
	else getElement(element).bgColor = color;
}
//Page dimensions
function Page(w, h) {
	if(IE) {
		this.right = document.body.clientWidth;
		this.bottom = document.body.clientHeight;
		this.paneRight = this.right + document.body.scrollLeft
		this.paneBottom = this.bottom + document.body.scrollTop;
		this.scrollTop = document.body.scrollTop;
	}
	else {
		this.right = window.innerWidth;
		this.bottom = window.innerHeight;
		this.paneRight = this.right + pageXOffset;
		this.paneBottom = this.bottom + pageYOffset;
		this.scrollTop = pageYOffset;
	}
	this.x = 0;
	this.y = 0;
	this.w = this.right;
	this.h = this.bottom;
	if(NN4) {
		this.w += 4;
		this.h += 4;
	}
	this.centX = this.w/2;
	this.centY = this.h/2;
	if(w != null && h != null) this.setDims(w, h);
	return this;
}
function Page_Set_Dims(w, h) {
	this.adjX = Math.max(0, Math.floor(this.centX-w/2));
	this.adjY = Math.max(0, Math.floor(this.centY-h/2));
}
Page.prototype.setDims = Page_Set_Dims;
//getLayer
function getLayer(layerName, parentLayers) {
	var returnVal = null;
	if(parentLayers[layerName]) {
		returnVal = parentLayers[layerName];
	}
	else {
		for(var z=0; z<parentLayers.length; z++) {
			returnVal = getLayer(layerName, parentLayers[z].document.layers);
			if(returnVal != null) break;
		}
	}
	return returnVal;
}
/*************************************************************************************
						Navigation functions
**************************************************************************************/
//handleMouseDown
function handleMouseDown(e, linkStr, targetStr, shiftEnabled) {
	if(linkStr.indexOf("javascript:") != -1) {
		linkStr = linkStr.substring(11);
		eval(linkStr);
	}
	else if(shiftEnabled && shiftKeyDown(e)) {
		window.open(linkStr, '', '');
	}
	else {
		gotoPage(linkStr, targetStr);
	}
}
//shiftKeyDown
function shiftKeyDown(e) {
	if((IE && event.shiftKey)
		|| (NN6 && e.shiftKey)
		|| (NN4 && (e.modifiers & Event.SHIFT_MASK))) {
		return true;
	}
	else return false;
}
//launch
function launch(url, winName, paramStr) {
	window.open(url, winName, paramStr);
}
//gotoPage
function gotoPage(urlStr, targetStr) {
	var stmtStr = 'location.href =\'' +urlStr+ '\';'
	if(targetStr) {
		stmtStr = targetStr + '.' + stmtStr;
	}
	eval(stmtStr);
}
//getDocBase
function getDocBase() {
	var URL, endIndex;
	URL = location.href;
	//find last "/" before "?"
	endIndex = URL.indexOf("?");
	if(endIndex == -1) {
		endIndex = URL.length;
	}
	endIndex = URL.lastIndexOf("/", endIndex) +1;
	URL = URL.substring(0, endIndex);
	return URL;
}
//getParam
function getParam(paramName, URL, defaultVal) {
	var startIndex, endIndex;
	var param = "";
	startIndex = URL.indexOf(paramName + "=");
	if(startIndex>=0) {
		startIndex += paramName.length+1;
		endIndex = URL.indexOf("&", startIndex);
		if(endIndex==-1) {
			endIndex = URL.length;
		}
		param = URL.substring(startIndex, endIndex);
	}
	else if(defaultVal) param = defaultVal;
	return param;
}
//setAllParamStrings
function setAllParamStr(URL) {
	if(!URL) URL = location.search;
	var eq, search, curParam, paramName, paramVal;
	var startIndex = URL.indexOf("?");
	var parameters = new Object();
	var stmtStr;
	if(startIndex!=-1) {
		startIndex += 1;
		endIndex = URL.length;
		search = URL.substring(startIndex, endIndex);
		search = search.split("&");
		for(var i=0; i<search.length; i++) {
			curParam = search[i];
			eq = curParam.indexOf("=");
			if(eq !=-1) {
				paramName = curParam.substring(0, eq);
				paramVal = curParam.substring(eq+1, curParam.length);
				parameters[paramName] = paramVal;
				stmtStr = paramName + "='" +paramVal+ "'";
				eval(stmtStr);
			}
		}
	}
	return parameters;
}
//setAllParams
function setAllParams(URL) {
	if(!URL) URL = location.search;
	var startIndex, endIndex, stmtStr;
	URL = unescape(URL);
	startIndex = URL.indexOf("?");
	if(startIndex!=-1) {
		startIndex += 1;
		while(startIndex < URL.length) {
			endIndex = URL.indexOf("&", startIndex);
			if(endIndex==-1) {
				endIndex = URL.length;
			}
			stmtStr = URL.substring(startIndex, endIndex);
			if(stmtStr.indexOf("=") > 0) {
				eval(stmtStr);
			}
			startIndex = endIndex + 1;
		}
	}
}
//getPageName
function getPageName(URL) {
	var startIndex, endIndex;
	var pageName = "";
	endIndex = URL.indexOf("?", startIndex);
	if(endIndex==-1) endIndex = URL.length;
	startIndex = URL.lastIndexOf("/", endIndex) + 1;
	pageName = URL.substring(startIndex, endIndex);
	return pageName;
}
//getFullPageName
function getFullPageName(URL) {
	var startIndex, endIndex;
	var pageName = "";
	startIndex = URL.lastIndexOf("/") + 1;
	endIndex = URL.length;
	pageName = URL.substring(startIndex, endIndex);
	return pageName;
}
//synchNav
function synchNav(URL) {
	var navFrame, contentFrame;
	if(frames[navFrameName] && frames[navFrameName].loaded
		&& (URL || frames[contentFrameName])) {
		navFrame = frames[navFrameName];
		if(!URL) contentFrame = frames[contentFrameName];
		if(navFrame.navs && navFrame.navs.length > 0 && navFrame.navs[0].synch) {
			if(URL) navFrame.navs[0].synch(URL);
			else {
				navFrame.navs[0].synch(contentFrame.location.href);
			}
		}
	}
	else if(!loaded) {
		if(URL) window.setTimeout("synchNav('" +URL+ "')", 100);
		else  window.setTimeout("synchNav()", 100);
	}
}
if(parent && parent.navFrameName && parent.contentFrameName 
	&& parent.frames[parent.contentFrameName] == window) parent.synchNav(); 
//Nav_Synch
//general synch function for nav object
//requires object has navItems with menuLink and update function
function Nav_Synch(URL) {
	var navItems = this.navItems;
	var matchFound = false;
	for(var i=0; i<navItems.length; i++) {
		if(URL.indexOf(navItems[i].menuLink) != -1
			&& (getDocBase(location.href)+navItems[i].menuLink == URL
			|| navItems[i].menuLink == URL)) {
			matchFound = true;
			navItems[i].update();
		}
	}
	if(!matchFound) {	
		if(URL.indexOf("?") != -1) {	//take off searchstring and try again
			URL = URL.substring(0, URL.indexOf("?"));
			this.synch(URL);
		}
		else {					//take off extension after last underscore and try again
			var startIndex, endIndex, usIndex;
			endIndex = URL.indexOf("?");
			if(endIndex == -1) endIndex = URL.length-1;
			endIndex = URL.lastIndexOf(".", endIndex);	//last dot before any search string
			startIndex = URL.lastIndexOf("/", endIndex);
			usIndex = URL.lastIndexOf("_", endIndex);
			if(usIndex > startIndex) {
				URL = URL.substring(0, usIndex) + URL.substring(endIndex);
				this.synch(URL);
			}
			else if(this.clear) this.clear();		//no possible match so clear
		}
	}
}
/*************************************************************************************
						General Utitlity functions
**************************************************************************************/
//getVal
//get default value if no options value
function getVal(options, paramName, optionName) {
	var param = eval(paramName);
	if(optionName == null) optionName = paramName;
	return getValue(options, param, optionName);
}
function getValue(options, param, optionName) {
	var returnVal = param;
	if(options[optionName] != null) {
		if(typeof param == "number")  returnVal = parseInt(options[optionName], 10);
		else if(returnVal == "true") returnVal = true;
		else if(returnVal == "false") returnVal = false;
		else returnVal = options[optionName];
	}
	return returnVal;
}
//getArrayVal
//returns last item form array if index too big
function getArrayVal(array, index) {		
	var lastIndex = array.length-1;
	var val;
	if(index <= lastIndex) {
		val = array[index]
	}
	else {
		val = array[lastIndex]
	}
	return val;
}
///arrayToString
//turns array into string that evel() can use to turn back into array
function Array_To_String() {
	var type;
	var returnStr = "["
	for(var i=0; i<this.length; i++) {
		type = typeof this[i];
		switch(type) {
			case "string":
				returnStr += "'"+ this[i] + "'";
				break;
			case "number":
			case "boolean":
			case "object": //guess array or hope has appropriate toString function
				returnStr += this[i];
			break;
		}
		if(i<this.length-1) returnStr += ",";
	}
	returnStr += "]";
	return returnStr;
}
Array.prototype.toString = Array_To_String;
//Set - general set parameter function for objects
function Set(param, value) {
	if(typeof value == 'string') {
		value = '\'' +value+ '\'';
	}
 	eval('this.' +param+ '=' +value);
}
//putArgs
function putArgs(args) {	//put arguments in recognizable object
	return new Args(args);
}
function Args(args) {
	this.args = args;
}
//getArgs
function getArgs(args) {	//returns an arguments object
	if(args.length >= 1 
		&& typeof args[0] == "object" 
		&& args[0].constructor == Args) {
			return args[0].args;
	}
	else {
		return args;
	}
}
//checkCol
function checkCol(col) {
	if(col.indexOf("#") != 0) col = "#" + col;
	return col;
}
//checkScript
function checkScript(script) {
	if(script.length > 0 && script.lastIndexOf(";") != script.length-1) script += ";"
	return script;
}
/*************************************************************************************
							suplementary to HTML Functions
**************************************************************************************/
//putOptions
//put optional arguments into object
function putOptions(args, startArg) {
	var options = new Options();
	if(args.length > startArg) {
		for(z=startArg; z<args.length; z++) {
			if(typeof args[z] == "object" && args[z].constructor == Options) {				//options object
				for(optName in args[z]) {
					options[optName] = args[z][optName];
				}
			}
			else if(typeof args[z] == "string") {												//strings
				eq = args[z].indexOf("=");
				if(eq > 0) {
					optName = args[z].substring(0, eq);
					optVal = args[z].substring(eq+1);
					if(optVal=="true") optVal = true;
					else if(optVal=="false") optVal = false;
					options[optName] = optVal;
				}
			}
		}
	}
	if(options["cla"] != null) {
		options["class"] = options["cla"];
		delete options["cla"];
	}
	return options;
}
//getOption
//sets variable to appropriate value
function getOption(options, optName, defaultVal) {	
	var returnVal = defaultVal;
	if(options && options[optName]  != null) {
		returnVal = options[optName];
	}
	return returnVal;
}
//filterOptions
function filterOptions(options, filter) {
	var returnOptions = new Options();
	var optName;
	for(var i=0; i<filter.length; i++) {
		optName = filter[i];
		if(options[optName] != null) {
			returnOptions[optName] = options[optName];
		}
	}
	return returnOptions
}
//deleteOptions
function deleteOptions(options, filter) {
	var optName;
	for(var i=0; i<filter.length; i++) {
		optName = filter[i];
		if(options[optName] != null) {
			delete options[optName];
		}
	}
}
//processOptions
function processOptions(options) {
	var numOpts = 0;	//Early NN4 BUG FIX (infinite loop)
	var optNum = 0;
	if(NN4) for(optName in options) numOpts++;
	for(optName in options) {
		originalName = optName;
		optVal = options[optName];
		switch (optName) {
			case "x":
				optName = "LEFT";
				break;
			case "y":
				optName = "TOP";
				break;
			case "w":
				optName = "WIDTH";
				break;
			case "h":
				optName = "HEIGHT";
				break;
			case "z":
				if(NN4) optName = "Z-INDEX";
				break;
			case "id":
				options["NAME"] = optVal;
				break;	
			case "bgcolor":
				optVal = checkCol(optVal);
				break;
			case "map":
				optName = "USEMAP";
				optVal = checkCol(optVal);
				break;
			case "visibility":
				if(NN4) {
					if(optVal=="hidden") {optVal = "hide";}
					else if(optVal=="visible") {optVal = "show";}
				}
				break;
		}
		optName = optName.toUpperCase();
		delete options[originalName];
		options[optName] = optVal;
		if(NN4) {	//Early NN4 BUG FIX
			optNum++;
			if(optNum == numOpts) break;
		}
	}
}
//insertStyleOptions
function insertStyleOptions(options) {
	if(!NN4) {	//IE
		addStyleOption(options, "position");
		addStyleOption(options, "x", "left", "px");
		addStyleOption(options, "y", "top", "px");
		addStyleOption(options, "w", "width", "px");
		addStyleOption(options, "h", "height", "px");
		addStyleOption(options, "z", "z-index");
		addStyleOption(options, "visibility");
		addStyleOption(options, "cursor");
		addStyleOption(options, "filter");
		addStyleOption(options, "clip");
		addStyleOption(options, "bgcolor", "background");
	}
	else {	//NN4
		delete options["cursor"];	
		delete options["onselectstart"];	
		delete options["filter"];
	}
}
//addStyleOption
function addStyleOption(options, optName, styleName, styleUnit) {
	if(options[optName] == null) return;
	var styleOptVal, addOptVal;
	addOptVal = options[optName];
	if(options["style"]) styleOptVal = options["style"];
	else styleOptVal = "";
	styleOptVal = checkScript(styleOptVal);
	switch(optName) {
		case "x":
		case "y":
			if(!options["position"]
				&& styleOptVal.indexOf("position") == -1) {
				styleOptVal += "position:absolute; ";
			}
			break;
		case "clip":	//reorder
			addOptVal = addOptVal.split(",");
			addOptVal = "rect(" +addOptVal[1] + "," + addOptVal[2] + "," + addOptVal[3] + "," + addOptVal[0] + ")";
			break;
		case "bgcolor":
			addOptVal = checkCol(addOptVal);
			break;
	}
	if(!styleName) styleName = optName;
	styleOptVal += styleName;
	styleOptVal += ":"
	styleOptVal += addOptVal;
	if(styleUnit) styleOptVal += styleUnit;
	options["style"] = styleOptVal;
	delete options[optName];
}
//cloneOptions
function cloneOptions(options) {
	var returnOptions = new Options();
	for(optsName in options) {
		returnOptions[optsName] = options[optsName];
	}
	return returnOptions;
}
//Options constructor
function Options() {}
/*************************************************************************************
							Basic HTML Functions
**************************************************************************************/
//Span
function Span() {
	var options, element;
	if(arguments.length >= 4 && typeof arguments[3] == "number") {//x,y,w,h,options
		options = putOptions(arguments, 4);
		options['x'] = arguments[0];
		options['y'] = arguments[1];
		options['w'] = arguments[2];
		options['h'] = arguments[3];
	}
	else if(arguments.length >= 2 && typeof arguments[1] == "number") {//x,y,options
		options = putOptions(arguments, 2);
		options['x'] = arguments[0];
		options['y'] = arguments[1];
	}
	else {
		options = putOptions(arguments, 0);	//string of options or options object
	}
	getNewID(options);
	if(options["z"] == null) options["z"] = 0;
	if(!NN4) {
		element = createElement('SPAN', options);
	}
	else {
		element = createElement('LAYER', options);
	}
	return element;
}
//Link
function Link() {
	var options = putOptions(arguments, 0);
	return createElement('A', options);
}
//Img
function Img() {
	var options = putOptions(arguments, 0);
	getNewID(options);
	if(!options["BORDER"]) options["BORDER"] = 0;
	return createElement('IMG', options);
}
function Table() {
	var options = putOptions(arguments, 0);
	options["border"] = 0;
	return createElement('TABLE', options);
}
//TR
function TR() {
	var options = putOptions(arguments, 0);
	return createElement('TR', options);
}
//TD
function TD() {
	var options = putOptions(arguments, 0);
	getNewID(options);
	return createElement('TD', options);
}
//docWrite
function docWrite(text, doc) {
	if(!doc) {
		document.write(text);
	}
	else {
		if(typeof doc == "string") doc = getElement(doc);
		if(!NN4) {
			doc.innerHTML = text;
		}
		else {
     		doc.document.open();
     		doc.document.write(text);
     		doc.document.close();
		}
	}
}
/*************************************************************************************
							Higher level HTML Functions
**************************************************************************************/
//createText
function createText(left, top, width, height, textStr) {
	var element, lowChild;
	var options = putOptions(arguments, 5);
	var spanOpts, linkOpts; 
	var hasLink = false;
	if(options["href"]) hasLink = true;
	spanOpts = filterOptions(options, ["z", "id", "visibility", "onmouseover", "onmouseout", "class"]);
	spanOpts["x"] = left;
	spanOpts["y"] = top;
	spanOpts["w"] = width;
	spanOpts["h"] = height;
	linkOpts = filterOptions(options, ["href", "target", "class"]);
	element = Span(spanOpts);
	lowChild = element;
	if(hasLink) {
		lowChild = Link(linkOpts)
		element.append(lowChild);
	}
	lowChild.addText(textStr);
	return element;
}
//writeText
function writeText(left, top, width, height, textStr) {
	var options = putOptions(arguments, 5);
	return createText(left, top, width, height, textStr, options).write();
}
//createImage
function createImage(left, top, width, height, imgPath) {
	var element, lowChild;
	var options = putOptions(arguments, 5);
	var imgOpts, spanOpts, linkOpts, picName, img, imgPathOn;
	var rollover = "";
	var rollout = "";
	spanOpts = filterOptions(options, ["z", "visibility", "class", "id", "clip"]);
	spanOpts["x"] = left;
	spanOpts["y"] = top;
	spanOpts["w"] = width;
	spanOpts["h"] = height;
	imgOpts = filterOptions(options, ["id", "map"]);
	imgOpts["w"] = width;
	imgOpts["h"] = height;
	imgOpts["src"] = imgPath;
	img = Img(imgOpts);
	element = Span(spanOpts);
	if(options["rollover"] != null) {
		imgPathOn = options["rollover"];
		cacheImage(imgPathOn);
		cacheImage(imgPath);
		rollover += "window.document['" +img.id+ "'].src = " +getImageRef(imgPathOn)+ ".src;";
		rollout += "window.document['" +img.id+ "'].src = " +getImageRef(imgPath)+ ".src;";
		if(options["onmouseover"] == null && options["onmouseout"] == null) {
			options["onmouseover"] = rollover;
			options["onmouseout"] = rollout;
		}
		element.rollover = new Function(rollover);
		element.rollout = new Function(rollout);
	}
	lowChild = element;
	if(options["href"] || options["onmouseover"] || options["onmouseout"]) {
		linkOpts = filterOptions(options, ["href", "target", "class", "onmouseover", "onmouseout"]);
		if(linkOpts["href"] == null) linkOpts["href"] = "#";
		lowChild = Link(linkOpts)
		element.add(lowChild);
	}
	lowChild.add(img);
	element.img = img;
	return element;
}
//writeImage
function writeImage(left, top, width, height, imgPath) {
	var options = putOptions(arguments, 5);
	return createImage(left, top, width, height, imgPath, options).write();
}
//buttonState
function ButtonState(width, height, text, options) {
	var span, span2, table, tr, td, img, textHolder; 
	var spanOpts, spanOpts2, tableOpts, tdOpts;
	var bordTop, bordLeft, bordBot, bordRight;
	var bordTopCol, bordRightCol, bordBotCol, bordLeftCol;
	var blockTop, blockRight, blockBot, blockLeft;
	var options = putOptions(arguments, 1);
	var padding = getOption(options, "padding", 0);
	var bgcolor = checkCol(getOption(options, "bgcolor", "#ffffff"));
	var border = getOption(options, "border", 0);
	if(typeof border == "string") border = border.split(",");
	else if(!NN4) border = [border];
	else border = [border.toString()];		//Early NN4 BUG FIX
	if(border.length == 4) {
		bordTop = parseInt(border[0], 10);
		bordRight = parseInt(border[1], 10);
		bordBot = parseInt(border[2], 10);
		bordLeft = parseInt(border[3], 10);
	}
	else bordTop = bordLeft = bordBot = bordRight = parseInt(border[0], 10);
	var borderColor = getOption(options, "borderColor", "#000000").split(",");
	if(borderColor.length == 4) {
		bordTopCol = checkCol(borderColor[0]);
		bordRightCol = checkCol(borderColor[1]);
		bordBotCol = checkCol(borderColor[2]);
		bordLeftCol = checkCol(borderColor[3]);
	}
	else bordTopCol = bordRightCol = bordBotCol = bordLeftCol = checkCol(borderColor[0]);
	if(bordTop) blockTop = createBlock(bordLeft,0,width-bordLeft-bordRight,bordTop,bordTopCol);
	if(bordRight) blockRight = createBlock(width-bordRight,0,bordRight,height,bordRightCol);
	if(bordBot) blockBot = createBlock(bordLeft,height-bordBot,width-bordLeft-bordRight,bordBot,bordBotCol);
	if(bordLeft) blockLeft = createBlock(0,0,bordLeft,height,bordLeftCol);
	spanOpts = filterOptions(options, ["visibility"]);
	spanOpts["x"] = 0;
	spanOpts["y"] = 0;
	spanOpts["w"] = width;
	spanOpts["h"] = height;
	spanOpts2 = new Options();
	spanOpts2["bgcolor"] = bgcolor;
	spanOpts2["x"] = bordLeft;
	spanOpts2["y"] = bordTop;
	spanOpts2["w"] = width-bordLeft-bordRight;
	spanOpts2["h"] = height-bordTop-bordBot;
	span2 = Span(spanOpts2);
	//table
	if(IE4 && MAC) {	//BUG FIX
		if(options["textY"] == null) options["textY"] = 5;
		if(options["textX"] == null) options["textX"] = 15;
	}
	var textXY = false;
	if(options["textX"] != null && options["textY"] != null) textXY = true;
	if(!textXY) {
		tableOpts = new Options();
		tableOpts["cellpadding"] = 0;
		tableOpts["cellspacing"] = 0;
		tableOpts["border"] = 0;
		tableOpts["w"] = spanOpts2["w"];
		tableOpts["h"] = spanOpts2["h"];
		tdOpts = filterOptions(options, ["align", "valign", "class"]);
		tdOpts["w"] = spanOpts2["w"];
		tdOpts["h"] = spanOpts2["h"];
		td = TD(tdOpts);
		table = Table(tableOpts);
		tr = TR();
		tr.add(td);
		table.add(tr);
		span2.add(table);
	}	
	//image
	if(options["img"]) {
		var imgName = options["img"];
		img = createImage(options["imgX"], 
						options["imgY"], 
						options["imgW"], 
						options["imgH"], 
						imgName);
	}
	span = Span(spanOpts);
	span.add(span2);
	if(blockTop) {
		span.add(blockTop);
		span.blockTop = blockTop;
	}
	if(blockRight) {
		span.add(blockRight);
		span.blockRight = blockRight;
	}
	if(blockBot) {
		span.add(blockBot);
		span.blockBot = blockBot;
	}
	if(blockLeft) {
		span.add(blockLeft);
		span.blockLeft = blockLeft;
	}
	if(img) {
		span2.add(img);
		span.img = img;
	}
	//text
	if(text != "") {
		if(textXY) {
			if(typeof options["textX"] == "string") options["textX"] = parseInt(options["textX"], 10);
			if(typeof options["textY"] == "string") options["textY"] = parseInt(options["textY"], 10);
			var textSpanOpts = filterOptions(options, ["class"]);
			var textSpan = Span(options["textX"], options["textY"], textSpanOpts);
			textSpan.addText(text);
			span2.add(textSpan);
			textHolder = textSpan;
		}
		else {
			td.addText(text);
			textHolder = td;
		}
		span.textHolder = textHolder;
	}
	span.bgSpan = span2;
	span.text = text;
	//Speedy toString
	if(!NN4) span.toString = ButtonState_To_String;
	return span;
}
//Speedy toString Method for buttonState
function ButtonState_To_String() {
	var bgSpan = this.bgSpan;
	var textHolder = this.textHolder;
	var text = this.text;
	var cla;
	if(textHolder) {
		if(textHolder.options["class"]) cla = textHolder.options["class"];
		else if(textHolder.options.cla) cla = textHolder.options.cla;
	}
	HTMLStr = '';
	//span
	HTMLStr += '<SPAN NAME="'+this.id+'" ID="'+this.id+'" STYLE="position:absolute;left:'+this.options.x+'px;top:'+this.options.y+'px;width:'+this.options.w+'px;height:'+this.options.h+'px;z-index:'+this.options.z+';visibility:'+this.options.visibility+';">\n';
	//span2
	HTMLStr += '<SPAN NAME="'+bgSpan.id+'" ID="'+bgSpan.id+'" STYLE="position:absolute;left:'+bgSpan.options.x+'px;top:'+bgSpan.options.y+'px;width:'+bgSpan.options.w+'px;height:'+bgSpan.options.h+'px;z-index:'+bgSpan.options.z+';background:'+bgSpan.options.bgcolor+';">\n';
	//table text
	if(textHolder && textHolder.tag == "TD") {
		HTMLStr += '<TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="'+bgSpan.options.w+'" HEIGHT="'+bgSpan.options.h+'">\n';
		HTMLStr += '<TR>\n';
		HTMLStr += '<TD';
		if(textHolder.options.align) HTMLStr += ' ALIGN="'+textHolder.options.align+'"';  
		if(textHolder.options.valign) HTMLStr += ' VALIGN="'+textHolder.options.valign+'"';
		if(cla) HTMLStr += ' CLASS="'+cla+'"'; 
		HTMLStr += ' WIDTH="'+textHolder.options.w+'" HEIGHT="'+textHolder.options.h+'" NAME="'+textHolder.id+'" ID="'+textHolder.id+'">';
		HTMLStr += text;
		HTMLStr += '</TD>\n';
		HTMLStr += '</TR>\n';
		HTMLStr += '</TABLE>\n';
	}
	//image
	if(this.img) {
		var img = this.img;
		HTMLStr += '<SPAN NAME="'+img.id+'" ID="'+img.id+'" STYLE="position:absolute;left:'+img.options.x+'px;top:'+img.options.y+'px;width:'+img.options.w+'px;height:'+img.options.h+'px;z-index:'+img.options.z+';">';
		HTMLStr += '<IMG BORDER="0" SRC="'+img.img.options.src+'" WIDTH="'+img.img.options.w+'" HEIGHT="'+img.img.options.h+'" NAME="'+img.img.id+'" ID="'+img.img.id+'">'; 
		HTMLStr += '</SPAN>\n';
	}
	//absolute text
	if(textHolder  && textHolder.tag == "SPAN") {
		HTMLStr += '<SPAN NAME="'+textHolder.id+'" ID="'+textHolder.id+'"';
		if(cla) HTMLStr += ' CLASS="'+cla+'"';
		HTMLStr += ' STYLE="position:absolute;left:'+textHolder.options.x+'px;top:'+textHolder.options.y+'px;z-index:'+textHolder.options.z+';">';
		HTMLStr += text;
		HTMLStr += '</SPAN>\n';
	}
	//close span2
	HTMLStr += '</SPAN>\n';
	//borders
	if(this.blockTop) {
		var blockTop = this.blockTop;
		HTMLStr += '<SPAN NAME="'+blockTop.id+'" ID="'+blockTop.id+'" STYLE="position:absolute;left:'+blockTop.options.x+'px;top:'+blockTop.options.y+'px;width:'+blockTop.options.w+'px;height:'+blockTop.options.h+'px;z-index:'+blockTop.options.z+';background:'+blockTop.options.bgcolor+';"><IMG SRC="'+spacer+'" WIDTH="'+blockTop.options.w+'" HEIGHT="'+blockTop.options.h+'"></SPAN>\n';
	}
	if(this.blockRight) {
		var blockRight = this.blockRight;
		HTMLStr += '<SPAN NAME="'+blockRight.id+'" ID="'+blockRight.id+'" STYLE="position:absolute;left:'+blockRight.options.x+'px;top:'+blockRight.options.y+'px;width:'+blockRight.options.w+'px;height:'+blockRight.options.h+'px;z-index:'+blockRight.options.z+';background:'+blockRight.options.bgcolor+';"><IMG SRC="'+spacer+'" WIDTH="'+blockRight.options.w+'" HEIGHT="'+blockRight.options.h+'"></SPAN>\n';
	}
	if(this.blockBot) {
		var blockBot = this.blockBot;
		HTMLStr += '<SPAN NAME="'+blockBot.id+'" ID="'+blockBot.id+'" STYLE="position:absolute;left:'+blockBot.options.x+'px;top:'+blockBot.options.y+'px;width:'+blockBot.options.w+'px;height:'+blockBot.options.h+'px;z-index:'+blockBot.options.z+';background:'+blockBot.options.bgcolor+';"><IMG SRC="'+spacer+'" WIDTH="'+blockBot.options.w+'" HEIGHT="'+blockBot.options.h+'"></SPAN>\n';
	}
	if(this.blockLeft) {
		var blockLeft = this.blockLeft;
		HTMLStr += '<SPAN NAME="'+blockLeft.id+'" ID="'+blockLeft.id+'" STYLE="position:absolute;left:'+blockLeft.options.x+'px;top:'+blockLeft.options.y+'px;width:'+blockLeft.options.w+'px;height:'+blockLeft.options.h+'px;z-index:'+blockLeft.options.z+';background:'+blockLeft.options.bgcolor+';"><IMG SRC="'+spacer+'" WIDTH="'+blockLeft.options.w+'" HEIGHT="'+blockLeft.options.h+'"></SPAN>\n';
	}
	//close	span
	HTMLStr += '</SPAN>\n';
	return HTMLStr;
}
//createButton
var Buttons = new Array();
function getButtonRef() {return "Buttons[" +Buttons.length+ "]";}
function createButton() {//left, top width, height, text, opts, offState/state0, [onState/state1, state2, state3]
	var args = getArgs(arguments);
	var left = args[0];
	var top = args[1];
	var width = args[2];
	var height = args[3];
	var text = args[4];
	var span, spanOpts;
	var spanOptsMOver, spanOptsMOut;
	var borderColor, bordColTop, bordColRight, bordColBot, bordColLeft;
	var buttonID;
	var agrsLength = args.length;
	var states = args[agrsLength-1];
	var numStates = states.length;
	var opts = new Array();							//general button options
	for(var i=5; i<agrsLength-1; i++) opts[i] = args[i];
	var options = putOptions(opts, 5);
	var spanOpts = filterOptions(options, ["z", "visibility", "cursor", "onmouseover", "onmouseout", "filter", "id"]);
	if(spanOpts["id"] == null) {
		spanOpts["id"] = getNewID();
	}
	buttonID = spanOpts["id"];
	spanOpts["x"] = left;
	spanOpts["y"] = top;
	spanOpts["w"] = width;
	spanOpts["h"] = height;
	var opts = new Array();									//states
	var spans = new Array();
	var doState = new Array();
	doState[0] = "";										//create off state
	opts[0] = putOptions(states[0], 0);		
	var optsTemp = filterOptions(options, ["imgX", "imgY", "imgW", "imgH", "textX", "textY", "border", "align", "valign"]);	//grab other relevant options
	opts[0] = putOptions([opts[0], optsTemp, "visibility=inherit"], 0); //add together
	spans[0] = ButtonState(width, height, text, opts[0]);
	//rollover
	var classChange = false;
	for(var i=1; i<numStates; i++) {				//create state options
		opts[i] =  putOptions(states[i], 0);
		if(NN4 && opts[i]["class"] != null) classChange = true;
	}
	if(classChange) {			//NN4 class change
		for(var i=1; i<numStates; i++) {
			opts[i] = putOptions([opts[0], opts[i], "visibility=hidden"], 0);	//add together
			spans[i] = ButtonState(width, height, text, opts[i]);				//create spans
			//show this
			doState[i] = "";
			doState[i] += "showElement('" +spans[i].id+ "');";
			doState[0] += "hideElement('" +spans[i].id+ "');";
			for(var j=1; j<i; j++) {
				//hide all others up to this
				doState[i] += "hideElement('" +spans[j].id+ "');";
				//get all others up to this to hide this
				doState[j] += "hideElement('" +spans[i].id+ "');";
			}
		}	
	}
	else {	//IE NN6 & NN4 no class change
		var bgSwap = false;
		var borderSwap = false;
		var classSwap = false;
		var imgSwap = false;
		var imgName;
		for(var i=1; i<numStates; i++) {
			if(opts[i]["bgcolor"] != null) bgSwap = true;
			if(opts[i]["borderColor"] != null) borderSwap = true;
			if(opts[i]["class"] != null && text != "") classSwap = true;
			if(opts[i]["img"] != null) imgSwap = true;
		}
		if(bgSwap) doState[0] += "setColor('" +opts[0]["bgcolor"]+ "', '" +spans[0].bgSpan.id+ "');";
		if(borderSwap) {
			borderColor = opts[0]["borderColor"].split(",");
			if(borderColor.length == 4) {
				bordColTop = checkCol(borderColor[0]);
				bordColRight = checkCol(borderColor[1]);
				bordColBot = checkCol(borderColor[2]);
				bordColLeft = checkCol(borderColor[3]);
			}
			else {
				bordColTop = bordColRight = bordColBot = bordColLeft = checkCol(borderColor[0]);
			}
			if(spans[0].blockTop) doState[0] += "setColor('" +bordColTop+ "', '" +spans[0].blockTop.id+ "');";
			if(spans[0].blockRight) doState[0] += "setColor('" +bordColRight+ "', '" +spans[0].blockRight.id+ "');";
			if(spans[0].blockBot) doState[0] += "setColor('" +bordColBot+ "', '" +spans[0].blockBot.id+ "');";
			if(spans[0].blockLeft) doState[0] += "setColor('" +bordColLeft+ "', '" +spans[0].blockLeft.id+ "');";
		}
		if(classSwap) doState[0] += "getElement('" +spans[0].textHolder.id+ "').className='" +opts[0]["class"]+ "';";
		if(imgSwap) {
			imgName = opts[0]["img"];
			cacheImage(imgName);
			doState[0] += "window.document['" +spans[0].img.img.id+ "'].src = " +getImageRef(imgName)+ ".src;";
		}	
		for(var i=1; i<numStates; i++) {
			doState[i] = "";
			opts[i] = putOptions([opts[0], opts[i]], 0);		//add together
			if(bgSwap) {
				checkCol(opts[i]["bgcolor"]);
				doState[i] += "setColor('" +opts[i]["bgcolor"]+ "', '" +spans[0].bgSpan.id+ "');";
			}
			if(borderSwap) {
				borderColor = opts[i]["borderColor"].split(",");
				if(borderColor.length == 4) {
					bordColTop = checkCol(borderColor[0]);
					bordColRight = checkCol(borderColor[1]);
					bordColBot = checkCol(borderColor[2]);
					bordColLeft = checkCol(borderColor[3]);
				}
				else {
					bordColTop = bordColRight = bordColBot = bordColLeft = checkCol(borderColor[0]);
				}
				if(spans[0].blockTop) doState[i] += "setColor('" +bordColTop+ "', '" +spans[0].blockTop.id+ "');";
				if(spans[0].blockRight) doState[i] += "setColor('" +bordColRight+ "', '" +spans[0].blockRight.id+ "');";
				if(spans[0].blockBot) doState[i] += "setColor('" +bordColBot+ "', '" +spans[0].blockBot.id+ "');";
				if(spans[0].blockLeft) doState[i] += "setColor('" +bordColLeft+ "', '" +spans[0].blockLeft.id+ "');";
			}
			if(classSwap) {
				doState[i] += "getElement('" +spans[0].textHolder.id+ "').className='" +opts[i]["class"]+ "';";
			}
			if(imgSwap) {
				imgName = opts[i]["img"];
				cacheImage(imgName);
				doState[i] += "window.document['" +spans[0].img.img.id+ "'].src = " +getImageRef(imgName)+ ".src;";
			}	
		}
	}
	spanOptsMOver = getOption(spanOpts, "onmouseover", "");
	checkScript(spanOptsMOver);
	spanOptsMOut = getOption(spanOpts, "onmouseout", "");
	checkScript(spanOptsMOut);
	if(numStates > 1 && spanOpts["onmouseover"] == null && spanOpts["onmouseout"] == null) {
		spanOptsMOver += doState[1];
		spanOptsMOut += doState[0];
	}
	//link
	var linkStr = null;
	var targetStr = null;
	var shiftEnabled = false;
	var handleMouseDownStr = "";
	if(options["onmousedown"]) handleMouseDownStr = checkScript(options["onmousedown"]);
	if(options["shiftEnabled"]) shiftEnabled = true;
	if(options["href"]) {
		if(options["href"].indexOf("'") == -1) linkStr = "'" +options["href"]+ "'";
		else linkStr = "&quot;" +options["href"]+ "&quot;";
	}
	if(options["target"]) targetStr = "'" +options["target"]+ "'";
	if(linkStr) {
		handleMouseDownStr += "handleMouseDown(event, " +linkStr+ ", " +targetStr+ ", " +shiftEnabled+ ");";
		if(IE) {
			spanOpts["onmousedown"] = handleMouseDownStr;
			spanOpts["ondoubleclick"] = handleMouseDownStr;
			spanOpts["cursor"] = "hand";
			spanOpts["onselectstart"] = "return false";
		}
		else if(NN6) {
			spanOpts["onmousedown"] = handleMouseDownStr;
		}
		else if(NN4) {
			spanOptsMOver += "void(getElement('" +buttonID+ "').captureEvents(Event.MOUSEDOWN));void(getElement('" +buttonID+ "').onmousedown=function(event) {" +handleMouseDownStr+ "});";
		}
	}
	if(spanOptsMOver != "") spanOpts["onmouseover"] = spanOptsMOver; 
	if(spanOptsMOut != "") spanOpts["onmouseout"] = spanOptsMOut;
	span = Span(spanOpts);
	span.add(spans[0]);
	if(classChange) {										//add states for NN4 class change	
		for(var i=1; i<numStates; i++) {				
			span.add(spans[i]);	
		}
	}		
	setStateFunction = "switch(stateNum) {\n"		//build setState Function and state Functions
	span.state = new Array();						//functions to set button state
	span.numStates = numStates;
	for(var i=0; i<numStates; i++) {						
		setStateFunction += "case "+i+":\n";
		setStateFunction += doState[i] +"\n";
		setStateFunction += "break;\n";
		span.state[i] = Function(doState[i]);
	}
	setStateFunction += "}"
	span.setState = new Function("stateNum", setStateFunction);
	if(numStates > 1) {
		span.rollover = new Function(doState[1]);
		span.rollout = new Function(doState[0]);
	}
	span.add(Span(0, 0, width, height, "z=10"));		//dummy span so cursor pointer
	Buttons[Buttons.length] = span;
	return span;
}
//writeButton
function writeButton(left, top, width, height, text) {
	return createButton(putArgs(arguments)).write();
}
//createBlock
function createBlock(top, left, width, height, bgcolor) {
	var span, table, tr, td, tableOpts, tdOpts;
	var options = putOptions(arguments, 5)
	options["bgcolor"] = bgcolor;
	options["x"] = top;
	options["y"] = left;
	options["w"] = width;
	options["h"] = height;
	span = Span(options);
	//var table = '<TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="'+width+'" HEIGHT="'+height+'"><TR><TD WIDTH="'+width+'" HEIGHT="'+height+'"></TD></TR></TABLE>';
	var img = '<IMG SRC="'+spacer+'" WIDTH="'+width+'" HEIGHT="'+height+'">';
	span.addText(img);
	return span;
}
//writeBlock
function writeBlock(top, left, width, height, bgcolor) {
	var options = putOptions(arguments, 5);
	return createBlock(top, left, width, height, bgcolor, options).write();
}
/*************************************************************************************
				MinDOM: Very Simplified DOM Functions for building HTML Document
**************************************************************************************/
//************************************Element*******************************************
var elements = new Object();
var TAG = 1;
var HOLDER = 2;
var TEXT = 3;
function createElement(tagName, options) {
	var element;
	if(tagName != null) {
		element =  new Element(tagName, options);
		element.type = TAG;
	}
	else {
		element =  new Element(null);
		element.type = HOLDER;
	}
	return element;
}

function Element(tag) {
	this.tag = tag;											//String
	this.firstChild = null;									//Node
	this.lastChild = null;									//Node
	this.nextSibling = null;								//Node
	this.prevSibling = null;								//Node
	this.parent = null;										//Node
	this.children = new Array();							//Array
	this.hasChildren = false;
	this.options = new Options();							//Associative Array
	this.text = null;										//String content
	if(arguments.length > 1 && arguments[1] != null) {						
		this.options = arguments[1];
	}
	if(this.options["id"]) {								//convenience
		this.id = this.options["id"];
	}		
}

function Element_Add_Child(child) {							//add a child return parent
	var index = this.children.length;					
	child.parent = this;
	this.lastChild = child;
	this.children[index] = child;
	if(index == 0) {
		this.firstChild = child;
	}
	else {
		var sibling = this.children[index-1];
		sibling.nextSibling = child;
		child.prevSibling = sibling;
	}	
	this.hasChildren = true;
	return this;
}
Element.prototype.add = Element_Add_Child;

function Element_Add_Text(data) {							//add Text
	var element =  new Element(null);
	element.type = TEXT;
	element.text = data;
	this.add(element);
	return this;
}
Element.prototype.addText = Element_Add_Text;

function Element_Write(doc) {								//write
	var HTMLStr = this.toString();
	docWrite(HTMLStr, doc);
	return this;
}
Element.prototype.write = Element_Write;

function Element_To_String() {							//toString		
	var returnStr = "";
	if(this.type == TAG) {
		var options = cloneOptions(this.options);
		if(this.tag == 'LAYER' || this.tag == 'SPAN') {
			insertStyleOptions(options); 					//put style options in style option 
		}
		processOptions(options);
		returnStr += '<'+this.tag;
		for(opt in options) {
			returnStr += ' ' +opt+ '="' +options[opt] + '"';
		}
		returnStr += '>';
		if(this.hasChildren && this.firstChild.type != TEXT && this.firstChild.tag != "IMG") {
			returnStr += '\n';
		}
		for(var i=0; i<this.children.length; i++) {
			returnStr += this.children[i].toString();
		}
		if(this.tag != 'IMG') {
			returnStr += '</'+this.tag+'>\n';
		}
	}
	else if(this.type == TEXT){
		returnStr = this.text;
	}
	else {	//empty
		for(var i=0; i<this.children.length; i++) {
			returnStr += this.children[i].toString();
		}
	}
	return returnStr;
}
Element.prototype.toString = Element_To_String;

function Element_Clone() {									//clone
	var options = cloneOptions(this.options);
	if(this.id) {
		this.id = getNewID();
		this.options.id = this.id
	}
	var element = createElement(this.tag, options);
	for(var i=0; i<this.children.length; i++) {
		element.add(this.children[i].clone());
	}
	return element;
}
Element.prototype.clone = Element_Clone;
//********************************end Element***************************************


function writeHTML(left, top, width, height, HTMLName, HTMLStr) {
	var z = "0";
	var options = putOptions(arguments, 6);
	var clipping = arguments[6];
	if(options["z"]) {
		z = options["z"];
	}
	if(!NN4) {
		document.writeln('<DIV STYLE="position:absolute; left:' +left+ '; top:' +top+ '; width:' +width+ '; height:' +height+ '; z-index:' +z+ '" ID="' +HTMLName+ '; clip" >' +HTMLStr+ '</DIV>');
	}
	else {
		document.writeln('<LAYER LEFT="' +left+ '" TOP="' +top+ '" WIDTH="' +width+ '" HEIGHT="' +height+ '" Z-INDEX="' +z+ '" NAME="' +HTMLName+ '">' +HTMLStr+ '</LAYER>');
	}
}