Date.formatDate = function(format, _date)
{
	var ds = _date.split(/-|\s|:/);
	var _d;
	if(ds.length === 6) {
		_d = new Date(ds[0], ds[1], ds[2], ds[3], ds[4], ds[5]);
	} else {
		_d = new Date();	
		ds[0] = _d.getFullYear();
		ds[1] = _d.getMonth() + 1;
		ds[2] = _d.getDate();
		ds[3] = _d.getHours();
		ds[4] = _d.getMinutes();
		ds[5] = _d.getSeconds();
	}
	ds[6] = _d.getDay();
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var weeks = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
	var days = ['st','nd','rd','th'];
	var ret = [];
	var m,s;
	for(var i = 0, len = format.length; i < len; i++) {
		switch(format[i])	{
			case 'F':
				ret.push(months[ds[1] - 1]);
				break;
			case 'j':
				ret.push(1 * ds[2]);
				break;
			case 'S':
				m = ds[2] % 10;
				s = parseInt(ds[2] / 10);
				ret.push((m > 3 || m < 1) ? days[3] : (s == 1 ? days[3] : days[m]));
				break;
			case 'Y':
				ret.push(ds[0]);
				break;
			case 'H':
				ret.push(ds[3]);
				break;
			case 'i':
				ret.push(ds[4]);
				break;
			case 's':
				ret.push(ds[5]);
				break;
			case 'l':
				ret.push(weeks[ds[6]]);
				break;
			default:
				ret.push(format[i]);
		}	
	}	
	return ret.join('');
}

