/* Gletschereis Code Snippet
 *
 * Dynamic Navigation Menu 
 *
 * Author: Johannes "Oetzi" Ott
 * Mail:   snippets@gletschereis.net
 *
 * $Id: navigation.js,v 1.10 2009/11/13 09:52:34 tweuster Exp $
 * (C) 2007 Copyright by Johannes "Oetzi" Ott
 */

/*var hide_delay = 750;*/
var hide_delay = 750;

var akt_opened = new Array();
var hide_timer = new Array();
var hide_id = new Array();
var hide_closeit = new Array();
var oldMainClass = null;
var arNavigation = new Array()

function getObj(obj) {
   if(document.getElementById)
         return document.getElementById(obj);
   else if (document.layers)
         return document.layers[obj];
   else if(document.all)
         return document.all[obj];
   else
         return null;
}

function close_sub(sub_id, closeit) {
    var sub_block = getObj(sub_id + closeit);

    if (sub_block != null) {
        sub_block.style.display = 'none';
    }
    getObj('hidder_' + sub_id).style.display = 'none';
    akt_opened[sub_id] = 0;
	if(oldMainClass !== null)
	{
		var main_block = getObj(arNavigation[sub_id] + closeit);		
		main_block.className = oldMainClass;
	}
}

function close_this_sub(sub_id, closeit) {
    hide_id[sub_id] = sub_id;
    hide_closeit[sub_id] = closeit;
    hide_timer[sub_id] = setTimeout("close_sub(hide_id['"+ sub_id +"'], hide_closeit['"+ sub_id +"'])", hide_delay );
}

function show_this_sub(main_id, sub_id, openit, position, set_width, offsetX, offsetY, main_class) {
    if (hide_timer[sub_id]) {
        clearTimeout(hide_timer[sub_id]);
        hide_timer[sub_id] = null;
    }
	
    if (akt_opened[sub_id] > 0) { 
        close_sub(sub_id, akt_opened[sub_id]);
    }

    akt_opened[sub_id] = openit;

    var main_block = getObj(main_id + openit);
    var sub_block = getObj(sub_id + openit);
	
    if (sub_block == null)
        return;
	
	arNavigation[sub_id] = main_id;
	
	if(main_class)
	{		
		oldMainClass = main_block.className;		
		main_block.className = main_class;
	}

    var hidder_frame = getObj('hidder_' + sub_id);

    var x = 0;
    var y = 0;

    var main_position = getPosition(main_block, true);

    sub_block.style.display = 'block';
    if (set_width == 1) {
        sub_block.style.width = main_block.offsetWidth + 'px';
    }

    if (position == 'below') {
        x = main_position[0];
        y = Number(main_block.offsetHeight) + Number(main_position[1]);
    } else if (position == 'right') {
        x = Number(main_position[0]) + Number(main_block.offsetWidth);
        y = main_position[1];
    } else if (position == 'left') {
        x = Number(main_position[0]) - Number(sub_block.offsetWidth);
        y = main_position[1]; 
    } else if (position == 'above') {
        x = main_position[0];
        y = Number(main_position[1]) - Number(sub_block.offsetHeight);
    }

    if (offsetX == null)
        offsetX = 0;

    if (offsetY == null)
        offsetY = 0;

    x = Number(x) + Number(offsetX);
    y = Number(y) + Number(offsetY);

    sub_block.style.top = y + 'px';
    sub_block.style.left = x + 'px';

    if (navigator.appName.indexOf("Explorer") != -1)
    {
        hidder_frame.style.display = 'block';
        hidder_frame.style.width = sub_block.offsetWidth + 'px'; 
        hidder_frame.style.height = sub_block.offsetHeight + 'px'; 
        hidder_frame.style.top = y + 'px';
        hidder_frame.style.left = x + 'px';
    }
}

function getPosition(el, absoluteBreak)
{
    if (typeof(el.offsetParent) != 'undefined')
    { 
		for (var x = 0, y = 0, ebene = 0; el; el = el.offsetParent, ebene++)
		{

			if (absoluteBreak && ebene > 0) 
			{ 
				if (window.getComputedStyle)
					var position = window.getComputedStyle(el, "").getPropertyValue("position");
				else if (el.currentStyle) 
					var position = el.currentStyle.position;

				if (position == 'absolute') 
					break; 
			}
 
			x += Number(el.offsetLeft); 
			y += Number(el.offsetTop);
		}
		
		return [x, y];
    }
    else
    { 
		return [el.x, el.y];
    }
}

