
// initialize variables:
var mapscript_init = false;
var mapscript_mapregister = new Array;
var mapscript_locations = new Array;
var mapscript_geocoder;

var mapscript_baseIcon;

var mapscript_key_number = 0;

// funtion to register locations:
function mapscript_add_location(canvas_id, location_type, location_addr, location_icon, location_title){
	
	// create array base node:
	if(!mapscript_locations[canvas_id]) mapscript_locations[canvas_id] = new Array;
	
	// current key:
	mapscript_key_number ++;
	mapscript_key = 'p' + mapscript_key_number;
		
	// create current key if neccessary:
	if(!mapscript_locations[canvas_id]['points']) mapscript_locations[canvas_id]['points'] = new Array;
	if(!mapscript_locations[canvas_id]['points'][mapscript_key]) mapscript_locations[canvas_id]['points'][mapscript_key] = new Array;
	
	// counter for running geocode queries:
	if(!mapscript_locations[canvas_id]['gc_query']) mapscript_locations[canvas_id]['gc_query'] = new Array;
	
	// close flag for adding locations:
	if(!mapscript_locations[canvas_id]['closed']) mapscript_locations[canvas_id]['closed'] = false;
	
	
	var tmpArray = new Array;
	tmpArray['icon'] = location_icon;
	tmpArray['title'] = location_title;
	if(location_type != 'coord'){
		tmpArray['point'] = false;
		mapscript_locations[canvas_id]['gc_query'].push(new Array(mapscript_key, location_addr));
	} else {
		tmpArray['point'] = new GLatLng(location_addr.x, location_addr.y);
	}
	
	// sore the icon:
	tmpArray['icon'] = location_icon;
	
	// push the temp array:
	mapscript_locations[canvas_id]['points'][mapscript_key] = tmpArray;
	
	// check if we can render now:
	//mapscript_check_status(canvas_id);
	
}

// function to update the location afuter receiving a geocoderesult:
function mapscript_update_location(canvas_id, tmp_key, point){

	// geocode sucessful?
	if(point){
		
		// store point:
				
		mapscript_locations[canvas_id]['points'][tmp_key]['point'] = point;
				//alert("upate point");
	} else {
		
		// geocode failed. this is unwanted!
		alert("Geocode failed for address '"  + mapscript_locations[canvas_id]['points'][tmp_key]['original_address'] + "'");
		
	}
	
		
	// check if we can render now:
	mapscript_check_status(canvas_id);
	
}

// function to check for running geocode queries at some
// points. if mapscript_locations[canvas_id]['gc_query'] is == 0,
// all data is present.
function mapscript_check_status(canvas_id){
	
	if(mapscript_locations[canvas_id]['gc_query'].length > 0){
		
		mapscript_geocode_queue(canvas_id); 
		
		
	} else if(mapscript_locations[canvas_id]['gc_query'].length == 0 && mapscript_locations[canvas_id]['closed'] == true){
			
		if (GBrowserIsCompatible()) {
			
			var bounds = new GLatLngBounds();
			
			
			mapscript_mapregister[canvas_id] = new GMap2(document.getElementById(canvas_id));
			mapscript_mapregister[canvas_id].setMapType(G_NORMAL_MAP);
		  mapscript_mapregister[canvas_id].addControl(new GSmallMapControl());
		 
		 mapscript_mapregister[canvas_id].setCenter(new GLatLng(50.9265, 6.8444), 5);
		 
		 for(var i in mapscript_locations[canvas_id]['points']){	
		 	
		 	//alert(mapscript_locations[canvas_id]['points'][i]['point'].x);
		 	
		 			
				//alert("> need point " + mapscript_locations[canvas_id]['points'][i]['point']);
		
			var fflbIcon = new GIcon(mapscript_baseIcon);
			fflbIcon.image = "images/einsatzliste/map_icon_" + mapscript_locations[canvas_id]['points'][i]['icon'] + ".png";
		
			// Set up our GMarkerOptions object
			markerOptions = { icon:fflbIcon, title: mapscript_locations[canvas_id]['points'][i]['title'] };
		 	
			var marker = new GMarker(mapscript_locations[canvas_id]['points'][i]['point'], markerOptions);
			mapscript_mapregister[canvas_id].addOverlay(marker);
			bounds.extend(mapscript_locations[canvas_id]['points'][i]['point']);
	  
	  }
	  
			newzoom = mapscript_mapregister[canvas_id].getBoundsZoomLevel(bounds) - 1;
			newcenter = bounds.getCenter();
			mapscript_mapregister[canvas_id].setCenter (newcenter,newzoom);
		 
		  //mapscript_mapregister[canvas_id].setCenter(mapscript_locations[canvas_id]['points'][i]['point'], 13);

		  
		 }
		
	}
}

function mapscript_geocode_queue(canvas_id){
	
	
	var current_encode = mapscript_locations[canvas_id]['gc_query'].shift();
		
	mapscript_geocoder.getLatLng(current_encode[1], function(point){
			mapscript_update_location(canvas_id, current_encode[0], point);
		});
}

function mapscript_close(canvas_id){
	mapscript_locations[canvas_id]['closed'] = true;
	mapscript_check_status(canvas_id);
}


//$('head').append('');	

$(document).ready(function(){

	try{
		mapscript_geocoder = new GClientGeocoder();
		
		mapscript_baseIcon = new GIcon(G_DEFAULT_ICON);
		mapscript_baseIcon.shadow = null;
		mapscript_baseIcon.iconSize = new GSize(40, 40);
		mapscript_baseIcon.iconAnchor = new GPoint(15, 15);
		mapscript_baseIcon.infoWindowAnchor = new GPoint(15, 15);
	}catch(e){}
});
