JS: Rellena < Select > con un arreglo de objetos

Supongamos el siguiente arreglo con países y ciudades que pertenecen a esos países.

aCountries = [  
    {
        name:"Argentina",
        iso:"AR",
        cities:[{name:"Buenos Aires"},{name:"Córdoba"},{name:"Jujuy"},{name:"Mendoza"}]
    },
    {
        name:"Chile",
        iso:"CL",
        cities:[
            {name:"Antofagasta"},{name:"Concepción"},{name:"Copiapó"},{name:"La Serena"},
            {name:"Puerto Montt"},{name:"Santiago"}
        ]
    },
    {
        name:"Perú",
        iso:"PE",
        cities:[{name:"Lima"},{name:"Cuzco"},{name:"Arequipa"},{name:"Trujillo"}]
    }
];
El Html Nesesario.
  
<!DOCTYPE HTML>
<html>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <head>
    </head>
<body style="background-color:#fdf3ba">
    <form>
        <select id="pais" name="pais" onchange="setPais(this)" >
        </select>
        <select id="ciudad" name="ciudad" >
            <option value="" >Seleciones un País primero</option>
        </select>

    </form>
</body>
</html>

Luego el código javascript

oCiudadSelection = document.getElementById("ciudad");

function apendOption( oSelection, sValue, sCaption  ){

    // create the option object then set the value
    var oOption = document.createElement("option");
    oOption.setAttribute("value",sValue);
    // create the "caption" of teh object and then append it to the option object
    var oCaption = document.createTextNode( sCaption );
    oOption.appendChild(oCaption);
    oSelection.appendChild(oOption);
}

function setPais( oPaisSelected ){

    var sPais = oPaisSelected.value;

    for(var i= 0; i < aCountries.length ; i++){

        if(aCountries[i].name == sPais  ){
            // Reset the content of the given selection
            oCiudadSelection.innerHTML = "";
            for( var j=0 ; j < aCountries[i].cities.length ; j++ ){
                apendOption( oCiudadSelection, aCountries[i].cities[j].name, aCountries[i].cities[j].name );
            }
        }
    }
}

// Insert the countries into the country select
var oPaisSelect = document.getElementById('pais');  
for(var i= 0; i < aCountries.length ; i++){  
    apendOption( oPaisSelect, aCountries[i].name, aCountries[i].name );
}

El ejemplo funcionando