/*
REQUIERE JQUERY

Para que un subtemplate sea parseado, debe haber un contenido dinamico
de nombre igual del pseudotag del subtemplate pero con show. precediendo al sub. que valga TRUE. 
Si no, no se parsea.

Es decir:
<%sub.pseudotag%> --> aquí se coloca un subtemplate parseado
TemplateParser.dynamic_content["show.sub.pseudotag"] --> indicador de si un subtemplate debe ser parseado
*/

var TemplateParser = {
	TEMPLATES_DIR:		'',
	PSEUDOTAG_REGEXP:	'<%[^<%>]+%>',
	templates:			new Array(),
	dynamic_content:	new Array(),

	parseTemplate: function( template_name ) {
		var string_to_be_parsed = this.templates[template_name];
		var pseudotags = new Array();
		var match_regex = new RegExp(this.PSEUDOTAG_REGEXP, "gi");
		pseudotags = string_to_be_parsed.match( match_regex );
		if ( pseudotags )
		{
			var pseudotag_names = new Array();
			for ( var x=0; x<pseudotags.length; x++ )
			{
				var pseudotag_name = pseudotags[x].substr(2);
				pseudotag_name = pseudotag_name.substr(0,pseudotag_name.length-2);
				// Si comienzo con sub. es un subtemplate
				if ( pseudotag_name.search("sub.") > -1 )
				{
					if (!this.templates[pseudotag_name])
					{
						this.templates[pseudotag_name] = $.ajax({
							url: this.TEMPLATES_DIR+pseudotag_name+'.html',
							async: false
						}).responseText;
					}
					if ( this.dynamic_content["show."+pseudotag_name] == true )	{
						this.setDynamicContent( pseudotag_name, this.parseTemplate(pseudotag_name) );
					} else {
						this.setDynamicContent( pseudotag_name, "" );
					}
				}
				var dyncontent_name = pseudotags[x].replace(/\./g, "\.");
				var rege = new RegExp(dyncontent_name, "g");
				var contenido = (this.dynamic_content[pseudotag_name]) ? this.dynamic_content[pseudotag_name] : '';
				string_to_be_parsed = string_to_be_parsed.replace(rege, contenido);
			}
		}
		return string_to_be_parsed;
	},
	parse: function( template_name, target_block, callback ) {
		if ( this.validate() )
		{
			if ( this.templates[template_name] ) {
				target_block.innerHTML = this.parseTemplate( template_name );
				if ( callback ) {
					callback('templateparsed');
				}
			} else {
				var target_url = this.TEMPLATES_DIR+template_name+".html";
				$.ajax({
					url: target_url,
					dataType: 'text',
					success: function(result) {
						TemplateParser.templates[template_name] = result;
						TemplateParser.parse(template_name, target_block);
						if ( callback ) {
							callback('templateparsed');
						}
					}
				});
			}
		}
	},
	setDynamicContent: function( content_name, content_value ) {
		this.dynamic_content[content_name] = content_value;
	},
	removeDynamicContent: function( content_name ) {
		this.dynamic_content[content_name] = null;
	},
	appendDynamicContent: function( content_name, content_value ) {
		this.dynamic_content[content_name] += content_value;
	},
	validate: function() {
		return (this.TEMPLATES_DIR != '' && this.PSEUDOTAG_REGEXP != '');
	}
}