// Date extension for Prototype 1.6 by Gareth Hughes <garethh@rdeurotech.com>
// This script is property of R&D Eurotech and 3WM Ltd.

Date.prototype.format = function(string) {
	var result = "";
	string.toArray().each(function(char) {
			switch (char) {
				default:
					result += char;
					break;
				case "d":
					var _s = this.getUTCDate().toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "D":
					var _s = "";
					switch (this.getUTCDay()) {
						case 0: _s = "Sun"; break;
						case 1: _s = "Mon"; break;
						case 2: _s = "Tue"; break;
						case 3: _s = "Wed"; break;
						case 4: _s = "Thu"; break;
						case 5: _s = "Fri"; break;
						case 6: _s = "Sat"; break;
					}
					result += _s;
					break;
				case "j":
					result += this.getUTCDate().toString();
					break;
				case "l":
					var _s = "";
					switch (this.getUTCDay()) {
						case 0: _s = "Sunday"; break;
						case 1: _s = "Monday"; break;
						case 2: _s = "Tuesday"; break;
						case 3: _s = "Wednesday"; break;
						case 4: _s = "Thursday"; break;
						case 5: _s = "Friday"; break;
						case 6: _s = "Saturday"; break;
					}
					result += _s;
					break;
				case "N":
					var _d = this.getUTCDay();
					if (!_d) _d = 7;
					result += _d.toString();
					break;
				case "S":
					var _s = "";
					switch (this.getUTCDate()) {
						case 1:
						case 21:
						case 31:
							_s = "st";
							break;
						case 2:
						case 22:
							_s = "nd";
							break;
						case 3:
						case 23:
							_s = "rd";
							break;
						default:
							_s = "th";
							break;
					}
					result += _s;
					break;
				case "w":
					result += this.getUTCDay().toString();
					break;
//				case "z":
//				case "W":
				case "F":
					var _s = "";
					switch (this.getUTCMonth()) {
						case 0: _s = "January"; break;
						case 1: _s = "February"; break;
						case 2: _s = "March"; break;
						case 3: _s = "April"; break;
						case 4: _s = "May"; break;
						case 5: _s = "June"; break;
						case 6: _s = "July"; break;
						case 7: _s = "August"; break;
						case 8: _s = "September"; break;
						case 9: _s = "October"; break;
						case 10: _s = "November"; break;
						case 11: _s = "December"; break;
					}
					result += _s;
					break;
				case "m":
					var _s = (this.getUTCMonth()+1).toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "M":
					var _s = "";
					switch (this.getUTCMonth()) {
						case 0: _s = "Jan"; break;
						case 1: _s = "Feb"; break;
						case 2: _s = "Mar"; break;
						case 3: _s = "Apr"; break;
						case 4: _s = "May"; break;
						case 5: _s = "Jun"; break;
						case 6: _s = "Jul"; break;
						case 7: _s = "Aug"; break;
						case 8: _s = "Sep"; break;
						case 9: _s = "Oct"; break;
						case 10: _s = "Nov"; break;
						case 11: _s = "Dec"; break;
					}
					result += _s;
					break;
				case "n":
					result += (this.getUTCMonth()+1).toString();
					break;
//				case "t":
//				case "L":
//				case "o":
				case "Y":
					result += this.getUTCFullYear().toString();
					break;
				case "y":
					result += this.getUTCFullYear().toString().substr(2);
					break;
				case "a":
					result += (this.getUTCHours() >= 12) ? "pm" : "am";
					break;
				case "A":
					result += (this.getUTCHours() >= 12) ? "PM" : "AM";
					break;
//				case "B":
				case "g":
					var _h = this.getUTCHours();
					result += (_h > 12 ? _h - 12 : _h).toString();
					break;
				case "G":
					result += this.getUTCHours().toString();
					break;
				case "h":
					var _h = this.getUTCHours();
					var _s = (_h > 12 ? _h - 12 : _h).toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "H":
					var _s = this.getUTCHours().toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "i":
					var _s = this.getUTCMinutes().toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "s":
					var _s = this.getUTCSeconds().toString();
					result += (_s.length < 2) ? "0"+_s : _s;
					break;
				case "u":
					result += this.getUTCMilliseconds();
					break;
//				case "e":
//				case "I":
//				case "O":
//				case "P":
//				case "T":
//				case "Z":
//				case "c":
//				case "r":
				case "U":
					result += this.getTime();
					break;
			}
		}.bind(this));
	return result;
}