var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var fullmonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

// called by document.ready in the module itself
function initeventfilter() {

  populateDates("from");
  populateDates("to");

  var now = new Date();

  var nextMonth = now.getMonth()+1;

  if (nextMonth == 12)
    nextMonth = 1;

  selectDate('from', now.getDate(), months[now.getMonth()], now.getFullYear());
  selectDate('to', now.getDate(), months[nextMonth], now.getFullYear());

  $("#inline").datepicker({ 
    onSelect: function(date, el) { 
      selectDate('from', el.selectedDay, el.selectedMonth, el.selectedYear);
      selectDate('to', el.selectedDay, el.selectedMonth, el.selectedYear);
      filter();
    } 
  });

  // parse any dates passed in by url param
  var urld = getparam('d');
  if (urld) {
    var d = new Date(urld);
    selectDate('from', d.getDate(), months[d.getMonth()], d.getFullYear());
    selectDate('to', d.getDate(), months[d.getMonth()], d.getFullYear());
  }
  var urlc = getparam('c');
  if (urlc) {
    $('#category').val(unescape(urlc));
  }
  var urlv = getparam('v');
  if (urlv) {
    $('#venue').val(unescape(urlv));
  }  

  filter();

}

function filter() {
  var fromfilter = new Date($('#fromyear').val(), $('#frommonth').val(), $('#fromdate').val());
  var tofilter = new Date($('#toyear').val(), $('#tomonth').val(), $('#todate').val());
  var categoryfilter = $('#category').val();
  var venuefilter = $('#venue').val();
  $('#noevents').show();
  $('.xevent').each(function() {
    var el = $(this);
    var evfrom = el.data('from');
    var evto = el.data('to');
    var evcategories = el.data('categories');
    var evvenue = el.data('venue');

    var ismatch = false;
    

    if (fromfilter.toString() == tofilter.toString() && 
        evfrom <= fromfilter && evto >= tofilter) {
      ismatch = true;
    } else if (evfrom >= fromfilter && evfrom <= tofilter && evto <= fromfilter) { // inside
      ismatch = true;
    } else if (evfrom <= fromfilter && evto >= fromfilter && evto <= tofilter) { // start
      ismatch = true;
    } else if (evfrom >= fromfilter && evfrom <= tofilter && evto >= fromfilter) { // end
      ismatch = true;
    } else if (evfrom <= fromfilter && evto >= tofilter) { // outside
      ismatch = true;
    }

    if (ismatch && 
       (categoryfilter == '' || evcategories.indexOf(categoryfilter) != -1) &&
       (venuefilter == '' || evvenue.indexOf(venuefilter) != -1)) {
      el.show();
      $('#noevents').hide();
    } else {
      el.hide();
    } 

  });

   // update the current filter indicator
   $('#selectedcategory').html(categoryfilter || "All Categories");
   $('#selectedvenue').html(venuefilter || "All Venues");
   if (fromfilter.toString() == tofilter.toString()) {
     $('#selecteddate').html( formatdate(fromfilter) );
   } else {
     $('#selecteddate').html( "(" +  formatdate(fromfilter) + " - " + formatdate(tofilter) + ")");
   }
}



function clearfilter() {
  window.location = '/events';
}

function formatdate(d) {
  return d.getDate() + '/' + 
        (d.getMonth() + 1) + '/' + 
         d.getFullYear()
}

function getparam(key, d) {
  if (!d) d= "";
  // key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.search);
  if(qs == null)
    return d;
  else
    return qs[1];
} 

function populateDates(prefix) {
  var now = new Date();

  for (var i = 1; i < 32; i++) {
    var selectlist = document.getElementById(prefix+"date");
    selectlist[selectlist.length] = new Option(i, i);
  }
  for (var i = 0; i < 12; i++) {
    var selectlist= document.getElementById(prefix+"month");
    selectlist[selectlist.length] = new Option(months[i], i);
  }
  for (var i = now.getFullYear(); i < now.getFullYear()+4; i++) {
    var selectlist= document.getElementById(prefix+"year");
    selectlist[selectlist.length] = new Option(i, i);
  }
}

function selectDate(prefix, day, month, year) {
  $("#"+prefix+"date").val(day);
  $("#"+prefix+"month").val(month);
  $("#"+prefix+"year").val(year);
}

function prettydate(d) {
  document.write(
    days[d.getDay()] + ' ' + 
    d.getDate() + todateend(d.getDate()) + ' ' + 
    fullmonths[d.getMonth()] + ' ' + 
    d.getFullYear());
}

function todateend(d) {
  var end = d.toString().substring(d.toString().length-1);
  if (end == 1 && d != 11)
    return 'st';
  if (end == 2 && d != 12)
    return 'nd';
  if (end == 3 && d != 13)
    return 'rd';
  return 'th';
}
