/**
 * Dinamikusan kötött JSON kereső
 * 
 * @author Dobai Csaba (prometheus) <csaba.dobai@php-sparcle.hu>
 * @since 2007.04.24. 12:39
 */

var searchFieldsList = null;
var searchFieldsValues = new Array();
var searchFieldsDefValues = new Array();

/**
 * Inicializálja és létrehozza a prototype xmlhttprequest objektumot, illetve
 * a kapott parameter alapjan feltolti a searchFieldsList tombott.
 *
 * @access public
 * @param string field_id_list Vesszővel felsorolva tartalmazza a mezők neveit
 * @return void 
 **/
function searchInit(field_id_list, def_value_list)
{
	searchFieldsList = field_id_list.split(', ');
	searchFieldsDefValues = def_value_list.split(', ');
	
	// Alapértékekkel feltöltés
	for ( var i = 0; i < searchFieldsList.length; i++)
	{
		var optionNew = document.createElement('option');
		optionNew.value = 'NULL';
		optionNew.text = searchFieldsDefValues[i];
		
		$(searchFieldsList[i]).options.add(optionNew);
	} // for
	
	// Az első select kapcsolódik a szerverhez
	var searchRequest = new Ajax.Request(
		'ajax.php',
		{
			method : 'post',
			parameters : 'area=search&op=search&id='+searchFieldsList[0],
			onComplete : searchResponseParser
		}
	);
}

/**
 * Feldolgozza az XMLHttpRequest-en keresztül visszaérkező értéket, amely az
 * alábbi felépítéssel tér vissza:
 * 
 * ^^debuginfo^^@@select id-je@@érték1::szöveg||érték2::szöveg||értékn::szöveg||...
 * 
 * @param object searchRequest XMLHttpRequest objektum
 * @access public
 * @return void 
 **/
function searchResponseParser(searchRequest)
{
	var respondedText = searchRequest.responseText;
	var debugInfo = '';
	var fieldValues = null;
	var fieldId = '';
	var errorOnResult = false;
	var fieldLength = 0;
	var fieldIndex = 0;
	var nextFieldIndex = null;
	
	// Visszatérés ellenőrzése
	if (respondedText.length > 0)
	{
		debugInfoSplit = respondedText.split('^^');
		if (debugInfoSplit.length == 3)
		{
			debugInfo = debugInfoSplit[1];
			if (confirm(debugInfo + "\r\n\r\nFolytassam?"))
			{
				respondedText = debugInfoSplit[2];
			}
			else
			{
				return false;
			}
		}
		fieldIdSplit = respondedText.split('@@');
		fieldValuesText = '';
		if (fieldIdSplit.length == 3)
		{
			fieldId = fieldIdSplit[1];
			regExp = new RegExp('\@\@'+fieldId+'\@\@', 'g');
			fieldValuesText = respondedText.replace(regExp, '');
			fieldValues = fieldValuesText.split('||');
		}
		else
		{
			errorOnResult = true;
		}
	}
	else
	{
		errorOnResult = true;
	}
	
	// Ha nincs formai hiba, megkezdem az adatok beillesztését
	if (!errorOnResult)
	{
		$(fieldId).disabled = true; // Amíg a listamódosítás megy, ne babrálja a júzer.
		// Korábbi elemek törlése
		fieldLength = $(fieldId).options.length;
		
		for ( var i = 0; i < fieldLength; i++)
		{
			$(fieldId).options[0] = null;
		} // for
		// Új elemek hozzáadása
		for ( var i = 0; i < fieldValues.length; i++)
		{
			var optionSplit = fieldValues[i].split(':');
			var optionNew = document.createElement('option');
			optionNew.value = optionSplit[0];
			optionNew.text = optionSplit[1];
			
			$(fieldId).options.add(optionNew);
		} // for
		
		// Megadott listaelem kiválasztása, ha kapott korábban értéket
		if (searchFieldsValues.length > 0)
		{
			for ( var i = 0; i < searchFieldsList.length; i++)
			{
				if (searchFieldsList[i] == fieldId)
				{
					fieldIndex = i;
					break;
				}
			} // for
			if (fieldIndex+1 <= searchFieldsList.length-1) nextFieldIndex = fieldIndex + 1;
			
			for ( var i = 0; i < $(fieldId).options.length; i++)
			{
				if ($(fieldId).options[i].value == searchFieldsValues[fieldIndex])
				{
					$(fieldId).options[i].selected = true;
					searchFieldsValues[fieldIndex] = 'NULL';
				}
			} // for
		}
		
		// Ha a select-nek csak egy eleme van, az a 'válasszon' lesz, ezért
		// nem érdemes visszakapcsolni.
		if ($(fieldId).options.length > 1)
		{
			$(fieldId).disabled = false; // Mostmár babrálhatja.
			if (nextFieldIndex !== null)
			{
				searchFieldClick(searchFieldsList[nextFieldIndex]);
			}
		}
	}
}

/**
 * Elküldi a PHP-nek a csoporthoz tartozó mezők értékeit és ezek alapján lekéri
 * a "következő" mező értékeit. A csoportmezők értékeit a values PHP tömb fogja
 * tartalmazni: $_POST['values'][mezőnév] = érték
 * 
 * @access public
 * @param string next_field A következő mező
 * @return void 
 **/
function searchFieldClick(next_field)
{
	var fieldValues = '';
	var afterNextField = false;
	// Paraméterek kigyűjtése a PHP-nek, $_POST['values'] tömbbe.
	for ( var i = 0; i < searchFieldsList.length; i++)
	{
		if (searchFieldsList[i] == next_field && !afterNextField)
		{
			afterNextField = true;
		}
		if (afterNextField)
		{
			$(searchFieldsList[i]).disabled = true;
			// Korábbi elemek törlése
			fieldLength = $(searchFieldsList[i]).options.length;
			
			for ( var j = 0; j < fieldLength; j++)
			{
				$(searchFieldsList[i]).options[0] = null;
			} // for
			
			// A 'válasszon' hozzáadása
			var optionNew = document.createElement('option');
			optionNew.value = 'NULL';
			optionNew.text = searchFieldsDefValues[i];
			
			$(searchFieldsList[i]).options.add(optionNew);
		}
		else
		{
			fieldValues += '&values['+searchFieldsList[i]+']='+$(searchFieldsList[i]).options[$(searchFieldsList[i]).selectedIndex].value;
		}
	} // for

	// Kérés elküldése.
	var searchRequest = new Ajax.Request(
		'ajax.php',
		{
			method : 'post',
			parameters : 'area=search&op=search&id='+next_field+fieldValues,
			onComplete : searchResponseParser
		}
	);
} // function

/**
 * Ellenőrzi a mezők helyes értékét az űrlap elküldése előtt
 * 
 * @access public
 * @return void 
 **/
function searchFieldsCheck()
{
    if ($(searchFieldsList[0]).value == 'NULL')
        alert(msg_empty_sfields);
    else
        $('search-form').submit();
} // function

