$(document).ready(function(){
	
	var nearestId = -1;
	var nearestDistance = null;
	var nearestPoint = null;
	var index = 0;
	var addressPoint = null;
	var address = null;
	
	var markIndex = 0;
	var notFoundAmt = 0;
	
    var map = null;
    var geocoder = null;
	var mgr = null;
	
	var infoWindow = null;

	initialize();

    function initialize() {
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map_canvas"));
			map.setCenter(new GLatLng(66.3419, 24.1419), 4);
			var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
			map.addControl(new GLargeMapControl3D(),topRight);
			geocoder = new GClientGeocoder();
			mgr = new MarkerManager(map);
			markKiskat();
		}
    }

	function markKiskat() {
		if (markIndex<kiskat.length) {
			if (kiskat[markIndex][7]==null) {
				var addr = kiskat[markIndex][2]+', '+kiskat[markIndex][4]+' '+kiskat[markIndex][3]+', Suomi';
				new GClientGeocoder().getLatLng(
					addr,
					function(point) {
						markIt(point);
					}
				);
			} else {
				markIt(new GLatLng(kiskat[markIndex][7], kiskat[markIndex][8]));
			}
		} else {
			//alert(notFoundAmt+' kiskaa jäi löytämättä.');
		}
	}
	
	function markIt(point) {
		if (kiskat[markIndex][7]==null) {
			alert('Kiska '+kiskat[markIndex][0]+"\n\n,\n"+point.lat()+",\n"+point.lng());
		}
		
		kiskat[markIndex][7] = point;
		
		var info = '<div style="width: 380px;text-align: center;">';
		info += '<p style="font-family: \'Helvetica Neue\',\'Helvetica\',arial,sans-serif;font-size: 12px;line-height:20px;color:#171717;margin-bottom:20px;">';
		info += '<span style="font-size:18px;line-height:50px;font-family:georgia,serif;font-style:italic;color:#128AD6;">'+kiskat[markIndex][1]+'</span><br/>';
		info += kiskat[markIndex][2]+', '+kiskat[markIndex][4]+' '+kiskat[markIndex][3]+'<br/>';
		info += kiskat[markIndex][5]+', <a href="'+kiskat[markIndex][6]+'">'+kiskat[markIndex][6]+'</a></p>';
		
		if (point==null) {
			//alert('Tätä jäätelökioskia ei löydetty: '+kiskat[markIndex][0]);
			notFoundAmt++;
		} else {
			var marker = new GMarker(point);
			marker.bindInfoWindowHtml(info);
			mgr.addMarker(marker,0);
		}
		markIndex++;
		markKiskat();
	}

    function showAddress(addr) {
		address = addr;
		if (geocoder) {
			geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert("Haettua osoitetta (" + address + ")\nei löydetty.");
				} else {
					addressPoint = point;
					searchNearest();
				}
			});
		}
    }

	function searchNearest() {
		if (index<kiskat.length) {
			if (kiskat[index][7]!=null) {
				var currentDistance = addressPoint.distanceFrom(kiskat[index][7]);
				if (nearestDistance==null || nearestDistance>currentDistance) {
					nearestId = index;
					nearestDistance = currentDistance;
					nearestPoint = kiskat[index][7];
				}
			}
			index++;
			searchNearest();
		} else {
			showResult();
		}
	}
	
	function showResult() {
		if (nearestPoint!=null) {
			var thecenter = new GLatLng(nearestPoint.lat()+0.01, nearestPoint.lng()-0.015);
			map.setCenter(thecenter, 13);
			var marker = new GMarker(nearestPoint);
			map.addOverlay(marker);
			infowindow = '<div style="width: 380px;text-align: center;">';
			infowindow += '<p style="font-family: \'Helvetica Neue\',\'Helvetica\',arial,sans-serif;font-size: 12px;line-height:20px;color:#171717;margin-bottom:20px;">';
			infowindow += 'Tämä on lähin:<br/>';
			infowindow += '<span style="font-size:18px;line-height:50px;font-family:georgia,serif;font-style:italic;color:#128AD6;">'+kiskat[nearestId][1]+'</span><br/>';
			infowindow += kiskat[nearestId][2]+', '+kiskat[nearestId][4]+' '+kiskat[nearestId][3]+'<br/>';
			infowindow += kiskat[nearestId][5]+', <a href="'+kiskat[nearestId][6]+'">'+kiskat[nearestId][6]+'</a><br/>';
			infowindow += 'Se on '+parseInt(nearestDistance)+' metrin päässä annetusta osoitteesta.</p>';
			marker.openInfoWindowHtml(infowindow);
		} else {
			alert('Haku ei onnistunut. Sori.');
		}
		initValues();
	}
	
	function initValues() {
		nearestId = -1;
		nearestDistance = null;
		nearestPoint = null;
		index = 0;
		addressPoint = null;
		address = null;
	}

	$('#kiska-form').live('submit',function(e){
		e.preventDefault();
		showAddress($('#kiska-address').val());
		return false;
	});
});
