function selChanged() {
    var i = this.selectedIndex;
    var value = this[i].value;
    var text = this[i].text;
    var map = GCROUtils.getMap();
    
    //get server url
    var url = EsriUtils.getServerUrl(map.formId);
    
    var params = new Array();
    params.push("FIPS=" + value);
    
    var responseHandler = new ResponseHandler();
    responseHandler.getResponseProcessor = function () {
        return function(xmlHttp) {
            EsriControls.processPostBack(xmlHttp);
            loadCountyList(value, text);
        };
    };
    
    var waitMessage = "Orienting map to " + this[i].text + ", please wait...";
    
    GCROUtils.performCommand(url, true, "mapZoom", currentViewId, params, responseHandler, waitMessage);
}

function loadCountyList(value, text) {
    var map = GCROUtils.getMap();
    var url = EsriUtils.getServerUrl(map.formId);
    
    var params = new Array();
    params.push("STATE=" + text);
    
    var responseHandler = new ResponseHandler();
    responseHandler.getResponseProcessor = function () {
        return function(xmlHttp) {
            countyresponse(xmlHttp);
        };
    };    
    
    var waitMessage = "Loading county list for " + text + ", please wait....";
    
    GCROUtils.performCommand(url, true, "countyList", currentViewId, params, responseHandler, waitMessage);
}

function countyresponse(xh) {
    if (xh != null && xh.readyState == 4 && xh.status == 200) {
        var xml = xh.responseXML;
        var resultTags = xml.getElementsByTagName("result");
        if (resultTags.length > 0) {
            var select_html = "";
            var counties = [];
            var fipsobs = new Object();
            for (var j = 0; j < resultTags.length; j++) {
                var resultTag = resultTags.item(j);
                var details = resultTag.getElementsByTagName("detail");
                var fullname = "";
                var cofips = "";

                $("cntySelect").disabled = false;
                $("cntySelect").options.length = 1;
                for (var i = 0; i < details.length; i++) {
                    var detail = details.item(i);
                    if ((detail.getAttribute("value").toString().trim() != null) && 
                        (detail.getAttribute("value").toString().trim() != "") && 
                        (detail.getAttribute("value").toString().trim() != undefined) && 
                        (detail.getAttribute("value").toString().trim() != "<Null>")) {
                        if (detail.getAttribute("key") == "FULLNAME") {
                            fullname = detail.getAttribute("value").toString();
                        } else {
                            if (detail.getAttribute("key") == "CNTY_CD") {
                                cofips = detail.getAttribute("value").toString();
                            }
                        }
                    }//if
                }//for i
                counties[j] = fullname;
                fipsobs[fullname] = cofips;
            }//for j
            counties.sort();
            for (k = 0; k < counties.length; k++) {
                var co = counties[k];
                var fps = fipsobs[counties[k]];
                $("cntySelect").options[k + 1] = new Option(co, fps);
            }
        }//if
    }//if
}

function zipzoom(mapid) {
    var map = GCROUtils.getMap();
    var url = EsriUtils.getServerUrl(map.formId);
    var zip = $("ziptext").value.trim();
    if (isInteger(zip) && zip.length == 5) {
        var params = new Array();
        params.push("ZIP=" + zip);
        
        var responseHandler = new ResponseHandler();
        responseHandler.getResponseProcessor = function () {
            return function(xmlHttp) {
                EsriControls.processPostBack(xmlHttp);
            };
        };
        
        var waitMessage = "Orienting map to zip code " + zip + ", please wait....";
        
        GCROUtils.performCommand(url, true, "zipCodeQuery", currentViewId, params, responseHandler, waitMessage);
    } else {
        alert("Invalid Entry: Please enter a five-digit zip code");
    }
}

function isInteger(s) {
    var i;
    if (isEmpty(s)) {
        if (isInteger.arguments.length == 1) {
            return 0;
        } else {
            return (isInteger.arguments[1] == true);
        }
    }
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isDigit(c)) {
            return false;
        }
    }
    return true;
}

function isEmpty(s) {
    return ((s == null) || (s.length == 0));
}

function isDigit(c) {
    return ((c >= "0") && (c <= "9"));
}

YAHOO.util.Event.addListener("stateSelect", "change", selChanged);
YAHOO.util.Event.addListener("cntySelect", "change", selChanged);
