var ddMenuOpenContainer = null;
var ddMenuOpenFolders = null;
var ddMenuActiveItems = null;
var ddMenuActiveItem = null;
var ddMenuHideTimer = null;
var ddMenuIndex = 0;

var ddMenuOffsetTop = 0;		// pixels
var ddMenuOffsetLeft = 0;		// pixels
var ddMenuTimeout = 1000;		// milliseconds

//var trace_ct = 0;
//function TraceActions(str) {
//	var trace = document.getElementById("trace");
//	if (trace) {
//		trace_ct++;
//		trace.innerHTML = trace_ct + ") " + str + "<br />" + trace.innerHTML;
//	}
//	else {
//		alert("trace target missing");
//	}
//}

if (!Array.prototype.push) {
	// Array.push()
	// add an element to the end of an array
	// return the new length
	Array.prototype.push = function() {
		for(var i = 0; i < arguments.length; i++ ) {
			this[this.length + i] = arguments[i];
		}
		return this.length;
	};
}

if (!Array.prototype.indexOf) {
	// browser does not support the Array.indexOf() method

	// Array.indexOf(searchElement, fromIndex)
	//	searchElement: element to locate in the array.
	//	fromIndex: index at which to begin the search
	// return index of the first element that matches value
	Array.prototype.indexOf = function(searchElement, fromIndex) {
		// validate fromIndex
		if (fromIndex) {
			if (fromIndex >= this.length) {
				// index is greater than or equal to the length of the array
				// array will not be searched
				return -1;
			}
			else if (this.length + fromIndex < 0) {
				// negative index, calculated index is less than 0
				// the whole array will be searched
				fromIndex = 0;
			}
			else if (fromIndex < 0) {
				// negative index, taken as the offset from the end of the array
				fromIndex = this.length - fromIndex;
			}
		}
		else {
			// default, the whole array will be searched
			fromIndex = 0;
		}

		// search the array
		for (var i = fromIndex; i < this.length; i++) {
			// compare using strict equality
			if (this[i] === searchElement) {
				// match, return the index
				return i;
			}
		}

		// no match
		return -1;
	};
}

function ddMenuStartTimeout(src) {
	ddMenuHideTimer = setTimeout("ddMenuCloseMenus()", ddMenuTimeout);
}

function ddMenuResetTimeout(src) {
	if (ddMenuHideTimer) clearTimeout(ddMenuHideTimer);
	ddMenuHideTimer = null;
}

function ddMenuHidePicklists() {
	if (ddMenuOpenFolders == null) {
		var picklist = document.getElementsByTagName("SELECT");
		for (var i = 0; i < picklist.length; i++) {
			picklist[i].style.visibility = "hidden";
		}
	}
}

function ddMenuShowPicklists() {
	var picklist = document.getElementsByTagName("SELECT");
	for (var i = 0; i < picklist.length; i++) {
		picklist[i].style.visibility = "visible";
	}
}

function ddMenuCloseMenus() {
	ddMenuResetTimeout("ddMenuCloseMenus()");

	if (/MSIE (\d+(\.\d+)?)/.test(navigator.userAgent)) {
		// is MSIE
		var version = Number(RegExp.$1);
		if (version < 7) {
			ddMenuShowPicklists();
		}
	}

	if (ddMenuOpenContainer) {
		var containerObj = document.getElementById(ddMenuOpenContainer);
		if (containerObj) containerObj.style.visibility = "hidden";	// inherit
		ddMenuOpenContainer = null;
	}

	if (ddMenuOpenFolders) {
		for (var i in ddMenuOpenFolders) {
			var folderObj = document.getElementById(ddMenuOpenFolders[i]);
			if (folderObj) folderObj.style.visibility = "hidden";
		}
		ddMenuOpenFolders = null;
	}

	if (ddMenuActiveItem) {
		ddMenuActiveItem.className = "inactive";
		ddMenuActiveItem = null;
	}

	if (ddMenuActiveItems) {
		for (var i in ddMenuActiveItems) {
			var itemObj = document.getElementById(ddMenuActiveItems[i]);
			if (itemObj) itemObj.className = "inactive";
		}
		ddMenuActiveItems = null;
	}
}

//function ddMenuUpdateCrumbtrail(itemId) {
//	if (ddMenuActiveItems) {
//		var inactive = false;
//		var ct = 0;
//		for (var i in ddMenuActiveItems) {
//			if (String(typeof ddMenuActiveItems[i]).toLowerCase() == "string") {
//				if (inactive) {
//					var itemObj = document.getElementById(ddMenuActiveItems[i]);
//					if (itemObj) itemObj.className = "inactive";
//				}
//				else {
//					if (ddMenuActiveItems[i] == itemId) inactive = true;
//					var itemObj = document.getElementById(ddMenuActiveItems[i]);
//					if (itemObj) itemObj.className = "active";
//					ct++;
//				}
//			}
//		}
//		ddMenuActiveItems.length = ct;
//	}
//}

