var map;
var gmarkers = [];
var infowindow;
var sessionArray = 0;

/* Travel Map */
/* ---------------------------------------------------------------------------------------------------- */
function drawTravelMap() {
	
	/* Map */
	if ( jQuery('#mapSearch').length > 0 ) {

		/* Get Address */
		var address = "Ingliston, Edinburgh, EH28 8NB"; 
		if ( address ) {
			
			/* Start Geocoder */
			var geocoder = new google.maps.Geocoder();
		
			/* Query Google */
			geocoder.geocode( { 'address': address }, function( results, status) { 
				if ( status == google.maps.GeocoderStatus.OK ) {
				
					/* If Results Get Lat / Lng */
					var latlng = results[0].geometry.location;
				
					/* Map Options */
					var myOptions = {
						zoom: 15,
						center: latlng,
						disableDefaultUI: false,
						navigationControl: true,
						mapTypeId: google.maps.MapTypeId.ROADMAP
					};
				
					/* Draw Map */
					var map = new google.maps.Map( document.getElementById("mapSearch") , myOptions );
				
					/* Drop Marker */
					var marker = new google.maps.Marker({ position: latlng, map: map, title:"VisitScotland expo" });  
				}
			});
		}
	}
}

/* Center Map */
/* ---------------------------------------------------------------------------------------------------- */
function centerMap() {
	
	/* Create Bounds */
	var bounds = new google.maps.LatLngBounds();
	
	/* Watcher */
	var watcher = 0;

	/* Loop Through Markers */
	for ( var i = 0; i < gmarkers.length; i++ ) {
		if ( gmarkers[i].isVisible == 1 ) {
			bounds.extend( gmarkers[i].latLng );
			watcher = watcher + 1;
		}
	}
	
	/* Fit Map */
	if ( watcher > 0 ) {
		map.fitBounds( bounds );
		
		/* Minimum Zoom */
		if ( watcher == 1 ) {
			if ( map.getZoom() > 8 ) { 
    			map.setZoom( 8 ); 
  			}
		} else {
			if ( map.getZoom() > 11 ) { 
    			map.setZoom( 11 ); 
  			}
		}
	}

}

/* Show Markers */
/* ---------------------------------------------------------------------------------------------------- */
function showMarkers( category ) {
	
	/* Region Marker */
	sessionRegion = jQuery('#form_county').val();
	if ( !sessionRegion ) { sessionRegion = 0; }

	/* Loop Through Markers */
	for ( var i = 0; i < gmarkers.length; i++ ) {
		if ( gmarkers[i].mycategory == category ) {
			if ( ( sessionRegion == 0 ) || ( sessionRegion == gmarkers[i].region ) ) {
				gmarkers[i].setMap( map );
				gmarkers[i].isVisible = 1;
			} else {
				gmarkers[i].setMap( null );
				gmarkers[i].isVisible = 0;
			}
		}
	}
    
	/* Close Info Window */
	if ( infowindow ) { infowindow.close(); }
	
	/* Center Map */
	centerMap();
	
}

/* Hide Markers */
/* ---------------------------------------------------------------------------------------------------- */
function hideMarkers( category ) {
	
	/* Loop Through Markers */
	for ( var i = 0; i < gmarkers.length; i++ ) {
		if ( gmarkers[i].mycategory == category ) {
			gmarkers[i].setMap( null );
			gmarkers[i].isVisible = 0;
		}
	}
	
	/* Close Info Window */
	if ( infowindow ) { infowindow.close(); }
	
	/* Center Map */
	centerMap();

}

/* Update Menu Session */
/* ---------------------------------------------------------------------------------------------------- */
function updateSession() {
	
	sessionArray = 0;
	
	jQuery('.map_button').each(function(index) {
    	
		if ( sessionArray == 0 ) {
			if ( jQuery(this).hasClass( 'map_navigation_menu_selected' ) ) {
				sessionArray = jQuery(this).attr('id');
			}
		} else {
			if ( jQuery(this).hasClass( 'map_navigation_menu_selected' ) ) {
				sessionArray = sessionArray + "," + jQuery(this).attr('id');
			}
		}
	
	});
	
	jQuery.get("/includes/mapping/session.php", { sessionArray: sessionArray } );
	
}

/* Update Region Session */
/* ---------------------------------------------------------------------------------------------------- */
function updateRegionSession() {
	
	sessionRegion = jQuery('#form_county').val();
	if ( !sessionRegion ) { sessionRegion = 0; }
	
	jQuery.get("/includes/mapping/session_region.php", { sessionRegion: sessionRegion } );
	
}

/* Handle Click */
/* ---------------------------------------------------------------------------------------------------- */
function buttonClick( button ) {
	
	var thisButton = jQuery(button);
	
	if ( thisButton.hasClass( 'map_navigation_menu' ) == true ) {
		
		thisButton.removeClass( 'map_navigation_menu' );
		thisButton.addClass( 'map_navigation_menu_selected' );
		showMarkers( thisButton.attr('id') );
		
	} else {
		
		thisButton.removeClass( 'map_navigation_menu_selected' );
		thisButton.addClass( 'map_navigation_menu' );
		hideMarkers( thisButton.attr('id') );

	}
	
	/* Update Session */
	updateSession();
	
}

