var openMenuLevels = new Array();
var breadCrumbs    = new Array();
var maximumMenus   = 4;

var menuHoverClass    = "menu-item-hover";
var menuSelectedClass = "menu-item-selected";

function addStartEvent(element) {
	addStartEventToItem($('#animated-item-link-start-1'));
	addStartEventToItem($('#animated-item-link-breadcrumb-2-1'));
	addStartEventToItem($('#animated-item-link-breadcrumb-3-1'));
	addStartEventToItem($('#animated-item-link-breadcrumb-4-1'));
	
	hideBreadCrumbs();
	setupMenuValidation();
}

function addStartEventToItem(item) {
	item.bind("click", menuStart);
	item.bind("mouseover", itemMouseOver);
	item.bind("mouseout", itemMouseOut);
}

function hideBreadCrumbs() {
	$('#animated-item-link-breadcrumb-2-1').hide();
	$('#animated-item-link-breadcrumb-3-1').hide();
	$('#animated-item-link-breadcrumb-4-1').hide();
}

function hideMenus() {
    $('#menu-dropdown-1').hide();
	$('#menu-dropdown-2').hide();
	$('#menu-dropdown-3').hide();
}

function addMenuEvents(element) {
	if (element) {
		var children = element.children();
	
		children.each(function() {
			var item = $('#' + this.id);
			
			if (this.id.indexOf('animated-item-link') > -1) {
				item.bind("mouseover", menuMouseOver);
				item.bind("mouseout", menuMouseOut);
				item.bind("click", clickMenuItem);		
			}
			
			if (this.id.indexOf('animated-menu') > -1) {
			    var i = getMenuID(this.id);
				var n = getMenuID(this.parentNode.parentNode.id);
				
				var dropdown  = $('#menu-dropdown-' + n);
				var container = $('#animated-menu-container-' + i);
				
				// Following all animations or IE 6 will not draw properly.
				function completeHide() {
					container.hide();
					dropdown.hide();
				}
			
			    // Internet explorer won't play well unless you do all of this first.
			    if (navigator.userAgent.indexOf("MSIE") > -1) {
			        $('#' + this.id).show("fast");
			        $('#' + this.id).hide("fast");
			        $('#' + this.id).slideDown("fast");
			    }
			    
				$('#' + this.id).slideUp("fast", completeHide);
			}
			
			addMenuEvents(item);
		});
	}
}

