// globale Variablen
var animIntervall;		// Zeiger auf das Intervall der Animroutine
var bordline = 401;		// Dies ist die Oberkante des Betonboards
var picinfokante = 150;
var duration = 50;	// Duration of a anim in msecs - not regarding the height of the object. All Objects should (dis)appear in the same duration
var scrollPixel = 10;	// Anzahl Pixel, um die ein Element pro Durchgang verschoben werden soll
var hoch = -1;
var runter = 1;
var active_img_div = 1;
var gallery_path = "gallery/"
var currYear = 2010;
var currPicNr = -1;
var Elems = new Array(); // Array aller zu animierender Objekte
var emptyImg = new Image();
emptyImg.src = "images/transparent.gif";
var cacheImg = new Image();
cacheImg.src = "";

function open_store() {
	window.open("http://www.schulzstore.de/", "storefenster", "");
}
function goto_url(url) {
	window.open(url, "ExternalLink", "");
}

function switch_year(y) {
	switch (y) {
		case 'in2009':
			currYear = 2009;
			document.getElementById("gallery_content1").style.visibility = "visible";
			document.getElementById("gallery_content2").style.visibility = "hidden";
			break;
		case 'pre2009':
			currYear = -1;
			document.getElementById("gallery_content1").style.visibility = "hidden";
			document.getElementById("gallery_content2").style.visibility = "visible";
			break;
		default:
			currYear = 2009;
			break;
	}
	window.setTimeout("show_pic(get_random_pic())", 700);
}

function show_pic_info(flag) {
	if(flag == true) { // true = einblenden
		document.getElementById("pi_title").innerHTML = bilder[currPicNr].Name;
		document.getElementById("pi_size").innerHTML = bilder[currPicNr].Size;
		document.getElementById("pi_year").innerHTML = bilder[currPicNr].Jahr;
		document.getElementById("pi_desc").innerHTML = bilder[currPicNr].Desc;
		do_obj('picinfo', hoch);
	} else {   // false = ausblenden
		do_obj('picinfo', runter);
	}
}

function get_random_pic() {
	var exitflag = false;
	var emergency = 0;  // While verlassen, wenn variable Wert übersteigt, falls kein Bild gefunden wird.
	while (exitflag == false && emergency < (2 * bilder.length)) {
		p = parseInt((bilder.length-1) * Math.random());
		if(currYear > 0 && bilder[p].Jahr == currYear)
			exitflag = true;
		if(currYear < 0 && bilder[p].Jahr != 2009)
			exitflag = true;
		emergency++;
	}
	if(exitflag == true)
		return p;
	
	alert("No picture found which was created in " + year + ".");
	return false;
}

function get_next_pic() {
	return currPicNr + 1;
}
function get_prev_pic() {
	return currPicNr - 1;
}

function show_pic(p) {
	if(p < 0) {
		p = bilder.length-1;
	} else if(p > bilder.length-1) {
		p = 0;
	}
	// Set global value
	currPicNr = p;

	img_tag = document.getElementById("img"+active_img_div);
	img_tag.src = gallery_path + bilder[p].File;
	//alert("img"+active_img_div + " - " + img_tag.src);
	//alert('bild'+active_img_div + " / " + hoch);
	do_obj("bild"+active_img_div, hoch);
	
	// Last: set next img_div
	active_img_div = 3 - active_img_div;
	// cache next possible picture:
//	if(p<currPicNr) {
		// Es wurde links angeklickt
//		p_cache = get_prev_pic();
//		cacheImg.src = gallery_path + bilder[p_cache].File;
//	}
//	if(p>currPicNr) {
		// Es wurde rechts angeklickt
//		p_cache = get_next_pic();
//		cacheImg.src = gallery_path + bilder[p_cache].File;
//	}
	return;
}


function Element (Name, Time, Direction, Visible) {  // Objekt, dass alle Daten eines zu animierenden Objekts enthält
	this.Name = Name;
	this.Time = Time;
	this.Direction = Direction;
	this.Visible = Visible;
}

function styleVal(e, s) {
	// Parameter: e = Objekt, von welchem der Style ausgelesen werden soll
	// Parameter: s = Styleeigenschaft, die ausgelesen werden soll
	
	if(window.getComputedStyle) {
   		//alert(1);
		return window.getComputedStyle(document.getElementById(e),"" ).getPropertyValue(s);
	} else if(document.getElementById(e).currentStyle) {
   		//alert(document.getElementById(e).currentStyle[s]);
   		return document.getElementById(e).currentStyle[s];
 	} else if(document.ids) {
   		//alert(3);
   		return document.layers[e].s;
 	} else if(document.all) {
   		//alert(4);
    	return document.all.e.style.s;
	}
}

