/*
	Set of scripts for mwgamera's jogger.
	Kacper Gutowski aka mwgamera <mwgamera@gmail.com>
	
	This is free software. You are free to copy, redistribute
	and/or modify it without any conditions. However I wll be
	happy if you give me a credit.
*/
/* Last modification date/time */
var jogger_config = {
	post: {
		tagName: "div",
		className: "post",
		mtime: {
			tagName: "p",
			className: "meta",
			changes: ", zmodyfikowany "
		},
	},
	/* +0200 */
	default_TZ: -120
};

window.onload = function() {
	/* Last modification times */
	var posts = findElements(document,jogger_config.post);
	for (var i=0; i<posts.length; i++) { // for each post
		var maxtime = -1;
		var et = ["ins","del"];
		for (var t in et) {
			var q = posts[i].getElementsByTagName(et[t]);
			for (var ii=0; ii<q.length; ii++) { // for each ins in post
				if (maxtime<0) maxtime = 0;
				if (q[ii].getAttribute("datetime")) {
					var d = new Date();
					d.setISO8601(q[ii].getAttribute("datetime"),jogger_config.default_TZ);
					if (d.getTime() > maxtime)
						maxtime = d.getTime();
				}
			}
		}
		if (maxtime>=0) { // post have changes
			var mte = findElements(posts[i],jogger_config.post.mtime);
			if (mte.length) {
				mte = mte[0];
				function atx(e,s) {
					if (!e) return;
					if (e.appendChild) {
						var n = document.createTextNode(s);
						e.appendChild(n);
					}
					else if (e.innerHTML)
						e.innerHTML = s;
					return;
				}
				atx(mte, jogger_config.post.mtime.changes);
				if (maxtime>0) { // last modification time is known
					var zp = function (num) { return ((num < 10) ? '0' : '') + num; }
					var d = new Date(maxtime);
					atx(mte, zp(d.getFullYear())
						+"-"+ zp(d.getMonth())
						+"-"+ zp(d.getDate())
						+"\xA0"+ zp(d.getHours())
						+":"+ zp(d.getMinutes())
						+":"+ zp(d.getSeconds()));
				}
			}
		}
	}

}

/* support functions: find elements of given tag/class */
function findElements(ancestor, kind) {
	if (!kind.tagName||!kind.className) return [];
	var r = [], a = ancestor.getElementsByTagName(kind.tagName);
	var x = new RegExp("(^|\\s)" +kind.className.replace(/\-/g, "\\-")+ "(\\s|$)");
	for (var i=0; i<a.length; i++)
		if (x.test(a[i].className))
			r.push(a[i]);
	return r;
}

/* Slightly modified version of http://delete.me.uk/2005/03/iso8601.html */
Date.prototype.setISO8601 = function (string, default_tz) {
	var date_rx = "([0-9]{4})(?:-([0-9]{2})(?:-([0-9]{2}))?)?";
	var time_rx = "([0-9]{2}):([0-9]{2})(?::([0-9]{2})(?:\.([0-9]+))?)?";
	var zone_rx = "(Z)|([+-])([0-9]{2})(?::?([0-9]{2}))?";
	var regexp = "^"+date_rx+"(?:T"+time_rx+"(?:"+zone_rx+")?)?$";
	var d = string.match(new RegExp(regexp));
	
	if (d) {
		var date = new Date(d[1], 0, 1);
		var offset = default_tz ?default_tz :0;
		
		if (d[2]) { date.setMonth(d[2]-1) }
		if (d[3]) { date.setDate(d[3]) }
		
		if (d[4]) { date.setHours(d[4]) }
		if (d[5]) { date.setMinutes(d[5]) }
		if (d[6]) { date.setSeconds(d[6]) }
		if (d[7]) { date.setMilliseconds(Number("0." + d[7]) * 1000) }
		
		if (d[8]) { offest = 0 }
		if (d[9]) {
		        offset = (Number(d[10]) * 60) + Number(d[11]);
	        	offset *= ((d[9] == '-') ? 1 : -1);
		}
		
		offset -= date.getTimezoneOffset();
		var time = (Number(date) + (offset * 60 * 1000));
		this.setTime(Number(time));
	}
}
