/*------------------------------------------------------------------------------
Copyright (C) 2004 by Webbridge BV, Netherlands
Author : Jeroen Laarhoven
Comment: Some DOM DHTML core routines (IE6 & MZ1.7+) tested
------------------------------------------------------------------------------*/

//
// generall
//

// tagName and ele are optional but speed up things
function getElementsByClassName(className, tagName, ele) {
    var matches = new Array();
    var eles;
    if (tagName == null)
        tagName = '*';
    if (ele != null)
        eles = ele.getElementsByTagName(tagName);
    else
        eles = document.getElementsByTagName(tagName);
    for(var i = 0; i < eles.length; i++) //>
        if (eles.item(i).className == className) 
            matches.push(eles.item(i));
    return matches;
}


function getIdChild(id, childClassName) {
    var childs = document.getElementById(id).childNodes;
    for(var i = 0; i < childs.length; i++) { //>
        if (childs[i].className == childClassName) {
            return childs[i];
        }
    }
}

function getPageLeft(ele) {
    var v = 0;
    while (ele.offsetParent != null) {
        v += ele.offsetLeft;
        ele = ele.offsetParent;
    }
    return v + ele.offsetLeft;
    //return parseFloat(v + ele.offsetLeft);
}

function getPageTop(ele) {
    var v = 0;
    while (ele.offsetParent != null) {
        v += ele.offsetTop;
        ele = ele.offsetParent;
    }
    return parseFloat(v + ele.offsetTop);
}

//
// show/collapse elements (divs, table cells/rows)
//

function toggleCollapseId(id) {
    toggleCollapse(document.getElementById(id));
}

function showCollapsedId(id) {
    showCollapsed(document.getElementById(id));
}

function doCollapseId(id) {
    doCollapse(document.getElementById(id));
}

function toggleCollapseIdChild(id, childClassName) {
    toggleCollapse(getIdChild(id, childClassName));
}

function toggleCollapseIdChilds(id, childsClassName) {
    var childs = document.getElementById(id).childNodes;
    for(var i = 0; i < childs.length; i++) { //>
        if (childs[i].className == childsClassName) {
            toggleCollapse(childs[i]);
        }
    }
}

function toggleCollapse(ele) {
    if (ele && (ele.style.display == 'none' || ele.style.display == ''))
		showCollapsed(ele);
    else if (ele)
		doCollapse(ele);
}

function showCollapsed(ele) {
    if (document.addEventListener) { // Mozilla and Opera 7.x
        //alert(ele.tagName);
        if (ele.tagName == 'TD') // td
            ele.style.display = 'table-cell';
        else if (ele.tagName == 'TR') // tr
            ele.style.display = 'table-row';
        else
            ele.style.display = 'block';
	} else {
		ele.style.display = 'block';
    }
}

function doCollapse(ele) {
	ele.style.display = 'none';
}


//
// simple menu :: with shared content ('%id%' string-bits replaced by the id)
//

var _lastMenu;

function menuToggle(id, contClass, menu) {
    var eleMenu =  getIdChild(id, contClass);
    if (eleMenu.style.visibility == 'visible')
        menuClose(id, contClass);
    else
        menuOpen(id, contClass, menu);
}

// shows menu while hidding underlaying content (needed for input/select controls)
function menuToggle2(id, contClass, menu, under) {
    var eleMenu =  getIdChild(id, contClass);
    var eleUnder =  getIdChild(id, under);
    if (eleMenu.style.visibility == 'visible') {
        menuClose(id, contClass);
        eleUnder.style.visibility = 'visible';
    } else {
        menuOpen(id, contClass, menu);
        eleUnder.style.visibility = 'hidden';
    }
}

function menuOpen(id, contClass, menu) {
    //menuCloseAll(null, contClass);
    var eleMenu =  getIdChild(id, contClass);
    var eleSrc = document.getElementById(menu);
    eleMenu.innerHTML = eleSrc.innerHTML.replace(/%id%/g, id.substring(1));
    eleMenu.style.visibility = 'visible';
    menuClose();
    _lastMenu = eleMenu;
    return false;
}

// name hmmm, but closes previous menu and saves current
function menuClose() {
    if (_lastMenu != null) {
        _lastMenu.style.visibility = 'hidden';
        _lastMenu = null;
    }
}

// close all menus in this element
function menuCloseAll(ele, contClass) {
    var childs = getElementsByClassName(contClass, 'div', ele)
    for(var i = 0; i < childs.length; i++) //>
        if (childs[i].className == contClass) 
            childs[i].style.visibility = 'hidden';
}

//
// show/hide popups
//

function showPopupId(id, posId) {
    var ele = document.getElementById(id);
    var posEle = document.getElementById(posId);
    ele.style.left = (getPageLeft(posEle) + 5) + 'px';
    ele.style.top = (getPageTop(posEle) + 25) + 'px';
	ele.style.visibility = 'visible';
}

function hidePopupId(id) { 
	document.getElementById(id).style.visibility = 'hidden';
}

function showHelp(id, posId) {
    window.status = 'Help';
    showPopupId(id, posId);
    return true;
}

function hideHelp(id) {
    window.status = '';
    hidePopupId(id);
    return true;
}

//
// invert radio / checkbox settings
//

function invertInputsByName(name) {
    var nodes = document.getElementsByName(name);
    for(var i = 0; i < nodes.length; i++) { //>
        //if (nodes[i].hasAttribute('checked')) TODO
        nodes[i].checked = !nodes[i].checked;
    }
}

function invertCheckboxInputs(form, name) {
    var nodes = document.forms[form].elements;
    var len = name.length;
    for(var i = 0; i < nodes.length; i++) { //>
        if (name == nodes[i].name.substr(0,len)) 
            nodes[i].checked = !nodes[i].checked;
    }
}
