//Dropdown Menu functions
	timeoutIds = [];
	function finishHiding(id) {
		$(id).blindUp({ duration: 0.15 });
		//Opera doesn't clear the menus properly, so I have to make it redraw.
		timeoutIds[id] = setTimeout('operaCheck()', 150);
		}
	function operaCheck() {
		//This is a hack to force opera to redraw the window.
		if (window.opera)
		   document.body.style += "";	// Force Opera redraw.
	}
	//Scrolls the menu down when the user hovers over it.
	function showMenu(id) {
		//Check to see if any close timeouts are pending and clear them.
		if(timeoutIds[id]) {
			clearTimeout(timeoutIds[id]);
		}
		
		//If display isn't none, the menu is either scrolling down or scrolled down.
		//We only want to scroll the menu down if it is fully closed.
		ThisElement = document.getElementById(id);
		ThisDisplay = ThisElement.style.display;
		if(ThisDisplay == "none") {
			//When the user moves across menus quickly the height can get messed up 
			//(causing the menu to only scroll partway down)
			//The sets it back to auto before trying to scroll then menu down again.
			ThisElement.style.height = 'auto';
			//scroll the blind down.
			$(id).blindDown({ duration: 0.15});
		}
		}
	
	//Starts hiding the menu when the user leaves it.
	function hideMenu(id) {
		//The user will often pop out for a split second
		//To accomodate, the program waits a moment before scrolling the menu up.
		codeToExec = 'finishHiding("' + id + '");';
		timeoutIds[id] = setTimeout(codeToExec, 150);
		}
	
	// Browser Stuff
	function setForm() {
		var browser=navigator.appName;
		//if(browser != "Microsoft Internet Explorer"){ /* Browser sniffing is bad. You never saw this. */
			var s = document.getElementById('JumpToMenu');
			selectReplacement(s);
		
			document.onclick = function(){
				if(menuOpen == true){
					//alert("BODY");
					closeSel(menuLi);
				}
			}
		//}
	}
	
	function selectReplacement(obj) {
	obj.className += ' replaced';
	var ul = document.createElement('ul');
	ul.className =  'selectReplacement';
	var opts = obj.options;
	for (var i=0; i<opts.length; i++) {
		var selectedOpt;
		if (opts[i].selected) {
			selectedOpt = i;
			break;
		} else {
			selectedOpt = 0;
		}
	}
	for (var i=0; i<opts.length; i++) {
		var li = document.createElement('li');
		var txt = document.createTextNode(opts[i].text);
		li.appendChild(txt);
		li.selIndex = opts[i].index;
		if(i == opts.length-1){
			li.id += 'selectLast';
		}
		else if(i == 1){
			li.id += 'selectFirst';
		}
		li.selectID = obj.id;
		if(opts[i].value != -1){
			li.onclick = function(e) {
				//alert(this.selIndex);
				menuLi = li;
				menuOpen = false;
				//alert("1 - Select");
				selectMe(this);
			}
		}
		if (i == selectedOpt) {
			menuLi = li;
			li.className = 'selected';
			li.onclick = function(e) {
				//alert("2 - Open");
				this.parentNode.className += ' selectOpen';	
				
				this.onclick = function(e) {
					//alert("3 - Close");
					menuOpen = false;
					menuLi = this;
					selectMe(this);
				}
				popBubble(e);
				menuOpen = true;
			}
		}
		if (window.attachEvent) {
			li.onmouseover = function() {
				this.className += ' hover';
			}
			li.onmouseout = function() {
				this.className = 
				this.className.replace(new RegExp(" hover\\b"), '');
			}
		}
		ul.appendChild(li);
	}
	// add the input and the ul
	obj.parentNode.appendChild(ul);
}

