// This is a part of the Andreas Hamm JScript Framework library.
// Copyright (C) Andreas Hamm Development&Consulting.
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Andreas Hamm JScript Framework Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Andreas Hamm JScript Framework product.

var g_pageMap = new Array();
var g_imageMap = new Array();
var g_menuMap = new Array();

var l_timerMMTimeout;   // Timer-Objekt, zum schliessen geoeffnetter Popup-Menues.
var l_nMMTimeout = 600;

/**
    getBrowserLanguage: Versucht ueber das Navigator-Objekt die Sprache des
        Browsers zu ermitteln.

    Rueckgabe
    Konnte die Sprache nicht ermittelt werden wird ein leere Zeichenkette
    zurueck gegeben, ansonsten die intern. Abkuerzung.
*/
function getBrowserLanguage()
{
    var result = new String( "" );

    if( navigator.appCodeName == "Mozilla" && parseInt( navigator.appVersion ) >= 2 )
    {
        if( navigator.userAgent.indexOf( "MSIE" ) != -1 )
        {
            // Internet Explorer (MSIE) kompatible Browser...
            result = navigator.userLanguage.substring( 0, 2 );
        }
        else
        {
            // Annahme, das es sich um einen Mozilla (Netscape) kompatiblen
            //  Browser handelt...
            result = navigator.language.substring( 0, 2 );
        }
    }

    return result;
}

/**
    getElemOffsetLeft: Bestimmt den absoluten Abstand vom linken Seitenrand bis
        zum Element idElem.

    Parameter
    idElem
        Argument ID des TAG-Elements auf der Html-Seite.

    Rueckgabe
    Konnte das Element idElem gefunden werden, liefert die Funktion den Abstand
    vom linken Seitenrand bis zum Element, ansonsten 0.
*/
function getElemOffsetLeft( idElem )
{
    var result = 0;

    var elem = document.getElementById( idElem );
    while( elem != null )
    {
        result += elem.offsetLeft;
        elem = elem.offsetParent;
    }

    return result;
}

/**
    preloadImages: Vorladen von haeufig verwendeten Bildern ueber eine GLOBALE
        VARIABLE um den spaeteren Seitenaufbau zu beschleunigen.

    Parameter
    imageMap
        Array mit den Dateinamen der zu ladenden Bilddateien.

    pathToImages
        Allgemein verbindliche Angabe ueber den Pfad zu den Bilddateien, z.B.
        'MISC/Images'; der weitere Slash wird automatisch angehaengt!

    Achtung     Wird nur bei Mozialla Browsern ab Version 3 oder bei denen,
                die sich dafuer halten, ausgefuehrt.

    Beispiel

        preloadImages( g_imageMap, 'MISC/Images' );        
*/
function preloadImages( imageMap, pathToImages )
{
    if( navigator.appCodeName == "Mozilla" && parseInt( navigator.appVersion ) >= 3 )
    {
        try
        {
            for( var i = 0; i < imageMap.length; i++ )
            {
                if( imageMap[ i ] != "" )
                {
                    // Fuer ein Bild das vorgeladen werden soll, muss immer ein
                    //  Image-Objekt erzeugen werden; Wurde ein neues Image-
                    //  Objekt erzeugt, kann das Bild im Anschluss geladen
                    //  werden.
                    //
                    //  Achtung     Dem Image-Objekt niemals den Wert null
                    //              zuweisen ansonsten wird das Bild nicht
                    //              vorgeladen!
                    //

                    var imageObject = new Image();
                    if( imageObject != null )
                        imageObject.src = pathToImages + "/" + imageMap[ i ];
                }
            }
        }
        catch( e )
        {
        }
    }
}

/**
    onMMClearTimeout: Hebt den Timeout l_timerMMTimeout auf, der mit dem
        Ereignis onMMSetTimeout gesetzt wurde.

    Achtung     onMMClearTimeout dem Ereignis on-mouse-over zuweisen.

    Beispiel

        <div id="puid1" style="...>
        <table><tbody>
        <tr>
            <td onmouseout="onMMSetTimeout()" onmouseover="onMMClearTimeout()">
        <table><tbody>
        <tr>
            <td><a href="#">Popup</a></td>
            <td><a href="...
*/
function onMMClearTimeout()
{
    clearTimeout( l_timerMMTimeout );
}

/**
    onMMSetTimeout: Setzt den Timeout l_timerMMTimeout um das Popup-Menu wieder
        zu schliessen.

    Achtung     onMMSetTimeout dem Ereignis on-mouse-out zuweisen.

    Beispiel

        <a id="#puid1" onmouseout="onMMSetTimeout()" onmouseover="onMMShowPopup('puid1')">...
*/
function onMMSetTimeout()
{
    l_timerMMTimeout = setTimeout( "onMMTimeout( g_menuMap )", l_nMMTimeout );
}

