/**
 *  ####  Designdeck "Moving Navigationbar"  ####
 *
 *  Ein- und ausfahrende Sub-Navigation!
 *
 *  Author: Oliver Peifer
 *  E-Mail: op@designdeck.de
 *  Version: 1.0
 *  erstellt am: 19.05.2006
 */

 
 
 
 /**************************************************************************************************
 *
 *  Konstruktor der Klasse
 *
 *  @param: string Name der Objektinstanz (Workaround für Timeout und Interval)
 *  @param: string Name der ID des umschliessenden Div's
 *  @param: number Höhe der Navigationsleiste um die der Content verschoben wird
 *  @param: number Zeit, nach der die Leiste in die Ausgangsposition zurück weicht
 */
function ddNavBar( Name, Content, NaviHeight, TimeToHide, redirectSub ) {
    this.moving      = false;
    this.countdown   = false;
    this.NaviHeight  = NaviHeight;
    this.NaviObject  = Name;
    this.ContentBox  = Content;
    this.TimeToHide  = TimeToHide;
    this.activeSub   = false;
    this.redirectSub = false;

    // Startwert der Leiste festlegen und zuweisen
    // (Leiste muss um Ihre Höhe in den nicht sichtbaren Bereich verschoben sein)
/*
    var TopPosition = '-' + this.NaviHeight + 'em';
   	Element = document.getElementById(this.ContentBox);
   	Element.style.top = TopPosition;

    if(redirectSub!=false) {
        this.showSub(redirectSub);
        this.redirectSub = this.NaviObject + '_' + redirectSub;
    }

*/
    if(redirectSub==false) {
        var TopPosition = '-' + this.NaviHeight + 'em';
       	Element = document.getElementById(this.ContentBox);
       	Element.style.top = TopPosition;
        document.getElementById('mainnavi_innen').style.visibility = 'hidden';
    }else {
        var TopPosition = '0em';
       	Element = document.getElementById(this.ContentBox);
       	Element.style.top = TopPosition;

/*
	Änderung Rendering-Problem Safari
        document.getElementById('mainnavi').style.backgroundPosition = 'bottom left';
*/
        document.getElementById('mainnavi_innen').style.visibility = 'visible';

        this.redirectSub = this.NaviObject + '_' + redirectSub;
        this.activeSub = this.NaviObject + '_' + redirectSub;
        document.getElementById(this.activeSub).style.display = 'block';

        this.move(0, 'out');
    }

}


/**
 *  Funktion zum Anzeigen der Leiste
 *
 *  @param: string Name des Divs dessen Navigationspunkte angezeigt werden soll
 */
ddNavBar.prototype.showSub = function( navigation ) {
    if(this.countdown) {
		clearTimeout(this.countdown);
		this.countdown = false;
    }

    if(this.redirectSub) {
        this.changeSub();
        document.getElementById(this.redirectSub).style.display = 'none';
        this.activeSub = this.NaviObject + '_' + navigation;
        document.getElementById(this.activeSub).style.display = 'block';
    }else {
/*
	Änderung Rendering-Problem Safari
        if(!this.countdown && document.getElementById('mainnavi').style.backgroundPosition != 'bottom left' || document.getElementById('mainnavi').style.backgroundPosition != 'left bottom') {
            document.getElementById('mainnavi').style.backgroundPosition = 'bottom left';
        }
*/
        if(!this.countdown && document.getElementById('mainnavi_innen').style.visibility != 'visible') {
            document.getElementById('mainnavi_innen').style.visibility = 'visible';
        }


        if(this.activeSub) {
            document.getElementById(this.activeSub).style.display = 'none';
        }
        this.activeSub = this.NaviObject + '_' + navigation;
        document.getElementById(this.activeSub).style.display = 'block';
        
        this.start(0, 'out');
    }
}


/**
 *  Funktion zum Verstecken der Leiste
 *
 *  @param: string Name des Divs dessen Navigationspunkte angezeigt werden soll
 */