function toggleDivDisplay(id){
	if (document.getElementById(id).style.display == 'block') document.getElementById(id).style.display = 'none';
	else document.getElementById(id).style.display = 'block';
}
/* Error backtrace JS */
function toggleBacktrace(id) {
	var myDiv = document.getElementById(id);
	if(myDiv.style.display == 'block')
		myDiv.style.display = 'none';
	else
		myDiv.style.display = 'block';
}


/*********************************/
/*******Select replacement********/
var menuOpen = false;
var menuLi;
function selectReplacement(obj) {
	obj.className += ' replaced';
	var ul = document.createElement('ul');
	ul.className =  'selectReplacement';
	var opts = obj.options;
	for (var i=0; i<opts.length; i++) {
		var selectedOpt;
		if (opts[i].selected) {
			selectedOpt = i;
			break;
		} else {
			selectedOpt = 0;
		}
	}
	for (var i=0; i<opts.length; i++) {
		var li = document.createElement('li');
		var txt = document.createTextNode(opts[i].text);
		li.appendChild(txt);
		li.selIndex = opts[i].index;
		if(i == opts.length-1){
			li.id += 'selectLast';
		}
		else if(i == 1){
			li.id += 'selectFirst';
		}
		li.selectID = obj.id;
		if(opts[i].value != -1){
			li.onclick = function(e) {
				//alert(this.selIndex);
				menuLi = li;
				menuOpen = false;
				//alert("1 - Select");
				selectMe(this);
			}
		}
		if (i == selectedOpt) {
			menuLi = li;
			li.className = 'selected';
			li.onclick = function(e) {
				//alert("2 - Open");
				this.parentNode.className += ' selectOpen';	
				
				this.onclick = function(e) {
					//alert("3 - Close");
					menuOpen = false;
					menuLi = this;
					selectMe(this);
				}
				popBubble(e);
				menuOpen = true;
			}
		}
		if (window.attachEvent) {
			li.onmouseover = function() {
				this.className += ' hover';
			}
			li.onmouseout = function() {
				this.className = 
				this.className.replace(new RegExp(" hover\\b"), '');
			}
		}
		ul.appendChild(li);
	}
	// add the input and the ul
	obj.parentNode.appendChild(ul);
}
function selectMe(obj) {
	var lis = obj.parentNode.getElementsByTagName('li');
	for (var i=0; i<lis.length; i++) {
		if (lis[i] != obj) { // not the selected list item
			lis[i].className='';
			objList = document.getElementById(obj.selectID);
			if(objList.options[i].value != -1){
				lis[i].onclick = function(e) {
						//alert("4 - Select");
						menuLi = this;
						menuOpen = false;
						selectMe(this);
				}
			}
		} else {
			setVal(obj.selectID, obj.selIndex);
			obj.className='selected';
			obj.parentNode.className = 
				obj.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
			obj.onclick = function(e) {
				//alert("5 - Open");
				menuLi = obj;
				obj.parentNode.className += ' selectOpen';
				this.onclick = function(e) {
					//alert("6 - Close");
					menuLi = this;
					menuOpen = false;					
					selectMe(this);
				}
				popBubble(e);
				menuOpen = true;
			}
		}
	}
}
function setVal(objID, selIndex) {
	var obj = document.getElementById(objID);

	if(obj.options[selIndex].value != -1){
		obj.selectedIndex = selIndex;
		obj.onchange()
	}
	else{
		newLi = menuLi.parentNode.getElementsByTagName('li');
		newLi = newLi[1];
		closeSel(newLi);
	}

}
function setForm() {
	var browser=navigator.appName;
	//if(browser != "Microsoft Internet Explorer"){ /* Browser sniffing is bad. You never saw this. */
		// var s = document.getElementById('JumpToMenu');
		// selectReplacement(s);
	
		document.onclick = function(){
			if(menuOpen == true){
				//alert("BODY");
				closeSel(menuLi);
			}
		}
	//}
}
function closeSel(obj) {
	if(obj.parentNode.className){
		obj.parentNode.className =	obj.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
		selectMe(obj);
	}
}
