function windowInit() {
	if(document.getElementById('menu')) {
		hiliteImgs(document.getElementById('menu'));
	}
	if(document.getElementById('main')) {
		searchImgs(document.getElementById('main'));
	}
}
window.onload = windowInit;

function hiliteImgs(elem) {
	for(var i=0; i<elem.childNodes.length; i++) {
		if(elem.childNodes[i].childNodes.length) {
			hiliteImgs(elem.childNodes[i]);
		} else if(elem.childNodes[i].nodeName == "IMG") {
			elem.childNodes[i].onmouseover = img_over;
			elem.childNodes[i].onmouseout = img_out;
			elem.childNodes[i].onclick = img_out;
		}
	}
}

var img_path;
function img_over() {
	img_path = this.getAttribute('src');
	if(img_path.indexOf('_hilite')==-1) {
		this.setAttribute('src', img_path.replace(/^(.+?)\.(jpg|png|gif)$/, '$1_hilite.$2'));
	}
}

function img_out() {
	if(img_path) {
		this.setAttribute('src', img_path);
	}
}

function parseText(text) {
	// Quick-Formatierungen umsetzen, z.B. H{sub:2}O
	var reg = (/^(.*?)\{(sub|sup|caps|small|img):([\wäöüß:\.\+\-\s]+)\}(.*)$/i).exec(text);
	if(reg) {
		text = document.createElement('span');
		text.appendChild(document.createTextNode(reg[1]));
		if(reg[2]=='caps' || reg[2]=='small') {
			var span = document.createElement('span');
			span.appendChild(document.createTextNode(reg[3]));
			span.setAttribute('class', reg[2]);
			text.appendChild(span);
		} else if(reg[2]=='img') {
			var img = document.createElement('img');
			img.setAttribute('src', '/img/'+reg[3]);
			img.setAttribute('alt', '');
			img.style.verticalAlign='middle';
			text.appendChild(img);
		} else {
			var elem = document.createElement(reg[2]);
			elem.appendChild(document.createTextNode(reg[3]));
			text.appendChild(elem);
		}
		// String rekursiv verarbeiten, Kindknoten in den Strukturbaum kopieren
		var text2 = parseText(reg[4]);
		for(var i=0; i<text2.childNodes.length; i++) {
			text.appendChild(text2.childNodes[i].cloneNode(true));
		}
	} else {
		var tmp = text;
		text = document.createElement('span');
		text.appendChild(document.createTextNode(tmp));
	}
	return text;
}

function selectText(elem) {
	// elem: zu markierendes DOM-Node
	if (document.selection && document.selection.createRange) {
		var textRange = document.selection.createRange();
		textRange.moveToElementText(elem);
		textRange.select();
	} else if (document.createRange && window.getSelection) {
		var range = document.createRange();
		range.selectNode(elem);
		var selection = window.getSelection();
		selection.removeAllRanges();
		selection.addRange(range);
	}
}

function unselectText() {
	if(document.selection && document.selection.empty){
		document.selection.empty() ;
	} else if(window.getSelection) {
		var selection = window.getSelection();
		if(selection && selection.removeAllRanges)
		selection.collapseToEnd();
		selection.removeAllRanges();
	}
}

function round2dec(x) {
	var str = (Math.round(x * 100) / 100).toString();
	str += (str.indexOf('.') == -1) ? '.00' : '00';
	return str.substring(0, str.indexOf('.') + 3);
}

function objLength(obj) {
	i=0;
	for(var x in obj) {
		i++;
	}
	return i;
}

function initRequest() {
	var request;
	try {
		request = new XMLHttpRequest();
	} catch(e) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(failed) {
				request = null;
			}
		}
	}
	return request;
}

// Bilder on-click Vergrößerung Script Ver 1.6
// Bilder im Inhalt suchen, Bilder in Links ausschließen

var imgLayer, imgBox, imgLoad, imgLarge, imgPrev, imgNext, imgReady;
var imgData = new Object();

var imgGroup = 0;