function ddMenuHideSubmenus(folderId) {
	if (folderId) { // ignore "undefined"
		if (ddMenuOpenFolders) {
			var closed = false;
			var ct = 0;
			for (var i = 0; i < ddMenuOpenFolders.length; i++) {
				if (closed) {
					var folderObj = document.getElementById(ddMenuOpenFolders[i]);
					if (folderObj) folderObj.style.visibility = "hidden";
				}
				else {
					if (ddMenuOpenFolders[i] == folderId) closed = true;
					ct++;
				}
			}
			ddMenuOpenFolders.length = ct;
		}
	}
}


/*************************************** FOLDER ***************************************/

function ddMenuFolderOver(eventObj, folderId) {
	if (window.event) window.event.cancelBubble = true;
	else eventObj.stopPropagation();

	ddMenuResetTimeout("ddMenuFolderOver()");
	ddMenuHideSubmenus(folderId);
}

function ddMenuFolderOut(eventObj, folderId) {
	if (window.event) window.event.cancelBubble = true;
	else eventObj.stopPropagation();

	ddMenuStartTimeout("ddMenuFolderOut()");
}


/*************************************** MENU ITEM ***************************************/

function ddMenuItemOver(itemId, containId, folderId, menuDirection) {

	/*if (Calendar.activeInstance) Calendar.unload();*/

	ddMenuCloseMenus();

	if (itemId) {
		var itemObj = document.getElementById(itemId);
		if (itemObj) {
			if (!ddMenuActiveItem) ddMenuActiveItem = new Object();
			ddMenuActiveItem = itemObj;
			itemObj.className = "active";
		}
	}

	if (containId) {
		var containObj = document.getElementById(containId);
		if (containObj)	{
			containObj.style.visibility = "visible";	// inherit
			ddMenuOpenContainer = String(containId);
			if (menuDirection != "down") {
				if (itemId && itemObj) {
					containObj.style.left = itemObj.offsetWidth + ddMenuOffsetLeft;
					containObj.style.top = itemObj.offsetTop + ddMenuOffsetTop;
				}
			}
		}
	}

	if (folderId) {
		var folderObj = document.getElementById(folderId);
		if (folderObj) {
			folderObj.style.zIndex = Number(folderObj.parentNode.style.zIndex) + 1;
			folderObj.style.visibility = "visible";	// inherit

			if (/MSIE (\d+(\.\d+)?)/.test(navigator.userAgent)) {
				// is MSIE
				var version = Number(RegExp.$1);
				if (version < 7) {
					ddMenuHidePicklists();
				}
			}

			if (!ddMenuOpenFolders) ddMenuOpenFolders = new Array();
			if (ddMenuOpenFolders.indexOf(folderId) == -1) {
				// add the folder id to the array of open folders
				ddMenuOpenFolders.push(folderId);
			}
		}
	}
}

function ddMenuItemOut(itemId) {
	ddMenuStartTimeout("ddMenuItemOut()");
}

function ddMenuItemClick(itemId) {}


/*************************************** FOLDER ITEM ***************************************/

function ddMenuFolderItemOver(eventObj, itemId, parentId, folderId) {

	ddMenuResetTimeout("ddMenuFolderItemOver()");
	ddMenuHideSubmenus(folderId);

	if (itemId) {
		var itemObj = document.getElementById(itemId);
		if (itemObj) {
			itemObj.className = "active";
		}
	}

	if (folderId) {
		if (window.event) window.event.cancelBubble = true;
		else eventObj.stopPropagation();

		var folderObj = document.getElementById(folderId);
		if (folderObj) {
			if (itemId && itemObj) {
				folderObj.style.left = itemObj.offsetWidth + ddMenuOffsetLeft;
				folderObj.style.top = itemObj.offsetTop + ddMenuOffsetTop;
			}
			folderObj.style.zIndex = ++ddMenuIndex;
			folderObj.style.visibility = "visible";	// inherit

			if (!ddMenuOpenFolders) ddMenuOpenFolders = new Array();
			if (ddMenuOpenFolders.indexOf(folderId) == -1) {
				// add the folder id to the array of open folders
				ddMenuOpenFolders.push(folderId);
			}
		}
	}
}

function ddMenuFolderItemOut(eventObj, itemId) {

	if (itemId) {
		var itemObj = document.getElementById(itemId);
		if (itemObj) {
			itemObj.className = "inactive";
		}
	}

	if (window.event) window.event.cancelBubble = true;
	else eventObj.stopPropagation();

	ddMenuStartTimeout("ddMenuFolderItemOut()");
}

function ddMenuFolderItemClick(itemId) {}