﻿var KIOSK_URL = "http://admin.chicagometers.com";
//var KIOSK_URL = "http://localhost/KioskManager.Web";

var DEFAULT_RADIUS = 0.3; // was 0.2
var DEFAULT_SEARCH_TYPE = "address";
var DEFAULT_ZOOM_LEVEL = 16; // was 17
var STARTING_ZOOM_LEVEL = 10;

var STARTING_CENTER_POINT = new GLatLng(41.882019, -87.627806);

var MAP_TARGET_ELEMENT = "map_canvas";
var SEARCHLIST_TARGET_ELEMENT = "div.searchlist";
var SEARCHTYPE_TARGET_ELEMENT = "fieldset#searchType input[name=searchType]";

var BUTTON = "input#btnSubmit";
var TEXTBOX = "input#txtQuery";

var ENABLE_LOGGING = true;
var ENABLE_DEBUG = false;
var ENABLE_CONDITIONS_AND_RESTRICTIONS = false;

var map;
var geocoder;
var polygon1;
var polygon2;
var polygon2;
var kiosks = null;
var searchList = new Array();
var searchType;

//Clears the map and draws the regional polygons
function drawOverlay() {
	map.clearOverlays();
	
	map.addOverlay(polygon1);
	map.addOverlay(polygon2);
	map.addOverlay(polygon3);
}

//Gets a specific marker based on the Kiosk's StatusId
function GetCustomMarker(point, kiosk) {
	var myIcon = new GIcon(G_DEFAULT_ICON);
	var fp = "http://gmaps-samples.googlecode.com/svn/trunk/markers";
	var fn = "/blue/blank.png";
	
	//fp = "http://www.chicagometers.com/images";
	//fn = "/bullet_green.png";

	if (kiosk.Zone != null && kiosk.Zone == 0)
	{
		myIcon.image = "../images/marker-meter.png";
		myIcon.iconSize = new GSize(12, 20);
		myIcon.shadow = "../images/marker-meter-shadow.png";
		myIcon.shadowSize = new GSize(21, 20);
		myIcon.iconAnchor = new GPoint(0, 0);
		myIcon.infoWindowAnchor = new GPoint(0, 0);
	}
	else
	{
		switch (kiosk.StatusId) {
			case 1:
				myIcon.image = fp + "/green/blank.png";
				break;
			case 2:
				myIcon.image = fp + "/red/blank.png";
				break;
			case 3:
				myIcon.image = fp + "/orange/blank.png";
				break;
			default:
				myIcon.image = fp + fn;
				break;
		}
	}

	var markerOptions = { icon: myIcon };
	return new GMarker(point, markerOptions);
}

function contains(a, b) {
	return a.indexOf(b) > 0;
}

function appendAddress(address) {
	return address += " chicago, il";
}

function setSearchType() {
	searchType = DEFAULT_SEARCH_TYPE;
	
	$(SEARCHTYPE_TARGET_ELEMENT).each(function () {
		if ($(this).attr('checked') == true) {
			searchType = $(this).attr('value');
		}
	});
	
	debugSearchType();
}

//clears the search box
function clearSearchBox() {
	$(TEXTBOX).val('');
}

//Logs the address and geocodeflag to the database
function logAddress(address, geocodeflag) {
	if (ENABLE_LOGGING)
	{
		var jsonUrl = KIOSK_URL + "/Kiosk/LogAddress/" + escape(address) + "?geocodeflag=" + geocodeflag + "&callback=?";
			$.getJSON(jsonUrl, function(response) {
		});
	}
}

//Logs each individual marker click to the database
function logMarkerClick(id) {
	if (ENABLE_LOGGING)
	{
		var jsonUrl = KIOSK_URL + "/Kiosk/LogKiosk/" + id + "?callback=?";
			$.getJSON(jsonUrl, function(response) {
		});
	}
}

function debugSearchType() {
	if (ENABLE_DEBUG) {
		console.log("searchType: " + searchType);
	}
}

function debugSearchList() {
	if (ENABLE_DEBUG) {
		console.log("searchList (" + searchList.length + "): " + searchList);
	}
}

