/*
+----------------------------------------------------------------------+
| Copyright (c) 2010 Coldwell Banker Funkhouser Realtors               |
+----------------------------------------------------------------------+
| Authors: Matthew Kirkpatrick <matt@cbfunkhouser.com>                 |
+----------------------------------------------------------------------+
 Created:      May 18, 2010
 Last Updated: July 7, 2010
*/
toggleField = function (value, conditional_values, inputID) {

	for(var i = 0; i < conditional_values.length; i++) {
		if(value == conditional_values[i]) {
			$('#'+inputID).css('display', '');
			break;
		} else {
			$('#'+inputID).css('display', 'none');
		}
	}

};

formSubmit = function (section, formData) {
	$.ajax({
		type:		'POST',
		url:		'/files_form_processors/' + section + '.php',
		data:		formData,
		success:	function (msg) {
			$('.form_container').fadeOut();
			$('#submit').fadeOut();
			$('.form_feedback').html(msg);
			$('.form_feedback').css({'background-color':'#b5d9a3', 'font-size':'14px'});
			$('.form_feedback').fadeIn('slow');
		},
		error:	function (xhr) {
			var error_feedback	= xhr.statusText.split("|");
			var error_msg		= error_feedback[0];
			var error_field		= error_feedback[1];
			$('.form_feedback').html(error_msg);
			$('.required_field').removeClass('error');
			$(error_field).addClass('error').focus();
			$('.form_feedback').fadeIn('slow').delay(5000).fadeOut(5000);
			$('#submit').attr('disabled', '');
		}
	});
};

toggleDisplay = function (show, hide) {
	// hide all
	for (var i = 0; i < hide.length; i++) {
		if ($(hide[i])) { $(hide[i]).css('display', 'none'); }
	}
	// show all
	for (var i = 0; i < show.length; i++) {
		if ($(show[i])) { $(show[i]).css('display', ''); }
	}

};

confirmSubmit = function (msg) {
	var agree = confirm(msg);
	if (agree) { return true; }
		else { return false; }
};

var browserSupportFlag =  new Boolean();

var map;
var markers = [];
var infoWindow;
var locationSelect;
var myLocation;
var icon;

//http://labs.google.com/ridefinder/images/mm_20_red.png
var customIcons = {
	propertyDetailMarker: {
		icon:	'/files_images/maps/red-dot.png'
	},
	initLocation: {
		icon:	'/files_images/maps/green-dot.png'
	},
	JMUmarker: {
		icon:	'/files_images/maps/purple-dot.png'
	},
	houses: {
		icon:	'/files_images/maps/mm_20_red.png',
		shadow:	'/files_images/maps/mm_20_shadow.png'
	},
	subdivisions: {
		icon:	'/files_images/maps/mm_20_blue.png',
		shadow:	'/files_images/maps/mm_20_shadow.png'
	}
};


var JMUlocation = new google.maps.LatLng(38.437069, -78.867985);
//var EMUlocation = new google.maps.LatLng(38.48178, -78.893037);
//var BClocation = new google.maps.LatLng(38.384526, -78.982086);
//var BRCClocation = new google.maps.LatLng(38.461486, -78.879819);