function searchImgs(elem) {
	// Alte IE-Versionen (<8) ausschließen
	/*@cc_on
		@if (@_jscript_version < 5.8)
			return false;
		@end
	@*/
	var cl, x, id, ti, src;
	for(var i=0; i<elem.childNodes.length; i++) {
		if(elem.childNodes[i].nodeName == "IMG" && elem.childNodes[i].parentNode.nodeName != "A") {
			// Bilddaten einlesen
			x = objLength(imgData);
			ti = elem.childNodes[i].getAttribute('title') || elem.childNodes[i].getAttribute('alt');
			src = elem.childNodes[i].getAttribute('src');
			id = elem.childNodes[i].getAttribute('id') || 'on_click_img_'+x
			// Bilddaten speichern (0:title, 1:src(small), 2:src(large), 3:group)
			imgData[id] = new Array(ti, src, null, imgGroup);
			// on-click Vergrößerung aktivieren
			cl = elem.childNodes[i].getAttribute('class');
			cl = cl?(cl+' on_click_img'):'on_click_img';
			elem.childNodes[i].setAttribute('class', cl);
			elem.childNodes[i].setAttribute('id', id);
			elem.childNodes[i].onclick = enlargeOnClickHandler;
		} else if(elem.childNodes[i].childNodes.length) {
			// neue Gruppe bei neuem Abschnitt
			if(elem.childNodes[i].nodeName == "H1") {
				imgGroup++;
			}
			searchImgs(elem.childNodes[i]);
		}
	}
}

function enlargeOnClickHandler() {
	initEnlargeImg(this.getAttribute('id'));
}

function initEnlargeImg(id) {
	// voriges und folgendes Bild ermitteln
	var pi, prev, next, stop;
	var mygroup = imgData[id][3];
	for(var x in imgData) {
		if(imgData[x][3]==mygroup) {
			if(stop) {
				next = x;
				break;
			} else if(id==x) {
				prev = pi;
				stop = true;
			} else {
				pi = x;
			}
		}
	}
	// Layer initialisieren
	if(!imgLayer) {
		imgLayer = document.createElement('div');
		imgLayer.setAttribute('id', 'on_click_layer');
		imgLayer.onclick = function() {removeImg(true)};
		document.getElementsByTagName('body')[0].appendChild(imgLayer);
	}
	// Bild-Box
	imgBox = document.createElement('div');
	imgBox.setAttribute('id', 'on_click_box');
	// Schließen-Button
	var imgClose = document.createElement('span');
	imgClose.setAttribute('class', 'close');
	imgClose.onclick = function() {removeImg(true)};
	imgBox.appendChild(imgClose);
	document.getElementsByTagName('body')[0].appendChild(imgBox);
	// Zurück-Button
	if(prev) {
		imgPrev = document.createElement('div');
		imgPrev.setAttribute('id', 'on_click_prev');
		imgPrev.onclick = function() {removeImg(false); initEnlargeImg(prev)};
		document.getElementsByTagName('body')[0].appendChild(imgPrev);
	}
	// Vor-Button
	if(next) {
		imgNext = document.createElement('div');
		imgNext.setAttribute('id', 'on_click_next');
		imgNext.onclick = function() {removeImg(false); initEnlargeImg(next)};
		document.getElementsByTagName('body')[0].appendChild(imgNext);
	}
	// Navigation mit Pfeiltasten
	document.onkeydown = function(ev) {
		if(imgReady) {
			if(!ev) ev = window.event;
			if(prev && ev.keyCode==37) {removeImg(false); initEnlargeImg(prev);}
			if(next && ev.keyCode==39) {removeImg(false); initEnlargeImg(next);}
			if(ev.keyCode==27) {removeImg(true);}
		}
	};
	// Warte-Uhr
	imgLoad = document.createElement('div');
	imgLoad.setAttribute('id', 'on_click_load');
	document.getElementsByTagName('body')[0].appendChild(imgLoad);
	// Bild vorbereiten, Title kopieren
	imgLarge = document.createElement('img');
	imgLarge.setAttribute('id', 'on_click_image');
	imgLarge.setAttribute('title', imgData[id][0]?imgData[id][0]:'');
	// URL des größeren Bildes suchen (AJAX)
	findLargeImg(id);
}

function removeImg(layer) {
	imgReady = false;
	imgLarge.onload = null;
	imgLarge = null;
	imgLoad.parentNode.removeChild(imgLoad);
	imgBox.parentNode.removeChild(imgBox);
	if(imgPrev) {
		imgPrev.parentNode.removeChild(imgPrev);
		imgPrev = null;
	}
	if(imgNext) {
		imgNext.parentNode.removeChild(imgNext);
		imgNext = null;
	}
	if(layer) {
		imgLayer.parentNode.removeChild(imgLayer);
		imgLayer = null;
	}
	document.onkeydown = null;
}

