$(document).ready(function(){
	
  var map;
  var geocoder;
	
	var location;
	var dataString;
	
	$("#contact_form").submit(function(){
		dataString = $("#contact_form").serialize();
		
		console.log(dataString);
		
		$.ajax({
        type: "POST",
        url: "/bin/contact.php",
        data: dataString,
        dataType: "json",
        success: function(data) {
					if(data.form_response == "true") {
						$("#contact_form").html("<h2>Thank you for submitting your comments.</h2>We will get back to you with a response as soon as possible.");
					}
					/*
            if(data.email_check == "invalid"){
                $("#message_ajax").html("<div class='errorMessage'>Sorry " + data.name + ", " + data.email + " is NOT a valid e-mail address. Try again.</div>");
            } else {
                $("#message_ajax").html("<div class='successMessage'>" + data.email + " is a valid e-mail address. Thank you, " + data.name + ".</div>");
            }
					*/
        }
		});
		
		return false;	
	});
	
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(40, -96), 4);
	}
		
	$('.online a.cat-title span').click(function() {
		$('#online_list').fadeIn();
	});
	
	$("#locate_search").validate({
		rules: {
			search_field: {
				required: true
			}
		},
		
		errorPlacement: function(error, element) {
			
		},
		
		submitHandler: function(form) {
			locations();
		}
	
	});
	
	$('#country_list').change(function() {
		
		location = $('select#country_list').val();
		
		dataString = 'location='+ location;
		geocoder.getLatLng(location, function(latlng) {
			if (!latlng) alert(location + ' not found');
			else searchLocationsNear(latlng, location);
		});
	});
	
	function locations() {
	
		location = $("input#search_field").val();
		dataString = 'location='+ location;
		
		geocoder.getLatLng(location, function(latlng) {
			if (!latlng) alert(address + ' not found');
			else searchLocationsNear(latlng, 'us');
		});
	     
	}
	
	function searchLocationsNear(center, country) {
		var searchUrl = '../bin/retailers.php?lat=' + center.lat() + '&lng=' + center.lng();;
		
		if(country == 'us') searchUrl += '&radius=20';
		else if (country != 'us') searchUrl += '&type=intl&country='+country;
		
		GDownloadUrl(searchUrl, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			map.clearOverlays();
			
			if(country == 'us') var sidebar = document.getElementById('search_results');
			else var sidebar = document.getElementById('search_intl_results');
			sidebar.innerHTML = '';
			if (markers.length == 0) {
				sidebar.innerHTML = 'No results found.';
				map.setCenter(new GLatLng(40, -96), 4);
				return;
			}
			
			var bounds = new GLatLngBounds();
			
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute('name');
				var address = markers[i].getAttribute('address');
				var city = markers[i].getAttribute('city');
				var state = markers[i].getAttribute('state');
				var phone = markers[i].getAttribute('phone');
				var url = markers[i].getAttribute('url');
				var distance = parseFloat(markers[i].getAttribute('distance'));
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
	                             parseFloat(markers[i].getAttribute('lng')));
				
				var marker = createMarker(point, "<b>"+name+"</b>", address, city, state, phone, url);
				map.addOverlay(marker);
				var sidebarEntry = createSidebarEntry(marker, name, address, city+', '+state, phone, url, distance);
				sidebar.appendChild(sidebarEntry);
				bounds.extend(point);
				
				
			}
			if(country == 'us') map.setCenter(bounds.getCenter(), 12);
			else if(country == 'Canada') map.setCenter(bounds.getCenter(), 4);
			else if(country == 'Germany') map.setCenter(bounds.getCenter(), 6);
			else map.setCenter(bounds.getCenter(), 5);
		});
	}
	
	function createMarker(point, name, address, city, state, phone, url) {
		var icon				= new GIcon(); 
		icon.image			= "../gfx/marker-images/image.png";
		icon.shadow			= "../gfx/marker-images/shadow.png";
		icon.iconSize	 	= new GSize(34, 48);
		icon.shadowSize	= new GSize(62, 48);
		icon.iconAnchor	= new GPoint(17, 48);
		icon.infoWindowAnchor	= new GPoint(17, 48);
		icon.imageMap=[22,1,24,2,26,3,27,4,28,5,29,6,30,7,31,8,31,9,32,10,32,11,32,12,32,13,32,14,32,15,32,16,32,17,32,18,32,19,31,20,31,21,31,22,30,23,30,24,29,25,29,26,29,27,28,28,28,29,27,30,27,31,26,32,25,33,25,34,24,35,24,36,23,37,23,38,22,39,21,40,21,41,20,42,20,43,19,44,18,45,18,46,17,47,16,47,15,46,15,45,14,44,13,43,13,42,12,41,12,40,11,39,10,38,10,37,9,36,9,35,8,34,8,33,7,32,7,31,6,30,5,29,5,28,4,27,4,26,4,25,3,24,3,23,2,22,2,21,2,20,1,19,1,18,1,17,1,16,1,15,1,14,1,13,1,12,1,11,1,10,2,9,2,8,3,7,4,6,5,5,6,4,7,3,9,2,11,1,22,1];
	
		var marker = new GMarker(point, icon);
		var html = '<b>' + name + '</b> <br/>' + address+'<br />'+city+', '+state+'<br />'+phone;
		
		if(url != '' && url != 'http://') html += '<br /><a href="'+url+'" target="_blank">'+url+'</a>';
		
	  GEvent.addListener(marker, 'click', function() {
	    marker.openInfoWindowHtml(html);
	  });
	  return marker;
	}
	
	function createSidebarEntry(marker, name, address, citystate, phone, url, distance) {
	  var div = document.createElement('div');
	  var html = '<div class="title">' + name + '</div>'; /* (' + distance.toFixed(1) + ')<br/>' + address;*/
	  html += '<div class="left"><div class="address">'+address+'<br />'+citystate+'</div></div>'
	  html += '<div class="right"><div class="phone">'+phone+'</div>'
	  if(url != '' && url != "http://") html += '<div class="url"><a href="'+url+'" target="_blank">Website</a></div>'
	  html += '</div>';
	  
	  div.innerHTML = html;
	  div.className = "store_row clearfix";
	  GEvent.addDomListener(div, 'click', function() {
	    GEvent.trigger(marker, 'click');
	  });
	  GEvent.addDomListener(div, 'mouseover', function() {
	    div.style.backgroundColor = '#eee';
	  });
	  GEvent.addDomListener(div, 'mouseout', function() {
	    div.style.backgroundColor = '#f8f8f8';
	  });
	  return div;
	}
	
	function GoogleGeocode(apiKey) {  
    this.apiKey = apiKey;  
    this.geocode = function(address, callbackFunction) {
    	
    	jQuery.ajax({
    		dataType: 'jsonp',
    		url: 'http://maps.google.com/maps/geo?output=json&oe=utf8&sensor=false'  + '&key=' + this.apiKey + '&q=' + address,
        cache: false,  
        success: function(data){
        	
      		if(data.Status.code==200) {  
            var result = {};  
						
            var ad = data.Placemark[0].AddressDetails.Country.AdministrativeArea;  
            result.streetAddress = ad.Locality.Thoroughfare && ad.Locality.Thoroughfare.ThoroughfareName ? ad.Locality.Thoroughfare.ThoroughfareName : '';  
            result.city = ad.Locality && ad.Locality.LocalityName ? ad.Locality.LocalityName : '';  
            result.state = ad && ad.AdministrativeAreaName ? ad.AdministrativeAreaName : '';  
            result.zip = ad.Locality.PostalCode && ad.Locality.PostalCode.PostalCodeNumber ? ad.Locality.PostalCode.PostalCodeNumber : '';  
            result.longitude = data.Placemark[0].Point.coordinates[0];  
            result.latitude = data.Placemark[0].Point.coordinates[1];  
            callbackFunction(result);
					} else {  
            callbackFunction(null);  
					}
				}  
			});  
		};
	}
	
	$('input[placeholder]').defaultValue();	
});
