// configuration variables
var bSecondInclude = false;
var bAmPm = true;
var b4digitsYear = true;
var pmDefault = 1;
var amDefault = 8;
var defaultToToday = false;
var defaultToNow = false;

// global variables
var strAmPm = null;

// function to parse date field
function parseDate(dateField, strFormat)
{
    // defautl format
    var format = "M/d/y"
    
    if(strFormat != null)
		format = strFormat;
   
	var date = new Date();
	var strDate = "";
	
	if(dateField.value != "")
	{
		var strDay = "";
		var strMonth = "";
		var strYear = "";
		
		// replace other separators ("-. ") w/ '/'
		var parts = trim(dateField.value).replace(/-/g,"/").replace(/\./g,"/").replace(/ /g,"/").split("/");
		
		if(parts.length == 2)	// in case of 3/5
		{
			strMonth = parts[0];
			strDay = parts[1];
		}
		else if(parts.length == 3)	// in case of 3/23/99
		{
			strMonth = parts[0];
			strDay = parts[1];
			strYear = parts[2];
		}
		else if(parts.length == 1)	// in case of no separator
		{
			if(parts[0].length >= 6)	// 032599 or 03251999
			{
				strMonth = parts[0].substring(0,2);
				strDay = parts[0].substring(2,4);
				strYear = parts[0].substring(4);
			}
			else if(parts[0].length >= 3)	// 0325
			{
				strMonth = parts[0].substring(0,2);
				strDay = parts[0].substring(2);
			}
			else if(parts[0].length >= 1)	// 25
			{
				strDay = parts[0];
			}
			else
				alert('Incorrect date format');
		}
		else
		{
			alert('Incorrect date format');
		}
		
		if(strMonth == "" || (parseInt(strMonth) > 12))
		{
			strMonth = date.getMonth() + 1;
		}
		
		if(strDay == "" || (parseInt(strDay) > 31))
		{
			strDay = date.getDate();
		}
		
		if(strYear == "")
		{
			strYear = date.getYear();
		}
		
		strDate += formatDate(strMonth, strDay, strYear);
		
	}
	else
	{
		if(defaultToToday)
			strDate += formatDate(date.getMonth()+1, date.getDate(), date.getYear());
		
	}
	dateField.value = strDate;
	
}


// function to eliminate white space before and after string.
function trim(str)
{
	var nStartIndex=0;
	var nEndIndex=str.length-1;
	
	while(str.charAt(nStartIndex) == ' ')
	{
		nStartIndex++;
	}
	
	while(str.charAt(nEndIndex) == ' ')
	{
		nEndIndex--;
	}	
	return str.substring(nStartIndex,nEndIndex+1);	
}

function removeLeadingZero(strNumber)
{
	var index = 0;
	while(strNumber.charAt(index) == '0' && index < strNumber.length)
	{
		index++;
	}
	if(index != strNumber.length)	
		return parseInt(strNumber.substring(index));
	return 0;
}

// function to format date
function formatDate(strMonth, strDay, strYear)
{
	if(b4digitsYear)
	{
		if(parseInt(strYear) <= 20)
			strYear = (2000 + parseInt(strYear));
		else if(parseInt(strYear) < 100)
			strYear = (1900 + parseInt(strYear));
	}
			
	return strMonth + "/" +  strDay + "/" + strYear;
}

// funtion to parst time field
function parseTime(timeField)
{
	var date = new Date();
	var strDate = "";
	strAmPm = null;
	if(timeField.value != "")
	{
		var strHour = "00";
		var strMinute = "00";
		var strSecond = "00";
		var amPm = -1;
		var parts = trim(timeField.value).replace(/\./g,":").split(":");
		
		if(parts.length == 3)	// in case 8:00:00 or 8:00:00 am/pm
		{
			strHour = parts[0];
			strMinute = parts[1];
			strSecond = parts[2];
			amPm = hasAmPm(strSecond);
			if(amPm > 0)
				strSecond = trim(strSecond.substring(0,amPm));
		}
		else if(parts.length == 2)	// in case 8:00 or 8:00 am/pm
		{
			strHour = parts[0];
			strMinute = parts[1];
			amPm = hasAmPm(strMinute);
			if(amPm > 0)
				strMinute = trim(strMinute.substring(0,amPm));
		}
		else if(parts.length == 1)	// in case 8, 830, 8am, etc
		{
			var time = trim(parts[0]);
			
			//alert(time);
			amPm = hasAmPm(time);			
			if(amPm > 0)
				time = trim(time.substring(0,amPm));
			//alert(time);	
			if(time.length  > 4)	// in case 83000 or 080000
			{
				strSecond = time.substring(time.length-2);
				strMinute = time.substring(time.length-4,time.length-2);
				strHour = time.substring(0,time.length-4);
			}
			else if(time.length > 2)
			{
				strMinute = time.substring(time.length-2);
				strHour = time.substring(0,time.length-2);
			}
			else
			{
				strHour = time;
			}
		}
		else
			alert('Invalid time format');
		
		strDate = formatTime(removeLeadingZero(strHour),removeLeadingZero(strMinute),removeLeadingZero(strSecond));
	}
	else
	{
		if(defaultToNow)
			strDate = formatTime(date.getHours(),date.getMinutes(), date.getSeconds());
	}
	timeField.value = strDate;
}

// function to check if there is amPm indicator
function hasAmPm(str)
{
	var index = str.toLowerCase().indexOf("a");
	if(index == -1)
	{
		index = str.toLowerCase().indexOf("p");
		if(index != -1)
			strAmPm = "PM";
	}
	else
		strAmPm="AM";
			
	return index;
}

// format time
function formatTime(hour, min, second)
{
	if(bAmPm)
	{
		if(hour >= 12)
		{
			if(Math.round(hour/12) % 2)			
				strAmPm = "PM";
			else
				strAmPm = "AM";
			hour = (hour % 12);
			if(hour == 0)
				hour = 12;
		}
	}
	
	if(strAmPm == null)
	{
		strAmPm = "AM";
		if(hour >= pmDefault && hour < amDefault)
			strAmPm = "PM";
	}
			
	return		"" + ((hour > 0)?hour:12) + ":" + 
				(min < 10?"0"+min:min) + 
				(bSecondInclude?":" + (second < 10?"0"+second:second):"") +
				(bAmPm?" " + strAmPm:""); 		
}

function getTimeInMinutes(time)
{
	var hour = parseInt(time.substr(0, time.indexOf(":")));
	var offset = 0;
	if((time.indexOf("P") != -1) && (hour != 12))
		offset = 12;

	hour += offset;
	var minute = parseInt(time.substr(time.indexOf(":")+1, time.length-1));
	return hour*60+minute;
}