/**
 * Lightweight JS-Template-Engine
 * 
 * <code>
 * var tpl = new Template('Hello ${fname} ${lname}!', {
 *					fname: 'Template',
 *					lname: 'Engine',
 * 				} );
 * alert(tpl);
 * </code>
 * 
 * @author Marcel Eichner // Ephigenia <marcel@studentsn.com>
 * @since 2009-12-11
 */
function Template(template, data) {
	this.varRegExp = /\$\{([^\}]+)\}/g;
	this.template = template;
	this.data = (typeof (data) == 'object') ? data : {};
	this.render = function() {
		var rendered = this.template;
		while (match = this.varRegExp.exec(this.template)) {
			if (!match[1] || !this.isSet(match[1]))
				continue;
			var regexp = match[0].replace(/([.{}$])/g, '\\$1');
			rendered = rendered.replace(new RegExp(regexp, 'g'), new String(
					this.get(match[1])));
		}
		return rendered;
	}
}
Template.prototype.set = function(name, value) {
	if (typeof (name) == 'object') {
		for (attr in name) {
			this.data[attr] = name[attr];
		}
	} else {
		this.data[name] = value;
	}
	return true;
}
Template.prototype.get = function(name) {
	if (!this.isSet(name))
		return false;
	return eval('this.data.' + name);
}
Template.prototype.isSet = function(name) {
	try {
		return (eval('typeof(this.data.' + name + ')') != 'undefined');
	} catch (e) {
	}
	return false;
}
Template.prototype.toString = function() {
	return this.render();
}
Template.prototype.isSet = function(name) {
	try {
		return (eval('typeof(this.data.' + name + ')') != 'undefined');
	} catch (e) {
	}
	return false;
}
Template.prototype.toString = function() {
	return this.render();
}
