﻿var siteSection = {
    addMenuToggles: function(items) {
        var child,
			childCount,
			children,
			item,
			itemCount,
			parent,
			parents,
			submenu,
			toggle,
			grandchild;

        parents = [];

        for (itemCount = items.length; itemCount-- > 0; ) {
            item = items[itemCount];
            parent = item.parentNode;

            if (item.nodeName.toLowerCase() == 'a') {

                submenu = parent.getElementsByTagName('ul');

                if (submenu.length == 0) {
                    submenu = parent.getElementsByTagName('p');
                }

                if (submenu.length > 0) {
                    toggle = document.createElement('span');
                    toggle.appendChild(document.createTextNode('open'));
                    item.appendChild(toggle);
                    helper.addEvent(toggle, 'click', siteSection.clickMenuToggle, false);
                    parents.push(parent);

                    children = submenu[0].getElementsByTagName('li');
                    child = null;

                    if (child !== null) {
                        helper.cssjs('add', parent.parentNode.parentNode, 'factOpen');
                    } else {
                        helper.cssjs('remove', parent.parentNode.parentNode, 'factOpen');
                    }
                }
            } else {

                if (item.childNodes.length > 0) {
                    siteSection.addMenuToggles(item.childNodes);
                }
            }
        }
    },

    clickMenuToggle: function(evt) {

        var count,
			curstats,
			ele;

        ele = siteSection.getTarget(evt);

        while (ele.nodeName.toLowerCase() != 'li' && ele.parentNode !== null) {
            ele = ele.parentNode;
        }

        if (ele.nodeName.toLowerCase() == 'li') {

            if (helper.cssjs('check', ele, 'factOpen')) {
                curstats = "show";
            } else {
                curstats = "hide";
            }

            menu = document.getElementById('site-sections');

            if (menu && menu.nodeName.toLowerCase() == 'ul') {
                siteSection.closeAllToggles(menu.childNodes);
            }

            menus = document.getElementsByName('factPortal');

            for (count = menus.length; count-- > 0; ) {

                menu = menus[count];

                if (menu.nodeName.toLowerCase() == 'ul') {
                    siteSection.closeAllToggles(menu.childNodes);
                }
            }

            if (curstats == "hide") {
                helper.cssjs('add', ele, 'factOpen');
            } else {
                helper.cssjs('remove', ele, 'factOpen');
            }

            siteSection.haltEvent(evt);
        }
    },

    closeAllToggles: function(items) {
        var child,
			childCount,
			children,
			item,
			itemCount,
			parent,
			submenu,
			toggle,
			grandchild;

        for (itemCount = items.length; itemCount-- > 0; ) {
            item = items[itemCount];
            parent = item.parentNode;

            if (item.nodeName.toLowerCase() == 'a') {

                submenu = parent.getElementsByTagName('ul');

                if (submenu.length == 0) {
                    submenu = parent.getElementsByTagName('p');
                }

                if (submenu.length > 0) {
                    helper.cssjs('remove', parent, 'factOpen');
                }
            } else {

                if (item.childNodes.length > 0) {
                    siteSection.closeAllToggles(item.childNodes);
                }
            }
        }
    },

    closeMenus: function() {
        var all,
			count,
			item,
			items,
			menu;

        all = arguments.length > 0 && arguments[0] === true;

        menu = document.getElementById('site-sections');

        if (menu && menu.nodeName.toLowerCase() == 'ul') {
            items = menu.getElementsByTagName('li');

            for (count = items.length; count-- > 0; ) {
                item = items[count];

                if (helper.cssjs('check', item, 'factOpen') && (all || item.parentNode === menu)) {
                    helper.cssjs('remove', item, 'factOpen');
                }
            }
        }
    },

    getTarget: function(evt) {
        var target;

        target = window.event ? window.event.srcElement : evt ? evt.target : null;

        if (target) {

            while (target.nodeType != 1 && target.nodeName.toLowerCase() != 'body') {
                target = target.parentNode;
            }
        }

        return target;
    },

    haltEvent: function(evt) {

        if (evt && evt.preventDefault) {
            evt.preventDefault();
        }

        if (evt && evt.stopPropagation) {
            evt.stopPropagation();
        }

        if (window.event && window.event.cancelBubble) {
            window.event.cancelBubble = true;
        }

        if (window.event) {
            window.event.returnValue = false;
        }
    },

    init: function() {
        var count,
			item,
			items,
			menu;

        if (document.getElementById && document.getElementsByTagName && document.createElement) {
            menu = document.getElementById('site-sections');

            if (menu && menu.nodeName.toLowerCase() == 'ul') {
                siteSection.addMenuToggles(menu.childNodes);
            }

            //menus = document.getElementsByName('factPortal');
            menus = document.getElementsByTagName('ul');

            for (count = menus.length; count-- > 0; ) {

                menu = menus[count];

                if (menu.className.match("factPortal") == 'factPortal') {
                    siteSection.addMenuToggles(menu.childNodes);
                }
            }
        }
    },

    toggles: []
};

if ( helper !== undefined ) {
	helper.addEvent(window, 'load', siteSection.init, false);
}

