/* Register functions */
function RegisterCountryChange(input) {
	var url = "/ajax/getstates.xml.php?c=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var states = xml.documentElement.getElementsByTagName('state');
		
		var e = document.forms['register'].elements;
		var state = e['state'];
		var city = e['city'];
		
		state.options.length = 1;
		
		if (states.length > 0) {
			for (var i=0; i < states.length; i++) {
				state.options[state.length] = new Option(states[i].getAttribute("name"), states[i].getAttribute("id"));
			}
		}
	});
}

/* Account Functions */
function AccountCountryChange(input) {
	var e = document.forms['account'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
	
	state.options.length = 1;
	city.style.display = 'inline-block';
	city.options[0].selected = true;
	city.options.length = 4;
	newcity.style.display = 'none';
	newcity.value = 'city';
	
	var url = "/ajax/getstates.xml.php?c=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var states = xml.documentElement.getElementsByTagName('state');
		
		if (states.length > 0) {
			for (var i=0; i < states.length; i++) {
				state.options[state.length] = new Option(states[i].getAttribute("name"), states[i].getAttribute("id"));
			}
		}
	});
}

function AccountStateChange(input) {
	var e = document.forms['account'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
	
	city.style.display = 'inline-block';
	city.options[0].selected = true;
	city.options.length = 4;
	newcity.style.display = 'none';
	newcity.value = 'city';
	
	var url = "/ajax/getcities.xml.php?s=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var cities = xml.documentElement.getElementsByTagName('city');
		
		if (cities.length > 0) {
			for (var i=0; i < cities.length; i++) {
				city.options[city.length] = new Option(cities[i].getAttribute("name"), cities[i].getAttribute("id"));
			}
		}
		else {
			city.style.display = 'none';
			newcity.style.display = 'inline-block';
			alert('Type the name of the city in to the box labeled "city".');
		}
	});
}

function AccountCityChange(input) {
	var e = document.forms['account'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
		
	if (input.value == -1) {
		city.style.display = 'none';
		newcity.style.display = 'inline-block';
		alert('Enter the name of your city in the box labeled "city".');
	}
}
/* Base functions */
function Highlight(input, text) {
	if (input.value == text)
		input.value = '';
	else
		input.select();
}
/* Report functions */
function CountryChange(input) {
	var e = document.forms['step1'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
	var street = e['street'];
	var glat = e['glat'];
	var glng = e['glng'];
	var submit = e['submitStep1'];
	var roe = document.getElementById('readonlyelements');
	
	state.options.length = 1;
	city.style.display = 'block';
	city.options.length = 4;
	newcity.style.display = 'none';
	newcity.value = 'city';
	street.value = 'street address (optional)';
	roe.style.display = 'none';
	submit.disabled = true;
	
	var url = "/ajax/getstates.xml.php?c=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var states = xml.documentElement.getElementsByTagName('state');
		
		if (states.length > 0) {
			for (var i=0; i < states.length; i++) {
				state.options[state.length] = new Option(states[i].getAttribute("name"), states[i].getAttribute("id"));
			}
		}
	});
}
function StateChange(input) {
	var e = document.forms['step1'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
	var street = e['street'];
	var glat = e['glat'];
	var glng = e['glng'];
	var submit = e['submitStep1'];
	var roe = document.getElementById('readonlyelements');
	
	city.style.display = 'block';
	city.options.length = 4;
	newcity.style.display = 'none';
	newcity.value = 'city';
	street.value = 'street address (optional)';
	roe.style.display = 'none';
	submit.disabled = true;
	
	var url = "/ajax/getcities.xml.php?s=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var cities = xml.documentElement.getElementsByTagName('city');
		
		if (cities.length > 0) {
			for (var i=0; i < cities.length; i++) {
				city.options[city.length] = new Option(cities[i].getAttribute("name"), cities[i].getAttribute("id"));
			}
		}
		else {
			city.style.display = 'none';
			newcity.style.display = 'block';
			alert('Type the name of the city in to the box labeled "city".');
		}
	});
}

