var checkText = '';

function odvSuggest(event, value, usage){
    
    if(event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 27){
        return false;
    }

	checkText = value;
	
	window.setTimeout(
		function(){
			if(checkText != value){
				return false
			}
			sendOdvSuggest(value, usage)
		}, 600);
}

function sendOdvSuggest(value, usage){
//Control sendOdvSuggestMax and sendOdvSuggestMax from Def Date

	if(value.length >= sendOdvSuggestMin){//&& value.length < 7
		var URL = 'XSLT_STOPFINDER_REQUEST/index.php';
		var _params = {
			language: 'de',
			locationServerActive: '1',
			anyObjFilter_sf: $('#anyObjFilter_origin').val(),
            SpEncId: 0,
			itdLPxx_usage: usage,
            anyMaxSizeHitList: '50',
            useHouseNumberList: 'true',
			type_sf: 'any',
			name_sf: value,
			itdLPxx_checkText: value, 
            reducedAnyWithoutAddressObjFilter_sf: '103',
            reducedAnyPostcodeObjFilter_sf: '64',
            reducedAnyTooManyObjFilter_sf: '2',
            stateless: '1',
            outputFormat: 'JSON'
		}
        if (document.getElementById('SpEncId')) {
            _params.SpEncId = jQuery('#SpEncId').attr('value');
        }
        // set region filter 
        if (jQuery('.regionFilter:checked').length > 0) {
            _params.regionID_sf = jQuery('.regionFilter:checked').attr('value');
        }
		
		checkText = value;

		var _ajax = mdvLib.ajax({ host: URL, parameters: _params, onComplete: odvSuggest_onAjaxComplete});
	}
	else{
		if(document.getElementById('odvOverlay')){
			$('#odvOverlay').remove();
		}
	}

};


/* this function creates the odv suggest overlay */
function odvSuggest_onAjaxComplete(response){

 	var json = null;
 	var efa = null;
	
    if (response.responseText) {
 		json = response.responseText;
 	}
 	
 	eval('efa = ' + json + ';'); 	
	
	var usage = efa.parameters[1].value;
	
	if($('#odvOverlay')){
		$('#odvOverlay').remove();
	}
	
	if(!efa.stopFinder){
		return false;
	}
	
	var length = efa.stopFinder.length
	
	if(efa.stopFinder.point){
		length = 1;
	}
	
	// sort result list if more than one hit 
	if(length > 1){
		efa.stopFinder.sort(typeComparison);
	}
    
    var results = '';
		
	for(i=0;i < length; i ++){
		var point =  efa.stopFinder[i] || efa.stopFinder.point;

			var stateless=  point.stateless;
			
			if(point.type=='street' && !ptRef.coords){
				break;
			}
		
			var type = "\'any\'"; 
			var add= '';

			var txt = point.name;
            
            if(point.anyType =='loc'){
                txt = point.ref.place;
            }

			switch(point.anyType){

				case 'stop': add = "<img src=" + sugImgPath + "stop.gif>";
					break;
					
				case 'poi': add = "<img src=" + sugImgPath + "pin.png>";
					break;
					
				case 'street': add = "<img src=" + sugImgPath + "address.gif>";
					break;
					
				case 'address': add = "<img src=" + sugImgPath + "address.gif> ";
					break;
				
				default: add = "<img src=" + sugImgPath + "address.gif>";
					break;
			}
            
			var href ='javascript:submitPoint("'+  stateless + '","'+  usage + '")';
            
            var pointDiv = '<div id="sug_' + i + '" class=""><a href=' + href +' class="sugFo">' + add +  txt + '</a></div>';
            
			results = results.concat(pointDiv);
	}
    
	var odvSuggest = document.createElement('div');
	odvSuggest.id='odvSg';
    odvSuggest.innerHTML = results;
    
	var odvSuggestDiv = document.createElement('div');
	odvSuggestDiv.className='odvSg';
	odvSuggestDiv.id='odvOverlay';
	
    $(odvSuggestDiv).insertAfter($('#name_' + usage));
	
	$("#odvOverlay").append(odvSuggest);
    
};

function typeComparison(a, b)	{
	if(a.anyType == 'loc'){
		a.sortPos = 1
	}
	else if(a.anyType == 'stop'){
		a.sortPos = 2
	}
	else if(a.anyType == 'poi'){
		a.sortPos = 3
	}
	else{
		a.sortPos = 4
	} 
    
	if(b.anyType == 'loc'){
		b.sortPos = 1
	}
	else if(b.anyType == 'stop'){
		b.sortPos = 2
	}
	else if(b.anyType == 'poi'){
		b.sortPos = 3
	}
	else{
		b.sortPos = 4
	} 
	
   return a.sortPos > b.sortPos; 
}


function insertAfter(parent, node, referenceNode) {

  if (parent && node && referenceNode) {
    parent.insertBefore(node, referenceNode.nextSibling);
  }

}
