﻿var menuCHeadingUrl;

function MenuItem() {
    this.label = null;
    this.url = null;
    this.secure = false;
    this.nestedMenuItems = new Array();
}
MenuItem.prototype.add = function(label, url, secure) {
    var mi = new MenuItem();
    mi.label = label;
    mi.url = url;
    mi.secure = (secure == null || secure == false ? false : true);
    this.nestedMenuItems[this.nestedMenuItems.length] = mi;
    return mi;
}
MenuItem.prototype.getUrl = function(httpPrefix, httpsPrefix) {
    return this.url == null
		? 'javascript://void'
		: this.url.indexOf('://') >= 0
			? this.url
			: this.secure == true
				? httpsPrefix + this.url
				: httpPrefix + this.url;
}

function ExpandableMenu(varName, menuHeading, menuItems) {
    this.varName = varName;
    this.menuHeading = menuHeading;
    this.menuItems = menuItems;
    this.totalTopLevelMenuItems = 0;
    this.httpPrefix = null;
    this.httpsPrefix = null;
    for (var i = 0; i < this.menuItems.length; ++i) {
        this.totalTopLevelMenuItems += this.menuItems[i].nestedMenuItems.length;
    }
}
ExpandableMenu.prototype.setUrlPrefixes = function(httpPrefix, httpsPrefix) { this.httpPrefix = httpPrefix; this.httpsPrefix = httpsPrefix; }
ExpandableMenu.prototype.writeMenu = function(fixedMenuIdAndClass, expandableMenuIdAndClass, fixedMenuActiveOption, expandableMenuActiveOption) {
    var mi = null;
    var fixedMenu = '<div id="' + fixedMenuIdAndClass + '"><div class="heading"><a class="headingLink" href="http://www.qantas.com.au/fflyer/dyn/partners/index">' + this.menuHeading + '</a></div>';
    for (var i = 0; i < this.menuItems.length; ++i) {
        var menuItem = this.menuItems[i];
        for (var j = 0; j < menuItem.nestedMenuItems.length; ++j) {
            mi = menuItem.nestedMenuItems[j];
            fixedMenu += '\n<a';
            var clazz = '';
            var nestedMenuExpanded = false;
            var disableActiveMenuC = true;
            if (mi.label == fixedMenuActiveOption) {
                if (mi.nestedMenuItems.length > 0) {
                    nestedMenuExpanded = true;
                    if (expandableMenuActiveOption == null || expandableMenuActiveOption.length == 0) {
                        clazz += 'active';
                    }
                    clazz += ' expanded';
                } else {
                    clazz += 'active';
                    if (mi.url != location.pathname) {
                        disableActiveMenuC = false;
                    }
                }
            } else if (mi.nestedMenuItems.length > 0) {
                clazz += 'expandable ';
            }
            if (clazz.length > 0) {
                fixedMenu += ' class="' + clazz + '"';
            }
            if (mi.url == null || mi.url.length == 0 || (clazz.indexOf('active') >= 0 && disableActiveMenuC) || clazz.indexOf('expandable') >= 0) {
                fixedMenu += ' href="javascript://void"';
                if (mi.nestedMenuItems.length > 0) {
                    fixedMenu += ' onclick="javascript:' + this.varName + '.toggleNestedMenu(this,\'' + expandableMenuIdAndClass + '_' + j + '\');"';
                }
            } else {
                fixedMenu += ' href="' + mi.getUrl(this.httpPrefix, this.httpsPrefix) + '"';
            }
            fixedMenu += '>' + mi.label + '</a>';
            if (mi.nestedMenuItems.length > 0) {
                fixedMenu += '\n<div id="' + expandableMenuIdAndClass + '_' + j + '" class="' + expandableMenuIdAndClass;
                if (nestedMenuExpanded) {
                    fixedMenu += ' expanded';
                }
                fixedMenu += '">';
                for (var k = 0; k < mi.nestedMenuItems.length; ++k) {
                    fixedMenu += '\n<a';
                    if (mi.nestedMenuItems[k].label == expandableMenuActiveOption) {
                        fixedMenu += ' class="active"';
                    }
                    fixedMenu += ' href="' + mi.nestedMenuItems[k].getUrl(this.httpPrefix, this.httpsPrefix) + '" >' + mi.nestedMenuItems[k].label + '</a>';
                }
                fixedMenu += '\n</div>';
            }
        }
    }
    fixedMenu += '</div>';
    document.write(fixedMenu);
}
ExpandableMenu.prototype.toggleNestedMenu = function(node, id) {
    var menu = document.getElementById(id);
    var menuC = document.getElementById('menu-c');

    // closing open menus first
    allanchors = menuC.getElementsByTagName('a');
    for (var i = 0; i < allanchors.length; ++i) {
        if (allanchors[i].className.indexOf('expanded') >= 0) {
            allanchors[i].className = allanchors[i].className.replace(/expanded/ig, 'expandable');
        }
    }
    alldivs = menuC.getElementsByTagName('div');
    for (var i = 0; i < alldivs.length; ++i) {
        if (alldivs[i].className.indexOf('menu-d') >= 0) {
            //alldivs[i].className=alldivs[i].className.replace(/expanded/ig,'');
            alldivs[i].style.display = 'none';
        }
    }

    //detect browser type - to fix safari bug
    var detect = navigator.userAgent.toLowerCase();

    // continuing with standard logic	
    if (detect.indexOf('safari') + 1) {
        var display = menu.style.display;
    }
    else {
        var display = (menu.currentStyle ? menu.currentStyle.display : document.defaultView.getComputedStyle(menu, null).display);
    }

    if (display == 'none') {
        menu.style.display = 'block';
        node.className = node.className.replace(/expandable/ig, 'expanded');
    } else {
        anchors = menu.getElementsByTagName('a');
        for (var i = 0; i < anchors.length; ++i) {
            if (anchors[i].className.indexOf('active') >= 0) {
                return;
            }
        }
        menu.style.display = 'none';
        node.className = node.className.replace(/expanded/ig, 'expandable');
    }

}

