/*** Suggester Digimate ***/

var cptS_timerId = 0;
var cptS_timeout = 150;

var cptS_highLighted = -1;
var cptS_totalResults = -1;

var cptS_lastQuery = null;

var cptS_inputId = null;
var cptS_searchResultsId = null;
var cptS_writePermission = true;

function CptSuggester ( objectContainer, inputId, writePermission, nombre){
	this.nombre = nombre;
	
	this.objectContainer = objectContainer;
	this.inputId = inputId;
	cptS_inputId = inputId;
	this.searchResultsId = "search-results_"+inputId;
	
	this.writePermission = writePermission;
	
	this.lastQuery = null;
	
	this.highLighted = -2;
	this.totalResults = -1;
	
	this.timerId = 0;
	this.timeout = 500;
	
	this.userInput = "";
	
	this.cptS_highlightLine = cptS_highlightLine; 
	this.cptS_fijarContenido = cptS_fijarContenido;
	this.cptS_escribirContenido = cptS_escribirContenido;
	this.cptS_loadResults = cptS_loadResults;
	this.cptS_handlekey = cptS_handlekey;
	
	
}

function cptS_createCptSuggester (suggester, taborder){
	if (suggester == null) return;
	if (!suggester.objectContainer || suggester.inputId == null) return;
	
	var code = "";
	code += "<input type='text' tabindex='"+taborder+"' size='27' maxlength='255' name='"+suggester.inputId+"' id='"+suggester.inputId+"' ";
	code += " onkeyup='cptS_handlekey(event,"+suggester.nombre+");' autocomplete=\"off\"/>";
    code += "<div id='"+suggester.searchResultsId+"' class='cptS_searchResults'>";
    code += "</div>";

	suggester.objectContainer.innerHTML = code;	
	
	cptS_hide(document.getElementById(suggester.searchResultsId));
}

function cptS_createCptSuggesterWithValue (suggester, value, taborder){
	if (suggester == null) return;
	if (!suggester.objectContainer || suggester.inputId == null) return;
	
	var code = "";
	code += "<input type='text' tabindex='"+taborder+"' size='27' maxlength='255' name='"+suggester.inputId+"' id='"+suggester.inputId+"' ";
	code += " value=\""+value+"\"";
	code += " onkeyup='cptS_handlekey(event,"+suggester.nombre+");' autocomplete=\"off\"/>";
    code += "<div id='"+suggester.searchResultsId+"' class='cptS_searchResults'>";
    code += "</div>";

	suggester.objectContainer.innerHTML = code;	
	
	cptS_hide(document.getElementById(suggester.searchResultsId));
}

