var allBuffer = {};

function setHandler(eid)
{
	allBuffer[eid] = true;
	
	var element = Ext.get(eid).dom;
	var checkboxes = element.getElementsByTagName('input');
	var checkbox = null;
	
	for(var idx = 0; idx < checkboxes.length; idx++)
	{
		checkbox = checkboxes[idx];
		if(checkbox.type != 'checkbox') continue;
		
		checkbox.onclick = function()
		{
			if(this.checked)
			{
				Ext.get(this.parentNode).addClass('searchboxEntrySelected');
			}
			else
			{
				Ext.get(this.parentNode).removeClass('searchboxEntrySelected');
			}
			updateCount();
		}
	}
}

function getSelected(eid)
{
	var element = document.getElementById(eid);
	var checkboxes = element.getElementsByTagName('input');
	var selected = new Array();
	
	for(var idx = 0; idx < checkboxes.length; idx++)
	{
		var checkbox = checkboxes[idx];
		if(checkbox.type != 'checkbox') continue;
		if(checkbox.checked && checkbox.value != '')
		{
			selected.push(checkbox.value);
		}
	}
	
	return selected;
}

function updateSearchbox(eid, values, hide)
{
	for(id in values)
	{
		var value = values[id];
		
		if(countBuffer[eid + '-' + id] != value)
		{
			countBuffer[eid + '-' + id] = value;
			
			// Ausgrauen/Ausblenden der Checkbox
			/*
			var element = Ext.get(eid + '-' + id);
			if(element && element.dom)
			{
				element = element.dom;
				
				if(hide)
				{
					if(value == 0)
					{
						Ext.get(element.parentNode).removeClass('searchboxEntrySelected');
						element.checked = false;
					}
					
					element.parentNode.style.display = (value == 0) ? 'none' : 'block';
				}
				else
				{
					element.disabled = (value == 0);
				}
			}
			*/
			
			if(hide)
			{
				var element = Ext.get(eid + '-' + id);
				if(element && element.dom)
				{
					element = element.dom;
					if(value == 0)
					{
						Ext.get(element.parentNode).removeClass('searchboxEntrySelected');
						element.checked = false;
					}
					
					element.parentNode.style.display = (value == 0) ? 'none' : 'block';
				}
			}
			
			var element = Ext.get(eid + '-count-' + id);
			if(element)
			{
				element.dom.innerHTML = '(' + value + ')';
			}
		}
	}
	//return reload;
}

function clearSearchbox(eid)
{
	if(eid)
	{
		var element = document.getElementById(eid);
		var elements = element.getElementsByTagName('input');
		for(var idx = 0; idx < elements.length; idx++)
		{
			element = elements[idx];
			if(element.type == 'checkbox' && element.value != '') element.checked = false;
			
			if(element.checked)
			{
				Ext.get(element.parentNode).addClass('searchboxEntrySelected');
			}
			else
			{
				Ext.get(element.parentNode).removeClass('searchboxEntrySelected');
			}
		}
	}
	else
	{
		clearSearchbox('region');
		clearSearchbox('sector');
		clearSearchbox('level');
		clearSearchbox('function');
		clearSearchbox('segment');
		clearSearchbox('organization');
		Ext.get('age').dom.selectedIndex = 0;
	}
}

function updateAllCheckbox(eid)
{
	if(eid)
	{
		var checkedCount = 0;
		
		var element = Ext.get(eid);
		if(element && element.dom)
		{
			element = element.dom;
			var elements = element.getElementsByTagName('input');
			for(var idx = 0; idx < elements.length; idx++)
			{
				element = elements[idx];
				if(element.type == 'checkbox' && element.value != '' && element.checked) checkedCount++;
			}
		}
		
		element = Ext.get(eid + '-all');
		if(element && element.dom)
		{
			element = element.dom;
			element.checked = checkedCount == 0;
			
			if(allBuffer[eid] != element.checked)
			{
				allBuffer[eid] = element.checked;
				if(element.checked)
				{
					Ext.get(element.parentNode).addClass('searchboxEntrySelected');
				}
				else
				{
					Ext.get(element.parentNode).removeClass('searchboxEntrySelected');
				}
			}
		}
	}
	else
	{
		updateAllCheckbox('region');
		updateAllCheckbox('sector');
		updateAllCheckbox('level');
		updateAllCheckbox('function');
		updateAllCheckbox('segment');
		updateAllCheckbox('organization');
	}
}

