var requestDir = Array();

function stateChangeFileSelect(selectIdPar)
{
	if (requestDir[selectIdPar].readyState != 4)
		return;

	var selectOb = elById(selectIdPar);
	var ok = true;

	if (requestDir[selectIdPar].status != 200) {
		alert('Nieoczekiwana odpowiedź serwera: ' + requestDir[selectIdPar].status);
		ok = false;
	}

	if (requestDir[selectIdPar].responseText.substr(0, 5) != '<?xml') {
		alert(requestDir[selectIdPar].responseText);
		ok = false;
	}

	if (ok && !putNewFileSelectOptions(requestDir[selectIdPar].responseXML, selectOb))
		ok = false;

	if (!ok && confirm('Wystąpił błąd. Ponowić próbę?')) {
		loadOptionsFileSelect(directory, selectIdPar);
		return;
	}

	if (ok) {
		enable(selectOb);
		return;
	}

	emptySelect(selectOb);
	addOption('błąd!', selectOb);
	disable(selectOb);
}

function loadOptionsFileSelect(directoryPar, selectIdPar, no_files)
{
	var selectOb = elById(selectIdPar);

	if (directoryPar == '')
		directoryPar = selectOb.value;

	no_files = no_files ? 1 : 0;

	emptySelect(selectOb);
	addOption('czekaj...', selectOb);
	disable(selectOb);
	
	requestDir[selectIdPar] = new XMLHttpRequest();
	requestDir[selectIdPar].open('GET', 'file_select.php?no_files=' + no_files + '&dir=' + directoryPar, true);
	requestDir[selectIdPar].onreadystatechange = function() { stateChangeFileSelect(selectIdPar); };
	requestDir[selectIdPar].send(null);
}

function addOption(message, selectOb)
{
	var option = document.createElement('option');
	option.appendChild(document.createTextNode(message));
	selectOb.appendChild(option);
}

function emptySelect(selectOb)
{
	var child;

	while ((child = selectOb.firstChild) != null)
		selectOb.removeChild(child);
}

function putNewFileSelectOptions(xml, selectOb)
{	
	emptySelect(selectOb);

	try {
		var collection = xml.firstChild.childNodes;
		for (i = 0; i < collection.length; i++) {
			var element = document.importNode(collection[i], true);
			selectOb.appendChild(element);
		}

		return true;
	} catch (ex) {
		alert(ex.message);
		
		return false;
	}
}