function menuStart() {
	var menuOpened = false;
	
	/* 21-02-2008 Ronald: 
	   Crude hack to intercept events happened when user clicks on
	   breadcrumb#4 and breadcrumb#4 is a Search <job> link
	*/
	if (this.id == 'animated-item-link-breadcrumb-4-1') {
	    var crumb = document.getElementById('menu-breadcrumb-4-text');
	    var iframe = document.getElementById('uxContent');
	    if (crumb.innerHTML.indexOf("Search") == 0 && iframe != null) {
	        var crumbText = crumb.innerHTML;
	        if (crumbText.indexOf("Accounting") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=26&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";	            
	        else if (crumbText.indexOf("Banking") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=29,40&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";	        
	        else if (crumbText.indexOf("Business") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=27,30&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";        	        
	        else if (crumbText.indexOf("Engineering") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=35,44&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";	        
	        else if (crumbText.indexOf("Executive") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=33,36&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Human") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=39,34&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("IT") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=41&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Legal") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=42&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Property") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=32,46&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Sales") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=28,37,47,48&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Supply") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=52&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	        else if (crumbText.indexOf("Technical") > -1)
	            iframe.src = "http://www.adlogic.com.au/smejobsearch/jsponly/SearchResultPage.jsp?newSearch=true&applySearchCriteria=true&industryId=43,45,49,51&regionId=ANY&job_type_id=ANY&time_interval_id=ALL&keyword=&recruiterId=995&storeId=1";
	            
	        return false;
	    } 
	}
	
	for (var i = 0; i < breadCrumbs.length; i++) {
		if (breadCrumbs[i] != null) {
			openMenu(breadCrumbs[i]);
			menuOpened = true;
		}
	}
	
	if (!menuOpened) {
		var menuDetails = new Array();
		menuDetails[0] = 1;
		menuDetails[1] = 0;
		menuDetails[2] = this;
		
		openMenu(menuDetails);
	}

	return false;
}

function displayMenuFollowingInterval(id) {
    var self = document.getElementById(id);
    var item = $('#' + self.id);
    
    var i = getMenuID(self.id);
    
    var parentDropDownLevel = getMenuID(item.parent().parent().parent().attr("id"));	
	if (item.parent().attr("id").indexOf("breadcrumb") > -1) { parentDropDownLevel = 0; }

    if (self.isActive == true) {
	    menuIsOpenThenClose(parentDropDownLevel, i);
	
        var menuDetails = new Array();
        menuDetails[0] = i;
        menuDetails[1] = parentDropDownLevel;
        menuDetails[2] = self;
        menuDetails[3] = getMenuID(self.parentNode.id);

        openMenu(menuDetails);
    }

    clearInterval(self.interval);
}

function menuMouseOver() {
    var item      = $('#' + this.id);
	this.isActive = true;
	
	itemMouseOver(item);
	
	// Add a brief delay so we don't see too many things happening at once.
	this.interval = setTimeout("displayMenuFollowingInterval('" + this.id + "')", 50);
	
	return false;
}

function menuMouseOut() {
    var n = getMenuID(this.parentNode.parentNode.parentNode.id);
    
    for (i = openMenuLevels.length - 1; i > n; i--) {
        menuIsOpenThenClose(i, "");
    }

    this.isActive = false;
	itemMouseOut($('#' + this.id));
}

function menuIsOpenThenClose(n, id) {   
    for (i = n; i < openMenuLevels.length; i++) {
        var container = $('#menu-dropdown-' + (i + 1));
        
        if (openMenuLevels[i]) {
            $('#' + openMenuLevels[i][2].id).children(":first").removeClass(menuSelectedClass);
        }
    
        if (container) {
            var children = container.children();
            
            children.each(function() {
			    var n         = getMenuID(this.id);
			    var details   = new Array();
			    var container = $('#animated-menu-container-' + n);
			    
			    details[0] = n;
			    
			    if (id != n && container.css("display") != "none") { 
			        closeMenu(details);
			    }
		    });
        }
	}

	removeOpenDetails(n);
}

function openMenu(details) {
    if (details != null && details.length > 0) {
		var item = $('#' + details[2].id);
		
		var i = details[0];
		var n = details[1] + 1;
		
		var dropdown  = $('#menu-dropdown-' + n);
		var container = $('#animated-menu-container-' + i);
		var items     = $('#animated-menu-' + i);	
		
		if (container.length > 0 && items.length > 0) {
			item.children(":first").addClass(menuSelectedClass);
		
			dropdown.show();
			container.show();
			
			items.slideDown("fast", completeMenuShow);	
			addOpenDetails(details[1], details);
		}
	}
}

function closeMenu(details) {  
    if (details != null && details.length > 0) {
		var i     = details[0];	
		var items = $('#animated-menu-' + i);	
		
		if (items) {
		    items.slideUp("fast", completeMenuClose);
		}
	}
}

function completeMenuClose() {

}

function completeMenuShow() {

}

function getMenuID(id) {
	return parseInt(id.substr(id.lastIndexOf("-") + 1));
}

function bodyOnClick(e) {
	for (var i = 0; i <= maximumMenus; i++) {
		if (openMenuLevels[i] != null) {
			$('#' + openMenuLevels[i][2].id).children(":first").removeClass(menuSelectedClass);
			closeMenu(openMenuLevels[i]);	
		}
	}
	
	openMenuLevels = new Array();
	hideMenus();
	$('#animated-item-link-start-1').children(":first").removeClass(menuSelectedClass);
}

function clickMenuItem() {
	var item  = $('#' + this.id); 
	var n     = getMenuID(item.parent().parent().parent().attr("id")) - 1;

	breadCrumbs = new Array();
	hideBreadCrumbs();

	for (var i = n; i >= 0; i--) {
		breadCrumbs[i] = openMenuLevels[i];
		
		if (breadCrumbs[i] != null) {
			var link     = $('#' + breadCrumbs[i][2].id); 
			var text     = link.children(":first").text(); 
			
			setBreadCrumbText(i - 1, text);
		}
	}
	
	/* 21-02-2008 Ronald: 
	   Crude hack to set breadcrumb#4 to 'Search <job>' when
	   user clicks on 'What we do/<Industry>'
	*/
	if (getMenuID(item.parent().attr("id")) == "23" && getMenuID(item.attr("id")) > 0) {
	    var industry = item.children(":first").text();
	    if (industry.indexOf(" and ") > -1) {
	        industry = industry.replace(" and ", "/");
	        if (industry.length > 20)
	            industry = industry.substring(0, 22);
	    }
	    var text ="Search " + industry;
	    var id = openMenuLevels[n+1];
	    setBreadCrumbText(n+1, text);
	}
		
	setBreadCrumbText(n, item.children(":first").text());	
	
	$('#animated-item-link-start-1').children(":first").removeClass(menuSelectedClass);
	
	if (!item.attr("href")) { return false; }
}

function setBreadCrumbText(n, text) {
	var crumb     = $('#animated-item-link-breadcrumb-' + (n + 2) + '-1');
	var crumbText = $('#menu-breadcrumb-' + (n + 2) + '-text');
	
	if (crumb != null && crumbText != null) {
		crumbText.html(text);
		crumb.show();
	}
}

function itemMouseOver(item) {
	if (item.target) { item = $('#' + this.id); }
	item.children(":first").addClass(menuHoverClass);
}

function itemMouseOut(item) {
	if (item.target) { item = $('#' + this.id); }
	item.children(":first").removeClass(menuHoverClass);
}

function addOpenDetails(i, details) {
    openMenuLevels[i] = details;
}

function removeOpenDetails(i) {
    openMenuLevels.splice(i, maximumMenus);
}

// JQuery causes the menu to occasionally not hide properly, even with all of the other checks.
// As such, periodically test that the correct menus are displayed.
function stepValidateMenuPosition() {
    for (var i = 0; i <= maximumMenus - 1; i++) {
        var container = $('#menu-dropdown-' + (i + 1));   
    
        if (container) {
            var children    = container.children();
            var currentMenu = openMenuLevels[i];

            if (!currentMenu || currentMenu[1] != i) { 
                children.each(function() {
			        var n         = getMenuID(this.id);
			        var details   = new Array();
			        var container = $('#animated-menu-container-' + n);
    			    
			        details[0] = n;
    			    
			        if (container.css("display") != "none") { 
			            closeMenu(details);
			        }
		        });
            }
        }
        
	}
}

function setupMenuValidation() {
    setInterval(stepValidateMenuPosition, 120);
}

/*
var menuHideStep = 10;
var menuShowStep = 10;

var dropDownMenus = new Array();

var trackOpenMenus = new Array();
var breadCrumbs    = new Array();

var menuHoverClass    = "menu-item-hover";
var menuSelectedClass = "menu-item-selected";

function initMenu() {
    var container = $('uxMenuContent');
    var levels    = container.childElements();
   
    levels.each(function(level) {
        var menus = level.descendants();
        
        menus.each(function(menu) {
            if (menu.id.startsWith('animated-menu-container-')) {
                menu.hide();
            } else if (menu.id.startsWith('animated-menu-')) {
                var parent = $('animated-menu-container-' + getMenuID(menu.id));
                var items  = menu.childElements();
                
                menu.style.top = parent.getHeight() + "px";
                
                items.each(function(item) {
                    item.observe("click", clickMenuItem);
                    item.observe("mouseover", mouseOverMenuItem);
                    item.observe("mouseout", mouseOutMenuItem);
                });
                
                dropDownMenus.push(menu);
            }
        });
        
        level.hide();
    });
    
    setInterval(validateOpenItems, 120);
}

function stepMenuHide(id) {
    var item = $('animated-menu-' + id);
    var top  = parseInt(item.style.top);
    
    var height = item.getHeight();
    var step   = top + (height / menuHideStep);
    
    if (step > height) { step = height; }
    
    item.style.top = step + "px";
    
    if (step == height) { 
        var container = $('animated-menu-container-' + id);
        var level     = item.parentNode.parentNode;
        
        clearInterval(item.interval);
        container.hide();
        level.hide();
        
        item.isClosing = false;
    }
}

function stepMenuShow(id) {
    var item = $('animated-menu-' + id);
    var top  = parseInt(item.style.top);
    
    var height = item.getHeight();
    var step   = top - (height / menuShowStep);
    
    var container = $('animated-menu-container-' + id); 
    var level     = item.parentNode.parentNode;
    
    container.show();
    level.show();
    
    if (step < 0) { step = 0; }
    
    item.style.top = step + "px";
    
    if (step == 0) { 
        clearInterval(item.interval);
        item.isOpening = false;
    }
}

function clickMenuStart() {
    if (!menuIsOpen()) {
        openMenu(1);
        
    } else {
        hideMenu(1);
    }
    
    return false;
}

function mouseOverMenuItem() {
    var menu      = this.parentNode;
    var menuLevel = getMenuID(menu.parentNode.parentNode.id);
    var id        = parseInt(getMenuID(this.id));
    
    var div = this.firstDescendant();
    
    if (div) { div.addClassName(menuHoverClass); }
    
    if (levelIsOpen(menuLevel + 1)) {
        hideMenusLevelPlus(menuLevel + 1);
    }
    
    if (id && id > 0) {
        if (div) { 
            div.addClassName(menuSelectedClass);
            $('animated-menu-' + id).parentItem = div;
        }

        openMenu(id);
    }
}

function mouseOutMenuItem() {
    var menu      = this.parentNode;
    var menuLevel = getMenuID(menu.parentNode.parentNode.id);
    var id        = parseInt(getMenuID(this.id));
    
    var div = this.firstDescendant();
    
    if (div) { div.removeClassName(menuHoverClass); }
}

function openMenu(id) {
    var menu      = $('animated-menu-' + id);
    var menuLevel = getMenuID(menu.parentNode.parentNode.id);

    trackOpenMenu(menuLevel, id);
    clearInterval(menu.interval);
    
    menu.isClosing = false;
    menu.isOpening = true;
    menu.interval  = setInterval("stepMenuShow('" + id + "')", 2);
}

function hideMenu(id) {
    var menu      = $('animated-menu-' + id);
    var menuLevel = getMenuID(menu.parentNode.parentNode.id);

    removeOpenMenu(menuLevel, id);
    clearInterval(menu.interval);
    
    if (menu.parentItem) { menu.parentItem.removeClassName(menuSelectedClass); }

    menu.isClosing = true;
    menu.isOpening = false;
    menu.interval  = setInterval("stepMenuHide('" + id + "')", 2);
}

// Hides all menus a certain level and up.
function hideMenusLevelPlus(n) {
    for (var i = n; i < trackOpenMenus.length; i++) {
        var id = trackOpenMenus[i];
        
        if (typeof(id) != "undefined" && id != null) {
            hideMenu(id);
        }
    }
}

function levelIsOpen(n) {
    if (typeof(trackOpenMenus[n]) == "undefined" || trackOpenMenus[n] == null) {
        return false;
    } else {
        return true;
    }
}

function trackOpenMenu(n, id) {
    trackOpenMenus[n] = id;
}

function removeOpenMenu(n, id) {
    trackOpenMenus[n] = null;
}

function shouldIBeClosed(n, id) {
    var closeMe = false;
    
    if (trackOpenMenus[n] != id) {
        closeMe = true;
    } else {
        for (var i = 1; i < n; i++) {
            var newID = trackOpenMenus[i];
            
            if (newID == id) { break; }
            
            if (typeof(newID) == "undefined" || newID == null) { 
                closeMe = true;
                break;
            }
        }
    }
    
    return closeMe;
}

function shouldIBeOpen(n, id) {
    return (trackOpenMenus[n] == id);
}

function getMenuID(id) {
    if (id.lastIndexOf && id.lastIndexOf("-") > -1) {
	    return parseInt(id.substr(id.lastIndexOf("-") + 1));
	} else {
	    return 0;
	}
}

function menuIsOpen() {
    var open = false;
    
    trackOpenMenus.each(function(id) {
        if (typeof(id) != "undefined" && id != null) {
            open = true;
        }
    });
    
    return open;
}

function clickMenuItem() {
    var menu      = this.parentNode;
    var menuLevel = getMenuID(menu.parentNode.parentNode.id);
    var id        = parseInt(getMenuID(this.id));
    
    breadCrumbs = new Array();
    
    for (var i = trackOpenMenus.length; i >= 0; i--) {
        breadCrumbs[i] = trackOpenMenus[i];
        
        if (levelIsOpen(i)) { 
            var id       = trackOpenMenus[i];
            var openMenu = $('animated-menu-' + id);
            var div      = openMenu.parentItem;
            
            if (div) {
                var text  = div.textContent||div.innerText;
                var crumb = $('menu-breadcrumb-' + i + '-text');
                
                crumb.innerHTML = text;
                crumb.show();
            }
        
            hideMenu(id);
            
        }
    }
    
    var div = this.firstDescendant();
    
    if (div) {
        var text  = div.textContent||div.innerText;
        var crumb = $('menu-breadcrumb-' + (menuLevel + 1) + '-text');
        
        crumb.innerHTML = text;
        crumb.show();
    }
    
    trackOpenMenus = new Array();   
}

function bodyOnClick() {

}

function validateOpenItems() {
    if (menuIsOpen()) {
        dropDownMenus.each(function(menu) {
            var id        = getMenuID(menu.id);
            var menuLevel = getMenuID(menu.parentNode.parentNode.id);
        
            if (parseInt(menu.style.top) == 0 && !menu.isClosing) {   
                if (shouldIBeClosed(menuLevel, id)) {
                    hideMenu(id);
                    console.log(id);
                }
            } else if (!menu.isOpening) {
                if (shouldIBeOpen(menuLevel, id)) {
                    openMenu(id);
                }
            }
        });
    }
}
*/