function TemplateWriter(e)
{
	this.element = document.getElementById(e);
	this.baseHTML = this.element.innerHTML;

	this.arrays = {};
	this.vars = null;
	
	this.AssignVarToLoop = function(loop_name,data_array,classes) {
		this.arrays[loop_name] = {'data':data_array,'classes':classes};
	}
	
	this.AssignVarToElement = function(data_array) {
		this.vars = data_array;
	}
	
	this.Render = function() {
		var output = this.baseHTML;

		for(var loop in this.arrays) {
			var classes = this.arrays[loop].classes;
			var data = this.arrays[loop].data;

			if (data) {
				var startloop = "<!-- start "+loop+" -->";
				var endloop = "<!-- end "+loop+" -->";
				
				var loopstarts = output.indexOf(startloop)+startloop.length;
				var loopends = output.indexOf(endloop);
								
				var preloop = output.substr(0,loopstarts);
				var inloop = output.substr(loopstarts, loopends-loopstarts);
				var postloop = output.substr(loopends);
				
				output = preloop;
				var c = 0;
				
				for(var i=0; i<data.length; i++) {
					var row = inloop;
					if (classes) {
						data[i].row_class = classes[c];
						c++;
						if (c >= classes.length) { c=0; }
					}
					
					for(var d in data[i]) {
						if (typeof(data[i][d]) != "function" && typeof(data[i][d]) != "object" && typeof(data[i][d]) != "array") {
							row = row.split("{"+d+"}").join(data[i][d]);
							row = row.split("%7B"+d+"%7D").join(data[i][d]);
							row = row.split("%7b"+d+"%7d").join(data[i][d]);
						}
					}
					output += row;
				}
				output += postloop;
			}
		}

		if (this.vars) {
		 	for(var i in this.vars) {
		 		if (typeof(this.vars[i]) != "function" && typeof(this.vars[i]) != "object" && typeof(this.vars[i]) != "array") {
					output = output.split("{"+i+"}").join(this.vars[i]);
					output = output.split("%7B"+i+"%7D").join(this.vars[i]);
					output = output.split("%7b"+i+"%7d").join(this.vars[i]);
				}
			}
		}		
		this.element.innerHTML = output;
	}
	
	this.Show = function() {
		this.element.style.display = "";
	}
	
	this.Hide = function() {
		this.element.style.display = "none";
	}
	
}