//var requester;
//var formVar;
var distrito;
var concelho;
var freguesia;
var rfName;
var rfId;

/*
function loadXMLResponse(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        requester = new XMLHttpRequest();
        requester.onreadystatechange = processRequestChange;
        requester.open("POST", url, true);
        requester.send(null);
        // branch for IE/Windows ActiveX version
    }
    else if (window.ActiveXObject) {
        requester = new ActiveXObject("Microsoft.XMLHTTP");
        if (requester) {
            requester.onreadystatechange = processRequestChange;
            requester.open("POST", url, true);
            requester.send();
        }
    }
}
*/

function obterConcelhos(form, row) {	// altera distrito
	distrito = document.getElementsByName("distrito"+row)[0];
	concelho = document.getElementsByName("concelho"+row)[0];
	freguesia = document.getElementsByName("freguesia"+row)[0];
	rfName = document.getElementsByName("rf"+row)[0];
	
	if (concelho!=null) concelho.options.length=0;
	if (freguesia!=null) freguesia.options.length=0;	
	
	if (distrito.value == "") {
        if (concelho!=null) concelho.options.length = 1;
        if (freguesia!=null)  freguesia.options.length = 1;
		if (rfName!=null) rfName.value="";
        return;
    }

    distrito.disabled = true;
    if (rfName!=null) rfName.value="";
    
    /*
    formVar = form;
    var url = "obterConcelhos.action?distrito=" + distrito.value;
    loadXMLResponse(url);	
    */
    var url = "obterConcelhos.action";
    var pars = 'distrito=' + distrito.value;
    
    var requester = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: processConcelhos
			});
}

function obterFreguesias(form, row) {	// escolhe um concelho (ou anula a op??o anterior)
	distrito = document.getElementsByName("distrito"+row)[0];
	concelho = document.getElementsByName("concelho"+row)[0];
	freguesia = document.getElementsByName("freguesia"+row)[0];	
	rfName = document.getElementsByName("rf"+row)[0];
		
	if (freguesia!=null) freguesia.options.length = 0;	
	
	if (concelho.value == "") {
        if (freguesia!=null) freguesia.options.length = 1;
        if (rfName!=null) {
        	if (distrito.value!='') rfName.value = 'Dist: ' + distrito.options[distrito.selectedIndex].text;
        	else rfName.value = "";
        }
        return;
    }

    distrito.disabled = true;	
    if (concelho!=null) concelho.disabled = true;
    if (rfName!=null) rfName.value="";

    /*
    formVar = form;
    var url = "obterFreguesias.action?distrito=" + distrito.value + "&concelho=" + concelho.value;
    loadXMLResponse(url);
    */
    
    var url = "obterFreguesias.action";
    var pars = 'distrito=' + distrito.value + '&concelho=' + concelho.value;
    
    var requester = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: processFreguesias
			});
}

function obterRF(form, row) {	// escolhe freguesia ou anula op??o
	distrito = document.getElementsByName("distrito"+row)[0];
	concelho = document.getElementsByName("concelho"+row)[0];
	freguesia = document.getElementsByName("freguesia"+row)[0];
	rfName = document.getElementsByName("rf"+row)[0];

	if (freguesia.value == "") {
		try {
            if (rfName!=null) {
            	if (concelho.value!='') rfName.value = 'Munic: ' + concelho.options[concelho.selectedIndex].text;
            	else if (distrito.value!='') rfName.value = 'Dist: ' + distrito.options[distrito.selectedIndex].text;
        		else rfName.value = "";
            }
	    } catch (e) {
	    }
        return;
    }

    distrito.disabled = true;	
    concelho.disabled = true;
    if (freguesia!=null) freguesia.disabled = true;
    if (rfName!=null) rfName.value="";

    /*
    formVar = form;
    var url = "obterRF.action?distrito=" + distrito.value + "&concelho=" + concelho.value + "&freguesia=" + freguesia.value;
    loadXMLResponse(url);	
    */
    
    var url = "obterRF.action";
    var pars = 'distrito=' + distrito.value + '&concelho=' + concelho.value + '&freguesia=' + freguesia.value;;
    
    var requester = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: processRF
			});
}

