var country;
var xmlHttp;
var region;
var createrequest;
var pageType;
var rRegion;

function createXMLHttpRequest(){
    if (country == "" || country == "ALLWORLD") 
        return false;
    else {
        if (window.activeXObject) 
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else 
            if (window.XMLHttpRequest) 
                xmlHttp = new XMLHttpRequest();
        if (xmlHttp) 
            return true;
        else 
            return false;
    }
}

function refreshRegionList(page, pagetype, inputid){
    pageType = page;
    
    if (page == "add") {
        country = document.getElementById("country_" + inputid).value;
        region = "region_" + inputid;
    }
    else 
        if (page == "admin") {
            countryEl = document.getElementById("country_id");
            country = new Array();
            for (i = 0; i < countryEl.length; i++) {
                if (countryEl[i].selected) 
                    country.push(countryEl[i].value);
            }
            country = country.join(",");
            region = "tmp_region_id";
			rRegion = "region_id";
        }
        else {
            country = document.getElementById("country").value;
            region = "region";
        }
    
    
    if (page == "add") 
        var url = "/proposals/getregions/" + country;
    else 
        if (page == "admin") 
            var url = "/mailsend/getregions/" + country;
        else 
            if (page == "search") 
                var url = "/search/getregions/" + country;
            else 
                var url = "/user/getregions/" + country;
    
    createrequest = createXMLHttpRequest();
    
    if (createrequest) {
        xmlHttp.onreadystatechange = handleStateChange;
        xmlHttp.open("GET", url, true);
        xmlHttp.send(null);
    }
    else {
        if (xmlHttp) 
            delete xmlHttp.responseXML;
        updateRegionList(page);
    }
}

function getSelectedOptions(list){
    var selected = $(list)
    var options = selected.options
    var optlen = options.length
    
    var selectedNodes = []
    
    for (var i = 0; i < optlen; i++) {
        if (options[i].selected) 
            selectedNodes.push(options[i])
    }
    return selectedNodes
    
}

function handleStateChange(){
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            updateRegionList(pageType);
        }
    }
}

function updateRegionList(page){
    clearRegionList(page);
    var regions = document.getElementById(region);
    if (createrequest && xmlHttp.responseXML) {
        groups = false;
        response = xmlHttp.responseXML;
        if (response.getElementsByTagName("regiongroup").length > 0) {
            groups = true;
            var results = response.getElementsByTagName("regiongroup");
        }
        else {
            var results = xmlHttp.responseXML.getElementsByTagName("region");
        }
        document.getElementById(region).disabled = false;
		if (rRegion) document.getElementById(rRegion).disabled = false;
    }
    else {
        document.getElementById(region).disabled = true;
        if (rRegion) document.getElementById(rRegion).disabled = true;
        return;
    }
    
    var optiongrouparray = new Array();
    var optiongroup = null;
    var option = null;
    if (groups) {
        for (var i = 0; i < results.length; i++) {
            optiongroup = document.createElement("optgroup");
            optiongroup.setAttribute("label", results[i].getAttribute("name"));
            regionList = results[i].getElementsByTagName("region");
            for (var j = 0; j < regionList.length; j++) {
				if (rRegion) {
					selOpts = document.getElementById(rRegion).options;
					sel = false;
					for (k = 0; k < selOpts.length; k++) {
						if (selOpts[k].value == regionList[j].getAttribute("id")) {
							sel = true;
							break;
						}
					}
					if (sel) continue;
	                option = document.createElement("option");
	                option.appendChild(document.createTextNode(regionList[j].firstChild.nodeValue));
	                option.value = regionList[j].getAttribute("id");
	                optiongroup.appendChild(option);
					
				} else {
	                option = document.createElement("option");
	                option.appendChild(document.createTextNode(regionList[j].firstChild.nodeValue));
	                option.value = regionList[j].getAttribute("id");
	                optiongroup.appendChild(option);
				}
            }
            optiongrouparray.push(optiongroup);
        }
        for (i = 0; i < optiongrouparray.length; i++) {
            regions.appendChild(optiongrouparray[i]);
        }
    }
    else {
        for (var i = 0; i < results.length; i++) {
            option = document.createElement("option");
            option.appendChild(document.createTextNode(results[i].firstChild.nodeValue));
            option.value = results[i].getAttribute("id");
            regions.appendChild(option);
        }
    }
}

function clearRegionList(page){
    var regions = document.getElementById(region);
    while (regions.childNodes.length > 0) {
        regions.removeChild(regions.childNodes[0]);
    }
	if (rRegion) {
		rRegions = document.getElementById(rRegion);
		while (rRegions.childNodes.length > 0) {
			rRegions.removeChild(rRegions.childNodes[0]);
		}
	}
    option = document.createElement("option");
    if (page == "search" || page == "profile") 
        updateText = "All counties/states";
    else 
        updateText = "Please select a county/state";
    if (page != "admin") {
		option.appendChild(document.createTextNode(updateText));
		option.value = "";
		regions.appendChild(option);
	}
}

