var array;
var elementCount = 0;
var curElement = 0;

function initArray(i) {

  array = new Array(i);
  elementCount = i;
}

function addData(d) {

  if (curElement < elementCount) {
    array[curElement] = d;
    curElement+=1;
  }
}

function getData(i) {

  return array[i];
}

function dataIsValid() {

  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="TIMERDELAY") {
      lu = new Date();
      c = new Date();
      for (var j=0;j<elementCount;j++) {
        if (array[j][0]=="CSTIME") {
          lu.setUTCFullYear(array[j][1], array[j][2]-1, array[j][3]);
          lu.setUTCHours(array[j][4], array[j][5], array[j][6], 0);
        }
      }
      if ( (((c-lu)/1000/60)-1) >= array[i][1]) {
	return false;
      }
    }
  }

  return true;
}

function getStatus(p) {

  /* check if value is still valid */
  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="TIMERDELAY") {
      lu = new Date();
      c = new Date();
      for (var j=0;j<elementCount;j++) {
        if (array[j][0]=="CSTIME") {
          lu.setUTCFullYear(array[j][1], array[j][2]-1, array[j][3]);
          lu.setUTCHours(array[j][4], array[j][5], array[j][6], 0);
        }
      }
      if ( (((c-lu)/1000/60)-1) >= array[i][1]) {
	for (var j=0;j<elementCount;j++) {
          if (array[j][0]=="STATUS") {
            if (array[j][1]==p) {
              return 40071;
            }
          }
        }
      }
    }
  }

  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="STATUS") {
      if (array[i][1]==p) {
        return array[i][2];
      }
    }
  }

  return undefined;
}

function getStatusDesc(s) {

  if (s == undefined) return "Unknown";
  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="STATUS") {
      if (array[i][2]==s) {
        return array[i][3];
      }
    }
  }

  return "Unknown";
}

function getStatusImage(p) {

  var s;
  s = "online/images/" + p + "_";
  switch (getStatus(p)) {
    case 40071: s += "rot";
    break;
    case 40072: s += "gruen";
    break;
    case 40073: s += "gelb";
    break;
    case 40074: s += "rot";
    break;
    case 40075: s += "rot";
    break;
    case 40076: s += "gelb";
    break;
    case 40077: s += "gruen";
    break;
    case 40079: s += "gelb";
    break;
    case 40080: s += "gelb";
    break;
    default: s += "rot";
    break;
  }
  return s + ".gif";
}

function getStandardStatusDesc(p) {

  var stsDesc;

  if (p == "ICQ") {
    switch (getStatus(p)) {
      case 40071: return "Offline";
      break;
      case 40072: return "Online";
      break;
      case 40073: return "Abwesend";
      break;
      case 40074: return "Nicht stören";
      break;
      case 40075: return "Abwesend";
      break;
      case 40076: return "Beschäftigt";
      break;
      case 40077: return "Für Chat bereit";
      break;
      default: return "Unknown";
      break;
    }
  }
  else if (p == "MSN") {
    switch (getStatus(p)) {
      case 40071: return "Offline";
      break;
      case 40072: return "Online";
      break;
      case 40073: return "Abwesend";
      break;
      case 40075: return "Ausser Haus";
      break;
      case 40076: return "Beschäftigt";
      break;
      case 40079: return "Am Telefon";
      break;
      case 40080: return "Beim Essen";
      break;
      default: return "Unknown";
      break;
    }
  }
  else return getStatusDesc(getStatus(p));
}

function getStatusMsg(p) {

  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="STATUS") {
      if (array[i][1]==p) {
        return array[i][4];
      }
    }
  }

  return "Unknown";
}

function getUpdateTime() {

  d = new Date();
  for (var i=0;i<elementCount;i++) {
    if (array[i][0]=="CSTIME") {
      d.setUTCFullYear(array[i][1], array[i][2]-1, array[i][3]);
      d.setUTCHours(array[i][4], array[i][5], array[i][6], 0);
    }
  }

  return d;
}
