﻿$(function() {
	init();
});

$(window).unload(function() {
	GUnload();
});

function init() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById(MAP_TARGET_ELEMENT));
		map.setCenter(STARTING_CENTER_POINT, STARTING_ZOOM_LEVEL);
		map.setUIToDefault();
		//map.addControl(new GSmallMapControl());
		geocoder = new GClientGeocoder();	
		
		//Events
		$(BUTTON).click(submit);		
		$(TEXTBOX).bind("keydown", function(e) {
			if (e.keyCode == 13) {
				submit();
				return false;	
			}
		});
		
		initPolygons();
		drawOverlay();
	}
}

function submit() {
	setSearchType();
	
	var query = $(TEXTBOX).val();

	if (query.length > 0) {		
		switch (searchType) {
			case "address":
				showLocation(appendAddress(query));
				break;
			case "paybox":
				addKioskToMap(query);
				break;
		}
	}
	else {
		alert("Sorry, you must enter something to search for");
	}
}

function showLocation(address) {
	geocoder.reset();
	geocoder.getLocations(address, addAddressToMap);
}

function addAddressToMap(response) {
	var address = $(TEXTBOX).val();
	
	logAddress(address, response.Status.code);
	
	if (!response || response.Status.code != 200) {
		alert("Sorry, we were unable to geocode that address");
	} else {
		drawOverlay();
		
		var place = response.Placemark[0];
		var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		
		place.query = address;
		place.point = point;
		place.checked = true;
		place.searchType = searchType;
		
		searchList.push(place);
		debugSearchList();
		
		parseSearchList(true);
	}
}

function addKioskToMap(kioskId) {	
	var jsonUrl = KIOSK_URL + "/Kiosk/FindKiosk/0?sName=" + kioskId + "&callback=?";
	
	$.getJSON(jsonUrl, function(response) {
		if (response.length == 1) {				
			var place = response[0];
			var point = new GLatLng(place.Latitude, place.Longitude);
			
			place.query = kioskId;
			place.point = point;
			place.checked = true;
			place.searchType = searchType;
			
			searchList.push(place);
			debugSearchList();
			parseSearchList(true);
		}
		else {
			alert("Sorry, we were unable to find that paybox");
		}		
	});
}

function parseSearchList(zoom) {
	drawOverlay();
	$(SEARCHLIST_TARGET_ELEMENT).empty();
	$(SEARCHLIST_TARGET_ELEMENT).append("<h3>Recent Searches</h3>");
	
	var lnglats = "";
	var kiosks = "";
	
	for (var x = (searchList.length - 1); x >= 0; x--)
	{		
		var html = "<p id=\"" + x + "\"";
		html += x == (searchList.length - 1) ? " class=\"selected\"" : "";
		html += "><input type=\"checkbox\"";
		html += " value=\"" + searchList[x].query + "\"";
		html += searchList[x].checked ? " checked=\"true\"" : "";
		html += " />&nbsp;";
		html += searchList[x].query;
		html += "</p>"
		
		$(SEARCHLIST_TARGET_ELEMENT).append(html);
		
		if (searchList[x].checked)
		{
			if (searchList[x].searchType == DEFAULT_SEARCH_TYPE) {
				lnglats += searchList[x].point.lng() + "," + searchList[x].point.lat() + ",";
			}
			else {
				kiosks += searchList[x].query + ",";
			}
			
			if (searchList[x].searchType == DEFAULT_SEARCH_TYPE) {
				map.addOverlay(createStartMarker(searchList[x]));
			}
			
			if (x == (searchList.length - 1) && zoom == true)
			{
				map.setCenter(searchList[x].point, DEFAULT_ZOOM_LEVEL);
			}
		}		
	}
	
	$(SEARCHLIST_TARGET_ELEMENT + " p").click(function() {
		map.setCenter(searchList[this.id].point, DEFAULT_ZOOM_LEVEL);
	});
	
	$(SEARCHLIST_TARGET_ELEMENT + " input[type='checkbox']").click(function() {
		var id = $(this).parent().attr("id");
		searchList[id].checked = this.checked ? true : false;
		parseSearchList(false);
	});
	
	lnglats = lnglats.substr(0, lnglats.length - 1);
	var jsonUrl = KIOSK_URL + "/Kiosk/RadiusArray/0?LngLats=" + lnglats + "&Miles=" + DEFAULT_RADIUS + "&callback=?";
	
	$.getJSON(jsonUrl, function(response) {
	if (response.length > 0) {
			for (var i = 0; i < response.length; i++) {
				point = new GLatLng(response[i].Latitude, response[i].Longitude);
				map.addOverlay(createMarker(point, response[i]));
			}
		}
	});
	
	kiosks = kiosks.substr(0, kiosks.length - 1);
	jsonUrl = KIOSK_URL + "/Kiosk/FindKioskArray/0?sNames=" + kiosks + "&callback=?";
	
	$.getJSON(jsonUrl, function(response) {
	if (response.length > 0) {
			for (var i = 0; i < response.length; i++) {
				point = new GLatLng(response[i].Latitude, response[i].Longitude);
				map.addOverlay(createMarker(point, response[i]));
			}
		}
	});
	
	clearSearchBox();
}