$(document).ready(function () {	
		
	$('#see_map').click(function() {
        $('#rrModal').css({
            display: 'block'
        });
        initialize();
        codeAddress('84047');
        return false;
	});
	
	var option;
	for (x = 0; x < locations.length; x++) {
		jQuery('<option>' + locations[x].location_name + '</option>').appendTo('#location_dropdown');
		$('#location_dropdown option:last').data('location',locations[x]);
	}
	
	$('#location_dropdown').change(function(){
		var location = $(this).find('option:selected').data('location');
		if(location) {
			selectLocation(location);
		}		
	});

    $('.location a').live('click', function () {
        var location = $(this).closest('li').data('location');
		selectLocation(location);
        return false;
    });

    $('.done').click(function () {
        $('#rrModal2').css({
            display: 'none'
        });
    });

    $('.next').click(function () {
        $('#rrModal').css({
            display: 'block'
        });
        $('#rrModal2').css({
            display: 'none'
        });

		initialize();
		codeAddress('84047');
    });
});

function selectLocation(location) {
	$('#rrModal').css({
		display: 'none'
	});
	$('#rrModal2').css({
		display: 'block'
	});
	
	$('#chosen_location').html("<em>You've chosen</em> " + location.location_name + " on " + location.address + ", " + location.city + ", " + location.state);
	$('.goTwitter').attr('href', location.twitter);
	$('.goTwitter').attr('target', '_blank');
	$('.fbLink').attr('href',location.facebook);
    $('.fbLink').attr('target','_blank');
	$('.fbControl').html('<iframe src="http://www.facebook.com/plugins/like.php?href=' + encodeURIComponent(location.facebook) + '&amp;layout=standard&amp;show_faces=false&amp;width=350&amp;action=like&amp;colorscheme=light&amp;height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:350px; height:35px;" allowTransparency="true"></iframe>');
    
    $('input[name=storeid]').val(location.storeid);
}

var geocoder;
var map;

function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(40.623095, -111.937376);
    var myOptions = {
        zoom: 8,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var bounds = new google.maps.LatLngBounds();
    for (x = 0; x < locations.length; x++) {
        latlng = new google.maps.LatLng(locations[x].latitude, locations[x].longitude, true);
        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
			location: locations[x],
            title: locations[x].location_name
        });
		google.maps.event.addListener(marker, 'click', function() {
			selectLocation(this.location);
		});
        bounds.extend(latlng);
    }
	map.fitBounds(bounds);
}

function codeAddress(address) {
    geocoder.geocode({
        'address': address
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            map.setZoom(11);
            find_closest_markers(results[0].geometry.location.lat(), results[0].geometry.location.lng(), map);
        } else {
            alert('Location query not successful. Please try a zip code.');
        }
    });
}

//Modified from http://stackoverflow.com/questions/4057665/google-maps-api-v3-find-nearest-markers


function rad(x) {
    return x * Math.PI / 180;
}

function find_closest_markers(lat, lng, map) {
    var R = 6371;
    var distances = [];
    var closest = -1;
    for (i = 0; i < locations.length; i++) {
        var mlat = locations[i].latitude;
        var mlng = locations[i].longitude;
        var dLat = rad(mlat - lat);
        var dLong = rad(mlng - lng);
        var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(rad(lat)) * Math.cos(rad(lat)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        var d = R * c;
        distances.push([d, locations[i]]);
    }

    distances.sort(cmp);

    //List nearest 3 locations
    document.getElementById('nearest_locations').innerHTML = '';
    var bounds = new google.maps.LatLngBounds();
    for (x = 0; x < 5; x++) {
        $("#locationTemplate").tmpl(distances[x][1]).data('location', distances[x][1]).appendTo("#nearest_locations");
        latlng = new google.maps.LatLng(distances[x][1].latitude, distances[x][1].longitude, true);
        bounds.extend(latlng);
    }
    map.fitBounds(bounds);

    //	document.getElementById('debug').innerHTML = JSON.stringify(distances,null,1);
}

function cmp(a, b) {
    return a[0] - b[0];
}

locations = [
   {
      "location_name": "Ruby River - Salt Lake",
      "address": "435 South 700 East",
      "city": "Salt Lake City",
      "state": "UT",
      "twitter": "http://www.twitter.com/RubyRiver_SLC",
      "facebook": "http://www.facebook.com/pages/Ruby-River---Salt-Lake/159228740793300",
      "longitude": -111.870921,
      "latitude": 40.7596593,
      "storeid": "404"
   },
   {
      "location_name": "Ruby River - Provo",
      "address": "1454 S. University Ave",
      "city": "Provo",
      "state": "UT",
      "twitter": "http://www.twitter.com/RubyRiver_Provo",
      "facebook": "http://www.facebook.com/pages/Ruby-River---Provo/195982713752611",
      "longitude": -111.662711,
      "latitude": 40.217766,
      "storeid": "405"
   },
   {
      "location_name": "Ruby River - Ogden",
      "address": "4286 Riverdale Rd.",
      "city": "Ogden",
      "state": "UT",
      "twitter": "http://www.twitter.com/RubyRiver_Ogden",
      "facebook": "http://www.facebook.com/pages/Ruby-River---Ogden/105274016216279",
      "longitude": -111.9864975,
      "latitude": 41.1855423,
      "storeid": "406"
   },
   {
      "location_name": "Ruby River - Sandy",
      "address": "85 East 9400 South",
      "city": "Sandy",
      "state": "UT",
      "twitter": "http://www.twitter.com/RubyRiver_Sandy",
      "facebook": "http://www.facebook.com/pages/Ruby-River---Sandy/150291455025108",
      "longitude": -111.8616007,
      "latitude": 40.5955037,
      "storeid": "408"
   },
   {
      "location_name": "Ruby River - Reno",
      "address": "2750 S. Virginia St.",
      "city": "Reno",
      "state": "NV",
      "twitter": "http://www.twitter.com/RubyRiver_Reno",
      "facebook": "http://www.facebook.com/pages/Ruby-River---Reno/130153183716568",
      "longitude": -119.8138027,
      "latitude": 39.5296329,
      "storeid": "407"
   }
];

