window.onload = init_menu;
window.onmousemove = followCursor;

var browser=navigator.appName;
var menuPath = '/grafik/menu/';
var path = '/grafik/fronttable/';
var front_image = 'racehallmainbaggrund.jpg';
var current_e = null;
var instance = null;
var fader = 'e1';
var quicklinks_open = false;
var tracking_mouse = false;
var coords = [0,0,0,0]; // global array containing coordinates of a rectangle (a submenu item)

var screenOffset=[0,0]; // global array containing current document scroll status
var Xpos,Ypos; // global variables containing mouse position



function followCursor(e)
{
	// Find out whether document has been scrolled
	getWindowPosition();
	
	// Calculate position 
	if (typeof e == "undefined")
	{
		e = window.event;
		Xpos = e.x;
		Ypos = e.y;
		Xpos += screenOffset[0];
		Ypos += screenOffset[1];
	}
	else
	{
		// I honestly don't know if this case is ever used, but we'd better leave it in for now
		if (typeof e != "undefined")
		{
			Xpos=e.pageX
			Ypos=e.pageY
		}
	}
	
	if (tracking_mouse) {
	    var outside_x = Xpos < coords[0] || Xpos > coords[2];
	    var outside_y = Ypos < coords[1] || Ypos > coords[3];
	    if (outside_x || outside_y) {
	        reset_submenu();
	        //alert('left menu');
	    }
	}
	
}

function getWindowPosition()
{
	// This function finds out how much the document has been scrolled to help
	// positioning elements dynamically.
	
	var x,y;
	if (self.pageYOffset)
	{
		// all except Explorer
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
	{
		// Explorer 6 Strict
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body)
	{
		// all other Explorers
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	
	// Update global variables
	screenOffset[0] = x;
	screenOffset[1] = y;
}


function submenu(e, keep) {
    if (!e) {
        var e = window.event;
        if (e) var which = e.target;
    } else {
        var which = e;
    }
    
    active = which;
    var element = document.getElementById(which);
    
    // hide all
    var parent = document.getElementById('submenu');
    var tags = parent.getElementsByTagName('div');
    for (i=0; i<tags.length; i++) {
        if (!keep) tags[i].style.display = 'none';
    }
    
    if (element && element.style.display == 'block' && !keep) {
        element.style.display = 'none';
    } else if (element) {
        var tags = element.getElementsByTagName('a');
        setOpacity(which, 0);
        element.style.display = 'block';
    }
    
    if (which && typeof which != 'object') {
        //alert(which);
        var grace = 40;
        tracking_mouse = true;
        var x = findPosX(which);
        var y = findPosY(which);
        var width = getWidth(which);
        var height = getHeight(which);
        coords = [x-grace,y-grace,x+width+grace,y+height+grace];
        animate(which);
    } else {
        tracking_mouse = false;
    }
    //alert('bum');
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function set_background_image(element, image, fulltag) {
    element = document.getElementById(element);
    if (element) {
        if (fulltag) element.style.backgroundImage = image;
        else element.style.backgroundImage = "url('"+(path+image)+"')";
    }
}

function change_frontimage(image) {
    set_background_image('body', document.getElementById(fader).style.backgroundImage);
    setOpacity(fader, 0);
    set_background_image(fader, image);
    clearTimeout(instance);
    fade(fader, 0, 'up', 0.01);
    current_e = fader;
}

function restore_frontimage() {
    set_background_image('body', front_image);
    clearTimeout(instance);
    if (current_e != null) {
        fade(fader, 1, 'down', 0.01);
        current_e = null;
    }
    //alert(front_image);
}

function fade(elementname, opacity, direction, increment) {
    if (!increment) increment = 0.02;
    if (opacity < 0) opacity = 0;
    else if (opacity > 1) opacity = 1;
    element = document.getElementById(elementname);
    setOpacity(element, opacity);
    increment += 0.02;
    if (direction == 'down') var newopacity = opacity-increment;
    else var newopacity = opacity+increment;
    if (newopacity > 0 && newopacity < 1) {
        instance = setTimeout('fade("'+elementname+'",'+(newopacity)+',"'+direction+'",'+increment+');', 5);
    } else if (newopacity < 0) {
        setOpacity(element,0);
    } else if (newopacity > 1) {
        //set_background_image('body', document.getElementById(elementname).style.backgroundImage, true);
        setOpacity(element,1);
    }
    //alert('fading');
}

function init_menu() {
    MM_preloadImages(menuPath+'over.jpg', menuPath+'active.jpg', '/grafik/gradient.png');
    document.body.onclick = submenu;
    var e = document.getElementById('top');
    if (e) {
        document.getElementById('top').onclick = function() { top.location.href='/'; };
    }
    create_quicklinks();
}

function quicklinks_up() { 
    if (!quicklinks_open) {
        quicklinks_open = true;
        //fade('quicklinks', 0, 'up', 0.02);
    } else quicklinks_sustain();
}
function quicklinks_down() { 
    if (quicklinks_open) {
        quicklinks_open = false;
        //fade('quicklinks', 1, 'down', 0.02);
    }
}
function quicklinks_sustain() { 
    setOpacity('quicklinks', 1);
}

function create_quicklinks() {
    var parent = document.getElementById('boxes');
    if (parent) {
        var element = document.createElement('div');
        element.setAttribute('id', 'quicklinks');
        //element.style.display = 'none';
        var ptags = parent.getElementsByTagName('*');
        if (ptags[0]) parent.insertBefore(element, ptags[0]);
        else parent.appendChild(element);
    	var ai = new AJAXInteraction('/ajax/ajax_quicklinks.php', "", function (retval) {
			element.innerHTML = retval;
			quicklinks_up();
			element.style.display = 'block';
		    }
	    );
	    ai.doGet();
    }
}

function restore_menu() {
    //MM_swapImgRestore();
}


var active = null;

function reset_submenu() {
    active = null;
    tracking_mouse = false;
    coords = [0,0,0,0];
    submenu();
}


function animate(elementname) {
    var steps = 20;
    for (i=1; i<=steps; i++) {
        var command = 'setOpacity(\''+elementname+'\', '+(i/20)+');';
        setTimeout(command, i*15);
    }
}

function setHeight(elementname, height) {
    var element = document.getElementById(elementname);
    if (element) element.style.height = height+'px';
    else alert('element not found!');
}

function setOpacity(elementname, opacity) {
    if (typeof elementname == 'string') var element = document.getElementById(elementname);
    else element = elementname;
    if (element) {
        if (browser == 'Microsoft Internet Explorer') element.style.filter = 'alpha(opacity='+(opacity*100)+')';
        else element.style.opacity = opacity;
        
    }
}

function getHeight(id) {
    if(document.getElementById) {
		var elem = document.getElementById(id);
	} else if (document.all){
		var elem = document.all[id];
	}
    xPos = elem.offsetHeight;
	return xPos;
}

function getWidth(id) {
	if(document.getElementById) {
		var elem = document.getElementById(id);
	} else if (document.all){
		var elem = document.all[id];
	}
	xPos = elem.offsetWidth;
	return xPos;
}


function findPosX(obj) {
    var curleft = 0;
    obj = document.getElementById(obj);
    if (obj == null) return false;
    if(obj.offsetParent) {
        while(1) {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent) break;
          obj = obj.offsetParent;
        }
    } else if(obj.x) {
        curleft += obj.x;
    }
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    obj = document.getElementById(obj);
    if (obj == null) return false;
    if(obj.offsetParent) {
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    } else if(obj.y) {
        curtop += obj.y;
    }
    return curtop;
}