var req, tid;
var url = "../termine/aktuell/aktuell.html";

function getData(target) {
  tid = target;

  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    req.onreadystatechange = receiveRequest;
    req.open("GET", url, true);
    req.send(null);
  // IE/Windows ActiveX
  } else if (window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
      req.onreadystatechange = receiveRequest;
      req.open("GET", url, true);
      req.send();
    }
  }
}        


function receiveRequest() {
  // only if req shows "complete"
  if (req.readyState == 4) {
    // only if "OK"
    if (req.status == 200) {
      //alert(req.responseText);
      new Feed(req.responseText, tid);
    } else {
      if (!tid);
        //alert("There was a problem retrieving the XML data:\n" + req.statusText);
    }
  }
}

function Feed(txt, tid) {

  this.tid = tid;
  this.txt = txt;
  
  //Startseite
  this.displayData = function() {
    var item = {};
    var str = this.txt.replace(/\n|\r/g, " ");
    var rows = str.match(/\<tr[^\>]*\>.*?\<\/tr\>/ig);
    
    for (var i=1; i<rows.length; i++) {
      item = this.getItem(rows[i]);
      
      var dt = item.dt;
      if (dt.search(/-/) != -1) {
        dt = dt.replace(/.*\s?-\s?/, "");
        dt = this.formatDate(this.makeDate(dt)-6.048e8);
        //alert(dt);
      }
      
      if (this.compareDate(dt, item.tm)) {
        this.displayItem(item);
        break;
      }
    }
  
  }
  
  this.getItem = function(s) {
    var fields = s.match(/\<td[^\>]*\>.*?\<\/td\>/ig);
      
    if (!fields || fields.length < 4) return;
  
    var dt = this.clean(fields[0]);
    var tm = this.clean(fields[1]);
    var t =  this.clean(fields[2]);
    var title = t.replace(/\<br\s?\/?\>.*/, "");
    var desc =  t.replace(/.*?<br\s?\/?>/, "");
    var desc = desc.replace(/(<br\s?\/?>)+/ig, "; ");
    if (title == desc) desc = "";
    var pers = this.clean(fields[3]); //.replace(/(<(br\s?\/?>)+/ig, " "));
    var pers = pers.replace(/(<br\s?\/?>)+/ig, "; ");
  
    var content = desc;
    if (pers) 
      content += " mit " + pers;
    
    return {dt: dt, tm: tm, title:title, cont:content};
    
  }
  
  
  this.compareDate = function(dt, tm) {
    if (!dt) return;

    var dtAct = this.makeDate(dt, tm);
    var dtToday = new Date().getTime();
    
    return (dtAct > dtToday);
  
  }
  
  this.makeDate = function(dt, tm) {
    if (!dt) return;
    if (!tm) tm = "00:00";
    
    var d = dt.split(".");
    var t = tm.split(":");    
    var dtAct = new Date(d[2], d[1]-1, d[0], t[0], t[1], 0).getTime();
    
    return dtAct;
  
  }
  
  
  this.formatDate = function(dt) {
     var d = new Date(dt);
     
     return d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
  }
  
  
  this.displayItem = function(item) {
    var elem = document.getElementById(tid);
    
    var str = "<div class='news box' style='padding:5px 0;'><a href='termine/aktuell/aktuell.html'><b>N\u00e4chster Termin</b></a>: <big><b>" +
    item.dt + " " + item.tm + " \u2014 " + item.title + "</b></big>";
    if (item.cont) str += "<br>" + item.cont.replace(/<br\s?\/?>/g, "");
    str += "</div>";
    elem.innerHTML = str;
  }
  
  
  //RSS Feed
  this.formatRSS = function() {
    var item = [];
    var str = txt.replace(/\n|\r/g, " ");
    
    var tmp = str.match(/\<h1\>(.*)\<\/h1\>/i);
    if (tmp) {
      var title = tmp[1];
    } else {
      var title = "CCI Torrevieja - Aktuelle Termine";
    }
    var head = this.writeHeader(title);
    
    var tmp = str.match(/Stand\:\s*([\d\.]+)/i);
    var dt = tmp[1];
    
    var rows = str.match(/\<tr[^\>]*\>.*?\<\/tr\>/ig);
    
    for (var i=1; i<rows.length; i++) {
      item[i-1] = this.writeItem(rows[i], dt);
    }
  
    
    document.write(head + "\n");
    for (var i=0; i<item.length; i++) {
      document.write(item[i] + "\n");
    } 
    
    document.write("</channel></rss>");
     
  }
  
  
  this.writeHeader = function(t) {
    var s = '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">\n<channel>\n<title>CCI Torrevieja</title>\n<link>http://www.cci-torrevieja.com</link>\n';
  s += '<description><![CDATA[' + this.clean(t) + ']]></description>\n';
  s += '<language>de-de</language>\n<image><title>CCI Torrevieja</title><url>http://www.cci-torrevieja.com/inc/cci-logo.png</url><link>http://www.cci-torrevieja.com</link></image>\n';
    return s;
  }
  
  
  this.writeItem = function(s, dtPub) {
    var lnk = "http://www.cci-torrevieja.com/termine/aktuell.html";
    var fields = s.match(/\<td[^\>]*\>.*?\<\/td\>/ig);
      
    if (!fields || fields.length < 4) return;
      
    var dt = this.clean(fields[0]);
    var tm = this.clean(fields[1]);
    var guid = this.getGuid(dt, tm);
    var t = this.clean(fields[2]);
    var title = t.replace(/\<br\>.*/, "");
    var desc =  t.replace(/.*?\<br\>/, "");
    var pers = this.clean(fields[3].replace(/(<br\s?\/?>)+/ig, " &amp; "));
    
    
    var str = "<item>";
    str += this.formatTag("title", dt + ": " + title, true);
    str += this.formatTag("link", lnk);
    str += this.formatTag("description", desc + "<br>Vortragende(r):" + pers + "<br>Zeit: " + dt + " - " + tm + " Uhr", true);
    str += this.formatTag("guid", lnk + "#" + guid);
    str += this.formatTag("pubDate", dtPub);
    str += "</item>\n";
     
    return str;
  }
  
  
  this.formatTag = function(t, s, cdata) {
    var str = "<" + t + ">";
    if (cdata) str+= "<![CDATA[";
    str += s;
    if (cdata) str += "]]>";
    str += "</" + t + ">";
  
    return str;
  }
  
  this.clean = function(s) { 
    if (!s) return "";
    var str = s.replace(/<(br|\/p)\s?\/?>/ig, "\n");
    str = str.replace(/\<[^\>]*\>/ig, "");
    str = str.replace(/^\s+|\s+$/g, "");
    str = str.replace(/\&nbsp;/g, "");
    str = str.replace(/(\s?\n\s?)+/g, "<br>");
    
    return str;
  }
  
  this.getGuid = function(dt, tm) {
    return dt.replace(/[\.\:\s]/g, "") + tm.replace(/[\.\:\s]/g, "");
  }

  if (tid) this.displayData()
  else this.formatRSS();

}
