var map;
var markerOptions;
var mgr;
var newIcon;
var jsonObj;
var geocoder = null;
var batch = [];
var pointVisible = null;
var newPoint = null;

function initmaps() {
	if (GBrowserIsCompatible()) {
		
		map = new GMap2(document.getElementById('google_map'));
      
     	// required for searching
      	geocoder = new GClientGeocoder();      
      
      	if (_address == '') {	
      		map.setCenter(new GLatLng(53.46189, -3.91113), 6);
      		finalise();
      	} else {
      		latlong(_address);
      	}
	}		
}

function finalise() {	
	map.addControl(new GLargeMapControl());	
	mgr = new MarkerManager(map);
	     	
	jsonObj = eval('(' + latlngJson + ')');
	      	
	createIcon();
	markerOptions = { icon:newIcon };
	
    	
	if (batch.length == 0) {	
		setupPoints();
	}
			
	if (_address != '') {
		pointVisible = false;
		zoom = 15;
		
		
		while (!pointVisible) {		
			zoomLevel();
		}


	}
}

function createIcon() {
	newIcon = new GIcon(G_DEFAULT_ICON);
	newIcon.iconSize = new GSize(32, 32);
	newIcon.iconAnchor = new GPoint(16, 16);
	newIcon.infoWindowAnchor = new GPoint(16, 0);
	newIcon.image = domain + "/assets/images/map_icon.png";
}

function getPoints() {
	
	for (var key in jsonObj.DATA) {
	 	
	 	var data = jsonObj.DATA[key];
	 	
	 	var lat = data[0];
	 	var lng = data[1];
	 	
	 	var co = new GLatLng(lat,lng);

	 	var marker = new GMarker(co, markerOptions);
	 	marker.value = data[2];
	 	marker.windowDetails = data[3];
	 	
	 	GEvent.addListener(marker, "click", markerClick);	 	
	
		batch.push(marker);
	}

	return batch;
}

function zoomLevel() {
	var bounds = map.getBounds();
	
	for (var i = 0; i < batch.length; i++) {
		
		if (bounds.containsLatLng(batch[i].getPoint())) {
			pointVisible = true;
			break;			
		}
	}
	
	if (!pointVisible) {
		zoom = zoom - 1;
		
		map.setCenter(newPoint, zoom);
	}
}

function setupPoints() {
	mgr.addMarkers(getPoints(),1);	
	mgr.refresh();
}

function markerClick() {
	var windowDetails = this.windowDetails;
	var buildurl = domain + '/' + section + '/' + this.value + '/';
	
	windowDetails = windowDetails + '<br/><br/><a href="'+buildurl+'">Click for more information</a>';
	
	map.openInfoWindowHtml(this.getPoint(), windowDetails);
}

// form search
function latlong($input) {

	var ukInput = $input + ', uk';	
	
	if (geocoder) {
		geocoder.getLatLng(ukInput, function(point) {
			if (!point) {
				alert($input + ' not found');
			} else {
				adjustCenter(point);
			}
		});
	}

}


function adjustCenter($point) {
	
	if (_address != '') {
		newPoint = $point;
		map.setCenter(newPoint, 15);
		finalise();
	} else {
		map.setCenter($point, 10);
	}
}

function addressSearch($input) {
	latlong($input);
}




