/**
 * Powered by Inmite (http://www.inmite.eu)
 */
// consts
var cm_album_feed_base_url;
var cm_icons_base_url;
var cm_album_base_url;
//var cm_base_url = "http://ida.inmite.eu/taptap/wp-content/themes/TapTap/feeds/";
var cm_cal_feed_url = 'http://www.google.com/calendar/feeds/l2h0j3dd927fv4jtd0j7f1q22k@group.calendar.google.com/public/full';

// markers
var cm_photo_marker;
var cm_event_marker;

// data for markers
var cm_albums;
var cm_concerts;

// state of layers
var cm_albums_shown = true;
var cm_concerts_shown = true;

// tools
var cm_geocoder;

function load_map_content(afd, ibu, abu) {
    cm_album_feed_base_url = afd;
    cm_icons_base_url = ibu;
    cm_album_base_url = abu;
    init_js();
    scrollToCz();
    loadAlbumsData();
    if (cm_concerts) {
        createConcertOverlay();
    } else {
//        outConsole('Odkladam pridani do mapy, az budou stazena data');
    }
}

function init_js() {
    cm_photo_marker = new GIcon();
    cm_photo_marker.image = cm_icons_base_url + 'img/blue-dot.png';
    cm_photo_marker.shadow = cm_icons_base_url + 'img/msmarker.png';
    cm_photo_marker.iconSize = new GSize(32,32);
    cm_photo_marker.shadowSize = new GSize(59,32);
    cm_photo_marker.iconAnchor = new GPoint(16,32);
    cm_photo_marker.infoWindowAnchor = new GPoint(16, 0);

    cm_event_marker = new GIcon();
    cm_event_marker.image = cm_icons_base_url + 'img/red-dot.png';
    cm_event_marker.shadow = cm_icons_base_url + 'img/msmarker.png';
    cm_event_marker.iconSize = new GSize(32,32);
    cm_event_marker.shadowSize = new GSize(59,32);
    cm_event_marker.iconAnchor = new GPoint(16,32);
    cm_event_marker.infoWindowAnchor = new GPoint(16, 0);

    cm_geocoder = new GClientGeocoder();
}

function outConsole(s) {
    var console = document.getElementById("console");
    if (console) {
        console.innerHTML += "\n" + s;
    }
}

function loadAlbumsData() {
    var process_it = function(doc) {
        try {
            var jsonData = eval('(' + doc + ')');
            cm_albums = jsonData.feed;
            createAlbumOverlay();
        } catch (e) {
            alert(e);
        }
    }

    try {
        GDownloadUrl(cm_album_feed_base_url + "map.php?v=" + getMs(), process_it);
    } catch (e) {
        alert(e);
    }
}

function getMs() {
    var myDate = new Date();
    return myDate.getTime();
}

function scrollToPrague() {
   map.setCenter(new GLatLng(50.083252,14.426945), 12);
}

function scrollToCz() {
   map.setCenter(new GLatLng(49.576938, 15.463257), 7);
}

function getClickListenerSingle(marker, content) {
    return function() {
        marker.openInfoWindowHtml(content);
    }
}

function createAlbumOverlay() {
    // Prepare albums
    for (var i in cm_albums) {
        if (cm_albums[i].pos != '') {
            var pos = cm_albums[i].pos.split(' ');
            var markeropt = { icon:cm_photo_marker };
            var lat = parseFloat(pos[0]);
            var lon = parseFloat(pos[1]);
            var marker = new GMarker(new GLatLng(lat, lon), markeropt);

            var content = '<div style="width:200px; height: 230px; overflow: auto; text-align: center;">' +
                          '<ul class="albums">' +
                          '<li onclick="window.location = \'' + cm_album_base_url + cm_albums[i].album + '\';">' +
		                  '<img src="' + cm_albums[i].thumbnail + '" alt="' + cm_albums[i].name + '" />' +
		                  '<br /><span>Album <strong>' + cm_albums[i].name + '</strong></span></li></ul></div>';
            marker.js_onclick = getClickListenerSingle(marker, content);
            GEvent.addListener(marker, "click", marker.js_onclick);

            cm_albums[i].marker = marker;
        }
    }
    if (cm_albums_shown) {
        showAlbumOverlay();
    }
}

function showAlbumOverlay() {
    // Render albums
    for (var i in cm_albums) {
        if (cm_albums[i].marker) {
            var marker = cm_albums[i].marker;
            map.addOverlay(marker);
        }
    }
}

