
function Filter(jsname) {




// ####  all three filter functions need to be moved to a Filter js class. Filter class will also need a send func.
 // ####  then extend php Filter class to do ajax responses and create a filter.response.php
 
  this.jsname = jsname;
 
  Filter.prototype.send = function(command,container_id,classname,extra_args,success) {
 
   url = "/filter.response.php";
	 
	 
	 	 
   if (extra_args == null) extra_args = "nil=0";
	 if (this.extra != '') extra_args += "&"+this.extra;
   //ajaxEngine.registerAjaxElement(container_id);
   //alert("ajaxEngine.sendRequest( 'listChange','value=" + newval +"','command=" + command +"','container_id=" + container_id +"'"+extra_args +")");  // 'value' has to be renamed
   ////eval("ajaxEngine.sendRequest( 'listChange','value=" + newval +"','command=" + command +"','container_id=" + container_id +"'"+extra_args +")");  // 'value' has to be renamed
   pars = "command=" + command +"&classname="+classname+"&jsname="+this.jsname+"&container_id=" + container_id +"&"+extra_args+Filter.getfilters();  // 'value' has to be renamed
   
													 // need to fill the rest of the items send from ARGS
													 // should look like "order=1" ... might need to be encoded
		
	 //successFunc = "";											 
   //alert(pars);
	 if (!success) success = this.successFunc;
	 rerror = this.reportError;
	 var myAjax = new Ajax.Updater( {success: container_id}, url, {method: 'get', parameters: pars,  onComplete:success, onFailure: rerror, evalScripts: true}); 
											 
 }
 
 Filter.prototype.successFunc = function(){
   //alert("ajax success");
 
 }
 
 Filter.prototype.reportError = function() {
   alert("ajax failed");
 }
 
 Filter.prototype.addfilterrefresh = function(fkey,fvalue,classname,container) {
 	 this.addfilter(fkey,fvalue);
	 
	 	 //alert(fkey+" "+fvalue);
	 //alert(Liszts.length);
	 for (l=0;l<Liszts.length;l++) {
	   //alert(Liszts[l].listname + "*");
	   Liszts[l].refresh();
	 }
	 
	 this.send("refresh",container,classname); 
	 
 }
 
 Filter.prototype.addfilter = function(fkey,fvalue) {
   //Filters[Filters.length]=[fkey,fvalue];
	 Filters[fkey]=fvalue;
	 //Filters[0] = "test";
	 

	 // we might want to extend this for each filter type later ---
	 if (fkey == "value_id") Filters["goal_id"]=null;
	 //alert("fkey:"+fkey+",fvalue:"+fvalue+",count:"+Filters.length);
	 //alert(Filters[fkey]);
	 
	
 
 }
 
 
 
 Filter.prototype.removefilters = function(classname,container,keyval) {
 
   fkeys=$H(Filters).keys();
   for (i=0;i<fkeys.length;i++) {
	 //alert("fkeys:"+fkeys[i]);
     if (keyval == null || keyval == fkeys[i])
		   //alert("keyval:"+keyval);
		   Filters[fkeys[i]]=null;

	 } 
	 
	 this.send("refresh",container,classname);  
	 
	 for (l=0;l<Liszts.length;l++) {
	   //alert(l);
	   Liszts[l].refresh();
	 }  

 }

 
 
}

 
Filter.getfilters = function() {
   str = "";
	 found = false;
	 //alert(Filters.length);
	 fkeys=$H(Filters).keys();
   for (i=0;i<fkeys.length;i++) {
	  //alert(fkeys[i]);
	 //for (filter in Filters) {
	 //Filters.each( function(value,key) {
	   //return value;
		 
	   if (Filters[fkeys[i]] != null ) {
		   found=true;
		   str += fkeys[i]+":"+Filters[fkeys[i]]+"|";
		 }  
		 
	 }       //);
	 //alert(str);
	 if (found) {
	   str=str.substr(0,(str.length-1));
		 str="&filter="+str;
	 }	 
	 //alert(str);
	 return str;
 
}
