function isDate(p_Expression)
{
	return !isNaN(new Date(p_Expression));		// <<--- this needs checking
}
/*______________________________________________________________________________________________________________________________________________________________________*/
/*����������������������������������������������������������������������������������������������������������������������������������������������������������������������*/
function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear)
{
	if(!isDate(p_Date1)){return "invalid date: '" + p_Date1 + "'";}
	if(!isDate(p_Date2)){return "invalid date: '" + p_Date2 + "'";}
	var dt1 = new Date(p_Date1);
	var dt2 = new Date(p_Date2);

	// get ms between dates (UTC) and make into "difference" date
	var iDiffMS = dt2.valueOf() - dt1.valueOf();
	var dtDiff = new Date(iDiffMS);

	// calc various diffs
	var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
	
	var nMilliseconds = iDiffMS;
	var nSeconds = parseInt(iDiffMS/1000);
	var nMinutes = parseInt(nSeconds/60);
	var nHours = parseInt(nMinutes/60);
	var nDays  = parseInt(nHours/24);
	var nWeeks = parseInt(nDays/7);


	// return requested difference
	var iDiff = 0;		
	switch(p_Interval.toLowerCase()){
		case "yyyy": return nYears;
		case "q": return nQuarters;
		case "m": return nMonths;
		case "y": 		// day of year
		case "d": return nDays;
		case "w": return nDays;
		case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		case "h": return nHours;
		case "n": return nMinutes;
		case "s": return nSeconds;
		case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}
/*______________________________________________________________________________________________________________________________________________________________________*/
/*����������������������������������������������������������������������������������������������������������������������������������������������������������������������*/
function validateDates(date1, testDate, date2)
{
	d1 = date1.split('-');
	t = testDate.split('-');
	d2 = date2.split('-');
	if ((dateDiff('d', d1[1]+'/'+d1[2]+'/'+d1[0], t[1]+'/'+t[2]+'/'+t[0]) >= 0) && (dateDiff('d', d2[1]+'/'+d2[2]+'/'+d2[0], t[1]+'/'+t[2]+'/'+t[0]) <= 0))
		return true;
	else
	{
		alert ('Please verify that both the dates your provided are between the performance dates.');
		return false;
	}
}
/*______________________________________________________________________________________________________________________________________________________________________*/
/*����������������������������������������������������������������������������������������������������������������������������������������������������������������������*/
function isEMailAddr(elem) 
{
	var str = elem.value;
	var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
	if (!str.match(re)) 
	{
		alert("Verify the email address.");
		elem.focus();
		return false;
	} else 
	{
		return true;
	}
}
/*______________________________________________________________________________________________________________________________________________________________________*/
/*����������������������������������������������������������������������������������������������������������������������������������������������������������������������*/
function isNotEmpty(elem) 
{
    var str = elem.value;
    var re = /.+/;
    if(!str.match(re)) 
	{
        alert("Please fill in the required field.");
		elem.focus();
        return false;
    } 
	else 
	{
        return true;
    }
}
/*______________________________________________________________________________________________________________________________________________________________________*/
/*����������������������������������������������������������������������������������������������������������������������������������������������������������������������*/
// no seats >14
function max_no_seat(elem) 
{
    var str = elem.value;
    if(isNaN(str) || str < 1) 
	{
        alert("Please check number of seats (min 1). ");
		elem.focus();
        return false;
    } 
	else 
	{
        return true;
    }
}

