window.onload = mladdevents;

			function mladdevents(){

				if(window.mlrunShim == true){

					var Iframe = document.createElement("iframe");

					Iframe.setAttribute("src","about:blank");

					Iframe.setAttribute("scrolling","no");

					Iframe.setAttribute("frameBorder","0");

					Iframe.style.zIndex = "2";

					Iframe.style.filter = 'alpha(opacity=0)';

				}

				var effects_a = new Array();

				var divs = document.getElementsByTagName('div');

				for(var j=0;j<divs.length;j++){

					if(divs[j].className.indexOf('mlmenu') != -1){

						var lis = divs[j].getElementsByTagName('li');

						for(var i =0;i<lis.length;i++){

							lis[i].onmouseover = mlover;

							lis[i].onmouseout = mloutSetTimeout;

							if(window.mlrunShim == true){

								lis[i].appendChild(Iframe.cloneNode(false));

							}

							if(lis[i].getElementsByTagName('ul').length > 0){

								lis[i].className += ' haschild';

								if(divs[j].className.indexOf('arrow') != -1){

									if(divs[j].className.indexOf('vertical') != -1 || lis[i].parentNode.parentNode.nodeName != 'DIV'){

										lis[i].getElementsByTagName('a')[0].innerHTML += '<span class="vtem_menu_vert">&rarr;</span>';

									}

									else{

										lis[i].getElementsByTagName('a')[0].innerHTML += '<span class="vtem_menu_horiz">&darr;</span>';

									}

								}

								else if(divs[j].className.indexOf('plus') != -1){

									lis[i].getElementsByTagName('a')[0].innerHTML += '<span class="vtem_menu_plus">+</span>';

									lis[i].getElementsByTagName('a')[0].className += 'ahover';

								}

							}

							else{

								if(divs[j].className.indexOf('arrow') != -1){

									//This accounts for a wierd IE-specific bug in horizontal menus. CSS will set visibility: hidden;. This keeps the menu level(in IE)

									lis[i].getElementsByTagName('a')[0].innerHTML += '<span class="noshow">&darr;</span>';

								}

							}

							var uls = lis[i].getElementsByTagName('ul');

							for(var k=0;k<uls.length;k++){

								var found = 'no';

								for(var z=0;z<effects_a.length;z++){

									if(effects_a[z] == uls[k]){

										found = 'yes';

									}

								}

								if(found == 'no'){

									effects_a[effects_a.length] = uls[k];

									uls[k].style.zIndex = '100';

									mlEffectLoad(uls[k]);

								}

							}

						}

					}

				}

			}

			function mloutSetTimeout(e){

				if(!e){

					var the_e = window.event;

				}

				else{

					var the_e = e;

				}

				var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.toElement;

				if(reltg){

					var under = ancestor(reltg,this);

					if(under === false && reltg != this){

						window.mlLast = this;

						var parent = this.parentNode;

						while(parent.parentNode && parent.className.indexOf('mlmenu') == -1){

							parent = parent.parentNode;

						}

						if(parent.className.indexOf('delay') != -1){

							window.mlTimeout = setTimeout(function(){mlout()},100);

						}

						else{

							mlout();

						}

					}

				}

			}

			function mlout(){

			if(window.mlLast==null)return false;

				var uls = window.mlLast.getElementsByTagName('ul');

				var sib;

				for(var i=0;i<uls.length;i++){

					mlEffectOut(uls[i]);

					//window.mlLast.className = 'parent haschild hide';

					window.mlLast.className = window.mlLast.className.replace(/\bvtem_hover\b/,'');

					if(window.mlrunShim == true){

						sib = uls[i];							

						while(sib.nextSibling && sib.nodeName != 'IFRAME'){

								sib = sib.nextSibling

						}

						sib.style.display = 'none';

					}

				}

				window.lastover = null;

			}

			function mlover(e){

				if(!e){

					var the_e = window.event;

				}

				else{

					var the_e = e;

				}

				the_e.cancelBubble = true;

				if(the_e.stopPropagation){

					the_e.stopPropagation();

				}

				clearTimeout(window.mlTimeout);

				if(window.mlLast && window.mlLast != this && ancestor(this,window.mlLast) == false){

					mlout();

				}

				else{

					window.mlLast = null;

				}

				var reltg = (the_e.relatedTarget) ? the_e.relatedTarget : the_e.fromElement;

				var ob = this.getElementsByTagName('ul');

				var under = ancestor(reltg,this);

				if(ob[0] && under == false){

					if(window.lastover != ob[0]){

						if(window.mlrunShim == true){

							var sib = ob[0];

							while(sib.nextSibling && sib.nodeName != 'IFRAME'){

								sib = sib.nextSibling

							}

							ob[0].style.display = 'block';

							sib.style.top = ob[0].offsetTop+'px';

							sib.style.left = ob[0].offsetLeft-2+'px';

							sib.style.width = ob[0].offsetWidth+'px';

							sib.style.height = ob[0].offsetHeight-2+'px';

							sib.style.border = '1px solid red';

							sib.style.display = 'block';

						}

						//this.className = 'haschild vtem_hover';

						this.className += ' vtem_hover';

						mlEffectOver(ob[0],this);

						window.lastover = ob[0];

					}

				}

			}

			function mlSetOpacity(ob,level){

				if(ob){

					//level is between 0 and 10

					//need to convert to decimal for standard

					var standard = level/10;

					//need to convert to 0-100 scale for IE filter

					var ie = level*10;

					ob.style.opacity = standard;

					ob.style.filter = "alpha(opacity="+ie+")"

				}

			}

			function mlIncreaseOpacity(ob){

					var current = ob.style.opacity;

					if(lastob == ob && lastop == current){

						//mlout has not interfered

						current = current *10;

						var upone = current +1;

						mlSetOpacity(ob,upone);

						lastob = ob;

						lastop = upone/10;

					}

			}

			function mlIncreaseHeight(ob){

				var current = parseInt(ob.style.height);

				var newh = current + 1;

				ob.style.height = newh+'px';

			}

			function mlIncreaseWidth(ob){

				var current = parseInt(ob.style.width);

				var newh = current + 1;

				ob.style.width = newh+'px';

			}

			function mlBlink(ob){

				var newb = '1px solid red';

				var old = '';

				if(ob.style.border==old){

					ob.style.border=newb;

				}

				else{

					ob.style.border=old;

					ob.style.borderTop = '1px solid';

				}

			}

			function mlShake(ob){

				var newp = '5px';

				var old = '';

				if(ob.style.paddingLeft==old){

					ob.style.paddingLeft=newp;

				}

				else{

					ob.style.paddingLeft=old;

				}

			}

			function mlEffectOver(ob,parent){

				switch(ob.className){

					case 'fade':

						ob.style.display = 'block';

						if(ob.style.opacity == 0){

							lastob = ob

							lastop = 0;

							for(var i = 1;i<=10;i++){

								setTimeout(function(){mlIncreaseOpacity(ob)},i*50);

							}

							setTimeout(function(){ob.style.filter = ''},500);

						}

						break;

					case 'blink':

						ob.style.display = 'block';

						for(var i=0;i<10;i++){

							setTimeout(function(){mlBlink(ob)},i*50);

						}

						break;

					case 'shake':

						ob.style.display = 'block';

						for(var i=0;i<10;i++){

							setTimeout(function(){mlShake(ob)},i*50);

						}

						break;

					case 'blindv':

						ob.style.display = 'block';

						if(ob.offsetHeight){

							var height = ob.offsetHeight-16;

							ob.style.height = '0px';

							ob.style.overflow = 'hidden';

							for(var i=0;i<height;i++){

								setTimeout(function(){mlIncreaseHeight(ob)},i*1.5);

							}

							setTimeout(function(){ob.style.overflow='visible';},height*1.5)

						}

						break;

					case 'blindh':

						ob.style.display = 'block';

						if(ob.offsetWidth){

							var width = ob.offsetWidth-16;

							ob.style.width = '0px';

							ob.style.overflow = 'hidden';

							for(var i=0;i<width;i++){

								setTimeout(function(){mlIncreaseWidth(ob)},i*3);

							}

							setTimeout(function(){ob.style.overflow='visible';},width*3)

						}

						break;

					default:

						ob.style.display = 'block';

						break;

				}

			}

			function mlEffectOut(ob){

				switch(ob.className){

					case 'fade':

						mlSetOpacity(ob,0);

						ob.style.display = 'none';

						break;

					case 'blink':

						ob.style.border = '';

						ob.style.display = 'none';

						break;

					case 'shake':

						ob.style.paddingLeft = '';

						ob.style.display = 'none';

						break;

					default:

						ob.style.display = 'none';

						break;

				}

			}

			function mlEffectLoad(ob){

				var parent = ob.parentNode;

				while(parent.parentNode && parent.className.indexOf('mlmenu') == -1){

					parent = parent.parentNode;

				}

				if(parent.className.indexOf('fade') != -1){

						ob.style.display = 'none';

						ob.className = 'fade';

						mlSetOpacity(ob,0);

				}

				else if(parent.className.indexOf('blink') != -1){

					ob.className = 'blink';

					ob.style.display = 'none';

				}

				else if(parent.className.indexOf('shake') != -1){

					ob.className = 'shake';

					ob.style.display = 'none';

				}

				else if(parent.className.indexOf('blindv') != -1){

					ob.className = 'blindv';

					ob.style.display = 'none';

				}

				else if(parent.className.indexOf('blindh') != -1){

					ob.className = 'blindh';

					ob.style.display = 'none';

				}

				else{

					ob.className = 'none';

					ob.style.display = 'none';

				}

			}

			function ancestor(child, parent){

				if(child==null)return false;//Saves checking elsewhere

				//This is a fix for a Firefox bug *gasp*

				//Aparantly causes a bug in Opera!

				//I see no choice but a browser detect. *sigh* I didn't want to have to do this.

				if(navigator.userAgent.indexOf('Gecko') != -1 && navigator.userAgent.indexOf('Opera') == -1){

					//This should only be run by Gecko based browsers. this code should be fine in everything but Opera so forge away browsers.

					var allc = parent.getElementsByTagName('*');

					for(var i= 0;i<allc.length;i++){

						if(allc[i] == child){

							return true;

						}

					}

				}

				else{

					//http://www.dynamicdrive.com/forums/showthread.php?t=12341 Thanks Twey!

					for(; child.parentNode; child = child.parentNode){

						if(child.parentNode === parent) return true;

					}

				}

				return false;

			}
