var ie6 = (String(navigator.appName).substring(0,9) == "Microsoft" && parseInt(String(navigator.appVersion).substring(22,23)) < 7)?true:false;
var ieBrowser = (String(navigator.appName).substring(0,9) == "Microsoft")?true:false;

// lib/basicFunctions.js
var TAG_B = 0;
var TAG_I = 1;
var TAG_S = 2;
var TAG_C = 3;

var TAG_START = 0;
var TAG_END = 1;

function numsortFunction (a, b) {
  return a - b;
}

function singleValueSort(a) {
	a.sort(numsortFunction);
	var b = new Array();
	b.push(a[0]);
	for (var i=1; i<a.length; i++) {
		if (b[b.length-1] == a[i]) {
			b.push(a[i]);
		}
	}
	return a;
}

function compatibleImage (src) {
	var cImage;
	if (ie6) {
		cImage = document.createElement("div");
		cImage.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='scale')";
	} else {
		cImage = document.createElement("img");
		cImage.src = src;
	}
	return cImage;
}

function compatibleImageCopy (src, template) {
	var cImage;
	if (ie6) {
		cImage = document.createElement("div");
		cImage.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='scale')";
	} else {
		cImage = this.document.createElement("img");
		cImage.src = src;
	}
		cImage.style.border = template.style.border;
		cImage.style.margin = template.style.margin;
		cImage.style.padding = template.style.padding;
		cImage.style.position = template.style.position;
		cImage.style.left = template.style.left;
		cImage.style.top = template.style.top;
		cImage.style.zIndex = template.style.zIndex;
		cImage.style.visibility = template.style.visibility;
		cImage.style.width = template.style.width;
		cImage.style.height = template.style.height;
	return cImage;
}

function getScrambledNumbers(set, subset, offset) {
	var away;
	var a = new Array();
	var b = new Array();
	for (var i=0; i<set; i++) {
		a[i] = eval(i+offset);
	}
	for (var i=0; i<subset; i++) {
    	away = Math.floor((a.length)*Math.random());
    	b[i] = a.slice(away, away+1);
    	a.splice(away, 1);
  	}
	return b;
}

