
//inicio dos componentes

TemplateManager = function(){
	
	this.loadedTemplatesURLs = new Hash();
	
	this.loadTemplatesFile = function(url){
		if (this.loadedTemplatesURLs.has(url))
			return;
		var templateHolderContent;
		var localLoadedTemplatesURLs = this.loadedTemplatesURLs;
		var http_request=false;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
         	} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
				}
			}
		}
		if (!http_request) {
			logger.error("templateManager: Your browser does not support XMLHTTP.");
		}
		http_request.open('GET', url, false);
		http_request.onreadystatechange = function(){
			if (http_request.readyState == 4){// if xmlhttp shows "loaded"
					if (http_request.status == 200){// if "OK" | quando no apache == 200, local == 0
						templateHolderContent = http_request.responseText;
						localLoadedTemplatesURLs.include(url,null);
					}else{
						logger.error("templateManager: Problem retrieving File data:" + http_request.statusText);
					}
				}
			}
		http_request.send(null);
		
		var templateHolder = "<div id='loadedTemplates' style='display: none;'>" + templateHolderContent + "</div>";
		if(document.getElementById("loadedTemplates")){
			document.getElementById("loadedTemplates").innerHTML += templateHolderContent;
		}else{
			//document.body.innerHTML += templateHolder;
			logger.error('templateManager: loadedTemplates DIV not found');
		}
	};
	
	this.loadTemplate = function(templateID){
		if(document.getElementById(templateID)){
			var template = document.getElementById(templateID).innerHTML;
			return template;
		}else{
			logger.error('templateManager: template ID not found('+templateID+')');
		}
	};
	
	this.setVars = function(template, varName, value){
		var template = template.replace(varName, value);
		return template;
	};
	
	this.applyTemplate = function(templateOutput, targetId){
		var target = document.getElementById(targetId);
		target.innerHTML += templateOutput;
	};
};

//classe para uso em listas de N niveis
ListTemplate = function(url, templateID, objectName){
	this.inheritFrom = TemplateManager;
  	this.inheritFrom();
  	this.loadTemplatesFile(url);//carrega os templates
  	this.objectName = objectName;
	this.mainTemplate = this.loadTemplate(templateID);
	
	this.insertListRow = function(rowTemplate, rowId, rowTitle, rowText, holderId){
		var newRow = this.loadTemplate(rowTemplate);
		newRow = this.setVars(newRow, "@@@TITLE@@@", rowTitle);
		newRow = this.setVars(newRow, "@@@TEXT@@@", rowText);
		newRow = this.setVars(newRow, "@@@OBJ@@@", this.objectName);
		newRow = this.setVars(newRow, /@@@ROWID@@@/g, rowId);//replaces all occurences
		
		if(document.getElementById(holderId+"_childs")){
			document.getElementById(holderId+"_childs").innerHTML += newRow;
		}else{
			document.getElementById(holderId).innerHTML += newRow;
		}
		if(document.getElementById(holderId+"_haveChilds")){
			document.getElementById(holderId+"_haveChilds").style.display = "";
		}
	};
	
	this.applyListTemplate = function(targetId, title, holderId){
		this.mainTemplate = this.setVars(this.mainTemplate, "@@@TITLE@@@", title);
		this.mainTemplate = this.setVars(this.mainTemplate, "@@@ROWHOLDERID@@@", holderId);
		
		this.applyTemplate(this.mainTemplate, targetId);
	};
	
	this.showHideChilds = function(id){
		if(document.getElementById(id).style.display == ""){
			document.getElementById(id).style.display = "none";
		}else{
			document.getElementById(id).style.display = "";
		}
	};
};

/*
 * 
 *
 * listTemplateTeste = new ListTemplate("templates.htm","listHolderTemplate","listTemplateTeste");
  
  listTemplateTeste.applyListTemplate("insertPoint", "Titulo Teste inserido Dinamicamente!", "rowHolder");//insere o template basico
  
  listTemplateTeste.insertListRow("listRowTemplate","A1" ,"Row Teste 1", "Texto... dckjnsa cl;dknsac dsnc dc;ldksanm ;jn", "rowHolder");//apenda rows
  listTemplateTeste.insertListRow("listRowTemplate","B1" ,"Row Teste 2", "Texto... ;ldksanm ;jn", "rowHolder");
  
  listTemplateTeste.insertListRow("listRowTemplateLvlB","A2A" ,"Row Lvl 2 Teste", "Texto... cdscadc dsci", "A1");
  listTemplateTeste.insertListRow("listRowTemplateLvlB","A2B" ,"Row Lvl 2 Teste", "Texto... 9876 dsci", "A1");
  listTemplateTeste.insertListRow("listRowTemplateLvlC","A3A" ,"Row Lvl 3 Teste", "Texto... 543tfre rfegf3 dsci", "A2B");
 * 
 * 
 * 
 * Consideracoes importantes!!!
 * 
 * Cada browser entende os nodos html de um jeito diferente. No MOZ, fica tudo minusculo. NO IE, tudo maiusculo.
 * 
 */
 