function TabbedMenu(varName, menuItems) {
    this.varName = varName;
    this.menuItems = menuItems;
    this.totalTopLevelMenuItems = 0;
    this.httpPrefix = null;
    this.httpsPrefix = null;
    for (var i = 0; i < this.menuItems.length; ++i) {
        this.totalTopLevelMenuItems += this.menuItems[i].nestedMenuItems.length;
    }
    this.mouseOverCounter = new Array();
    this.popup = null;
}
TabbedMenu.prototype.millisecondTimein = 300;
TabbedMenu.prototype.millisecondTimeout = 700;
TabbedMenu.prototype.popupVarName = function() { return this.varName; }
TabbedMenu.prototype.setUrlPrefixes = function(httpPrefix, httpsPrefix) { this.httpPrefix = httpPrefix; this.httpsPrefix = httpsPrefix; }
TabbedMenu.prototype.writeMenu = function(fixedMenuClass, popupMenuClass, fixedMenuActiveOption, popupMenuActiveOption) {
    var mi = null;
    var fixedMenu = '\n<table id="' + fixedMenuClass + '" cellspacing="0">\n<tr>';
    for (var i = 0; i < this.menuItems.length; ++i) {
        var menuItem = this.menuItems[i];
        for (var j = 0; j < menuItem.nestedMenuItems.length; ++j) {
            mi = menuItem.nestedMenuItems[j];
            fixedMenu += '\n<td><a id="m' + i + j + '" href="' + mi.getUrl(this.httpPrefix, this.httpsPrefix) + '"';
            var adjustedLabel = mi.label.replace(/\s+/g, '&nbsp;');
            var clazz = 'm' + i;
            if (mi.label == fixedMenuActiveOption) {
                clazz += ' active';
                adjustedLabel += '&nbsp;&nbsp;&nbsp;';
            } else {
                if (mi.label.length <= 6) {
                    adjustedLabel = '&nbsp;' + adjustedLabel + '&nbsp;';
                }
                var eventParams = "'m" + i + j + "','" + popupMenuClass + "-" + i + j + "'";
                fixedMenu += ' onmouseout="javascript:' + this.varName + '.mouseOut(' + eventParams + ');" onmouseover="javascript:' + this.varName + '.mouseOver(' + eventParams + ');"';
            }
            fixedMenu += 'class="' + clazz + '"';
            fixedMenu += '>' + adjustedLabel + '</a></td>';
        }
    }
    fixedMenu += '\n</tr></table>';
    for (var i = 0; i < this.menuItems.length; ++i) {
        var menuItem = this.menuItems[i];
        for (var j = 0; j < menuItem.nestedMenuItems.length; ++j) {
            mi = menuItem.nestedMenuItems[j];
            fixedMenu += '\n<div id="' + popupMenuClass + '-' + i + j + '"';
            fixedMenu += ' class="' + popupMenuClass;
            if (mi.label == fixedMenuActiveOption && mi.nestedMenuItems.length > 0) {
                fixedMenu += ' active"';
            } else {
                var eventParams = "'m" + i + j + "','" + popupMenuClass + "-" + i + j + "'";
                fixedMenu += '" onmouseout="javascript:' + this.varName + '.mouseOut(' + eventParams + ');" onmouseover="javascript:' + this.varName + '.mouseOver(' + eventParams + ');"';
            }
            fixedMenu += '>';
            for (var k = 0; k < mi.nestedMenuItems.length; ++k) {
                fixedMenu += '\n<a';
                if (mi.nestedMenuItems[k].label == popupMenuActiveOption) {
                    fixedMenu += ' class="active"';
                    menuCHeadingUrl = mi.nestedMenuItems[k].getUrl(this.httpPrefix, this.httpsPrefix);
                }
                fixedMenu += ' href="' + mi.nestedMenuItems[k].getUrl(this.httpPrefix, this.httpsPrefix) + '" >' + mi.nestedMenuItems[k].label + '</a>';
            }
            fixedMenu += '\n</div>';
        }
    }
    document.write(fixedMenu);
    document.getElementById(fixedMenuClass).tableLayout = 'fixed';
}
TabbedMenu.prototype.mouseOver = function(invokingNodeId, popupMenuId) {
    if (this.mouseOverCounter[popupMenuId] == null) {
        this.mouseOverCounter[popupMenuId] = 0;
    }
    this.mouseOverCounter[popupMenuId]++;
    if (this.popup == null) {
        this.showPopup(invokingNodeId, popupMenuId);
    } else {
        var show = this.varName + '.showPopup("' + invokingNodeId + '","' + popupMenuId + '");';
        window.setTimeout(show, this.millisecondTimein);
    }
}
TabbedMenu.prototype.mouseOut = function(invokingNodeId, popupMenuId) {
    if (this.mouseOverCounter[popupMenuId] == null) {
        this.mouseOverCounter[popupMenuId] = 0;
    } else {
        this.mouseOverCounter[popupMenuId]--;
        var hide = this.varName + '.hidePopup("' + popupMenuId + '");';
        window.setTimeout(hide, this.millisecondTimeout);
    }
}
TabbedMenu.prototype.showPopup = function(invokingNodeId, popupMenuId) {
    if (this.mouseOverCounter[popupMenuId] > 0) {
        if (this.popup == null || this.popup.id != popupMenuId) {
            if (this.popup != null) {
                this.killPopup();
            }
            this.popup = document.getElementById(popupMenuId);
            this.popup.contentSize = this.popup.innerHTML.replace(/[\s\r\n\t ]*/ig, '').length;
            if (this.popup.contentSize > 0) {
                this.popup.style.display = 'block';
            }
            this.popup.invokingNode = document.getElementById(invokingNodeId);
            this.popup.invokingNode.className += ' hover';
        }
    }
}
TabbedMenu.prototype.hidePopup = function(popupMenuId) {
    if (this.mouseOverCounter[popupMenuId] == 0) {
        if (this.popup != null && this.popup.id == popupMenuId) {
            this.killPopup();
        }
    }
}
TabbedMenu.prototype.killPopup = function() {
    this.mouseOverCounter[this.popup.id] = 0;
    this.popup.style.display = 'none';
    this.popup.invokingNode.className = this.popup.invokingNode.className.replace(/\ hover/ig, '');
    this.popup = null;
}
