$(document).ready(function() {
	function location(address, latlng) {
		this.address = address;
		this.latlng = latlng;
	}
	
	var page = 1;
	var map = null;
	var work = new location('', new GLatLng(0, 0));
	var start = new location('', new GLatLng(0, 0));
	var end = new location('', null);
  
	if (GBrowserIsCompatible())
	{
		var geo = new GClientGeocoder();
	}
	
	function showAddress(where, baloon, initial)
	{
		if (geo)
		{
			geo.getLocations(where, function(points)
			{
				if (!points || points.Status.code != G_GEO_SUCCESS)
				{
					if (initial)
					{
						$('#locationheader').empty().append('<span>I couldn\'t find the address you\'ve provided. Consider being more or less specific and try again.</span>');
					}
					else
					{
						alert('Not found');
					}
					$('#loader').removeClass('loader');
				}
				else
				{
					if ((points.Placemark.length > 1) && (initial))
					{
						$('#locationheader').empty().append('<h2>Close matches to your search</h2>');
						var list = $('<ul></ul>').addClass('unmatched');
            
						for (var i = 0; i < points.Placemark.length; i++) {
							var p = points.Placemark[i].Point.coordinates;
							
							var item = $('<li><a href="#" name="'+p[1]+','+p[0]+'">'+points.Placemark[i].address+'</a></li>');
                            list.append(item);
							item.find('a').click(function() {
								split = $(this).attr('name').split(',');
								start.address = $(this).text();
								start.latlng = new GLatLng(split[0], split[1]);
								startLoad();
								
								$('#locationheader').empty().append('<h2>Dealers near '+ start.address +'</h2>');
								requestPage();
                                return false;
							});
						}
						$('#loader').removeClass('loader');
						$('#container').append(list);
                        $('#results').css('display', 'block');
					}
					else
					{
						var p = points.Placemark[0].Point.coordinates;
						work.address = points.Placemark[0].address;
						work.latlng = new GLatLng(p[1], p[0]);
						
						if (initial)
						{
							start = jQuery.extend({}, work);
							$('#locationheader').empty().append('<h2>Dealers near '+ start.address +'</h2>');
							requestPage();
						}
						else
						{
							end = jQuery.extend({}, work);
							var marker = new GMarker(end.latlng);
                            GEvent.addListener(marker, "click", function() {
                                marker.openInfoWindowHtml(baloon);
                            });
							map.setCenter(new GLatLng(end.latlng.lat()+0.0035, end.latlng.lng()+0.0027), 15);
                            map.clearOverlays();
							map.addOverlay(marker);
							marker.openInfoWindowHtml(baloon);
							
							if ($('#getdirections').length > 0) {
								$('#getdirections').click(function() {
									var url = '/dealers/directions.php?start='+start.address+'&end='+end.address;
									window.open(url,'_blank','height=550,width=900,toolbar=0,menubar=1,location=0,scrollbars=1,resizable=1');
                                    return false;
								});
							}
						}
					}
				}
			});
		}
	}
	
	function requestPage() {
		var ajaxurl = '/ajax/ajax_get_dealers.php?lat='+start.latlng.lat()+'&lng='+start.latlng.lng();
		$('#container').load(ajaxurl, null, function(text, status, response) {
            $('#results').css('display', 'block');
            $('#loader').removeClass('loader');
            if (GBrowserIsCompatible())
            {
                $('#map').css('display','block');
                
                $('.viewmap').each(function()
                {
                  $(this).click(function()
                  {
                    var id = $(this).attr('name');
                    $.scrollTo('#map', 800, {
                      onAfter: function() {
                        $.getJSON('/ajax/json_get_dealer.php', {'id': id}, function(result) {
                          showAddress(result.geo, result.baloon, false);
                          end.address = result.geo;
                        });
                      }
                    });
                    
                    return false;
                  });
                });
                if (map == null)
                {
                  map = new GMap2(document.getElementById('map'));
                  map.addControl(new GSmallMapControl());
                  map.addControl(new GScaleControl());
                  map.addControl(new GMapTypeControl());
                }
                map.setCenter(start.latlng, 10);
            }
        });
	}
	
	function startLoad() {
		$('#map').css('display','none');
        $('#results').css('display','none');
		$('#container').empty();
		$('#locationheader').empty();
		$('#loader').addClass('loader');
	}
	
	function submitForm() {
		var suburb = ($('#suburb').val()) ? $('#suburb').val() + ' ' : '';
		var postcode = ($('#postcode').val()) ? $('#postcode').val() + ' ' : '';
		
		page = 1;
		start.address = suburb+postcode+'australia';
		
		startLoad();
		
		if (map != null)
		{
			map.clearOverlays();
		}
		
		showAddress(start.address, '', true);
	}
	
	$('#search').submit(function() {
		submitForm();
        return false;
	});
});
