/**
 * Initialise un Swf avec gestion de la communication
 * @param Object options
 *  - link : lien vers l'annimation
 *  - width : largeur de l'animation
 *  - height : hauteur de l'annimation
 *  - div : Id de la division containeur
 *  - name : Nom de l'annimation
 * @return Object
 */
function ToSwf(options)
{
	// Paramètres
	ToSwf.prototype.settings = {
    	div: "",
    	name: "movie",
    	width: 300,
    	height: 300,
		wmode: "normal"
    };
    
	// Lien vers le flash
    ToSwf.prototype.flash =  false;
    
	// Containeur
	ToSwf.prototype.div = false;
	
    // Configuration
   	for(var name in options)
		this.settings[name] = options[name];
}

/**
 * Gestions des méthodes de la classe ToSwf
 */
ToSwf.prototype =
{
	/**
	 * Supprime le Swf
	 * @return void
	 */
	remove: function()
	{
		if(this.flash != false)
		{
			swfobject.removeSWF(this.div);
			this.flash = false;
		}
	},
	
	/**
	 * Generation du swf
	 * @return Object : Lien vers le flash créé
	 */
	init: function(param)
	{
		this.div = this.settings.div;
		
		// Creation du containeur
		if(this.settings.div == "")
		{
			this.div = 'FlashContent'+parseInt(Math.random()*1000);
			window.document.body.innerHTML += "<div id='"+this.div+"'>FlashContent</div>";
		}
			
		// Reglage
		var att =
		{
			data: this.settings.link,
			width: this.settings.width,
			height: this.settings.height,
			id: this.div,
			name: this.settings.name
		};
				
		// Génération du swf
		this.flash = swfobject.createSWF(att, {swliveconnect:"true", flashvars: param, wmode: this.settings.wmode}, this.div);
	},
	
	/**
	 * Envoie les informations au flash
	 * @param String name : Nom de la fonction
	 * @param Object param : Paramètres
	 * @return void
	 */
	send: function(name, param)
	{
		// Ajout de la fonction
		param.fonction = name;
		
		// Gestion de l'envoie / chargement
		if(this.flash == false)
			this.init(UrlVar.encode(param));
		else
			this.flash.connect(UrlVar.encode(param));
	}
}

/**
 * Encode / Decode une chaine de caractère sous la forme UrlVar
 */
function UrlVar() { }

/**
 * Génère une UrlVar à partir d'un objet
 * @param Object params : Variables contenues dans un objet
 * @return String : UrlVar
 */
UrlVar.encode = function(params)
{
	var url = "";
	for(var id in params)
		url += (url != ""?"&":"")+id+"="+params[id];
	return url;
}

/**
 * Décode une UrlVar
 * @param String url : L'UrlVar
 * @return Object : Les variables contenues
 */
UrlVar.decode = function(url)
{
	var object = new Object();
	var items = url.split("&")
	for(var id in items)
	{
		var param = items[id].split("=");
		if(param[1] != undefined)
			object[param[0]] = param[1];
	}
	return object;
}