/* Handle Region Change */
/* ---------------------------------------------------------------------------------------------------- */
function regionChange() {
	
	/* Update Session */
	updateRegionSession();
	
	/* Show Categories */
	jQuery('.map_button').each(function(index) {
		if ( jQuery(this).hasClass('map_navigation_menu_selected') ) {
			showMarkers( jQuery(this).attr('id') );
		}
	});

}

/* Create Marker */
/* ---------------------------------------------------------------------------------------------------- */
function createMarker( point , name , html , category , letter , region ) {
		
	var icon = 'http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld='+letter+'|DFA520|000000'; 
	
	var shadowImage = "http://chart.apis.google.com/chart?chst=d_map_pin_shadow";
	var shadow = new google.maps.MarkerImage(shadowImage,new google.maps.Size(40, 37),new google.maps.Point(0,0),new google.maps.Point(13, 37));
	
	/* Generate Marker */ 
	var marker = new google.maps.Marker({
    	position: point,
		title: name,
		icon: icon,
   		shadow: shadow,
    	map: map
  	});
	
	/* Set Values */
	marker.mycategory = category; 
	marker.region = region;                                 
    marker.myname = name;
	marker.latLng = point;
	marker.isVisible = 0;
	marker.setMap( null );
  	
	/* Add Event */
	google.maps.event.addListener( marker , 'click' , function( event ) {
		if ( infowindow ) { infowindow.close(); }
      	infowindow = new google.maps.InfoWindow({ content: html });
      	infowindow.open( map , marker );
  	});
	
	/* Inset Into Array */
	gmarkers.push( marker );

}

/* Add Markers */
/* ---------------------------------------------------------------------------------------------------- */
function addMarkers() {
	
	/* Get Points */
	downloadUrl("/includes/mapping/data.php", function( data ) {
    	
		var markers = data.documentElement.getElementsByTagName("marker");
      	
		for ( var i = 0; i < markers.length; i++ ) {
			
			var point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
			var address = markers[i].getAttribute("address");
			var name = markers[i].getAttribute("name");
			var letter = markers[i].getAttribute("letter");
			var region = markers[i].getAttribute("region");
			var html = "<b class='googleMapTitle'>"+name+"<\/b><p class='googleMapAddress'>"+address+"<\/p>";
			var category = markers[i].getAttribute("category");
			
			/* Create the marker */
			createMarker( point , name , html , category , letter , region );
		
		}
		
		/* Show Categories */
		jQuery('.map_navigation').show();
		jQuery('#exhibitorMapRegions').show();
		jQuery('.map_button').each(function(index) {
			if ( jQuery(this).hasClass('map_navigation_menu_selected') ) {
				showMarkers( jQuery(this).attr('id') );
			}
		});
	
	});

}

/* Exhibitor Map */
/* ---------------------------------------------------------------------------------------------------- */
function drawExhibitorMap() {
	
	/* Map */
	if ( jQuery('#exhibitorMap').length > 0 ) {
		
		var mapNav = jQuery(".map_navigation");
		var mapNavHeight = mapNav.height() - 100;
		
		if ( jQuery('.side_navigation').length > 0 ) {
			var exhibitorNav = jQuery(".side_navigation");
			exhibitorNavHeight =  exhibitorNav.height();
			mapNavHeight = mapNavHeight + exhibitorNavHeight + 7;
		}
		
		/* Set Map Height */
		jQuery('#exhibitorMap').height( mapNavHeight );
		
		/* Get Address */
		var address = "Scotland"; 
		if ( address ) {
			
			/* Start Geocoder */
			var geocoder = new google.maps.Geocoder();
		
			/* Query Google */
			geocoder.geocode( { 'address': address}, function( results, status) { 
				if ( status == google.maps.GeocoderStatus.OK ) {
				
					/* If Results Get Lat / Lng */
					var latlng = results[0].geometry.location;
				
					/* Map Options */
					var myOptions = {
						zoom: 7,
						center: latlng,
						disableDefaultUI: false,
						navigationControl: true,
						mapTypeId: google.maps.MapTypeId.ROADMAP
					};
				
					/* Draw Map */
					map = new google.maps.Map( document.getElementById("exhibitorMap") , myOptions );
					
					/* Add Markers */
					addMarkers();
					
				}
			});
			
		}
	}
}

/* Runtime */
/* ---------------------------------------------------------------------------------------------------- */
jQuery(document).ready(function() {
	
	/* Travel Map */
	drawTravelMap();
	
	/* Exhibitor Map */
	drawExhibitorMap();
	
	jQuery('.map_button').click(function( event ) {
		event.preventDefault();
		buttonClick( this );
	});
	
	jQuery('#form_county').change(function() {
		regionChange();
	});
	
});
