
/***
 *** 	JSTemplateEngine class
 ***	Date: 17/03/2008
 ***	Last-modified: 18/04/2008
 ***	ver. 1.0.1
 ***
 ***/

/***
 ****		required, includes
 ***/

function IncludeJavaScript(jsFile) {
  document.write('<script type="text/javascript" src="' + jsFile + '"></script>'); 
}
IncludeJavaScript('common_g.js'); 


/***
 ****		JSTemplateEngine Class
 ***/


function JS_TE()
{
//	alert("constructor of TE");
	var replaceArr = new Array();
	var delims = new Array("{$","}");
	var spec_char_replacement = {	"{ltrim}"	:	"{", 
									"{rtrim}"	:	"}"	};
	
	this.assign = assign;
	this.unset = unset;
	this.unsetAll = unsetAll;	
	this.fetch = fetch;
	this.show = show;
	
	this.forceEncodedReplace = false;
	var ua = navigator.userAgent.toLowerCase();
	if(ua.indexOf("gecko")>-1) this.forceEncodedReplace=true;
	
	
	
	
	function assign() // arr_of_replaces
	{
//		if (typeof(arguments[1])=='undefined') alert('He-he-he!');
		
		var arg0 = arguments[0];
		var arg1 = arguments[1];

//		if (typeof(arguments[1])!='undefined') arg1 = arguments[1].toString();
		if (is_array(arg0) || is_hash(arg0)) {
//			alert('is_array');
			for (var k in arg0) 
				if ( !in_array(k, arrPrototypeReserved) && empty(replaceArr[k])) replaceArr[k] = arg0[k]+'';
		} else {
			if (is_undef(arg1)) return false;
			replaceArr[arg0] = arg1+'';
		}
		return true;
	}

	function show() 
	{
		replaceArr.show();
//		alert('sdg');
//		if (empty(g333)) alert(replaceArr["adgs"]);
	}

	function unset(var_name) 
	{
//		replaceArr[var_name] = null;
//		delete replaceArr.var_name;
		delete replaceArr[var_name];
	}

	function unsetAll() 
	{
//		replaceArr[var_name] = null;
//		delete replaceArr.var_name;
//		delete replaceArr;
		replaceArr = new Array();
//		alert('sdhs');
	}

	function fetch(elem_data) 
	{
//		replaceArr["adgs"] = "asfasgasg";
//		alert(typeof(elem_data));+
		var elem; // instance of HTMLElement
		var text = ''; // Template text
		
		if (!is_object(elem_data)) {
			if (!elem_data.match(/[; "']/)) elem = getElement(elem_data);
		} else {elem = elem_data;}
		
		if (empty(elem)) {
			text = elem_data;
//			return false;
		} else {
			if (!empty(elem.innerHTML)) {
				text = elem.innerHTML;
			} else if (!empty(elem.value)) {
				text = elem.value;
			}
		}
			
		if (!empty(text)) {
//			alert('cooool!' + text);

			// replacing vars with theirs values
			for (var k in replaceArr) if (  !in_array(k, arrPrototypeReserved) ) {
//				text = text.replace("/"+delims[0] + k + delims[1]+"/gi", replaceArr[k]);
				regExp = new RegExp("{\\$" + k + "}", "gi")
				text = text.replace(regExp, replaceArr[k]);
				if (this.forceEncodedReplace) {
					regExp = new RegExp(encodeURI("{")+"\\$" + k + encodeURI("}"), "gi");
					text = text.replace(regExp, replaceArr[k]);
				}
			}
			// removing empty vars
			regExp = new RegExp("{\\$[0-9a-zA-Z_]+}", "gi");
//			regExp = /{\$[a-z]+$}/gi;
			text = text.replace(regExp, '');

			if (this.forceEncodedReplace) {
				regExp = new RegExp(encodeURI("{") + "\\$[0-9a-zA-Z_]+" + encodeURI("}"), "gi");
				text = text.replace(regExp, '');
			}

			
			
			// In a future all "{xxx}" constructions will be removed
/*
			//	Removing All "{", "}" entries
			regExp = new RegExp("{[0-9a-zA-Z]+}(?!({ltrim}|{rtrim}))", "gi");
			text = text.replace(regExp, '');*/

			
			for (var k in spec_char_replacement) if (  !in_array(k, arrPrototypeReserved) ) {
				text = text.replace( k , spec_char_replacement[k]);
			}
			return text;
		}
		
		return false;
		
//		replaceArr[var_name] = null;
//			alert("key:"+key+";val:"+val);
	}



}
