/*
gmap_v3_init.js, V 1.16, altm, 9.12.2011 
Author: ATLSoft, Bernd Altmeier
Author URI: http://www.atlsoft.de
Google Map V3 init Multimap support
released under GNU General Public License
*/
	var maps = new Array();
	var map_cookie = "mapinfo";  
	var expiers = 7;    
	var mapzoom;
	var mapTypesArr = new Array();	

	function set_cookie(map, check) {
        maptype = 0;
			for (var i=0;i<map.mapTypeControlOptions.mapTypeIds.length;i++) {
				if (map.getMapTypeId() == map.mapTypeControlOptions.mapTypeIds[i]) {
					maptype = i;
					if (mapzoom != map.getZoom()){
						mapzoom = map.getZoom();
					}
				}
			}
 		if(position_cookie){
			var cookietext = map_cookie+"="+map.getCenter().lat()+"|"+map.getCenter().lng()+"|"+map.getZoom()+"|"+maptype;
			if (expiers) {
				var exdate=new Date();
				exdate.setDate(exdate.getDate()+expiers);
				cookietext += ";expires="+exdate.toGMTString();
			}
			document.cookie=cookietext;      
		}
   }
	
	function post_init(map){
		google.maps.event.addListener(map, "maptypeid_changed", function(){
			var numSel = map.getMapTypeId();
			for (var i=0;i< map.mapTypeControlOptions.mapTypeIds.length;i++) {
				if(map.mapTypeControlOptions.mapTypeIds[i]==numSel){
					var chosen = mapTypesArr[i].copy;
					toggleCopy(map, chosen);
					break;
				}
			}
			
			set_cookie(map,true);
		})
		google.maps.event.addListener(map, "zoom_changed", function(){set_cookie(map,true);})
		google.maps.event.addListener(map, "center_changed", function(){set_cookie(map,false);})
 		if(position_cookie){
			var have_nocookie = true;
			if (document.cookie.length>0) {
				cookieStart = document.cookie.indexOf(map_cookie + "=");
				if (cookieStart!=-1) {
					cookieStart += map_cookie.length+1; 
					cookieEnd=document.cookie.indexOf(";",cookieStart);
					if (cookieEnd==-1) {
						cookieEnd=document.cookie.length;
					}
					cookietext = document.cookie.substring(cookieStart,cookieEnd);
					vals = cookietext.split("|");
					startPoint = new google.maps.LatLng(parseFloat(vals[0]), parseFloat(vals[1]));
					zoomlevel = parseInt(vals[2]);
					maptype = parseInt(vals[3]);
					have_nocookie = false;
					if(map.mapTypeControlOptions.mapTypeIds[maptype])
						map.setMapTypeId(map.mapTypeControlOptions.mapTypeIds[maptype]);
				} 
			}
			if (have_nocookie) {
				// entire world, center europe
				startPoint = new google.maps.LatLng(30.0, 10.0);
				zoomlevel = 1;
			}
			map.setCenter(startPoint);
			map.setZoom(zoomlevel);
		}
		maps[map.getDiv().id] = new Array(); // holding tracks, waypoints we can animate

		// google.maps.event.addListenerOnce(map, 'tilesloaded',
			// function() {
				// getWikiContent("de", "no", map);
		// });
	}
	
	function init_map(lat, lon , z , maptype, mapInst, access){
		var latlng = new google.maps.LatLng(lat, lon);
		var mTypes = new Array();
		var mapOptions;
		var mapTypeControlOptions;
		var have_maptype = false;
		if(mapTypesArr.length > 1){
			for (var i = 0; i < mapTypesArr.length; i++){
				if(mapTypesArr[i].name.toLowerCase() == maptype.toLowerCase())
					have_maptype = true;
				switch (mapTypesArr[i].name) {
				  case "ROADMAP":
					mTypes.push(google.maps.MapTypeId.ROADMAP);
					break;
				  case "SATELLITE":
					mTypes.push(google.maps.MapTypeId.SATELLITE);
					break;
				  case "HYBRID":
					mTypes.push(google.maps.MapTypeId.HYBRID);
					break;
				  case "TERRAIN":
					mTypes.push(google.maps.MapTypeId.TERRAIN);
					break;
				  default:
					mTypes.push(mapTypesArr[i].name);
					break;
				}		
			}
			mapTypeControlOptions = {mapTypeIds: mTypes, style:google.maps.MapTypeControlStyle.DROPDOWN_MENU};
			mapOptions = {
				zoom: z,
				center: latlng,
				zoomControl: true,
				mapTypeControl: true,
				zoomControlOptions: {
					style: google.maps.ZoomControlStyle.SMALL
				},
				mapTypeControlOptions:mapTypeControlOptions
			};
		}
		else{
			mapTypeControlOptions = {mapTypeIds: mTypes};
			mapOptions = {
				zoom: z,
				center: latlng,
				zoomControl: true,
				mapTypeControl: false,
				zoomControlOptions: {
					style: google.maps.ZoomControlStyle.SMALL
				},
				mapTypeControlOptions:mapTypeControlOptions
			};
		}
		var newmap = new google.maps.Map(document.getElementById('' + mapInst + ''));
		
		newmap.mapTypes.set("Relief", reliefMapType);
		// web map service
		for (var i = 0; i < mapTypesArr.length; i++){
			// open street map
			if(mapTypesArr[i].wms == 'osm')
				newmap.mapTypes.set(mapTypesArr[i].name,  OSMMapType(mapTypesArr[i].name, mapTypesArr[i].url, mapTypesArr[i].minzoom,  mapTypesArr[i].maxzoom));
			//check if WMS public
			if(mapTypesArr[i].wms == 'wms') 
				newmap.mapTypes.set(mapTypesArr[i].name, WebMapService(mapTypesArr[i].name, mapTypesArr[i].url, mapTypesArr[i].minzoom,  mapTypesArr[i].maxzoom));
			//check if WMS admin access only
			if(mapTypesArr[i].wms == 'wms_a' && access) 
				newmap.mapTypes.set(mapTypesArr[i].name, WebMapService(mapTypesArr[i].name, mapTypesArr[i].url, mapTypesArr[i].minzoom,  mapTypesArr[i].maxzoom));
		}
		newmap.setOptions(mapOptions);
		
		//preselect maptype
		if(!have_maptype && mTypes.length > 0)
			maptype=mTypes[0];
		if(maptype == 'TERRAIN' || maptype == 'ROADMAP' || maptype == 'HYBRID' || maptype == 'SATELLITE' ) 
		{
			newmap.setMapTypeId(maptype.toLowerCase());
		} else {
			newmap.setMapTypeId(maptype);
		}
		// map size button
		if (mapSizeButton){
			var sizeControlDiv = document.createElement('div');
			var sizeControl = new SizeControl(sizeControlDiv, newmap);
			sizeControlDiv.index = 0;
			newmap.controls[google.maps.ControlPosition.TOP_RIGHT].push(sizeControlDiv);
		}
		// seperate bbox for resize
		newmap["bbox"] = new google.maps.LatLngBounds();
		return newmap;
	}
	