ddNavBar.prototype.hideSub = function() {
	if(this.redirectSub) {
        this.countdown = setTimeout( this.NaviObject + ".changeSub()", this.TimeToHide * 1000 );
    }else {
        var TopTarget = 0 - this.NaviHeight;
        this.countdown = setTimeout( this.NaviObject + ".start(" + TopTarget + ", 'in')", this.TimeToHide * 1000 );
    }
}


ddNavBar.prototype.changeSub = function() {
    document.getElementById(this.activeSub).style.display = 'none';
    document.getElementById(this.redirectSub).style.display = 'block';
}

/**
 *  Funktion die den ein-/ausblende Vorgang startet
 *
 *  @param: number Zielposition der Navigationsleiste (0 oder Höhe der anzuzeigenden Leiste)
 *  @param: string Name des Divs dessen Navigationspunkte angezeigt werden soll
 */
ddNavBar.prototype.start = function( TopTarget, Direction ) {
    if( (Direction=='out' && !this.moving && !this.countdown) || (Direction=='in'  && !this.moving) ) {
		var ElementHeight = this.getTop();
		if(ElementHeight != TopTarget) {
			this.moving = setInterval( this.NaviObject + ".move(" + TopTarget + ", '" + Direction + "')", 20 );
		}
    }
}


/**
 *  Funktion die zur Berechnung der nächsten Position der Leiste
 *
 *  @param: number Zielposition der Navigationsleiste (0 oder Höhe der anzuzeigenden Leiste)
 */
ddNavBar.prototype.move = function( TopTarget, Direction ) {
	// Content der Seite greifen und Top-Position ermitteln
    var Element    = document.getElementById( this.ContentBox );
	var ElementTop = this.getTop();
    var NextTop    = ( ElementTop + ( (TopTarget - ElementTop)/2 ) );

    // nächste Position setzen
	Element.style.top = NextTop + 'em';
	
	if(Math.abs(TopTarget-NextTop) < 0.75 && Direction=='in') {
/*
	Änderung Rendering-Problem Safari
        if(document.getElementById('mainnavi').style.backgroundPosition == 'bottom left' || document.getElementById('mainnavi').style.backgroundPosition == 'left bottom') {
            document.getElementById('mainnavi').style.backgroundPosition = '10000px 10000px';
        }
*/
        if(document.getElementById('mainnavi_innen').style.visibility == 'visible') {
            document.getElementById('mainnavi_innen').style.visibility = 'hidden';
        }


    }

    // wenn Ziel überschritten, auf Ziel setzen
	if(Math.abs(TopTarget-NextTop) < 0.16) {
		Element.style.top = TopTarget + 'em';
		clearInterval(this.moving);
		this.moving = false;

		clearTimeout(this.countdown);
		this.countdown = false;
	}
}


/**
 *  Funktion zur Anzeige der Leiste
 */
ddNavBar.prototype.getTop = function() {
	var Element = document.getElementById( this.ContentBox );

	if(Element.style.top == '') {
        // tu nichts
	}else {
		return Element.style.top.substring(0, Element.style.top.length-2) - 0;
    }
}

/*************************************************************************************************/




/**
 *  Funktion mit Initialisierungsanweisungen
 */
function init() {
    // erzeugen der Navigationsleiste negative Position in "em" angeben, damit ein "resizen" der Navigation funktioniert
    ddSubNavi = new ddNavBar('ddSubNavi', 'content', 3, 1, window.redirection);
}

/**
 *  Funktion zum erweitern des onLoad="" Events um eigene Funktionen
 *
 *  @param: string Name der aufzurufenden Funktion
 */
function addOnLoad( NextFunction ) {
    var onLoadFunction = window.onload;
    // wenn keine Funktion für onLoad() gesetzt
    if(typeof window.onload != 'function') {
        // Funktion übergeben
        window.onload = NextFunction;
    }else {
        // wenn doch, onLoad-Funktion überschreiben
        window.onload = function() {
            onLoadFunction();
            NextFunction();
        }
    }
}


/**
 *  Anlegen von Variablen und Objekten
 */
var ddSubNavi;
if(!ddSubNavi) {
    if(document.getElementById) {
    	// Initialisierung ausführen, sobald Dokument geladen ist
        window.addOnLoad( init );
    }
}
