var timeBeforeAutoHide = 700;	// Microseconds to wait before auto hiding menu(1000 = 1 second)
var slideSpeed_out = 10;	// Steps to move sub menu at a time ( higher = faster)
var slideSpeed_in = 10;
	

var slideTimeout_out = 25;	// Microseconds between slide steps ( lower = faster)
var slideTimeout_in = 10;	// Microseconds between slide steps ( lower = faster)

var showSubOnMouseOver = true;	// false = show sub menu on click, true = show sub menu on mouse over
var fixedSubMenuWidth = false;	// Width of sub menu items - A number(width in pixels) or false when width should be dynamic

var xOffsetSubMenu = 0; 	// Offset x-position of sub menu items - use negative value if you want the sub menu to overlap main menu

var slideDirection = 'right';	// Slide to left or right ?

/* Don't change anything below here */

var activeSubMenuId = false;
var activeMainMenuItem = false;
var currentZIndex = 1000;		
var autoHideTimer = 0;
var submenuObjArray = new Array();
var okToSlideInSub = new Array();
var subPositioned = new Array();


function stopAutoHide()
{
	autoHideTimer = -1;
}

function initAutoHide()
{
	autoHideTimer = 0;
	if(autoHideTimer>=0)autoHide();
}

function autoHide()
{
	
	if(autoHideTimer>timeBeforeAutoHide)
	{
		
		if(activeMainMenuItem){
			activeMainMenuItem.className='';
			activeMainMenuItem = false;
		}
		
		if(activeSubMenuId){
			var obj = document.getElementById('subMenuDiv' + activeSubMenuId);
			showSub();
		}
	}else{
		if(autoHideTimer>=0){
			autoHideTimer+=50;
			setTimeout('autoHide()',50);
		}
	}
}	

function getTopPos(inputObj)
{		
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetTop;
  return returnValue;
}

function getLeftPos(inputObj)
{
  var returnValue = inputObj.offsetLeft;
  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
  return returnValue;
}

function showSub()
{
	var subObj = false;
	if(this && this.tagName){
		var numericId = this.parentNode.id.replace(/[^0-9]/g,'');
		okToSlideInSub[numericId] = false;
		var subObj = document.getElementById('subMenuDiv' + numericId);
		if(activeMainMenuItem)activeMainMenuItem.className='';
		if(subObj){
			if(!subPositioned[numericId]){
				if(slideDirection=='right'){
					subObj.style.left = getLeftPos(submenuObjArray[numericId]['parentDiv']) + submenuObjArray[numericId]['parentDiv'].offsetWidth + xOffsetSubMenu + 'px';
				}else{
					subObj.style.left = getLeftPos(submenuObjArray[numericId]['parentDiv']) + xOffsetSubMenu + 'px';
					
				}
				submenuObjArray[numericId]['left'] = subObj.style.left.replace(/[^0-9]/g,'');
				subObj.style.top = getTopPos(submenuObjArray[numericId]['parentDiv']) + 'px';
				subPositioned[numericId] = true;
			}				
			subObj.style.visibility = 'visible';
			subObj.style.zIndex = currentZIndex;
			currentZIndex++;	
			this.className='activeMainMenuItem';
			activeMainMenuItem = this;
		}
	}else{
		var numericId = activeSubMenuId;
	}
	if(activeSubMenuId && (numericId!=activeSubMenuId || !subObj))slideMenu(activeSubMenuId,(slideSpeed_in*-1));
	if(numericId!=activeSubMenuId && this && subObj){
		subObj.style.width = '0px';	
		slideMenu(numericId,slideSpeed_out);
		activeSubMenuId = numericId;
	}else{
		if(numericId!=activeSubMenuId)activeSubMenuId = false;
	}
	if(showSubOnMouseOver)stopAutoHide();
}

function slideMenu(menuIndex,speed){
	var obj = submenuObjArray[menuIndex]['divObj'];
	var obj2 = submenuObjArray[menuIndex]['ulObj'];
	var width = obj.offsetWidth + speed;
	if(speed<0){
		if(width<0)width = 0;
		obj.style.width = width + 'px';
		if(slideDirection=='left'){
			obj.style.left = submenuObjArray[menuIndex]['left'] - width + 'px';
			obj2.style.left = '0px';
		}else{
			obj2.style.left = width - submenuObjArray[menuIndex]['width'] + 'px' 
		}
		if(width>0 && okToSlideInSub[menuIndex])setTimeout('slideMenu(' + menuIndex + ',' + speed + ')',slideTimeout_in); else{
			obj.style.visibility = 'hidden';
			obj.style.width = '0px';
			if(activeSubMenuId==menuIndex)activeSubMenuId=false;
		}
		
	}else{
		if(width>submenuObjArray[menuIndex]['width'])width = submenuObjArray[menuIndex]['width'];
		if(slideDirection=='left'){
			obj.style.left = submenuObjArray[menuIndex]['left'] - width + 'px';
			obj2.style.left = '0px';
		}else{
			obj2.style.left = width - submenuObjArray[menuIndex]['width'] + 'px' 
		}		
		
		obj.style.width = width + 'px';
		if(width<submenuObjArray[menuIndex]['width']){
			setTimeout('slideMenu(' + menuIndex + ',' + speed + ')',slideTimeout_out);
		}else{
			okToSlideInSub[menuIndex] = true;
		}
	}
}
function resetPosition()
{
	subPositioned.length = 0;
}
		