// Show a map centered at (position.coords.latitude, position.coords.longitude).
render_map = function (map_canvas, zoom, lat, lng, title, markerXML) {

	function load() {
		map = new google.maps.Map(document.getElementById(map_canvas), {
			center: new google.maps.LatLng(40, -100),
			zoom: 4,
			mapTypeId: 'roadmap',
			mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU }
		});
		infoWindow = new google.maps.InfoWindow();
		
		locationSelect = document.getElementById("locationSelect");
		locationSelect.onchange = function() {
			var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
			if (markerNum != "none") {
				google.maps.event.trigger(markers[markerNum], 'click');
			}
		};
	}
	
	function searchLocations() {
		var address = document.getElementById("addressInput").value;
		var geocoder = new google.maps.Geocoder();
		geocoder.geocode({address: address}, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				searchLocationsNear(results[0].geometry.location);
			} else {
				alert(address + ' not found');
			}
		});
	}
	
	function clearLocations() {
		infoWindow.close();
		for (var i = 0; i < markers.length; i++) { markers[i].setMap(null); }
		markers.length = 0;
		
		locationSelect.innerHTML = "";
		var option = document.createElement("option");
		option.value = "none";
		option.innerHTML = "See all results:";
		locationSelect.appendChild(option);
	}
	
	function searchLocationsNear(center) {
		clearLocations();
		
		var radius = document.getElementById('radiusSelect').value;
		var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;

		downloadUrl(searchUrl, function(data) {
			var xml = parseXml(data);
			var markerNodes = xml.documentElement.getElementsByTagName("marker");
			var bounds = new google.maps.LatLngBounds();

			for (var i = 0; i < markerNodes.length; i++) {
				var name = markerNodes[i].getAttribute("name");
				var address = markerNodes[i].getAttribute("address");
				var distance = parseFloat(markerNodes[i].getAttribute("distance"));
				var latlng = new google.maps.LatLng(
					parseFloat(markerNodes[i].getAttribute("lat")),
					parseFloat(markerNodes[i].getAttribute("lng"))
				);
				
				createOption(name, distance, i);
				createMarker(latlng, name, address);
				bounds.extend(latlng);
			}
			map.fitBounds(bounds);

			locationSelect.style.visibility = "visible";
			locationSelect.onchange = function() {
				var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
				google.maps.event.trigger(markers[markerNum], 'click');
			};
		});
	}
	
	function createMarker(latlng, name, address, searchValue, icons) {
		
		icon = customIcons[icons] || {}
		
		if (name) {
			var markerTitle = name;
//			var subdivision = name.replace(/ /g, '_').toLowerCase();
			var html = '<img src="/files_images/properties/subdivisions/' + searchValue + '.png" width="250" width="145" border="0" style="cursor: pointer;" onclick="window.location=\'/property/location/?subdivision=' + searchValue + '\';" />';
		} else {
			var markerTitle = address;
			var html = '<strong>' + address + '</strong><br /><div style="cursor: pointer; width: 250px; height: 145px; background-color: #999999; background-image: url(\'/files_images/thumbnail.php?src=/files_images/properties/units/'+ searchValue +'/1.jpg&x=250&f=0\'); background-position: center;" onclick="detailProperty('+ searchValue +');"></div>';
		}

		var marker = new google.maps.Marker({
			map: map,
			icon: icon.icon,
			shadow: icon.shadow,
			position: latlng,
			title: markerTitle
		});

		google.maps.event.addListener(marker, 'click', function() {
			infoWindow.setContent(html);
			infoWindow.open(map, marker);
		});

		markers.push(marker);
	
	}
	
	function createOption(name, distance, num) {
		var option = document.createElement("option");
		option.value = num;
		option.innerHTML = name + "(" + distance.toFixed(1) + ")";
		locationSelect.appendChild(option);
	}
	
	function downloadUrl(url, callback) {
		var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
		
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				request.onreadystatechange = doNothing;
				callback(request.responseText, request.status);
			}
		};
		
		request.open('GET', url, true);
		request.send(null);
	}
	
	function parseXml(str) {
		if (window.ActiveXObject) {
			var doc = new ActiveXObject('Microsoft.XMLDOM');
			doc.loadXML(str);
			return doc;
		} else if (window.DOMParser) {
			return (new DOMParser).parseFromString(str, 'text/xml');
		}
	}
	
	function doNothing() {}

	function handleNoGeolocation(errorFlag) {
		if (errorFlag == true) { // Geolocation service failed
	//		alert("Geolocation service failed.");
			myLocation = JMUlocation;
		} else { // Geolocation service not supported
	//		alert("Your browser doesn't support geolocation. We've placed you at James Madison University.");
			myLocation = JMUlocation;
		}
		map.setCenter(myLocation);

		// label map position
		var marker = new google.maps.Marker({
			position: myLocation, 
			map: map, 
			title:"James Madison University, Harrisonburg, VA",
			icon: initialLocationImage
		});

	}


	if (!zoom) { var zoom = 14; }
	if ((!lat && !lng) || (!lat[0] && !lng[0])) { var lat = []; var lng = []; }

	if (lat.length == 1 && lng.length == 1) { // check for user supplied coordinates

		var latlng = new google.maps.LatLng(lat[0], lng[0]);
		var icon = customIcons['propertyDetailMarker'] || {}

		map = new google.maps.Map(
			document.getElementById(map_canvas),
			{
				center: latlng,
				zoom: zoom,
				mapTypeId: google.maps.MapTypeId.ROADMAP,
				mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
			}
		});

		// label map position
		marker = new google.maps.Marker({
			position: latlng, 
			map: map,
			title: title,
			icon: icon.icon
		});

	} else if ((lat.length > 1 && lng.length > 1) || (!lat[0] && !lng[0] && markerXML)) { // multiple coords or no coords

		var icon = customIcons['JMUmarker'] || {}
		
		// creat map: center on JMU
		map = new google.maps.Map(
			document.getElementById(map_canvas),
			{
				center: JMUlocation,
				zoom: zoom,
				mapTypeId: google.maps.MapTypeId.ROADMAP,
				mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
			}
		});
		
		// label map position
		marker = new google.maps.Marker({
			position: JMUlocation, 
			map: map, 
			title:"James Madison University, Harrisonburg, VA",
			icon: icon.icon
		});

		infoWindow = new google.maps.InfoWindow();

		downloadUrl(markerXML, function(data) {

			var xml = parseXml(data);
			
			var markers = xml.documentElement.getElementsByTagName('marker');

			for (var i = 0; i < markers.length; i++) {

				var name			= markers[i].getAttribute('name');
				var address			= markers[i].getAttribute('address');
				var searchValue		= markers[i].getAttribute('searchValue');
				var icon			= markers[i].getAttribute('icon');
				
				var latlng = new google.maps.LatLng(
					parseFloat(markers[i].getAttribute('lat')),
					parseFloat(markers[i].getAttribute('lng'))
				);
				
				createMarker(latlng, name, address, searchValue, icon);
			}

		});

		// GET CURRENT LOCATION
		if(navigator.geolocation) {
			browserSupportFlag = true;
			navigator.geolocation.getCurrentPosition (
				function (position) {
					myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
					map.setCenter(myLocation);
					// label map position
					var icon = customIcons['initLocation'] || {}
					var marker = new google.maps.Marker({
						position: myLocation, 
						map: map, 
						title:"You Are Here!",
						icon: icon.icon
					});
				},
				function() {
					handleNoGeolocation(browserSupportFlag);
				}
			);
		} else {
			browserSupportFlag = false;
			handleNoGeolocation(browserSupportFlag);
		}

	} // END: lat,lng submission check


	// JMU OVERLAY
	var JMUCoords = [
		new google.maps.LatLng(38.427404,-78.862009),
		new google.maps.LatLng(38.429925,-78.862138),
		new google.maps.LatLng(38.430093,-78.861108),
		new google.maps.LatLng(38.429017,-78.860078),
		new google.maps.LatLng(38.428244,-78.858919),
		new google.maps.LatLng(38.427807,-78.855786),
		new google.maps.LatLng(38.430698,-78.855786),
		new google.maps.LatLng(38.432043,-78.855915),
		new google.maps.LatLng(38.432682,-78.855915),
		new google.maps.LatLng(38.434598,-78.855357),
		new google.maps.LatLng(38.435741,-78.855014),
		new google.maps.LatLng(38.435304,-78.858147),
		new google.maps.LatLng(38.435237,-78.861966),
		new google.maps.LatLng(38.437086,-78.862438),
		new google.maps.LatLng(38.438262,-78.862996),
		new google.maps.LatLng(38.438262,-78.864155),
		new google.maps.LatLng(38.439338,-78.868661),
		new google.maps.LatLng(38.439035,-78.86982),
		new google.maps.LatLng(38.439136,-78.871365),
		new google.maps.LatLng(38.438598,-78.87188),
		new google.maps.LatLng(38.438699,-78.872523),
		new google.maps.LatLng(38.439035,-78.872738),
		new google.maps.LatLng(38.439506,-78.872523),
		new google.maps.LatLng(38.439741,-78.872266),
		new google.maps.LatLng(38.441018,-78.874154),
		new google.maps.LatLng(38.441455,-78.87454),
		new google.maps.LatLng(38.44243,-78.873425),
		new google.maps.LatLng(38.443136,-78.874283),
		new google.maps.LatLng(38.444749,-78.877244),
		new google.maps.LatLng(38.446901,-78.87557),
		new google.maps.LatLng(38.447808,-78.875742),
		new google.maps.LatLng(38.447942,-78.876772),
		new google.maps.LatLng(38.447774,-78.877244),
		new google.maps.LatLng(38.44801,-78.878703),
		new google.maps.LatLng(38.445489,-78.880076),
		new google.maps.LatLng(38.444111,-78.879132),
		new google.maps.LatLng(38.444548,-78.877716),
		new google.maps.LatLng(38.444144,-78.877201),
		new google.maps.LatLng(38.443607,-78.878016),
		new google.maps.LatLng(38.442833,-78.876429),
		new google.maps.LatLng(38.440313,-78.878617),
		new google.maps.LatLng(38.439203,-78.879261),
		new google.maps.LatLng(38.438363,-78.877759),
		new google.maps.LatLng(38.437691,-78.878059),
		new google.maps.LatLng(38.435943,-78.875699),
		new google.maps.LatLng(38.435775,-78.875356),
		new google.maps.LatLng(38.43322,-78.87763),
		new google.maps.LatLng(38.431236,-78.875999),
		new google.maps.LatLng(38.430261,-78.87557),
		new google.maps.LatLng(38.430261,-78.87394),
		new google.maps.LatLng(38.431707,-78.872137),
		new google.maps.LatLng(38.431472,-78.871493),
		new google.maps.LatLng(38.430396,-78.869433),
		new google.maps.LatLng(38.429152,-78.867631),
		new google.maps.LatLng(38.427505,-78.865786),
		new google.maps.LatLng(38.427404,-78.862009)
	];
	
	// Construct the polygon
	// Note that we don't specify an array or arrays, but instead just
	// a simple array of LatLngs in the paths property
	var JMUOverlay = new google.maps.Polygon({
		paths: JMUCoords,
		strokeColor: "#472a7e",
		strokeOpacity: 0.35,
		strokeWeight: 2,
		fillColor: "#c3a24d",
		fillOpacity: 0.35
	});
	
	JMUOverlay.setMap(map); // render on map

};