/**
    onMMShowPopup: Oeffnet das Popup-Menu.

    Parameter
    idElem
        Argument ID des TAG-Elements des Popup-Menues.

    Beispiel

        Siehe onMMSetTimeout.
*/
function onMMShowPopup( idElem )
{
    try
    {
        onMMTimeout( g_menuMap );

        var elem = document.getElementById( idElem );
        if( elem != null )
        {
            elem.style.left = getElemOffsetLeft( '#' + idElem ) + "px";
            elem.style.visibility = "visible";
        }
    }
    catch(e)
    {
    }

}

/**
    onMMTimeout: Schliesst alle offenen Popup-Menues.

    Parameter
    menuMap
        Array mit den Argument ID's der TAG-Elemente die als Popup-Menues
        dienen.

    Achtung     Sollte nur intern verwendet werden! Wird momentan von
                    - onMMSetTimeout
                    - onMMShowPoup
                verwendet.
*/
function onMMTimeout( menuMap )
{
    try
    {
        for( n in menuMap )
        {
            document.getElementById( menuMap[ n ] ).style.visibility = "hidden";
        }
    }
    catch( e )
    {
    }

    onMMClearTimeout();
}

/**
    onTimeGoLocalized: Weiterleitung zu einer lokalisierten Webseite ueber die
        Browser-Sprache.

    Parameter
    pageMap
        Array in der Kombination [Sprache, Webpage, Sprache, ..., { Default-
        Webseite }], wobei Sprache die Sprache der Webpage angibt.

    Anmerkung
    Die Funktion onTimeGoLocalized vergleicht die Sprache des Browers mit jedem
    Sprache-Element des Arrays pageMap bis ein equalenter Eintrag gefunden
    wurde und leitet dann, den Browser auf die fuer die Sprache entsprechende
    Webseite weiter. Wurde die Sprache des Browsers im Array nicht gefunden,
    wird, falls vorhanden oder angegeben, die Default-Webseite aufgerufen.

    Beispiel

    var
        timerGoLocalized = setTimeout( "onTimeGoLocalized( g_pageMap )",
            timeLangDetect
            );
*/
function onTimeGoLocalized( pageMap )
{
    try
    {
		var language = getBrowserLanguage();
		var offset = 0;
        while( offset < (pageMap.length - 1) && language != pageMap[ offset ] )
        {
            offset += 2;
        }

        if( offset < (pageMap.length - 1) && pageMap[ offset + 1 ] != "" )
		{
            location.href = pageMap[ offset + 1 ];
        }
        else
        {
            if( pageMap.length >= 1 && pageMap[ pageMap.length - 1 ] != "" )
            {
                location.href = pageMap[ pageMap.length - 1 ];
            }
        }
    }
    catch( e )
    {
    }
}

/**
    oneTimeHtmlInit: Initialisiert die eigentliche Startseite (index.htm).

    Parameters
    pathToImages
        Allgemein verbindliche Angabe ueber den Pfad zu den Bilddateien, z.B.
        'MISC/Images'; der weitere Slash wird automatisch angehaengt!

    timeLangDetect
        Zeit die verstreichen soll, bevor die Sprache ermittelt wird und auf
        die entsprechende Seite gewechselt wird.

    Achtung     In der HTML-Datei muessen die GLOBALEN ARRAYS

                    "g_pageMap"
                    "g_imageMap"

                und

                    "g_menuMap"

                deklariert werden.

    Anmerkung
    In der HTML-Datei muss, bevor das Script geladen wird, die "g_imageMap" mit
    den Bild-Dateinamen deklariert werden; Sind die Bilder auf verschiedene
    Verzeichnisse verteilt, muss die Pfadangabe ebenfalls in dem Array erfolgen
    und als Aufrufparameter an die Funktion eine leere Zeichenkette uebergeben
    werden. Ueber dies hinaus muss "g_pageMap" deklariert werden.

    Beispiel
    <script language="JavaScript"><!--
    var g_pageMap = new Array( "de", "default7.htm", ... );
    var g_imageMap = new Array( "img_... );
    var g_menuMap = new Array( "... );
    //--></script><script src="MISC/AFX.JS" language="JavaScript"></script>
    ...
    <body... onload="oneTimeHtmlInit( 'MISC/Images', -1 )">

*/
function oneTimeHtmlInit( pathToImages, timeLangDetect )
{
    try
    {
		preloadImages( g_imageMap, pathToImages );
    }
    catch( e )
    {
    }

    try
    {
        if( timeLangDetect <= 0 )
        {
			onTimeGoLocalized( g_pageMap );
        }
		else
		{
		    var
            timerGoLocalized = setTimeout( "onTimeGoLocalized( g_pageMap )",
                timeLangDetect
                );
		}
    }
    catch( e )
    {
    }
}