function initLeftMenu()
{
	var isMSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;
	var browserVersion = parseInt(navigator.userAgent.replace(/.*?MSIE ([0-9]+?)[^0-9].*/g,'$1'));
	if(!browserVersion)browserVersion=1;
	
	var menuObj = document.getElementById('menu');	
	var mainMenuItemArray = new Array();
	
	var tableItems = menuObj.getElementsByTagName('TD');
	for(var no=0;no<tableItems.length;no++) {
		var mainMenuItem = tableItems[no].getElementsByTagName('LI')[0];
		while(mainMenuItem){
			if(mainMenuItem.tagName && mainMenuItem.tagName.toLowerCase()=='li'){
				mainMenuItemArray[mainMenuItemArray.length] = mainMenuItem;
				var aTag = mainMenuItem.getElementsByTagName('A')[0];
				if(showSubOnMouseOver)
					aTag.onmouseover = showSub;	
				else
					aTag.onclick = showSub;	
			}
			mainMenuItem = mainMenuItem.nextSibling;
		}		
	}
	
	var lis = menuObj.getElementsByTagName('A');
	for(var no=0;no<lis.length;no++){
		if(!showSubOnMouseOver)lis[no].onmouseover = stopAutoHide;
		lis[no].onmouseout = initAutoHide;
		lis[no].onmousemove = stopAutoHide;
	}
			
	for(var no=0;no<mainMenuItemArray.length;no++){
		var sub = mainMenuItemArray[no].getElementsByTagName('UL')[0];
		if(sub){
			mainMenuItemArray[no].id = 'mainMenuItem' + (no+1);
			var div = document.createElement('DIV');
			div.className='dhtmlgoodies_subMenu';
			document.body.appendChild(div);
			div.appendChild(sub);
			if(slideDirection=='right'){
				div.style.left = getLeftPos(mainMenuItemArray[no]) + mainMenuItemArray[no].offsetWidth + xOffsetSubMenu + 'px';
			}else{
				div.style.left = getLeftPos(mainMenuItemArray[no]) + xOffsetSubMenu + 'px';
			}
			div.style.top = getTopPos(mainMenuItemArray[no]) + 'px';
			div.id = 'subMenuDiv' + (no+1);
			sub.id = 'submenuUl' + (no+1);
			sub.style.position = 'relative';	

			if(navigator.userAgent.indexOf('Opera')>=0){
				submenuObjArray[no+1] = new Array();
				submenuObjArray[no+1]['parentDiv'] = mainMenuItemArray[no];
				submenuObjArray[no+1]['divObj'] = div;
				submenuObjArray[no+1]['ulObj'] = sub;
				submenuObjArray[no+1]['width'] = sub.offsetWidth;
				submenuObjArray[no+1]['left'] = div.style.left.replace(/[^0-9]/g,'');
			}
			sub.style.left = 1 - sub.offsetWidth + 'px';	
			
			
			
			if(browserVersion<7 && isMSIE)div.style.width = '1px';	
				
			if(navigator.userAgent.indexOf('Opera')<0){
				submenuObjArray[no+1] = new Array();
				submenuObjArray[no+1]['parentDiv'] = mainMenuItemArray[no];
				submenuObjArray[no+1]['divObj'] = div;
				submenuObjArray[no+1]['ulObj'] = sub;
				submenuObjArray[no+1]['width'] = sub.offsetWidth;
				
				
				
				submenuObjArray[no+1]['left'] = div.style.left.replace(/[^0-9]/g,'');
				if(fixedSubMenuWidth)submenuObjArray[no+1]['width'] = fixedSubMenuWidth;
			}	

			if(!document.all)div.style.width = '1px';			
				
		}			
	}
		

	
	
	menuObj.style.visibility = 'visible';
	
	window.onresize = resetPosition;
}


window.onload = initLeftMenu;

/**
 * reflection.js v2.0
 * http://cow.neondragon.net/stuff/reflection/
 * Freely distributable under MIT-style license.
 */
 