function CityChange(input) {
	var e = document.forms['step1'].elements;
	var state = e['state'];
	var city = e['city'];
	var newcity = e['new_city'];
	var street = e['street'];
	var glat = e['glat'];
	var glng = e['glng'];
	var submit = e['submitStep1'];
	var roe = document.getElementById('readonlyelements');
	
	street.value = 'street address (optional)';
	roe.style.display = 'none';
	submit.disabled = true;
	
	if (input.value == -1) {
		city.style.display = 'none';
		newcity.style.display = 'block';
		alert('Enter the name of your city in the box labeled "city".');
	}
}

function NewCityChange() {
	var e = document.forms['step1'].elements;
	var street = e['street'];
	var glat = e['glat'];
	var glng = e['glng'];
	var submit = e['submitStep1'];
	var roe = document.getElementById('readonlyelements');
	
	street.value = 'street address (optional)';
	roe.style.display = 'none';
	submit.disabled = true;
}

function StreetChange() {
	var e = document.forms['step1'].elements;
	var glat = e['glat'];
	var glng = e['glng'];
	var submit = e['submitStep1'];
	var roe = document.getElementById('readonlyelements');
	
	roe.style.display = 'none';
	submit.disabled = true;
}

function MoveView() {
	if (CheckInput()) {
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			map.setMapType(G_NORMAL_MAP);

			GEvent.addListener(map,"click", function(overlay, latlng) { 
				if (latlng) {
					geocoder.getLocations(latlng, UpdateForm);
				}
			});
		}
		
		geocoder = new GClientGeocoder();
		
		var e = document.forms['step1'].elements;
		var state = e['state'];
		var city = e['city'];
		var newcity = e['new_city'];
		var street = e['street'];
		var glat = e['glat'];
		var glng = e['glng'];
		var submit = e['submitStep1'];
		var ci = e['country'].selectedIndex;
		var c = e['country'].options[ci].text;
		var si = e['state'].selectedIndex;
		var s = e['state'].options[si].text;
		var yi = e['city'].selectedIndex;
		var roe = document.getElementById('readonlyelements');
		var y = '';
		
		if (yi < 4) {
			y = e['new_city'].value;
		}
		else {
			y = e['city'].options[yi].text;
		}
				
		if (street.value != '' && street.value != 'street address (optional)') {
			address = street.value + ' ' + y + ' ' + s + ' ' + c;
		}
		else {
			address = y + ' ' + s + ' ' + c;
		}
		
		geocoder.getLatLng(address, function(point) {
			if (!point) {
				alert("Address : \"" + address + "\" not found.");
			} 
			else {
				map.clearOverlays();
				var marker = new GMarker(point);
				map.setCenter(point, 16);
				map.addOverlay(marker);
				
				if (street.value != '' && street.value != 'street address (optional)') {
					roe.style.display = 'block';
					submit.disabled = false;
					glat.value = point.lat();
					glng.value = point.lng();
				}
				
				alert('You can now click and drag the map window to find the exact location. You can also double left-click to zoom in closer, and double right-click to zoom out.');
			}
		});
	}
}

function UpdateForm(response) {
	if (CheckInput()) {
		map.clearOverlays();
		place = response.Placemark[0];
		point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
		marker = new GMarker(point);
		map.addOverlay(marker);
		
		var e = document.forms['step1'].elements;
		var glat = e.glat;
		var glng = e.glng;
		var street = e.street;
		var submit = e.submitStep1;
		var roe = document.getElementById('readonlyelements');
		
		roe.style.display = 'block';
		submit.disabled = false;
		
		street.value = '';
		glat.value = place.Point.coordinates[1];
		glng.value = place.Point.coordinates[0];
		street.value = place.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
	}
}

function CheckInput() {
	var success = false;
	var e = document.forms['step1'].elements;
	var ce = e['country'];
	var se = e['state'];
	var cte = e['city'];
	var nce = e['new_city'];
	
	if (ce.value < 1) {
		alert('Please select a country.');
	}
	else if (se.value < 1) {
		alert('Please select a state.');
	}
	else if (cte.value < 1 && (nce.value == '' || nce.value == "city")) {
		alert('Please select a city.');
	}
	else {
		success = true;
	}
	
	return success;
}

