function templates(params) {
	
	// required params
	this.view = 'view';
	this.type = '';
	this.page = 1;
	this.limit = 10;
	this.start = 0;
	this.search = '';
	this.measures = 0; // 0: Metric, 1: Imperial
	this.selected = null;
	this.data = null;
	this.action = '';
	this.template = '';
	this.row_prefix = '';
	this.class_name = '';
	this.table_wrapper = '';
	this.json_array_name = '';
	this.selected_css_class = '';
	//this.dblclk_action_params = function(id) { return ['view', id]; };
	this.dblclk_action = function(id) { return ""; };
	this.selectCallback = function(id){return "";};
	this.selectCallback_onrequest = function(params){return "";};
	this.format_data = function(data){return data;};
	this.select_params = function(val){return val.id;};
	this.selected_params='[]';
	this.before_process = function(data){return data;};
	this.before_phpCall = function(){};
	this.post_process = function(){return "";};
	this.loadDiv='';
	this.firstLoad = 0;
	this.id='';
	this.name='';
	this.postMessage='Processing your request';
	/**
	 * loads the list template and gets data using internal vars
	 * @return
	 */
	
	  this.createmsgDiv =function(){
		var divId='';
		var txt = new String(me.loadDiv);
		if(txt.indexOf('#') !=-1){
		    divId = txt.replace('#','');
		}
		var height= $(me.loadDiv).height();
		var width= $(me.loadDiv).width();
		var left = (width-300)/2;
		var top = (height - (20+20))/2;
		var div ="<div id='"+divId+"msg' class='msgClass' style='position:absolute;display:none;top:40%;left:40%;z-index:980;'></div>";
		if(!$(me.loadDiv+'msg').length>0){
					//$(me.loadDiv).append(div);
					$('.divOuter').append(div);
		}
	};
	
	//this.confirm = new confirm_popup_new();
	var me = this;
	this.load = function(resp,callback) {
		me.createmsgDiv();
		//showLoading(me.loadDiv+'msg',me.postMessage);
		me.before_phpCall();
			$(me.loadDiv).removeTemplate();
			$(me.loadDiv).setTemplate(contentLoad.get_template_by_id(this.template),null,{filter_data:false});
		if(!resp){
			$.getJSON(this.phpPath, {action: this.action, start: this.start, limit: this.limit, search: this.search,id:this.id,type: this.type}, function(resp) {
				if(resp.response == 'ok') {
					me.loadData(resp);
				}
				//else
					//me.confirm.confirm_warning(resp.reason,function(){$.event.trigger('check_logged_in')});
			});
		}
		else me.loadData(resp);
		if(callback)
			callback();
	
	};
	
	this.loadData = function(resp){
		
		if(resp.response == 'ok') {
			//hideLoading(me.loadDiv+'msg');
			if(me.firstLoad==0){
				me.firstLoad=1;
			}
			else me.firstLoad=2;
			if(!resp[me.json_array_name])
				resp[me.json_array_name] = new Array();
			if(me.json_array_name!='')
		        me.format_data(resp[me.json_array_name]);
			
			me.data = resp;
			resp.row_prefix = me.row_prefix;
			resp = me.before_process(resp);
			/* if(resp.total==0){
				showLoading(me.loadDiv+'msg','No Records found');
			}
			
			
			else $(me.loadDiv+'msg').hide();*/
			if(me.json_array_name=='') me.format_data(resp); // added on 3rd feb for showing useclass from map (show info button)
			if(resp.total_pages==0) resp.total_pages=1;
			$(me.loadDiv).processTemplate(resp);
			if(me.selected){
				eval(me.class_name+".select(["+me.selected+"])");
				//me.current_params(me.selected);
				//eval(me.class_name+".select(["+me.selected_params+"])");	
			}
			me.register_links();
		}
		else me.unload();
		//hideLoading(me.loadDiv+'msg');
		//$(me.loadDiv+'msg').fadeOut();
	}
	
	
	this.unload = function(){
		//hideLoading(me.loadDiv+'msg');
		var resp="{\"response\":\"empty\",\"page\":\"1\",\"total_pages\":\"1\",\"total\":\"0\",\""+me.json_array_name+"\":[]}";
		var myobj = (new Function("return " + resp))() ;
		myobj.view = me.view;
		$(me.loadDiv).removeTemplate();
		$(me.loadDiv).setTemplate(contentLoad.get_template_by_id(me.template));
		myobj = me.before_process(myobj);
		$(me.loadDiv).processTemplate(myobj);
		me.post_process();
	}
	
	/**
	 * prepares internal variables for given parameters then
	 * makes list visible.
	 * @param params	parameters for list
	 * @return
	 */

	this.show = function(params) {
		// set parameters
		this.view = params[0];
		this.type = params[1];
		
		this.page = parseInt(params[2]);
		this.start = (this.page-1) * this.limit;
		this.load();
		
	};
	
	/**
	 * Changes page of results
	 * @param to	what kind of page change to do:
	 * 				0 - first page,
	 * 				-1 - previous page
	 * 				1 - next page
	 * 				2 - last page
	 * @return
	 */

	this.go = function(to) {
		
		switch(to) {
			case 0:
				this.show([me.view, me.type, 1, me.search]);
				break;
			case -1:
				if(this.page > 1)
					this.show([me.view, me.type, me.page-1, me.search]);
				break;
			case 1:
				if(this.page < Math.ceil(me.data.total / me.limit))
					this.show([me.view, me.type, me.page+1, this.search]);
				break;
			case 2:
				
				this.show([me.view, me.type, Math.ceil(me.data.total / me.limit), this.search]);
				break;
		}
	};
	
	
	/**Columbus
	 * registers links for this list
	 * @return
	 */
	this.register_links = function() {
		
		if(this.data['total_pages'] > 1) a.register_link('#'+me.row_prefix+'_go_first_new', [], this.class_name+'.go(0);');
		if(this.page > 1)
			a.register_link('#'+me.row_prefix+'_go_prev_new', [], this.class_name+'.go(-1);');
		if(this.page < Math.ceil(this.data.total / this.limit))
			a.register_link('#'+me.row_prefix+'_go_next_new', [], this.class_name+'.go(1);');
		if(this.data['total_pages'] > 1) a.register_link('#'+me.row_prefix+'_go_last_new', [], this.class_name+'.go(2);');
		
		$.each(this.data[this.json_array_name], function(i, val) {
			a.register_link('#'+me.row_prefix+val.id, [], me.class_name+".select(["+me.select_params(val)+"]);");
			a.register_double_click('#'+me.row_prefix+val.id, [], me.class_name+".dblclk_action(["+me.select_params(val)+"]);");
		});

		me.post_process();
		
	};
	
	
	
	this.select = function(params) {
		//alert(params);
		if(params=='') return;
		// remove old selected
			if(this.selected)
				$('#'+this.row_prefix+this.selected).removeClass(this.selected_css_class);
			// add new
			$('#'+this.row_prefix+params[0]).addClass(this.selected_css_class);
			//alert(this.selected);
			//alert(params[0]);
			if(this.selected!=params[0]){
				this.selected = params[0];
				me.selectCallback(params);
			}
			else{
				me.selectCallback_onrequest(params);
			}
			
	};
	
	this.current_params = function (id){
		//var params = new Array();
		$.each(me.data[me.json_array_name],function(i,val){
			if(val.id== id){
				//alert(val.id);
				me.selected_params=me.select_params(val);
			}
		});
		//return params;
		
	}
	
	/**
	 * prepares internal variables for given parameters then
	 * makes list visible.
	 * @param params	parameters for list
	 * @return
	 */
	
	
}

  function showLoading(divId,msg){
	$(divId).html(msg);
	$(divId).fadeIn();
	setTimeout("hideMsg('"+divId+"');",1000);
     }
     
     function hideLoading(divId){
	$(divId).hide();
     }




