function AddMissingLanguagePanel() {
	var me = this;
	me.languageList = document.getElementById("cmbAddMissingLanguagePanel");
	
	// return the function that determines what to show in the autocomplete dropdown
	var populateListCallbackFactory = function(autocompleteObject) {
		return function() {
	        var callback = function( responseText ) {
	            // We'll be getting back the responses in plain text - line by line
	            var matches = responseText.split("\n");
	            autocompleteObject.setChoices( matches, autocompleteObject.getText( ) );
	        };
	
	        var match = encodeURIComponent( autocompleteObject.getText( ) );
	        var url = "AutoCompleteXML?match=" + match + "&language=" + me.languageList.options[me.languageList.selectedIndex].value;
	        url += "&stamp=" + (new Date()).getTime();
	        AjaxClient.invokeGet( url, true, callback );
		}
	}
	
	// make the search textbox into an autocomplete textbox
	me.autoCompleteTextBox = new AutoCompleteTextBox( "txtAddMissingLanguagePanel", populateListCallbackFactory );
		
	me.languageList.onchange = function(e) {
		if (!e) var e = window.event;
	    var languageText = me.languageList.options[me.languageList.selectedIndex].text.replace(/\[.*?\]/gi, "");
	    if (languageText.charAt(0) == '-')
	    	languageText = me.languageList.options[0].text;
	    var enterWordUIText = document.getElementById("enterWordUIText");
	    var s = enterWordUIText.childNodes[0].data;
	    var olds = me.autoCompleteTextBox.getText();
	    var regex = s.replace("[language]", ".*");
	    
	    // TODO: NASTY HACK
	    if (olds == null || olds == "" || olds.match(regex))
	    	me.autoCompleteTextBox.setText(s.replace("[language]", languageText));
	}
	
	me.autoCompleteTextBox.onkeypress = function(e) {
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
	
	    if ( code == KeyCodes.KEY_ENTER ) {
	        me.autoCompleteTextBox.escapeKey();
	    }
	}
	
	me.autoCompleteTextBox.onfocus = function (e) {
		me.autoCompleteTextBox.selectAll();
	}
			
	var oldClick = (document.onclick) ? document.onclick : function () {};
	document.onclick = function (e) {
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
	
		if ( targ.nodeName.toUpperCase() == 'OPTION' )
			targ = targ.parentNode;
	
		if (targ != me.autoCompleteTextBox.listbox &&
			targ != me.autoCompleteTextBox.listboxContainer) {
			me.autoCompleteTextBox.escapeKey();
		} else {
			me.autoCompleteTextBox.complete();
		}
	
		return oldClick(e);
	};

	me.autoCompleteTextBox.setFocus();
}

function AddMissingLanguagePanel(loc) {
	var me = this;
	me.languageList = document.getElementById("cmbAddMissingLanguagePanel"+loc);
	
	// return the function that determines what to show in the autocomplete dropdown
	var populateListCallbackFactory = function(autocompleteObject) {
		return function() {
	        var callback = function( responseText ) {
	            // We'll be getting back the responses in plain text - line by line
	            var matches = responseText.split("\n");
	            autocompleteObject.setChoices( matches, autocompleteObject.getText( ) );
	        };
	
	        var match = encodeURIComponent( autocompleteObject.getText( ) );
	        var url = "AutoCompleteXML?match=" + match + "&language=" + me.languageList.options[me.languageList.selectedIndex].value;
	        url += "&stamp=" + (new Date()).getTime();
	        AjaxClient.invokeGet( url, true, callback );
		}
	}
	
	// make the search textbox into an autocomplete textbox
	me.autoCompleteTextBox = new AutoCompleteTextBox( "txtAddMissingLanguagePanel"+loc, populateListCallbackFactory );
		
	me.languageList.onchange = function(e) {
		if (!e) var e = window.event;
	    var languageText = me.languageList.options[me.languageList.selectedIndex].text.replace(/\[.*?\]/gi, "");
	    if (languageText.charAt(0) == '-')
	    	languageText = me.languageList.options[0].text;
	    var enterWordUIText = document.getElementById("enterWordUIText");
	    var s = enterWordUIText.childNodes[0].data;
	    var olds = me.autoCompleteTextBox.getText();
	    var regex = s.replace("[language]", ".*");
	    
	    // TODO: NASTY HACK
	    if (olds == null || olds == "" || olds.match(regex))
	    	me.autoCompleteTextBox.setText(s.replace("[language]", languageText));
	}
	
	me.autoCompleteTextBox.onkeypress = function(e) {
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
	
	    if ( code == KeyCodes.KEY_ENTER ) {
	        me.autoCompleteTextBox.escapeKey();
	    }
	}
	
	me.autoCompleteTextBox.onfocus = function (e) {
		me.autoCompleteTextBox.selectAll();
	}
			
	var oldClick = (document.onclick) ? document.onclick : function () {};
	document.onclick = function (e) {
		var targ;
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
	
		if ( targ.nodeName.toUpperCase() == 'OPTION' )
			targ = targ.parentNode;
	
		if (targ != me.autoCompleteTextBox.listbox &&
			targ != me.autoCompleteTextBox.listboxContainer) {
			me.autoCompleteTextBox.escapeKey();
		} else {
			me.autoCompleteTextBox.complete();
		}
	
		return oldClick(e);
	};

	me.autoCompleteTextBox.setFocus();
}

AddMissingLanguagePanel.prototype.setSearchLanguageID = function(searchLanguageID) {
    for ( var i = 0; i < this.languageList.options.length; i++) {
        if (this.languageList.options[i].value == searchLanguageID) {
        	this.languageList.selectedIndex = i;
        	this.languageList.onchange();
            break;
        }
    }
}

AddMissingLanguagePanel.prototype.getSearchLanguageID = function() {
	return this.languageList.options[this.languageList.selectedIndex].value;
}

AddMissingLanguagePanel.prototype.getLanguageText = function() {
	return this.languageList.options[this.languageList.selectedIndex].text;
}

AddMissingLanguagePanel.prototype.setQueryText = function(queryText) {
	this.autoCompleteTextBox.setText(queryText);
}

AddMissingLanguagePanel.prototype.getQueryText = function() {
	return this.autoCompleteTextBox.getText();
}

AddMissingLanguagePanel.prototype.isReady = function() {
	if(this.getSearchLanguageID()==-1) {
		return false;
	}
		
	var enterWordUIText = document.getElementById("enterWordUIText");
	var s = enterWordUIText.childNodes[0].data;
	var olds = this.autoCompleteTextBox.getText();
	var regex = s.replace("[language]", ".*");
	    
	// TODO: NASTY HACK
	if (olds == null || olds == "" || olds.match(regex)) {
	 	this.languageList.onchange();
	 	return false;
	}
	
	return true;
}
