// 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 = 12;
// Einheit, in der die Schriftgroesse angegeben ist
var font_unity = 'px';
// Schrittweite, mit der die Schrift erhoeht bzw. erniedrigt werden soll
var delta = 2;
// !!! 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 erhoehen
function changeFontSize (string)
{
	switch(string)
	{
		case 'plus':

			if(document.getElementById('navigation').style.fontSize < 16)
			{
				setFontSize(110);
			}
			else
			{
				alert('Maximale Schriftgroesse erreicht');
			}
		break;
		case 'minus':
			setFontSize(90);
		break;
	}
}

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

function getActualHeight(pa){
	pa= pa || document.body;
	var who= document.createElement('div');
	var atts= {fontSize:'1em',padding:'0',position:'absolute',lineHeight:'1',visibility:'hidden'};
	for(var p in atts){
		who.style[p]= atts[p];
	}
	who.appendChild(document.createTextNode('M'));
	pa.appendChild(who);
	//var fs= [who.offsetWidth,who.offsetHeight];
	var fs= who.offsetHeight;
	pa.removeChild(who);
	return fs;
}

// Schriftgroesse um delta veraendern
function setFontSize (newsize)
{
	var oldsize = new Array();
	var newstylesize = new Array();
	var tags = new Array('a','p','li','h1','h2','h3','h4','h5','h6','dd');
	
	for(j=0;j<tags.length;j++)
	{
	if (!isNaN(newsize))
	{
		fsize = Math.round((parseFloat(newsize)) * 100) / 100;
		//document.getElementsByTagName('body')[0].style.fontSize = fsize + font_unity;
		atags = document.getElementsByTagName(tags[j]);

		for(i=0;i<atags.length;i++)
		{
			oldsize[i] = getActualHeight(atags[i]);
			newstylesize[i] = (oldsize[i] * newsize) / 100;
		}
		for(i=0;i<atags.length;i++)
		{
			atags[i].style.fontSize = newstylesize[i] + font_unity;
		}
		//SetCookie('fontsize',fsize,1);

		
		
		//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;
		}
	}
}

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function ReadCookie(cookieName) {
 var theCookie=""+document.cookie;
 var ind=theCookie.indexOf(cookieName);
 if (ind==-1 || cookieName=="") return ""; 
 var ind1=theCookie.indexOf(';',ind);
 if (ind1==-1) ind1=theCookie.length; 
 return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}