function getZeroLead(s, len) {
    var tmp = "" + s;
    while (tmp.length < len) { tmp = "0" + tmp; }
    return tmp;
}

function getTodayIsoTag() {
    var date = new Date();
    return date.getFullYear() + '-' + getZeroLead(date.getMonth() + 1,2) + '-' + getZeroLead(date.getDate(),2) + 'T00:00:00.000+00:00';
}

function getFormatDay(date) {
    return date.getDate() + '.' + (date.getMonth() + 1) + '.' + date.getFullYear();
}

function calDateToStr(calDate) {
    var date;
    // Jednodenni akce ma rozmezi presne 24 hodin
    if (calDate.getEndTime().getDate().getTime() - calDate.getStartTime().getDate().getTime() == 24 * 3600000) {
        date = getFormatDay(calDate.getStartTime().getDate())
    } else {
        var end = new Date();
        end.setTime(calDate.getEndTime().getDate().getTime() - 24 * 3600000);
        date = getFormatDay(calDate.getStartTime().getDate()) + ' až ' +
               getFormatDay(end);
    }
    return date;
}

function locFoundFn(eventEntry, eventTitle) {
    return function(loc) {
              if (!loc) {
//                outConsole(eventLoc + " nenalezen");
              } else {
//                outConsole(eventLoc + " nalezena");
                var markeropt = { icon:cm_event_marker };
                var marker = new GMarker(loc, markeropt);
                eventEntry.marker = marker;

                var date = calDateToStr(eventEntry.getTimes()[0]);
                var content = '<span class="map_bubble"><strong>Koncert</strong><br /><br />' +
                              'Kdy: ' + date + '<br />' +
                              'Co: <a target="_blank" href="' + eventEntry.link[0].href + '">' + eventTitle + '</a><br /><br /></span>';
                marker.js_onclick = getClickListenerSingle(marker, content);
                GEvent.addListener(marker, "click", marker.js_onclick);

                if (cm_concerts_shown) {
                  map.addOverlay(marker);
                }
              }
          }
}

function createConcertOverlay() {

    for (var i = 0; i < cm_concerts.length; i++ ) {
      var eventEntry = cm_concerts[i];
      var eventTitle = eventEntry.getTitle().getText();
//      outConsole('Event title = ' + eventTitle);
      if (eventEntry.getLocations().length > 0) {
        var eventLoc = eventEntry.getLocations()[0].valueString;
//        outConsole('Hledam: ' + eventLoc);
        cm_geocoder.getLatLng(eventLoc, locFoundFn(eventEntry, eventTitle));
      }
    }
}

function showConcertOverlay() {
    // Render albums
    for (var i in cm_concerts) {
        if (cm_concerts[i].marker) {
            var marker = cm_concerts[i].marker;
            map.addOverlay(marker);
        }
    }
}

function showOverlays(photos, cal) {
    map.clearOverlays();
    if (photos) { showAlbumOverlay();  }
    if (cal) { showConcertOverlay();  }
}

function getCalendarData() {
    var calendarService = new google.gdata.calendar.CalendarService('GoogleInc-jsguide-1.0');

    var callback = function(result) {
      cm_concerts = result.feed.entry;

//      outConsole('Kalendarovy feed stahnuty.');

      if (cm_geocoder) {
          createConcertOverlay();
      } else {
//          outConsole('Odkladam pridani do mapy, az bude natazena mapa');
      }
    }

    var handleError = function(error) {
      outConsole(error);
    }

    var query = new google.gdata.calendar.CalendarEventQuery(cm_cal_feed_url);
    var startMin = google.gdata.DateTime.fromIso8601(getTodayIsoTag());
    query.setMinimumStartTime(startMin);

    calendarService.getEventsFeed(query, callback, handleError);
}

function loadCalendarData() {
    google.load("gdata", "1");
    google.setOnLoadCallback(getCalendarData);
}

function switchAlbums() {
    var leg = document.getElementById("map_legend_albums");
    cm_albums_shown = !cm_albums_shown;
    if (cm_albums_shown) {
        leg.className = "map_blue_legend";
    } else {
        leg.className = "map_gray_legend";
    }
    showOverlays(cm_albums_shown, cm_concerts_shown);
}

function switchConcerts() {
    var leg = document.getElementById("map_legend_concerts");
    cm_concerts_shown = !cm_concerts_shown;
    if (cm_concerts_shown) {
        leg.className = "map_red_legend";
    } else {
        leg.className = "map_gray_legend";
    }
    showOverlays(cm_albums_shown, cm_concerts_shown);
}

loadCalendarData();
