/*  
 * General utilities available for all AJAX's Events 
 * This File is the container for all implemetations about of the Ajax
 */

var request_count = 0;
document.write("<table style='display:block' class='filter_window' border='0' id='filter_window'><tbody><tr><td class='filter_winlist' id='filtervalueslist'><!--BODY--></td></tr></tbody><\/table>");


function treeGetRPCUrl(ruleSet,ruleparam){
  var url = 'AjaxUtility';   
  var pars = "_action_ajax_controller=";		    
  pars += "&wkey="+__wkey;
  pars += "&wpkey="+__wpkey;		    
  pars += "&appkey="+__appkey;		    		      
  pars += "&f=getTreeNavigatorData";			    
  pars += "&a="+escape(ruleSet);		    
  pars += "&a=" + $_$H(ruleparam).inspect().match(/\{.*\}/g).toString().replace(/'/g,'"');
  pars += "&a="+request_count++;		
  return url+"?"+pars;
}

/************************************************************************* 
 *** Author: Yovanis Cáceres López
 *** Created: 06-07-06
 *** Comment: Object to handler getFilterValues
 *************************************************************************/
var FilterValues = {
fieldName       : "",
value           : "",
getDisplayValue : function(key){
                    try{
					    var listdata = eval("FilterValues."+this.fieldName);
						for(var i=0; i < listdata.length; i++)
						    if(listdata[i][0] == key) return listdata[i][1];
						}
					catch(e){}
					return key;		    
                  },
doFilter        : function(value){   
                    this.value = value.indexOf(",") > 0 ? value : value.replace(/[",']/g,"");
                    var scid = "doFilter_<name>".replace(/<name>/g,this.fieldName);
					scfn = $_$(scid);
					if(scfn){		      
    					eval(scfn.innerHTML);		      
						var exp = "<scrid>(\"<value>\")".replace(/<scrid>/g,scid).replace(/<value>/g,this.value);      		      
						eval(exp);		      
					}                    
                  },
getFilterValues : function (fieldname,value){
		    Element.show("filter_window");
			this.fieldName = fieldname ? fieldname : this.fieldName;
			var url = 'AjaxUtility';      		    
		    var pars = "_action_ajax_controller="; 
		    pars += "&wkey="+__wkey;
		    pars += "&wpkey="+__wpkey;
		    pars += "&appkey="+__appkey;
		    pars += "&f=getFilterValues";
		    pars += "&a="+this.fieldName;  //+escape(document.getElementById('query').value);
		    pars += "&a="+escape(value);
		    pars += "&a="+request_count++;		
		    var myAjax = new Ajax.Request(		
			    url, 
			    {
				    method: 'get', 
				    parameters: pars,
				    onFailure: this.handlerError,
				    onSuccess: this.handlerResponse
			    });
		    this.initWinList();
	          },	    
handlerResponse : function (res){ 
				  try{		    		    
					filterValues = eval(res.responseText);                    
					//FilterValues.winList = document.getElementById("filtervalueslist"); 
					//FilterValues.winList.innerHTML = "<div style='width:100%;cursor:pointer;color:yellow;background-color:navy' onclick='document.getElementById(\"filtervalueslist\").style.display= \"none\"'>Close</div>"		    
					for(var i=0; i < filterValues.length; i++){
						value = "'"+(filterValues[i].toString().indexOf(",") >0 ? filterValues[i][1] : filterValues[i])+"'";
						if (filterValues[i].pop && typeof(filterValues[i][1]) != 'string'){
						  
						  switch(filterValues[i][1][0]){//TODO: keep working on this
						    case 'RANGE':
						      value = "('RANGE',("+filterValues[i][1][1]+"))";
							  break;
						    default:
						      value = value.indexOf(",") > 0 ? '(-)'.replace(/-/g,value.replace(/,/,"','")) : value;
						  }						  
						}
						else{
						  value = value.indexOf(",") > 0 ? '(-)'.replace(/-/g,value.replace(/,/,"','")) : value;						  
						}
						displayvalue = (filterValues[i].toString().indexOf(",") > 0 ? filterValues[i][0] : filterValues[i]).toString();
						displayvalue = FilterValues.getDisplayValue(displayvalue);
						
						if((filterValues[i].toString().indexOf(",") > 0) && (filterValues[i][1] == "option_group"))		      
							new Insertion.Bottom('filtervaluesbody', "<div class='filter_item_group'><i><b>"+displayvalue+"</b></i></div>")		      
						else
							new Insertion.Bottom('filtervaluesbody', '<div class="filter_item_out" onmouseout="this.className=\'filter_item_out\'" onmouseover="this.className=\'filter_item_over\'" onclick="$_$(\'filtervalueslist\').style.display=\'none\';FilterValues.doFilter(\''+value.replace(/'/g,"\\'")+'\')">'+displayvalue+'</div>');
					  }
					}
				  catch(e){alert(e);}
				  FilterValues.showWinList() 
				  },
handlerError : function (){
		   alert('Sorry. There was an error. ');
               },
winTitle       : "List of Values",
winList        : null,
initWinList  : function(event){
                   this.readyToClose = false;
                   this.winList = $_$("filtervalueslist");
		   Element.show(this.winList); 
		   Element.update(this.winList,"<div id='winListTitle' class='filter_item_close' onclick='Element.hide(\"filter_window\")'></div>");
		   new Insertion.Bottom("winListTitle", this.winTitle);	    		    		   
		   new Insertion.Bottom(this.winList, "<div class='filter_item_scrolloff' id='filtervaluesbody' ></div>");	    		    		   
		   return true;
               },
showWinList  : function(){       
		   if(Element.getHeight($_$('filtervaluesbody')) > 220){
		     $_$('filtervaluesbody').className = "filter_item_scrollon";		     
		   }
		   Element.show("filter_window");		   
               },	
readyToClose : false,	
closeWinList : function(){
                 if(this.readyToClose ) {
		   Element.hide("filter_window");		   
		 }
		 this.readyToClose = false;
		 try {clearTimeout(this.closing);} catch(e){}
               },
closing     : null,	       
closeWindow : function (e){		
		var elementstree = getParentTree(Event.element(e));
		if((elementstree.indexOf("filter_window") > 0) || (elementstree.indexOf("filterbutton_") > 0)){
		  FilterValues.readyToClose = false;
		}	     
		else {
		   FilterValues.readyToClose = true;
		   window.top.document.title = "";
		   if(FilterValues.readyToClose)
		     FilterValues.closeWinList();
		     //FilterValues.closing = setTimeout("FilterValues.closeWinList()",500);		   
		}
              }
}

//Event.observe(window, 'mousemove', FilterValues.closeWindow, false);
Event.observe(window, 'mousedown', FilterValues.closeWindow, false);

function getParentTree(e){
try{
  var st = e.id ? e.id+"/" : "";
}catch(e) {
     st = "";
  }
  if (e.parentNode)  st +=getParentTree(e.parentNode);  
  return st;   
}

/*************************************************************************/

var BFE = {	  
    lastResponseMessage : "",
    getRulesResult : function(ruleSetList, ruleparam, varResult,funResult, funError, post){	
			  var url = 'AjaxUtility';   
		    var pars = "_action_ajax_controller=";		    
		    pars += "&wkey="+__wkey;
		    pars += "&wpkey="+__wpkey;		    
		    pars += "&appkey="+__appkey;		    		    
		    pars += "&varResult="+(varResult ? varResult : "");
		    pars += "&f=getRulesResult";	
		    if(funResult)  pars += "&funResult="+funResult;		    		    
		    pars += "&a="+escape(ruleSetList);		    
		    pars += "&a=" + $_$H(ruleparam).inspect().match(/\{.*\}/g).toString().replace(/'/g,'"');
		    pars += "&a="+request_count++;			    
		    /* ------------------------------------------- */
		    var myAjax = new Ajax.Request(				            
			    url, 
			    {
				    method: post ? post : 'get', 
				    parameters: pars,
				    onException: funError || this.handlerError,
				    onSuccess: this.handlerResponse				    
			    });
		},
	handlerError : function (res){
       this.lastResponseMessage = "Error: "+res.message;
       //alert("Error: "+res.reponseText);
           },
    handlerException : function (res){
       this.lastResponseMessage = "Exception: "+res.message;
       //alert("Exception: "+res.message);
           },
	handlerResponse: function(res){	
        this.lastResponseMessage = "";
		res.responseText.evalScripts();
		}
}
