feednavcfg={
// id of feed menu
feedsID:'feeds',
// loader image
loadingMessage:'',
// Server error message
serverError:'',
// Connection error message
requestFailed:'',
// feed item display. You need to provide a p with a class to hide for
// the description!
item:'<li><p><strong>%pubdate% : :</strong> <a href="%url%">%name%</a><span style="color:#666666;"> </span></p><p class="desc">%description%</p></li>',
// class to hide the item
itemHidden:'desc',
// class to show the item
itemShown:'showdesc',
// label for the link to the blog
itemFullLink:'More about: ',
// label for the closing link
closeLabel:'Close',
// amount of entries
itemCount:100,
maxSize: 10000,
// name of the server script
serverScript:'',
// if there is a timeout
timeoutMessage:'',
// wait 4 seconds for timeout
timeout:4000
}
feednav={
 toolong:null,
 timedout:null,
 init:function(){
  var feeds=document.getElementById(feednavcfg.feedsID);
  if(!feeds){return;}
  var entries=feeds.getElementsByTagName('a');
  for(var i=0;i<entries.length;i++){
   if(entries[i].href.search(/\.xml$/) <= -1){
    continue;
   }
   var itemlist=document.createElement('ul');
   feeds.appendChild(itemlist);
   feednav.callxhr(entries[i].href,itemlist);
  }
 },
 callxhr:function(url,returnElement){
  var request;
  try{
   request=new XMLHttpRequest();
  }catch(error){
   try {
    request=new ActiveXObject("Microsoft.XMLHTTP");
   }catch(error){
    request=null;
   }
  }
  if(request!=null){
   request.onreadystatechange = function(){
    if (request.readyState==1){
     feednav.toolong = window.setTimeout(
      function(){
       if(request.readyState==1){
        feednav.timedout=true;
        request.abort();
        returnElement.innerHTML=feednavcfg.timeoutMessage;
       }
      },
      feednavcfg.timeout
     );
     returnElement.innerHTML=feednavcfg.loadingMessage
    }
    if (request.readyState == 4 && !feednav.timedout){
     window.clearTimeout(feednav.toolong);
     if(request.status){
      if (/200|304/.test(request.status)){
       feednav.retrieved(request,returnElement);
      } else{
       feednav.failed(request,returnElement);
      }
     }else{
      feednav.retrieved(request,returnElement);
     }
    }
    return true;
   }
   var now=new Date();
   request.open('get',url);
   request.send(null);
  }else{
   //alert('We are sorry but AJAX is not supported');
  }
 },
 retrieved:function(request,returnElement){
  var content='',url,name,item,description;
  var data=request.responseXML;
  var items=data.getElementsByTagName('item');
  if(items.length<1){
   var error=data.getElementsByTagName('error')[0].firstChild.nodeValue;
   content=feednavcfg.serverError.replace('%error%',error);
  } else {
   var end=items.length>feednavcfg.itemCount?feednavcfg.itemCount:items.length;
   var curdate = '';
   for(var i=0;i<end;i++){
    url=(items[i].getElementsByTagName('link') != undefined && items[i].getElementsByTagName('link')[0].firstChild != undefined)?(items[i].getElementsByTagName('link')[0].firstChild.nodeValue):('#');
    name=(items[i].getElementsByTagName('title') != undefined && items[i].getElementsByTagName('title')[0].firstChild != undefined)?(items[i].getElementsByTagName('title')[0].firstChild.nodeValue):('');
    description=(items[i].getElementsByTagName('description') != undefined && items[i].getElementsByTagName('description')[0].firstChild != undefined)?(items[i].getElementsByTagName('description')[0].firstChild.nodeValue):('');
    pubdate=(items[i].getElementsByTagName('pubDate') != undefined && items[i].getElementsByTagName('pubDate')[0].firstChild != undefined)?(items[i].getElementsByTagName('pubDate')[0].firstChild.nodeValue):(curdate);
    pubtime=pubdate.substr(17).replace(':00 ', ' ');
    pubdate = pubdate.substr(0, 16);
    if(pubdate != curdate){
        content+='';
        curdate = pubdate;
    }
    item=feednavcfg.item;
    item=item.replace('%url%',url);
    item=item.replace('%name%',name);
    item=item.replace('%description%',description);
    item=item.replace('%pubtime%',pubtime);
	item=item.replace('%pubdate%',pubdate);

    content+=item;
    if(content.length > feednavcfg.maxSize){
        break;
    }
   }
  }
  returnElement.innerHTML=content;
 },
 failed:function(requester,returnElement){
  returnElement.innerHTML=feednavcfg.requestFailed.replace('%error%',requester.status);
 },
 getTarget:function(e){
  var target = window.event ? window.event.srcElement : e ? e.target : null;
  if (!target){return false;}
  while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){
   target=target.parentNode;
  }
  return target;
 },
 addEvent: function(elm, evType, fn, useCapture){
  if (elm.addEventListener){
   elm.addEventListener(evType, fn, useCapture);
   return true;
  } else if (elm.attachEvent) {
   var r = elm.attachEvent('on' + evType, fn);
   return r;
  } else {
   elm['on' + evType] = fn;
  }
 }
}
feednav.addEvent(window,'load',feednav.init,false)
