var search_ob

function search_class(){
	var _me=this
	this.xml_loader_ob=0
	this.xml_loader_arr=new Array()
	this.search_xml=0
	this.search_element_ob_arr=new Array()
	this.refine_ob=0
	this.refine_area_ob=0
	
	this.result_category_ID=""
	this.result_criteria_params_xml=0

	this.form_name="directory_search"
	this.result_summary_search_or_refine="search"
	this.free_text_item_xml=""
	if(free_text_item_IDs!=""){
		var str=free_text_item_IDs.replace(/,/g,'" /><results item_ID="')
		str='<results item_ID="'+str+'"/>'
		str='<result_list>'+str+'</result_list>'
		_me.free_text_item_xml=str
	}

	this.setup_interface=function(){
		//GET ELEMENTS OF THE SEARCH PANEL
		_me.search_element_ob_arr.push(new search_panel_element_class("area",_me))
		_me.search_element_ob_arr.push(new search_panel_element_class("category",_me))
		_me.search_element_ob_arr.push(new search_panel_element_class("search",_me))
		
		//_me.refine_area_ob=new search_refine_class(-1,_me)
		//_me.refine_area_ob.setup_interface()
		//SET REFINING OB - IT MAY BE LINKED TO REFINING CATEGORY DROPDOWN IF IT EXISTS
		_me.refine_ob=new search_refine_class(0,_me)
		_me.refine_ob.setup_interface()
		
		
		

		for(var i=0;i<_me.search_element_ob_arr.length;i++){
			_me.search_element_ob_arr[i].setup_interface()
		}
		
		_me.reset_results_query()
		
		//LOAD THE INITIAL XML
		_me.start_load_xml("library/get_category_search.asp","initial_xml","get_categories=1")
		
		
		
	}
	
	

	this.reset_results_query=function(){
		
		_me.result_category_ID=""
		_me.result_search_text=""
		if(browser.isIE){
			_me.criteria_result_params_xml=new ActiveXObject('Microsoft.XMLDOM')
			_me.criteria_result_params_xml.loadXML("<params/>")
		}else{
			_me.criteria_result_params_xml=new DOMParser().parseFromString("<params/>", 'text/xml')
		}	


	}
	this.set_result_search_text=function(txt){
		_me.reset_results_query()
		_me.result_search_text=txt
		_me.get_result_summary()
	}
	
	this.set_result_category_ID=function(catID){
		
		_me.reset_results_query()
		_me.result_category_ID=catID
		_me.get_result_summary()
	}
	this.set_criteria_result_params_xml=function(category_ID,criteria_type_ID,value,comparator,value_param_name,and_result){
		
		var rootnode=_me.criteria_result_params_xml.selectSingleNode("//params")
		
	
		var newnode=_me.criteria_result_params_xml.createElement("param")
	
		newnode.setAttribute("category_ID",category_ID)
		newnode.setAttribute("criteria_type_ID",criteria_type_ID)
		newnode.setAttribute("comparator",comparator)
		
		if(comparator.substr(2,2)!="bt"){
			
			newnode.setAttribute(value_param_name,value)
		}else{
			if(value_param_name=="number_value" && value.indexOf("_")!=-1){
				var arr=value.split("_")
				newnode.setAttribute("comparator",comparator.substr(0,2)+arr[0])
				newnode.setAttribute(value_param_name,arr[1])
			}else{
				var arr=value.split("-")
				newnode.setAttribute(value_param_name,arr[0])
				newnode.setAttribute(value_param_name+"2",arr[1])
			}
		}
			
		rootnode.appendChild(newnode)
		

		if(and_result==1){
			_me.get_result_summary()
		}
	}
	this.remove_criteria_result_params_xml=function(category_ID,criteria_type_ID,and_result){
		var matching_nodes=_me.criteria_result_params_xml.selectNodes("//param[@category_ID='"+category_ID+"' and @criteria_type_ID='"+criteria_type_ID+"']")
		//if(typeof value_param_name!="undefined" && !!value_param_name){
//			var matching_nodes=_me.criteria_result_params_xml.selectNodes("//param[@category_ID='"+category_ID+"' and @criteria_type_ID='"+criteria_type_ID+"' and @type='"+type+"' and @"+value_param_name+"='"+value+"']")
//		}else{
//			var matching_nodes=_me.criteria_result_params_xml.selectNodes("//param[@category_ID='"+category_ID+"' and @criteria_type_ID='"+criteria_type_ID+"' and @type='"+type+"']")
//		}
		if(matching_nodes.length>0){
			matching_nodes[0].parentNode.removeChild(matching_nodes[0])	
		}
		if(and_result==1){
			_me.get_result_summary()
		}
	}
	
	this.set_search_output=function(tothis){
		var ob =document.getElementById("search_output")
		if(typeof ob!="undefined" && !!ob){
			ob.value=tothis
		}
	}
	this.get_result_summary=function(){
		
		var param_nodes=_me.criteria_result_params_xml.selectNodes("//param")
		
		if(param_nodes.length==0){
			_me.set_search_output("")
			if(_me.result_summary_search_or_refine=="search"){
			
				if(_me.result_category_ID!=""){
					_me.start_load_xml("library/get_category_search_results.asp","results_xml","count_or_summary_or_detail=count&category_ID="+_me.result_category_ID)
				}else{
					if(_me.result_search_text!=""){
						_me.start_load_xml("library/get_free_text_search.asp","results_xml","count_or_categories=count&search_text="+escape(_me.result_search_text))
					}
				}
			}else{
				if(_me.result_category_ID!="" && _me.refine_ob.can_refine_category==1){
					if(search_text==""){
						_me.start_load_xml("library/get_category_search_results.asp","results_xml","count_or_summary_or_detail=count&category_ID="+_me.result_category_ID)
					}else{
						_me.start_load_xml("library/get_category_search_results.asp","results_xml","count_or_summary_or_detail=count&category_ID="+_me.result_category_ID+"&item_ID_xml="+escape(_me.free_text_item_xml))
					}
				}else{
					//document.getElementById("refine_feedback").innerHTML=""
					_me.reset_refine_button()
					result_summary_search_or_refine="search"
				}
			}
		}else{
			
			_me.set_search_output(_me.criteria_result_params_xml.xml)
			
			_me.start_load_xml("library/get_category_search_results.asp","results_xml","count_or_summary_or_detail=count&criteria_type_xml="+escape(_me.criteria_result_params_xml.xml)+"&item_ID_xml="+escape(_me.free_text_item_xml))
		}
	}
	
	
	
	this.load_key_criteria=function(category_ID){
	
		if(search_text==""){
			//CHECK TO SEE IF THE KEY CRITERIA HAVE ALREADY BEEN LOADED
			var key_nodes=_me.search_xml.selectNodes("//category[@category_ID="+category_ID+"]/key_criteria")
			if(key_nodes.length==0){
				//KEY CRITERIA HAVEN'T BEEN LOADED FOR THIS NODE YET
				_me.start_load_xml("library/get_category_search.asp","key_criteria_xml","category_ID="+category_ID)
			}else{
				//KEY CRITERIA ARE LOADED
				_me.refine_ob.setup_refining_interface()
			}
		}else{
		
			//_me.start_load_xml("library/get_category_search.asp","key_criteria_xml","category_ID="+category_ID)
	
			_me.set_search_output(_me.free_text_item_xml)
			_me.start_load_xml("library/get_category_search.asp","key_criteria_xml","category_ID="+category_ID+"&item_ID_xml="+escape(_me.free_text_item_xml))
		}
			
		
	}
	
	this.load_criteria_values=function(category_ID,criteria_type_ID){
		//CHECK TO SEE IF THE CRITERIA VALUES HAVE ALREADY BEEN LOADED
		var value_nodes=_me.search_xml.selectNodes("//key_criteria[@criteria_type_ID="+criteria_type_ID+"]/criteria_type")
		
		if(value_nodes.length==0){
			//CRITERIA VALUES HAVEN'T BEEN LOADED FOR THIS NODE YET
			_me.start_load_xml("library/get_category_search.asp","criteria_values_xml","category_ID="+category_ID+"&criteria_type_ID="+criteria_type_ID)
		
		}else{
			_me.refine_ob.setup_refining_interface(criteria_type_ID)
		}
	}
	
	this.start_load_xml=function(thispath,thisname,params){
	
		if(thispath.indexOf(pthstr)==-1){
			xmlpth=pthstr+thispath
		}else{
			xmlpth=thispath
		}
		if(typeof params=="undefined" || !params){
			params=""
		}
	
	//window.open(xmlpth+"?"+params)
		xml_mode="ie"
		
		/*@cc_on @*/
		/*@if (@_jscript_version >= 5)
			// JScript gives us Conditional compilation, we can cope with old IE versions.
			// and security blocked creation of the objects.
	
			try {
				_me.xml_loader_arr[thisname] = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					_me.xml_loader_arr[thisname] = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (E) {
					_me.xml_loader_arr[thisname] = false;
				}
			}
	
		/*@end @*/
		
		
		if (!_me.xml_loader_arr[thisname] && typeof XMLHttpRequest!='undefined') {
			_me.xml_loader_arr[thisname] = new XMLHttpRequest();
			xml_mode="moz"
		}
		
		if(params==""){
			_me.xml_loader_arr[thisname].open("GET", xmlpth,true);
		}else{
			_me.xml_loader_arr[thisname].open("POST", xmlpth,true);
			_me.xml_loader_arr[thisname].setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		}
		
		_me.xml_loader_arr[thisname].setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
		
		
		switch(thisname){
			case "initial_xml":
				_me.xml_loader_arr[thisname].onreadystatechange=_me.parse_initial_xml
			break;
			case "key_criteria_xml":
				_me.xml_loader_arr[thisname].onreadystatechange=_me.parse_key_criteria_xml
			break;
			case "criteria_values_xml":
				_me.xml_loader_arr[thisname].onreadystatechange=_me.parse_criteria_values_xml
			break;
			case "results_xml":
				_me.xml_loader_arr[thisname].onreadystatechange=_me.parse_results_xml
			break;
		}
		
		

		xmlob_loaded_arr[thisname]=0
		
		if(params==""){
		
			__me.xml_loader_arr[thisname].send(null)
		}else{
			
			_me.xml_loader_arr[thisname].send(params)
		}
	
	}
	
	this.parse_initial_xml=function(){
	
		var xml_name="initial_xml"
		
	
		if(_me.xml_loader_arr[xml_name].readyState==4){
			
			if(browser.isIE){
				var xml_doc_ob=new ActiveXObject('Microsoft.XMLDOM')
				xml_doc_ob.loadXML(_me.xml_loader_arr[xml_name].responseText)
			}else{
				var xml_doc_ob=new DOMParser().parseFromString(_me.xml_loader_arr[xml_name].responseText, 'text/xml')
			}
			
			test_nodes=xml_doc_ob.selectNodes("//*")
			


			
			if(test_nodes.length>0){
			
				_me.search_xml=xml_doc_ob
				//_me.search_element_ob_arr[0].populate_menu()
			
				if(refine_category!=""){
					_me.load_key_criteria(refine_category)
				}
				
				
			}
	
	
		}
	}
	
	this.parse_key_criteria_xml=function(){
	
		var xml_name="key_criteria_xml"
	
		if(_me.xml_loader_arr[xml_name].readyState==4){
			
			if(browser.isIE){
				var xml_doc_ob=new ActiveXObject('Microsoft.XMLDOM')
				xml_doc_ob.loadXML(_me.xml_loader_arr[xml_name].responseText)
			}else{
				var xml_doc_ob=new DOMParser().parseFromString(_me.xml_loader_arr[xml_name].responseText, 'text/xml')
			}
			
			test_nodes=xml_doc_ob.selectNodes("//key_criteria")
			


			
			if(test_nodes.length>0){
			
				var parent_node=_me.search_xml.selectSingleNode("//category[@category_ID="+test_nodes[0].getAttribute("category_ID")+"]")
				
				for(var i=0;i<test_nodes.length;i++){
					//APPEND KEY CRITERIA TO PARENT NODE
					parent_node.appendChild(test_nodes[i].cloneNode(1))
				}
				_me.refine_ob.setup_refining_interface()
			}
	
	
		}
	}
	
	this.parse_criteria_values_xml=function(){
	

		var xml_name="criteria_values_xml"
		if(_me.xml_loader_arr[xml_name].readyState==4){
			
			if(browser.isIE){
				var xml_doc_ob=new ActiveXObject('Microsoft.XMLDOM')
				xml_doc_ob.loadXML(_me.xml_loader_arr[xml_name].responseText)
			}else{
				var xml_doc_ob=new DOMParser().parseFromString(_me.xml_loader_arr[xml_name].responseText, 'text/xml')
			}
			
			test_nodes=xml_doc_ob.selectNodes("//criteria_type")
			


			
			if(test_nodes.length>0){
				if(typeof test_nodes[0].getAttribute("parent_ID")=="undefined" || !test_nodes[0].getAttribute("parent_ID")){
					var parent_node=_me.search_xml.selectSingleNode("//key_criteria[@criteria_type_ID="+test_nodes[0].getAttribute("criteria_type_ID")+"]")
				}else{
					var parent_node=_me.search_xml.selectSingleNode("//key_criteria[@criteria_type_ID="+test_nodes[0].getAttribute("parent_ID")+"]")
				}
				
				
				for(var i=0;i<test_nodes.length;i++){
					parent_node.appendChild(test_nodes[i].cloneNode(1))
				}
				var value_nodes=xml_doc_ob.selectNodes("//criteria_value")
				if(value_nodes.length>0){
					for(var i=0;i<value_nodes.length;i++){
						parent_node.appendChild(value_nodes[i].cloneNode(1))
					}
				}
				var item_nodes=xml_doc_ob.selectNodes("//criteria_item")
				if(item_nodes.length>0){
					for(var i=0;i<item_nodes.length;i++){
						parent_node.appendChild(item_nodes[i].cloneNode(1))
					}
				}
				if(typeof test_nodes[0].getAttribute("parent_ID")=="undefined" || !test_nodes[0].getAttribute("parent_ID")){
					
					_me.refine_ob.setup_refining_interface(test_nodes[0].getAttribute("criteria_type_ID"))
				}else{
				
					_me.refine_ob.setup_refining_interface(test_nodes[0].getAttribute("parent_ID"))
				}
			}
	
	
		}
	}
	
	this.parse_results_xml=function(){
	

		var xml_name="results_xml"
		if(_me.xml_loader_arr[xml_name].readyState==4){
			
			if(browser.isIE){
				var xml_doc_ob=new ActiveXObject('Microsoft.XMLDOM')
				xml_doc_ob.loadXML(_me.xml_loader_arr[xml_name].responseText)
			}else{
				var xml_doc_ob=new DOMParser().parseFromString(_me.xml_loader_arr[xml_name].responseText, 'text/xml')
			}
			
			test_nodes=xml_doc_ob.selectNodes("//items")
			
		
			val="0"
		
			if(_me.result_summary_search_or_refine=="search"){
			
				if(test_nodes.length>0){
					
					var val=test_nodes[0].getAttribute("item_count")
					
				
		
				
					if(val=="1"){
						var str="1 item found"	
					}else{
						var str=val+" items found"	
					}
					//document.getElementById("search_feedback").innerHTML=str
					//document.getElementById("search_feedback").style.display=""
					if(val=="0"){
						document.getElementById("directory_search_button").value=str
						document.getElementById("directory_search_button").className="button dir_search disabled"
					}else{
						document.getElementById("directory_search_button").value="Display "+str.replace('found','')
						document.getElementById("directory_search_button").className="button dir_search"
					}
				}else{
					//document.getElementById("search_feedback").innerHTML=""
					//document.getElementById("search_feedback").style.display="none"
					document.getElementById("directory_search_button").value="Find products..."
					document.getElementById("directory_search_button").className="button dir_search disabled"
				}
			}else{
		
				if(test_nodes.length>0){
					
					var val=test_nodes[0].getAttribute("item_count")
					
				
		
				
					if(val=="1"){
						var str="1 item found"	
					}else{
						var str=val+" items found"	
					}
					//document.getElementById("refine_feedback").innerHTML=str+" with refining criteria"
					if(val=="0"){
						document.getElementById("refine_button").className=document.getElementById("refine_button").className.split(" disabled")[0]+" disabled"
						document.getElementById("refine_button").value="0 items found"
					}else{
						document.getElementById("refine_button").value=str+" - Refine results listing..."
						document.getElementById("refine_button").className=document.getElementById("refine_button").className.split(" disabled")[0]
					}
				}else{
					_me.reset_refine_button()
				}
			}
			_me.result_summary_search_or_refine="search"
		}
	}
	

	_me.clear_results_query=function(){
		//document.getElementById("search_feedback").innerHTML=""
		//document.getElementById("search_feedback").style.display="none"
		document.getElementById("directory_search_button").value="Find products..."
		document.getElementById("directory_search_button").className="button dir_search disabled"	
	}

	_me.reset_refine_button=function(){
		document.getElementById("refine_button").className=document.getElementById("refine_button").className.split(" disabled")[0]
		document.getElementById("refine_button").value="List all results..."	
	}
	
	
	
}