// @name: SelectFilter
// @type: Behaviour
// @author: Rocco Howard
// @version: 20070630

Bluora.SelectFilter = [];

Bluora.INPUTselectfilter = function(el) {
	if ($('select_'+el.filter_id)) {
		var selectbox = $('select_'+el.filter_id);
	} else if ($('SELECT_'+el.filter_id)) {
		var selectbox = $('SELECT_'+el.filter_id);
	} else {
		var selectbox = false;	
	}
	
	if (selectbox) {
		selectbox.disabled = true;
		selectbox.update(Bluora.SelectFilter[el.filter_id]);
		var tmpfirstoption = selectbox.options[0];
		
		selectbox.remove(0);
		var select_options = selectbox.getElementsByTagName('option');
		select_options = $A(select_options);
	
		selectbox.options.length = 0; 
		selectbox.options[0] = tmpfirstoption;
		
		var i = 1;
		select_options.find(
			function(user){
				var reg = new RegExp(el.value, 'i');
				if (user.text.match(reg)) {
					selectbox.options[i] = user;
					i++;
				}
		});
		selectbox.selectedIndex = 0;
		selectbox.disabled = false;
	} else {
		Bluora.logError('SELECT element not found - '+el.filter_id);
	}
};

Bluora.Behaviour.SelectFilter = {
	'input.BluoraSelectFilter': function(el) {
		el.filter_id = el.id.replace('filter_', '');
		
		if ($('select_'+el.filter_id)) {
			var selectbox = $('select_'+el.filter_id);
		} else if ($('SELECT_'+el.filter_id)) {
			var selectbox = $('SELECT_'+el.filter_id);
		} else {
			var selectbox = false;	
		}
		
		if (selectbox) {
			selectbox.filter = true;
		
			if (typeof Bluora.SelectFilter[el.filter_id] == 'undefined') {
				Bluora.SelectFilter[el.filter_id] = [];
			}
			
			if (selectbox.length != Bluora.SelectFilter[el.filter_id].length) {
				var select_options = selectbox.getElementsByTagName('option');
				Bluora.SelectFilter[el.filter_id] = $A(select_options);
			}
			
			el.onkeypress = function(e) {
				if(e && e.which){
					e = e
					characterCode = e.which;
				} else{
					e = event
					characterCode = e.keyCode;
				}
				if(characterCode == 13){
					Bluora.INPUTselectfilter(el);
				}
			}
			
			el.onclick = function() {
				el.value = '';
				if (selectbox.length != Bluora.SelectFilter[el.filter_id].length) {
					Bluora.INPUTselectfilter(el);
				}
			}
		} else {
			Bluora.logError('SELECT element not found - '+el.filter_id);
		}
	}
};
Bluora.Behaviour.register(Bluora.Behaviour.SelectFilter);
Bluora.Behaviour.apply();