//Gets the html for a kiosk's info bubble
function getBubbleHtml(kiosk) {
	var html = "<div class=\"meterBubble\">";
	
	if (kiosk.ProgramNumber != "" & kiosk.ProgramNumber != null) {
		html += "<div class=\"programNumber\">";
		html += "<p>";
		html += kiosk.ProgramNumber;
		html += "</p>";
		html += "</div>";
	}
	
	html += "<p><strong>Meter/Paybox Id</strong>: ";
	html += kiosk.Name + "<br />";
	html += "<strong>Address</strong>: ";
	html += kiosk.Address;

	if (kiosk.ParkingSpaces != "" && kiosk.ParkingSpaces != null) {
		html += "<br />";
		html += "<strong>Parking Spaces</strong>: ";
		html += kiosk.ParkingSpaces;
	}

	if (kiosk.DayRateHour != "" && kiosk.DayRateHour != null) {
		html += "<br />";
		html += "<strong>Daytime Rate</strong>: ";
		html += kiosk.DayRateHour;
	}

	if (kiosk.DayTimeLimit != "" && kiosk.DayTimeLimit != null) {
		html += "<br />";
		html += "<strong>Daytime Limit</strong>: ";
		html += kiosk.DayTimeLimit;
	}

	if (kiosk.NightRateHour != "" && kiosk.NightRateHour != null) {
		html += "<br />";
		html += "<strong>Nighttime Rate</strong>: ";
		html += kiosk.NightRateHour;
	}

	if (ENABLE_CONDITIONS_AND_RESTRICTIONS) {
		if (kiosk.Restrictions != "" && kiosk.Restrictions != null) {
			html += "<br />";
			html += "<strong>Restrictions</strong>: ";
			html += kiosk.Restrictions;
		}

		if (kiosk.Conditions != "" && kiosk.Conditions != null) {
			html += "<br />";
			html += "<strong>Conditions</strong>: ";
			html += kiosk.Conditions;
		}	
	}	
	
	html += "</p></div>";
	
	return html;
}

//Gets the html for the initial marker info bubble
function getStartingPointBubbleHtml(address) {
	var html = "<div class=\"meterBubble\">";
	html += "<p><strong>Address</strong>: ";
	html += address;
	html += "</p></div>";
	
	return html;
}

//Create the initial marker, bind click event
function createStartMarker(place) {
	var marker = new GMarker(place.point);
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(getStartingPointBubbleHtml(place.address));
	});	
	return marker;
}

//Create a generic marker, build its bubble, bind click event
function createMarker(point, kiosk) {
	var marker = GetCustomMarker(point, kiosk);
	marker.KioskName = kiosk.Name;

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(getBubbleHtml(kiosk));
		logMarkerClick(marker.KioskName);
	});
	return marker;
}

