if(window.location.hostname == 'localhost') {
  var jsonSource = 'test.json';
} else {
  var jsonSource = '/cgi-bin/icinga/status.cgi?hosts=all&style=hostservicedetail&hoststatustypes=12&hostprops=2097162&servicestatustypes=28&serviceprops=2097162&nostatusheader&jsonoutput'
}

$(document).ready(function() {
  getAlerts();
  setInterval(function() {
    getAlerts();
  }, 10000);
});

function getAlerts() {
  $('#alerts').spin({lines: 13, length: 20, width: 10, radius: 30});
  $.getJSON(jsonSource, function(data) {
    hosts = data.status.host_status;
    services = data.status.service_status;
    alerts = hosts.concat(services);
    alerts.sort(durationSorter);
    alerts.sort(statusSorter);
    $("span.label-danger").trigger('stopRumble');
    $('#alerts').spin(false).empty();
    $.each(alerts, function(i, e) {
        var rowClass = '';
        switch(e.status) {
          case 'DOWN':
            var rowClass = 'danger';
            break;
          case 'CRITICAL':
            var rowClass = 'danger';
            break;
          case 'WARNING':
            var rowClass = 'warning';
            break;
          case 'UNKNOWN':
            var rowClass = 'info';
            break;
        }
        if(typeof e.service == 'undefined') {
          e.service = 'Host Down';
        }
        e.host = e.host.replace(/\.magic-technik\.de|\.srv\.mediaways\.net/g, '');
        var row = '<tr class="'+rowClass+' status_main">'
            +'<td class="rowLabel text-center" valign="middle" rowspan="2"><span class="label label-'+rowClass+'">'+e.status+'</span></td>'
            +'<td>'+e.host+'</td>'
            +'<td>'+e.service+'</td>'
          +'</tr>';
        row_info = '<tr class="'+rowClass+' status_info"><td>'+e.duration+'</td><td>'+e.status_information+'</td></tr>';
        $('#alerts').append(row).append(row_info);
    });
    highlight("tr.danger.status_main td");
    $("span.label-danger").jrumble({x: 5, y: 5, rotation: 10, speed: 75}).trigger('startRumble');
  });
}

function highlight(selector) {
  $(selector).each(function() {
      $(this).animate( { color: "#f00" }, 200 ).animate( { color: "#000" }, 700, 'linear', function() {
        highlight(selector);
      });
  });
}

function getSeconds(str) {
  var sum = 0;
  var days = str.match(/(\d+)d/);
  var hours = str.match(/(\d+)h/);
  var minutes = str.match(/(\d+)m/);
  var seconds = str.match(/(\d+)s/);
  if (days) { sum += parseInt(days[1])*86400; }
  if (hours) { sum += parseInt(hours[1])*3600; }
  if (minutes) { sum += parseInt(minutes[1])*60; }
  return sum;
}

var durationSorter = function(a, b) {
   var aDur = getSeconds(a.duration);
   var bDur = getSeconds(b.duration);
   if(aDur > bDur) {
    return 1;
   }else{
    return -1;
   }
};

var statusSorter = function(a, b) {
  if(a.status == 'DOWN') {
    return -1;
  } else {
    if(b.status == 'DOWN') {
      return 1;
    } else {
      if(a.status == 'CRITICAL') {
        return -1;
      } else {
        if(b.status == 'CRITICAL') {
          return 1;
        }
        if(a.status == 'UNKNOWN') {
          return -1;
        } else {
          if(b.status == 'UNKNOWN') {
            return 1;
          }
        }
      }
    }
  }
};