/*
Documentation:

HTML:
<p class="countdown">
<span class="countdown-object"></span>
<span class="countdown-extra">will be released on</span>
<span class="countdown-date" title="[UTC DATETIME in YYYY/MM/DD [OPTIONAL]hh:mm:ss +0000[/OPTIONAL] format]">[LOCAL DATE]</span>
[OPTIONAL]<span class="countdown-location">[LOCATION]</span>[/OPTIONAL]
</p>
*/

var countdown = {
	start: function() {
		var els, elCnt, i, date, ext, extStr, extTxt, dateEl, tmpTxt;
		for(els = elementClass.get('countdown'), elCnt = els.length, i = 0; i < elCnt; i++) {
			date = elementClass.get('countdown-date', els[i])[0].getAttribute('title');
			ext = elementClass.get('countdown-extra', els[i])[0];
			extStr = (els[i].className.match(/extra-type-(\d)+/))?
				countdown.strings[els[i].className.match(/extra-type-(\d)+/)[1]][0] :
				extStr = countdown.strings[0][0];
			extTxt = document.createTextNode(extStr);
			ext.replaceChild(extTxt, ext.firstChild);
			dateEl = elementClass.get('countdown-date', els[i])[0];
			els[i].insertBefore(dateEl, els[i].firstChild);
			tmpTxt = document.createTextNode('? until ');
			emptyElement(dateEl);
			dateEl.appendChild(tmpTxt);
			countdown.run(els[i], date);
		}
	},

	run: function(aEl, aDate) {
		var today = new Date(),
		todayMs = today.getTime(),
		releaseMs = Date.parse(aDate);
		/*BEGIN TEST
		var release = new Date();
		release.setTime(releaseMs);
		debug('This month: '+today.getUTCMonth()+'Release month: '+release.getUTCMonth());
		//END TEST*/
		if (releaseMs <= todayMs) {
			var releasedStr, releasedTxt, location,
			objectEl = elementClass.get('countdown-object', aEl)[0];
			releasedStr = (aEl.className.match(/extra-type-(\d)+/))?
				countdown.strings[aEl.className.match(/extra-type-(\d)+/)[1]][1] :
				releasedStr = countdown.strings[0][1];
			releasedTxt = document.createTextNode(releasedStr);
			if (elementClass.get('countdown-location', aEl)[0])
				location = elementClass.get('countdown-location', aEl)[0];
			emptyElement(aEl);
			aEl.appendChild(objectEl);
			aEl.appendChild(releasedTxt);
			if (location)
				aEl.appendChild(location);
		}
		else {
			var remain = releaseMs - todayMs,
			rWks = Math.floor(remain/604800000);
			remain -= rWks*604800000;
			var rDys = Math.floor(remain/86400000);
			remain -= rDys*86400000;
			var rHrs = Math.floor(remain/3600000);
			remain -= rHrs*3600000;
			var rMins = Math.floor(remain/60000);
			remain -= rMins*60000;
			var rSecs = Math.floor(remain/1000),
			rHrs = this.normalise(rHrs),
			rMins = this.normalise(rMins),
			rSecs = this.normalise(rSecs),
			wTxt = (rWks > 1)?
				rWks+' weeks, ' :
				((rWks == 1)?
					rWks+' week, ' :
					''),
			dTxt = (rDys > 1)?
				rDys+' days, ' :
				((rDys == 1)?
					rDys+' day, ' :
					''),
			remainTxt = document.createTextNode(wTxt+dTxt+rHrs+':'+rMins+':'+rSecs+' until '),
			dateEl = elementClass.get('countdown-date', aEl)[0];
			dateEl.replaceChild(remainTxt, dateEl.firstChild);
			setTimeout(function() { countdown.run(aEl, aDate); }, 500);
		}
	},

	normalise: function(aNum) {
		return (aNum < 10)? '0' + aNum : aNum;
	},
	
	strings: Array(
		Array(' is released ', ' has been released '),
		Array(' returns ', ' has returned '),
		Array(' starts ', ' has started '),
		Array(' ends ', ' has ended ')
	)
}

eventListener.add(window, 'load', countdown.start, false);