var countRequestId = -1;
function updateCount(response)
{
	if(response)
	{
		// Response
		var matches = Ext.get('matches-count').dom;
		matches.innerHTML = response.matches;
		Ext.get('searchSubmitButton').dom.disabled = response.matches == 0;
		if(response.matches == 0)
		{
			Ext.get('searchSubmitButton').addClass('disabled');
		}
		else
		{
			Ext.get('searchSubmitButton').removeClass('disabled');
		}
		var reload = false;
		
		updateSearchbox('region',   response.region);   // Regionen
		updateSearchbox('sector',   response.sector);   // Branchen
		updateSearchbox('level',    response.level);    // Einstiegslevel
		updateSearchbox('function', response['function']); // Funktionen
		updateSearchbox('segment',  response.segment);  // Segmente
		updateSearchbox('organization',  response.organization, true);  // Konzernunternehmen
		updateAllCheckbox();
		
		Ext.get('live-criteria').update(response['criteria-' + langId]);
	}
	else
	{
		Ext.get('ajax-loader').enableDisplayMode().show();
		Ext.get('matches-count').enableDisplayMode().hide();
		
		// Request
		if(countRequestId < 0) Ext.Ajax.abort(countRequestId);
		countRequestId = Ext.Ajax.request(
			{
				url: ajaxRoot + 'count.php', 
				params: {
					filter: Ext.encode({
						text: document.getElementById('text').value, 
						age: document.getElementById('age').value, 
						region: getSelected('region'), 
						sector: getSelected('sector'), 
						level: getSelected('level'), 
						"function": getSelected('function'), 
						segment: getSelected('segment'), 
						organization: getSelected('organization')
					})/*, 
					'langId': langId */
				}, 
				success: function(transport) 
				{
					updateCount(Ext.decode(transport.responseText));
					//alert(transport.responseText);
				}, 
				callback: function(transport) 
				{
					Ext.get('ajax-loader').hide();
					Ext.get('matches-count').show();
				}
			}
		);
	}
}

function loadAgent(e)
{
	if(e.value == '-') return false;
	
	Ext.get('ajax-loader').enableDisplayMode().show();
	Ext.get('matches-count').enableDisplayMode().hide();
	
	Ext.Ajax.request({
		url: ajaxRoot + 'agent.php', 
		params: {
			searchid: e.value
		}, 
		success: function(transport) 
		{
			response = Ext.decode(transport.responseText);
			console.log(response);
			updateChecks('region',   response.region);   // Regionen
			updateChecks('sector',   response.sector);   // Branchen
			updateChecks('level',    response.level);    // Einstiegslevel
			updateChecks('function', response["function"]); // Funktionen; response.function won't work in IE
			updateChecks('segment',  response.segment);  // Segmente
			updateChecks('organization',  response.organization);  // Konzernunternehmen
			updateCount();
		}, 
		callback: function(transport) 
		{
			Ext.get('ajax-loader').hide();
			Ext.get('matches-count').show();
		}
	});
	return false;
}

function updateChecks(eid, values)
{
	clearSearchbox(eid);
	for(id in values)
	{
		var value = values[id];
	
		var element = Ext.get(eid + '-' + value);
		if(element && element.dom)
		{
			element = element.dom
			Ext.get(element.parentNode).addClass('searchboxEntrySelected');
			element.checked = true;
		}
	}
}

//Ext.Ajax.autoAbort = true;
Ext.BLANK_IMAGE_URL = 'fileadmin/lib/images/s.gif';

updateCount()
//clearSearchbox();
setHandler('region');
setHandler('sector');
setHandler('level');
setHandler('function');
setHandler('segment');
setHandler('organization');

var element = document.getElementById('age');
element.onchange = function()
{
	updateCount();
}

var store = new Ext.data.JsonStore({
    url: ajaxRoot + 'words.php', 
    root: 'words',
    totalProperty: 'totalCount',
    id: 'word', 
    fields: ['word', 'count']
});

// Custom rendering Template
var resultTpl = new Ext.XTemplate(
    '<tpl for="."><div class="x-combo-list-item suggest-item">',
        '<span class="suggest-word">{word}</span>',
    '</div></tpl>'
);

var search = new Ext.form.ComboBox({
    store: store,
    displayField: 'word',
    minChars: 2, 
    /*tpl: resultTpl, */
    loadingText: 'Loading...', 
    hideTrigger: true,
    applyTo: 'text', 
    queryDelay: 250, 
    listeners: {
    	expand: {
    		fn: function(combo) { 
    			if(Ext.isIE6) Ext.get('age').hide();
    		}
		}, 
		collapse: {
    		fn: function(combo) { 
    			if(Ext.isIE6) Ext.get('age').show();
    		}
		}/*, 
		change: {
			fn: function(combo, newValue, oldValue) {
				console.log("onChange");
			}
		}, 
		beforeselect: {
			fn: function(combo, record, index) {
				console.log("onBeforeSelect");
			}
		}, 
		keydown: {
			fn: function(combo, record, index) {
				console.log("onKeyDown");
			}
		}*/
	}
});

search.el.queryTask = new Ext.util.DelayedTask(updateCount, search.el); 
search.el.queryDelay = 500;
search.el.queryFunc = function() {
	if(this.dom.value.length == 0 || this.dom.value.length >= 2)
		this.queryTask.delay(this.queryDelay);
}.createDelegate(search.el);
search.el.on('keyup', search.el.queryFunc);
search.el.on('blur', search.el.queryFunc);

