function addText(elem, plot, xpos, ypos, text) {
    o = plot.pointOffset({
        x: xpos,
        y: ypos
    });
    $(elem).append('<div style="position:absolute;left:' + o.left + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">' + text + '</div>');
}

function showPlots() {

var leyen = [[1275282000000, 1],[1275296400000, 1],[1275303600000, 1],[1275310800000, 2],[1275318000000, 1],[1275321600000, 6],[1275325200000, 10],[1275328800000, 3],[1275332400000, 1],[1275336000000, 4],[1275343200000, 3],[1275354000000, 1],[1275382800000, 7],[1275386400000, 11],[1275390000000, 6],[1275393600000, 8],[1275397200000, 4],[1275400800000, 4],[1275404400000, 2],[1275408000000, 63],[1275411600000, 136],[1275415200000, 4],[1275418800000, 47],[1275422400000, 70],[1275426000000, 54],[1275429600000, 51],[1275433200000, 32],[1275436800000, 11],[1275440400000, 5],[1275447600000, 1],[1275454800000, 1],[1275465600000, 6],[1275469200000, 27],[1275472800000, 36],[1275476400000, 51],[1275480000000, 107],[1275483600000, 73],[1275487200000, 55],[1275490800000, 53],[1275494400000, 58],[1275498000000, 23],[1275501600000, 32],[1275505200000, 10],[1275508800000, 18],[1275512400000, 43],[1275516000000, 52],[1275519600000, 39],[1275523200000, 17],[1275530400000, 1],[1275541200000, 1],[1275548400000, 3],[1275555600000, 13],[1275559200000, 11],[1275562800000, 126],[1275566400000, 110],[1275570000000, 33],[1275573600000, 17],[1275577200000, 2],[1275580800000, 6],[1275584400000, 1],[1275588000000, 7],[1275591600000, 3],[1275595200000, 5],[1275602400000, 2],[1275606000000, 1],[1275645600000, 3],[1275649200000, 4],[1275652800000, 1],[1275656400000, 1],[1275663600000, 3],[1275674400000, 1],[1275681600000, 2],[1275696000000, 1]];

var wulff = [[1275292800000, 1],[1275321600000, 1],[1275332400000, 1],[1275346800000, 1],[1275382800000, 1],[1275386400000, 1],[1275400800000, 1],[1275411600000, 1],[1275422400000, 1],[1275469200000, 1],[1275476400000, 1],[1275480000000, 1],[1275494400000, 1],[1275512400000, 1],[1275516000000, 1],[1275562800000, 4],[1275566400000, 10],[1275570000000, 10],[1275573600000, 13],[1275577200000, 5],[1275580800000, 66],[1275584400000, 22],[1275588000000, 64],[1275591600000, 102],[1275595200000, 80],[1275598800000, 10],[1275602400000, 17],[1275606000000, 24],[1275609600000, 13],[1275613200000, 6],[1275616800000, 4],[1275624000000, 2],[1275631200000, 1],[1275634800000, 4],[1275638400000, 6],[1275645600000, 11],[1275649200000, 27],[1275652800000, 30],[1275656400000, 24],[1275660000000, 13],[1275663600000, 21],[1275667200000, 5],[1275670800000, 11],[1275674400000, 6],[1275678000000, 16],[1275681600000, 11],[1275685200000, 2],[1275688800000, 2],[1275692400000, 4],[1275699600000, 1]];

var gauck = [[1275343200000, 1],[1275382800000, 1],[1275408000000, 1],[1275588000000, 12],[1275591600000, 19],[1275595200000, 27],[1275598800000, 3],[1275602400000, 7],[1275606000000, 4],[1275609600000, 3],[1275613200000, 3],[1275616800000, 1],[1275631200000, 1],[1275638400000, 2],[1275645600000, 11],[1275649200000, 14],[1275652800000, 19],[1275656400000, 15],[1275660000000, 13],[1275663600000, 19],[1275667200000, 7],[1275670800000, 7],[1275674400000, 10],[1275678000000, 19],[1275681600000, 31],[1275685200000, 7],[1275688800000, 6],[1275692400000, 7]];


var merkel = [[1275292800000, 1],[1275300000000, 3],[1275303600000, 2],[1275307200000, 1],[1275314400000, 36],[1275318000000, 44],[1275321600000, 65],[1275325200000, 43],[1275328800000, 14],[1275332400000, 8],[1275336000000, 14],[1275339600000, 3],[1275343200000, 10],[1275346800000, 7],[1275350400000, 1],[1275372000000, 1],[1275379200000, 2],[1275382800000, 5],[1275386400000, 4],[1275390000000, 3],[1275393600000, 3],[1275397200000, 6],[1275400800000, 2],[1275404400000, 5],[1275408000000, 2],[1275411600000, 3],[1275418800000, 4],[1275422400000, 9],[1275426000000, 6],[1275429600000, 9],[1275433200000, 5],[1275436800000, 6],[1275451200000, 1],[1275462000000, 1],[1275465600000, 1],[1275469200000, 3],[1275472800000, 8],[1275476400000, 6],[1275480000000, 6],[1275483600000, 4],[1275487200000, 5],[1275490800000, 3],[1275494400000, 2],[1275498000000, 1],[1275501600000, 8],[1275516000000, 5],[1275519600000, 3],[1275523200000, 3],[1275555600000, 1],[1275559200000, 3],[1275562800000, 5],[1275566400000, 3],[1275570000000, 5],[1275573600000, 4],[1275577200000, 1],[1275580800000, 38],[1275584400000, 2],[1275588000000, 13],[1275591600000, 29],[1275595200000, 18],[1275598800000, 3],[1275602400000, 1],[1275606000000, 3],[1275609600000, 4],[1275613200000, 2],[1275616800000, 2],[1275634800000, 1],[1275638400000, 1],[1275645600000, 1],[1275649200000, 4],[1275652800000, 3],[1275656400000, 3],[1275660000000, 5],[1275663600000, 5],[1275667200000, 4],[1275670800000, 1],[1275674400000, 4],[1275678000000, 9],[1275681600000, 1],[1275688800000, 2],[1275699600000, 2]];

var köhler = [[1275296400000, 1],[1275307200000, 1],[1275314400000, 1068],[1275318000000, 371],[1275321600000, 231],[1275325200000, 175],[1275328800000, 145],[1275332400000, 107],[1275336000000, 117],[1275339600000, 75],[1275343200000, 73],[1275346800000, 68],[1275350400000, 26],[1275354000000, 15],[1275357600000, 11],[1275364800000, 7],[1275368400000, 6],[1275372000000, 7],[1275379200000, 27],[1275382800000, 30],[1275386400000, 22],[1275390000000, 56],[1275393600000, 17],[1275397200000, 27],[1275400800000, 36],[1275404400000, 25],[1275408000000, 60],[1275411600000, 33],[1275415200000, 4],[1275418800000, 26],[1275422400000, 13],[1275426000000, 16],[1275429600000, 16],[1275433200000, 17],[1275436800000, 10],[1275440400000, 6],[1275454800000, 1],[1275458400000, 1],[1275465600000, 5],[1275469200000, 10],[1275472800000, 7],[1275476400000, 23],[1275480000000, 6],[1275483600000, 6],[1275487200000, 5],[1275490800000, 12],[1275494400000, 9],[1275498000000, 10],[1275501600000, 4],[1275505200000, 1],[1275508800000, 3],[1275512400000, 7],[1275516000000, 17],[1275519600000, 15],[1275523200000, 17],[1275530400000, 2],[1275537600000, 1],[1275548400000, 2],[1275555600000, 6],[1275559200000, 12],[1275562800000, 34],[1275566400000, 30],[1275570000000, 9],[1275573600000, 5],[1275577200000, 2],[1275580800000, 6],[1275584400000, 4],[1275588000000, 8],[1275591600000, 9],[1275595200000, 4],[1275598800000, 1],[1275602400000, 1],[1275606000000, 4],[1275609600000, 1],[1275616800000, 1],[1275634800000, 2],[1275645600000, 5],[1275656400000, 1],[1275660000000, 2],[1275663600000, 2],[1275670800000, 5],[1275674400000, 2],[1275678000000, 6],[1275681600000, 1],[1275692400000, 1],[1275696000000, 1]];


    options = {
        xaxis: {
            mode: "time",
            min: (new Date("2010/05/31 00:00")).getTime(),
            max: (new Date("2010/06/05 00:00")).getTime()
        },
        grid: {
            hoverable: true
        }
    };
    
    var mk = $.plot($("#merkel-koehler"),
        [makeData("Köhler", köhler, "rgba(255,0,0,0.5)"),
        makeData("Merkel", merkel, "rgba(0, 0, 0, 0.5)")],
        options);
  
    var ka = $.plot($("#kandidaten"),
        [makeData("Leyen", leyen, "rgba(64, 0, 0, 0.5)"),
        makeData("Wulff", wulff, "rgba(0, 0, 64, 0.5)"),
        makeData("Gauck", gauck, "rgba(255, 0, 0, 0.5)")],
        options);
  
    /* add some marks */
    var ruecktritt = (new Date("2010/05/31 14:05")).getTime();
    var eswirdwulff = (new Date("2010/06/03 16:05")).getTime();
      
    addText("#merkel-koehler", mk, ruecktritt, 1200, "Köhler tritt zurück");
    addText("#merkel-koehler", mk, eswirdwulff, 200, "Merkel: Wulff wird Kandidat");
  
    addText("#kandidaten", ka, ruecktritt, 25, "Köhler tritt zurück");
    addText("#kandidaten", ka, eswirdwulff, 120, "Merkel: Wulff wird Kandidat");

    /* add callback */
    $("#merkel-koehler").bind("plothover", onPlothover("mk"));
    $("#kandidaten").bind("plothover", onPlothover("lgw"));
}

function onPlothover(prefix) {
    return function (event, pos, item) {
        if (item) {
            index = item.dataIndex;
            datum = item.series.data[index];
            timestamp = datum[0];
            count = datum[1];
            showRetweets(prefix, item, timestamp);
        }
    }
}

var previousPoint = {mk: null, lgw: null}
var previousElem = {mk: null, lgw: null};

function showHoverRetweets(prefix, item, elem) {
    var x = item.pageX;
    var y = item.pageY;
    if (previousElem[prefix] != null && previousElem[prefix] != elem) {
        previousElem[prefix].css({
            display: 'none'
        });
    }
    elem.css({display: 'inline'});
    previousElem[prefix] = elem;
}

function formatTime(ts) {
    var weekdays = [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
    var months = [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli'];
    return weekdays[ts.getUTCDay()] + ", den " + ts.getUTCDate() + ". " + months[ts.getUTCMonth()] + " " + (1900 + ts.getYear())
        + " von " + (ts.getUTCHours()) + " Uhr bis " + (ts.getUTCHours() + 1) + " Uhr.";
}

function showRetweets(prefix, item, timestamp) {
    ts = new Date(timestamp);
    var l = item.series.label;
    tag = "#" + prefix + "-" + (ts.getUTCMonth() + 1) + "-" + ts.getUTCDate() + "-" + ts.getUTCHours();
    //$("#message").text("Found " + tag + " prefix=" + prefix);
    var elem = $(tag);
    if (elem.length > 0) {
        showHoverRetweets(prefix, item, elem);
        $("#" + prefix + "-head").text("Top-Retweets für " + formatTime(ts));
    }
}

function makeData(label, data, color) {
    return {
        label: label,
        data: data,
        bars: {
            show: true,
            barWidth: 1800000
        },
        color: color
    };
}

$(document).ready(showPlots);
