var afval = new Object();
afval.calenders = new Array();

var urlHtml = "http://www.google.com/calendar/embed?src=(ID)&ctz=Europe/Brussels&title=Afvalkalender%20(TITLE)";
var urlGoogle = "http://www.google.com/calendar/render?cid=(ID)";
var urlIcal = "http://www.google.com/calendar/ical/(ID)/public/basic.ics";
var urlRss = "http://www.google.com/calendar/feeds/(ID)/public/basic?orderby=starttime&sortorder=ascending&max-results=10&futureevents=true&singleevents=true";

function loadCalendars(root) {
  var feed = root.feed;
  afval.count = feed.openSearch$totalResults.$t;
  var entries = feed.entry || [];

  for ( var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    var calendar = new Object;
    calendar.id = entry.gsx$id.$t;
    calendar.location = entry.gsx$location.$t;
    calendar.remarks = entry.gsx$remarks.$t;
    calendar.year = entry.gsx$year.$t;
    calendar.lat = entry.gsx$lat.$t / 10000000;
    calendar.lon = entry.gsx$lon.$t / 10000000;
    afval.calenders[i] = calendar;
  }
}

function addFilter() {
  $("#aantal").append(afval.calenders.length + " ");

  $(
      "<div class='threecol'><form id='filter'>Zoeken: <input type='search' size='16' placeholder='Gemeente' title='Zoek op de naam van jouw stad of gemeente.'/></form></div>")
      .insertAfter("#title").keyup(function(e) {
        applyFilter(false);
      }).change(function(e) {
        applyFilter(false);
      });
  $("#filter").submit(function() {
    return false;
  });
  $("#filter input").focus().tipsy({
    fade : true,
    gravity : 's'
  });
}

function addMap() {
  var latlng = new google.maps.LatLng(51.2, 4.304395);
  var myOptions = {
    zoom : 8,
    center : latlng,
    mapTypeId : google.maps.MapTypeId.ROADMAP,
    mapTypeControl : false
  };
  var $kalenders = $("#kalenders");
  var w = $kalenders.width();
  var h = $kalenders.height();
  $("<div class='sixcol'><div id='map' style='height:" + h + "px;width:" + w + "px;'>.</div></div>").insertBefore(
      "#kalenders");
  afval.map = new google.maps.Map(document.getElementById("map"), myOptions);

  for ( var i = 0; i < afval.calenders.length; ++i) (function(i) {
    var calendar = afval.calenders[i];
    var title = calendar.location;
    if (calendar.remarks) {
      title += " (" + calendar.remarks + ")";
    }

    var marker = new google.maps.Marker({
      map : afval.map,
      title : calendar.location,
      position : new google.maps.LatLng(calendar.lat, calendar.lon)
    });
    calendar.marker = marker;
    google.maps.event.addListener(marker, 'click', function(event) {
      $("#filter input").val(calendar.location);
      applyFilter(true);
    });

    var actions = "";
    actions += " <a class='action html' href='"
        + urlHtml.replace("(ID)", calendar.id).replace("(TITLE)", escape(title))
        + "' title='Bekijk deze afvalkalender.'><img src='images/view.gif'/>&#160;HTML</a>";
    actions += " <a class='action google' href='"
        + urlGoogle.replace("(ID)", calendar.id)
        + "' title='Voeg deze afvalkalender toe aan je eigen Google Agenda.'><img src='images/add.gif'/>&#160;Google</a>";
    actions += " <a class='action ical' href='"
        + urlIcal.replace("(ID)", calendar.id)
        + "' title='Importeer deze afvalkalender in een programma dat het iCalendar formaat ondersteunt.'><img src='images/download.gif'/>&#160;ICAL</a>";
    actions += " <a class='action rss' href='" + urlRss.replace("(ID)", calendar.id)
        + "' title='Voeg deze afvalkalender toe aan je RSS lezer.'><img src='images/add.gif'/>&#160;RSS</a>";

    li = $("<li/>").data('calendar', calendar);

    li.append("<span class='year'>" + calendar.year + "</span><a class='plaats' href='"
        + urlHtml.replace("(ID)", calendar.id).replace("(TITLE)", escape(title)) + "'>" + title
        + "</a><span class='latlng'>" + calendar.lat + "," + calendar.lon + "</span><div class='actions'>" + actions
        + "</div>");
    $("#kalenders ul").append(li);

  })(i);

  $("a.action").tipsy({
    fade : true,
    gravity : 's'
  });

}

$(document).ready(function() {
  addMap();
  addFilter();
});

function applyFilter(exact) {
  var filter = $("#filter input").val();
  filter = $("#filter input")[0].value.toLowerCase();

  $.each($("#kalenders ul li"), function(index, item) {
    var plaats = $(item).find("a.plaats");
    var calendar = $(item).data("calendar");
    if ((!exact && calendar.location.toLowerCase().indexOf(filter) == -1)
        || (exact && calendar.location.toLowerCase() != filter)) {
      $(item).hide();
      $(item).data("calendar").marker.setMap(null);
    }
    else {
      $(item).show();
      $(item).data("calendar").marker.setMap(afval.map);
    }
  });
}

