// No More IE6 Background Flicker - http://www.hedgerwow.com/360/bugs/dom-fix-ie6-background-image-flicker.html
(function(){ /*Use Object Detection to detect IE6*/ var m = document.uniqueID /*IE*/ && document.compatMode /*>=IE6*/ && !window.XMLHttpRequest /*<=IE6*/ && document.execCommand ; try{ if(!!m){ m("BackgroundImageCache", false, true) /* = IE6 only */ } }catch(oh){}; })();
// Load Function on DOM.Contentload - crossbrowser
function onContent(f){//(C)webreflection.blogspot.com
var b=navigator.userAgent,d=document,w=window,
c="__onContent__",e="addEventListener",o="opera",r="readyState",
s="<scr".concat("ipt defer src='//:' on",r,"change='if(this.",r,"==\"complete\"){this.parentNode.removeChild(this);",c,"()}'></scr","ipt>");
w[c]=(function(o){return function(){w[c]=function(){};f(o?o():o)}})(w[c]);
if(d[e])d[e]("DOMContentLoaded",w[c],false);
if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))
(function(){/loaded|complete/.test(d[r])?w[c]():setTimeout(arguments.callee,1)})();
else if(/MSIE/i.test(b))d.write(s);
};
/**
  * Generic add/removeEvent functionality
  *
  * @author Tino Zijdel ( crisp@xs4all.nl )
  * @version 1.2 (short version)
  * @date 2005-10-21
  */
function addEvent(obj, evType, fn)
{
	var evTypeRef = '__' + evType;

	if (obj[evTypeRef])
	{
		if (array_search(fn, obj[evTypeRef]) > -1) return;
	}
	else
	{
		obj[evTypeRef] = [];
		if (obj['on'+evType]) obj[evTypeRef][0] = obj['on'+evType];
		obj['on'+evType] = handleEvent;
	}

	obj[evTypeRef][obj[evTypeRef].length] = fn;
}

function removeEvent(obj, evType, fn)
{
	var evTypeRef = '__' + evType;

	if (obj[evTypeRef])
	{
		var i = array_search(fn, obj[evTypeRef]);
		if (i > -1) delete obj[evTypeRef][i];
	}
}

function handleEvent(e)
{
	e = e || window.event;
	var evTypeRef = '__' + e.type, retValue = true;

	for (var i = 0, j = this[evTypeRef].length; i < j; i++)
	{
		if (this[evTypeRef][i])
		{
			this.__fn = this[evTypeRef][i];
			retValue = this.__fn(e) && retValue;
		}
	}

	if (this.__fn) try { delete this.__fn; } catch(e) { this.__fn = null; }

	return retValue;
}

function array_search(val, arr)
{
	var i = arr.length;

	while (i--)
		if (arr[i] && arr[i] === val) break;

	return i;
}
/*
JSTarget function by Roger Johansson, www.456bereastreet.com
*/
var JSTarget = {
	init: function(att,val,warning) {
		if (document.getElementById && document.createElement && document.appendChild) {
			var strAtt = ((typeof att == 'undefined') || (att == null)) ? 'rel' : att;
			var strVal = ((typeof val == 'undefined') || (val == null)) ? 'external' : val;
			var arrLinks = document.getElementsByTagName('a');
			var oLink;
			var oRegExp = new RegExp("(^|\\s)" + strVal + "(\\s|$)");
			for (var i = 0; i < arrLinks.length; i++) {
				oLink = arrLinks[i];
				if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))) {
					oLink.onclick = JSTarget.openWin;
				}
			}
			oWarning = null;
		}
	},
	openWin: function(e) {
		var event = (!e) ? window.event : e;
		if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return true;
		else {
		    var oWin = window.open(this.getAttribute('href'), '_blank');
			if (oWin) {
				if (oWin.focus) oWin.focus();
				return false;
			}
			oWin = null;
			return true;
		}
	}
};
//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function jscss(a,o,c1,c2)
{
  switch (a){
    case 'swap':
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1):
      o.className.replace(c1,c2);
    break;
    case 'add':
      if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}
/*
Klassen per JavaScript ändern (funktioniert auch bei mehreren vergebenen Klassen
http://ichwill.net/cssjsseparation.html
Diese Beispielfunktion erwartet vier Parameter

a   gibt an, welche Aktion die Funktion ausführen soll.
o   das Objekt, auf das die Aktion angewandt wird.
c1  der Name der ersten Klasse
c2  der Name der zweiten Klasse

Mögliche Aktionen sind:
swap     tauscht Klasse c1 gegen Klasse c2 aus.
add      fügt Klasse c1 dem Objekt o hinzu.
remove   löscht Klasse c1.
check    prüft, ob Klasse c1 schon dem Objekt o hinzugefügt wurde und gibt true oder false zurück. 

*/

