var map;	// the Google map object
var mapDIV;	// the map container
var default_lat = 37.441944;	// Palo Alto
var default_lng = -122.141944;
var default_zoom = 13;
var deftype = G_NORMAL_MAP;
var latInput;	// latitude input field
var lngInput;	// longitude input field
var zoomPD;	// zoom pulldown
var point_id = -1;
var my_points = [];
var coulomb_markerCtr = 0; //Global variable for counter - used to control number of markers allowed to be added - currently set to 1 marker
//var coulomb_maxLocation = '<?= $this->config->item('Coulomb_NoOfLocations');?>'; // This is maximum number of new charging locations a user can request.

function clearMarkers() {
	var i = 0;
	if (map) {
		map.clearOverlays();
	}
	my_points = [];
	point_id = 0;
}

function showXML() {
	var winRef = window.open("",
		"Markers",
		"left=20,top=20"
			+'width=300,height=300'
			+',menubar=0'
			+',toolbar=0'
			+',status=0'
			+',scrollbars=1'
			+',resizable=1'
		);
	var docRef = winRef.document.open("text/html", "replace");
	docRef.writeln('&lt?xml version="1.0" encoding="UTF-8"?>');
	winRef.document.writeln('<br>&lt;markers>');
	var i1 = 0;
	for (i1 = 0; i1 <= point_id; i1++) {
		var marker = my_points[i1];
		if (marker != null) {
			winRef.document.writeln('<br>&nbsp;&nbsp;&lt;marker lat="'
						+ marker.getPoint().lat().toFixed(6)
						+ '" lng="'
						+ marker.getPoint().lng().toFixed(6)
						+ '" title="'
						+ marker.my_title
						+ '" time="'
						+ marker.my_time
						+ '" />');
		}
	}
	winRef.document.writeln('<br>&lt;/markers>');

	winRef.document.close();
}

// foSelected, foPosInList, fosetSelectVal are from
// jt_utils.js - @version 12 Jun 2005 - @author  Joseph Oster, wingo.com

function foSelected(pulldown) {
	// return value of selected item
	var st = "";
	for (var i = 0; i < pulldown.options.length; i++) {
		if (pulldown.options[i].selected) {
			if (pulldown.options[i].value) {
				st = pulldown.options[i].value;
			}
			else {
				st = pulldown.options[i].text;
			}
			break;
		}
	}
	return st;
}

function foPosInList(pulldown, val) {
	// return position of 'val' in pulldown menu, -1 if not found
	if (val != "") {
		for (var i = 0; i < pulldown.options.length; i++) {
			var opVal = pulldown.options[i].value;
			if (opVal == "") opVal = pulldown.options[i].text;
			if (opVal == val) {
				return i;
				break;
			}
		}
	}
	return -1;
}

function foSetSelectVal(pulldown, val) {
	// set "SELECTED" for item in pulldown menu with 'value==val'
	var p = foPosInList(pulldown,val);
	if (p != -1) pulldown.options.selectedIndex = p;
}

function moveendHandler() {
	try {
		var centerPoint = map.getCenter();
		lngInput.value = centerPoint.lng().toFixed(6);
		latInput.value = centerPoint.lat().toFixed(6);
	}
	catch(e) {
		alert('Exception in moveendHandler: ' + e);
	}
}

function zoomendHandler(oldZoomLevel, newZoomLevel) {
	try {
		foSetSelectVal(zoomPD, newZoomLevel.toString());
	}
	catch(e) {
		alert('Exception in zoomendHandler: ' + e);
	}
}

function dragHandler(marker) {
	try {
	}
	catch(e) {
		alert('Exception in dragHandler: ' + e);
	}
}

// Click Handling
//
// When you click the map, we create a new marker at that point. When you
// click a marker, we remove it from the map.
var current_id = 0;
function clickHandler(overlay,point) {
	try {
		if (overlay) {
			if (typeof overlay.my_id != 'undefined') {
				my_points[overlay.my_id] = null;
				map.removeOverlay(overlay);
				coulomb_markerCtr = coulomb_markerCtr - 1;
			}
			
			// JIGER
			// These 2 lines are moved in the above if condition, which removes markers plotted by the user.
			// If we put outside the if condition, it will also remove the current stations marker from the map.
			
			// map.removeOverlay(overlay);
			// coulomb_markerCtr = coulomb_markerCtr - 1;
			
		}
		else if (point) {
						
				if(coulomb_markerCtr < 10){
					var marker = new GMarker(point, {title: "Click to remove, drag to move.", draggable: true});
					GEvent.addListener(marker, 'dragend', function() {dragHandler(marker)});
					point_id += 1;
					marker.my_id = point_id;
					current_id = point_id;
					marker.my_title = '#' + point_id;
					marker.my_time = '';
					my_points[point_id] = marker;
					map.addOverlay(marker);
					coulomb_markerCtr = coulomb_markerCtr + 1;
				}
				else {
					alert("You can submit up to 10 stations at a time. Please click \'Submit Location Request\'.");
			  }
					
			
		}
		else {
			alert('oops');
		}
	}
	catch(e) {
		alert('Exception in clickHandler: ' + e);
	}
}

function initMap(mapDIV) {
/*
	map = new GMap2(mapDIV);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(default_lat, default_lng), default_zoom);

	moveendHandler();					// for side effects
	zoomendHandler(0, default_zoom);	// for side effects

	GEvent.addListener(map, 'zoomend', zoomendHandler);

	GEvent.addListener(map, 'moveend', moveendHandler);
*/
	GEvent.addListener(map, 'click', clickHandler);
}

function initPage() {

	mapDIV = document.getElementById("map");
	latInput = document.getElementById("latCenter");
	lngInput = document.getElementById("lngCenter");
	zoomPD = document.getElementById("zoomLevel");
	//clearMarkers();
	initMap(mapDIV);
}

function plotLatLng(addr) {
	map.panTo(new GLatLng(parseFloat(latInput.value), parseFloat(lngInput.value)));
}

function zoomMap() {
	map.setZoom(parseInt(foSelected(zoomPD)));
}

function clearMarker()
{
	map.removeOverlay(my_points[0]);
}