//objects inside the RSS2Item object
function RSS2Enclosure(encElement) {
  if (encElement == null)
  {
    this.url = null;
    this.length = null;
    this.type = null;
  }
  else
  {
    this.url = encElement.getAttribute("url");
    this.length = encElement.getAttribute("length");
    this.type = encElement.getAttribute("type");
  }
}

function RSS2Guid(guidElement) {
  if (guidElement == null)
  {
    this.isPermaLink = null;
    this.value = null;
  }
  else
  {
    this.isPermaLink = guidElement.getAttribute("isPermaLink");
    this.value = guidElement.childNodes[0].nodeValue;
  }
}

function RSS2Source(souElement) {
  if (souElement == null)
  {
    this.url = null;
    this.value = null;
  }
  else
  {
    this.url = souElement.getAttribute("url");
    this.value = souElement.childNodes[0].nodeValue;
  }
}

//object containing the RSS 2.0 item
function RSS2Item(itemxml) {
  //required
  this.title;
  this.link;
  this.description;

  //optional vars
  this.author;
  this.comments;
  this.pubDate;

  //optional objects
  this.category;
  this.enclosure;
  this.guid;
  this.source;

  var properties = new Array("title", "link", "description", "author", "comments", "pubDate", "content:encoded" , "encoded");
  var tmpElement = null;
  for (var i=0; i<properties.length; i++)
  {
    tmpElement = itemxml.getElementsByTagName(properties[i])[0];
								if (properties[i] == 'content:encoded' && typeof(tmpElement)=="object" ) properties[i]='encoded';
    if (tmpElement != null)
      eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
  }

  this.category = new RSS2Category(itemxml.getElementsByTagName("category")[0]);
  this.enclosure = new RSS2Enclosure(itemxml.getElementsByTagName("enclosure")[0]);
  this.guid = new RSS2Guid(itemxml.getElementsByTagName("guid")[0]);
  this.source = new RSS2Source(itemxml.getElementsByTagName("source")[0]);
}

//objects inside the RSS2Channel object
function RSS2Category(catElement) {
  if (catElement == null)
  {
    this.domain = null;
    this.value = null;
  }
  else
  {
    this.domain = catElement.getAttribute("domain");
    this.value = catElement.childNodes[0].nodeValue;
  }
}

//object containing RSS image tag info
function RSS2Image(imgElement) {
  if (imgElement == null)
  {
  this.url = null;
  this.link = null;
  this.width = null;
  this.height = null;
  this.description = null;
  }
  else
  {
    imgAttribs = new Array("url","title","link","width","height","description");
    for (var i=0; i<imgAttribs.length; i++)
      if (imgElement.getAttribute(imgAttribs[i]) != null)
        eval("this."+imgAttribs[i]+"=imgElement.getAttribute("+imgAttribs[i]+")");
  }
}

//object containing the parsed RSS 2.0 channel
function RSS2Channel(rssxml) {
  //required
  this.title;
  this.link;
  this.description;

  //array of RSS2Item objects
  this.items = new Array();

  //optional vars
  this.language;
  this.copyright;
  this.managingEditor;
  this.webMaster;
  this.pubDate;
  this.lastBuildDate;
  this.generator;
  this.docs;
  this.ttl;
  this.rating;

  //optional objects
  this.category;
  this.image;

  if (window.ActiveXObject)
   null;
      else if (window.XMLHttpRequest) {
   }

  var chanElement = rssxml.getElementsByTagName("channel")[0];
  var itemElements = rssxml.getElementsByTagName("item");

  for (var i=0; i<itemElements.length; i++)
  {
    Item = new RSS2Item(itemElements[i]);
    this.items.push(Item);
    //chanElement.removeChild(itemElements[i]);
  }

  var properties = new Array("title", "link", "description", "language", "copyright", "managingEditor", "webMaster", "pubDate", "lastBuildDate", "generator", "docs", "ttl", "rating");
  var tmpElement = null;
  for (var i=0; i<properties.length; i++)
  {
    tmpElement = chanElement.getElementsByTagName(properties[i])[0];
    if (tmpElement!= null)
      eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
  }

  this.category = new RSS2Category(chanElement.getElementsByTagName("category")[0]);
  this.image = new RSS2Image(chanElement.getElementsByTagName("image")[0]);
}

//PROCESSES

