(function() {
  $(document).ready(function() {
    $('#location .map').hover(function() {
      return $(this).addClass('hover');
    }, function() {
      return $(this).removeClass('hover');
    });
    $('a.change_location').click(function(e) {
      e.preventDefault();
      $('#location').hide();
      $('#location_form').show();
      $('#location_form input').focus();
      return $('#location_form input').select();
    });
    $('a.cancel_change').click(function(e) {
      e.preventDefault();
      $('#location').show();
      return $('#location_form').hide();
    });
    $('#location_form form').submit(function(e) {
      e.preventDefault();
      $('#location_form').hide();
      $('#location_loading').show();
      return window.ReviewLoader.load($(this).serialize(), function(data) {
        var location;
        $('.location-required').slideUp('fast');
        $('#location_loading').hide();
        location = data['location'];
        if (location) {
          $('#location .map-image').remove();
          $('<img class="map-image">').attr('src', 'http://maps.google.com/maps/api/staticmap?center=' + location['lat'] + ',' + location['lng'] + '&zoom=12&size=200x160&maptype=roadmap&sensor=false').appendTo('#location .map .display');
          $('#location .map').show();
          $('#location .clip').text('Reviews near');
          $('#location .location_full').html('<em>' + (location['full_address'].length > 100 ? location['full_address'].substring(0, 92) + "..." : location['full_address'] + '</em>'));
          $('#location_form input').val(location['full_address']);
          $('#location .clear_location').show();
          $('.review-list-types li').removeClass('selected');
          $('.review-list-types li.closest').addClass('selected');
          if (data.houses.length === 0) {
            $('#review-list').animate({
              opacity: 0
            }, 'fast', function() {
              return $('#review-list').html('');
            });
          }
        } else {
          $('#location .location_full').html('Showing reviews from <em>all locations</em>');
        }
        return $('#location').show();
      });
    });
    $('#location .clear_location > a').click(function(e) {
      e.preventDefault();
      $('#location').hide();
      $('#location_loading').show();
      return window.ReviewLoader.load({
        l: '_delete'
      }, function(data) {
        $('#location_loading').hide();
        $('#location_form input').val('');
        $('#location .map').hide();
        $('#location .clip').text('');
        $('#location .location_full').html('Showing reviews from <em>all locations</em>');
        $('#location .clear_location').hide();
        $('#location').show();
        $('.review-list-types li').removeClass('selected');
        return $('.review-list-types li.newest').addClass('selected');
      });
    });
    return $('.review-list-types a').click(function(e) {
      var $self, listOptions;
      e.preventDefault();
      $self = $(this);
      listOptions = $.deparam.querystring(this.href);
      if (!window.ReviewLoader.location && listOptions.list === 'closest') {
        return $('.location-required').slideDown('fast');
      } else {
        $('.location-required').slideUp('fast');
        $('#reviews-back-to-start').slideUp('fast');
        return window.ReviewLoader.load(listOptions, function(data) {
          $('.review-list-types li').removeClass('selected');
          return $self.parent('li').addClass('selected');
        });
      }
    });
  });
  window.Map = {
    init: function() {
      var iconColors, infoWindow, map;
      map = new google.maps.Map($('#map')[0], {
        zoom: 16,
        center: new google.maps.LatLng($('#nearby li.current:first').attr('data-lat'), $('#nearby li.current:first').attr('data-lng')),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });
      infoWindow = new google.maps.InfoWindow({
        content: ''
      });
      iconColors = {
        1: {
          primaryColor: 'cc0000',
          cornerColor: 'f7a6a6'
        },
        2: {
          primaryColor: 'cc0000',
          cornerColor: 'f7a6a6'
        },
        3: {
          primaryColor: 'f64f06',
          cornerColor: 'fad1af'
        },
        4: {
          primaryColor: 'f64f06',
          cornerColor: 'fad1af'
        },
        5: {
          primaryColor: 'fdcc23',
          cornerColor: 'fceabe'
        },
        6: {
          primaryColor: 'fdcc23',
          cornerColor: 'fceabe'
        },
        7: {
          primaryColor: '81b51c',
          cornerColor: 'e6fcbb'
        },
        8: {
          primaryColor: '81b51c',
          cornerColor: 'e6fcbb'
        },
        9: {
          primaryColor: '4ca710',
          cornerColor: 'bbf496'
        },
        10: {
          primaryColor: '4ca710',
          cornerColor: 'bbf496'
        }
      };
      $('#nearby li').each(function(i) {
        var cornerColor, infoWindowContent, marker, markerImage, primaryColor, rating, size;
        rating = $(this).attr('data-rating');
        primaryColor = iconColors[rating].primaryColor;
        cornerColor = iconColors[rating].cornerColor;
        size = $(this).hasClass('current') ? 44 : 32;
        markerImage = new google.maps.MarkerImage('http://chart.apis.google.com/chart?cht=mm&chs=' + size + 'x' + size + '&chco=' + cornerColor + ',' + primaryColor + ',000000&ext=.png', new google.maps.Size(size, size));
        marker = new google.maps.Marker({
          position: new google.maps.LatLng($(this).attr('data-lat'), $(this).attr('data-lng')),
          map: map,
          icon: markerImage,
          title: $('a', this).html()
        });
        infoWindowContent = $('.info-box', this).html();
        google.maps.event.addListener(marker, 'click', function() {
          infoWindow.close();
          infoWindow.setContent(infoWindowContent);
          return infoWindow.open(map, marker);
        });
        return $('a', this).bind('click', function(e) {
          e.preventDefault();
          infoWindow.close();
          infoWindow.setContent(infoWindowContent);
          return infoWindow.open(map, marker);
        });
      });
      Map.activateCurrent();
      return $('#review h1 a, .address').click(Map.activate_current);
    },
    activateCurrent: function() {
      return $('#nearby .current a').click();
    }
  };
  window.subscribeForm = function() {
    return ($('#subscribe form')).submit(function(e) {
      var email, spinner, spinnerContainer;
      e.preventDefault();
      email = $('#email');
      if (email.val() !== "") {
        spinnerContainer = $('#subscribe .spinner');
        spinnerContainer.removeClass('error success').html('');
        spinner = new Spinner({
          lines: 8,
          length: 0,
          width: 4,
          radius: 5,
          color: '#000',
          speed: 1.5,
          trail: 60,
          shadow: false
        }).spin(spinnerContainer[0]);
        return $.post(this.action, {
          email: email.val()
        }, function(data) {
          email.val('');
          return spinnerContainer.addClass('success').html('Done, awesome.');
        }).error(function() {
          return spinnerContainer.addClass('error').html('Nope, I don&lsquo;t like that.');
        }).complete(function() {
          return spinner.stop();
        });
      }
    });
  };
}).call(this);