/*
function processRequestChange() {
    // only if requester shows "complete"
    if (requester.readyState == 4) {    	
        // only if "OK"
        if (requester.status == 200) {
            if (requester.responseXML.documentElement.nodeName == "concelhos") {
                processConcelhos(requester.responseXML.getElementsByTagName("concelhos")[0]);
                return;
            }
            if (requester.responseXML.documentElement.nodeName == "freguesias") {
                processFreguesias(requester.responseXML.getElementsByTagName("freguesias")[0]);
                return;
            }
            if (requester.responseXML.documentElement.nodeName == "rf") {
                processRF(requester.responseXML.getElementsByTagName("rf")[0]);
                return;
            }
        } else {
            alert("Erro no processamento do pedido.\nPor favor tente novamente.\nErro:" + requester.statusText);
        }
    }
}
*/

function getXmlNodeValue(xmlNode) {
	return Try.these( function() { return xmlNode.text; }, 
					  function() { return xmlNode.textContent; } 
					 );
}

function addOption(selectElement, newOption) {
    Try.these( function() { selectElement.add(newOption, null); },
	           function() { selectElement.add(newOption, selectElement.length); }
			  );
}

function processConcelhos(requester) {	// preenche lista de concelhos apos selec??o de distrito

	var concelhos = requester.responseXML.getElementsByTagName("concelhos")[0];
    concelho.options.length = 1;
    if (freguesia!=null) freguesia.options.length = 1;

    var nodes = $A(concelhos.childNodes);

    nodes.each(function(conc) {
        if (conc.nodeName == "concelho") {
            var newOption = document.createElement('option');
            var concelhoNodes = $A(conc.childNodes);
            concelhoNodes.each(function(concelhoNode) {
                if (concelhoNode.nodeName == 'codconcelho')
                    newOption.value = getXmlNodeValue(concelhoNode);
                if (concelhoNode.nodeName == 'nome')
                    newOption.text = getXmlNodeValue(concelhoNode);
            });

            addOption(concelho, newOption);
        }
    });

    if (rfName!=null) rfName.value = 'Dist: ' + distrito.options[distrito.selectedIndex].text;
    distrito.disabled = false;
}

function processFreguesias(requester) {	// preenche lista de freguesias ap?s selec??o de concelho

	var freguesias = requester.responseXML.getElementsByTagName("freguesias")[0];
	
    if (freguesia!=null) {
    	freguesia.options.length = 1;

	    var nodes = $A(freguesias.childNodes);
	
	    nodes.each(function(freg) { 
	        if (freg.nodeName == "freguesia") {
	            var newOption = document.createElement('option');
	            var freguesiaNodes = $A(freg.childNodes);
	            freguesiaNodes.each(function(freguesiaNode) {
	                if (freguesiaNode.nodeName == 'codfreg')
	                    newOption.value = getXmlNodeValue(freguesiaNode);
	                if (freguesiaNode.nodeName == 'nome')
	                    newOption.text = getXmlNodeValue(freguesiaNode);
	            });
	
	            addOption(freguesia, newOption);
	        }
	    });
	}

	if (rfName!=null) rfName.value = 'Munic: ' + concelho.options[concelho.selectedIndex].text;
    distrito.disabled = false;
    concelho.disabled = false;
}

function processRF(requester) {	// preenche RF apos selc??o de freguesia

 	var rf = requester.responseXML.getElementsByTagName("rf")[0];
 	
    var rfNodes = $A(rf.childNodes);
    
    try {
   		rfNodes.each(function(rfNode) {
	        if (rfNode.nodeName == 'nome') 
	            if (rfName!=null) rfName.value = getXmlNodeValue(rfNode);
	        /*if (rfNode.nodeName == 'id') 
	            rfId.value = getXmlNodeValue(rfNode);*/
	    });
    } catch (e) {
    }

	if (rfName!=null) rfName.value = 'Freg: ' + freguesia.options[freguesia.selectedIndex].text;
					
    distrito.disabled = false;
    concelho.disabled = false;
    freguesia.disabled = false;
}

