elib.TemplateManager = function ()
{
	this.version = "7.0.1";
	
	/**
	 * Ausgehend von elib.rootPath das Unterverzeichnis aus die Templates geladen werden.
	 */
	this.basePath = "/templates/";

	/**
	 * Gibt an, ob die Templates remote per AJAX oder lokal über das Dateisystem heruntergeladen werden.
	 */
	this.remote = true;

	/**
	 * Beinhaltet alle vorgenommen Zuweisungen per assign bzw. parse.
	 */
	this.assigns = {};

	/**
	 * Beinhaltet den (ungeparsed) HTML-Code aller bereits geladenen Einzeltemplates.
	 */
	this.tplCache = {};

	if ( arguments.length >= 1 )
	{
		this.basePath = arguments[0];
	}
	
	if ( arguments.length >= 2 )
	{
		this.remote = arguments[1];
	}
	
	
	/**
	 *
	 */
	this.assign = function () 
	{ 
		var marker = null;
		var value = null;
		
		if ( arguments.length >= 1 )
		{
			marker = arguments[0];
		}
		
		if ( arguments.length >= 2 )
		{
			value = arguments[1];
		}
		
		if (value == null)
		// Zuweisung per named Array
		{
			for (mm in marker)
			{
				this.assign (mm, marker[mm]);
			}
		}
		else
		// Einzelne Zuweisung
		{
			this.assigns[marker] = value;
		}
	};

	/**
	 *
	 */
	this.parse = function ()
	{
		var marker = null;
		var template = null;
		
		if ( arguments.length >= 1 )
		{
			marker = arguments[0];
		}
		
		if ( arguments.length >= 2 )
		{
			template = arguments[1];
		}

		if (template == null)
		{
			template = marker;
			marker = null;
		}
		
		var append = (template.indexOf (".") == 0);
		
		if (append)
		{
			template = template.substr (1);
		}
		
		// Template wurde noch nicht geladen
		if ( this.tplCache[template] == null ) 
		{
			this.loadTemplate (template);
		}
	
		var html = new String ( this.tplCache[template] );

		for (aa in this.assigns)
		{
			//html = html.replace ("{" + aa + "}", this.assigns[aa], "g");
			html = elib.util.str_replace ("{" + aa + "}", this.assigns[aa], html);
		}
		
		if (marker == null)
		// Kein Marker angegeben, daher Endausgabe zurückgeben
		{
			return html;
		}
		else 
		// Wenn ein Marker angegeben wurde, das Ergebnis in die Assigns einfügen			
		{
			if (this.assigns[marker] == null)
			{
				this.assigns[marker] = "";
			}
			
			if (append)
			{
				this.assigns[marker] += html;
			}
			else
			{
				this.assigns[marker] = html;
			}
			
		}
	};
	
	/**
	 *
	 */
	this.fetch = function (marker)
	{
		if ( this.assigns[marker] == null )
		{
			return false;
		}
		
		return this.assigns[marker];
	};

	/**
	 *
	 */
	this.clear = function (marker)
	{
		if ( marker == null )
		{
			this.assigns = {}
		}
		else
		{
			delete this.assigns[marker];
		}
	};

	/**
	 *
	 */
	this.loadTemplate = function (template)
	{
		// Laden des Html-Templates per AJAX
		if (this.remote)
		{
			var url = elib.rootPath + this.basePath + template + ".html";
			var result = null;			
			
			$.ajax({
				async: false,
				type: "GET",
				url: url,
				success: function(html)
				{
					result = html;
				}
			 });
			
			this.tplCache[template] = result;
		}
	};
};