var daysShort =   ["Sun", "Mon", "Tue", "Wed", 
                       "Thu", "Fri", "Sat"];
                       
function zf(num,ndecimals)
{
	var r
	r = '' + num
	if (1 == r.length) r = '0' + r;
 	return r;
}

Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return '&nbsp;';

    var d = this;

    return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return '\'' + d.getFullYear().toString().substr(2,2)
            case 'mm':   return (d.getMonth() + 1);
            case 'dd':   return d.getDate();
            case 'hh':   return zf(h = d.getHours() % 24, 2);
            case 'nn':   return zf(d.getMinutes(),2);
            case 'ss':   return zf(d.getSeconds(),2);
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            case 'ddd': return daysShort[d.getDay()];
            }
        }
    );
}

Date.prototype.formatUTC = function(f)
{
    if (!this.valueOf())
        return '&nbsp;';

    var d = this;
    
    return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return d.getUTCFullYear()
            case 'mm':   return (d.getUTCMonth() + 1);
            case 'dd':   return d.getUTCDate();
            case 'hh':   return zf(h = d.getUTCHours() % 24, 2);
            case 'nn':   return zf(d.getUTCMinutes(),2);
            case 'ss':   return zf(d.getUTCSeconds(),2);
            case 'a/p':  return d.getUTCHours() < 12 ? 'a' : 'p';
            case 'ddd': return daysShort[d.getUTCDay()];
            }
        }
    );
}
