//############################################################
//# VALIDATION
//############################################################

function isdate(datevalue) {
	var datearray = datevalue.split("/");
	if(datearray.length == 3) {
		if(isnumeric(datearray[0]) && isnumeric(datearray[1]) && isnumeric(datearray[2])) {
			if(datearray[0] > 0 && datearray[0] <= 12 && datearray[1] > 0 && datearray[1] <= 31 && datearray[2] > 1900  && datearray[2] <= 2500) {
				if(datearray[1] > daysinmonth(datearray[2],datearray[0])) {
					return(false);
				} else {
					return(true);
				}
			} else {
				return(false);
			}
		} else {
			return(false);
		}
	} else {
		return(false);
	}
}

function istime(timestr) {
	var validtime = true;
	var timepat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matcharray = timestr.match(timepat);
	if (matcharray == null) {
		validtime = false;
	}
	if (validtime) {
		hour = matcharray[1];
		minute = matcharray[2];
		second = matcharray[4];
		ampm = matcharray[6];
		if (second == "") {
			second = null;
		}
		if (ampm == "") {
			ampm = null
		}
		if (parseInt(hour) <= 0 || parseInt(hour) > 12) {
			validtime = false;
		}
		if (parseInt(hour) < 12 && ampm == null) {
			validtime = false;
		}
		if (parseInt(minute) < 0 || parseInt(minute) > 59) {
			validtime = false;
		}
		if (parseInt(second) != null && (parseInt(second) < 0 || parseInt(second) > 59)) {
			validtime = false;
		}
	}
	return(validtime);
}

//############################################################
//# RANGE
//############################################################

function daysinmonth(yearvalue,monthvalue) {
	if (yearvalue < 1900) {
		yearvalue = yearvalue + 1900;
	}
	var currentmonth = new Date(yearvalue, monthvalue, 1);
  var nextmonth = new Date(yearvalue, monthvalue + 1, 1);
	return(Math.ceil((nextmonth.getTime() - currentmonth.getTime() - 3600000)/86400000));
}

function withinrange(begindate,enddate,comparedate) {
	comparedate = new Date(comparedate);
	if (comparedate.getYear() < 1900) {
		begindateyear = begindate.getYear() + 1900;
		enddateyear = enddate.getYear() + 1900;
		comparedateyear = comparedate.getYear() + 1900;
	} else {
		begindateyear = begindate.getYear();
		enddateyear = enddate.getYear();
		comparedateyear = comparedate.getYear();
	}
	if (comparedateyear > enddateyear || comparedateyear == enddateyear && comparedate.getMonth() > enddate.getMonth() || comparedateyear == enddateyear && comparedate.getMonth() == enddate.getMonth() && comparedate.getDate() > enddate.getDate() || comparedateyear < begindateyear || comparedateyear == begindateyear && comparedate.getMonth() < begindate.getMonth() || comparedateyear == begindateyear && comparedate.getMonth() == begindate.getMonth() && comparedate.getDate() < begindate.getDate()) {
		return(false);
	} else {
		return(true);
	}
}

//############################################################
//# STRINGS
//############################################################

var monthname = new Array(11);

monthname[0] ="January";
monthname[1] ="February";
monthname[2] ="March";
monthname[3] ="April";
monthname[4] ="May";
monthname[5] ="June";
monthname[6] ="July";
monthname[7] ="August";
monthname[8] ="September";
monthname[9] ="October";
monthname[10] ="November";
monthname[11] ="December";

var monthabbr = new Array(11);

monthabbr[0] = "Jan";
monthabbr[1] = "Feb";
monthabbr[2] = "Mar";
monthabbr[3] = "Apr";
monthabbr[4] = "May";
monthabbr[5] = "Jun";
monthabbr[6] = "Jul";
monthabbr[7] = "Aug";
monthabbr[8] = "Sep";
monthabbr[9] = "Oct";
monthabbr[10] = "Nov";
monthabbr[11] = "Dec";

var weekdayabbr = new Array(6);

weekdayabbr[0] = "Sun";
weekdayabbr[1] = "Mon";
weekdayabbr[2] = "Tue";
weekdayabbr[3] = "Wed";
weekdayabbr[4] = "Thu";
weekdayabbr[5] = "Fri";
weekdayabbr[6] = "Sat";

var datesuffix = new Array(31);

datesuffix[1] = "st";
datesuffix[2] = "nd";
datesuffix[3] = "rd";
datesuffix[4] = "th";
datesuffix[5] = "th";
datesuffix[6] = "th";
datesuffix[7] = "th";
datesuffix[8] = "th";
datesuffix[9] = "th";
datesuffix[10] = "th";
datesuffix[11] = "th";
datesuffix[12] = "th";
datesuffix[13] = "th";
datesuffix[14] = "th";
datesuffix[15] = "th";
datesuffix[16] = "th";
datesuffix[17] = "th";
datesuffix[18] = "th";
datesuffix[19] = "th";
datesuffix[20] = "th";
datesuffix[21] = "st";
datesuffix[22] = "nd";
datesuffix[23] = "rd";
datesuffix[24] = "th";
datesuffix[25] = "th";
datesuffix[26] = "th";
datesuffix[27] = "th";
datesuffix[28] = "th";
datesuffix[29] = "th";
datesuffix[30] = "th";
datesuffix[31] = "st";