var suggestRequests = new Object();

function SuggestFieldEntry(){
	this.state = "initialize";
	this.fieldID = null;
	this.searchString = null;
}

SuggestFieldEntry.prototype.perform = function(fieldID, dataSink, callback){
	this.fieldID = fieldID;
	this.searchString = document.getElementById(fieldID).value;
	if (this.searchString == "") {
		this.hideSuggest();
	}else{
		//send data to RE4
		var os = new ObjectSet();
		// add params
		var cdu1 = new CommandDataUnit('searchString', this.searchString);
		os.add(cdu1);
		var cdu2 = new CommandDataUnit('lang', lang);
		os.add(cdu2);
		var cdu3 = new CommandDataUnit('fieldID', this.fieldID);
		os.add(cdu3);
		var cdu4 = new CommandDataUnit('dataSink', dataSink);
		os.add(cdu4);
		var cdu5 = new CommandDataUnit('comp', callback);
		os.add(cdu5);
		var com = Commander.getInstance();
		com.getServiceBySAP('SuggestFieldEntry', 'b', os, this);
	}
	this.state = "performed";
}

SuggestFieldEntry.prototype.hideSuggest = function() {
	if(this.fieldID != null){
		var targetID = this.fieldID+'_suggest';
		if(document.getElementById(targetID)){
			document.getElementById(targetID).style.visibility = 'hidden';
		}
	}
}

SuggestFieldEntry.prototype.handleCommanderEvents = function(state, response, httpStatusCode){
	if (state == 4 && response != '') {
      	var entry = document.getElementById(this.fieldID).value;
      	if(entry == ''){
      		this.hideSuggest();
      	}else if(entry == this.searchString){
      		var targetID = this.fieldID+'_suggest';
      		var target = document.getElementById(targetID);
			target.style.visibility = "visible";
			target.innerHTML = response;
      		this.state = "finished";
      	}
    }
}

function re4_suggest(event, fieldID, dataSink, callback){
	if(suggestRequests[fieldID] == undefined){
		suggestRequests[fieldID] = new SuggestFieldEntry();
	}
	var sfe = suggestRequests[fieldID];
	if(!document.getElementById(fieldID+'_suggest')){
		var targetNode = document.getElementById(fieldID);
		var newNode = document.createElement('div');
		newNode.setAttribute('id', fieldID+'_suggest');
		newNode.setAttribute('class', 're4_suggest');
		// insert <div id="fieldID_suggest" /> after form element
		targetNode.parentNode.insertBefore(newNode, targetNode.nextSibling);
		/*for( var x = 0; x < targetNode.parentNode.childNodes.length; x++ ) {
			alert(targetNode.parentNode.childNodes[x]);
		}*/
		document.getElementById(fieldID+'_suggest').style.visibility = "hidden";
	}else{
		var entry = document.getElementById(fieldID).value;
		var keynum = '';
		if(window.event){
  			keynum = event.keyCode; // IE
  		}else if(event.which){
			keynum = event.which;  // Netscape/Firefox/Opera
		}
		if(entry == '' || keynum == 13 || keynum == 27){
			sfe.hideSuggest();
		}else{
			sfe.perform(fieldID, dataSink, callback);
		}
	}
}

function re4_suggest_onclick(event, entry, fieldID){
	document.getElementById(fieldID).value = entry;
	var targetID = fieldID+'_suggest';
	var target = document.getElementById(targetID);
	target.innerHTML = '';
	target.style.visibility = 'hidden';
}