function search_templates(){
    // required params
	this.view = 'view';
	this.type = '';
	this.page = 1;
	this.limit = 10;
	this.start = 0;
	this.search = '';
	this.measures = 0; // 0: Metric, 1: Imperial
	this.selected = null;
	this.data = null;
	this.action = '';
	this.template = '';
	this.row_prefix = '';
	this.class_name = '';
	this.table_wrapper = '';
	this.json_array_name = '';
	this.selected_css_class = '';
	//this.dblclk_action_params = function(id) { return ['view', id]; };
	this.dblclk_action = function(id) { return ""; };
	this.selectCallback = function(id){return "";};
	this.selectCallback_onrequest = function(params){return "";};
	this.format_data = function(data){return data;};
	this.select_params = function(val){return val.id;};
	this.selected_params='[]';
	this.before_process = function(data){return data;};
	this.before_phpCall = function(){};
	this.post_process = function(){return "";};
	this.loadDiv='';
	this.firstLoad = 0;
	this.id='';
	this.name='';
	this.postData=null;
	
	/**
	 * loads the list template and gets data using internal vars
	 * @return
	 */
        //this.confirm = new confirm_popup_new();
        var me = this;
        
	this.load = function(resp) {
		me.before_phpCall();
			$(me.loadDiv).removeTemplate();
			$(me.loadDiv).setTemplate(contentLoad.get_template_by_id(this.template),null,{filter_data:false});
		if(!resp){
		    if(this.postData){
			this.postData.start = me.start;
			this.postData.limit = me.limit;
				$.post(this.phpPath+"?action="+this.action, {'json' : JSON.stringify(this.postData)}, function(resp) {
				if(resp.response == 'ok') {
				    me.loadData(resp);
				} else {
                                      //  me.confirm.confirm_warning(resp.reason,function(){$.event.trigger('check_logged_in')});
				}
			}, 'json');
		    }
		}
		else me.loadData(resp);
	};

	this.loadData = function(resp){
		
		if(resp.response == 'ok') {
			if(me.firstLoad==0){
				me.firstLoad=1;
			}
			else me.firstLoad=2;
			if(!resp[me.json_array_name])
				resp[me.json_array_name] = new Array();
			
			me.format_data(resp[me.json_array_name]);
			me.data = resp;
			resp.row_prefix = me.row_prefix;
			resp = me.before_process(resp);
			$(me.loadDiv).processTemplate(resp);
			if(me.selected){
				me.current_params(me.selected);
				eval(me.class_name+".select(["+me.selected_params+"])");	
			}
			me.register_links();
		} 
	}

	this.unload = function(){
		var resp="{\"response\":\"empty\",\"page\":\"1\",\"total_pages\":\"1\",\"total\":\"0\",\""+me.json_array_name+"\":[]}";
		var myobj = (new Function("return " + resp))() ;
		myobj.view = me.view;
		$(me.loadDiv).removeTemplate();
		$(me.loadDiv).setTemplate(contentLoad.get_template_by_id(me.template));
		myobj = me.before_process(myobj);
		$(me.loadDiv).processTemplate(myobj);
		me.post_process();
	}

	/**
	 * prepares internal variables for given parameters then
	 * makes list visible.
	 * @param params	parameters for list
	 * @return
	 */

	this.show = function(params) {
		// set parameters
		this.view = params[0];
		this.type = params[1];
		
		this.page = parseInt(params[2]);
		this.start = (this.page-1) * this.limit;
		this.load();
		
	};

	/**
	 * Changes page of results
	 * @param to	what kind of page change to do:
	 * 				0 - first page,
	 * 				-1 - previous page
	 * 				1 - next page
	 * 				2 - last page
	 * @return
	 */

	this.go = function(to) {
		
		switch(to) {
			case 0:
				this.show([me.view, me.type, 1, me.search]);
				break;
			case -1:
				if(this.page > 1)
					this.show([me.view, me.type, me.page-1, me.search]);
				break;
			case 1:
				if(this.page < Math.ceil(me.data.total / me.limit))
					this.show([me.view, me.type, me.page+1, this.search]);
				break;
			case 2:
				
				this.show([me.view, me.type, Math.ceil(me.data.total / me.limit), this.search]);
				break;
		}
	};
	
	
	/**Columbus
	 * registers links for this list
	 * @return
	 */
	this.register_links = function() {
	      //$('#'+me.row_prefix+'_go_first_new, #'+me.row_prefix+'_go_prev_new, #'+me.row_prefix+'_go_next_new, #'+me.row_prefix+'_go_last_new').unbind();
	      a.register_link('#'+me.row_prefix+'_go_first_new', [], this.class_name+'.go(0);');
	      if(this.page > 1)
		      a.register_link('#'+me.row_prefix+'_go_prev_new', [], this.class_name+'.go(-1);');
	      if(this.page < Math.ceil(this.data.total / this.limit))
		      a.register_link('#'+me.row_prefix+'_go_next_new', [], this.class_name+'.go(1);');
	      a.register_link('#'+me.row_prefix+'_go_last_new', [], this.class_name+'.go(2);');
	      $.each(this.data[this.json_array_name], function(i, val) {
		      a.register_link('#'+me.row_prefix+val.id, [], me.class_name+".select(["+me.select_params(val)+"]);");
		      a.register_double_click('#'+me.row_prefix+val.id, [], me.dblclk_action([me.select_params(val)]));
	      });
	      me.post_process();
	};

	this.select = function(params) {
		// remove old selected
			if(this.selected)
				$('#'+this.row_prefix+this.selected).removeClass(this.selected_css_class);
			// add new
			$('#'+this.row_prefix+params[0]).addClass(this.selected_css_class);
			if(this.selected != params[0]){
			    this.selected = params[0];
			    me.selectCallback(params);
			}
			else{
			      me.selectCallback_onrequest(params);
			}
	};

	this.current_params = function (id){
	  $.each(me.data[me.json_array_name],function(i,val){
	    if(val.id == id){
		  me.selected_params=me.select_params(val);
	    }
	  });
	}

	/**
	 * prepares internal variables for given parameters then
	 * makes list visible.
	 * @param params parameters for list
	 * @return
	*/

//

}


