function setOpacity(id,target) {
	var itm = getElement(id);
	if (itm) {
		var s;
		if (itm.style) s = itm.style;
		else s = itm;
		if (target < 0) {
			s.visibility = 'hidden';
			s.display = 'none';
			target = 0;
		} else if (s.visibility != 'visible') {
			s.visibility = 'visible';
			//s.display = itm.WFdisplay || 'block';
			s.display = 'block';
		}
		if (itm.filters) {
			s.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+target+")"
		} else {
			s.MozOpacity = parseFloat(target) / 100;
		}
	}
}

function getElement(id) {
	if (typeof(id)=="string") {
		return document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers?document.layers[id]:null;
	} else if (typeof(id)=="object") {
		return id
	}
}

var dropdowns = Array();
function setupHovers() {
	var navRoot = getElement("dropdown");
	if (navRoot) {
		for (var i=0; i<navRoot.childNodes.length; i++) {
			var node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				if (document.all&&document.getElementById) {
					node.onmouseover=function() {this.className+=" over";}
					node.onmouseout=function() {this.className=this.className.replace(" over", "");}
				}
				for (var j=0; j<node.childNodes.length; j++) {
					var subnode = node.childNodes[j];
					if (subnode.nodeName=="UL") {
						dropdowns[dropdowns.length] = Array(node, subnode)
					}
				}
			}
		}
		for (var i=0; i<dropdowns.length; i++) {
			var dropdown = dropdowns[i];
			setupFade(dropdown[1], 100, -1, 10, 10, dropdown[0]);
		}
	}
}

function setupFade(id, showfade, hidefade, showspeed, hidespeed, showid) {
	// showfade/hidefade      opacity (0 - 100, less than 0 means 0 and hide)
	// showspeed/hidespeed    faster is quicker
	//   hidefade is used for setting initial opacity
	var itm = getElement(id);
	var showitm = getElement(showid);
	if (itm && showitm) {
		itm.WFshowspeed = showspeed;
		itm.WFhidespeed = hidespeed;
		// set limits (100% opacity does strange things, make 99% max)
		if (showfade > 99) showfade = 99;
		else if (showfade < -1) showfade = -1;
		if (hidefade > 99) hidefade = 99;
		else if (hidefade < -1) hidefade = -1;
		itm.WFshowfade = showfade;
		itm.WFhidefade = hidefade;
		setOpacity(id, hidefade);
		if (showitm) {
			if (!showitm.WFfadeinitems) showitm.WFfadeinitems = new Array();
			showitm.WFfadeinitems[showitm.WFfadeinitems.length] = itm;
			showitm.WFelementhover = WFelementhover;
			WFaddhandler(showitm, 'mouseover', 'WFelementhover');
		}
		if (!document.WFfadeoutitems) document.WFfadeoutitems = new Array();
		document.WFfadeoutitems[document.WFfadeoutitems.length] = itm;
		document.WFelementhover = WFelementhover;
		WFaddhandler(document, 'mouseover', 'WFelementhover');
	}
}

var newid = 1
function WFfadein(itm) {
	var fadetarget = itm.WFshowfade;
	if (itm.WFfadetarget != fadetarget) {
		itm.WFfadetarget = fadetarget;
		itm.WFfadespeed = itm.WFshowspeed;
		if (!itm.WFfading) {
			itm.WFfading = true;
			if (!itm.id) {
				itm.id = 'fadable' + newid;
				newid++;
			}
			WFfadetimer(itm.id);
		}
	}
}

function WFfadeout(itm, now) {
	var fadetarget = itm.WFhidefade;
	if (itm.WFfadetarget != fadetarget) {
		itm.WFfadetarget = fadetarget;
		itm.WFfadespeed = itm.WFhidespeed;
		if (itm.className == "top") {
			itm.className = ""
		} else {
			itm.className=itm.className.replace(" top", "");
		}
		if (itm.className)
		alert('"'+itm.className+'"')
		if (!itm.WFfading) {
			itm.WFfading = true;
			if (!itm.id) {
				itm.id = 'fadable' + newid;
				newid++;
			}
			if (now) {
				WFfadetimer(itm.id);
			} else {
				setTimeout('WFfadetimer("'+itm.id+'")', 600);
			}
		}
		return true;
	}
	return false;
}

function WFfadetimer(id) {
	var itm = getElement(id);
	if (itm) {
		var target = itm.WFfadetarget;
		var step = itm.WFfadespeed;
		var opacity;
		if (itm.filters) {
			opacity = parseInt(itm.filters.item("DXImageTransform.Microsoft.Alpha").Opacity);
		} else {
			opacity = parseInt(itm.style.MozOpacity * 100);
		}
		if (Math.abs(target - opacity) < step) {
			opacity = target;
		} else {
			opacity += step * ((target > opacity) ? 1 : -1);
		}
		setOpacity(id, opacity);
		if (opacity == target) {
			itm.WFfading = false;
		} else {
			setTimeout('WFfadetimer("'+id+'")', 20)
		}
	}
}

function WFelementhover(e) {
	e = e || window.event;
	var done_something = false;
	if (this.WFfadeoutitems) {
		for (var i = 0; i < this.WFfadeoutitems.length; i++) {
			itm = this.WFfadeoutitems[i];
			done_something = WFfadeout(itm);
		}
	}
	if (this.WFfadeinitems) {
		for (var i = 0; i < this.WFfadeinitems.length; i++) {
			itm = this.WFfadeinitems[i];
			id = itm.id;
			WFfadein(itm);
			if (itm.className.indexOf(" top")==-1 && itm.className!="top") {
				itm.className+=" top";
			}
			done_something = true;
		}
		for (var i = 0; i < dropdowns.length; i++) {
			if (this != dropdowns[i][0]) {
				WFfadeout(dropdowns[i][1], 1);
			}
		}
	}
	if (done_something) {
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
	}
}

var elements_handled = new Object();
function WFaddhandler(target,eventName,handlerName) {
	if (!target.id) {
		target.id = 'fadable' + newid;
		newid++;
	}
	if (!elements_handled[target.id]) {
		elements_handled[target.id] = new Object;
	}
	if (!elements_handled[target.id][eventName]) {
		elements_handled[target.id][eventName] = true;
		if ( target.addEventListener ) { 
			target.addEventListener(eventName, function(e){target[handlerName](e);}, false);
		} else if ( target.attachEvent ) { 
			target.attachEvent("on" + eventName, function(e){target[handlerName](e);});
		} else { 
			var originalHandler = target["on" + eventName]; 
			if ( originalHandler ) { 
				target["on" + eventName] = function(e){originalHandler(e);target[handlerName](e);}; 
			} else { 
				target["on" + eventName] = target[handlerName]; 
			} 
		} 
	}
}

before_window_onload = window.onload;
window.onload = function(e) {
	if (before_window_onload) before_window_onload();
	setupHovers();
}