/*
 * (c) 2008-2009 Mathias Karstaedt, Birger Pannwitt
 * Version 1.0.0
 */

//Font Size Selector kann angepasst werden
var fontSizeSelector = '.content iframe, .content p, .content table, .content h1, .content h2, .content h3, .content h4, .content li';
var iframeFontSizeSelector = new Array('p','h1','h2','h3','label','table','span','td');

var minFontSz = 10;
var maxFontSz = 20;

//Cookie Einstellungen
var fontSizeCookie = null;
var fontSizeMode = null;
var realFontSizeInc = 0;

/* 
 * Reduziert die aktuelle Schriftgröße einmalig um inc Pixel.
 * Wird kein Wert angegeben, so wird ein voreingestellter Wert verwendet.
 */
function reduceFontSize(inc) {
	if (null==inc) { inc = 2; }
	
	fontSizeMode = fontSizeCookie.get('font-size-mode');
	if ('reduceOnce'!=fontSizeMode) {
		i = 0 - realFontSizeInc - inc;
	
		//fontSizeCookie.put('font-size-inc', i); // wird in changeFontSize(i) gesetzt
		fontSizeCookie.put('font-size-mode', 'reduceOnce');
		changeFontSize(i);
	}
}

/* 
 * Erhoeht die aktuelle Schriftgröße einmalig um inc Pixel.
 * Wird kein Wert angegeben, so wird ein voreingestellter Wert verwendet.
 */
function incrementFontSize(inc) {
	if (null==inc) { inc = 2; }
	
	fontSizeMode = fontSizeCookie.get('font-size-mode');
	if ('incrementOnce'!=fontSizeMode) {
		i = 0 - realFontSizeInc + inc;
		
		//fontSizeCookie.put('font-size-inc', i); // wird in changeFontSize(i) gesetzt
		fontSizeCookie.put('font-size-mode', 'incrementOnce');
		changeFontSize(i);
	}
}

function resetFontSize() {
	changeFontSize();
	fontSizeCookie.remove('font-size-mode');
	fontSizeCookie.remove('font-size-inc');
}

//Erhoeht den FontSize der durch fontSizeSelector definierten Elemente um inc Pixel.
function changeFontSize(inc) {
	if (inc) { realFontSizeInc = realFontSizeInc + inc; }
	else { realFontSizeInc = 0; }
	
	fontSizeCookie.put('font-size-inc', realFontSizeInc);
	$$(fontSizeSelector).each(function(el) {
		if (el.nodeName=='IFRAME') {
			if (inc) { 
				changeIFrameFontSize(el, inc); 
			} else {
				resetIFrameFontSize(el);
			}//else
		} else {
			if (inc) {
				try {incFontSizeOfElement(el, inc);}catch(e) {};
				try {incLineHeightOfElement(el, inc);}catch(e) {};
			} else {
				el.style.fontSize = "";
				el.style.lineHeight = "";
			}
		}//else
	});
}

function changeIFrameFontSize(iframe, inc) {
	var iframeWindow = (iframe.contentWindow || (null!=iframe.contentDocument && iframe.contentDocument.defaultView));
	var iframeDocument =  iframe.contentDocument || iframe.document;
	if (iframeWindow) {
		iframeDocument = iframeWindow.document;
	}
	
	iframeFontSizeSelector.each(function(tagName) {
		var paras = iframeDocument.getElementsByTagName(tagName);
		for (i=0; i<paras.length; i++) {
			var el = $(paras[i]);
			//alert("ELEM: " + el);
			try {incFontSizeOfElement(el, inc);}catch(e) {alert(e + " " + el + " " + el.nodeName)};
			try {incLineHeightOfElement(el, inc);}catch(e) {};
		};
	});
}

function resetIFrameFontSize(iframe) {
	var iframeWindow = (iframe.contentWindow || iframe.contentDocument.defaultView);

	iframeFontSizeSelector.each(function(tagName) {
		var paras = iframeWindow.document.getElementsByTagName(tagName);
		for (i=0; i<paras.length; i++) {
			var el = $(paras[i]);
			el.style.fontSize = "";
			el.style.lineHeight = "";
		};
	});
}

//Initialisiert den FontSize der durch fontSizeSelector definierten Elemente beim laden der Seite
function initFontSize() {
	fontSizeCookie = new CookieJar({
		expires: 3600,   // seconds
		path: '/'
	});
	
	fontSizeMode = fontSizeCookie.get('font-size-mode');
	if (null==fontSizeMode) {
		fontSizeMode = 'dynamic';
	}
	
	var fontSizeInc = fontSizeCookie.get('font-size-inc');
	if (fontSizeInc) {
		realFontSizeInc = parseInt(fontSizeInc);
		//alert('init font sizes... ' + realFontSizeInc);
		$$(fontSizeSelector).each(function(el) {
			if (el.nodeName=='IFRAME') {
				changeIFrameFontSize(el, realFontSizeInc);
				Event.observe(el, 'load', function(){
					changeIFrameFontSize(el, realFontSizeInc);
				});
			} else {
				try {incFontSizeOfElement(el, realFontSizeInc);}catch(e) {};
				try {incLineHeightOfElement(el, realFontSizeInc);}catch(e) {};
			}
		});
	}
}

//FontSize von el um inc erhoehen
function incFontSizeOfElement(el, inc) {
	//var fontSize = el.getStyle('font-size');
	//var fontSize = el.style.fontSize;
	var fontSize = Element.getStyle(el, 'font-size');
	var size = 12;
	if(fontSize) {
		if (fontSize.indexOf('pt') > -1) {
			size = parseInt(fontSize.replace("pt", "")) + 3; //pt to px conversion (approx.)
		} else {
			size = parseInt(fontSize.replace("px", ""));
		}
	}
	newFontSz = size + inc;
	//alert(el.nodeName + ":" + el.className + " ft-sz: " + newFontSz);
	if (newFontSz >= minFontSz && newFontSz <= maxFontSz) {
		el.style.fontSize = newFontSz + 'px';
	}
}

//LineHeight von el um inc erhoehen
function incLineHeightOfElement(el, inc) {
	var lineHeight = el.getStyle('line-height');
	//var lineHeight = Element.getStyle(el, 'line-height');
	var size = 12;
	if(lineHeight) {
		if (lineHeight.indexOf('pt') > -1) {
			size = parseInt(lineHeight.replace("pt", "")) + 3; //pt to px conversion (approx.)
		} else {
			size = parseInt(lineHeight.replace("px", ""));
		}
	}
	newFontSz = size + inc;
	if (newFontSz >= minFontSz && newFontSz <= maxFontSz)
		el.style.lineHeight = newFontSz + 'px';
}

//OnLoad initialisieren
Event.observe(window, 'load', initFontSize);
