var middleTower = null
var middleTowerStore = null
var addingModules = false
var nAddCandidates = 0

function stopAddingModules() {
    addingModules = false
    var candidates = getIndexedChildElementNodes(middleTowerStore)
    for (var i = 0; i < candidates.length; ++i) {
        candidates[i].onclick = null
        candidates[i].onmouseover = null
        candidates[i].onmouseout = null
    }
    middleTowerStore.style.display = 'none'
    // Effect.Fade(middleTowerStore, { 
    //     'duration': 0.2
    // })
}

function showAddButton(node, buttonStyle, addStyle) {
    var menuNode = document.getElementById(node.id + '-menuButtons')
    for (var i = 0; i < menuNode.childNodes.length; ++i) {
        var buttonNode = menuNode.childNodes[i]
        if (-1 == buttonNode.className.indexOf('addItemButton'))
            buttonNode.style.display = buttonStyle
        else
            buttonNode.style.display = addStyle
    }
}

function addModule(node) {
    showAddButton(node, 'block', 'none')
    delete(switches[node.id])
    saveSwitchOff(node.id)
    middleTower.appendChild(node)
    createDragPushGroup([ node ], dragPushData)
    --nAddCandidates
    if (0 == nAddCandidates) middleTowerStore.style.display = 'none'
    saveOrder(dragPushData.order)
}

function addModules() {
    var candidates = getIndexedChildElementNodes(middleTowerStore)
    nAddCandidates = candidates.length
    if (0 == nAddCandidates) {
        alert('You have added all of the available items.')
        return
    }
    addingModules = true
    middleTowerStore.style.display = 'block'

    for (var i = 0; i < candidates.length; ++i)
        showAddButton(candidates[i], 'none', 'block')
}

function closeModule(node) {

    if (node.style.display != 'none') {
        saveSwitchOn(node.id)
        // Effect.Fade(node, { 
        //     duration: 0.2,
        //     afterFinish: function() {
                // shift all nodes after this one backwards
                var rmId = dragPushData.orderHash[node.id]
                for (var i = rmId + 1; i < dragPushData.order.length; ++i)
                    --dragPushData.orderHash[dragPushData.order[i]]
                dragPushData.order.splice(rmId, 1)

                saveOrder(dragPushData.order)
                middleTowerStore.appendChild(node)
                node.style.display = 'block'
        //     }
        // });
    }
}

function restoreAll() {
    if (addingModules) stopAddingModules()
    var nodes =  getIndexedChildElementNodes(middleTowerStore)
    for (var i = 0; i < nodes.length; ++i) {
        delete switches[nodes[i].id]
        saveSwitchOff(nodes[i].id)
        middleTower.appendChild(nodes[i])
        showAddButton(nodes[i], 'block', 'none')
    }

    // this will append these nodes to the existing group
    createDragPushGroup(nodes, dragPushData)
    saveOrder(dragPushData.order)
}

function preloadButtons() { 
    MM_preloadImages('/ida/img/components/#{JosiahPrefs.color}/btn_navhomet_01_o.gif','/ida/img/components/#{JosiahPrefs.color}/btn_navhome_02_o.gif','/ida/img/components/' + color + '/btn_navhome_01_o.gif'); 
}

function setOrder(orderStr) {
    var order = orderStr.split(',')
    for (var i = 0; i < order.length; ++i) {
        var node = document.getElementById(order[i])
        if (node) middleTower.appendChild(node)
    }
}

// add all modules that haven't already been added as long as they aren't switched off
function addRemainingModules() {
    for (var i = 0; i < middleTowerStore.childNodes.length; ++i) {
        var childNode = middleTowerStore.childNodes[i]
        if (1 == childNode.nodeType && childNode.id && ! switches[childNode.id])
            middleTower.appendChild(childNode)
    }
}

function initHome() {
    middleTowerStore = document.getElementById('middleTowerStore')
    middleTower = document.getElementById('middleTowerContent')
    // middleTower is null on IE only, the getElementById just fails.. no idea why

    if (! order) order = getCookie('order')
    if (order) setOrder(order)
    addRemainingModules()

    // order is restored from the contents of the middle tower
    createDragPushGroup(getChildElementNodes(middleTower), dragPushData)
}

function gotoAnchorLink(){
	var url = window.location.href;
	var anchorLinks = url.split('#');
	if(anchorLinks && anchorLinks.length > 1) {
		var alink = anchorLinks[1];
		if($(alink))
			$(alink).scrollTo(); 
	}	
}


addLoadCallback(preloadButtons)
addLoadCallback(initHome)
addLoadCallback(gotoAnchorLink)