

var eintraege = new Array();
var maxEntries = 6;
var blogHeight = 60;

//convert an Atom-formatted date string to a javascript-compatible date string
function convertAtomDateString(str)
{

	//YYYY-MM-DDThh:mm:ss[.f*](Z|-hh:mm|+hh:mm)
	var atomFormat = /^\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+-]\d{2}:\d{2})$/i;
//	if(!atomFormat.test(str)) return "";	//invalid format
	
	var months = new Array("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
	
	var year, month, date, hour, minute, second, offset;
	year = str.slice(0,4);
	month = months[1*str.slice(5,7)];	//Jan-Dec
	date = str.slice(8,10);		//01-31
	hour = str.slice(11,13);	//00-23
	minute = str.slice(14,16);	//00-59
	second = str.slice(17,19);	//00-59
	offset = "GMT";
	if(str.indexOf("Z") == -1)	//time zone offset specified
	{
		var x = str.lastIndexOf(":");
		offset += str.slice(x-3,x) + str.slice(x+1);
	}
	
	//DD MMM YYYY hh:mm:ss GMT[(+|-)hhmm]
	return date+" "+month+" "+year+" "+hour+":"+minute+":"+second+" "+offset;
}

function makediv(akt) {
	var blog = document.createElement("div")
	blog.setAttribute("id", "blog" + akt[0] + "_" + akt[2])
	blog.setAttribute("style", "display: none; width: 370px; height: "+blogHeight+"px;  background-color: #FFFFFF; color: #2C5F9C")
	
	
	var contentdiv = document.createElement("div");

	//datum berechnen
	var t = new Date();
	t.setTime(akt[2]*1000);

	var date = t.getDate();
	if(date < 10) date = "0" + date

	var month = t.getMonth()+1;
	if(month < 10) month = "0" + month

	var hours = t.getHours()+1;
	if(hours < 10) hours = "0" + hours

	var minutes = t.getMinutes()+1;
	if(minutes < 10) minutes = "0" + minutes

	var timeString = date + "." + month + "." + t.getFullYear() + " " + hours + ":" + minutes;

	contentdiv.innerHTML = "<img src=\"bilder.php?picture=avatare/"+ akt[6] +".jpg&hoehe=50\" style=\"margin-top:3px\" width=\"50\" height=\"50\" border=\"0\" alt=\"\" align=\"left\">" +
	"<a target=\"_blank\" href=\""+ akt[1] +"\"><b>" + akt[3] + "</b></a> <br> geschrieben am " + timeString + "<br>" + 
	 "im Blog von <a href=\"profil.php?name="+ akt[5] +"\">"+ akt[4] +"</a> <br><br>"

	blog.appendChild(contentdiv);

	return blog
}

function valueFromTagName(item, tagname) {
	var val = item.getElementsByTagName(tagname);
	if(val[0] && val[0].firstChild)
		return val[0].firstChild.nodeValue;
	else
		if(tagname == "link") {
			return val[0].attributes[2].nodeValue;
		} else {
			return "Keine Angabe";
		}
}