function stringToFormattedDiv(str) {	
	var fontFormat = new Array();
	fontFormat[TAG_B] = "normal";
	fontFormat[TAG_I] = "normal";
	
	var tagContent = new Array();
	var tagPos = new Array();
	for (var i=0; i<4; i++) {
		tagPos[i] = new Array();
		for (var j=0; j<2; j++) {
			tagPos[i][j] = new Array();
		}
	}
	var allTags = new Array();
	var allDivs = new Array();
	
	var plane = str.replace(/<\w+>|<\/\w+>/g,"");
	var noLB = str.replace(/\n/g,"");
	
	var forB = str.replace(/<i>|<\/i>|\n/g,"");
	var forI = str.replace(/<b>|<\/b>|\n/g,"");
	
	var bPreCollection = forB.split("<b>");
	var iPreCollection = forI.split("<i>");
	var bPostCollection = forB.split("</b>");
	var iPostCollection = forI.split("</i>");
	
	var tpCount = 0;
	if (bPreCollection!=null) {
		for (var i=0; i<bPreCollection.length-1; i++) {
			tpCount += bPreCollection[i].length;
			tagPos[TAG_B][TAG_START].push(tpCount);
			tpCount-=4;
		}
	}
	tpCount = 0;
	if (iPreCollection!=null) {
		for (var i=0; i<iPreCollection.length-1; i++) {
			tpCount += iPreCollection[i].length;
			tagPos[TAG_I][TAG_START].push(tpCount);
			tpCount-=4;
		}
	}
	tpCount = 0;
	if (bPostCollection!=null) {
		for (var i=0; i<bPostCollection.length-1; i++) {
			tpCount-=3;
			tpCount += bPostCollection[i].length;
			tagPos[TAG_B][TAG_END].push(tpCount);
		}
	}
	tpCount = 0;
	if (iPostCollection!=null) {
		for (var i=0; i<iPostCollection.length-1; i++) {
			tpCount-=3;
			tpCount += iPostCollection[i].length;
			tagPos[TAG_I][TAG_END].push(tpCount);
		}
	}
	for (var i=0; i<tagPos.length; i++) {
		if (tagPos[i]!=null) {
			for (var j=0; j<2; j++) {
				if (tagPos[i][j]!=null) {
					for (var k=0; k<tagPos[i][j].length; k++) {
						allTags.push(tagPos[i][j][k]);
					}
				}
			}
		}
	}
	allTags = singleValueSort(allTags);
	
	var d = plane.split("\n");
	if (d!=null) {
		for (var i=0; i<d.length; i++) {
			var nPos = 0;
			for (var j=0; j<i+1; j++) {
				nPos += d[j].length;
			}
			allDivs.push(nPos);
		}
	}	
	plane = plane.replace(/\n/g,"");
	
	var frameDiv = document.createElement("div");
	var subDiv = new Array();
	var lastInserted = 0;
	var divCount = 0;
	var spanCount = 0;
	subDiv[divCount] = document.createElement("div");
	frameDiv.appendChild(subDiv[divCount]);
	var subSpan = new Array();
	subSpan[spanCount] = document.createElement("span");
	
	var pos = -1;
	while (++pos < plane.length) {
		for (var i=0; i<allTags.length; i++) {
			if (pos == allTags[i]) { // just once!!!
				var subTextNode = document.createTextNode(plane.substring(lastInserted,pos));
				subSpan[spanCount].appendChild(subTextNode);
				subDiv[divCount].appendChild(subSpan[spanCount]);
				lastInserted = pos;
				
				spanCount++;
				subSpan[spanCount] = document.createElement("span");
				
				
				for (var j in tagPos[TAG_B][TAG_START]) {
					if(tagPos[TAG_B][TAG_START][j] == pos) {fontFormat[TAG_B] = "bold";}
				}
				for (var j in tagPos[TAG_B][TAG_END]) {
					if(tagPos[TAG_B][TAG_END][j] == pos) {fontFormat[TAG_B] = "normal";}
				}
				for (var j in tagPos[TAG_I][TAG_START]) {
					if(tagPos[TAG_I][TAG_START][j] == pos) {fontFormat[TAG_I] = "italic";}
				}
				for (var j in tagPos[TAG_I][TAG_END]) {
					if(tagPos[TAG_I][TAG_END][j] == pos) {fontFormat[TAG_I] = "normal";}
				}
				subSpan[spanCount].style.fontWeight = fontFormat[TAG_B];
				subSpan[spanCount].style.fontStyle = fontFormat[TAG_I];
			}
		}
		for (var i=0; i<allDivs.length; i++) {
			if (pos == allDivs[i]) { // just once!!!
				var subTextNode = document.createTextNode(plane.substring(lastInserted,pos));
				subSpan[spanCount].appendChild(subTextNode);
				subDiv[divCount].appendChild(subSpan[spanCount]);
				lastInserted = pos;				
				spanCount++;
				subSpan[spanCount] = document.createElement("span");
				subSpan[spanCount].style.fontWeight = fontFormat[TAG_B];
				subSpan[spanCount].style.fontStyle = fontFormat[TAG_I];
				
				divCount++;
				subDiv[divCount] = document.createElement("div");
				frameDiv.appendChild(subDiv[divCount]);
			}
		}
	}
	var subTextNode = document.createTextNode(plane.substring(lastInserted,pos));
	subSpan[spanCount].appendChild(subTextNode);
	subDiv[divCount].appendChild(subSpan[spanCount]);
	return frameDiv;
}

function fixPNG(myImage) {
	if(ie6) {
		var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "";
	 	var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "";
	 	var imgTitle = (myImage.title) ? "title='" + myImage.title + "' " : "title='" + myImage.alt + "' ";
	 	var imgStyle = "display:inline-block;" + myImage.style.cssText;
	 	var strNewHTML = "<span " + imgID + imgClass + imgTitle;
	 	strNewHTML += " style=\"" + "width:" + myImage.width + "px; height:" + myImage.height + "px;" + imgStyle + ";";
	 	strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
	 	strNewHTML += "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>";
	 	myImage.outerHTML = strNewHTML;
	}
}

// constants.js
var MAXZINDEX = 5000; //maximal z-index
var TNFOREGROUND = 1020;
var TNBACKGROUND = 1010;

var _NUMBEROFPROJECTS = 7;