var ImageScale = {
	statreload: null,
	xmlHttp: null,
	IMGalt: null,
	IMGname: null,
	IMGid: null,
	init: function() {
		if(document.getElementById('meisterwerk')) {
			var img = document.getElementById('meisterwerk');
			this.IMGalt = img.alt;
			this.IMGname = img.name;
			this.IMGid = img.id;
			ImageScale.check();
		}
	},
	check: function() {
		if(document.getElementById('meisterwerk')) {			
			ImageScale.statreload = true;
		} 
		var arrayPageSize = getPageSize();
		var newHeight = arrayPageSize[3]-97;
		var newWidth = arrayPageSize[2]-310;
		if(bHeight != newHeight || bWidth != newWidth) {
			ImageScale.setSize(newWidth,newHeight);	
		}
	},
	setSize: function(width,height) {
		var loader = document.getElementById('laden');
		loader.style.display = "block";
		var innerWidth = width - 190;
		var innerHeight = height - 80;
		this.xmlHttp= this.GetXmlHttpObject();
		if (this.xmlHttp==null) {
		  alert ("Your browser does not support AJAX!");
		  return;
		} 
		var url="/content/setvars.php";
		url=url+"?w1="+innerWidth+"&w2="+width+"&h1="+innerHeight+"&h2="+height;
		if (document.getElementById('meisterwerk')) {
			var img = document.getElementById('meisterwerk');
			var imgID = img.name;
			url=url+"&id="+imgID;
		} 
		this.xmlHttp.onreadystatechange=this.stateChanged;
		this.xmlHttp.open("POST",url,true);
		this.xmlHttp.send(null);
	},
	changeImage: function() {
		var imgDetails = this.getMarkupById(ImageScale.xmlHttp.responseXML);
		var loader = document.getElementById('laden');
		var img = document.getElementById('meisterwerk');
		if(imgDetails != 'error') {
			if(imgDetails["left"]=='1') {
				jscss('add',document.getElementsByTagName("body").item(0),'imageleft')
			} else {
				jscss('remove',document.getElementsByTagName("body").item(0),'imageleft')
			}
			var imgID = img.name;
			var imgSRC = "/tools/imager/imager.php?file=%2Fmedia%2Fgallery%2Foriginal%2F"+imgID+".jpg&width="+imgDetails["width"]+"&height="+imgDetails["height"];
			imgPreloader = new Image();
			imgPreloader.onload=function(){
				loader.style.display = "none";
				ImageScale.removeImage();
				ImageScale.createImage(imgSRC);
			}
			imgPreloader.src = imgSRC;		
		} else {
			loader.style.display = "none";
		}
	},
    removeImage: function() {
		var delstat = document.getElementById("imgwrapper").removeChild(document.getElementById("meisterwerk"));
	},
    createImage: function(imgSRC) {
		var Meisterwerk = document.createElement("img");
		Meisterwerk.setAttribute('src', imgSRC);
		Meisterwerk.setAttribute('id', IMGid);
		Meisterwerk.setAttribute('name', IMGname);
		Meisterwerk.setAttribute('alt', IMGalt);
		document.getElementById("imgwrapper").appendChild(Meisterwerk);
	},
    getMarkupById: function(markup) {
		if(markup != null) {
			var imagedetail = Array();
			if(markup.getElementsByTagName("height")[0].childNodes[0]) {
				imagedetail["height"] = markup.getElementsByTagName("height")[0].childNodes[0].nodeValue;
			}
			if(markup.getElementsByTagName("width")[0].childNodes[0]) {
				imagedetail["width"] = markup.getElementsByTagName("width")[0].childNodes[0].nodeValue;
			}
			if(markup.getElementsByTagName("left")[0].childNodes[0]) {
				imagedetail["left"] = markup.getElementsByTagName("left")[0].childNodes[0].nodeValue;
			}
			
		} else {
			var imagedetail = 'error';
		}
		return imagedetail;
	}, 
	stateChanged: function() { 
		if (ImageScale.xmlHttp.readyState==4) { 
			if(ImageScale.statreload) {
//				setTimeout('ImageScale.changeImage()', 2000);
				ImageScale.changeImage()
			}
		}
	},
	GetXmlHttpObject: function() {
		var xmlHttp=null;
		try{
		  // Firefox, Opera 8.0+, Safari
		  xmlHttp=new XMLHttpRequest();
		}
		catch (e)
		  {
		  // Internet Explorer
		  try
			{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
		  catch (e)
			{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
		  }
		return xmlHttp;
	}
}
/* http://blog.stchur.com/2006/09/06/the-ie-resize-bug-revisited/ */
var onResize = {
	resize: function() {
		var currentSize = onResize.getViewportSize();
		if (currentSize[0] != g_prevSize[0] || currentSize[1] != g_prevSize[1]) {
			g_prevSize = currentSize;
			ImageScale.check();
		}
	},
	init: function() {
		if(document.getElementById('meisterwerk')) {
			window.g_prevSize = onResize.getViewportSize();
			setInterval(onResize.resize, 100);
		}
	},
	getViewportSize: function() {
		var size = [0, 0];
		if (typeof window.innerWidth != 'undefined') {
			size = [ window.innerWidth, window.innerHeight ];
		} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)	{
			size = [ document.documentElement.clientWidth, document.documentElement.clientHeight ];
		} else {
			size = [ document.getElementsByTagName('body')[0].clientWidth, document.getElementsByTagName('body')[0].clientHeight ];
		}	
		return size;
	}
}

//addEvent(window, 'resize', ImageScale.check);
addEvent(window, 'load', JSTarget.init);
addEvent(window, 'load', ImageScale.init);
addEvent(window, 'load', onResize.init);
