// JavaScript-Funktionen zur Steuerung der Schriftgroesse in einem HTML-Dokument
// Copyright (C) 2005 Alexander Mueller
// Autor: Alexander Mueller
// Web:   http://www.EvoComp.de/
// Datei: fontsize.js
// The copyright notice must stay intact for use!
// You can obtain this and other scripts at http://www.EvoComp.de/scripts/skripte.html
//
// This program is distributed in the hope that it will be useful,
// but without any warranty, expressed or implied.


// !!! Benutzerdefinierte Variablen !!!
// Folgende Variablen koennen vom Benutzer definiert werden
// (die Werte werden durch entsprechend uebergebene Parameter der Funktion
//  init_FontSize ueberschrieben):
// Standardschriftgroesse
var initial_font_size = 11;
// Einheit, in der die Schriftgroesse angegeben ist
var font_unity = 'px';
// Schrittweite, mit der die Schrift erhoeht bzw. erniedrigt werden soll
var delta = 3.0;
// !!! Ende Benutzerdefinierte Variablen !!!


// zur Speicherung der aktuellen Schriftgroesse
var fsize = initial_font_size;

// Initialisierung der Schriftgroesse auf in der URL uebergebene, die der Funktion
// uebergebene bzw. oben angegebene Standardgroesse (falls keine Parameter uebergeben
// wurden)
function init_FontSize (ifs, fu, del)
{
        if (!isNaN(ifs))
                initial_font_size = parseFloat(ifs);
        if ("pt,pc,in,mm,cm,px,em,ex,%".indexOf (fu) != -1)
                font_unity = fu;
        if (!isNaN(del))
                delta = parseFloat(del);
        if (isNaN(parseFloat(document.getElementsByTagName('body')[0].style.fontSize)) || parseFloat(document.getElementsByTagName('body')[0].style.fontSize) == 0)
                fsize = getFontSize ();
        else
                fsize = parseFloat(document.getElementsByTagName('body')[0].style.fontSize);
        if (fsize != initial_font_size)
                addFontSizeToLinks ();
        document.getElementsByTagName('body')[0].style.fontSize = fsize + font_unity;
}

// Schriftgroesse um delta erhoehen
function incFontSize ()
{
        if (!isNaN(delta))
                setFontSize (Math.round((parseFloat(fsize) + parseFloat(delta)) * 100) / 100);
}

// Schriftgroesse um delta verkleinern
function decFontSize ()
{
        if (!isNaN(delta))
                setFontSize (Math.round((parseFloat(fsize) - parseFloat(delta)) * 100) / 100);
}

// Schriftgroesse um delta veraendern
function setFontSize (newsize)
{
        if(newsize<11)
        {
        document.location.href=self.location.href;
        }
        else
        {
         if(newsize>17) newsize=17;
         if(newsize<11) newsize=11;
         if (!isNaN(newsize))
         {
                 fsize = Math.round((parseFloat(newsize)) * 100) / 100;
                 document.getElementsByTagName('body')[0].style.fontSize = fsize + font_unity;
                 addFontSizeToLinks ();
         }
        };
}

// Eingestellte Schriftgroesse aus der URL auslesen bzw. Standardwert fuer die
// Schriftgroesse liefern
function getFontSize ()
{
        var fs;

        if (document.location.search != "" && (document.location.search).match (/fsize=[0-9]+\.?[0-9]*/i))
                fs = ("" + (document.location.search).match (/fsize=[0-9]+\.?[0-9]*/i)).replace (/fsize=/i, '');
        else
                fs = initial_font_size;
        return fs;
}

// Liefert die Domaenen-URL zu einer uebergebenen URL.
// Bei ungueltiger URL wird ein leeres String zurueckgegeben
function getDomainURL (URL)
{
        if (URL.match (/^((http:\/\/)?(www\.)?((([0-9a-z][0-9a-z-]+\.)+)([a-z]{2,3}))).*/))
                return URL.match (/^((http:\/\/)?(www\.)?((([0-9a-z][0-9a-z-]+\.)+)([a-z]{2,3}))).*/)[1];
        else
                return "";
}

// Schriftgroesse an interne URLs anhaengen, damit die eingestellte Schriftgroesse
// auch in Folgeseiten beibehalten wird
function addFontSizeToLinks ()
{
        // Alle Links im aktuellen HTML-Dokument bearbeiten
        for (i = 0; i < document.links.length; i++)
        {
                // Links, die dem Verschicken von E-Mails dienen und URLs, die
                // mit dem Domainnamen enden (Probleme bei IE, der die Parameter
                // in den Links anzeigt) sollen nicht parametrisiert werden.
                if (!(document.links[i].href).match (/^mailto:/)
                    && !(document.links[i].href).match (/^(http:\/\/)?(www\.)?((([0-9a-z][0-9a-z-]+\.)+)([a-z]{2,3}))[\/]+$/)
                    // nur URLs, die auf die eigene Domain zeigen sollen
                    // Parameter erhalten (keine externen Links)
                    && (document.links[i].href).indexOf (getDomainURL (self.location.href)) != -1
                    // Parameter sollen zusaetzlich noch die in 'pardomains'
                    // enthaltenen Domains erhalten.
                    //&& !(document.links[i].href).match (/ausnahmedomains/)
                    )
                {
                        // gewaehlte Schriftgroesse an den Link anhaengen bzw.
                        // bisher gespeicherte Werte durch die aktuellen ersetzen
                        if ((document.links[i].href).match (/fsize=[0-9]+\.?[0-9]{0,2}/i))
                                document.links[i].href = (document.links[i].href).replace (/fsize=[0-9]+\.?[0-9]{0,2}/i, ("fsize=" + fsize));
                        else
                                if ((document.links[i].href).indexOf ('?') != -1)
                                        document.links[i].href = document.links[i].href + "&fsize=" + fsize;
                                else
                                        document.links[i].href = document.links[i].href + "?fsize=" + fsize;
                }
        }
}