var _cc = 0;
var _13PRODUCTS = _cc++;
var _BOMP = _cc++;
var _CITYONE = _cc++;
var _ILLUS = _cc++;
var _KLATCH = _cc++;
var _WORK4 = _cc++;
var _EHRENWERT = _cc++;
_cc = 0;

var projectNames = new Array();
projectNames[_13PRODUCTS] = '13products';
projectNames[_BOMP] = 'bomp';
projectNames[_CITYONE] = 'cityone';
projectNames[_ILLUS] = 'illus';
projectNames[_KLATCH] = 'klatch';
projectNames[_WORK4] = 'work4';
projectNames[_EHRENWERT] = 'ehrenwert';

var tnNumbers = new Array();
tnNumbers[_13PRODUCTS] = 7;
tnNumbers[_BOMP] = 12;
tnNumbers[_CITYONE] = 12;
tnNumbers[_ILLUS] = 12;
tnNumbers[_KLATCH] = 6;
tnNumbers[_WORK4] = 8;
tnNumbers[_EHRENWERT] = 8;

var _THUMBNAILS = 0;
for (var i=0; i<tnNumbers.length; i++) {
	_THUMBNAILS += tnNumbers[i];
}

var _STATICMONSTERS = _NUMBEROFPROJECTS;
var _ANIMATEDMONSTERS = _NUMBEROFPROJECTS;
var _CORNERS = _NUMBEROFPROJECTS+1;
var _STATICCONTENT = 26;
var _JOHNSON = 4;

var _TOTALIMAGES = _STATICMONSTERS + _ANIMATEDMONSTERS + _THUMBNAILS + _CORNERS + _STATICCONTENT + _JOHNSON;
var _TOTALIMAGEARRAYS = 6;

//monsters
var _BLUE = _cc++;
var _BROWN = _cc++;
var _GRAY = _cc++;
var _GREEN = _cc++;
var _PINK = _cc++;
var _YELLOW = _cc++;
var _WHITE = _cc++;
_cc = 0;

var monstersToProducts = new Array();
monstersToProducts[_BLUE] = _ILLUS;
monstersToProducts[_BROWN] = _13PRODUCTS;
monstersToProducts[_GRAY] = _KLATCH;
monstersToProducts[_GREEN] = _WORK4;
monstersToProducts[_PINK] = _BOMP;
monstersToProducts[_YELLOW] = _CITYONE;
monstersToProducts[_WHITE] = _EHRENWERT;

var monsterNames = new Array();
monsterNames[_BLUE] = 'blue';
monsterNames[_BROWN] = 'brown';
monsterNames[_GRAY] = 'gray';
monsterNames[_GREEN] = 'green';
monsterNames[_PINK] = 'pink';
monsterNames[_YELLOW] = 'yellow';
monsterNames[_WHITE] = 'white';

var monsterNickNames = new Array();
monsterNickNames[_BLUE] = 'Blue';
monsterNickNames[_BROWN] = 'Brown';
monsterNickNames[_GRAY] = 'Lila';
monsterNickNames[_GREEN] = 'Green';
monsterNickNames[_PINK] = 'Pink';
monsterNickNames[_YELLOW] = 'Yellow';
monsterNickNames[_WHITE] = 'White';

var _CONTACT = _cc++;
var _CREDITS = _cc++;
var _DOWNLOAD = _cc++;
var _INFO = _cc++;
var _LINKS = _cc++;
var _SHOP = _cc++;
_cc = 0;

var DISPLACE_LINEAR = _cc++;
var DISPLACE_POTENTIAL = _cc++;
var DISPLACE_EXPONENTIAL = _cc++;
var DISPLACE_JUMP = _cc++;
var DISPLACE_LENGTH = _cc;
_cc = 0;

var ZOOM_LINEAR = _cc++;
var ZOOM_POTENTIAL = _cc++;
var ZOOM_EXPONENTIAL = _cc++;
var ZOOM_JUMP = _cc++;
var ZOOM_COS = _cc++;
var ZOOM_LENGTH = _cc;
_cc = 0;

//behaviours
var HOVER_MONSTER = 0;
var CHANGEIMAGE_MONSTER = 1;

