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++){
			feednav.addEvent(entries[i],'click',feednav.seed,false);
			entries[i].onclick=function(){return false;} // cheers Safari
		}
	},	
	seed:function(e){
		var t=feednav.getTarget(e);		
		if(t.nodeName.toLowerCase()!='a'){
			t=t.parentNode;
		}
		var itemlist=t.parentNode.getElementsByTagName('ul');
		if(itemlist.length>0){
			t.parentNode.removeChild(itemlist[0]);
		} else {
			itemlist=document.createElement('ul');
			t.parentNode.appendChild(itemlist);
			feednav.callxhr(t.href,itemlist);
		}
		feednav.cancelClick(e);
	},
	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',feednavcfg.serverScript+encodeURI(url)+'&t='+now.getTime());
			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;
			for(var i=0;i<end;i++){
				url=items[i].getElementsByTagName('link')[0].firstChild.nodeValue;
				name=items[i].getElementsByTagName('title')[0].firstChild.nodeValue;
				try{
					description=items[i].getElementsByTagName('description')[0].firstChild.nodeValue;
				}catch(error){
					description='';
				}
				item=feednavcfg.item;
				item=item.replace('%url%',url);
				item=item.replace('%name%',name);
				item=item.replace('%description%',description);
				content+=item;
			}
		}
		returnElement.innerHTML=content;
		if(returnElement.getElementsByTagName('a').length>0){
			var as=returnElement.getElementsByTagName('a');
			for(i=0;i<as.length;i++){
				//feednav.addEvent(as[i],'click',feednav.showItem,false);
				//as[i].onclick=function(){return false;} // cheers Safari
			}
		}
	},
	showItem:function(e){
		var t=feednav.getTarget(e);
		if(t.nodeName.toLowerCase()!='a'){
			t=t.parentNode;
		}
		var desc=t.parentNode.nextSibling;
		desc.className=desc.className==feednavcfg.itemHidden?feednavcfg.itemShown:feednavcfg.itemHidden;
		if(desc.getElementsByTagName('a').length==0){
			var readall=document.createElement('a');
			desc.appendChild(readall);
			readall.setAttribute('href',t.getAttribute('href'));
			readall.appendChild(document.createTextNode(feednavcfg.itemFullLink+t.innerHTML));
			readall=document.createElement('a');
			desc.insertBefore(readall,desc.firstChild);
			readall.setAttribute('href','#');
			readall.onclick=function(){this.parentNode.className=feednavcfg.itemHidden;return false}
			readall.appendChild(document.createTextNode(feednavcfg.closeLabel));
		}
		var x=0;
		var y=0;
		var h=t.offsetHeight;
		var w=t.offsetHeight;
		while (t != null){
			x += t.offsetLeft;
			y += t.offsetTop;
			t = t.offsetParent;
		}
		desc.style.left=x+w+'px';
		desc.style.top=y+h+'px';
		feednav.cancelClick(e);
	},
	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;
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		if (e && e.stopPropagation && e.preventDefault){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	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)
