/**
* @author: Jan Mentzel http://jan.islandofwaiting.de
* @date: 2007-07-09
*/

//debug.off = true;
/**
* static class Compat
* to check browser-capabilities and display warnings accordingly.
* provides browser information as static boolean members:
* Compat.MSIE   ... MSIE all versions
* Compat.MSIE5  ... MSIE 5.x
* Compat.MSIE6  ... MSIE 6.x
* Compat.MSIE7  ... MSIE 7.x
* Compat.MAC    ... Macintosh OS (all versions)
* Campat.GECKO  ... Gecko Browser all OSs
*
* @author Jan Mentzel - http://jan.islandofwaiting.de
* @date 2006-03-23
* @namespace Compat
*/
var Compat = {
	/**
	* init browser information
	* @method
	* @alias Compat.init
	* @return {void}
	*/
	init: function() {
		var uag = navigator.userAgent;
		Compat.MSIE = Compat.MSIE5 = Compat.MSIE6 = Compat.Win = false;
		var m = /MSIE\s*(\d+)(\.\d+)?/.exec(uag);
		if(m) {
			/** MSIE all versions
			 * @memberOf Compat
			 * @type {boolean}
			 */
			Compat.MSIE = true;
			var version = m[1]-0;
			if(version < 6) {
				Compat.MSIElt6 = true;
			}else if(version < 7) {
				Compat.MSIElt7 = true;
			}
			if(version == 5) {
				Compat.MSIE5 = true;
			} else if(version == 6) {
				Compat.MSIE6 = true;
			} else if(version == 7) {
				Compat.MSIE7 = true;
			}
		}
		/*
		m = /\bWindows/i.exec(uag);
		if(m) {
			Compat.Win = true;
		}
		m = /\bMAC/i.exec(uag);
		if(m) {
			Compat.MAC = true;
		}
		m = /\bX11/i.exec(uag);
		if(m) {
			Compat.X11 = true;
		}
		m = /\bKHTML\b/.exec(uag);
		if(m) {
			Compat.KHTML = true;
		}
		*/

		Compat.Win = /\bWindows/i.test(uag);
		Compat.MAC = /\bMAC/i.test(uag);
		Compat.X11 = /\bX11/i.test(uag);
		Compat.KHTML = /\bKHTML\b/.test(uag);
		Compat.SAFARI = Compat.MAC && Compat.KHTML;
		Compat.GECKO = /\bGecko\b/.test(uag)
		
		m = /Konqueror\/(\d+)(\.(\d+))?/.exec(uag);
		if(m) {
			Compat.KDE = true;
			var version = m[1]-0 + (isNaN(m[3]) ? 0 : (m[3]-0)/100.0); // version "3.4" becomes decimal 3.04 so subversions larger 9 up to 99 work
			if(version < 3.04) {
				Compat.KDElt34 = true;
			}
			Compat.GECKO = false;
		}
	}
}
Compat.init();
//debug.dump(Compat);

function fixIE() {
	// allen <a class="block">  das a.block:before  "< " anfuegen
	var e = document.getElementsByTagName('a');
	for(var i = e.length-1; i > -1; i--) {
		if(e[i].className == 'block') {
			e[i].innerHTML = '&gt; '+ e[i].innerHTML;
		}
	}
	// allen <h1>  das h1:before  "// " anfuegen
	e = document.getElementsByTagName('h1');
	for(var i = e.length-1; i > -1; i--) {
		e[i].innerHTML = '// '+ e[i].innerHTML;
	}
}
/**
* @param self the toggle-control beeing clicked (link, button)
* @param id the html element to toggle on/off
*/
function toggle(self, id) {
	var elem = document.getElementById(id);
	if(elem.style.display == 'block') {
		elem.style.display = 'none';
		self.className = 'toggle-closed';
	} else {
		elem.style.display = 'block';
		self.className = 'toggle-open';
		window.scrollTo(0, getTop(elem));
	}
}
function getLeft(l) {
	if(l.offsetParent)
		return l.offsetLeft + getLeft(l.offsetParent);
	return l.offsetLeft;
}
function getTop(l) {
	if(l.offsetParent)
		return l.offsetTop + getTop(l.offsetParent);
	return l.offsetTop;
}
/**
* Class Player - a singleton
*/
function Player() {
	// das Bild ueber dem sich der Player positioniert hat
	this.currentButton = null;
}
Player.getInstance = function() {
	if(Player._instance == null)
		Player._instance = new Player();
	return Player._instance;
}
Player._instance = null;
Player.playMovie = function(button) {
	Player.getInstance().playMovie(button)
}