function linearTween (t, b, c, d) { 
	return c*t/d + b; 
}; 
function easeInQuint (t, b, c, d) { 
	return c * Math.pow (t/d, 5) + b; 
}; 
function easeOutQuint (t, b, c, d) { 
	return c * (Math.pow (t/d-1, 5) + 1) + b; 
}; 
function animate() {
	// erst überprüfen wir, ob es irgendwas zu animieren gibt
	var l = 0; // enthält die Anzahl der Objekte, die noch animiert werden müssen
	for(i=0; i<Elems.length; i++) {  // Wir ermitteln die akutelle Zahl der Objekte, die noch animiert werden muss
		// Das ergibt sich daraus, ob sie den Endpunkt ihrer Richtung schon erreicht haben.
		elemname = Elems[i].Name;
		direction = Elems[i].Direction;
		currTop = parseInt(styleVal(elemname,'top'));
		currHeight = parseInt(styleVal(elemname,'height'));
		//h = document.getElementById(elemname).currentStyle.height;
		currTime = Elems[i].Time;
		currZIndex = parseInt(styleVal(elemname,'z-index'));
		if(elemname == "picinfo")
			kante = picinfokante;
		else
			kante = bordline;
		if(direction == hoch) {
			// Das Objekt wird nach oben geschoben. Wir schauen, ob es schon oben ist.
			if(currTop <= (kante - currHeight)) {
				// Das Objekt ist bereits komplett sichtbar, daher muss nix animiert werden
				// Damit wir keinen Müll abfragen, entfernen wir das Objekt aus der Elementeliste
			} else {
				// Das Objekt ist noch nicht komplett oben
				// schieben wir es ein Stück weiter hoch
				newTop = parseInt((easeOutQuint(currTime, kante, -currHeight, duration)));
				//document.getElementById("d").value = "Kante: " + kante + "px   " + newTop + "px";
				if(currZIndex != 110) { document.getElementById(elemname).style.zIndex = "110" };
				if(elemname == "bild1" || elemname =="bild2") {
					imgloaded = document.getElementById("img" + elemname.substr(elemname.length-1,1)).complete;
					if(imgloaded == true) {
						document.getElementById(elemname).style.top = newTop + 'px';
						Elems[i].Time = currTime + 1;
					}
				} else {
					document.getElementById(elemname).style.top = newTop + 'px';
					Elems[i].Time = currTime + 1;
				}
				l++;
			}
		} else if(direction == runter) {
			// Das Objekt wird nach unten geschoben. Wir schauen, ob es schon unten ist.
			if(currTop >= kante) {
				// Das Objekt ist bereits komplett unsichtbar, daher muss nix animiert werden
				// Damit wir keinen Müll abfragen, entfernen wir das Objekt aus der Elementeliste
				// wenn es eines der Galerie-Divs ist, muss der Inhalt noch geleert werden.
				if(elemname == "bild1")	
					document.getElementById("img1").src = emptyImg.src;
				if(elemname == "bild2")
					document.getElementById("img2").src = emptyImg.src;
			} else {
				// Das Objekt ist noch nicht komplett unten
				// schieben wir es ein Stück weiter runter
				newTop = parseInt((easeInQuint(currTime, kante-currHeight, currHeight, duration)));
				if(currZIndex != 100) { document.getElementById(elemname).style.zIndex = "100" };
				document.getElementById(elemname).style.top = newTop + 'px';
				Elems[i].Time = currTime + 1;
				l++;
			}
		}

	}
	if(!animIntervall && l>0) {
		animIntervall = window.setInterval("animate()", 1);
	}
	if(l<1) { // es gibt nix mehr zu animieren. Wir können das Intervall aus Performancegründen löschen.
		window.clearInterval(animIntervall);
		animIntervall = undefined;
	}
}

function do_obj(id, richtung) {
	//alert("do_obj: "+id);
	var d = 0;
	for(i=0; i<Elems.length; i++) {
		if(Elems[i].Name == id) {
			Elems[i].Time = 0;
			Elems[i].Direction = richtung;
			d++;
		} else if(id != 'picinfo') {
			Elems[i].Time = 0;
			Elems[i].Direction = -richtung;
		}
	}
	if(d == 0) {
		o = new Element(id, 0, richtung, 1);
		Elems.push(o);
	}
	animate();  // Wir lassen die Funktion laufen. Sie schaltet sich selber ab, wenns nix zu animieren gibt.
}

function del_obj(id) {
	for(i=0; i<Elems.length; i++) {
		if(Elems[i].Name == id) {
			Elems.splice(i,1);
		}
	}
	//alert("Elems Länge = " + Elems.length);
}
// JavaScript Document