//DD Tab Menu- Script rewritten April 27th, 07: http://www.dynamicdrive.com
//**Updated Feb 23rd, 08): Adds ability for menu to revert back to default selected tab when mouse moves out of menu
//Only 2 configuration variables below:
var ddtabmenu = {
    disabletablinks: false,
    //Disable hyperlinks in 1st level tabs with sub contents (true or false)?
    snap2original: [true, 1500],
    //Should tab revert back to default selected when mouse moves out of menu? ([true/false, delay_millisec]
    currentpageurl: window.location.href.replace("http://" + window.location.hostname, "").replace(/^\//, ""),
    //get current page url (minus hostname, ie: http://www.dynamicdrive.com/)
    definemenu: function (tabid, dselected) {
        this[tabid + "-menuitems"] = null
        this[tabid + "-dselected"] = -1
        this.addEvent(window, function () {
            ddtabmenu.init(tabid, dselected)
        },
        "load")
    },

    showsubmenu: function (tabid, targetitem) {
        var menuitems = this[tabid + "-menuitems"]
        this.clearrevert2default(tabid)
        for (i = 0; i < menuitems.length; i++) {
            menuitems[i].className = ""
            if (typeof menuitems[i].hasSubContent != "undefined") document.getElementById(menuitems[i].getAttribute("rel")).style.display = "none"
        }
        targetitem.className = "current"
        if (typeof targetitem.hasSubContent != "undefined") document.getElementById(targetitem.getAttribute("rel")).style.display = "block"
    },

	opacity: function (id, opacStart, opacEnd, millisec) {
        //speed for each frame
        var speed = Math.round(millisec / 100);
        var timer = 0;

        //determine the direction for the blending, if start and end are the same nothing happens
        if (opacStart > opacEnd) {
            for (i = opacStart; i >= opacEnd; i--) {
                setTimeout("changeOpac(" + i + ",'" + id + "')", (timer * speed));
                timer++;
            }
        } else if (opacStart < opacEnd) {
            for (i = opacStart; i <= opacEnd; i++) {
                setTimeout("changeOpac(" + i + ",'" + id + "')", (timer * speed));
                timer++;
            }
        }
    },

    changeOpac: function (opacity, id) {
        var object = document.getElementById(id).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";
    },

    isSelected: function (menuurl) {
        var menuurl = menuurl.replace("http://" + menuurl.hostname, "").replace(/^\//, "")
        return (ddtabmenu.currentpageurl == menuurl)
    },

    isContained: function (m, e) {
        var e = window.event || e
        var c = e.relatedTarget || ((e.type == "mouseover") ? e.fromElement : e.toElement)
        while (c && c != m) try {
            c = c.parentNode
        } catch(e) {
            c = m
        }
        if (c == m) return true
        else return false
    },

    revert2default: function (outobj, tabid, e) {
        if (!ddtabmenu.isContained(outobj, tabid, e)) {
            window["hidetimer_" + tabid] = setTimeout(function () {
                ddtabmenu.showsubmenu(tabid, ddtabmenu[tabid + "-dselected"])
            },
            ddtabmenu.snap2original[1])
        }
    },

    clearrevert2default: function (tabid) {
        if (typeof window["hidetimer_" + tabid] != "undefined") clearTimeout(window["hidetimer_" + tabid])
    },

    addEvent: function (target, functionref, tasktype) { //assign a function to execute to an event handler (ie: onunload)
        var tasktype = (window.addEventListener) ? tasktype : "on" + tasktype
        if (target.addEventListener) target.addEventListener(tasktype, functionref, false)
        else if (target.attachEvent) target.attachEvent(tasktype, functionref)
    },

    init: function (tabid, dselected) {
        var menuitems = document.getElementById(tabid).getElementsByTagName("a")
        this[tabid + "-menuitems"] = menuitems
        for (var x = 0; x < menuitems.length; x++) {
            if (menuitems[x].getAttribute("rel")) {
                this[tabid + "-menuitems"][x].hasSubContent = true
                if (ddtabmenu.disabletablinks) menuitems[x].onclick = function () {
                    return false
                }
                if (ddtabmenu.snap2original[0] == true) {
                    var submenu = document.getElementById(menuitems[x].getAttribute("rel"))
                    menuitems[x].onmouseout = function (e) {
                        ddtabmenu.revert2default(submenu, tabid, e)
                    }
                    submenu.onmouseover = function () {
                        ddtabmenu.clearrevert2default(tabid)
                    }
                    submenu.onmouseout = function (e) {
                        ddtabmenu.revert2default(this, tabid, e)
                    }
                }
            }
            else //for items without a submenu, add onMouseout effect
            menuitems[x].onmouseout = function (e) {
                this.className = "";
                if (ddtabmenu.snap2original[0] == true) ddtabmenu.revert2default(this, tabid, e)
            }
            menuitems[x].onmouseover = function (e) {
				clearTimeout(ddtabmenu.timer);
				var t=this;
				t.onmouseout=function(e){
					clearTimeout(ddtabmenu.timer);
					t.className = "";
	                if (ddtabmenu.snap2original[0] == true) {
						ddtabmenu.revert2default(t, tabid, e)
					}
					
				}
				ddtabmenu.timer=setTimeout(function(){ddtabmenu.showsubmenu(tabid, t)},1500);
                ddtabmenu.showsubmenu(tabid, this)
            }
            if (dselected == "auto" && typeof setalready == "undefined" && this.isSelected(menuitems[x].href)) {
                ddtabmenu.showsubmenu(tabid, menuitems[x])
                this[tabid + "-dselected"] = menuitems[x]
                var setalready = true
            }
            else if (parseInt(dselected) == x) {
                ddtabmenu.showsubmenu(tabid, menuitems[x])
                this[tabid + "-dselected"] = menuitems[x]
            }
        }
    }
}