var map, layer;
function update_attribution(data) {
	map.layers[0].attribution = data['attribution'];
	map.events.triggerEvent("changelayer")
}
function call_update_attribution(map) {
	var s = document.createElement("script");
	s.src="http://openaerialmap.hypercube.telascience.org/attribution/?bbox="+map.getExtent().toBBOX()+"&scale="+map.getScale()+"&callback=update_attribution";
	document.body.appendChild(s);
}
function map_init(location, zoom){
	OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
	map = new OpenLayers.Map( 'map', { 
		maxResolution: 1.40625/2,
		numZoomLevels: 22, 
		controls: [  
		new OpenLayers.Control.Scale(), 
		new OpenLayers.Control.PanZoomBar(), 
		new OpenLayers.Control.Permalink(), 
		new OpenLayers.Control.Navigation(), 
		new OpenLayers.Control.Attribution()
		]
	} 
);
layer = new OpenLayers.Layer.WMS( "OpenStreetMap", 
[
"http://oam1.hypercube.telascience.org/tiles/",
"http://oam2.hypercube.telascience.org/tiles/",
"http://oam3.hypercube.telascience.org/tiles/"
],
{layers: 'openaerialmap'}, {'wrapDateLine': true, buffer: 1} );
map.addLayer(layer);

layer = new OpenLayers.Layer.WMS( "OpenStreetMap", 
[
"http://osm1.hypercube.telascience.org/tiles/",
"http://osm2.hypercube.telascience.org/tiles/",
"http://osm3.hypercube.telascience.org/tiles/"
],
{layers: 'osm-4326-hybrid'},
{'attribution':'<a href="http://openstreetmap.org/">OpenStreetMap</a>', isBaseLayer: false, visibility: true, buffer:1});
map.addLayer(layer);

if (!map.getCenter()) {
	if (location) { 
		map.setCenter(location, zoom); 
	} else {
		map.zoomToMaxExtent();
	}  
}
var center = lonLatToMercator(new OpenLayers.LonLat(116.414909, 39.937645));
var zoom = 12;
map.setCenter(new OpenLayers.LonLat(116.414909, 39.937645), zoom);
map.addControl(new OpenLayers.Control.LayerSwitcher());

}

function mercatorToLonLat(merc) {
   var lon = (merc.lon / 20037508.34) * 180;
   var lat = (merc.lat / 20037508.34) * 180;

   lat = 180/Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);

   return new OpenLayers.LonLat(lon, lat);
}

function lonLatToMercator(ll) {
   var lon = ll.lon * 20037508.34 / 180;
   var lat = Math.log(Math.tan((90 + ll.lat) * Math.PI / 360)) / (Math.PI / 180);

   lat = lat * 20037508.34 / 180;

   return new OpenLayers.LonLat(lon, lat);
}

function scaleToZoom(scale) {
   return Math.log(360.0/(scale * 512.0)) / Math.log(2.0);
}
