var waiting;
var majorLanguages;

function loading() {
    waiting = true;

	var loadingSpan = document.getElementById("loadingSpan");
    var waitTimer = -1;
    var me = this;
    var dots = 0;
    var waitFunc = function( ) {
        if ( waiting && dots <= 85) {
        	loadingSpan.innerHTML += ".";
        	dots++;
        } else {
        	if (dots > 85) {
        		// This error message isn't strictly true.  The website
        		// will continue to wait for the transaction to complete
        		// but, since it probably won't, it's nice to tell the
        		// client something went wrong.
        		loadingSpan.innerHTML += "connection timed out!"
        	}
 
        	window.clearInterval(waitTimer);
        	waitTimer = -1;
        }
    }
    waitTimer = window.setInterval(waitFunc, 500);
    
    //TODO  This is horrible, we should always use the same keyword for language in the url
	var url = "WiktionaryWrapper" + window.location.search.replace("lang=", "sourceLanguage=");
    AjaxClient.invokeGet(url, true, this.onTranslationComplete);
}

function onTranslationComplete( responseText ) {
	waiting = false;
	
	var queryParams = parseQueryString(window.location.search);
	var conjunctive = queryParams["conj"] == "true";
	var previousURL = queryParams["previous"];
	
	// Bad Marcus!  Why didn't you put the lucky code in the backend!?
	if (conjunctive) {
		// Check if we have an error (one of the words doesn't translate)
		if (responseText.charAt(0) == '!') {
			var loadingSpan = document.getElementById("loadingSpan");
			var errorText = responseText.substring(1, responseText.length);
			loadingSpan.innerHTML += errorText + "  Please <a href=\""+previousURL+"\">return to the previous page</a>.</a>";
			return;
		}
		showImages(responseText, previousURL);
		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.senses == null || results.senses.length==0) {
		return;
	}

	showLuckyResults(results, 0, previousURL);
}

function showLuckyResults( results, senseindex, previousURL ) {
	try {
		languageCallback = function ( responseText ) {
	    	var json = responseText.parseJSON(null);
	    	majorLanguages = json.major;
	    }
	    
	    // download the searchable languages
	    var url = "MajorLanguagesXML";
	    AjaxClient.invokeGet(url, false, languageCallback); 
    
		
		var hash = new Object(); //keep track of words we've added to the query so we don't add them more than once.
		
		var queryParams = parseQueryString(window.location.search);
    	var sourceWord = queryParams["word"];
		hash[sourceWord]=1;
		if ( sourceWord.indexOf(" ") > -1 ) {
			sourceWord = "\"" + sourceWord.replace(/ /g, '+') + "\"";
		}

		var query = sourceWord;
		
		var numMajorLanguages = 0;
		for( var langIndex = 0; langIndex < results.senses[senseindex].standard.length; langIndex++ ) {
			var languageID = results.senses[senseindex].standard[langIndex].id;
			for(var i=0; i<majorLanguages.length; i++) {
				if(majorLanguages[i].id==languageID) numMajorLanguages++;
			}	
		}
		
		var count = 0;
		for( var langIndex = 0; langIndex < results.senses[senseindex].standard.length; langIndex++ ) {
			var languageID = results.senses[senseindex].standard[langIndex].id;
			var skip = true;
			for(var i=0; i<majorLanguages.length; i++) {
				if(majorLanguages[i].id==languageID) skip = false;
			}	
			if(numMajorLanguages==0) skip = false;
			if(skip) continue;
			for( var translationIndex=0; translationIndex < results.senses[senseindex].standard[langIndex].translations.length; translationIndex++) {
				var translationText = results.senses[senseindex].standard[langIndex].translations[translationIndex].translation.toLowerCase();
				if(hash[translationText]!=1) {
					if(count>=32) break;
					hash[translationText]=1;
					if ( translationText.indexOf(" ") > -1 ) {
						translationText = "\"" + translationText.replace(/ /g, '+') + "\"";
					}
					query = query + " OR " + translationText;
					count++;
				}
			}
		}
		
		showImages(query, previousURL )
		// window.open("showresults.jsp?q=" + encodeURI( query ) + "&previous=" + encodeURIComponent(previousURL), "_self", "");
		
	} catch (e) {
	    waiting = false;	// I don't think this is needed
	    throw e;
	}
}
