/*
 * neochrome.js
 * Copyright 2006 CodeDroids ApS
 */
function _decorateWithFrame(elementId, className) {
    if(!document.getElementById || !document.createElement)
        return;
    var contents = document.getElementById(elementId);
    if(!contents)
        return;
    var table = document.createElement('table');
    table.cellSpacing = "0";
    table.cellPadding = "0";
    table.border = "0";
    table.className = className;
    table.id = elementId + "_" + className;
    var tbody = document.createElement('tbody');
    table.appendChild(tbody);
    var tr = document.createElement('tr');
    tbody.appendChild(tr);
    tr.className = className + "_trow";
    var td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_tl";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_t";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_tr";
    tr = document.createElement('tr');
    tbody.appendChild(tr);
    tr.className = className + "_mrow";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_l";
    var tdc = document.createElement('td');
    tr.appendChild(tdc);
    tdc.className = className + "_c";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_r";
    tr = document.createElement('tr');
    tbody.appendChild(tr);
    tr.className = className + "_brow";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_bl";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_b";
    td = document.createElement('td');
    tr.appendChild(td);
    td.className = className + "_br";
    contents.parentNode.insertBefore(table, contents);
    tdc.appendChild(contents);
}
/*
function outlineDivs(box, classPrefix, steps, outerId) {
  if(!document.getElementById ||
     !document.createElement)
    return;
  var inner = document.getElementById(box);
  if(!inner)
    return;
  for(i=1; i<=steps; i++) {
    var div = document.createElement('div');
    div.className=classPrefix+i;
    inner.parentNode.insertBefore(div, inner);
    div.appendChild(inner);
    inner = div;
  }
  if(outerId) {
    var div = document.createElement('div');
    div.id=outerId;
    inner.parentNode.insertBefore(div, inner);
    div.appendChild(inner);
  }
}
*/

sM = {
    init: function() {
        var uls = document.getElementsByTagName('ul');
        for(var u = 0; u < uls.length; u++) {
            if(uls[u].className.search(/\bslidingmenu\b/) == -1)
                continue;
            var lis = uls[u].getElementsByTagName('li');
            for(var i = 0; i < lis.length; i++) {
                var node = lis[i];
                var uuls = node.getElementsByTagName('ul');
                if(node.nodeName.toLowerCase() == 'li' && uuls.length > 0) {
                    for(var j = 0; j < uuls.length; j++) {
                        var unode = uuls[j];
                        if(node==unode.parentNode) {
                            xTop(unode, 17 /*xHeight(node)*/);
                        }
                    }
                    sM.addEvent(node, 'mouseover', sM.getMoverFor(node), false);
                    sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
                    node.getElementsByTagName('a')[0].className += ' subheader';
                    node.isIn = false;
                }
            }
        }
    },
    getMoverFor: function(node) {
        return function(e) { sM.mover(e, node); };
    },
    getMoutFor: function(node) {
        return function(e) { sM.mout(e, node); };
    },
    mover: function(e, targetElement) {
        var el = window.event ? targetElement : e ? e.currentTarget : null;
        if(!el)
            return;
        clearTimeout(el.outTimeout);
        if(!el.isIn) {
            for(var i=0; i<el.childNodes.length; i++) {
                var node = el.childNodes[i];
                if(node.nodeName.toLowerCase() == 'ul') {
                    clearInterval(node.intervalID);
                    node.clippingRectangle = [0, 0, 4, 0];
                    node.style.display = 'block';
                    node.savedOW = node.offsetWidth;
                    node.savedOH = node.offsetHeight;
                    node.style.display = 'none';
                    node.intervalID = setInterval(function() {sM.showMenu(node); }, 10);
                    break;
                }
            }
        }
        el.isIn = true;
    },
    mout: function(e, targetElement) {
        var el = window.event ? targetElement : e ? e.currentTarget : null;
        if(!el)
            return;
        el.outTimeout = setTimeout(function() { sM.mout2(el); }, 100);
    },
    mout2: function(el) {
        for(var i=0; i<el.childNodes.length; i++) {
            var node = el.childNodes[i];
            if(node.nodeName.toLowerCase() == 'ul') {
                clearInterval(node.intervalID);
                node.intervalID = setInterval(function() {sM.hideMenu(node); }, 10);
                break;
            }
        }
        el.isIn = false;
    },
    showMenu: function(el) {
        el.clippingRectangle[1] += 20;
        if(el.clippingRectangle[1] >= el.savedOW) {
            el.clippingRectangle[1] = el.savedOW;
            el.clippingRectangle[2] += 20;
            if(el.clippingRectangle[2] >= el.savedOH) {
                el.clippingRectangle[2] = el.savedOH;
                clearInterval(el.intervalID);
                if(document.all && !window.opera) {
                    el.style.clip = 'rect(auto)';
                } else {
                    el.style.clip = 'auto';
                }
                return;
            }
        }
        el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
        el.style.display ='block';
    },
    hideMenu: function(el) {
        el.clippingRectangle[2] -= 20;
        if(el.clippingRectangle[2] <= 4) {
            el.clippingRectangle[2] = 4;
            el.clippingRectangle[1] -= 20;
            if(el.clippingRectangle[1] <= 0) {
                clearInterval(el.intervalID);
                if(document.all && !window.opera) {
                    el.style.clip = 'rect(auto)';
                } else {
                    el.style.clip = 'auto';
                }
                el.style.display = 'none';
                return;
            }
        }
        el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
    },
    addEvent: function(elm, evType, fn, useCapture) {
        if(elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        } else if(elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            EventCache.add(elm, evType, fn);
            return r;
        } else {
            elm['on' + evType] = fn;
        }
    }
};

sM.addEvent(window, 'load', sM.init, false);
sM.addEvent(window, 'unload', EventCache.flush, false);


