$(document).ready(function () {
    $('form.find_location').submit(function () {
        var address = $(this).find('input[type="text"]').val();
        if (!address || address == 'eg. 84555') {
            return false;
        }
        $('#rrModal').css({
            display: 'block'
        });
        initialize();
        codeAddress(address);
        return false;
    });

    $('.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'
        });
    });
});

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 < 3; 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": "Sizzler - Logan",
      "address": "1165 North Main St",
      "city": "Logan",
      "state": "UT",
      "twitter": "http://www.twitter.com/LoganSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Logan/181814631859401",
      "longitude": -111.8344138,
      "latitude": 41.7529814,
      "storeid": "439"
   },
   {
      "location_name": "Sizzler - Ogden",
      "address": "1208 Washington Blvd",
      "city": "Ogden",
      "state": "UT",
      "twitter": "http://www.twitter.com/OgdenSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Ogden/121587497913546",
      "longitude": -111.969233,
      "latitude": 41.243888,
      "storeid": "488"
   },
   {
      "location_name": "Sizzler - Layton",
      "address": "1171 North 400 West",
      "city": "Layton",
      "state": "UT",
      "twitter": "http://www.twitter.com/LaytonSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Layton/192137807479284",
      "longitude": -111.9735119,
      "latitude": 41.0772147,
      "storeid": "588"
   },
   {
      "location_name": "Sizzler - Provo",
      "address": "1385 S University Ave",
      "city": "Provo",
      "state": "UT",
      "twitter": "http://www.twitter.com/ProvoSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Provo/158997997486216",
      "longitude": -111.6589413,
      "latitude": 40.2153544,
      "storeid": "875"
   },
   {
      "location_name": "Sizzler - Pocatello",
      "address": "1000 Pocatello Creek Rd",
      "city": "Pocatello",
      "state": "ID",
      "twitter": "http://www.twitter.com/PocatelloSizzle",
      "facebook": "http://www.facebook.com/pages/Sizzler---Pocatello/174634555913071",
      "longitude": -112.441027,
      "latitude": 42.894036,
      "storeid": "547"
   },
   {
      "location_name": "Sizzler - Twin Falls",
      "address": "719 Blue Lakes Blvd N",
      "city": "Twin Falls",
      "state": "ID",
      "twitter": "http://www.twitter.com/TwinFallsSizzle",
      "facebook": "http://www.facebook.com/pages/Sizzler---Twin-Falls/184739051556921",
      "longitude": -114.4603486,
      "latitude": 42.574641,
      "storeid": "650"
   },
   {
      "location_name": "Sizzler - Idaho Falls",
      "address": "2380 E 17th St",
      "city": "Idaho Falls",
      "state": "ID",
      "twitter": "http://www.twitter.com/IDFallsSizzle",
      "facebook": "http://www.facebook.com/pages/Sizzler---Idaho-Falls/158774650838135",
      "longitude": -111.9877735,
      "latitude": 43.4821506,
      "storeid": "660"
   },
   {
      "location_name": "Sizzler - Sugar House",
      "address": "2111 S 1300 St E",
      "city": "Salt Lake City",
      "state": "UT",
      "twitter": "http://www.twitter.com/SgrHouseSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Sugar-House/146930915363334",
      "longitude": -111.8302473,
      "latitude": 40.7416555,
      "storeid": "080"
   },
   {
      "location_name": "Sizzler - Downtown",
      "address": "371 E 4th South",
      "city": "Salt Lake City",
      "state": "UT",
      "twitter": "http://www.twitter.com/DowntownSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Downtown/193334127359319",
      "longitude": -111.880088,
      "latitude": 40.760976,
      "storeid": "321"
   },
   {
      "location_name": "Sizzler - Orem",
      "address": "1240 S State",
      "city": "Orem",
      "state": "UT",
      "twitter": "http://www.twitter.com/OremSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Orem/148967901824765",
      "longitude": -111.6852264,
      "latitude": 40.2746245,
      "storeid": "431"
   },
   {
      "location_name": "Sizzler - West Jordan",
      "address": "1477 W 7800 S",
      "city": "West Jordan",
      "state": "UT",
      "twitter": "http://www.twitter.com/WJordanSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---West-Jordan/176039059104749",
      "longitude": -111.9343991,
      "latitude": 40.6093607,
      "storeid": "529"
   },
   {
      "location_name": "Sizzler - Sandy",
      "address": "20 W 9000 S",
      "city": "Sandy",
      "state": "UT",
      "twitter": "http://www.twitter.com/SandySizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Sandy/135678373162115",
      "longitude": -111.8910942,
      "latitude": 40.5882866,
      "storeid": "541"
   },
   {
      "location_name": "Sizzler - Bountiful",
      "address": "575 West 500 South",
      "city": "Bountiful",
      "state": "UT",
      "twitter": "http://www.twitter.com/BountifulSizzle",
      "facebook": "http://www.facebook.com/pages/Sizzler---Bountiful/105209556221508",
      "longitude": -111.8954364,
      "latitude": 40.8841474,
      "storeid": "670"
   },
   {
      "location_name": "Sizzler - Redwood",
      "address": "3429 S Redwood Rd",
      "city": "Salt Lake City",
      "state": "UT",
      "twitter": "http://www.twitter.com/RedwoodSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Redwood/141822079212571",
      "longitude": -111.938531,
      "latitude": 40.697981,
      "storeid": "142"
   },
   {
      "location_name": "Sizzler - Meridian",
      "address": "3380 North Eagle Rd",
      "city": "Meridian",
      "state": "ID",
      "twitter": "http://www.twitter.com/MeridianSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Meridian/185791471442271",
      "longitude": -116.353361,
      "latitude": 43.635533,
      "storeid": "215"
   },
   {
      "location_name": "Sizzler - Nampa",
      "address": "501 Caldwell Blvd",
      "city": "Nampa",
      "state": "ID",
      "twitter": "http://www.twitter.com/NampaSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Nampa/178373295533171",
      "longitude": -116.587355,
      "latitude": 43.5944901,
      "storeid": "434"
   },
   {
      "location_name": "Sizzler - Boise",
      "address": "459 North Cole Rd",
      "city": "Boise",
      "state": "ID",
      "twitter": "http://www.twitter.com/BoiseSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Boise/163124833734601",
      "longitude": -116.274406,
      "latitude": 43.609385,
      "storeid": "921"
   },
   {
      "location_name": "Sizzler - Tukwila",
      "address": "16615 Southcenter Pkwy",
      "city": "Tukwila",
      "state": "WA",
      "twitter": "http://www.twitter.com/TukwilaSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Tukwila/124662100936173",
      "longitude": -122.2624864,
      "latitude": 47.4537883,
      "storeid": "420"
   },
   {
      "location_name": "Sizzler - Tacoma",
      "address": "10204 S Tacoma Way",
      "city": "Tacoma",
      "state": "WA",
      "twitter": "http://www.twitter.com/TacomaSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Tacoma/196361293711780",
      "longitude": -122.4839064,
      "latitude": 47.1649759,
      "storeid": "427"
   },
   {
      "location_name": "Sizzler - Bremerton",
      "address": "3558 Wheaton Way",
      "city": "Bremerton",
      "state": "WA",
      "twitter": "http://www.twitter.com/BremertonSizzle",
      "facebook": "http://www.facebook.com/pages/Sizzler---Bremerton/194212097262395",
      "longitude": -122.628913,
      "latitude": 47.596322,
      "storeid": "619"
   },
   {
      "location_name": "Sizzler - Olympia",
      "address": "3315 Pacific Ave SE",
      "city": "Olympia",
      "state": "WA",
      "twitter": "http://www.twitter.com/OlympiaSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Olympia/176751185700024",
      "longitude": -122.848953,
      "latitude": 47.040783,
      "storeid": "935"
   },
   {
      "location_name": "Sizzler - Sparks",
      "address": "615 E Prater Way",
      "city": "Sparks",
      "state": "NV",
      "twitter": "http://www.twitter.com/SparksSizzler",
      "facebook": "http://www.facebook.com/pages/Sizzler---Sparks/146230992101538",
      "longitude": -119.7343327,
      "latitude": 39.5417975,
      "storeid": "609"
   },
   {
      "location_name": "Sizzler - South Jordan",
      "address": "11610 S District Drive",
      "city": "South Jordan",
      "state": "UT",
      "twitter": "http://www.twitter.com/SouthJordanSizzler",
      "facebook": "https://www.facebook.com/pages/Sizzler-South-Jordan/192300954163995",
      "longitude": -111.98037,
      "latitude": 40.543132,
      "storeid": "229"
   }
];

