/**
 * TemplateManager
 * This class is used to retreive empty html that will be used as a base for creating Viewer content etc. 
 * I would like to provide users with the ability to choose general templates for displaying thier content 
 * and simply let content be injected into the template and displayed. 
 */ 

//TODO: split following class into its own file.
var TemplateRequest=AjaxQuery.extend({
	initialize:function(map, name)
	{
	this.parent({task:"template",json:{'name':name}},map.serverClient);
	}
});

var TemplateManager=new Class({
	options:
	{
	templates:{'default':'<div></div>'},
	prefix:"map"
	},
	initialize:function(mediaMap,options){
		var me=this;
		me.mediaMap=mediaMap;
		if(!me.mediaMap.templateWorkspace)
		{	
			me.mediaMap.templateWorkspace=new Element('div',{id:'templateWorkspace',styles:{display:"none"}});
			me.mediaMap.element.appendChild(me.mediaMap.templateWorkspace);
		}
		var me=this;
		me.setOptions(options);
	},
	getTemplate:function(name ,callback){
		var me=this;
		/** prepareTemplate takes a html string and converts it to a DOM node. then executes the callback*/
		var prepareTemplate=function(html){
			var page=new Element('div',{id:name+'Window_page', "class":name+'_window_page'});
			page.innerHTML=html;
			me.mediaMap.templateWorkspace.appendChild(page);
			callback(page);
		};
		if(!me.options.templates[name]){
			var templatesQuery=new TemplateRequest(me.mediaMap, name);	//have to request template from the server.
			templatesQuery.addEvent('onSuccess',function(str){
				me.options.templates[name]=str;	//store it for later use.
				prepareTemplate(str);
			});
			templatesQuery.addEvent('onFailure',function(){
				mm_debug("Template Request Failed.");
			});
			mm_debug('Template Request: ['+name+']');
			templatesQuery.execute();
		}else{		
			prepareTemplate(me.options.templates[name]); //tamplate already stored so just prepare.
		}
	}
});
TemplateManager.implement(new Options());
