function ElusiveTemplate()
{
	var objects;
	var ArrayClasses=new Array();
	


	this.CreateTemplate = function(elusive_template)
	{

		
		classes=elusive_template.getElementsByTagName("classes")[0];
		objects=elusive_template.getElementsByTagName("objects")[0];
    	alerts=elusive_template.getElementsByTagName("alerts")[0];
    	cms_content=elusive_template.getElementsByTagName("cms_content")[0];
		sys_msg=elusive_template.getElementsByTagName("sys_msg")[0];
		
		
		//alert("Erstellen...");

		//CreateClasses(classes);
		CreateObjects(objects);
		UpdateContent(cms_content);
    	ShowAlert(alerts);
		ShowSysMsg(sys_msg);


		document.getElementById("loading_msg").style.visibility="hidden";
		document.getElementById("loading_msg").style.display="none";
		
		
		
	}
	
	
	this.UpdateTemplate = function(elusive_template)
	{
		

		
		classes=elusive_template.getElementsByTagName("classes")[0];
		objects=elusive_template.getElementsByTagName("objects")[0];
    	form=elusive_template.getElementsByTagName("form")[0];
    	alerts=elusive_template.getElementsByTagName("alerts")[0];
    	cms_content=elusive_template.getElementsByTagName("cms_content")[0];
		sys_msg=elusive_template.getElementsByTagName("sys_msg")[0];
		
		//alert("Update...");
		
		UpdateClasses(classes);
		UpdateObjects(objects);
 		UpdateForm(form);
		UpdateContent(cms_content);
    	ShowAlert(alerts);
 		ShowSysMsg(sys_msg);

	
	}

	
	  var ShowAlert = function (alerts)
	  {
	        
	        anz=alerts.childNodes.length;
	        //alert(anz);
	        for(i=0; i < anz; i++)
	        {
	            msg=alerts.childNodes[i].firstChild.nodeValue;
	            alert(msg);
	
	        }
	
	
	  }
  
  
	  var ShowSysMsg = function (alerts)
	  {
	        
	        anz=alerts.childNodes.length;
	        //alert(anz);
	        for(i=0; i < anz; i++)
	        {
	            msg=alerts.childNodes[i].firstChild.nodeValue;
	            sys_msg = new SysMsg(msg);
				
	        }
	
	
	  }
  
  
  


  var UpdateForm = function(form)
  {
      
      if (form.hasChildNodes())
      {
          checkName=form.getElementsByTagName("checkName")[0].firstChild.nodeValue;

          if (form.getElementsByTagName("checkInfo")[0].childNodes.length == 1 )
          		checkInfo=form.getElementsByTagName("checkInfo")[0].firstChild.nodeValue;
          else
          		checkInfo="...";
          
          if (form.getElementsByTagName("checkStatus")[0].childNodes.length == 1 )
          	checkStatus=form.getElementsByTagName("checkStatus")[0].firstChild.nodeValue;
          else
          	checkStatus=1;
          	
					att_class =document.createAttribute("class");

          if (checkStatus == 1) 
          {
							att_class.nodeValue="form_success";
							
          }else if (checkStatus == 0)
          {
							att_class.nodeValue="form_error";
							//document.getElementById("felement_"+checkName).value=checkInfo;
							alert(checkInfo);
          }
          
          
					document.getElementById("felement_"+checkName).setAttributeNode(att_class);

      }


  }

	

	var CreateClasses = function(classes)
	{
		var CssRuleId=0;
		anz=classes.childNodes.length;
		document.styleSheets[0].cssText="";
		for (i=0; i< anz; i++)
		{
			node=classes.childNodes[i];
			name=node.getElementsByTagName("name")[0].firstChild.nodeValue;
			if (node.getElementsByTagName("css")[0].childNodes.length == 0)
			css="";
			else
			css=node.getElementsByTagName("css")[0].firstChild.nodeValue;
			
			addText="."+name+"{"+css+"}";
			
			if (browser == "MSIE")
			{
				if (css != "") 
				{
					document.styleSheets[0].addRule("."+name, css);
					CssClasses[name]=CssRuleId;
					CssRuleId++;
				}
				else CssClasses[name]=-1;
			}
			else
			{
				if (css != "")
				{
					document.styleSheets[0].insertRule(addText, 0);
					CssClasses[name]=CssRuleId;
					CssRuleId++;				
				}
				else CssClasses[name]=-1;
			}
		}
		
	
	}

	var UpdateClasses = function(classes)
	{
		anz=classes.childNodes.length;
		for (i=0; i< anz; i++)
		{
			node=classes.childNodes[i];
			name=node.getElementsByTagName("name")[0].firstChild.nodeValue;
			if (node.getElementsByTagName("css")[0].childNodes.length == 0)
			css="";
			else
			css=node.getElementsByTagName("css")[0].firstChild.nodeValue;
			
			replaceText="."+name+"{"+css+"}";
			rule_id=CssClasses[name];
			
			if (rule_id >= 0)
			{
				if (browser == "MSIE")
				{
					document.styleSheets[0].removeRule(rule_id);
					document.styleSheets[0].addRule("."+name, css, rule_id);
				}
				else if (browser == "Opera")
				{
					document.styleSheets[0].cssRules[rule_id].style.cssText=css;
				}
				else
				{
					document.styleSheets[0].deleteRule(rule_id);
					document.styleSheets[0].insertRule("."+name+"{"+css+"}", rule_id);
				}
			}	
		}
		
	
	}



	var CreateObjects = function(objects)
	{
		DoChildrenCreate(' ', document.body);
	}

	
	var UpdateObjects = function(objects)
	{
		var item=0;
		anz=objects.childNodes.length;
		for (item=0; item<anz; item++)
		{
			if (objects.childNodes[item].getElementsByTagName("id")[0].childNodes.length == 0) ob_id = "";
			else ob_id=objects.childNodes[item].getElementsByTagName("id")[0].firstChild.nodeValue;
			if (objects.childNodes[item].getElementsByTagName("class")[0].childNodes.length == 0) ob_class="";
			else ob_class=objects.childNodes[item].getElementsByTagName("class")[0].firstChild.nodeValue;
			
			
			if (ob_id != "")
			{
				node=document.getElementById(ob_id);

			}
		
		
		}
	
	
	}
	
	
	
	var DoChildrenCreate = function(parent, parent_node)
	{
		rank =1000;
		var item=-1;
		anz=objects.childNodes.length;
		for (i=0; i < anz; i++)
		{
			var node=objects.childNodes[i];
			if (node.getElementsByTagName("parent")[0].childNodes.length == 0) CurParent=' ';
			else CurParent=node.getElementsByTagName("parent")[0].firstChild.nodeValue;
				
			if ((parent == CurParent))
			{
				CurRank=node.getElementsByTagName("rank")[0].firstChild.nodeValue;
				if (CurRank < rank)
				{
					
					item=i;
					rank=CurRank;
				}
			}
		}
		if (item != -1)
		{
			if (objects.childNodes[item].getElementsByTagName("id")[0].childNodes.length == 0) ob_id = "";
			else ob_id=objects.childNodes[item].getElementsByTagName("id")[0].firstChild.nodeValue;
			if (objects.childNodes[item].getElementsByTagName("class")[0].childNodes.length == 0) ob_class="";
			else ob_class=objects.childNodes[item].getElementsByTagName("class")[0].firstChild.nodeValue;
			
			
			var node = document.createElement("DIV");


			var att_class =document.createAttribute("class");
			att_class.nodeValue=ob_class;
			node.setAttributeNode(att_class);
			
			var att_id = document.createAttribute("id");
			att_id.nodeValue=ob_id;
			node.setAttributeNode(att_id);	
			
			
			node.setAttribute('style', 'z-index: 1;');
			
												//clickIt(event, this); 
												//oncontextmenu=\"return false;\"
			node.innerHTML="<div  id="+ob_id+"_object ></div>";
			
			
			objects.removeChild(objects.childNodes[item]);
			
			DoChildrenCreate(ob_id, node);
			parent_node.appendChild(node);
			
			DoChildrenCreate(parent, parent_node);
			
			
		
		}
	
	}
	
	
	
	var UpdateContent = function (cms_content)
	{
		anz=cms_content.childNodes.length;
		for (i=0; i< anz; i++)
		{
			if (cms_content.childNodes[i].getElementsByTagName("id")[0].childNodes.length == 0) id = "";
			else id = cms_content.childNodes[i].getElementsByTagName("id")[0].firstChild.nodeValue;
			if (cms_content.childNodes[i].getElementsByTagName("type")[0].childNodes.length == 0) type = "";
			else type = cms_content.childNodes[i].getElementsByTagName("type")[0].firstChild.nodeValue;
			if (cms_content.childNodes[i].getElementsByTagName("content")[0].childNodes.length == 0) content = "";
			else content = cms_content.childNodes[i].getElementsByTagName("content")[0].firstChild.nodeValue;
			
			content=content.replace(/&amp;/g, "&");
			
			//alert("Update ID: "+id);
			
			
			
			var debug_text="";
			if (id == "Footer_object")
			{ 
				Debugger.StopJS();
			
				var backend_time=10;
				backend_time=Math.abs(Debugger.sql_time)+Math.abs(Debugger.php_time);
				request_time=Math.abs(Debugger.request_time)-backend_time;
	  
	  		iframe_time=Debugger.iframe_time;
	  		if (typeof iframe_time == "undefined") iframe_time=0;
	  
	  		js_time=Debugger.js_time;
	  		if (typeof js_time == "undefined") js_time=0;
	  
	  
				gui_time=Math.abs(iframe_time)+Math.abs(Debugger.request_time)+Math.abs(js_time);
				
				gesamt_time=backend_time+gui_time;
				
				
				debug_text="<font color=black><code><br>----------------------------------<br>DEBUG:<br>----------------------------------<br>";
				debug_text+="Backend<br>";
				debug_text+="SQL: "+Debugger.sql_time+"<br>";
				debug_text+="PHP: "+Debugger.php_time+"<br>";
				debug_text+="----------------------------------<br>";
				debug_text+="<b>Backend Gesamt: "+backend_time+"</b><br>";
				debug_text+="<br><br>";
				debug_text+="GUI<br>";
				debug_text+="Iframe: "+iframe_time+"<br>";
				debug_text+="Übertragungszeit: "+Debugger.request_time+"<br>";
				debug_text+="JS Verarbeitung: "+js_time+"<br>";
				debug_text+="----------------------------------<br>";
				debug_text+="<b>GUI Gesamt: "+gui_time+"</b><br>";
				debug_text+="<br><br>";
				debug_text+="----------------------------------<br>";
				debug_text+="<b>GESAMT: "+gesamt_time+"</b><br>";
								
				debug_text+="<br><br><br>"+Debugger.infos+"<br><br><br>";				
								
				debug_text+="<br><br><br>&nbsp;</code></font>";
				debug_text="";
			}
			
			if (type == "replace")
			{
				try
				{
				
					document.getElementById(id).innerHTML=content+debug_text;
				}
				catch(e)
				{
					//alert(id+" existiert nicht!");
				}
			
			}
			else if (type == "add")
			{
				old=document.getElementById(id).innerHTML;
				new_content=content+old;
				
				
				
				document.getElementById(id).innerHTML="";
				document.getElementById(id).innerHTML=new_content+debug_text;
				
			}
			
			
			
		}
		
		
	}








}