var map = null;
var bounds = null;
var zoomLevel = 13;
var maxDealerLevel = 7;
var maxLevel = 4;
var addressLevel = 10;

function initMap(){
	
	Event.observe(document, 'mousemove', getcords);
	
	map = new GMap2(document.getElementById('map'));
	
	var blackIcon = new GIcon(G_DEFAULT_ICON);
	blackIcon.image = "http://sprunk-jansen.com/graphics/gmap_black_icon.png";
	//blackIcon.shadow = "http://sprunk-jansen.com/graphics/gmap_icon_shadow.png";
	//blackIcon.shadowSize = new GSize(30, 30);
	blackIcon.iconAnchor = new GPoint(0, 0);
	blackIcon.iconSize = new GSize(32, 37);
	blackMarkerOptions = { icon:blackIcon };
			
	if (!placeObj.latitude || !placeObj.longitude  || placeObj.title==null) {
		if (google.loader.ClientLocation){
			placeObj.title="Your Location";
			placeObj.latitude=google.loader.ClientLocation.latitude;
			placeObj.longitude=google.loader.ClientLocation.longitude;
		}else{
			placeObj.title="Sprunk-Jansen Head Office";
			placeObj.latitude=55.73269;
			placeObj.longitude=12.57603;
		}
	}
	
	map.setCenter(new GLatLng(placeObj.latitude, placeObj.longitude), startLevel);
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	
	getData();
	
	var moveListener = GEvent.addListener(map, 'moveend', function(){
		if(map.getZoom() < maxLevel){
			map.setZoom(maxLevel); // This is to prevent people zooming further out that maxLevel
			getData();
		} else {
			getData();
		}
	});
}

function getData(){
	
	$("progressbar").show();
	var mapBounds = map.getBounds();
	var southWest = mapBounds.getSouthWest();
	var northEast = mapBounds.getNorthEast();
	var html = '';
	map.clearOverlays();//Clean up
	
	var sWlng = southWest.lng();
	var nElng = northEast.lng();
	var sWlat = southWest.lat();
	var nElat = northEast.lat();
	
	if(map.getZoom() > maxDealerLevel){
		
		var params = {
			format: 'json',
			longitude_from: sWlng,
			longitude_to: nElng,
			latitude_from: sWlat,
			latitude_to: nElat,
			zoom_level: map.getZoom()
		};
		
		
		new Ajax.JSONRequest('http://www.sprunk-jansen.com/get_dealers.php', {
			parameters: params,
			callbackParamName: 'jsoncallback',
			onSuccess: function(transport) {
				
				var markers = transport.responseJSON;
				var length = markers.length;
				
				for (var i = 0; i < length; i++) {
					var m = markers[i];
					
					var point = new GLatLng(
						parseFloat(m.lat), 
						parseFloat(m.lng)
					);
					var name 	= m.name;
					var street 	= m.street;
					var zipcode = m.zipcode;
					var city 	= m.city;
					var state 	= m.state;
					var web 	= m.web;
					var phone 	= m.phone;
					var email 	= m.email;
					
					var html 	= createInfoBox(name,street,zipcode,city,state,web,phone,email);
					var marker 	= createMarker(point, html);
					
					map.addOverlay(marker);
					
				}
				
			}
		});
		$("zoommessage").hide();
	}else{
		$("zoommessage").show();
	}
	$("progressbar").hide();
}

function createMarker(point, html) {
	
	var marker = new GMarker(point, blackMarkerOptions);

	/*GEvent.addListener(marker, 'click', function(){
		document.location.href = url;
	});*/

	GEvent.addListener(marker, 'mouseover', function(){
	topPos = mouseY;
	leftPos = mouseX+10
		$('mapinfobox').setStyle({
			'top': topPos+'px',
			'left': leftPos+'px'
		});
		
		$('mapinfobox').update(html);
		
		$('mapinfobox').show();
	});
	GEvent.addListener(marker, 'mouseout', function(){
		$('mapinfobox').hide();
	});
	
	return marker;
}

function createInfoBox(name,street,zipcode,city,state,web,phone,email){
	var html = "<h3>" + name + "</h3><p>" + street + "<br />" + city + ", " + state + " " +zipcode + "</p>";
	if (web) html = html + "<p style=\"margin:0px;padding:0px;\"><strong>Web:</strong> " + web + "</p>";
	if (phone) html = html + "<p style=\"margin:0px;padding:0px;\"><strong>Phone:</strong> " + phone + "</p>";
	if (email) html = html + "<p style=\"margin:0px;padding:0px;\"><strong>Email:</strong> " + email + "</p>";
	
	return html;
}


function showAddress(address) {
	if (!address) return false;
	$("notfound").hide();
	$("progressbar").show();
	geocoder = new GClientGeocoder();
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					$("notfound").show();
					$("progressbar").hide();
				} else {
					map.clearOverlays();
					map.setCenter(point, addressLevel);
					map.panTo(point);
					getData();
				} // end if else
			} // end function
		);
	}// end if geocoder
}

function getcords(e){
	mouseX = Event.pointerX(e);
	mouseY = Event.pointerY(e);
	//for testing put the mouse cords in a div for testing purposes
	//$('debug').innerHTML = 'mouseX:' + mouseX + '-- mouseY:' + mouseY;
}

function KeyCheck(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	var evver = (evt.target) ? evt.target : ((evt.srcElement)?evt.srcElement : null );
	var keynumber = evt.keyCode;
	if(keynumber){
		return keynumber;
	}
}