// depend on : omExtensions.js
// depend on : swfobject.js
//
//
// Exemple : 
// 		[flash id="flash1" url="exemple.swf" wmode="transparent"]
//
//		var exemple = new omContentLoader();
//		exemple.Execute("IdDuContainerIci|...CODE HTML...[flash id=\"flash1\" url=\"exemple.swf\" wmode=\"transparent\"]...CODE HTML...");
//
function omContentLoader()
{
	var Content = null;
	var Container = null;
	
	var ControlStack = new Array();
	
	this.Execute = function(XmlContent)
	{
		Content = XmlContent;
		var ContainerId = Content.substring(0, Content.indexOf("|"));
		Content = Content.substring(Content.indexOf("|") + 1);
		Container = document.getElementById(ContainerId);
		
		if (Container != null)
		{
			if (ContainPseudoCode())
			{
				AddControls();
				
				Container.innerHTML = Content;
				
				PopFlash();
			}
			else
			{
				Container.innerHTML = Content;
			}
		}
		else
		{
			alert("ContainerId invalide....");
		}
	}
	
	function addControl(ControlObject)
	{
		ControlStack.push(ControlObject);
	}
	
	function ContainPseudoCode()
	{
		return omContentLoader.rControl.test(Content);
	}
	
	function AddControls()
	{
		while (omContentLoader.rControl.test(Content))
		{
			var Matches = omContentLoader.rControl.exec(Content);
			var localControl = omAjaxContentControl.Create(Matches[0])
			if (localControl.type == "flash")
			{
				Content = Content.replace(Matches[0], String.Format("<span id=\"{0}\"></span>", localControl.getUniqueID()));
				addControl( localControl );
			}
			else if (localControl.type == "image")
			{
				Content = Content.replace(
					Matches[0], 
					String.Format(
						"<img id=\"{0}\" src=\"{1}\"{2} />", 
						localControl.id, 
						localControl.url, 
						localControl.getAttributsString()
					)
				);
			}
		}

	}
	
	function PopFlash()
	{
		for (var i = 0; i < ControlStack.length; i++)
		{
			if (ControlStack[i].type == "flash")
			{
				var localFlash = new deconcept.SWFObject(
					ControlStack[i].url, 
					ControlStack[i].id, 
					ControlStack[i].getValue("width"), 
					ControlStack[i].getValue("height"), 
					ControlStack[i].getValue("version"), 
					ControlStack[i].getValue("color"), 
					ControlStack[i].getValue("quality")
				);
				for (var j = 0; j < ControlStack[i].Attributs.length; j++)
					localFlash.addParam(ControlStack[i].Attributs[j].key, ControlStack[i].Attributs[j].value);
				
				localFlash.write(ControlStack[i].getUniqueID());
			}
		}
	}
}
omContentLoader.rControl = /\[(flash|image) +id="([^"]+)" +url="([^"]+)"([^\]]+)?\]/;
omContentLoader.rAttribut = /([^=]+)="([^"]+)"/;
omContentLoader.rAttributs = /([^=]+="[^"]+)"/;

function omAjaxContentControl(Id, Url, Type)
{
	this.id = Id;
	this.url = Url;
	this.type = Type;
	this.Attributs = new Array();
	
	this.getValue = function(Key)
	{
		for (var i = 0; i < this.Attributs.length; i++)
			if (this.Attributs[i].key == Key)
				return this.Attributs[i].value;
		
		if (this.type == "flash")
		{
			switch (Key)
			{
				case "width":
					return ""
					break;
				case "height":
					return ""
					break;
				case "version":
					return "8"
					break;
				case "color":
					return "#FFFFFF"
					break;
				case "quality":
					return "high"
					break;
			}
		}
		
		return String.Empty;
	}
	
	this.addAttribut = function(AttributObject)
	{
		if (!this.attributExists(AttributObject.key))
			this.Attributs.push(AttributObject);
	}
	
	this.attributExists = function(Key)
	{
		for (var i = 0; i < this.Attributs.length; i++)
			if (this.Attributs[i].key == Key)
				return true;
		return false;
	}
	
	this.getAttributsString = function()
	{
		var Text = "";
		for (var i = 0; i < this.Attributs.length; i++)
			Text += " " + this.Attributs[i].toString();
			
		return Text;
	}
	
	this.getUniqueID = function()
	{
		return String.Format("omAjaxContentControl_{0}", this.id);
	}
	
	this.toString = function()
	{
		var Text = "id : " + this.id + "\n";
		Text += "url : " + this.url + "\n";
		Text += "type : " + this.type + "\n";
		
		for (var i = 0; i < this.Attributs.length; i++)
			Text += "\t" + this.Attributs[i].toString();
			
		return Text;
	}
}

function omAjaxContentControlAttribute(Key, Value)
{
	this.key = Key.Trim().toLowerCase();
	this.value = Value;
	
	this.toString = function()
	{
		return this.key + "=\"" + this.value + "\"";
	}
}

omAjaxContentControl.Create = function(PseudoCode)
{
	var Attrib = omContentLoader.rControl.exec(PseudoCode);
	var Control = new omAjaxContentControl(Attrib[2], Attrib[3], Attrib[1]);
	
	
	if (Attrib.length > 4)
	{
		var Attributes = Attrib[4];
		while (omContentLoader.rAttribut.test(Attributes))
		{
			var Matches = omContentLoader.rAttribut.exec(Attributes);
			Control.addAttribut( omAjaxContentControlAttribute.Create(Matches[0]) );
			Attributes = Attributes.replace(Matches[0], "");
		}
	}
	
	
	return Control;
}


omAjaxContentControlAttribute.Create = function(PseudoCode)
{
	var Attrib = omContentLoader.rAttribut.exec(PseudoCode);
	var ThisAttribute = new omAjaxContentControlAttribute(Attrib[1], Attrib[2]);
	return new omAjaxContentControlAttribute(Attrib[1], Attrib[2]);
}


