
function FirmHandler(uri,uriSuffix,boxId){

	this.uri=uri+"/";
	
}

/**
* searchFirms2
*
*/
FirmHandler.prototype.searchFirms2 = function(subjectKey,formName,htmlElementId,sIndex,size,srankc){
  	
	// rpc = new RPC();	
  	rpc = new RPC();
	//show about change notifier.
  	
  	var l = window["listenerHandler"];
	l.notifyListenersToSubjectAboutChange(subjectKey);

	var form = document.getElementById(formName);
  	var inputs = form.getElementsByTagName("input");
  	var selects = form.getElementsByTagName("select");
  	
  	var queryString = "";
  	queryString = rpc.buildQueryFromInput(queryString,inputs);
  	queryString = rpc.buildQueryFromSelect(queryString,selects);
  	
  	if(sIndex == undefined || sIndex == null){
  		sIndex = 0;
  	}
  	if(size == undefined || size == null){
  		size = 15;	
  	}
  	var rankCategory = srankc; // why default?
  	if(rankCategory == null || rankCategory == undefined) rankCategory = 4;
  	
  	queryString += "&sIndex="+sIndex+"&size="+size+"&r="+rankCategory;
		
	rpc.subjectKey = subjectKey;
	rpc.draw = function() {
	
	    //its here the ansync answer get handled.
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("error in response:","<pre>"+this.request.responseText+"</pre>");
		   alert("RPC error");
		   return;
		}
		
		var status = rootTag.getAttribute("status");
	
		//remove about change notifier.
			
		l.notifyListenersToSubjectAboutChangeStop(this.subjectKey);
	
		if(status!="ok"){
			this.showErrorMessage(xml);
		} else {
			//do success here.
			l.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
	}
	
	var _uri = this.uri + "searchFirms";
	var t = this;
	
	rpc.load(_uri,queryString,t);

	return;
}

/**
* loadFirmInfoDetails
*
*/
FirmHandler.prototype.loadFirmInfoDetails = function(subjectKey,firmId){

	// var rpc = new RPC();
	rpc = new RPC();
	rpc.subjectKey = subjectKey;
	
	rpc.draw = function(){
	
		//check status.	
		var xml = this.request.responseXML;
		var rootElementList = xml.getElementsByTagName("rater"); 
		var rootTag = rootElementList[0];
		
		if (!rootTag) {
		   log("loadFirmInfoDetails error in response:", "<pre>"+this.request.responseText+"</pre>");
		   alert("RPC error loadFirmInfoDetails");
		   return;
		}

		var status = rootTag.getAttribute("status");
		
		if(status!="ok"){
			this.showErrorMessage(xml);
		}else{
			//do success here.
			listenerHandler.notifyListenersToSubject(this.subjectKey,this.request.responseXML);
		}
	};

	rpc.load(this.uri+"loadFirmInfo","firmid="+firmId,this);
}

/**
* saveGeoLocation
*
*/
FirmHandler.prototype.saveGeoLocation = function(firmId, firmAddressId, lat, lng){

	// var rpc = new RPC();
	rpc = new RPC();
		
	rpc.draw = function(){
	    if (window["debug"]) log("saved geo-location");		
	};
	
	rpc.load(this.uri+"saveGeoLocation","firmid="+firmId+"&firmAddressId="+firmAddressId+"&lat="+lat+"&lng="+lng,this);
}



