

function newXMLHttpRequest() {
    var xmlreq = null;
    if (window.XMLHttpRequest) {
	xmlreq = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
	try {
	    xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e1) {
	    try {
		xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
	    } catch (e2) {
		alert(e2.message);
	    }
	}
    }
    return xmlreq;
}


function ajax(targetId, url, loadHtml, postScript) {
    var req = newXMLHttpRequest();
    if (targetId != null) {
		req.onreadystatechange = function() {
 	    	if (req.readyState == 4) {
   				document.getElementById(targetId).innerHTML = req.responseText;
				if (postScript != null) {
					eval(postScript);
					//alert("postScript = " + postScript);
				}
				delete req;
				req = null;
	    	} else if (loadHtml != null) {
				document.getElementById(targetId).innerHTML = loadHtml;
	    	}
		}
    }
    //url += ("&rn=" + Math.floor(Math.random() * 10000));
    req.open('GET', url, true);
    req.send(null);
}


var mouseX = 0, mouseY = 0;
var grabX = 0, grabY = 0;
var oriX = 0, oriY = 0;
var eleX = 0, eleY = 0;
var dragContext = null;
var dragObject = null;

function falsefunc() { return false; }  //  used to block cascading events

function dragInit() {
    document.onmousemove = update;  //  update(event) implied on NS, update(null) implied on IE
    update();
}

function getMouseXY(e) {  //  works on IE6, FF, Moz, Opera7
    //if (e == null) {
    //    e = window.event;  //  works on IE, but not NS (we rely on NS passing us the event)
    //}
    e = (e ? e : window.event);

    if (e) {
        if (e.pageX || e.pageY) {
			//  this doesn't work on IE6!! (works on FF, Moz, Opera7)
			mouseX = e.pageX;
			mouseY = e.pageY;
		} else if (e.clientX || e.clientY) {
			//  works on IE6, FF, Moz, Opera7
			mouseX = e.clientX + document.body.scrollLeft;
			mouseY = e.clientY + document.body.scrollTop;
		}
    }
}

function update(e) {
    getMouseXY(e);  //  NS is passing (event), while IE is passing (null)
}

function dragGrab(context) {
    document.onmousedown = falsefunc;  //  in NS this prevents cascading of events, thus disabling text selection
    dragContext = context;
    dragObject = document.getElementById(context);
    if (dragObject) {
		dragObject.style.zIndex = 20;  //  move it to the top
		document.onmousemove = dragDrag;
		document.onmouseup = dragDrop;
		grabX = mouseX;
		grabY = mouseY;
		eleX = oriX = dragObject.offsetLeft;
		eleY = oriY = dragObject.offsetTop;
		update();
    }
}

function dragDrag(e) {  //  parameter passing is important for NS family
    if (dragObject) {
		//dragObject.style.opacity = '0.6';
		//dragObject.style.filter = 'alpha(opacity=60)';
        eleX = oriX + (mouseX - grabX);
        eleY = oriY + (mouseY - grabY);
		dragObject.style.position = "absolute";
		//	dragObject.style.position = "fixed";
		dragObject.style.left = (eleX).toString(10) + "px";
		dragObject.style.top = (eleY).toString(10) + "px";
    }
    update(e);
    return false;  //  in IE this prevents cascading of events, thus text selection is disabled
}

function dragDrop() {
    if (dragObject) {
		//dragObject.style.opacity = '1.0';
		//dragObject.style.filter = 'alpha(opacity=100)';
        dragObject.style.zIndex = 15;
		dragContext = null;
		dragObject = null;
    }
    update();
    document.onmousemove = update;
    document.onmouseup = null;
    document.onmousedown = null;  //  re-enables text selection on NS
}


function getElementHeight(elem) {
    var ns4 = document.layers;
    var op5 = (navigator.userAgent.indexOf("Opera 5") != -1) || (navigator.userAgent.indexOf("Opera/5") != -1);
    if (ns4) {
	var elem = getObjNN4(document, elem);
	return elem.clip.height;
    } else {
	if (document.getElementById) {
	    var elem = document.getElementById(elem);
	} else if (document.all) {
	    var elem = document.all[elem];
	}
	if (op5) {
	    xPos = elem.style.pixelHeight;
	} else {
	    //xPos = elem.offsetHeight;
	    xPos = elem.clientheight;
	}
	return xPos;
    }
}


function getElementWidth(elem) {
    var ns4 = document.layers;
    var op5 = (navigator.userAgent.indexOf("Opera 5") != -1) || (navigator.userAgent.indexOf("Opera/5") != -1);
    if (ns4) {
	var elem = getObjNN4(document, elem);
	return elem.clip.width;
    } else {
	if (document.getElementById) {
	    var elem = document.getElementById(elem);
	} else if (document.all) {
	    var elem = document.all[elem];
	}
	if (op5) {
	    xPos = elem.style.pixelWidth;
	} else {
	    xPos = elem.offsetWidth;
	}
	return xPos;
    }
}


	
        function toggleSub(elementId) {
		var element = document.getElementById(elementId)
		if (element.style.display == 'none') {
		element.style.display = 'block';
		} else {
		element.style.display = 'none'
	}
}

	
	function buttonOn(elementId) {
		var element = document.getElementById(elementId)
		element.className='menuButtonOn'
	}
	
	function buttonOff(elementId) {
		var element = document.getElementById(elementId)
		element.className='menuButton'
	}
	
	function subItemOn(elementId) {
		var element = document.getElementById(elementId)
		element.className='subItemOn'
	}
	
	function subItemOff(elementId) {
		var element = document.getElementById(elementId)
		element.className='subItem'
	}
	
