function parseDT(iso8601) {
        // todo use re, check zone, etc
        var d = new Date();
        d.setUTCFullYear(iso8601.substring(0,4));
        d.setUTCMonth(iso8601.substring(5,7));
        d.setUTCDate(iso8601.substring(8,10));
        d.setUTCHours(iso8601.substring(11,13));
        d.setUTCMinutes(iso8601.substring(14,16));
        d.setUTCSeconds(iso8601.substring(17,19));
        return d;
}

var MONTHS = ["January","February", "March","April","May","June",
        "July","August","September","October","November","December"];
function formatDT(d) {
        var ampm = "am";
        var hours = d.getHours();
        if (hours > 12) {
                hours-=12;
                ampm="pm";
        }

        return  MONTHS[d.getMonth()-1] + " " + d.getDate() + ", " + d.getFullYear() + " " + hours + ":" + d.getMinutes() + ampm;
}
function myzone(node) {
        if (node.tagName &&
                node.tagName.toLowerCase() == "abbr" &&
                node.getAttribute("title") &&
                (node.className.match(/\bdtstart\b/) ||
                        (node.className.match(/\bdtend\b/)))) {

                var d = parseDT(node.getAttribute("title"));
                node.innerHTML = formatDT(d);
                node.style.background = "#efe";
        } else {
                for(var i = 0; i < node.childNodes.length; i++)
                        myzone(node.childNodes[i]);
        }
}

function watchEvent(element, name, observer, useCapture) {
	if (element.addEventListener) element.addEventListener(name, observer, useCapture);
       	else if (element.attachEvent) element.attachEvent('on' + name, observer);
}

watchEvent(window, "load", function(){myzone(document.documentElement)}, false);
