/*
by Patrick Dent <patrick@circlelinedesign.co.uk>
Copyright Circleline Design 2007
http://www.circlelinedesign.co.uk
*/

/*
Notes:
    //objDHTMLTreeMenu.createTreeMenu(DHTML id, enable menu memory cookie, menu memory time in days (default is 1))

    An example implemenation would be...

    //NO memory of menu enabled
    objDHTMLTreeMenu.createTreeMenu("treeMenu");

    //memory of menu enabled for default 1 day
    objDHTMLTreeMenu.createTreeMenu("treeMenu", true);

    //memory of menu enabled for 1 week
    objDHTMLTreeMenu.createTreeMenu("treeMenu", true, 7);
*/

var constantULs = new Object();
var objDHTMLTreeMenu = new Object();

/*******************************************************/
//TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
/*******************************************************/
var num = 0;
/*******************************************************/
//TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
/*******************************************************/

objDHTMLTreeMenu.createTreeMenu = function(treeid, enablepersist, persistdays)
{
    var ultags = document.getElementById(treeid).getElementsByTagName("ul");

    if(typeof constantULs[treeid]=="undefined")
        constantULs[treeid] = (enablepersist == true && objDHTMLTreeMenu.getTreeMenuCookie(treeid)!="") ? objDHTMLTreeMenu.getTreeMenuCookie(treeid).split(",") : "";

    for(var i=0; i < ultags.length; i++)
        objDHTMLTreeMenu.buildSubTreeMenu(treeid, ultags[i], i);

    if(enablepersist == true) {
        var durationdays = (typeof persistdays=="undefined") ? 1 : parseInt(persistdays);
        objDHTMLTreeMenu.doTreeMenuAction(window, function(){objDHTMLTreeMenu.memoriseTreeMenu(treeid, durationdays)}, "unload");
    }
}

objDHTMLTreeMenu.buildSubTreeMenu = function(treeid, ulelement, index)
{
    ulelement.parentNode.className = "submenu";

    if(typeof constantULs[treeid] == "object") {
        if(objDHTMLTreeMenu.searchTreeMenuArray(constantULs[treeid], index)) {
            ulelement.setAttribute("rel", "open");
            ulelement.style.display = "block";
        }
        else
            ulelement.setAttribute("rel", "closed");
    }
    else if(ulelement.getAttribute("rel") == null || ulelement.getAttribute("rel") == false)
        ulelement.setAttribute("rel", "closed");
    else if(ulelement.getAttribute("rel") == "open")
        objDHTMLTreeMenu.expandSubTreeMenu(treeid, ulelement);



        /*******************************************************/
        //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
        /*******************************************************/
        num = num + 1
        //ulelement.className = "TTTT";
        ulelement.setAttribute("num", num);
        /*******************************************************/
        //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
        /*******************************************************/



    ulelement.parentNode.onclick=function(e)
    {
        var submenu = this.getElementsByTagName("ul")[0];

        if(submenu.getAttribute("rel") == "closed") {
            submenu.style.display = "block";
            submenu.setAttribute("rel", "open");
        } else if(submenu.getAttribute("rel") == "open") {
            submenu.style.display = "none";
            submenu.setAttribute("rel", "closed");
        }

        /*******************************************************/
        //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
        /*******************************************************/
        //objDHTMLTreeMenu.expandSubTreeMenu = function(treeid, ulelement)
        //
        //objDHTMLTreeMenu.smoothTreeMenu = function(treeid, action)
        //objDHTMLTreeMenu.smoothTreeMenu('treeMenu', 'contract');
        //
        //ulelement.parentNode
        //
        //
        objDHTMLTreeMenu.smoothTreeMenu(treeid, 'contract');
        objDHTMLTreeMenu.expandSubTreeMenu(treeid, ulelement);
        //
        //window.alert('test1=' + ulelement);//DEBUG
        //window.alert('test2=' + ulelement.parentNode);//DEBUG
        //
        //objDHTMLTreeMenu.expandSubTreeMenu(treeid, ulelement.parentNode);
        //
        //var ultags = document.getElementById(treeid).getElementsByTagName("ul");
        //
        //for(var i=0; i < ultags.length; i++) {
        //    if(!ultags[i].getElementsByTagName("ul")[0] > 0) {
        //        if(ultags[i] != ulelement && ultags[i].getAttribute("rel") == "open") {
        //            ultags[i].style.display = "none";
        //            ultags[i].setAttribute("rel", "closed");
        //        }
        //    }
        //}
        /*******************************************************/
        //TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
        /*******************************************************/

        objDHTMLTreeMenu.stopTreeMenuPropagate(e);
    }

    ulelement.onclick=function(e)
    {
        objDHTMLTreeMenu.stopTreeMenuPropagate(e)
    }
}

objDHTMLTreeMenu.expandSubTreeMenu = function(treeid, ulelement)
{
    var rootnode = document.getElementById(treeid);
    var currentnode = ulelement;

    currentnode.style.display = "block";

    while(currentnode!=rootnode) {
        if(currentnode.tagName == "UL") {
            currentnode.style.display = "block";
            currentnode.setAttribute("rel", "open");
        }
        currentnode=currentnode.parentNode
    }
}

objDHTMLTreeMenu.smoothTreeMenu = function(treeid, action)
{
    var ultags = document.getElementById(treeid).getElementsByTagName("ul");

    for(var i=0; i < ultags.length; i++) {
        ultags[i].style.display = (action=="expand") ? "block" : "none";
        var relvalue = (action=="expand") ? "open" : "closed";
        ultags[i].setAttribute("rel", relvalue);
    }
}

objDHTMLTreeMenu.memoriseTreeMenu = function(treeid, durationdays)
{
    var ultags = document.getElementById(treeid).getElementsByTagName("ul");
    var openuls = new Array();

    for(var i=0; i < ultags.length; i++) {
        if(ultags[i].getAttribute("rel") == "open")
            openuls[openuls.length] = i;
    }

    if(openuls.length == 0)
        openuls[0] = "none open";

    objDHTMLTreeMenu.setTreeMenuCookie(treeid, openuls.join(","), durationdays);
}

objDHTMLTreeMenu.getTreeMenuCookie = function(name)
{
    var re = new RegExp(name + "=[^;]+", "i");

    if(document.cookie.match(re))
        return document.cookie.match(re)[0].split("=")[1];

    return "";
}

objDHTMLTreeMenu.setTreeMenuCookie = function(name, value, days)
{
    var expireDate = new Date();
    var expstring = expireDate.setDate(expireDate.getDate() + parseInt(days));

    document.cookie = name + "=" + value + "; expires=" + expireDate.toGMTString() + "; path=/";
}

objDHTMLTreeMenu.searchTreeMenuArray = function(thearray, value)
{
    var isfound = false;

    for(var i=0; i < thearray.length; i++) {
        if(thearray[i]==value) {
            isfound = true;
            thearray.shift();
            break;
        }
    }

    return isfound;
}

objDHTMLTreeMenu.stopTreeMenuPropagate = function(e)
{
    if(typeof e != "undefined")
        e.stopPropagation();
    else
        event.cancelBubble = true;
}

objDHTMLTreeMenu.doTreeMenuAction = function(target, functionref, tasktype)
{
    var tasktype = (window.addEventListener) ? tasktype : "on" + tasktype;

    if(target.addEventListener)
        target.addEventListener(tasktype, functionref, false);
    else if(target.attachEvent)
        target.attachEvent(tasktype, functionref);
}