﻿//<!--
		function FormatDate(dateValue, dateFormat, DateIsUTC)
		{



			//Variables used to format the date
			var dateToReturn = '';

			var months = new Array('Jan', 'Feb', 'Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
			var monthsLongName = new Array('January', 'February', 'March', 'April','May','June','July','August','September','October','November','December');

			var monthNumber = '';
			var monthName = '';

			var dayNumber;

			var yearNumber;

			var separator = '';

			var dateArray = new Array();

			var yearLength = ((dateFormat.lastIndexOf('y') - dateFormat.indexOf('y')) + 1 );

			try
			{



				//if a blank date entered then bomb out
				if(dateValue.length == 0) return '';

				//if no numbers are detected in date then bomb out
				if(!dateValue.match(/\d+/)) return dateValue;


				//First off, I would like to check that a valid dateFormat has been chosen, otherwise nothing will happen
				//*** IF YOU ARE ADDING A NEW DATE FORMAT PLEASE UPDATE THIS LIST ***
				var formats = new Array('dd/mm/yy','dd/mm/yyyy','dd MMM yyyy','dd MMM yy','ddMMMyy','ddMMMyyyy','yyyy/mm/dd')
				var validDateFormat = false
				for(var x = 0;x < formats.length; x++)
				{
					if(formats[x] == dateFormat)
					{
						validDateFormat = true;
						break;
					}
				}


				if(!validDateFormat)
				{
					var errorMessage = 'You have selected an invalid date format (' + dateFormat + ')\n\nAcceptable formats:\n';
					for(var x = 0;x < formats.length; x++)
					{
						errorMessage += '\n' + formats[x];
					}
					throw new UserException(errorMessage);
				}



				if(!isNaN(dateValue))
				{
					if (dateValue.length == 6 || dateValue.length == 8)
					{
						dayNumber = dateValue.substring(0, 2);
						monthNumber = dateValue.substring(2, 4);
						monthName = months[parseInt(parseFloat(dateValue.substring(2, 4))-1)];

						//yearNumber = dateValue.substring(4);
						//alert(yearLength);
						//alert(dateValue.substring(4));
						if(dateValue.substring(4).length == 2 && yearLength == 4)
						{
							yearNumber = "20" + dateValue.substring(4);
						}else if(dateValue.substring(4).length == 4 && yearLength == 2)
						{
							yearNumber = dateValue.substring(4);
						}else{
							yearNumber = dateValue.substring(4);
						}

					}else{
						throw new UserException("Numeric date in incorrect format e.g 010608 or 01062008");
					}
				}else{

					if(dateValue.indexOf(" ") > 0)
					{
						separator = ' ';
					}
					if(dateValue.indexOf(".") > 0)
					{
						separator = '.';
					}
					if(dateValue.indexOf("/") > 0)
					{
						separator = '/';
					}
					if(dateValue.indexOf("-") > 0)
					{
						separator = '-';
					}


					if(separator == '') //User has entered something like 01Jan08 - we need to split it out
					{
						//First we get the day
						var lastPos = 0;

						dateArray[0] = "";
						for(var x = 0; x < dateValue.length; x++)
						{
							if (!isNaN(dateValue.charAt(x)))
							{
								dateArray[0] += dateValue.charAt(x);
							}else{
								lastPos = x;
								break;
							}
						}

						dateArray[1] = "";
						for(var x = lastPos; x < dateValue.length; x++)
						{
							if (!isNaN(dateValue.charAt(x)))
							{
								lastPos = x;
								break;
							}else{
								dateArray[1] += dateValue.charAt(x);
							}
						}

						dateArray[2] = "";
						for(var x = lastPos; x < dateValue.length; x++)
						{
							if (!isNaN(dateValue.charAt(x)) && x < dateValue.length)
							{
								dateArray[2] += dateValue.charAt(x);
							}else{
								break;
							}
						}

						//alert(dateArray[2]);

					}else{
						//Split date into an array
						dateArray = dateValue.split(separator);
					}

					if(DateIsUTC)
					{
						if(dateArray[0]) yearNumber = dateArray[0];
						if(dateArray[1]) monthNumber = dateArray[1];
						if(dateArray[2]) dayNumber = dateArray[2];
						monthName = months[parseInt(parseFloat(dateArray[1])-1)];
					}else{




						//DAY
						if(dateArray[0])
						{
							if(dateArray[0].length <= 2)
							{
								if(dateArray[0].length == 1)
								{
									dayNumber = "0" + dateArray[0];
								}else{
									dayNumber = dateArray[0];
								}
							}else{
								throw new UserException("Invalid day");
							}
						}

						//MONTH
						if(dateArray[1])
						{
							if(!isNaN(dateArray[1]))
							{
								//Month is a number - check its length and append a '0' if required
								if(dateArray[1].length <= 2)
								{
									if(dateArray[1].length == 1)
									{
										monthNumber = "0" + dateArray[1];
									}else{
										monthNumber = dateArray[1];
									}
									monthName = months[parseInt(parseFloat(dateArray[1])-1)];
								}else{
									throw new UserException("Invalid month");
								}
							}else{
								//Month is characters - get the first 3 in case someone has entered month in long format
								if(dateArray[1].length >= 3)
								{
									dateArray[1] = dateArray[1].substring(0, 3);
									dateArray[1] = dateArray[1].toLowerCase()
									dateArray[1] = dateArray[1].substring(0,1).toUpperCase() + dateArray[1].substring(1);

									for(var x = 0; x < 12; x++)
									{
										if(dateArray[1] == months[x])
										{
											if(x < 10)
											{
												monthNumber = "0" + (x+1);
											}else{
												monthNumber = (x+1);
											}
											monthName = months[x];
										}
									}
									if(monthNumber.length == 0)
									{
										throw new UserException("Invalid month");
									}
								}else{
									throw new UserException("Invalid month");
								}
							}


							//YEAR
							if(dateArray[2])
							{
								if(dateArray[2].length == 2 || dateArray[2].length == 4)
								{
									if(dateArray[2].length == 2 && yearLength == 4)
									{

										if(!isNaN(dateArray[2]))
										{


											var dateToday = new Date();
											var todayYearString = dateToday.getYear().toString();

											//alert(parseInt(todayYearString.substring(3,4)))


											if((parseInt(dateArray[2]) > parseInt(todayYearString.substring(3,4)) + parseInt(15)))
											{
												yearNumber = "19" + dateArray[2];

											}else{
												yearNumber = "20" + dateArray[2];
											}
										}
									}else if(dateArray[2].length == 4 && yearLength == 2)
									{
										yearNumber = dateArray[2].substring(2,4);
									}else{
										yearNumber = dateArray[2];
									}
								}else{
									throw new UserException("Invalid year");
								}
							}
						}
					}

				}

				if(ValidateTheDate(dayNumber, monthNumber, yearNumber))
				{

					switch(dateFormat)
					{

						case "dd/mm/yy":
							dateToReturn = dayNumber + "/" + monthNumber + "/" + yearNumber
							break;

						case "dd/mm/yyyy":
							dateToReturn = dayNumber + "/" + monthNumber + "/" + yearNumber
							break;

						case "dd MMM yyyy":
							dateToReturn = dayNumber + " " + monthName + " " + yearNumber
							break;

						case "dd MMM yy":
							dateToReturn = dayNumber + " " + monthName + " " + yearNumber
							break;

						case "ddMMMyy":
							dateToReturn = dayNumber + monthName + yearNumber
							break;

						case "ddMMMyyyy":
							dateToReturn = dayNumber + monthName + yearNumber
							break;

						case "yyyy/mm/dd":
							dateToReturn = yearNumber + '/' + monthNumber + '/' + dayNumber
							break;
						default:
					}

					return dateToReturn;
				}else{
					throw new UserException("Invalid date");
				}


			}
			catch(ex)
			{
				alert(ex.message);
				return dateValue;
			}

		}


		// Create an object type UserException
		function UserException (message)
		{
		  this.message=message;
		  this.name="UserException";
		}

		// Make the exception convert to a pretty string when used as
		// a string (e.g. by the error console)
		UserException.prototype.toString = function ()
		{
		  return this.name + ': "' + this.message + '"';
		}



		function IsLeap(year){
			var yr=year;
			if ((parseInt(yr)%4) == 0){
				if (parseInt(yr)%100 == 0){
					if (parseInt(yr)%400 != 0){
						return false;
					}
					if (parseInt(yr)%400 == 0){
						return true;
					}
				}
				if (parseInt(yr)%100 != 0){
					return true;
				}
			}
			if ((parseInt(yr)%4) != 0){
				return false;
			}
		}


		//Function to check if a date is valid, includes leap years.
		function ValidateTheDate(day, month, year)
		{

			switch(month)
			{
				case "04":
				case "06":
				case "09":
				case "11":
					if(parseInt(parseFloat(day)) > 30)
					{
						return false;
					}
					break;

				case "02":
					if(IsLeap(year))
					{
						if(parseInt(parseFloat(day)) > 29)
						{
							return false;
						}
					}else{
						if(parseInt(parseFloat(day)) > 28)
						{
							return false;
						}
					}
					break;

				default:
					if(parseInt(parseFloat(day)) > 31)
					{
						return false;
					}
					break;

			}
			return true;
		}


		function IsDate(dateValue, dateFormat)
		{
			var months = new Array('Jan', 'Feb', 'Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
			var separators = new Array(' ','/','.','-');
			var dateSeparator = '';
			var formatSeparator = '';
			var dayNumber ='';
			var monthNumber ='';
			var monthName ='';
			var yearNumber ='';

			//Quick test, date should be the same length as the format.
			if(dateValue.length != dateFormat.length) return false;


			//Lets check for the separators
			//Start with the format separators
			for(var x = 0;x < dateFormat.length;x++)
			{
				if(formatSeparator != '') break;

				for(var y = 0; y < separators.length;y++)
				{
					if(dateFormat.charAt(x) == separators[y])
					{
						formatSeparator = separators[y];
						break;
					}
				}
			}

			//Then get the date separators
			for(var x = 0;x < dateValue.length;x++)
			{
				if(dateSeparator != '') break;

				for(var y = 0; y < separators.length;y++)
				{
					if(dateValue.charAt(x) == separators[y])
					{
						dateSeparator = separators[y];
						break;
					}
				}
			}
			//If they dont match then date cannot be in the desired format
			if(formatSeparator != dateSeparator) return false;



			//Ok, all tests good so far, now we need to go a bit more in depth.
			for(var x = 0; x < dateFormat.length; x++)
			{
				switch(dateFormat.charAt(x))
				{
					case "d":
						if(isNaN(dateValue.charAt(x)))
						{
							return false;
						}else{
							dayNumber += dateValue.charAt(x);
						}
						break;

					case "m":
						if(isNaN(dateValue.charAt(x)))
						{
							return false;
						}else{
							monthNumber += dateValue.charAt(x);
						}
						break;

					case "M":
						if(!isNaN(dateValue.charAt(x)))
						{
							return false;
						}else{
							monthName += dateValue.charAt(x);
						}
						break;

					case "y":
						if(isNaN(dateValue.charAt(x)))
						{
							return false;
						}else{
							yearNumber += dateValue.charAt(x);
						}
						break;
				}
			}

			//If we got this far then the data types are correct for the format, we have our date values, lets check if the actual date itself is a valid date.

			//If we have a month name, we need to get it's index and number from the array
			if(monthName != '')
			{
				for(var x = 0; x < months.length; x++)
				{
					if(months[x] == monthName)
					{
						monthNumber = x + 1;
					}
				}
			}
			if(monthNumber != '')
			{
				return ValidateTheDate(dayNumber, monthNumber, yearNumber);
			}else{
				return false;
			}


			//If we get this far then no conflict found, date must be in good format, but we should have exited at the Validate function, this is merely a catch all.
			return true;
		}
//-->
