// Notiz
// =====

// Copyright (c) 2002 by Dietmar Rabich, Duelmen.
// Alle Rechte vorbehalten.

// http://www.rabich.de

// Version: 1.0
// Datum:   14.4.2002

/* --- Variablen --- */
var        mehrfach_anzeigen        = true        // true: Anzeige bei jedem Aufruf der Seite, false: einmalige Anzeige
var        pfad_close_img        = ""                // Pfad zur Bilddatei "notiz_schliessen.gif"
var        min_zIndex        = 1000                // minimaler z-Index fuer Notizen (groesser als groesste im Dokument)

/* Intern genutzte Variablen */
var        posx
var        posy
var        oldonmousemove
var        isDragDrop        = false
var        notizen        = new Array()
var        gebi        = ((typeof(document.getElementById) == "function") || (typeof(document.getElementById) == "object"))

/* Mit der Variablen gebi wird ermittelt, ob der Browser ueber DOM-Faehigkeiten verfuegt. Weitere Pruefungen
unterbleiben, auch wenn sie eigentlich erforderlich sind. Bisher hat kein Browser hat die JavaScript-Schnittstelle
wirklich vollstaendig implementiert. */

/* --- Hilfsfunktionen --- */

/* Cookie lesen */
function get_cookie(cookie_name)
{
        var        mein_cookie        = cookie_name + "="
        var        offset        = document.cookie.indexOf(mein_cookie)
        if(offset == -1)
                return ""

        offset        += mein_cookie.length
        var        ende        = document.cookie.indexOf(";", offset)
        if(ende == -1)
                ende        = document.cookie.length
        return unescape(document.cookie.substring(offset, ende))
}

/* Cookie schreiben */
function set_cookie(cookie_name, cookie_wert, gueltigkeitszeitraum)
{
        var        ablauf_datum        = new Date()

        ablauf_datum.setTime(ablauf_datum.getTime() + gueltigkeitszeitraum * 1000)
        document.cookie        = cookie_name + "=" + escape(cookie_wert) + "; " + "expires=" + ((typeof(ablauf_datum.toUTCString) == "function") ? ablauf_datum.toUTCString() : ablauf_datum.toGMTString())
}

/* --- Bedienfunktionen --- */

/* Element id anzeigen */
function zeigen(id)
{
        document.getElementById(id).style.visibility        = "visible"
}

/* Element id verstecken */
function schliessen(id)
{
        document.getElementById(id).style.visibility        = "hidden"
}

/* Anzeige in Abhaengigkeit vom Cookie */
function anzeigen(id)
{
        var        cookie_name        = "NotizAngezeigt"
        if((get_cookie(cookie_name) == "") || mehrfach_anzeigen)
        {
                zeigen(id)
                set_cookie(cookie_name, "ja", 2678400)
        }
}

/* --- Mausbewegung --- */

/* Positionsveraenderung */
function dragdrop(e)
{
        // Verschieben aktiv?
        if(isDragDrop)
        {
                // Element ermitteln
                var        eIsObj        = (typeof(e) == "object")
                var        el        = eIsObj ? e.target : event.srcElement

                // Pruefen, ob Element die Klasse "notizen" hat; sonst Elternelemente
                while((typeof(el) == "object") && (el != null))
                {
                        if(el.className == "notizen")
                                break
                        el        = el.parentNode
                }

                // Nicht fuendig geworden?
                if((el == null) || (typeof(el) != "object"))
                        return

                // Element gefunden? Dann neue Position setzen
                if(el.className == "notizen")
                {
                        el.style.left        = posx + (eIsObj ? e.clientX : event.clientX)
                        el.style.top        = posy + (eIsObj ? e.clientY : event.clientY)
                        return false
                }
        }
        return true
}

/* Bewegung starten */
function initdrag(e)
{
        // Element ermitteln
        var        eIsObj        = (typeof(e) == "object")
        var        el        = eIsObj ? e.target : event.srcElement

        // Pruefen, ob Element die Klasse "notizen" hat; sonst Elternelemente
        while((typeof(el) == "object") && (el != null))
        {
                if(el.className == "notizen")
                        break
                el = el.parentNode
        }

        // Nicht fuendig geworden?
        if((el == null) || (typeof(el) != "object"))
                return

        // Element gefunden? Dann neue Position setzen
        if(el.className == "notizen")
        {
                // Alten z-Index merken und neuen setzen
                var        oldzIndex        = el.style.zIndex
                el.style.zIndex        = min_zIndex + notizen.length - 1

                // Notiz mit neuem z-Index suchen und alten setzen
                var tempEl
                var i
                for(i = 0; i < notizen.length; i++)
                {
                        tempEl        = document.getElementById(notizen[i])
                        if(tempEl.style.zIndex == el.style.zIndex && tempEl != el)
                        {
                                tempEl.style.zIndex        = oldzIndex
                                break
                        }
                }

                // Startposition ermitteln
                posx        = parseInt(el.style.left) - (eIsObj ? e.clientX : event.clientX)
                posy        = parseInt(el.style.top) - (eIsObj ? e.clientY : event.clientY)

                // Verschieben starten
                isDragDrop        = true
                oldonmousemove        = document.onmousemove
                document.onmousemove        = dragdrop
        }
}

/* --- Initialisierung --- */

/* Initialisierung fuer onLoad-Event */
function init()
{
        // Allen Notizen passende Indizes geben (letzte Notiz hoechster Index)
        var i
        for(i = 0; i < notizen.length; i++)
        {
                document.getElementById(notizen[i]).style.zIndex = min_zIndex + i
                anzeigen(notizen[i])
        }

        document.onmousedown        = initdrag
        document.onmouseup        = new Function("if(isDragDrop){isDragDrop = false; document.onmousemove = oldonmousemove}")
}

/* Notiz anlegen, HTML-Quelltext generieren */
function notiz_anlegen(id, left, right, html_quelltext)
{
        // Voraussetzungen nicht gegeben?
        if(!gebi)
                return

        // Notizidentifikation merken
        notizen[notizen.length]        = id

        // HTML-Quelltext ausgeben
        with(document)
        {
                open("text\/html")
                write("<div id=\"" + id + "\" style=\"left: " + left + "px; top: " + right + "px;\" class=\"notizen\" unselectable=\"on\"><div style=\"float: right;\"><a href=\"javascript:schliessen('" + id + "')\"><img src=\"" + pfad_close_img + "notiz_schliessen.gif\" width=\"13\" height=\"12\" border=\"0\" alt=\"&times;\" title=\"Schließen\"><\/a><\/div>" + html_quelltext + "<\/div>")
                write("<script language=JavaScript>window.setTimeout(\"javascript:schliessen('" + id + "')\", 14000)</script>")
                close()
        }
}

/* Initialisierungsfunktion setzen */
var        oldonload        = window.onload
if(gebi)
        window.onload        = (typeof(oldonload) == "function") ? (new Function("oldonload(); init()")) : init

// EOF
