/****************************************
/* Developed By:  Brian Mowery          *
/***************************************/
function GetDate(date){
	var testDate = new Date(date);
	var Today = new Date();
	var Millenium, Century, Year;
	var returnDate;
	
	try{
		if(isNaN(testDate)){
			returnDate = "Invalid Date";
		}
		else{
			returnDate = testDate;
			Year = testDate.getFullYear().toString();
			if(date.indexOf(Year) == -1){
				// Two digit Year Entered
				Millenium = parseInt(Today.getFullYear().toString().substr(0, 1)) * 1000;
				Century = parseInt(Today.getFullYear().toString().substr(1, 2)) * 100;
				Year = (Millenium + Century + parseInt(testDate.getFullYear().toString().substr(2, 4))).toString();
				returnDate.setFullYear(Year);
			}
		}
	}
	catch(e){
		returnDate = "Invalid Date";
	}
	
	return returnDate;
}

function DateFormat(date, FormatMask){
	var testDate;
	var returnDate = "";
	var Months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var Days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	var CurrentMask = "";
	var FormatCharacter;
	var PreviousCharacter;
	
	try{
		PreviousCharacter = FormatMask.charAt(0);
		testDate = GetDate(date);
		
		if(testDate != "Invalid Date"){
			for(var x = 0; x < FormatMask.length; x++){
				FormatCharacter = FormatMask.charAt(x);
				if(FormatCharacter == PreviousCharacter){
					CurrentMask += FormatCharacter;
				}
				else{
					returnDate += ReplaceMaskWithDatePart(testDate, CurrentMask);
					CurrentMask = FormatCharacter;
					PreviousCharacter = FormatCharacter;
				}
			}
			returnDate += ReplaceMaskWithDatePart(testDate, CurrentMask);
			
			returnDate = FormatDaySuffix(returnDate);
		}
		else{
			returnDate = "Invalid Date";
		}
	}
	catch(e){
		returnDate = date;
	}
	
	return returnDate;
}

function ReplaceMaskWithDatePart(testDate, FormatMask){
	var Months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var Days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	var Month = testDate.getMonth();
	var Day = testDate.getDate();
	var returnDatePart = "";

	try{	
		switch(FormatMask){
			case "m":
				returnDatePart = ++Month;
				break;
			case "mm":
				Month++;
				if(Month.toString().length == 1){
					Month = "0" + Month.toString();
				}
				returnDatePart = Month;
				break;
			case "mmm":
				returnDatePart = Months[Month].substr(0, 3);
				break;
			case "mmmm":
				returnDatePart = Months[Month];
				break;
			case "d":
				returnDatePart = Day;
				break;
			case "dd":
				if(Day.toString().length == 1){
					Day = "0" + Day.toString();
				}
				returnDatePart = Day;
				break;
			case "ddd":
				returnDatePart = Days[testDate.getDay()].substr(0,3);
				break;
			case "dddd":
				returnDatePart = Days[testDate.getDay()];
				break;
			case "yy":
				returnDatePart = testDate.getFullYear().toString().substr(2, 4);
				break;
			case "yyyy":
				returnDatePart = testDate.getFullYear().toString();
				break;
			default:
				returnDatePart = FormatMask;
				break;
		}
	}
	catch(e){
	
	}
	
	return returnDatePart;
}

function FormatDaySuffix(FormattedDate){
	var re = new RegExp();
	var day;
	var SearchResults;
	var returnDate;
	var SuffixCase;
	var Suffix;
	
	try{
		re.compile("(\\d{1,2})(th)", "i");
		SearchResults = FormattedDate.match(re);
		
		if (SearchResults != null){
			switch(SearchResults[1].charAt(SearchResults[1].length - 1)){
				case "1":
					Suffix = "st";
					break;
				case "2":
					Suffix = "nd";
					break;
				case "3":
					Suffix = "rd";
					break;
				default:
					Suffix = "th";
					break;
			}
			if(SearchResults[2].charAt(0) == SearchResults[2].charAt(0).toUpperCase()){
				Suffix = Suffix.charAt(0).toUpperCase() + Suffix.charAt(1);
			}
			if(SearchResults[2].charAt(1) == SearchResults[2].charAt(1).toUpperCase()){
				Suffix = Suffix.charAt(0) + Suffix.charAt(1).toUpperCase();
			}
			returnDate = FormattedDate.replace(SearchResults[0], SearchResults[1] + Suffix);
		}
		else{
			returnDate = FormattedDate;
		}
	}
	catch(e){
		returnDate = FormattedDate;
	}
	
	return returnDate;
}