// GESTION DE TECLA PULSADA
function cptS_handlekey (e,suggester){
	  if ( window.event )
         keycode = e.keyCode;
      else if ( e.which )
         keycode = e.which;
      
      //alert ("keycode:"+keycode);
      
     switch (keycode){
     	case 27: //escape
     		cptS_hide(document.getElementById(suggester.searchResultsId));
     		document.getElementById(suggester.inputId).value=suggester.userInput;
     		break;
     	case 40: //down
     		if (cptS_ishidden(document.getElementById(suggester.searchResultsId)))
     			cptS_show(document.getElementById(suggester.searchResultsId));
     		
     		if (suggester.highLighted == -2 )
     			suggester.cptS_highlightLine(0);
     		else if (suggester.highLighted+1 < suggester.totalResults)
     			suggester.cptS_highlightLine(suggester.highLighted+1);
     		else
     			suggester.cptS_highlightLine(-1);
     		
     		if (suggester.highLighted>=0)
     			suggester.cptS_escribirContenido(suggester.lastQuery[suggester.highLighted], suggester.lastQuery[suggester.highLighted]);
     		else
     			suggester.cptS_escribirContenido(suggester.userInput,suggester.userInput);
     		
     		break;
     	case 38: //up
     		if (cptS_ishidden(document.getElementById(suggester.searchResultsId)))
     			cptS_show(document.getElementById(suggester.searchResultsId));
     		
     		if (suggester.highLighted == -2 )
     			suggester.cptS_highlightLine(0);
			else if (suggester.highLighted == -1)
				suggester.cptS_highlightLine(suggester.totalResults -1);
     		else
     			suggester.cptS_highlightLine(suggester.highLighted-1);
     		
     		if (suggester.highLighted>=0)
     			suggester.cptS_escribirContenido(suggester.lastQuery[suggester.highLighted], suggester.lastQuery[suggester.highLighted]);
     		else
     			suggester.cptS_escribirContenido(suggester.userInput,suggester.userInput);
     		break;
     	case 9:	//tab
     		if (suggester.highLighted > -1 && suggester.lastQuery != null)
     			suggester.cptS_fijarContenido(suggester.lastQuery[suggester.highLighted], suggester.lastQuery[suggester.highLighted]);
     		else
     			cptS_hide(document.getElementById(suggester.searchResultsId));
     		break;
     	case 13:	//enter
     		if (suggester.highLighted > -1 && suggester.lastQuery != null)
     			suggester.cptS_fijarContenido(suggester.lastQuery[suggester.highLighted], suggester.lastQuery[suggester.highLighted]);
     		else
     			cptS_hide(document.getElementById(suggester.searchResultsId));
     		break;
     	default:
     		suggester.userInput = document.getElementById(suggester.inputId).value;
     		if (cptS_timerId == 0){
     			cptS_timerId = window.setTimeout ( "cptS_getConceptSuggestion("+suggester.nombre+")", cptS_timeout);
     		}else{
				window.clearTimeout(cptS_timerId );
				cptS_timerId = window.setTimeout ( "cptS_getConceptSuggestion("+suggester.nombre+")", cptS_timeout);
			}	   
     		
     }
}


function cptS_highlight (object){
	if (!object) return;
	object.className="srs";
}
function cptS_unHighlight (object){
	if (!object) return;
	object.className="sr";
}

function cptS_highlightLine (index){
	var id = "";
	for (var i= 0; i < this.totalResults; i++){
		id = "";
		id += "cptS_line_"+this.inputId+ "_" + i;
		if (i==index){
			cptS_highlight (document.getElementById(id));
		}else{
			cptS_unHighlight (document.getElementById(id));
		}
	} 
	this.highLighted = index;
} 

function cptS_unHighlightLine (index){
	var id = "";
	id += "cptS_line_"+this.inputId+ "_" + index;
	cptS_unHighlight (document.getElementById(id));
}


function cptS_fijarContenido (content, titulo){
	var object = document.getElementById(this.inputId);
	if (!object) return;

	// Cogemos la descripcion
	object.value = content;
	object.title = titulo;
	cptS_hide(document.getElementById(this.searchResultsId));
}

function cptS_escribirContenido (content, titulo){
	var object = document.getElementById(this.inputId);
	if (!object) return;

	// Cogemos la descripcion
	object.value = content;
	object.title = titulo;

}

function cptS_loadResults(data, suggester){
	var code = "";
	suggester.totalResults = data.length;
	suggester.lastQuery = data;
	for ( var i = 0; i < data.length; i++ ){
	    code += '<div id="cptS_line_'+suggester.inputId+ "_" +i+'" class="sr"';
    	code += " onmouseover='"+suggester.nombre+".cptS_highlightLine("+i+");' ";
	    code += " onClick='"+suggester.nombre+".cptS_fijarContenido(\""+data[i]+"\",\""+data[i]+"\");' >";
	    code +=   '<span class="srt"  >' + data[i] + '</span>';
//	    code +=   '<span class="src" >' + data[i].autor + '</span>';
	    code += '</div>';
	}
	document.getElementById(suggester.searchResultsId).innerHTML = code;
	cptS_show(document.getElementById(suggester.searchResultsId));
}

// Mostrar/ocultar un elemento
function cptS_hide(elt){
    if (elt) elt.style.display = 'none';
}
 
function cptS_ishidden(elt){
    return elt.style.display == 'none';
}
 
function cptS_show(elt){
    if (elt) elt.style.display = 'block';
}


