// Globale Variablen
debug = "alert"; // moegl. Werte: form, alert
radius = 40;
rad = Math.PI / 180;
winkel = 180;
speed = 2;
Anzahl_texte = 8; // das muss immer angepasst werden!
sollwert = 0;
soll_reached = 0;
// Vektor zum Betrachter
vx = 0;
vy = 1;
vz = 1;
text = new Array(Anzahl_texte);
// Objekt fuer beweglichen Text definieren
function fragment(name, abw, isVisible) {
	this.name = name;
	this.abw = abw;
	this.isVisible;
}
// Objekte instanzieren
for ( var i = 0; i < Anzahl_texte; i++) {
	text[i] = new fragment("text" + i, i * (360 / Anzahl_texte), 0);
}
// Automatischen Aufruf festlegen
window.setInterval("main_loop()", 16);
function main_loop() {
	// Rad drehen, wenn nicht in position
	if (Math.round(winkel / 3) != Math.round(sollwert / 3)) {
		soll_reached = 0;
		diff = sollwert - winkel;
		if (diff > 0) {
			if (diff < 180)
				winkel += speed;
			else
				winkel -= speed;
		} else {
			if (Math.abs(diff) < 180)
				winkel -= speed;
			else
				winkel += speed;
		}
		// out(winkel+"/n");
		if (winkel > 360) {
			winkel = 0;
		} else if (winkel < 0) {
			winkel = 360;
		}
		// Positionen updaten:
		for (i = 0; i < Anzahl_texte; i++) {
			CLASS_change(text[i]);
		}
	} else {
		if (soll_reached != 1) {
			winkel = Math.round(sollwert);
			soll_reached = 1;
			for (i = 0; i < Anzahl_texte; i++) {
				CLASS_change(text[i]);
			}
		}
		// out("winkel="+winkel +"\nlen="+len+"\nsollwert="+sollwert);
	}
}
function CLASS_change(obj) {
	// Koordinaten berechnen
	tp = Math.cos((winkel - obj.abw) * rad);
	lp = Math.sin((winkel - obj.abw) * rad);
	// z-index bestimmen
	if (tp > 0) {
		zindex = "vorn";
	} else {
		zindex = "hinten";
	}
	// vektor u zum vertex
	ux = lp;
	uy = tp;
	uz = 0;
	// vektor w vom betrachter zum vertex = u-v;
	wx = ux - vx;
	wy = uy - vy;
	wz = uz - vz;
	len = Math.sqrt(wx * wx + wy * wy + wz * wz);
	if (len > 1.8)
		entfernung = "weit";
	else if (len > 1.1)
		entfernung = "mittelweit";
	else
		entfernung = "nah";
	wx /= len;
	wy /= len;
	
	tp = wy;
	lp = wx;
	tp = Math.round(tp * radius);
	lp = Math.round(lp * radius);
	// translation
	tp = Math.round(tp + 70);
	lp = Math.round(lp + 57);
	// in String verwandeln
	lps = lp.toString();
	if (lp < 10) {
		lps = "0" + lps;
	}
	tps = tp.toString();
	if (tp < 10) {
		tps = tps + "0";
	}
	if (obj.isVisible == 1)
		visibility = "";
	else
		visibility = " invisible";
	// out("winkel="+winkel +"\nlen="+len+"\nsollwert="+sollwert);
	if ((soll_reached == 1) && (len < 1.1)) {
		outString = "locked " + zindex + " " + entfernung + visibility
				+ " schwebe";
	} else
		outString = "T" + tps + " L" + lps + " " + zindex + " " + entfernung
				+ visibility + " schwebe";
	document.getElementById(obj.name).className = outString;
}
function setSoll(index) {
	sollwert = text[index].abw;
	text[index].isVisible = 1;
	if (Math.round(winkel / 3) == Math.round(sollwert / 3)) {
		// alert(winkel+" "+sollwert);
		winkel += 180;
		if (winkel > 360)
			winkel -= 360;
	}
}
function makeInvisible() {
	for (i = 0; i < Anzahl_texte; i++) {
		text[i].isVisible = 0;
	}
	soll_reached = 0;
}
function out(message) {
	if (debug == "alert") {
		alert(message);
	} else if (debug == "form") {
		document.form.textarea.value = message
	}
}