var Ellington = window.Ellington || {};


Ellington.UserSubmittedEvents = function() {
  function setupCalendar(el) {
    el.datepicker({
      dateFormat: 'yy-mm-dd',
      showOtherMonths: true,
      selectOtherMonths: true
    });
  }

  function resetCalendarCallback(row) {
    $('.calendarField').each(function(i) {
      $(this).datepicker('destroy');
      setupCalendar($(this));
    });
  }

  function clearPlaceSelection() {
    $('#id_place').val('');
    $('#id_one_off_place').val('');
    $('#selected-place-info').html('');
    $('#selected-place').hide();
    $('#input-place').show();
  }

  /* autocomplete rendering callback */
  function renderItem(item) {
    var link = '<a href="#">'+item.label+'</a>';
    var trusted = '';
    var address = '<p class="quiet">'+item.address1+', '+item.zip_code+' '+item.phone1+'</p>';
    if (item.trusted) {
      trusted = '<span class="promoter-status trusted">Trusted Promoter</span>';
    }
    return link+trusted+address;
  }

  /* item selection handler */
  function selectItem(item) {
    var placeName = '<a href="'+item.url+'">'+item.name+'</a>';
    var address = '<span class="address">'+item.address1+', '+item.zip_code+'</span>';
    var phone = '<span class="phone">'+item.phone1+'</span>';
    var trusted = '<span class="promoter-status trusted">Trusted promoter</span>';

    if (!item.trusted) {
      trusted = '<span class="request-promoter-status"><a href="/places/'+item.slug+'/promoter-status/" target="_blank">Become trusted promoter</a></span>';
    }

    $('#id_place').val(item.id);
    $('#selected-place-info').html(placeName+', '+address+' '+phone+' '+trusted);
    $('#selected-place').show();
    $('#input-place').hide();
  }

  function processItem(item) {
    item.label = item.value = item.name;
    return item;
  }

  return {
    init: function() {
      /* set up clear place click handler */
      $('a#clear-place-selection').click(clearPlaceSelection);

      $('.request-promoter-status a').live('click', function(e) {
        e.preventDefault();
        var elem = $(this);
        $.post(elem.attr('href'), function(data) {
          var parent_span = elem.parent();
          if (data.approved) {
            parent_span.html('approved');
            parent_span.addClass('trusted');
          }
          else if (data.denied) {
            parent_span.html('denied');
            parent_span.addClass('denied');
          }
          else {
            parent_span.html('request received');
            parent_span.addClass('pending');
          }
        }, 'json');
      });

      /* configure the calendar for the initial formset fields */
      setupCalendar($('.dynamic-form .calendarField'));

      /* display favorite venues in a touchmenu */
      var favoritesMenu = Ellington.TouchMenu($('a#favorite-places'), {
        callback: function(menu, content) {
          var favorites_ul = $('<ul id="favorite-places-list"></ul>');
          $.each(favoriteVenues, function(idx, item) {
            item.label = item.value = item.name;
            $('<li></li>')
              .data('item.autocomplete', item)
              .append(renderItem(item))
              .appendTo(favorites_ul);
          });
          content.html(favorites_ul);
          $('ul#favorite-places-list li a').live('click', function(e) {
            e.preventDefault();
            
            var item = $(this).parents('li').data('item.autocomplete');
            selectItem(item);
            $('#id_one_off_place').val(item.value);
            $(document).trigger('click'); /* hack to hide the menu */
          });
        }
      });
      
      /* configure autocomplete */
      Ellington.Autocomplete($('#id_one_off_place'), $('#id_place'), {
        url: '/events/search/autocomplete/',
        renderItem: renderItem,
        selectItem: selectItem,
        processItem: processItem
      });
    },

    selectItem: function(item) {
      selectItem(item);
    },
    
    resetCalendarCallback: function(row) {
      resetCalendarCallback(row);
    }
  }
}();


/*
 * Day part
 */

Ellington.DayPart = (function($) {
  var MORNING = 'daypart_morning';
  var AFTERNOON = 'daypart_afternoon';
  var EVENING = 'daypart_evening';
  var NIGHT = 'daypart_night';

  function hide(elements) {
    $(elements).slideUp(400);
  }

  return function() {
    var body = $('body');

    $('.event_archive_day .divider a').bind('click', function(e) {
      e.preventDefault();
      var target = $(e.target);
      $('div.daypart_'+target.attr('href').slice(1)).slideToggle(400);
    });

    if(body.hasClass(AFTERNOON)) {
      hide('div.'+MORNING);
    }
    else if(body.hasClass(EVENING)) {
      hide('div.'+MORNING+', div.'+AFTERNOON);
    }
    else if(body.hasClass(NIGHT)) {
      hide('div.'+MORNING+', div.'+AFTERNOON+', div.'+EVENING);
    }
  };
})(jQuery);


jQuery(document).ready(function($) {
  Ellington.DayPart();
});