/* Search functions */
function SearchCountryChange(input) {
	var e = document.forms['filter'].elements;
	var state = e['state'];
	var city = e['city'];
	
	state.options.length = 1;
	city.options.length = 1;
	
	var url = "/ajax/getstates.xml.php?c=" + input.value;
	GDownloadUrl(url, function(data, responseCode) {
		var xml = GXml.parse(data);
		var states = xml.documentElement.getElementsByTagName('state');
		
		if (states.length > 0) {
			for (var i=0; i < states.length; i++) {
				state.options[state.length] = new Option(states[i].getAttribute("name"), states[i].getAttribute("id"));
			}
		}
	});
}

function SearchStateChange(input) {
	var e = document.forms['filter'].elements;
	var state = e['state'];
	var city = e['city'];
	
	city.options.length = 1;
	
	if (state.value != 0) {
		var url = "/ajax/getcities.xml.php?s=" + input.value;
		GDownloadUrl(url, function(data, responseCode) {
			var xml = GXml.parse(data);
			var cities = xml.documentElement.getElementsByTagName('city');
			
			if (cities.length > 0) {
				for (var i=0; i < cities.length; i++) {
					city.options[city.length] = new Option(cities[i].getAttribute("name") + " (" + cities[i].getAttribute("num") + ")", cities[i].getAttribute("id"));
				}
			}
			else {
				var answer = confirm('No reports for that state. Click "OK" to enter one.');
				if (answer){
					window.location = "http://www.roadguardian.com/step1/";
				}
			}
		});
	}
}

function RefreshMap() {
	document.getElementById("stview").style.display = 'none';
	
	var e = document.forms['filter'].elements;
	var country = e['country'];
	var state = e['state'];
	var city = e['city'];
	var type = e['type'];
	var z = 15;
	var q = 'type=' + type.value;
	
	if (city.value != 0) {
		q = q + '&city=' + city.value;
		z = 15;
	}
	else if (state.value != 0) {
		q = q + '&state=' + state.value;
		z = 6;
	}
	else if (country.value != 0) {
		q = q + '&country=' + country.value;
		z = 3;
	}
	
	var url = '/ajax/getreports.xml.php?' + q;

	GDownloadUrl(url, function(data, responseCode) {
		var colorIcon = new GIcon(G_DEFAULT_ICON);
		colorIcon.iconSize = new GSize(24, 24);
		
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		
		if (markers.length == 0) {
			alert('There are no incidents for the selected search criteria.');
		}
		else {
			if (GBrowserIsCompatible()) {
				map = new GMap2(document.getElementById("map"));
				map.addControl(new GSmallMapControl());
				map.addControl(new GMapTypeControl());
				map.setMapType(G_NORMAL_MAP);
				map.setCenter(new GLatLng(30.43,-84.29), z);
			}
			
			map.clearOverlays();
			for (var i = 0; i < markers.length; i++) {
				if (i == 0) {
					map.setCenter(new GLatLng(parseFloat(markers[i].getAttribute("glat")),parseFloat(markers[i].getAttribute("glng"))), z);
				}
				colorIcon.image = "/images/incident_marker_" + markers[i].getAttribute("typeID") + ".png";
				markerOptions = { icon:colorIcon };
				
				var point = new GLatLng(parseFloat(markers[i].getAttribute("glat")),parseFloat(markers[i].getAttribute("glng")));
				marker = new GMarker(point, markerOptions);
				map.addOverlay(marker);
				var infohtml = markers[i].getAttribute("infohtml");
				infohtml = infohtml.replace(/::br::/g, '<br />');
				infohtml = infohtml.replace(/::a::/g, '<a href="');
				infohtml = infohtml.replace(/::ea::/g, '">View article</a>');
				infohtml = "<div class=\"info\"><p>" + infohtml + "</p><p><a href=\"#stview\" onclick=\"ShowStreet(" + parseFloat(markers[i].getAttribute("glat")) + "," + parseFloat(markers[i].getAttribute("glng")) + ");\">Show Street View</a></p></div>";
				marker.bindInfoWindowHtml(infohtml);
			}
		}
	});	
}

/* street view */
function ShowStreet(glat, glng) {
	document.getElementById("stview").style.display = 'block';
	var point = new GLatLng(glat, glng);
	panoramaOptions = { latlng:point };
	var myPano = new GStreetviewPanorama(document.getElementById("stview"), panoramaOptions);
}