//constants for zoomfunctions
var Z_NORMAL = _cc++;
var Z_FOREGROUND = _cc++;
var Z_SWOOPSMALL = _cc++;
var Z_SWOOPLARGE = _cc++;
var Z_VARSIZE = _cc++;
_cc = 0;

var _MAINCORNERPICTURE = _NUMBEROFPROJECTS;

var BUBBLEZINDEX = "2000";
var BUBBLE_WIDTH = "336px";
var SMALL_BUBBLE_WIDTH = "200px";

var allElementsActive = true;

var DOCWIDTH = "";
var DOCHEIGHT = "";
if (ieBrowser) {
	DOCWIDTH = document.documentElement.clientWidth + "px";
	DOCHEIGHT = document.documentElement.clientHeight + "px";
} else {
	DOCWIDTH = window.innerWidth + "px";
	DOCHEIGHT = window.innerHeight + "px";
}

// imageList.js
var staticMonsters = new Array();
var animatedMonsters = new Array();
var thumbnails = new Array();
var projectSamples = new Array();
var corners = new Array();
var staticContent  = new Array(); //fonts,background
var johnson = new Array();

for (var i=0; i<_NUMBEROFPROJECTS; i++) {
	staticMonsters[monsterNames[i]] = 'pics/monsters/'+monsterNames[i]+'/'+monsterNames[i]+'.png';
	animatedMonsters[monsterNames[i]] = 'pics/monsters/'+monsterNames[i]+'/'+monsterNames[i]+'.gif';
}

for (var i=0; i<_NUMBEROFPROJECTS; i++) {
	projectSamples[i] = new Array();
	for (var j=0; j<tnNumbers[i]; j++) {
		thumbnails[projectNames[i]+'_'+String(j)] = 'pics/tn/'+projectNames[i]+'/'+String(j)+'.jpg';
		projectSamples[i][j] = 'pics/projectSamples/'+projectNames[i]+'/'+String(j)+'.jpg';
	}
}

for (var i=0; i<_NUMBEROFPROJECTS; i++) {
	corners[projectNames[i]] = 'pics/corners/'+projectNames[i]+'.gif';
}
corners['main'] = 'pics/corners/main.gif';

staticContent['stripes'] = 'pics/stripes.png';
staticContent['contact'] = 'pics/fonts/contact.gif';
staticContent['credits'] = 'pics/fonts/credits.gif';
staticContent['info'] = 'pics/fonts/info.gif';
staticContent['download'] = 'pics/fonts/download.gif';
staticContent['links'] = 'pics/fonts/links.gif';
staticContent['shop'] = 'pics/fonts/shop.gif';
staticContent['contactActive'] = 'pics/fonts/contactActive.gif';
staticContent['creditsActive'] = 'pics/fonts/creditsActive.gif';
staticContent['infoActive'] = 'pics/fonts/infoActive.gif';
staticContent['downloadActive'] = 'pics/fonts/downloadActive.gif';
staticContent['linksActive'] = 'pics/fonts/linksActive.gif';
staticContent['shopActive'] = 'pics/fonts/shopActive.gif';
staticContent['bubbleTop'] = 'pics/bubble/bubbleTopLarge.gif';
staticContent['bubbleMid'] = 'pics/bubble/bubbleMidLarge.gif';
staticContent['bubbleBottom'] = 'pics/bubble/bubbleBottomLarge.gif';
staticContent['bubbleTopSmall'] = 'pics/bubble/bubbleTopSmall.gif';
staticContent['bubbleMidSmall'] = 'pics/bubble/bubbleMidSmall.gif';
staticContent['bubbleBottomSmall'] = 'pics/bubble/bubbleBottomSmall.gif';
staticContent['loadingPic'] = 'pics/picSlave/loading.png';
staticContent['logoMenu'] = 'pics/menuContent/logo.gif';
staticContent['portrait'] = 'pics/menuContent/portrait.jpg';
staticContent['email'] = 'pics/menuContent/email.gif';
staticContent['coarsetoys'] = 'pics/menuContent/coarsetoys.gif';
staticContent['telephone'] = 'pics/menuContent/telephone.gif';
staticContent['address'] = 'pics/menuContent/address.gif';

johnson['johnson'] = 'pics/johnson/0.png';
johnson['johnsonWhip'] = 'pics/johnson/1.png';
johnson['johnsonNude'] = 'pics/johnson/2.png';
johnson['johnsonGoose'] = 'pics/johnson/3.png';
johnson['johnsonBavaria'] = 'pics/johnson/4.png';

