/**
 * Klasse für die Flash Kommunikation
 *
 * Benutzung:
 *
 * var f = new FlashInterface("myMovie");
 *
 * f.call("eineFunktion"); // hier wird die Funktion "eineFunktion" in Flash ohne Argumente aufgerufen
 *
 * f.call("eineFunktion", 5, "noch ein argument", ["ein", "array", "aus", "strings"]); // hier werden Argumente an die Funktion gesendet
 *
 * ----------------------------------
 * Probleme:
 * 
 * - Objekte können nicht übergeben werden! Ausschließlich Strings, Nummern, Booleanwerte und Arrays aus den gerade genannten Datentypen.
 */
 
var FlashInterface = function() {};

FlashInterface.prototype = {
	call: function(func) {
		if(this.movie && typeof this.movie[func] != undefined) {
		
			if(arguments.length == 1) {
				this.movie[func]();
			}
			else {
				var argumentString = "";
				for(var i=1, len=arguments.length; i<len; i++) {
					argumentString += this.beautify(arguments[i]);
					if(i < (len-1)) {
						argumentString += ",";
					}
				}
				//console.log("this.movie[\""+func+"\"]("+argumentString+");");
				eval("this.movie[\""+func+"\"]("+argumentString+");");
			}
		}
	},
	
	// Funktion die den Flashfilm mit der angegebenen ID zurückgibt
	setObjectById: function(objectIdStr) {
		var r = null;
		var o = document.getElementById(objectIdStr);
		if (o && o.nodeName == "OBJECT") {
			if (typeof o.SetVariable !== "undefined") {
				r = o;
			}
			else {
				var n = o.getElementsByTagName("object")[0];
				if (n) {
					r = n;
				}
			}
		}
		this.movie = r;
	},
	
	// Funktion um das Argument in einen String zu verwandeln
	beautify: function(obj) {
		var retVal = "";
		
		if(typeof obj == "string") {
			retVal += "\""+obj+"\"";
		}
		else if($.isArray(obj)) {
			retVal += "[";
			for(var i=0; i<obj.length; i++) {
				retVal += this.beautify(obj[i]); // rekursiver Aufruf
				if(i < (obj.length-1)) {
					retVal += ",";
				}
			}
			retVal += "]";
		}
		else {
			retVal += obj;
		}
		
		return retVal;
	}
};
