var mapstraction;
jQuery(function() {
    // First create a div to host the map
    var themap = $('<div id="themap"></div>').css({
        'width': '100%', 'height': '400px'
    }
   ).insertBefore('ul.venue'); // Now initialise the map
    mapstraction = new Mapstraction('themap', 'google'); mapstraction.addControls({
        zoom: 'large', map_type: true
    }
   ); // Show map centred on uk
	
    mapstraction.setCenterAndZoom(new LatLonPoint(52.26484814244477, -0.8624267578125), 4 // Zoom on country
   ); // Geocode each hcard and add a marker
	
	var items = [];
	
	var c1=0,c2=0;
	
    jQuery('.vcard').each(function() {
        var hcard = jQuery(this);
		var name = hcard.find('.name').text();
        var streetaddress = hcard.find('.street-address').text();
        var postcode = hcard.find('.postal-code').text();
        var locality = hcard.find('.locality').text();
        var country = hcard.find('.country-name').text(); 
        var latTemp = hcard.find('.lat').text();
		var lonTemp = hcard.find('.lon').text();
	
		items.push ( {hcard:hcard,lat:latTemp, lon:lonTemp, address:name + "," + streetaddress + ', ' + locality + ', ' + postcode + ', ' + country, bub:'<div class="bubble"><h3>' + name + '</h3>' + hcard.find('.bubble').html() + '</div>'});
		
	
    }
   );

	var doNext = function () {
		c1++;
		var curr = items.pop ();
		if (curr) {
			
			
			
				var geocoder = new MapstractionGeocoder(function(result) {
		        	var marker = new Marker(result.point); 
					marker.setInfoBubble(curr.bub); 
					mapstraction.addMarker(marker);
					curr.hcard.find('.lat').text(result.point.lat);
					curr.hcard.find('.lon').text(result.point.lon);
			    //	//console.log (result.point);
					c2++;
				doNext ();
		//	alert (result.point.lat);

			}, 'google', function (result) { doNext ();});

				if (curr.lat == '' || curr.lon == '')
					{

						//if (postcode != "") {
							//console.log ("geocoding",items.length);
							//	alert ( name + "," + streetaddress + ', ' + locality + ', ' + postcode + ', ' + country);
								geocoder.geocode(
												 {'address':   curr.address}
										 		);

					//	}

					}
					else
					{

						var point = new LatLonPoint(curr.lat,curr.lon);
						var marker = new Marker(point); 
						marker.setInfoBubble(curr.bub); 
						mapstraction.addMarker(marker);
							
							doNext ();

					}
					
					
			
			
		} else {
			
			//console.log (c1,c2);
		}
	}
	
	doNext ();
}
);
function findVenue(){
	var search = $('#txtSearch').val();
	if (search.length > 0 )
	{
		var geocoder = new MapstractionGeocoder(function(result) {
           
			jQuery('.vcard').each(function() {
								    var hcard = jQuery(this);
									var lat1 = result.point.lat;
									var lon1 = result.point.lon;
									var lat2 = hcard.find('.lat').text();
									var lon2 = hcard.find('.lon').text();
								
									var miles = getDistance(lat1,lat2,lon1,lon2);
									var theText = miles;
								//	console.log (lat1,lon1,lat2,lon2,miles, hcard.find('.name').text());
									hcard.find('.distance').text(theText);
									
								   }).tsort(".distance").each(function(){
									   	var localName = $(".vcard:first").find('.name').text();
	var lat1 = $(".vcard:first").find('.lat').text();
	var lon1 = $(".vcard:first").find('.lon').text();
	mapstraction.setCenterAndZoom(new LatLonPoint(lat1, lon1), 10 );
	 $("p.neat").hide().html("You searched for <b>" + search + "</b> your closest venue is: <b>" + localName + "</b>").addClass("alert").show("slow");
									   
									   });
        }
      , 'google', function () {}); 
		geocoder.geocode({
      'address': search + ', UK'});	
	}
	else
	{
		$("p.neat").hide().html("Please enter a Post Code.").addClass("error").show("slow");
		}
	};
	
	Number.prototype.toRad = function() {
	    return this * Math.PI / 180;
	  }
	
		function getDistance(lat1,lat2,lon1,lon2) 
	{
var R = 6371; // km

lat1 = parseInt (lat1);
lat2 = parseInt (lat2);
lon1 = parseInt (lon1);
lon2 = parseInt (lon2);
/*
var d = Math.acos(Math.sin(lat1)*Math.sin(lat2) + 
                  Math.cos(lat1)*Math.cos(lat2) *
                  Math.cos(lon2-lon1)) * R;
return d;
*/
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;
return d;
		
	};