/* From prototype.js */
if (!document.myGetElementsByClassName) {
	document.myGetElementsByClassName = function(className) {
		var children = document.getElementsByTagName('*') || document.all;
		var elements = new Array();
	  
		for (var i = 0; i < children.length; i++) {
			var child = children[i];
			var classNames = child.className.split(' ');
			for (var j = 0; j < classNames.length; j++) {
				if (classNames[j] == className) {
					elements.push(child);
					break;
				}
			}
		}
		return elements;
	}
}

var Reflection = {
	defaultHeight : 0.5,
	defaultOpacity: 0.5,
	
	add: function(image, options) {
		Reflection.remove(image);
		
		doptions = { "height" : Reflection.defaultHeight, "opacity" : Reflection.defaultOpacity }
		if (options) {
			for (var i in doptions) {
				if (!options[i]) {
					options[i] = doptions[i];
				}
			}
		} else {
			options = doptions;
		}
	
		try {
			var d = document.createElement('div');
			var p = image;
			
			var classes = p.className.split(' ');
			var newClasses = '';
			for (j=0;j<classes.length;j++) {
				if (classes[j] != "reflect") {
					if (newClasses) {
						newClasses += ' '
					}
					
					newClasses += classes[j];
				}
			}

			var reflectionHeight = Math.floor(p.height*options['height']);
			var divHeight = Math.floor(p.height*(1+options['height']));
			
			var reflectionWidth = p.width;
			
			if (document.all && !window.opera) {
				/* Fix hyperlinks */
                if(p.parentElement.tagName == 'A') {
	                var d = document.createElement('a');
	                d.href = p.parentElement.href;
                }  
                    
				/* Copy original image's classes & styles to div */
				d.className = newClasses;
				p.className = 'reflected';
				
				d.style.cssText = p.style.cssText;
				p.style.cssText = 'vertical-align: bottom';
			
				var reflection = document.createElement('img');
				reflection.src = p.src;
				reflection.style.width = reflectionWidth+'px';
				reflection.style.display = 'block';
				reflection.style.height = p.height+"px";
				
				reflection.style.marginBottom = "-"+(p.height-reflectionHeight)+'px';
				reflection.style.filter = 'flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(options['opacity']*100)+', style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy='+(options['height']*100)+')';
				
				d.style.width = reflectionWidth+'px';
				d.style.height = divHeight+'px';
				p.parentNode.replaceChild(d, p);
				
				d.appendChild(p);
				d.appendChild(reflection);
			} else {
				var canvas = document.createElement('canvas');
				if (canvas.getContext) {
					/* Copy original image's classes & styles to div */
					d.className = newClasses;
					p.className = 'reflected';
					
					d.style.cssText = p.style.cssText;
					p.style.cssText = 'vertical-align: bottom';
			
					var context = canvas.getContext("2d");
				
					canvas.style.height = reflectionHeight+'px';
					canvas.style.width = reflectionWidth+'px';
					canvas.height = reflectionHeight;
					canvas.width = reflectionWidth;
					
					d.style.width = reflectionWidth+'px';
					d.style.height = divHeight+'px';
					p.parentNode.replaceChild(d, p);
					
					d.appendChild(p);
					d.appendChild(canvas);
					
					context.save();
					
					context.translate(0,image.height-1);
					context.scale(1,-1);
					
					context.drawImage(image, 0, 0, reflectionWidth, image.height);
	
					context.restore();
					
					context.globalCompositeOperation = "destination-out";
					var gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);
					
					gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
					gradient.addColorStop(0, "rgba(255, 255, 255, "+(1-options['opacity'])+")");
		
					context.fillStyle = gradient;
					context.rect(0, 0, reflectionWidth, reflectionHeight*2);
					context.fill();
				}
			}
		} catch (e) {
	    }
	},
	
	remove : function(image) {
		if (image.className == "reflected") {
			image.className = image.parentNode.className;
			image.parentNode.parentNode.replaceChild(image, image.parentNode);
		}
	}
}

function addReflections() {
	var rimages = document.myGetElementsByClassName('reflect');
	for (i=0;i<rimages.length;i++) {
		var rheight = null;
		var ropacity = null;
		
		var classes = rimages[i].className.split(' ');
		for (j=0;j<classes.length;j++) {
			if (classes[j].indexOf("rheight") == 0) {
				var rheight = classes[j].substring(7)/100;
			} else if (classes[j].indexOf("ropacity") == 0) {
				var ropacity = classes[j].substring(8)/100;
			}
		}
		
		Reflection.add(rimages[i], { height: rheight, opacity : ropacity});
	}
}

var previousOnload = window.onload;
window.onload = function () { if(previousOnload) previousOnload(); addReflections(); }
