// Date Functions
// JMT 2007


// Month names array
var arMonthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

// Month names array
var arDayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

// Extend the Date object
Date.prototype.format = function(formatstring) {

	if (!this.valueOf()) {
        return '&nbsp;';
	}

    var d = this;

    return formatstring.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|s|a\/p)/gi,
        function($1) {
            switch ($1.toLowerCase()) {
				case 'yyyy': return d.getFullYear();
				case 'mmmm': return arMonthNames[d.getMonth()];
				case 'mmm':  return arMonthNames[d.getMonth()].substr(0, 3);
				case 'mm':   return (d.getMonth() + 1).zeropad(2);
				case 'dddd': return arDayNames[d.getDay()];
				case 'ddd':  return arDayNames[d.getDay()].substr(0, 3);
				case 'dd':   return d.getDate();//.zeropad(2);
				case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
				case 'nn':   return d.getMinutes().zeropad(2);
				case 'ss':   return d.getSeconds().zeropad(2);
				case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
				case 's':	return d.getDate().ordinal(); 
            }
        }
    );
}


Number.prototype.ordinal=function() {
	
	return ((this % 10 == 1 && this % 100 != 11) ? 'st' :
			 (this % 10 == 2 && this % 100 != 12) ? 'nd' :
			 (this % 10 == 3 && this % 100 != 13) ? 'rd' : 'th');
}

Number.prototype.zeropad=function(n) {
    if(!n) n=0;
    var i=parseInt(this);
    var d=(''+Math.round((this-i)*Math.pow(10,n))).leftpad(2,'0');
    return i+'.'+d;
}

String.prototype.leftpad=function(n,s) {
  if(n<0) return;
  if(typeof s=='undefined') s=' ';
  var res=this;
  while(res.length<n) res=s+res;
  return res;
}


function writedate(formatstring) {
	document.write((new Date()).format(formatstring));	
}