/***********************************begin map settings*************************************************/
/*community settings*/
var COMMUNITY_LAT = 43.568382;
var COMMUNITY_LONG = -116.120458;
var COMMUNITY_IMAGE = "http://www.theterracesharrisranch.com/MasterPages/Default/Images/terracesharrisranch.png";
var COMMUNITY_ADDRESS = "4940 E Mill Station Dr, Ste 105";
var COMMUNITY_CITY = "Boise";
var COMMUNITY_STATE = "ID";
var COMMUNITY_ZIP = "83716";

/*map settings*/
var ZOOM_LEVEL = 12;
var ZOOM_MIN = 8;
var ZOOM_MAX = 16;
var MAP_RADIUS = 7500;
var MAP_CENTER_LAT = 43.601776;
var MAP_CENTER_LONG = -116.180477;

/*icon settings*/
var ICON_PATH = "http://www.theterracesharrisranch.com/MasterPages/Default/Images/mapicons/";
var COMMUNITY_ICON = ICON_PATH + "thricon.png";

var GENERAL_ICON = ICON_PATH + "flag.png";
var PUBLIC_SERVICES_ICON = ICON_PATH + "firstaid.png";
var ENTERTAINMENT_ICON = ICON_PATH + "cinema.png";
var TRANSPORTATION_ICON = ICON_PATH + "airport.png";
var SCHOOLS_ICON = ICON_PATH + "university.png";
var SHOPPING_DINING_ICON = ICON_PATH + "grocery.png";
var PARKS_REC_ICON = ICON_PATH + "forest.png";
var DEFAULT_ICON = ICON_PATH + "defaultplace.png";
/************************************end map settings**************************************************/

var map;
var service;
var infowindow;
var pvLatLong = new google.maps.LatLng(MAP_CENTER_LAT,MAP_CENTER_LONG);

var markersArray = [];
var placesArray = [];

var catVal;

function mapToolInitialize() {

	unCheck();
	
	var myOptions = {
		zoom: ZOOM_LEVEL,
		center: pvLatLong,
		scaleControl: true,
		minZoom: ZOOM_MIN,
		maxZoom: ZOOM_MAX,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
		
	map = new google.maps.Map(document.getElementById('map'), myOptions);
	
	addCommunity();

	infowindow = new google.maps.InfoWindow();
	service = new google.maps.places.PlacesService(map);
}



function callback(results, status) {
	if (status == google.maps.places.PlacesServiceStatus.OK) {
		for (var i = 0; i < results.length; i++) {
			var place = results[i];
			
			/*createMarker(results[i]);*/
			getPlaceDetails(results[i]);
			
			placesArray.push(results[i]);
		}
	}
}

function createMarker(place) {
	var iconPath = getIcon(catVal);

	var marker = new google.maps.Marker({
		map: map,
		position: place.geometry.location,
		icon: iconPath/*place.icon*/
	});		
	markersArray.push(marker);

	google.maps.event.addListener(marker, 'click', function() {
	
		var placetypes = '';
		for (i = 0; i < place.types.length; i++) {
			placetypes = placetypes + ' ' + place.types[i];
		}
	
		var content = getInfoWindowContent(place);
		infowindow.setContent(content);
		infowindow.open(map, this);
	});		
}

function addCommunity() {
	var image = COMMUNITY_ICON;
	var myLatLng = new google.maps.LatLng(COMMUNITY_LAT,COMMUNITY_LONG);
	var communityMarker = new google.maps.Marker({
		position: myLatLng,
		map: map,
		icon: image
	});
	
	google.maps.event.addListener(communityMarker, 'click', function() {				
		infowindow.setContent(
			'<div class="placedescription">' +
			'<img src="' + COMMUNITY_IMAGE + '" /><br />' +
			COMMUNITY_ADDRESS + '<br />' +
			COMMUNITY_CITY + ', ' + COMMUNITY_STATE + ' ' + COMMUNITY_ZIP +
			'</div>'
		);
		infowindow.open(map, this);
	});	
}	

function doCategorySearch(item) {
	if (item.checked) {
		catVal = item.value;
	
		var request = {
			location: pvLatLong,
			radius: MAP_RADIUS,
			types: [item.value]
		};
		service.search(request, callback);
	}

	if (!item.checked) {
		if (placesArray.length > 0 ) {
			for (i = 0; i < placesArray.length; i++) {
				for (j = 0; j < placesArray[i].types.length; j++) {
					if (placesArray[i].types[j] == item.value) {
						markersArray[i].setMap(null);
						break;
					}
				}
			}
		}
	}
}

function getPlaceDetails(place) {
	var request = {
		reference: place.reference
	};
	
	service.getDetails(request, detailsCallback);
}

function detailsCallback(place, status) {
	if (status == google.maps.places.PlacesServiceStatus.OK) {
		createMarker(place);
	}
}			

function getInfoWindowContent(place) {
	var content = '<div class="placedescription">';
	if(place.name) {
		if(place.url) { content += '<b><a target="_blank" href="' + place.url + '">' + place.name + '</a></b><br />'; }
		else { content += '<b>' + place.name + '</b><br />'; }
	}
	if(place.formatted_address) { content += place.formatted_address + '<br />'; }
	if(place.formatted_phone_number) { content+= '<i>' + place.formatted_phone_number + '</i>'; }
	content += '</div>';

	return content;
}

function getIcon(catVal) {
    switch (catVal) {
		/*GENERAL*/
        case "bank": case "gas_station": case "church": case "place_of_worship":
            return GENERAL_ICON;
            break;

		/*PUBLIC SERVICES*/
        case "fire_station": case "police": case "hospital": case "library": case "post_office":
            return PUBLIC_SERVICES_ICON;
            break;

		/*ENTERTAINMENT*/
        case "museum": case "art_gallery": case "movie_theater":
            return ENTERTAINMENT_ICON;
            break;

		/*TRANSPORTATION*/
        case "airport":
            return TRANSPORTATION_ICON;
            break;

		/*SCHOOLS*/
        case "university":
            return SCHOOLS_ICON;
            break;

		/*SHOPPING & DINING*/
        case "grocery_or_supermarket": case "restaurant": case "shopping_mall": case "pharmacy":
            return SHOPPING_DINING_ICON;
            break;

		/*PARKS & RECREATION*/
        case "park":
            return PARKS_REC_ICON;
            break;
			
		/*DEFAULT*/
		default:
			return DEFAULT_ICON;
    }
}

function unCheck(){
	var w = document.getElementById('controls').getElementsByTagName('input');
	for(var i = 0; i < w.length; i++){
		if(w[i].type='checkbox'){
			w[i].checked = false;
		}
	}
}

google.maps.event.addDomListener(window, 'load', mapToolInitialize);