Player.prototype.playMovie = function(button) {
	// wichtig _fileName und _size muessen an das htmlelement 'button' dekoriert worden sein
	var fileName = button._fileName;
	var size = button._size;
	if(this.currentButton != null) {
		this.currentButton.style.visibility = 'visible';
	}
	
	var images = button.parentNode.getElementsByTagName('img');
	if(images.length == 0)
		throw new Error("no images in parent: "+ button.parentNode.tagName);
	if(images.length % 2 != 0) {
		//debug('WARNING: images.length is not even: '+ images.length);
	}
	var hookImage = null;
	var width = null;
	var player = null
	switch(size) {
	case 'small':
		width = 384;
		player = "flv_player_small.swf"
		hookImage = images[images.length -1];
		break;
	case 'big':
		width = 768;
		player = "flv_player_big.swf"
		// last image as fallback 
		hookImage = images[images.length - (images.length >= 2 ? 2 : 1)];
		break;
	default:
		throw new Error("unhandled size: "+ size);
	}
	//debug('hookImage:'+ hookImage.tagName +' '+ hookImage.src +' top:'+ hookImage.top +' width:'+ width +' player:'+ player);

	var buf = [];
	buf.push(
		'<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="', width ,'" height="305" id="portfolio_2007" align="middle">'
		,'<param name="allowScriptAccess" value="sameDomain" />'
		,'<param name="movie" value="', player ,'?file_name=', fileName ,'" />'
		,'<param name="quality" value="high" /><param name="bgcolor" value="#f0f0f0" /><embed src="', player ,'?file_name=', fileName ,'" quality="high" bgcolor="#f0f0f0" width="', width ,'" height="305" name="portfolio_2007" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'
		,'</object>'
	);
	//debug.dump(buf);

	var playerDiv = document.getElementById('player');
	playerDiv.innerHTML = "";
	
	var body = document.getElementById('body');
	playerDiv.style.top  = getTop(hookImage)  +'px';
	playerDiv.style.left = getLeft(hookImage) +'px';
	playerDiv.style.width = width +'px';
	
	playerDiv.innerHTML = buf.join('\n');
	button.style.visibility = 'hidden';
	this.currentButton = button;
}

function init() {
	var pat = /player\.php\?file_name=([^&]+)&size=(\w+)/;
	var e = document.getElementsByTagName('a');
	for(var i = e.length-1; i > -1; i--) {
		if(e[i].href.search(pat) != -1) {
			var a = e[i];
			// I know IE6 only renders css :hover if href attribute present - ignored
			a.removeAttribute('href');
			a._fileName = RegExp.$1;
			a._size = RegExp.$2;
			a.onclick = function() {
				//debug('_name:'+ this._fileName +' _size:'+ this._size);
				Player.playMovie(this);
			};
			//debug('file_name: '+ a._fileName +' size: '+ a._size);
			a.removeAttribute('target');
		}
	}
	Player.playMovie(document.getElementById('showreelButton'));
	
	var addr = deobfuscate([107,64,81,87,69,75,79,66,70,72,70,71,73,72,14,26,2,17,31,19,5,5,7,6,1,25,120,94,78,81,87,81,96,108,98,4,33,55,43,38,38,48,118,41,62,115,68,9,63,63,104,115,100,102,102,119,117,121,104,104,106,125,111,105,83,65,83,90,68,72,70,42,7,11,3,7,9,87,78,95,65,70,66,83,89,85,69,67,76,89,79,77,92,68,76]);
	var eml = deobfuscate([28,64,2,75,86,64,64,26,10,68,75,66,64,89,65,21,93,84,114,71,92,64,87,89,22,93,95,25,28,94,82,94,51,50,127,97,38,41,41,36,35,107,116,38,41,13,58,39,37,48,60,125,48,48,106,120,57,103]);
	
	// intro
	document.getElementById('address').innerHTML = addr;
	document.getElementById('email').innerHTML = eml;
	
	// imprint
	var e = document.getElementById('imprint-address');
	if(e) e.innerHTML = addr;
		
	e = document.getElementById('imprint-email')
	if(e) e.innerHTML = eml;
	
	if(Compat.MSIE) {
		fixIE();
	}
}
