/**
 * 
 * @param {Object} owner 
 */
function ServiceConnector (owner) {
	this.owner = owner;
	this.searchURL = null;
	this.params = {};
}

// construct parameters object for AJAX call in getResults
ServiceConnector.prototype.setParams = function(args){
	// implement in subclass
}

// takes a Query object and returns the respective query string for the service
ServiceConnector.prototype.queryToSearchString = function (query){
	// implement in subclass
}

// takes a server response and returns an object with (at least) resultList and numResults attributes
ServiceConnector.prototype.parseResults = function (results){
	// implement in subclass
}


// load the results with the current params
ServiceConnector.prototype.getResults = function(){

	var _this = this;
	var callback = function (results, msg) {
		console.log("ServiceConnector.callback " +  msg  + ", " + results);
		if(msg == "success" && (!Utils.isUndefined(results.success) && results.success)) {
			_this.onResult(results);
		} else {
			_this.onError(results);
		}
	};
	
	// load results
	console.log("ServiceConnector.getResults", _this, this.params, callback);
	$.getJSON(this.searchURL, this.params, callback, this.onError);
}

ServiceConnector.prototype.onResult = function (results){
	if($(results).find("error").size()>0){
		this.onError(results);
		return;
	}
	var parsedResult=this.parseResults(results);
	// REVISIT Use own result class?
	this.owner.onResult(parsedResult.resultList, parsedResult.numResults, parsedResult.facetCounts);
}

ServiceConnector.prototype.onError = function (results){
	console.warn("error",$(results).find("error").text());
	this.owner.onError();
}