var lucky = false
var conjunctive = false

function findLanguages() {
 	var encodedWord = encodeURIComponent( document.searchPanel.getQueryText() );

    var url = "WordLanguages?word0=" + encodedWord
    url += "&stamp=" + (new Date()).getTime();
	
    AjaxClient.invokeGet(url, true, onRetrievedLanguages);
}

function showImages( query, previous ) {
	window.open("showresults.jsp?q=" + encodeURI( query ) + "&previous=" + encodeURIComponent(previous), "_self", "");
}

function onRetrievedLanguages( responseText ) {
	try {
		if (responseText == null || responseText == "") {
			alert(getUIString("serverError"));
			return;
		}
		
		var results = responseText.parseJSON(null);
		
		// Something went wrong.  Let's abort without printing an
		// error message because this is probably just a back button
		// press or a similar interrupt
		if (results == null || results.languages==null) {
			return;
		}

		//If we can't find the word in any language
		if(results.languages.length==0) {
			// maybe we can do a conjunctive query, check if there are two words
			if (conjunctive || !lucky || !tryConjunctiveQuery())
				wordNotFound();
				
			return;
		}
		
		//If the user has specified a language (lucky must also be true for us to get here in this case)
		var selectedLanguageID = document.searchPanel.getSearchLanguageID();
		if(selectedLanguageID != -1) {
			for(var i=0; i<results.languages.length; i++) {
				if(selectedLanguageID == results.languages[i].id) {
					goDirectly(selectedLanguageID);
					return;
				}
			}
			//word is not found in the selected language
			wordNotFound();
			return;
		}

		//If the word appears in only one language -- go directly to that result
		if(results.languages.length == 1) {
			goDirectly(results.languages[0].id);
			return;
		}

		var searchableLanguages = new Array();
		for(var i=0; i<results.languages.length; i++) {
			if(results.languages[i].searchable) searchableLanguages.push(results.languages[i]);
		}
		
		if(searchableLanguages.length == 1) { //If the word appears in only one searchable language -- go directly to that result
			goDirectly(searchableLanguages[0].id);
		}
		else if(searchableLanguages.length > 1) { //If the word appears in multiple searchable languages -- have user disambiguate between searchable languages only
			disambiguate(searchableLanguages);
		}
		else { //If word appears in multiple languages, but no searchable language, have the user disambiguate between all the languages
			disambiguate(results.languages);
		}
	} catch (x) {
	    window.alert(x.message);
	}
}

function tryConjunctiveQuery() {
	var word, encodedWord, url, parts;
	
	word = document.searchPanel.getQueryText();
	parts = word.split(' ');
	if (parts.length == 2) {
		conjunctive = true;
		lucky = true;
		
		encodedWord0 = encodeURIComponent( parts[0] );
		encodedWord1 = encodeURIComponent( parts[1] );
		
	    url = "WordLanguages?word0=" + encodedWord0 + "&word1=" + encodedWord1;
	    url += "&stamp=" + (new Date()).getTime();
		
	    AjaxClient.invokeGet(url, true, onRetrievedLanguages);
	    
	    return true;
	}
	
	return false;
}

function wordNotFound() {
 	var encodedWord = encodeURIComponent( document.searchPanel.getQueryText() );

	var queryString = "GImages.jsp?word=" + encodedWord
		+ "&lang=" + document.searchPanel.getSearchLanguageID()
		+ "&stamp=" + (new Date()).getTime();
		
	window.open(queryString, "_self", "");
}

function goDirectly(languageID) {
	var word = document.searchPanel.getQueryText();
 	var encodedWord = encodeURIComponent( word );
 	var isDeepSearch = document.searchPanel.isDeepSearch();
 	
 	var queryString, site;

	site = "GImages.jsp";
	if(lucky)
		site = "lucky.jsp";
	queryString = site+"?word=" + encodedWord
		+ "&lang=" + languageID
		+ (isDeepSearch ? "&deep=true" : "")
		+ (conjunctive ? "&conj=true" : "")
		+ "&stamp=" + (new Date()).getTime();

	if(lucky) {
		if (document.location.href.match(/.*GImages.jsp.*/))
			queryString += "&previous=" + encodeURIComponent("GImages.jsp?word="+word+"&lang="+document.searchPanel.getSearchLanguageID()/*+"&nosearch=true"*/);
		else
			queryString += "&previous=" + encodeURIComponent("index.jsp");
	}
	
   	if ( document.debugParameters ) {
   		for ( var i = 0; i < document.debugParameters.length; i++ ) {
   			if ( document.debugParameters[i].checkbox.checked )
	   			queryString += "&" + document.debugParameters[i].key + "=" + encodeURIComponent(document.debugParameters[i].textbox.value);
   		}
   	}
   	
	window.open(queryString, "_self", "");
}

function disambiguate(languages) {
	// var rightToLeft = getUIString(key);
	var word = document.searchPanel.getQueryText();
 	var encodedWord = encodeURIComponent( word );

	site = "GImages.jsp";
	if(lucky) site = "lucky.jsp";
	
	var direction = "left";
	// if(rightToLeft == "true") direction = "right";
		
	var disambiguationHTML = "<table style='border:thin solid black'><tbody>" +
				"<tr style='text-align:"+direction+"'><td style='text-align:"+direction+";'>"+getUIString("selectALanguage").replace("[word]",document.searchPanel.getQueryText())+"</td></tr><tr style='text-align:"+direction+"'><td style='text-align:"+direction+"'><ul style='margin-"+direction+":3px;padding-"+direction+":15px;margin-top:5px;margin-bottom:0'>";

	for(var i=0; i<languages.length; i++) {
		var languageName = languages[i].name;
		var languageID = languages[i].id;

	    var queryString = site+"?word=" + encodedWord
			+ "&lang=" + languageID 
			+"&stamp=" + (new Date()).getTime();
			
		if(lucky) {
			if (document.location.href.match(/.*GImages.jsp.*/))
				queryString += "&previous=" + encodeURIComponent("GImages.jsp?word="+word+"&lang="+document.searchPanel.getSearchLanguageID()/*+"&nosearch=true"*/);
			else
				queryString += "&previous=" + encodeURIComponent("index.jsp");
		}
		if (conjunctive)
			queryString += "&conj=true";
		
	   	if ( document.debugParameters ) {
	   		for ( var j = 0; j < document.debugParameters.length; j++ ) {
	   			if ( document.debugParameters[j].checkbox.checked )
		   			queryString += "&" + document.debugParameters[j].key + "=" + encodeURIComponent(document.debugParameters[j].textbox.value);
	   		}
	   	}
		   		
   		disambiguationHTML += "<li><a href=\""+queryString+"\">"+languageName+"</a></li>";
	}
	
	disambiguationHTML += "</td></tr></tbody></table>";
	
	var languageList = document.getElementById("languageList");
	languageList.innerHTML=disambiguationHTML;
}