//Build the regional polygons
function initPolygons() {
	// CBD
	polygon1 = new GPolygon([
	new GLatLng(41.911124153431565, -87.64828205108642), // North and Halstead
	new GLatLng(41.911347710788114, -87.62566566467285),
	new GLatLng(41.90266033477953, -87.62412071228027),
	new GLatLng(41.90138267977894, -87.61957168579101),
	new GLatLng(41.89307729913167, -87.61390686035156),

	new GLatLng(41.89409955811395, -87.61141777038574),
	new GLatLng(41.89627180412692, -87.60995864868164),
	new GLatLng(41.89627180412692, -87.60257720947265),
	new GLatLng(41.893460648167355, -87.60231971740722),
	new GLatLng(41.89250227126418, -87.59871482849121),
	new GLatLng(41.89167166631636, -87.59854316711426),
	new GLatLng(41.88962705427562, -87.60970115661621),
	new GLatLng(41.88911589103985, -87.61364936828613),

	new GLatLng(41.88771017105127, -87.61390686035156),
	new GLatLng(41.88812550063099, -87.62068748474121),
	new GLatLng(41.888413034912084, -87.62519359588623),
	new GLatLng(41.8870711971946, -87.62781143188476),
	new GLatLng(41.8870711971946, -87.63545036315918),
	new GLatLng(41.88617662305848, -87.63725280761719),
	new GLatLng(41.87716628518635, -87.63716697692871),
	new GLatLng(41.875632484118256, -87.63540744781494),
	new GLatLng(41.87582421126483, -87.61712551116943),
	new GLatLng(41.86975257235425, -87.61699676513672),
	new GLatLng(41.86747942459981, -87.6188850402832),
	new GLatLng(41.86700416724044, -87.64686584472656),
	new GLatLng(41.911124153431565, -87.64828205108642)
	], "#000000", 0, 1, "#0000ff", 0.3);
	
	// Loop
	polygon2 = new GPolygon([
	new GLatLng(41.88771017105127, -87.61390686035156),  // Lake Shore and Wacker
	new GLatLng(41.884770838393805, -87.61356353759765),
	new GLatLng(41.8829177113481, -87.61347770690918),
	new GLatLng(41.88266210339971, -87.61734008789062),
	new GLatLng(41.87582421126483, -87.61712551116943),
	new GLatLng(41.875632484118256, -87.63540744781494),
	new GLatLng(41.87716628518635, -87.63716697692871),
	new GLatLng(41.88617662305848, -87.63725280761719),

	new GLatLng(41.8870711971946, -87.63545036315918),
	new GLatLng(41.8870711971946, -87.62781143188476),
	new GLatLng(41.888413034912084, -87.62519359588623),
	new GLatLng(41.88812550063099, -87.62068748474121),

	new GLatLng(41.88771017105127, -87.61390686035156)
	], "#000000", 0, 1, "#ff0000", 0.3);
	
	// Rest of Chicago
	polygon3 = new GPolygon([
	new GLatLng(41.911347710788114, -87.62566566467285), // North and LakeShore
	new GLatLng(41.911124153431565, -87.64828205108642),
	new GLatLng(41.86700416724044, -87.64686584472656),
	new GLatLng(41.86747942459981, -87.6188850402832), // CBD border          
	new GLatLng(41.867387672721804, -87.60686874389648),
	new GLatLng(41.85421933478601, -87.60686874389648),
	new GLatLng(41.84667508471573, -87.60875701904297),
	new GLatLng(41.79665595947719, -87.57614135742187),
	new GLatLng(41.75837967876276, -87.54215240478515),
	new GLatLng(41.724180549563606, -87.52447128295898),
	new GLatLng(41.643830708091556, -87.5251579284668), // 138th and State Border
	new GLatLng(41.64460038845076, -87.61721134185791),
	new GLatLng(41.65040476502312, -87.61725425720215),
	new GLatLng(41.65194395947941, -87.6225757598877),
	new GLatLng(41.65611242644554, -87.6225757598877),
	new GLatLng(41.6602806236414, -87.61940002441406),
	new GLatLng(41.66207607160609, -87.62412071228027),

	new GLatLng(41.657715611138904, -87.63111591339111),
	new GLatLng(41.657362913930385, -87.64665126800537),
	new GLatLng(41.66319820116276, -87.64695167541504),
	new GLatLng(41.663262322261076, -87.64145851135254),
	new GLatLng(41.670571708909755, -87.64154434204101),
	new GLatLng(41.6702190821151, -87.66119956970215),
	new GLatLng(41.67746357205474, -87.66132831573486), // 119th and Ashland
	new GLatLng(41.67717509025659, -87.68617630004883),
	new GLatLng(41.68445084727304, -87.68596172332763),
	new GLatLng(41.68435469725801, -87.69570350646972),
	new GLatLng(41.688072393206696, -87.69574642181396),
	new GLatLng(41.6879762486037, -87.69651889801025),
	new GLatLng(41.68739937796839, -87.69647598266601),
	new GLatLng(41.68739937796839, -87.69935131072998),
	new GLatLng(41.68621357208496, -87.69943714141845),
	new GLatLng(41.68624562118, -87.70059585571289),
	new GLatLng(41.68425854709929, -87.70055294036865), // 115th and Kedzie
	new GLatLng(41.68419444691368, -87.7053165435791),
	new GLatLng(41.68063678649003, -87.70518779754638),
	new GLatLng(41.680476526886316, -87.7113676071167),
	new GLatLng(41.684162396796914, -87.71149635314941),
	new GLatLng(41.68364959275756, -87.73947715759277),
	new GLatLng(41.690892570971236, -87.7397346496582),
	new GLatLng(41.6913412242166, -87.72042274475097),
	new GLatLng(41.713225293066415, -87.72110939025879), // 99th and Pulaski
	new GLatLng(41.71332139992666, -87.7113676071167),
	new GLatLng(41.70620910414321, -87.71119594573974),
	new GLatLng(41.70627318239254, -87.70141124725342),
	new GLatLng(41.70707415512075, -87.70141124725342),
	new GLatLng(41.707266387090684, -87.69149780273437),
	new GLatLng(41.71364175508968, -87.69179821014404),
	new GLatLng(41.71373786132725, -87.681884765625),
	new GLatLng(41.73551823400098, -87.68274307250976),
	new GLatLng(41.734621540876404, -87.7411937713623),
	new GLatLng(41.77483231767555, -87.74239540100097),
	new GLatLng(41.77380815203218, -87.80118942260742), // Harlem and 65th           
	new GLatLng(41.79931140883447, -87.80200481414795),
	new GLatLng(41.80030317495048, -87.75282382965088),
	new GLatLng(41.81405834766634, -87.75333881378174),
	new GLatLng(41.81789647342126, -87.74346828460693),
	new GLatLng(41.8220861647653, -87.7437686920166),
	new GLatLng(41.822182108684686, -87.73909091949463),
	new GLatLng(41.86598147470959, -87.7399492263794),
	new GLatLng(41.86540620297177, -87.77402400970459),
	new GLatLng(41.9092079154011, -87.77569770812988),  // Austin North
	new GLatLng(41.90879272291262, -87.80591011047363),
	new GLatLng(41.93794544569589, -87.80668258666992),
	new GLatLng(41.93740274561552, -87.85011291503906),
	new GLatLng(41.94800052332568, -87.85500526428222),
	new GLatLng(41.95068160955351, -87.84882545471191),
	new GLatLng(41.95566047052322, -87.84891128540039),
	new GLatLng(41.957064694324885, -87.85921096801758),
	new GLatLng(41.96204305667252, -87.85594940185547),
	new GLatLng(41.97187098904788, -87.85371780395508),
	new GLatLng(41.97219005234966, -87.86092758178711),
	new GLatLng(41.97531678812782, -87.86178588867187),
	new GLatLng(41.981059372324204, -87.85577774047851),
	new GLatLng(41.98488747409625, -87.85663604736328),
	new GLatLng(41.989225711202764, -87.85526275634765),

	new GLatLng(41.984377073824554, -87.82341957092285), // kennedy
	new GLatLng(41.9970082779582, -87.82135963439941),
	new GLatLng(42.011550195928606, -87.8221321105957),
	new GLatLng(42.01174151480007, -87.82084465026855),
	new GLatLng(42.01872425978175, -87.8206729888916), // ozark and howard          
	new GLatLng(42.019011205503666, -87.80685424804687),
	new GLatLng(42.00230243108343, -87.8067684173584),
	new GLatLng(42.00230243108343, -87.79200553894043),
	new GLatLng(42.004407212963585, -87.78179168701172),
	new GLatLng(42.01206037830709, -87.78874397277832),
	new GLatLng(42.01225169564405, -87.7793025970459),
	new GLatLng(42.01544023320683, -87.77925968170166),
	new GLatLng(42.015312694773414, -87.77715682983398),
	new GLatLng(42.01218792326233, -87.77333736419678),
	new GLatLng(42.00498123230131, -87.76930332183838),
	new GLatLng(42.008042581302654, -87.7674150466919),
	new GLatLng(42.00807446957951, -87.76162147521972),
	new GLatLng(42.0017283875775, -87.7619218826294),
	new GLatLng(41.99742289620748, -87.75325298309326),
	new GLatLng(41.99745478980706, -87.71033763885498),
	new GLatLng(42.01920250193227, -87.70982265472412),
	new GLatLng(42.01948944549617, -87.67317295074463),
	new GLatLng(42.022964548080125, -87.67699241638183),
	new GLatLng(42.02321959399964, -87.66531944274902), // northeast corner
	new GLatLng(42.00746858958598, -87.65647888183594),
	new GLatLng(41.99879430655651, -87.65459060668945),
	new GLatLng(41.985908262364525, -87.65029907226562),
	new GLatLng(41.97774149795238, -87.64686584472656),
	new GLatLng(41.96446827179282, -87.6327896118164),
	new GLatLng(41.94340411316341, -87.63381958007812),
	new GLatLng(41.91428582042076, -87.62214660644531),
	new GLatLng(41.911347710788114, -87.62566566467285),
	/*
	new GLatLng(41.978124338433204, -87.82917022705078),  // doughnut - counter clockwise
	new GLatLng(41.968616452078656, -87.83191680908203),
	new GLatLng(41.96989276090424, -87.81286239624023),
	new GLatLng(41.977422462460275, -87.8122615814209),
	new GLatLng(41.978124338433204, -87.82917022705078)
	*/	
	], "#000000", 0, 1, "#00ff00", 0.3);
}