
$(function(){
	
		$("#property_map").each(function(){
			var $self = $(this),
				lat = $self.attr('data-lat'),
				lng = $self.attr('data-lng');

			if(lat && lng){
				var myLatlng = new google.maps.LatLng(lat, lng);
				var property_map = new google.maps.Map(this, {
					zoom: 16,
					center: myLatlng,
					mapTypeId: google.maps.MapTypeId.ROADMAP
				});
				var property_map_marker = new google.maps.Marker({
												map: property_map, 
												position: myLatlng, 
												clickable: true
											});
			}
		});


		$("#gmap_search").each(function(){
			var $self = $(this);
			var myLatlng = new google.maps.LatLng(-32.9, 151.6);
			var myOptions = {
				zoom: 9,
				center: myLatlng,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			}
	
			map = new google.maps.Map(document.getElementById("gmap_search"), myOptions);
			mgr = new MarkerManager(map, {trackMarkers: false, maxZoom: 16, zoomOnClick: true});
	
			gMarkers = [];
	
			infoWindow = new google.maps.InfoWindow({
				content: "",
				size: new google.maps.Size(270,170)
			});
	
			// Loop over regions, suburbs and properties array and create google markers
			for (var level in markers) {
				gMarkers[level] = [];
				// loop over each sub element
				for (var i = 0; i < markers[level].length; i++) {
					var entryId = markers[level][i].entryId;
					var icon = markers[level][i].icon;
					var shadow = markers[level][i].shadow;
					var clickable = markers[level][i].clickable;
				
					if(level == 'regions'){
						icon_pos = false;
						if(markers[level][i].icon_pos !== false){
							icon_pos = new google.maps.Point(
										markers[level][i].icon_pos.x,
										markers[level][i].icon_pos.y
									);
						}
						icon = new google.maps.MarkerImage(
									markers[level][i].icon,
									false,
									false,
									icon_pos
								);
						shadow = new google.maps.MarkerImage(
									markers[level][i].shadow,
									false,
									false,
									new google.maps.Point(
										markers[level][i].shadow_pos.x,
										markers[level][i].shadow_pos.y
									)
								);
					
					}
				
					gMarkers[level][i] = new google.maps.Marker({
						"title": markers[level][i].name,
						"position": new google.maps.LatLng( parseFloat(markers[level][i].location['lat']),  parseFloat(markers[level][i].location['lng']) ),
						"clickable": clickable,
						"icon": icon,
						"shadow": shadow
			        });
					gMarkers[level][i].set('entryId', entryId);

					if(markers[level][i]['infoWindowContent'] != "undefined") {
				
						gMarkers[level][i].set('infoWindowContent', unescape(markers[level][i]['infoWindowContent']));

						google.maps.event.addListener(gMarkers[level][i], 'click', function() {
																	infoWindow.close();
																	infoWindow.setOptions({
																		content:this.infoWindowContent
																	});
																	infoWindow.open(map, this);
																});
				
					}
					if(markers[level][i]['zoom_in'] > 0){
						gMarkers[level][i].set('zoom_in', markers[level][i]['zoom_in']);
						google.maps.event.addListener(gMarkers[level][i], 'click', function() {
																	infoWindow.close();
																	map.panTo(this.position);
																	map.setZoom(this.zoom_in);
																});
					}
				}
			}

			google.maps.event.addListener(mgr, 'loaded', function() {
				mgr.addMarkers(gMarkers.regions, 0, 9);
				mgr.addMarkers(gMarkers.suburbs, 10, 11);
				mgr.addMarkers(gMarkers.properties, 12);
				mgr.refresh();
			});
	
		});

		$("#map_filter li a").click(function(){
			$self = $(this);
			var viewport = viewports[$self.attr('data-subregion')];
			var southWest = new google.maps.LatLng(viewport.minLat,viewport.minLng);
			var northEast = new google.maps.LatLng(viewport.maxLat,viewport.maxLng);
			var bounds = new google.maps.LatLngBounds(southWest,northEast);
			map.fitBounds(bounds);
			if(map.zoom > 14){
				map.setZoom(14);
			}
			return false;
		});


		$('#map_filter :checkbox').click(function(){
			$self = $(this);
			$li_parent = $self.parent("li:eq(0)");
			if($self.is(":checked")){
				$(":checkbox", $li_parent).attr("checked", "checked");
			}
			else
			{
				$(":checkbox", $li_parent).removeAttr("checked");
				$li_parent.parents("li:eq(0)").find(":checkbox:eq(0)").removeAttr("checked");
			}
		});

		$span = $("<span />")
			.text("+")
			.click(function(){
				var $parent = $(this).parent();
				if($parent.hasClass('expanded')){
					$(this).text('+');
					$parent
						.removeClass('expanded')
						.addClass('collapsed');
				} else {
					$(this).text('-');
					$parent
						.removeClass('collapsed')
						.addClass('expanded');
				}
			})
			.appendTo($('#map_filter li'));
	
});