//gibt den feed zurück
function getFeed(url, sBlogID, sUser, sNickname, sPhotoname) {

	var req = null;
	var doc = null;
	try {
		req = new XMLHttpRequest();
	}
	catch(ms) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(nonms) {
			try {
			req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(fail) {
				req = null;
			}
		}
	}
	if( req != null) {
		req.open("POST", url, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.onreadystatechange = function() {
			if(req.status == 200 && req.readyState == 4) {

				//parser bauen

				if (window.ActiveXObject) {
					doc = new ActiveXObject("Microsoft.XMLDOM");
					doc.async = "false";
					doc.loadXML(req.responseText);
				} else {
					var parser = new DOMParser();
					doc = parser.parseFromString(req.responseText,"text/xml");
				}

				//HIER MUSS BEREITS GEPARSED WERDEN

				//Update aller referenzen und des HTML
				updateEintraege(parseFeed(doc.documentElement, sBlogID, sUser, sNickname, sPhotoname));

			}
		}
		
		req.send(null);
	}
	
}

function updateEintraege(tempObjects) {

	for (var i = 0; i < tempObjects.length; ++i) {

		var newblog = tempObjects[i];

		//insert
		var divbefor = document.getElementById("last")
		var arrbefor = 0
		var found = false;
		var newBlogIsTwice = false;
		for (var j = 0; j < eintraege.length; ++j) {
			var akt = eintraege[j]
			if(!found && akt[2] < newblog[2]) {
				divbefor = document.getElementById("blog" + akt[0] + "_" + akt[2])
				arrbefor = j
				found = true;
			}

			//wenn das blogeintrag schon drin ist, darf er nicht nocheinmal rein:
			if(akt[0] == newblog[0] && akt[2] == newblog[2]) {
				newBlogIsTwice = true;
			}

		}

		//element nur einfügen, wenn es in die top maxEntries gehört und nicht doppelt ist:
		if(!newBlogIsTwice && arrbefor < maxEntries) {

			var blog = makediv(newblog)
			document.getElementById("content").insertBefore(blog, divbefor)
			Effect.Appear("blog" + newblog[0] + "_" + newblog[2], { from: 0.0, to: 1.0, duration: 0.6 } );
			
	
			//newblog in das array eintraege einsortieren
			if(found) {
				eintraege.splice(arrbefor, 0, newblog);
			} else {
				if(eintraege) {
					eintraege[eintraege.length] = newblog;
				} else {
					eintraege = new Array();
					eintraege[0] = newblog;
				}
			}
		}
		//inserted
	}


	//wenn ein neues element in die top maxEntries eingefügt wurde, fällt vielleicht unten eines raus:
	if(eintraege.length > maxEntries) {
		//divs aus dem DOM Baum nehmen
		for (var j = maxEntries; j < eintraege.length; ++j) {
			var akt = eintraege[j]
			var toDelete = document.getElementById("blog" + akt[0] + "_" + akt[2])
			if(toDelete) {
				toDelete.parentNode.removeChild(toDelete);
			}
		}
		//aus dem array löschen
		eintraege = eintraege.slice(0, maxEntries);
	}

}


//nimmt feed und gibt array mit einträgen zurück
function parseFeed(feed, sBlogID, sUser, sNickname, sPhotoname) {
	var items = feed.getElementsByTagName('item');

	var itemsInThisFeed = new Array();

	for (var i = 0; i < items.length; ++i) {
		var title = valueFromTagName(items[i], 'title');
		var link = valueFromTagName(items[i], 'link');
		var pubDate = valueFromTagName(items[i], 'pubDate');

		itemsInThisFeed[i] = new Array(sBlogID, link, Date.parse(pubDate) / 1000 , title, sUser, sNickname, sPhotoname);
	}

	//ATOM
	if(itemsInThisFeed.length < 1) {
		var entries = feed.getElementsByTagName('entry');
	
		for (var i = 0; i < entries.length; ++i) {
			var title = valueFromTagName(entries[i], 'title');
			var link = valueFromTagName(entries[i], 'link');
			var pubDate = convertAtomDateString(valueFromTagName(entries[i], 'published'));
			
			itemsInThisFeed[i] = new Array(sBlogID, link, Date.parse(pubDate) / 1000 , title, sUser, sNickname, sPhotoname);
		}
	}

	return itemsInThisFeed;
}


//läd alles


function saveCache() {
	var cache = eintraege.slice(0, maxEntries);
	var serialized = new Array;
	
	for (var i = 0; i < cache.length; ++i) {
		var c = cache[i];
		serialized[i] = c.join("@\@");
	}
	
	//cache has be be stored in a cookie.
	var a = new Date();
	a = new Date(a.getTime() +1000*60*60*24);
	document.cookie = 'feeds=' + escape(serialized.join("@/@")) + '; expires=' +  a.toGMTString()+';';

}

function restoreCache() {
	var cache = getCookie("feeds");
	if(cache) {
		cache = cache.split("@/@");

		var unserialized = new Array();

		for (var i = 0; i < cache.length; ++i) {
			var c = cache[i];
			unserialized[i] = c.split("@\@");
		}
	
		if(unserialized.length > 1) {
			updateEintraege(unserialized);
		}
	}
}

function getCookie(name) {
  var mein_cookie = document.cookie; 
  if (mein_cookie.indexOf(name) == -1) {
    return null;
  }
  var anfang = mein_cookie.indexOf(name)
               + name.length + 1;
  var ende = mein_cookie.indexOf(";", anfang);
  if (ende == -1) {
    ende = mein_cookie.length;
  } 
  var laenge = ende - anfang;
  var cookie_wert = unescape(mein_cookie.substr(anfang,laenge));
  return cookie_wert;
}


