var msMonths = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var d_names = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function formatDate (d)
{
var curr_day = d.getDay();
var curr_date = d.getDate();
var sup = "";

	if (curr_date == 1 || curr_date == 21 || curr_date ==31)
	{
		sup = "st";
	}
	else if (curr_date == 2 || curr_date == 22)
	{
		sup = "nd";
	}
	else if (curr_date == 3 || curr_date == 23)
	{
		sup = "rd";
	}
	else
	{
		sup = "th";
	}
	var curr_month = d.getMonth();
	var curr_year = d.getFullYear();

	return d_names[curr_day] + " " + curr_date + sup + " " + m_names[curr_month] + " " + curr_year;
}
		
function getLanguage ()
{
var sLanguage;

	// Get the language from the broswer
	sLanguage = (navigator.userLanguage ? navigator.userLanguage : "");
	if ((sLanguage == "") && navigator.language)
		sLanguage = navigator.language;
	if ((sLanguage == "") && navigator.browserLanguage)
		sLanguage = navigator.browserLanguage;
	if (sLanguage == "")
		sLanguage = "en-gb";
	sLanguage = sLanguage.toLowerCase();
	return sLanguage;
}

function containsChars(sValue)
{
var iPos = 0;

	// Only allow 0-9, ",", "-", ".", " "
	while (iPos < sValue.length)
	{
		iChar = sValue.charCodeAt(iPos);
		if ((iChar != 32) && (iChar != 44) && (iChar != 45) && (iChar != 46) &&
			((iChar < 48) || (iChar > 57)))
			return true;

		iPos++;
	}

	return false;
}

function isDate(oElement)
{
var sDate;
var sLanguage;
var daDate;

	sDate = oElement.value;
	msDate = sDate.split("/");

	if (msDate.length != 3)
		msDate = sDate.split("-");
	if (msDate.length != 3)
		msDate = sDate.split(" ");
	if (msDate.length == 3)
	{
		if (msDate[2].length < 4)
		{
			if (msDate[2] < 80)
				msDate[2] = 2000 + parseInt(msDate[2], 10);
			else
				msDate[2] = 1900 + parseInt(msDate[2], 10);
		}

		sLanguage = getLanguage();

		// new Date() uses US format (mm/dd/yyyy) so convert
		if (containsChars(msDate[0]))
			sDate = msDate[1] + " " + msDate[0] + " " + msDate[2];
		else if (containsChars(msDate[1]))
			sDate = msDate[0] + " " + msDate[1] + " " + msDate[2];
		else if (sLanguage == "en-us")
		{
			if (msDate[0] > 12)
				return false;
			sDate = msDate[0] + "/" + msDate[1] + "/" + msDate[2];
		}
		else
		{
			if (msDate[1] > 12)
				return false;
			sDate = msDate[1] + "/" + msDate[0] + "/" + msDate[2];
		}
	}

	daDate = new Date(sDate);
	if (isNaN(daDate))
		return false;

	oElement.value = daDate.getDate() + " " + msMonths[daDate.getMonth()] + " " + daDate.getFullYear();

	return true;
}

function checkDate(oElement, bPrompt)
{
	if (oElement.value == "")
		return false;

	if (!isDate(oElement))
	{
		var sLanguage;
		var sError = "Invalid date: expecting format of 'dd mmm yyyy' or ";

		sLanguage = getLanguage();
		if (sLanguage == "en-us")
			sError += "'mm/dd/yyyy'";
		else
			sError += "'dd/mm/yyyy'";
		displayWarning(sError, bPrompt);
		return false;
	}
	return true;
}

