google.load( 'maps', '2', {other_params: 'sensor=false' } );
google.load( 'search', '1' );

var map = null;
var directions = null;
var markers = null;
var mkrClusterer = null;
var dealerData = null;
var dealerInfoUri = '/dealer/getDealerInfo.php';
var defCentre = null;
var defZoom = null;

$(document).ready(
	function()
	{
		if ( google.maps.BrowserIsCompatible() )
		{
			defCentre = new google.maps.LatLng( 54.67383096593114, -3.515625 );
			defZoom = 5;
			
			$.get( dealerInfoUri ,
				function( data )
				{
					eval( 'dealerData = ' + data );
					targetNode = $('#dealerList');
					for ( var i in dealerData.order )
					{
						var data = dealerData.dealers[dealerData.order[i]];
						targetNode.append( data.summary );
					}

					map = new google.maps.Map( document.getElementById( 'mapviewer' ) );
					map.setCenter( defCentre, defZoom );
					map.setUIToDefault();

					markers = Array();
					var markerIcon = new google.maps.Icon( G_DEFAULT_ICON, '/assets/static/dealer/dealer_pin.png' );
					markerIcon.iconSize = new google.maps.Size( 40, 26 );
					markerIcon.imageMap = [ 0, 0, 40, 0, 40, 20, 0, 20 ];
					markerIcon.iconAnchor = new google.maps.Point( 18, 24 );
					markerIcon.shadow = '';

					var infoWindowOptions = {
						maxWidth: 313
					};

					google.maps.Event.addListener( map, 'infowindowclose',
						function()
						{
							$('.sumPinDlr').attr( 'src', '/assets/static/dealer/dealer_inactive.png' );
						}
					);

					for ( var i in dealerData.order )
					{
						var dealer = dealerData.dealers[dealerData.order[i]];
						var latLng = new google.maps.LatLng( dealer.latitude, dealer.longitude );
						var marker = new google.maps.Marker( latLng, markerIcon );
						marker.dealerId = dealer.id;

						google.maps.Event.addListener( marker, 'click',
							function()
							{
								$('#sumPinDlr' + this.dealerId).attr( 'src', '/assets/static/dealer/dealer_active.png' );
							}
						);

						var tabs = Array(
							new google.maps.InfoWindowTab( 'Details', dealer.desc ),
							new google.maps.InfoWindowTab( 'Hours', dealer.opening_hours ),
							new google.maps.InfoWindowTab( 'Directions', dealer.directions )
						);
							
						marker.bindInfoWindowHtml( tabs, infoWindowOptions );
						markers.push( marker );
					}

					var mcOptions = {
						gridSize: 30,
						maxZoom: 15,
						styles: Array(

						{
							width: 72,
							height: 41,
							url: '/assets/static/dealer/group_pin.png'
						}
						)
					};

					mkrClusterer = new MarkerClusterer( map, markers, mcOptions );
					directions = new google.maps.Directions( map, document.getElementById( 'routeSteps' ) );
				}
			);
		}

		$('#dealerListHeader').click(
			function()
			{
				var elm = $('#dealerList');
				if ( 'none' == elm.css( 'display' ) )
				{
					elm.css( 'display', '' );
				}
				else
				{
					elm.css( 'display', 'none' );
				}
			}
		);

		$('#routeClear').click(
			function()
			{
				directions.clear();
				$('#routeStepsDiv').hide();
			}
		);
	}
	);

function initSearch()
{
	$('#loading').show();

	var st = $('#qs').val();
	var q = {};
	if ( '' != st )
	{
		q.q = st;
	}

	$.get(
		dealerInfoUri,
		q,
		function( data )
		{
			eval( 'dealerData = ' + data );
			targetNode = $('#dealerList');
			targetNode.empty();

			var bounds = new google.maps.LatLngBounds();

			for ( var i in dealerData.order )
			{
				var data = dealerData.dealers[dealerData.order[i]];
				targetNode.append( data.summary );
				
				if ( 5 > i )
				{
					bounds.extend( new google.maps.LatLng( data.latitude, data.longitude ) );
				}

				if ( 10 <= i && '' != st )
				{
					break;
				}
			}

			targetNode.show();

			if ( '' != st )
			{
				map.setCenter( bounds.getCenter(), map.getBoundsZoomLevel( bounds ) );
			}
			else
			{
				map.setCenter( defCentre, defZoom );
			}

			$('#loading').hide();
		}
		);
	return false;
}

function initDirections( form )
{
	var values = Array();
	inputNodes = form.getElementsByTagName( 'input' );
	for ( i in inputNodes )
	{
		var node = inputNodes[i];
		values[node.name] = node.value;
	}

	var localSearch = new google.search.LocalSearch();
	localSearch.setSearchCompleteCallback(null,
		function()
		{
			if ( localSearch.results[0] )
			{
				var result = localSearch.results[0];
				values['dir_from'] = result.lat + ',' + result.lng;
			}
			else
			{
				values['dir_from'] += ', uk';
			}

			map.closeInfoWindow();
			directions.load( 'from: ' + values['dir_from'] + ' to: ' + values['dir_to'] );
			$('#routePrint').attr( 'href', 'http://maps.google.co.uk/maps?saddr=' + values['dir_from'] + '&daddr=' + values['dir_to'] + '&pw=2' );
			$('#routeStepsDiv').show();
			$('#dealerList').hide();
		}
	);

	localSearch.execute( values['dir_from'], 'uk' );

	return false;
}

function selectDealer( elm )
{
	var matches = /(\d+)$/.exec( elm.getAttribute( 'href' ) );
	var id = matches[1];
	for ( i in markers )
	{
		if ( id == markers[i].dealerId )
		{
			var marker = markers[i];
			map.setCenter( marker.getLatLng(), 15 );
			google.maps.Event.trigger( marker, 'click' );
			return false;
		}
	}
	
	return false;
}

