Aaron,How about letting the basemap widget handle everything - here's an example that adds the layers you want to the widget and creates a button for each basemap. Clicking the button will display the associated basemap.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9">
<!--The viewport meta tag is used to improve the presentation and behavior of the samples
on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Display Multiple ArcGIS Online Services</title>
<link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/js/dojo/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/js/esri/css/esri.css">
<style>
html,body,#map{
padding:0;
margin:0;
height:100%;
width:100%;
}
</style>
<script>var dojoConfig = { parseOnLoad: true };</script>
<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.4/"></script>
<script>
dojo.require("esri.map");
dojo.require("dijit.form.Button");
dojo.require("esri.dijit.BasemapGallery");
dojo.require("dijit.form.Button");
dojo.require("dijit.Menu");
var map;
var basemapGallery;
function init() {
map = new esri.Map("map", {
center: [-31.036, 42.747],
zoom: 3
});
//define the layers that will be used for each basemap
var streetLayer = new esri.dijit.BasemapLayer({
url: "http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"
});
var topoLayer = new esri.dijit.BasemapLayer({
url: "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"
});
var transportLayer = new esri.dijit.BasemapLayer({ //hybrid
url: "http://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer"
});
var satelliteLayer = new esri.dijit.BasemapLayer({ //hybrid
url: "http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
});
//Create the basemaps
var streets = new esri.dijit.Basemap({
layers: [streetLayer],
title: "Streets"
});
var topo = new esri.dijit.Basemap({
layers: [topoLayer],
title: "Topo"
});
var hybrid = new esri.dijit.Basemap({
layers: [transportLayer, satelliteLayer],
title: "Hybrid"
});
var basemaps = [streets,topo,hybrid];
//build the basemap gallery
basemapGallery = new esri.dijit.BasemapGallery({
showArcGISBasemaps: false,
basemaps: basemaps,
map: map
});
//add a basemap button for each of the above maps
dojo.forEach(basemapGallery.basemaps, function(basemap) {
dojo.create("input", {
type: "button",
value: basemap.title,
onclick: dojo.hitch(this, function(){
this.basemapGallery.select(basemap.id);
})
},"basemaps_bar");
});
}
dojo.ready(init);
</script>
</head>
<body class="claro">
<div id="map">
<div id="basemaps_bar" style="position:absolute; right:50px; top:10px; z-Index:99;">
</div>
</div>
</body>
</html>