// opens the shelter picker in a new window.
// the shelter picker will prompt for a state first
// shelter state, id, and name fields can be hidden or visible.
function openStateShelterPicker (baseUrl, shelterId, shelterName) {
    var eShelterId   = document.getElementById(shelterId);
    var eShelterName = document.getElementById(shelterName);

    if (eShelterId && eShelterName) {
        // build the shelter picker URL
        var url = baseUrl + "shelter-picker/index.html?";
        if (shelterId.value) {
            url += 'shelterId_value=' + eShelterId.value + '&amp;';
        }
        if (shelterId.value) {
            url += 'shelterName_value=' + eShelterName.value + '&amp;';
        }
        url += 'shelterId=' + shelterId + '&amp;shelterName=' + shelterName;

        // open a new little window with the shelter picker URL
        var win = window.open(url, 'shelterPicker', 'top=150,left=150,width=550,height=350,scrollbars=yes');
        if (! win.opener) win.opener = self;
        win.focus();
        return true;
    }
    else {
        // return an error so we know it didn't work.
        alert ("This form isn't set up for the shelter picker.");
        return false;
    }
}

// puts the chosen shelter picker information back in the original window
// called by the shelter picker window
function saveShelterPicker (shelterPicker, oShelterId, oShelterName) {
    var eShelterId     = opener.document.getElementById(oShelterId);
    var eShelterName   = opener.document.getElementById(oShelterName);
    var eShelterPicker = document.getElementById(shelterPicker);

    // put the "picked" shelter info into the opener's form fields
    eShelterName.value  = eShelterPicker.options[eShelterPicker.selectedIndex].innerHTML;
    eShelterId.value    = eShelterPicker.options[eShelterPicker.selectedIndex].value;
        
    window.close();
}

function updateShelterList (stateList, shelterList, shelterLabel, stateName, progress) {
    var eShelterList  = document.getElementById(shelterList);
    var eShelterLabel = document.getElementById(shelterLabel);
    var eProgress     = document.getElementById(progress);
    var eStateList    = document.getElementById(stateList);
    var state         = eStateList.options[eStateList.selectedIndex].value;

    // start a progress indicator
    eProgress.style.visibility = 'visible';
    
    // start the HTTP request
    var request = createXMLHttpRequest();
    request.open( "GET", "/common/ajax/shelter-list.cgi?state=" + state , true );
    request.onreadystatechange = function() {
        if (request.readyState != 4)  { return; }
        var shelters = request.responseText;
        var shelterObj = eval( '(' + shelters + ')' );
        shelters = shelterObj.shelters;

        // check to be sure the request returned shelters
        if (shelters != 0) {

            // empty out shelter select
            while (eShelterList.length > 0) {
                eShelterList.remove(0);
            }
            
            // load in shelters from the selected state
            eShelterList[0] = new Option('-- Select a Shelter --', '');
            for (var i = 0; i < shelters.length; i++) {
                eShelterList[ i + 1 ] = new Option(shelters[i].name, shelters[i].id);
            }
        }
        else {
            alert(error);
        }
        
        // update the online display, remove progress indicator
        document.getElementById(stateName).innerHTML = 
            eStateList.options[eStateList.selectedIndex].innerHTML;
        eShelterList.style.visibility  = 'visible';
        eShelterList.style.position    = 'static';
        eShelterLabel.style.visibility = 'visible';
        eShelterLabel.style.position   = 'static';
        eProgress.style.visibility     = 'hidden';
    }
    
    request.send(null);
}

function createXMLHttpRequest() {
   try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch (e) {}
   try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
   try { return new XMLHttpRequest();                   } catch(e) {}
   return null;
}