//uses xmlhttpreq to get the raw rss xml
function GetXmlData(url, objId, nitems, text_processor, title, titlelength, descriptionlength) {	
  if (nitems == undefined) nitems = 3;
  if (titlelength == undefined) titlelength = 50;
  if (descriptionlength == undefined) descriptionlength = 50;
  var xhr;
  //call the right constructor for the browser being used
  if (window.ActiveXObject) {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
  } else if (window.XMLHttpRequest) {
   xhr = new XMLHttpRequest();
   if (xhr.overrideMimeType) {
       xhr.overrideMimeType('text/xml');
   }
  } else {
    alert("not supported");
  }
  //prepare the xmlhttprequest object
  xhr.open("GET",url,true);
  xhr.setRequestHeader("Cache-Control", "no-cache");
  xhr.setRequestHeader("Pragma", "no-cache");
  if (xhr.overrideMimeType) {
      xhr.overrideMimeType('text/xml');
  }
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      if (xhr.status == 200) {
        if (xhr.responseText != null) {
          processNItemsRSS(objId, nitems, xhr.responseXML, text_processor, title, titlelength, descriptionlength);
        } else {
          alert("Failed to receive RSS file from the server - file not found.");
          return false;
        }
      } else {
        alert("Error code " + xhr.status + " received: " + xhr.statusText);
      }
    }
  }
  //send the request
  xhr.send(null);
}

//processes the received rss xml
function processNItemsRSS(objId, nitems, rssxml, text_processor, title, titlelength, descriptionlength) {

  RSS = new RSS2Channel(rssxml);

  //default values for html tags used
  var startItemTag = "";//"<li id='rssitem_title'>";
  var endItemTag = "";//"</li>";
  var startTag = "";//"<ul>";
  var endTag = "";//"</ul>";

  //populate the items
  document.getElementById(objId).innerHTML = "";

  cntItems = (RSS.items.length < nitems)?RSS.items.length:nitems;
  item_html = '<h3><a href="' + RSS.link + '">' + title + '</a></h3>'

  if (cntItems>0) item_html += startTag;
  
  for (var i=0; i<cntItems; i++) {
    item_html += '<div class="rssitem"><h4>' + '<a href="' + ((RSS.items[i].link == null) ? "" : RSS.items[i].link) + '">';
    itemtitle = RSS.items[i].title;
    // strip twitter name in title 
    if (text_processor == twitter_format) {
      var pos = itemtitle.indexOf(": ");
      if (pos >= 0) itemtitle = itemtitle.substring(pos+2);
    }
    if (itemtitle.length > titlelength) itemtitle = itemtitle.substring(0,titlelength) + '...'; 
    item_html += itemtitle + '</a></h4>';
    item_html += ((RSS.items[i].pubDate == null) ? "" : '<span>' + formatDate(RSS.items[i].pubDate) + '</span>') ;
    var text = RSS.items[i].encoded;
    if (text_processor && typeof text_processor == 'function') eval("text="+text_processor+"('"+text+"', " + descriptionlength + ");");					
    item_html += ((text == null) ? "" : "<br />" + text);
    item_html += '</div>';
    item_html += endItemTag;
  }
  if (cntItems>0) {
    item_html += endTag;
    document.getElementById(objId).innerHTML = item_html;
  }
	setTimeout("if (typeof sifr_replace == 'function') sifr_replace();",200);
  return true;
}

var d_names = new Array("zondag", "maandag", "dinsdag",
"woensdag", "donderdag", "vrijdag", "zaterdag");

var m_names = new Array("januari", "februari", "maart", 
"april", "mei", "juni", "juli", "augustus", "september", 
"oktober", "november", "december");

function formatDate( str ){
	var d = new Date (str);
	var formatted = d_names[d.getDay()] + " " + d.getDate() + " ";
	formatted += m_names[d.getMonth()] + " ";
	formatted += d.getFullYear();
	return formatted;
}

function rss_format(text, descriptionlength) {
  if (text != null && text !='undefined') {
    var pos = text.indexOf("<hr>");
    if (pos >= 0)  text = text.substring(pos+4);
    var pos = text.indexOf("<");
    if (pos >= 0)  text = text.substring(0,pos);
    text = text.substring(0,descriptionlength) + "...";
    text = '<p>'+text+'</p>';    
    return text;
  }
}

function twitter_format(text, descriptionlength) {
  return rss_format(text, descriptionlength);
}

var xhr;
