
/*
<!-- Original:  Sandeep Tamhankar (stamhankar@hotmail.com) -->
<!-- Web Site:  http://207.20.242.93 -->

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
*/
function IsValidTime(timeStr, fieldName) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.
	
	var timeValues = timeStrToArray(timeStr);
	if (timeValues == null) {
        alert(fieldName + " is not in a valid time format");
		return false;
	}
	
	var hour = timeValues[0];
	var minute = timeValues[1];
	var second = "";
	var ampm = timeValues[2];
	
	if (second=="") { second = null; }
	if (minute=="") { minute = null; }
	if (ampm=="") { ampm = null }
	
	if (hour < 0  || hour > 23) {
	alert("Hour must be between 1 and 12. (or 0 and 23 for without am or pm) in " + fieldName);
	return false;
	}
	if (hour <= 12 && ampm == null) {
	if (confirm("Please indicate which time format you are using in " + fieldName + ".  OK = 12 Hour, CANCEL = 24 Hour")) {
	alert("You must specify AM or PM.");
	return false;
	   }
	}
	if  (hour > 12 && ampm != null) {
	alert("You can't specify AM or PM for 24 clock. in " + fieldName);
	return false;
	}
	if (minute != null && (minute < 0 || minute > 59)) {
	alert ("Minute must be between 0 and 59. " + fieldName);
	return false;
	}
	if (second != null && (second < 0 || second > 59)) {
	alert ("Second must be between 0 and 59. " + fieldName);
	return false;
	}
	return true;
}

function timeChecker(timeObj){
        var am_pm = "";
        var time = timeObj.value;

        if(time.toLowerCase()=="noon"){
            time = "12:00 pm";
        }
        if(time.toLowerCase()=="midnight"){
            time = "12:00 am";
        }
            time = time.toLowerCase().replace(/[^0-9:apm]/g, '');

            var length = time.length;
            if(time.indexOf(":")!=-1){
                length=time.indexOf(":");
            }
            var hours = time.substr(0,length);
            if (hours>24){
                hours = 12;
                am_pm="am";
            }else if(hours<12 || hours==24){
                am_pm="am";
                   if(hours==24){
                    hours=hours-12;
                }
            }else if(hours>=12){
                am_pm="pm";
                if(hours>12){
                    hours=hours-12;
                }
            }
            time = hours + time.substr(length);

            if(time.toLowerCase().indexOf('a')!=-1){
                am_pm="am";
            }else if(time.toLowerCase().indexOf('p')!=-1){
                am_pm="pm";
            }

            time = time.toLowerCase().replace(/[^0-9:]/g, '');
            if (IsNumeric(time) && time <= 24) {
                time = time + ":00";
            }

            time = trim(time + " " + am_pm);

        if (!IsValidTime(time, time + " needs to be formated like 11:15 am")) {
            return false;
        }
        timeObj.value = time;
}

function timeStrToArray(timeStr){
// converts a time string to an array


if (timeStr.indexOf(":") == -1) {
	if (timeStr.toLowerCase().indexOf("p") == -1 && timeStr.toLowerCase().indexOf("a") == -1 && timeStr.indexOf(" ") == -1) {
		timeStr = timeStr + ":00";
	}
	else 
		if (timeStr.indexOf(" ") != -1) {
			var timeStrArray = timeStr.split(" ");
			timeStr = timeStrArray[0] + ":00" + timeStrArray[1];
		}
		else {
			var timeStrArray = timeStr.split(/\D+/);
		timeStr = timeStrArray[0] + ":00" + timeStrArray[1];
		} 
}

var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(a|p|A|P|AM|am|a.m.|A.M.|P.M.|p.m.|PM|pm))?$/;


var matchArray = timeStr.match(timePat);
if (matchArray == null) {
return null;
}
else {
		var hour = matchArray[1];
		var minute = matchArray[2];
		if (!minute) {
			minute = "";
		}
		var ampm = matchArray[6];
		if (!ampm) {
			ampm = "";
		}
		var returnArray = new Array();
		
		returnArray[1]=hour;
		returnArray[2]=minute;
		returnArray[3]=ampm;
		return returnArray;
	}	
}

// converts a string to milliseconds since epoch and converts to a time.
function stringToTime(timeStr){
	var timeValues = timeStrToArray(timeStr);
	if (timeValues == null) {
		return false;
	}
	
	var hour = parseInt(timeValues[1]);
	
	var minute = parseInt(timeValues[2]);
	if (!minute || minute=="") { minute = 0; }

	var ampm = timeValues[3];

	if (ampm.search(/p/i) != "-1") {
			hour=hour+12;
		}

	var totalminutes = hour*60+minute;
	var totalmillisec = totalminutes*60000;


	return totalmillisec;//in milliseconds	
}

// difference in milliseconds between two times given as as strings
function timeDiff(timeStr1, timeStr2){
	var timeDifference = stringToTime(timeStr2) - stringToTime(timeStr1);
	return timeDifference;
}

//  End -->
