		//===================== GLOBALS ======================
		var qf_htmlData = null;
		var qf_indexer = 0;
		var qf_lastSearch = "";
		var qf_currentSearch = "";
		var qf_numResults = 0;
		var qf_lastKey = "";
		//END GLOBALS
		
		//===================== EVENTS ======================
		//TODO: Fix this to cancel previous event on a new key
		if( document.captureEvents ) {
			//non IE
			if( Event.KEYUP ) {
				//NS 4, NS 6+, Mozilla 0.9+
				document.captureEvents( Event.KEYUP );
			}
		}
		document.getElementById("QuickFilterName").onkeyup = qf_UpdateKey;

		function qf_UpdateKey(e){
		  if( !e ) {
			  //if the browser did not pass the event information to the
			  //function, we will have to obtain it from the event register
			  if( window.event ) {
				  //DOM
				  e = window.event;
			  } else {
				  //TOTAL FAILURE, WE HAVE NO WAY OF REFERENCING THE EVENT
				  return;
			  }
		  }
		  if( typeof( e.which ) == 'number' ) {
			  //NS 4, NS 6+, Mozilla 0.9+, Opera
			  qf_lastKey = e.which;
		  } else if( typeof( e.keyCode ) == 'number'  ) {
			  //IE, NS 6+, Mozilla 0.9+
			  qf_lastKey = e.keyCode;
		  } else if( typeof( e.charCode ) == 'number'  ) {
			  //also NS 6+, Mozilla 0.9+
			  qf_lastKey = e.charCode;
		  }
		  qf_UpdateFilter();
		}
		
		//END EVENTS
		
		//===================== DATALOADER ======================
		function qf_QuickFilterHtml(){
		    this.httpReq;
		    
			this.responseSuccess = function(o)
			{
				html = o.responseText;
				qf_TransformData(html);
			}
				
			this.callback =
			{
			   success : this.responseSuccess,
			   scope: this
			};
				
			this.loadHtml = function(filter)
			{
				var xmlurl = "/report/filter/QuickFilterXML.jsp";		
				var xslurl = "/report/filter/QuickFilterXSL.jsp?filter=" + filter;
				var url = "/trail/transformer/transformer.jsp?xmldoc=" + encodeURIComponent(xmlurl) + "&xsldoc=" + encodeURIComponent(xslurl);
				YAHOO.util.Connect.asyncRequest('GET',url,this.callback);	
			}
		}	
		
		//END DATALOADER

		//===================== QUICKFILTER DISPLAY ======================
		function qf_UpdateFilter() {
			//up arrow
			if (qf_lastKey == 38){
			  if (qf_indexer > 0){
				  qf_ChangeHighlight(qf_indexer,qf_indexer-1,true);
				  qf_indexer--;
				}
			}
			//down arrow
			else if (qf_lastKey == 40){
			  if (qf_indexer < qf_numResults-1){
				  qf_ChangeHighlight(qf_indexer,qf_indexer+1,true);
				  qf_indexer++;
			  }
			}
			//esc key
			else if (qf_lastKey == 27){
			   var filterValue = document.getElementById("QuickFilterName");
			   qf_ClearTable();
			   qf_ResetExtendedData();
			}	
			//enter key
			else if (qf_lastKey == 13){
				qf_AddFilter();
			}
			else {
			   var filterValue = document.getElementById("QuickFilterName");		 
			   qf_currentSearch = filterValue.value;
				 if (qf_currentSearch == "") {
						qf_ClearTable();
				 }
				 else if (qf_currentSearch != qf_lastSearch){
					 var qf_HtmlData = new qf_QuickFilterHtml();
					 qf_HtmlData.loadHtml(filterValue.value);
					 qf_lastSearch = qf_currentSearch;
				 }
			}
		}
		
		  function qf_TransformData(html) {
			//hide the map if it is on here
			var map = document.getElementById("map");
			if (map) {
				map.style.zIndex = -1;
			}
		
		    var targetElement = document.getElementById("QuickFilterDropDownSpan");
		    targetElement.innerHTML =  html;
		    var dropDownTableElement = document.getElementById("QuickFilterDropDownTableBody");
			if (dropDownTableElement)
			  qf_numResults = dropDownTableElement.getElementsByTagName("tr").length;
			if (qf_numResults==0) //clear the table
				qf_ClearTable();
			//reset the indexer and highlight
			qf_indexer = -1;
			qf_ResetExtendedData() 
		}		
		
		function qf_ClearTable() {
			 var targetElement = document.getElementById("QuickFilterDropDownSpan");
			 targetElement.innerHTML = "";
			 qf_lastSearch = "";
			 qf_indexer = -1;
			 //unhide the map if it is on here
			var map = document.getElementById("map");
			if (map) {
				map.style.zIndex = 1 ;
			}
		}
		
		function qf_HighlightRow(obj,pos,updateValues) {
		  qf_ChangeHighlight(qf_indexer,pos,updateValues)
		  qf_indexer = pos;
		}
		
		function qf_UnhighlightRow(obj,pos) {
		  //qf_ChangeHighlight(pos,-1)
		  //qf_indexer = -1;
		}
		
		function qf_UnhighlightTable() {
		  //qf_ChangeHighlight(qf_indexer,-1)
		  //qf_indexer = -1;
		}		

		function qf_ChangeHighlight(last,next,updateValues){
		    var dropDownTableElement = document.getElementById("QuickFilterDropDownTableBody");
			var rows = dropDownTableElement.getElementsByTagName("tr");
			//hide the last one
			if (dropDownTableElement && last != -1 && rows[last] != null){
			  rows[last].className ="qf_cell";
			}
			//select the next one
			if (dropDownTableElement && next != -1 && rows[next] != null){
		      rows[next].className = "qf_cellhighlighted";
		      if (updateValues == true){
				  var cols = dropDownTableElement.getElementsByTagName("td");
				  var NUMCOLS = 4;
				  var topName = cols[next*NUMCOLS].innerHTML;
				  var topType = cols[next*NUMCOLS+1].innerHTML;
				  var topKey = cols[next*NUMCOLS+2].innerHTML;
				  var topValue = cols[next*NUMCOLS+3].innerHTML;
				  qf_SetData(topName,topType,topKey,topValue);
				  //fix the highlighted string in the input box
				  var filterNameElement = document.getElementById("QuickFilterName");
				  if (qf_currentSearch.toLowerCase() == topName.toLowerCase().substr(0,qf_currentSearch.length)) {
					  if (filterNameElement.createTextRange) {
						var oRange = filterNameElement.createTextRange();
						oRange.moveStart("character", qf_currentSearch.length);
						oRange.moveEnd("character", filterNameElement.value.length);
						oRange.select();
					  } else if (filterNameElement.setSelectionRange) {
						filterNameElement.setSelectionRange(qf_currentSearch.length, filterNameElement.value.length);
					  }
				  }
			  }
			}
		}
		
		function qf_ResetExtendedData() {
		  var filterTypeElement = document.getElementById("QuickFilterTypeText");
		  if (filterTypeElement) {
		    filterTypeElement.innerHTML = "Keyword";
		  }
		  var filterKey = document.getElementById("QuickFilterKey");
		  if (filterKey) {
		    filterKey.value = "";
		  }
		  var filterValue = document.getElementById("QuickFilterValue");
		  if (filterValue) {
		    filterValue.value = "";
		  }
		}

		function qf_SetExtendedData(type,key,value) {
		  var filterTypeElement = document.getElementById("QuickFilterTypeText");
		  if (filterTypeElement) {
		    filterTypeElement.innerHTML = type;
		  }
		  var filterKey = document.getElementById("QuickFilterKey");
		  if (filterKey) {
		    filterKey.value = key;
		  }
		  var filterValue = document.getElementById("QuickFilterValue");
		  if (filterValue) {
		    filterValue.value = value;
		  }
		}

		function qf_SetData(name, type,key,value) {
		  var filterNameElement = document.getElementById("QuickFilterName");
		  if (filterNameElement);
		    filterNameElement.value = name;		  
		  qf_SetExtendedData(type,key,value);
		}

		function qf_ResetData() {
		  var filterNameElement = document.getElementById("QuickFilterName");
		  if (filterNameElement);
		    filterNameElement.value = "";		  
		  qf_ResetExtendedData();
		}
		
		function qf_ClickedRow(obj,pos) {
		  qf_ChangeHighlight(qf_indexer,pos,true);
		  qf_indexer = -1;
		  qf_AddFilter();
		}// END QUICKFILTER DISPLAY
		
		//QUICKFILTER ADD
		function qf_AddFilter(){
			setAskToLoadReport(true);
			qf_ClearTable();
			var filterTypeElement = document.getElementById("QuickFilterTypeText");
			var filterNameElement = document.getElementById("QuickFilterName");

			if (filterTypeElement.innerHTML == "Keyword") {
				var display = "Keyword = " + filterNameElement.value;
				var qfvalue = '+' + filterNameElement.value.replace(' ',' +');;
				var qftype = FILTER_TYPE_KEYWORD;
			}
			else {
				var display = filterTypeElement.innerHTML + " = " + filterNameElement.value;			
				var qfvalue = document.getElementById("QuickFilterKey").value + FILTER_OPERATOR_EQUALS + document.getElementById("QuickFilterValue").value;
                //see /report/ReportUserInterface.js
				var qftype = FILTER_TYPE_QUICK;
				
			}
			setAskToLoadReport(true);
			notifyQuickFilterAdded(qftype,display,qfvalue,true);
			qf_ResetData();
		}//END QUICKFILTER ADD