function findLargeImg(id) {
	if(!imgData[id][2]) {
		// Bildquelle nachladen, sofern noch nicht geschehen
		var request = initRequest();
		if(request!=null) {
			var url = '/scripts/getimage?img='+encodeURIComponent(imgData[id][1]);
			request.open("GET", url, true);
			// Request-Handler-Funktion
			request.onreadystatechange = function() {
				if(request.readyState==4) {
					if(request.status==200) {
						var xml = request.responseXML;
						var imgurl = xml.getElementsByTagName('imgurl')[0].firstChild.nodeValue;
						// URL speichern
						imgData[id][2] = decodeURIComponent(imgurl);
						loadLargeImage(id);
					} else {
						alert("Leider ist ein Fehler passiert!");
					}
				}
			};
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			request.send(null);
		}
	} else {
		loadLargeImage(id);
	}
}

function loadLargeImage(id) {
	// Prüfen, ob Ladevorgang abgebrochen wurde
	if(imgLarge) {
		// Bild laden
		imgLarge.setAttribute('src', imgData[id][2]);
		imgBox.appendChild(imgLarge);
		// Warten, wenn Bild noch nicht geladen
		if(!imgLarge.complete) {
			imgLarge.onload = function() {showLargeImg(id)};
		} else {
			showLargeImg(id);
		}
	}
}

function showLargeImg(id) {
	// Prüfen, ob Ladevorgang abgebrochen wurde
	if(imgLarge) {
		// Fenstergröße neu laden
		var wW = window.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
		var wH = window.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
		// Bild anzeigen -> IE liest sonst Bildabmessungen nicht aus!
		imgBox.style.display = 'block';
		// Bildabmessungen laden
		var iW = imgLarge.width;
		var iH = imgLarge.height;
		// zu große Bilder automatisch skalieren
		if(iW > (wW-100)) {
			iW = wW-100;
			iH = iH/imgLarge.width * iW;
		}
		if(iH > (wH-200)) {
			iH = wH-200;
			iW = iW/imgLarge.height * iH;
		}
		// Bild skalieren
		imgLarge.setAttribute('width', parseInt(iW));
		imgLarge.setAttribute('height', parseInt(iH));
		// Imgbox positionieren (Mindestgröße 300px)
		var minSize = 300;
		var padding = 20;
		var paddingV = (iH<minSize)?((minSize-iH)/2-20):0;
		paddingV = (paddingV<20)?0:paddingV;
		var bW = (iW<minSize)?minSize:iW;
		imgBox.style.top = (wH/2-iH/2-(paddingV?paddingV:padding)-20)+'px';
		imgBox.style.left = (wW/2-bW/2-padding)+'px';
		imgBox.style.width = bW+'px';
		imgBox.style.padding = paddingV?(paddingV+'px '+padding+'px'):padding+'px';
		// Status ausblenden
		imgLoad.style.display = 'none';
		// Beschreibung einblenden
		if(imgData[id][0]) {
			var imgText = document.createElement('p');
			imgText.appendChild(document.createTextNode(imgData[id][0]));
			imgBox.appendChild(imgText);
		}
		// Runde Ecken hinzufügen
		addRoundCorners(imgBox);
		// Navigation anzeigen
		if(imgPrev) imgPrev.style.display = 'block';
		if(imgNext) imgNext.style.display = 'block';
		imgReady = true;
	}
}

function addRoundCorners(elem) {
	var rC = new Array('t', 'r', 'b', 'l', 'tl', 'tr', 'bl', 'br');
	var cl;
	// Ecken laden
	for(var i=0; i<rC.length; i++) {
		cl = rC[i];
		rC[i] = document.createElement('div');
		rC[i].setAttribute('class', 'round_corners '+cl);
		switch(cl) {
			case 't':
			case 'b':
				rC[i].style.width = (elem.offsetWidth-2)+'px';
				break;
			case 'r':
			case 'l':
				rC[i].style.height = (elem.offsetHeight-2)+'px';
				break;
			default: break;
		}
		elem.appendChild(rC[i]);
	}
	return elem;
}

function absLeft(elem) {
	return (elem.offsetParent)? elem.offsetLeft+absLeft(elem.offsetParent) : elem.offsetLeft;
}

function absTop(elem) {
	return (elem.offsetParent)? elem.offsetTop+absTop(elem.offsetParent) : elem.offsetTop;
}
