//<feedburner>
var feedburner = {
    id: '',
    container: undefined,
    outputObj: undefined,
    itemList: undefined,
    itemcount: 0,
    item: [], //<item-object array />
    itemGroupBy: {//<rem value="index of .this.item is stored for each prop" dtm="2009-05-30" />
        type: [],
        headline: [],
        userName: [],
        location: [],
        pupDate: [],
        eventStart: [],
        eventStartDate: []//<rem value="has no time value" dtm"2009-05-30" />
    },
    itemOrderBy: {//<rem value="index of .this.item is stored for each prop" dtm="2009-05-30" />
        type: [],
        headline: [],
        userName: [],
        location: [],
        pupDate: [],
        eventStart: [],
        eventStartDate: []//<rem value="has no time value" dtm"2009-05-30" />
    },
    dtmDayNameShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
    dtmMonthName: ['Jan.', 'Feb.', 'Mär.', 'Apr.', 'Mai', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'],
    htmlfeed: {
        obj: undefined
    },
    dsplFeed: function() {
        var item, s = '', sOut = '', o,
        aGroupByEventStart=this.itemGroupBy['eventStart'],
        aOrderByEventStart=this.itemOrderBy['eventStart'];
        //alert(aOrderByEventStart);

        //<>
        o=this.itemGroupBy['type']['Twitter'];
        if(o){
			s=getItem(o, this.item, 'TwitterNews', aOrderByEventStart, aGroupByEventStart);
            o=document.getElementById('TwitterNews');
            o.innerHTML=s+o.innerHTML;
            }
        //</>

        //<>
        o=this.itemGroupBy['type']['TerminGoogle'];
        if(o){
			s=getItem(o, this.item, 'GoogleKalender', aOrderByEventStart, aGroupByEventStart);
            o=document.getElementById('GoogleKalender');
            o.innerHTML=s+o.innerHTML;
            }
        //</>
        //<nested>
        function getItem(o, list, sCase, aOrderByEventStart, aGroupByEventStart){
            var item, sPage, s= '', sOut='', iOut=0, pupDate, startDate='', headline, EventStart;
            for(var d=0;d<aOrderByEventStart.length;d++){
                EventStart=aOrderByEventStart[d];
                var a=aGroupByEventStart[EventStart];
                if (iOut >= 2){break;};
                for(var i=0;i<a.length;i++){
                    if(contains(o,a[i])==false)continue;
                    iOut++;
                    item=list[a[i]];
                    pupDate=item['pupDate'];
                    sPage='twitter';
                    headline=item['headline'].split(' ');
                    if(headline.length>8){
                        headline.splice(8,headline.length-8);
                        headline=headline.join(' ');
                        headline+='...';
                        }
                    else headline=headline.join(' ');
                    
                    if(sCase=='GoogleKalender'){
                        sPage='kalender';
                        headline+=' (Start: '+createDateHeadline(item['eventStartDate'])+')';
                        }
                    if(feedburner.id=='AktuellesFischEspaniola1tpps9fs53feqcoove2h6iq59o'){
                        sPage='fisch-darmstadt/'+sPage;
                        }
                    else{
                        sPage='restaurant-darmstadt/'+sPage;
                        }
                    sOut+= '<div style="font-size:0.85em;text-align:right;">' + createDateHeadline(pupDate) + '</div>';
                    sOut+=(
                        '<div style="margin-bottom:0.75em;">'+
                            '<a href="/espanola/'+sPage+'.shtml?url=' + encodeURIComponent(item['link']) + '">'+
                            headline+
                            '</a>'+
                        '</div>'+
                        '');
                    }
                }
            return sOut;
            }
        function contains(a,o){
            for(var i=0;i<a.length;i++){if(a[i]==o)return true;}
            return false;
            }
        function createDateHeadline(dtm) {
            var dtmDayNameShort = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
            var dtmMonthName = ['Jan.', 'Feb.', 'Mär.', 'Apr.', 'Mai', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'];
            
            var s = '', dd, mm, yy, hh = '00', nn = '00', ss = '00', t = dtm;
            dd = t.getDate(); if (dd < 10) dd = '0' + dd;
            mm = (t.getMonth()); mm = dtmMonthName[mm];
            yy = t.getFullYear();
            hh = t.getHours(); if (hh < 10) hh = '0' + hh;
            nn = t.getMinutes(); if (nn < 10) nn = '0' + nn;
            
            s += dtmDayNameShort[t.getDay()] + '. ' + dd + '. ' + mm + ' ' + yy;
            return (s);
        }
        //</nested>
    },

	parseFeed:function(){
		var item, Obj, s='', o;
		//<init type="itemGroupBy">
		var aProp=['type','headline','eventStartDate','location','pupDate','eventStart','userImgURL','userName'];//
		for(var x=0;x<aProp.length;x++){
			if(!this.itemGroupBy[aProp[x]])this.itemGroupBy[aProp[x]]=[];
			}
		//</init>
		for(var i=0; i<this.itemcount; i++){
			Obj=this.itemList[i];
			//createDescription(Obj);<bugfix rem="wurde von fb gefixed (2009-08-31). behebt den Bug von buzzboost-Feedburner. firstseen: 26.08.2009" />
			s=Obj.getElementsByTagName('a')[0].firstChild.data;

			item=getItem(s, this.itemList[i]);
			if(item){
			    item.link=Obj.getElementsByTagName('a')[0].href;
			    o=Obj.getElementsByTagName('div')[0];
			    item.userName=o.getElementsByTagName('img')[0].alt;
			    item.author=o.getElementsByTagName('div')[0].getElementsByTagName('div')[0].getElementsByTagName('a')[0].firstChild.firstChild.data;
			    item.authorURL=o.getElementsByTagName('div')[0].getElementsByTagName('div')[0].getElementsByTagName('a')[0].href;
			    item.userURL=o.getElementsByTagName('img')[0].parentNode.href;
			    item.userImgURL=o.getElementsByTagName('img')[0].src;
			    item.HTML=Obj.innerHTML;
			    this.item[i]=item;//<!!!writeToObject />

			    for(var x=0;x<aProp.length;x++){
				    if(!this.itemGroupBy[aProp[x]][item[aProp[x]]]) this.itemGroupBy[aProp[x]][item[aProp[x]]]=[];
				    this.itemGroupBy[aProp[x]][item[aProp[x]]].push(i);
				    }
			    var iDate, oProp;
			    iDate=item.eventStartDate; oProp=this.itemOrderBy['eventStartDate']; if(!contains(oProp, iDate)){oProp.push(iDate);}
			    iDate=item.eventStart; oProp=this.itemOrderBy['eventStart']; if(!contains(oProp, iDate)){oProp.push(iDate);}
			    iDate=item.pupDate; oProp=this.itemOrderBy['pupDate']; if(!contains(oProp, iDate)){oProp.push(iDate);}
			    }
		    this.itemOrderBy['eventStartDate'].sort(function(a,b){return(Date.parse(a)-Date.parse(b));}).reverse();
		    this.itemOrderBy['eventStart'].sort(function(a,b){return(Date.parse(a)-Date.parse(b));}).reverse();
		    this.itemOrderBy['pupDate'].sort(function(a,b){return(Date.parse(a)-Date.parse(b));}).reverse();
            
			}
		//<nested>
		function getItem(sIn, Obj, iC){
			var param=[], a, eventDate, location, type='', url='', headline, s;
			var a=sIn.split(' - '); if(a.length>1){type=a[a.length-1];a.pop();} a=a.join(' - ');
			param.headline=a;
			param.pupDate=Obj.getElementsByTagName('p')[0].firstChild.data;
			param.pupDate=param.pupDate.split('-');
			param.pupDate=new Date(param.pupDate[0],(param.pupDate[1]-1),param.pupDate[2]);
			param.eventStartDate=param.pupDate;
			param.eventStart=param.pupDate;
			switch(type){
				case 'Google-Kalender':
					var aDescription=[], subType='';
					param.type='TerminGoogle';
					a=Obj.getElementsByTagName('div')[0].getElementsByTagName('div')[0];		
					var con=a.getElementsByTagName('div')[2];
					for(var i=0;i<con.childNodes.length;i++){
						var o=con.childNodes[i];
						if(o.nodeType==3){
							type=o.nodeValue;
							if(type.indexOf('Wann: ')==0)param.eventDate=type.split('Wann: ')[1];
							else if(type.indexOf('Erster Start: ')==0){param.eventIsRepeating=true;param.eventDate=type.split('Erster Start: ')[1];}
							else if(type.indexOf('Dauer: ')==0)param.eventDuration=type.split('Dauer: ')[1];
							else if(type.indexOf('Wo: ')==0)param.location=type.split('Wo: ')[1];
							else if(type.indexOf('Status: ')==0)param.eventStatus=type.split('Status: ')[1];
							else if(type=='Beschreibung:' || subType=='Beschreibung'){
								if(subType=='Beschreibung'){
									aDescription.push(o.nodeValue);
									}
								subType='Beschreibung';
								}
							}
						}
					if(aDescription.length)param.description=aDescription.join('<br />');//
					if(param.eventDate.indexOf(' CEST')<0)param.eventDate+=' CEST';
					if(iC<0)alert(
					    'eventDate: '+param.eventDate+
					    '\neventDuration: '+param.eventDuration+
					    '\nlocation: '+param.location+
					    '\neventStatus: '+param.eventStatus+
					    '\ndescription: '+param.description
					    );
					break;
				case '[twitter]':
					param.type='Twitter';
					break;
				default:
					param.type=undefined;
					break;
				}
			param.headline=param.headline.replace(/^\s\s*/, '').replace(/\s\s*$/, '');//trim

			var tZone, dd, mm, yy, hh='00', nn='00', ss='00', d1, d2, t;
			//<normEventDate>
			//<TerminGoogle type="repeating">
			if(param.eventIsRepeating){
				t=param.eventDate; 
				t=t.split(' '); 
				tZone=t[t.length-1];
				t.pop(); 
				d1=t[0].split('-');
				dd=d1[2];
				mm=getMonth(d1[1]);
				yy=d1[0];
				if(t[1])d1=t[1].split(':');
				if(d1.length>1){
					hh=d1[0];
					nn=d1[1];
					}
				t=new Date(yy, getMonth(mm), dd, hh, nn, ss); 
				param.eventStart=t;
				d1=feedburner.dtmDayNameShort[param.eventStart.getDay()]+' '+dd+'. '+mm+' '+yy+' '+hh+':'+nn;

				ss=param.eventDuration;
				t=new Date(yy, getMonth(mm), dd, hh, nn, ss); 
				param.eventEnd=t;
				dd=t.getDate();
				mm=(t.getMonth())+1;if(mm<10)mm='0'+mm;mm=getMonth(mm);
				yy=t.getFullYear();
				hh=t.getHours();if(hh<10)hh='0'+hh;
				nn=t.getMinutes();if(nn<10)nn='0'+nn;

				//param.eventEnd
				if(param.eventStart.getDate()!=param.eventEnd.getDate() || param.eventStart.getMonth()!=param.eventEnd.getMonth() || param.eventStart.getFullYear()!=param.eventEnd.getFullYear())d2=feedburner.dtmDayNameShort[t.getDay()]+' '+dd+'. '+mm+' '+yy+' '+hh+':'+nn;//xx '+t.getDate();//t;//
				else d2=hh+':'+nn;//xx '+t.getDate();//t;//
				param.eventDate=d1+' bis ' +d2+' '+tZone;
				}
			//</TerminGoogle>
			//<TerminTwitter>
			if(param.type=='TerminTwitter'){
				t=param.eventDate; t=t.split(' bis ');
				d1=t[0].split(' '); //t.pop();
				if(isNaN(t[d1.length-1])==true){
					d1[d1.length-2]=d1[d1.length-2]+' '+param.pupDate.getFullYear();
					}
				d1=d1.join(' ')
				if(t.length>1){
					d1=d1+' bis '+t[t.length-1]+' CEST';
					}
				t=d1;
				param.eventDate=t;
				}
			//</TerminTwitter>
			//</normEventDate>

			//<EventStartEnd>
			tZone, dd, mm, yy, hh='00', nn='00', ss='00', d1, d2, t;
			
			if(param.eventDate){
				//<TerminGoogle>
				if(param.type=='TerminGoogle' || param.type=='TerminTwitter'){// && !param.eventIsRepeating){
					t=param.eventDate; t=t.split(' '); t.pop(); t=t.join(' '); t=t.split(' bis ');

					d1=t[0];
					d1=d1.split(' ');
					dd=d1[1].substr(0,d1[1].length-1);if(dd.length<2)dd='0'+dd;
					mm=getMonth(d1[2]);if(mm<10)mm='0'+mm;
					yy=d1[3];
					if(d1[4]){
						nn=d1[4].split(':');
						hh=nn[0];
						nn=nn[1];
						}
					d1=dd+'.'+mm+'.'+yy+' '+hh+':'+nn;
					d1=new Date(yy, mm, dd, hh, nn);
					param.eventStart=d1;
					d1=new Date(yy, mm, dd);
					param.eventStartDate=d1;

					if(t[1]){
						d2=t[1].split(' ');
						hh='00';
						nn='00';
						if(d2.length==1){
							nn=d2[0].split(':');
							hh=nn[0];
							nn=nn[1];
							}
						else{
							dd=d2[1].substr(0,d2[1].length-1);if(dd-length<2)dd='0'+dd;
							mm=getMonth(d2[2]);if(mm<10)mm='0'+mm;
							yy=d2[3];
							if(d2[4]){
								nn=d2[4].split(':');
								hh=nn[0];
								nn=nn[1];
								}//hier fehlt else mit default 00
							}
						d2=dd+'.'+mm+'.'+yy+' '+hh+':'+nn;
						d2=new Date(yy, mm, dd, hh, nn);
						}
					if(d2)param.eventEnd=d2;
					}
				//<TerminGoogle>
				}

			if(param.eventDate=='Invalid Date' || param.eventStart=='Invalid Date')return false;
			if(param.eventDate=='NaN' || param.eventStart=='NaN')return false;
			return(param);

			//<nested>
			function getMonth(mm){
				if(!isNaN(mm))return(feedburner.dtmMonthName[(mm-1)]);
				for(var i=0;i<feedburner.dtmMonthName.length;i++){
					if(feedburner.dtmMonthName[i]==mm)return(i);
					}
				return(-1);
				}
			//</nested>
			}
		function createDescription(Obj){
		    //<bugfix rem="behebt den Bug von buzzboost-Feedburner. firstseen: 26.08.2009" />
		    var src=Obj.getElementsByTagName('div')[0], s=src.firstChild.data;
		    if(!s)return;
		    if(s.indexOf('rel="nofollow"')>1)src.innerHTML=s;
		    }
		function contains(a, o){
			for(var i=0;i<a.length;i++)if(a[i]+''==o)return(true);
			return(false);
			}
		//</nested>
		},
    init: function(id) {
        if (id) this.id = id;

        this.container = document.getElementById(this.id);
        //this.container.style.display = 'none';

        this.itemList = this.container.getElementsByTagName('li');
        this.itemcount = this.itemList.length;

        //this.outputObj = this.container.parentNode.appendChild(document.createElement('div'));
        //this.outputObj = this.container.parentNode.appendChild(document.createElement('div'));
        this.outputObj = document.getElementById('FeedNews');
        if(!this.outputObj)return false;
        this.outputObj = this.outputObj.appendChild(document.createElement('div'));
        //this.outputObj.innerHTML = '<p>' + this.itemcount + '</p>';

        this.parseFeed();
        this.dsplFeed();

        FeedItem.dspl()
        try {
            }
        catch (e) { }
    }
}
//</feedburner>

var FeedItem = {
    item:feedburner.item,
    url:false,
    dsplLastItem:false,
    setUrl:function() {
        var t = '', search = window.location.search, s = search;
        if(search != ''){
            search = search.split('?')[1];
            if (search) {
                s = search.split('&');
                for (var i = 0; i < s.length; i++) {
                    t = s[i].split('=');
                    if (!t[1]) break;
                    if (t[0] == 'url') {
                        this.url = decodeURIComponent(t[1]);
                        break;
                        }
                    }
                }
            }
        },
    dsplItemProp: function(item) {
        var s = '';
        if(item){
            for (var p in item) if (p != 'HTML') s += '<div>' + p + ':' + item[p] + '</div>';
            }
        s='<div style="display:none;">'+s+'</div>';
        return ('');
        },
    writeBoxLoading:function(){
        if(!this.url)this.setUrl();
        if(this.url || this.dsplLastItem)document.write('<div class="box info">lade Eintrag<span>...</span></div>');
        },
    dspl:function(){
        var docTitle=document.title.split(' - '), item = this.item, url;
        var location, description, s = '', o = document.getElementById('NewsBox');
        var startDate, pupDate, type;
        if(this.dsplLastItem==true && item[0])this.url=item[0]['link'];
        url = this.url;
        if (url && o) {
            s =(
                '<p><strong>Leider konnten wir den Eintrag nicht finden!</strong></p>'+
                '<p>Der gew&uuml;nschte Eintrag ist in dem aktuellen Newsfeed nicht mehr enthalten.</p>'+
                '');
            for (var i = 0; i < item.length; i++) {
                if(!item[i])continue;
                if(url == item[i]['link']) {
                    this.isLoading=true;
                    //o.innerHTML = o.innerHTML + this.dsplItemProp(item[i]);
                    description=(item[i]['description'] || '');
                    location=(item[i]['location'] || '');
                    startDate='Start am '+getDate(item[i]['eventStart']);
                    pupDate=getDate(item[i]['pupDate']);
                    type=item[i]['type'];
                    if(type=='TerminGoogle'){
                        type='Google-Kalender';
                        //description=(''+description).split('<br />').join('</p><p>');
                        //if(description.length)description=description.join('</p><p>');
                        //description=typeof(description)+' :: '+description;//.join('</p><p>');
                        }
                    if(type=='Twitter'){
                        startDate='';
                        }
                    if(!this.dsplLastItem)docTitle[0]=docTitle[0]+' gepostet am '+pupDate;
                    document.title=docTitle.join(' - ');
                    s = (
                            '<p class="datetime pupDate">Ver&ouml;ffentlicht via '+type+' am ' + pupDate + '</p>' +
                            '<p class="datetime">' + startDate + '</p>' +
                            '<p class="headline">' + linkify_plain(item[i]['headline']) + '</p>' +
                            '<p class="description">' + linkify_plain(description) + '</p>' +
                            '<p class="location">' + location + '</p>' +
                        '');
                }
            }
            s =(
                '<div class="box info">' + 
                s +'<p class="openURL"><a target="Aktuell" href="' + url + '">Hier k&ouml;nnen Sie den original '+type+'-Eintrag &ouml;ffnen.</a></p>'+
                '</div>'+
                '');
           o.innerHTML = s;// + o.innerHTML;
        }
    //<nested>
    function linkify_plain(text){
        if(!text) return text;
        text=text.replace(/((https?\:\/\/|ftp\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi,
            function(url){
                var nice=url;
                if(url.match('^https?:\/\/') ){
                    nice = nice.replace(/^https?:\/\//i,'')
                    }
                else url = 'http://'+url;
                //return '<a href="'+ url +'">'+ nice.replace(/^www./i,'') +'</a>';
                return '<a href="'+ url +'">'+ url +'</a>';
                });
        return text;
        }
    function getDate(dtm){
        var s=dtm;
        var jj=dtm.getFullYear();
        var mm=dtm.getMonth();mm++;if(mm<10)mm='0'+mm;
        var dd=dtm.getDate();if(dd<10)dd='0'+dd;
        s=dd+'.'+mm+'.'+jj
        return(s);
        }
    //</nested>
    }
}