var guideRandomPics = new Array();
guideRandomPics.push(johnson['johnsonNude']);
guideRandomPics.push(johnson['johnsonGoose']);
guideRandomPics.push(johnson['johnsonBavaria']);

var menuContent = new Array();
menuContent['contact'] = 'pics/menuContent/white.gif';
menuContent['credits'] = 'pics/menuContent/white.gif';
menuContent['info'] = 'pics/menuContent/white.gif';
menuContent['download'] = 'pics/menuContent/white.gif';
menuContent['links'] = 'pics/menuContent/white.gif';
menuContent['shop'] = 'pics/menuContent/white.gif';

// startMainPage.js
function startMainPage() {
	var x = (screen.width-1010)/2;
	var y = (screen.height-650)/2-25;
	mainPageWindowOpened = true;
	window.open("dynamics.html", currentLang, "width=1010,height=650,left="+String(x)+",top="+String(y)+"");
}

// allImages.js
var allImages = new Array();
var allImageSources = new Array();
var prepreloadCount = -1;
var mainPageWindowOpened = false;

function prepareImages() {
	window.setTimeout('startPrepareImages()', 10);
}
function callPrepreload() {
	window.setTimeout("prepreload()", 1);
}
function prepreload() {
	if (prepreloadCount > -1) {allImages[prepreloadCount].onload = '';}
	if (++prepreloadCount < allImageSources.length && !mainPageWindowOpened) {
		allImages[prepreloadCount] = new Image();
		allImages[prepreloadCount].onload = callPrepreload;
		allImages[prepreloadCount].src = allImageSources[prepreloadCount];
	}
}
function startPrepareImages() {
	allImageSources.push('pics/loadingbar/loadingbarBorder.png');
	allImageSources.push('pics/loadingbar/loadingbarFilling.png');
	allImageSources.push('pics/logo.png');
	
	for (var i in staticMonsters) {
		allImageSources.push(staticMonsters[i]);
	}
	for (var i in animatedMonsters) {
		allImageSources.push(animatedMonsters[i]);
	}
	for (var i in thumbnails) {
		allImageSources.push(thumbnails[i]);
	}
	for (var i in corners) {
		allImageSources.push(corners[i]);
	}
	for (var i in staticContent) {
		allImageSources.push(staticContent[i]);
	}
	for (var i in johnson) {
		allImageSources.push(johnson[i]);
	}
	prepreload();
}

// langStart.js
intText = new Array();

var _LANGUAGES_ = 5;
var _DE_ = 0;
var _GB_ = 1;
var _ES_ = 2;
var _FR_ = 3;
var _SE_ = 4;

var _introductionJS_ = 0;
var _ie6Comment_ = 1;

for (var i=0; i<_LANGUAGES_; i++) {
	intText[i] = new Array();
}

intText[_DE_][_introductionJS_] = "Howdy Freunde!\nWillkommen auf der unglaublichen Homepage des Designstudenten Timm Ruge.\nMein Name ist Johnson. Da Timm leider grad nicht hier sein kann, werde ich für heute den Gastgeber spielen und helfen, wo ich kann. Wer meinen Anweisungen folgt, hat nichts zu befürchten!\n<b>Klick mich an, um weiterzukommen</b>!";
intText[_DE_][_ie6Comment_] = "Pfui. Du verwendest eine veraltete Version des Internet Explorers. Mit dieser Version des Browsers wird die Seite nur in einer geringeren Qualität angezeigt! Also gleich updaten... oder am besten Mozilla Firefox herunterladen und sicherer surfen!";

intText[_GB_][_introductionJS_] = "Howdy folks!\nWelcome to the extraordinary homepage of design student Timm Ruge.\nMy name is Johnson. As Timm cannot be here, I´ll be your guide for today and help you out whenever things are getting dangerous! Please stay behind me and follow my instructions!\n<b>Click me to go on!</b>";
intText[_GB_][_ie6Comment_] = "Jesus! You are trying to enter this website with an antiquated version of the Internet Explorer. Your security and the quality of every website might suffer from it. Please update your browser or, even better, download Mozilla Firefox!";
