var mainMarker;
var zoomD = [
		 {z:4,d:1377000},
		 {z:5,d:760000},
		 {z:6,d:354500},
		 {z:7,d:175450},
		 {z:8,d:81500},
		 {z:9,d:43430},
		 {z:10,d:21450},
		 {z:11,d:10580},
		 {z:12,d:5500},
		 {z:13,d:2800}
		 ];

zoomD.reverse();				
var ni = 0;

//<![CDATA[

function initialise(){
	// BUS MARKER ---
	ie_adjs = ($.browser.msie)?1:0;
	main_marker = new GIcon();
	main_marker.image 	= "images/map_icon.png";
	main_marker.iconSize 		= new GSize(29, 29);
	main_marker.iconAnchor		= new GPoint(9, 19)
	//-------------------
	
	// Secondary Marker ---
	others_marker = new GIcon(G_DEFAULT_ICON);
	//-------------------
	
	//BECAUSE OF THE EMPTY LAST ITEM IN loc_array we need to test and ajust
	if ($.browser.msie){
		//loc_array.pop();
	}

	localSearch = new GlocalSearch();
	loadMap();
	//if(!$.browser.msie)		
	  map.openInfoWindow(new GLatLng(loc_array[0].lat,loc_array[0].lng),m_info[0].info);
	}

function loadMap() {
  if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("gmap"));
		map.setCenter(new GLatLng(loc_array[0].lat, loc_array[0].lng),14);
		map.enableScrollWheelZoom();
		map.addControl(new GSmallMapControl());
		loadMainMarks();
		//$("#gmap").hide();
		}
	}

function loadMainMarks(){
	
	if((loc_array.length+ie_adjs) == ni){
		return;
		}
	
	var current_code 	=  codes[ni];
	var current_latlng  =  loc_array[ni];


	if(current_latlng != '0' && typeof(current_latlng) != "undefined"){
		marker = createMarker(new GLatLng(current_latlng.lat,current_latlng.lng), current_code, main_marker);	
		map.addOverlay(marker);
		ni++;
		setTimeout(loadMainMarks,10);
		return;
		}

	if(current_code === undefined) return;	
	localSearch.setSearchCompleteCallback(null, function() {
			if (localSearch.results[0]){		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;

				//console.log("{lng:'"+resultLng+"',lat:'"+resultLat+"'},"+"\n");
				marker = createMarker(new GLatLng(resultLat,resultLng), current_code, main_marker);	
				map.addOverlay(marker);
			}else{
				alert("Postcode not found!");
				}
			ni++;
			setTimeout(loadMainMarks,100);
			});	
	localSearch.execute(current_code + ", UK");	
	}
	
	
function createMarker(point, code, marker_icon) {
		if(marker_icon == undefined) 
			marker_icon = others_marker;
		
		var marker = new GMarker(point, marker_icon);
		if(typeof(code) == "undefined")
			marker.code = "";
		else
			marker.code = code;
		
		if(typeof(m_info[ni]) != "undefined")
			info = m_info[ni].info;
		else
			info = "";
		
		marker.info = info;
		GEvent.addListener(marker, "click", function() {
			map.openInfoWindow(point,marker.info);
			});
		
		return marker;
		}
	
function searchPost(){
	//$("#gmap").show();
	var post = document.getElementById("searchBox").value;
	
	localSearch.setSearchCompleteCallback(null, function() {
		if (localSearch.results[0]){		
			var resultLat = localSearch.results[0].lat;
			var resultLng = localSearch.results[0].lng;
			if(mainMarker) mainMarker.remove();

			if(typeof(on_find_location)!="undefined")
			   on_find_location(localSearch);

			mainMarker = new GMarker(new GLatLng(resultLat,resultLng)/*, {draggable: true}*/);
			
			GEvent.addListener(mainMarker, "dragstart", function() {
			  map.closeInfoWindow();
			});
	
			GEvent.addListener(mainMarker, "dragend", function() {
			  gotoMinDistance();
			});
			
			map.addOverlay(mainMarker);
			
			gotoMinDistance(resultLat, resultLng);
		}else{
			if(typeof(on_error)!="undefined")
			   on_error("Postcode '"+post+"' not found!");
			}
		});	
	localSearch.execute(post + ", UK");	
	}

var maximum_distance_km = 15;

function gotoMinDistance(cLat, cLng){
	map.panTo(mainMarker.getLatLng());
	var s = mainMarker.getLatLng(); // source
	var min_dist = 3000000;
	for(i=0;i<loc_array.length+ie_adjs;i++){
		current_latlng = loc_array[i];
		var d = new GLatLng(current_latlng.lat, current_latlng.lng);
		dist = s.distanceFrom(d);
		//console.log(dist);
		if( dist < min_dist){
			min_dist = dist;
			min_latlng = current_latlng;
			}
		}
	
	d = parseInt(min_dist / 1000); // get it in km
	//console.log("min distance: "+d+" km ["+min_latlng.lat+" , "+min_latlng.lng+"]");
	map.setZoom(10);
	map.panTo(mainMarker.getLatLng());		
	
	/*
	zoom = 13;
	for(i=0;i<zoomD.length;i++){
		//console.log(zoomD[i].d);
		if(d * 1000 > zoomD[i].d){
			//console.log("da, "+d+" > "+zoomD[i].d+ ", z:" + zoomD[i].z);
			zoom = zoomD[i].z;
			}
		}
	//console.log("Final zoom level:"+zoom);
	
	*/
	}
//]]>
/*
$(function(){
	$("#gmap").hide();
});*/


