var isRunning = false;

var ADDRESS = '/axis/services/SKOSThesaurusService'; //pr version DEV
var thesaurusURI = 'http://iaaa.unizar.es/thesaurus/TITW';
var curentContainer = null;
var showAllData = false;
var searchTerm = "";
var searchLang = "";
var searchThesaurus = "";
var maxALT = 10;

function showSKOSError(XMLHttpRequest, textStatus, errorThrown)
{
	jQuery(curentContainer).html("<strong style=\"float:left;clear:left;\">"+txt_alt_labels+"</strong>"+
			"<div id=\"skosLabels\" style=\"float:left;clear:left;\"></div>");
	isRunning = false;
	_oldInputFieldValue=searchTerm;
	_oldLang = searchLang;
	_oldThesaurus = searchThesaurus;
}

function showSKOSValue(data, textStatus)
{
	var allChilds = jQuery(jQuery(jQuery(data).children().children().children()[0]).children()[0]).children();
	localMaxALT = maxALT;
	if (showAllData || allChilds.lenght < maxALT)
	{	localMaxALT = allChilds.length;
	}

	var resultConcepts = ""; //(array des Concept resultats, pr eviter les doublons...)
	var arrPrefLabelsCompletion = new Array();
	var arrPrefLabelsSynonym = new Array();
	var arraltLabels = new Array();
	
	var prefLabelsCompletion = "";
	var prefLabelsSynonym = "";
	var altLabels = "";
	var showAllLabel = "";

	function cont(arr, str) {
		for (var i = 0; i < arr.length; i++) {
			if (arr[i] == str) {
				return true;
			}
		}
		return false;
	}
	for (var i=0; i < localMaxALT; i++)
	{
		var curChild = jQuery(allChilds[i]);
		if (curChild.attr("href")!=undefined)
		{
			var SKOSObj = jQuery(data).find(curChild.attr("href"));
			var prefLabel = SKOSObj.find("preferredLabel").text();
			var objURI = jQuery(data).find(SKOSObj.find("uri").attr("href")).find("uri").text();

			if (prefLabel.toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0 ){
				// prefLabel completion et terme principal
				if ( !cont(arrPrefLabelsCompletion,prefLabel) ){
					arrPrefLabelsCompletion[arrPrefLabelsCompletion.length] = prefLabel;
					prefLabelsCompletion += '<a href="'+bypassURL+"?catkey1="+objURI+'" style="color:green"> '+prefLabel+'<\/a> <br\/>';
				} 											
			} else {
				// prefLabel synonyme et terme principal
				var arrAltLabelTmp = SKOSObj.find("nonPreferredLabels");
				var altLabelsTmp = "";
				for (var n = 0; n < arrAltLabelTmp.length; n++) 
				{   try 
					{	
						if (jQuery(arrAltLabelTmp[n]).text().toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0 ){
							if ( !cont(arrPrefLabelsSynonym,jQuery(arrAltLabelTmp[n]).text()) ){
								arrPrefLabelsSynonym[arrPrefLabelsSynonym.length] = prefLabel;
								prefLabelsSynonym += '<span style="color:red; display:inline">'+jQuery(arrAltLabelTmp[n]).text()+' <\/span><span style="color:black; display:inline"> ('+txt_linked_to+' <\/span><a href="'+bypassURL+"?catkey1="+objURI+'" style="color:green">'+prefLabel+'<\/a><span style="color:black; display:inline">)<\/span><br\/>';
							}								
						}
				    } catch(e) {}
				 }
			}					
		}
	}
	if(allChilds.length > maxALT)
	{	showAllLabel += '<a href="#showAll" onclick="showAll(); return false;">+<\/a>';
	}
	
	jQuery(curentContainer).html("<strong style=\"float:left;clear:left;\">"+txt_alt_labels+"</strong>"+
	"<div id=\"skosLabels\" style=\"float:left;clear:left;\">"+prefLabelsCompletion + prefLabelsSynonym + altLabels + showAllLabel+"</div>");
	
	isRunning = false;
	_oldInputFieldValue=searchTerm;
	_oldLang = searchLang;
	_oldThesaurus = searchThesaurus;
}
function sayHelloJQuery(name, lang, thesaurus, container,showAll)
{
	var myQuery = "<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\"><Body><getConceptsByLabel xmlns=\"http://example.com\">";
	myQuery+="<in0>"+name+"*</in0>";
	myQuery+="<in1><uri xmlns=\"\">"+thesaurus+"</uri></in1>";
	myQuery+="<in2>"+lang+"</in2>";
	myQuery+="</getConceptsByLabel></Body></Envelope>";
	
	jQuery.ajax(
			{
				url : "/axis/services/SKOSThesaurusService",
				type:"POST",
				dataType : "xml",
				contentType : "application/xml",
				soapAction: true,
				data: myQuery,
				error: showSKOSError,
				success: showSKOSValue
			}
	);
}

function sayHello(name, lang, thesaurus, container,showAll) 
{	if (isRunning) return;
	if (name != undefined && name !="") {
		isRunning = true;
		curentContainer = container;
		thesaurusURI =  thesaurus;
		showAllData = showAll;
		searchTerm = name;
		searchLang = lang;
		searchThesaurus = thesaurus;
		sayHelloJQuery(name, lang, thesaurus, container, showAll);
	}
	else
	{
		return;
	}
}
var _oldInputFieldValue=""; // valeur precedente du champ texte
var _currentInputFieldValue=""; // valeur actuelle du champ texte
var _resultCache=new Object(); // mecanisme de cache des requetes

var _oldLang = "";
var _currentLang = "";
var _oldThesaurus = "";
var _currentThesaurus = "";

// tourne en permanence pour suggerer suite a un changement du champ texte
function mainLoop()
{ 	_currentInputFieldValue = document.getElementById("name").value;
 	_currentLang = document.getElementById("lang").value;
  	_currentThesaurus = document.getElementById("thesaurus").value;
  
	if (_oldInputFieldValue!=_currentInputFieldValue || _oldLang!=_currentLang || _oldThesaurus != _currentThesaurus)
	{	if (_currentInputFieldValue.length>3) sayHello(_currentInputFieldValue,_currentLang, _currentThesaurus, document.getElementById("result"));
  	}
  	setTimeout("mainLoop()",200); // la fonction se redeclenchera dans 200 ms
  	return true;
}
