var propositions = null;
var selected_proposition = null;
var field = null;
var form = null;

function initField(oField, oForm, lang) {
	Event.Keys.enter = 3;
	Event.Keys.enterbis = 13;
	Event.Keys.tab = 9;
	Event.Keys.up = 38;
	Event.Keys.down = 40;
	
	field = oField;
	form = oForm;

	field.removeEvents('keyup');
	field.removeEvents('blur');
	
	field.addEvent('keyup', function(event){
		event = new Event(event);
		switch (event.key) {
			case 'enter' :
				validateCurrentLine();
				break;
			case 'enterbis' :
				validateCurrentLine();
				break;
			case 'up' :
				selectPrevLine();
				break;
			case 'down' :
				selectNextLine();
				break;
			default :
				loadCompletion(field, lang);
				break;
		}
	});
	
	field.addEvent('keydown', function(event){
		event = new Event(event);
		if (event.key == 'tab')
				validateCurrentLine();
	});

	field.addEvent('blur', function(event) {
		event = new Event(event);
		setTimeout("hideList();",500); // Timeout used to pick a click before hiding the list (half a second is sufficient)
	});

}

function loadCompletion(element, lang) {
	var value = element.value;
	
	if (value != '') {
		var req = new Request.HTML({
			url : siteUrl + 'scripts/auto_color.php?keyword=' + value + '&lang=' + lang + '&catId=' + catId,
			onSuccess : function(html) {
				$('autocompleter').set('text', '');
				$('autocompleter').adopt(html);
				
				displayList();
				
				selectFirstLine();
				propositions = $('autocompleter').getChildren();
				propositions.each(function(element){
					element.addEvent('mouseenter', function(){
						selected_proposition.style.background = '#fff';
						selected_proposition = element;
						selected_proposition.style.background = '#ccf';
					});
					
					element.addEvent('click', function() {
						validateCurrentLine();
					});
				});
			}
		});
		req.send();
	}
	else
		hideList();
}

function selectFirstLine() {
	selected_proposition = $('autocompleter').getFirst();
	selected_proposition.style.background = '#9cf';
}

function selectNextLine() {
	if (selected_proposition.getNext()) {
		selected_proposition.style.background = '#fff';
		selected_proposition = selected_proposition.getNext();
		selected_proposition.style.background = '#9cf';
	}
}

function selectPrevLine() {
	if (selected_proposition.getPrevious()) {
		selected_proposition.style.background = '#fff';
		selected_proposition = selected_proposition.getPrevious();
		selected_proposition.style.background = '#9cf';
	}
}

function validateCurrentLine() {
	window.location.replace(selected_proposition.getFirst('a').href);
}

function displayList() {
	form.removeEvents('submit');
	form.addEvent('submit', function (event) {
		event = new Event(event);
		event.stop();
	});
	
	$('autocompleter').style.display = 'block';
}

function hideList() {
	$('autocompleter').style.display = 'none';
	form.removeEvents('submit');
	form.addEvent('submit', function (event){
		event = new Event(event);
		form.submit();
	});
}

function print_r(obj) {
	win_print_r = window.open('about:blank', 'win_print_r');
	win_print_r.document.write('<html><body>');
	r_print_r(obj, win_print_r);
	win_print_r.document.write('</body></html>');
}

function r_print_r(theObj, win_print_r) {
	if(theObj.constructor == Array || theObj.constructor == Object) {
		if (win_print_r == null) win_print_r = window.open('about:blank', 'win_print_r');
	}
	for(var p in theObj) {
		if(theObj[p].constructor == Array || theObj[p].constructor == Object) {
			win_print_r.document.write("<li>["+p+"] =>"+typeof(theObj)+"</li>");
			win_print_r.document.write("<ul>");
			r_print_r(theObj[p], win_print_r);
			win_print_r.document.write("</ul>");
		} else {
			win_print_r.document.write("<li>["+p+"] =>"+theObj[p]+"</li>");
		}
	}
	win_print_r.document.write("</ul>")
}
