// 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.

function getElementsByClassName(class_name)
{
  var all_obj,ret_obj=new Array(),j=0,teststr;
  if(document.all)all_obj=document.all;
  else if(document.getElementsByTagName && !document.all)all_obj=document.getElementsByTagName("*");
  for(i=0;i<all_obj.length;i++)
  {
    if(all_obj[i].className.indexOf(class_name)!=-1)
    {
      teststr=","+all_obj[i].className.split(" ").join(",")+",";
      if(teststr.indexOf(","+class_name+",")!=-1)
      {
        ret_obj[j]=all_obj[i];
        j++;
      }
    }
  }
  return ret_obj;
}

// !!! 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 = 1.0;
// Einheit, in der die Schriftgroesse angegeben ist
//var font_unity = 'px';
// Schrittweite, mit der die Schrift erhoeht bzw. erniedrigt werden soll
//var delta = 2;

body = new Array('tag', 'body', 11, -1, 'px', 0.2);
h1 = new Array('tag', 'h1', 13, 17, 'px', 0.2);
h2 = new Array('tag', 'h2', 11, -1, 'px', 0.2);
h3 = new Array('tag', 'h3', 11, -1, 'px', 0.2);
input = new Array('tag', 'input', 11, -1, 'px', 0.2);
textarea = new Array('tag', 'textarea', 11, -1, 'px', 0.2);
p = new Array('tag', 'p', -1, 16, 'px', 0.2);
mainmenu = new Array('id', 'MainMenu', 11, -1, 'px', 0.2);

tags = new Array(body, h1, h2, h3, input, textarea, p, mainmenu);
// !!! 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)
function init_FontSize()
{
	//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;
 setFontSize(fsize);
}

// 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 (!isNaN(newsize))
	{
		fsize = newsize;
		for(var i=0; i<tags.length; i++) {
		  if(tags[i][0]=='tag') {
		    t = document.getElementsByTagName(tags[i][1]);
		    for(var ii=0; ii<t.length; ii++) {
		      if(tags[i][2]>=0) t[ii].style.fontSize = Math.round(tags[i][2]*newsize) + tags[i][4];
		      if(tags[i][3]>=0) t[ii].style.lineHeight = Math.round(tags[i][3]*newsize) + tags[i][4];
		    }
		  }
		  if(tags[i][0]=='id') {
		    if(tags[i][2]>=0) document.getElementById(tags[i][1]).style.fontSize = Math.round(tags[i][2]*newsize) + tags[i][4];
		    if(tags[i][3]>=0) document.getElementById(tags[i][1]).style.lineHeight = Math.round(tags[i][3]*newsize) + tags[i][4];
		  }
		}
		addFontSizeToLinks();
	}
}

//function setFontSize (newsize)
//{
//	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;
		}
	}
}


