/* Functions in this file
		DateDiff				11
		DateAdd					82
		getMonthStr				142
		getDayStr				160
		isDate					184
		openDepartWindow		271
		openArrivalWindow		387
*/


function DateDiff( start, end, interval, rounding ) {

    var iOut = 0;
    
    // Create 2 error messages, 1 for each argument. 
    var startMsg = 'Check the Start Date and End Date\n'
        startMsg += 'must be a valid date format.\n\n'
        startMsg += 'Please try again.' ;
		
    var intervalMsg = 'Sorry the dateAdd function only accepts\n'
        intervalMsg += 'd, h, m OR s intervals.\n\n'
        intervalMsg += 'Please try again.' ;
//alert("start = " + start);
//alert("end = " + end);
    var bufferA = Date.parse( start ) ;
    var bufferB = Date.parse( end ) ;
    	
    // check that the start parameter is a valid Date. 
    if ( isNaN (bufferA) || isNaN (bufferB) ) {
        alert( startMsg ) ;
        return null ;
    }
	
    // check that an interval parameter was not numeric. 
    if ( interval.charAt == 'undefined' ) {
        // the user specified an incorrect interval, handle the error. 
        alert( intervalMsg ) ;
        return null ;
    }
    
    var number = bufferB-bufferA ;
    
    // what kind of add to do? 
    switch (interval.charAt(0))
    {
        case 'd': case 'D': 
            iOut = parseInt(number / 86400000) ;
            if(rounding) iOut += parseInt((number % 86400000)/43200001) ;
            break ;
        case 'h': case 'H':
            iOut = parseInt(number / 3600000 ) ;
            if(rounding) iOut += parseInt((number % 3600000)/1800001) ;
            break ;
        case 'm': case 'M':
            iOut = parseInt(number / 60000 ) ;
            if(rounding) iOut += parseInt((number % 60000)/30001) ;
            break ;
        case 's': case 'S':
            iOut = parseInt(number / 1000 ) ;
            if(rounding) iOut += parseInt((number % 1000)/501) ;
            break ;
        default:
        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error. 		
        alert(intervalMsg) ;
        return null ;
    }
//alert('DateDiff = ' + iOut);    
    return iOut ;
}

/*
DateAdd adds an number of days, hours, minutes or seconds to a beginDate
	interval can have the values:
		d - days
		h - hours
		m - minutes
		s - seconds
	number is the number of intervals - integer
	beginDate is the starting date
*/
	
function DateAdd(interval, number, beginDate)
{
	var iOut = 0;
	var Char;
	var ValidChars = "0123456789";
	var IsNumber=true;
	var end;
    
    // Create 2 error messages, 1 for each argument. 
    var startMsg = 'Check the Start Date\n'
        startMsg += 'must be a valid date format.\n\n'
        startMsg += 'Please try again.' ;
		
    var intervalMsg = 'Sorry the dateAdd function only accepts\n'
        intervalMsg += 'd, h, m OR s intervals.\n\n'
        intervalMsg += 'Please try again.' ;

    var numberMsg = 'Sorry the dateAdd function only accepts\n'
        intervalMsg += 'integers.\n\n'
        intervalMsg += 'Please try again.' ;

	var start = Date.parse(beginDate);
    // check that the start parameter is a valid Date. 
    if ( isNaN (start)) {
        alert( startMsg ) ;
        return null ;
    }
	
    // check that an interval parameter was not numeric. 
    if ( interval.charAt == 'undefined' ) {
        // the user specified an incorrect interval, handle the error. 
        alert( intervalMsg ) ;
        return null ;
    }
    
    // check that the number is numeric. 
	for (i = 0; i < number.length && IsNumber == true; i++) 
	{ 
		Char = number.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) 
		{
			alert(numberMsg);
			return null;
		}
	}
    // what kind of add to do? 
    switch (interval.charAt(0))
    {
        case 'd': case 'D': 
			end = number * 86400000 + start;
			iOut = new Date(end);
            break ;
        case 'h': case 'H':
			end = number * 3600000 + start;
			iOut = new Date(end);
           break ;
        case 'm': case 'M':
			end = number * 60000 + start;
			iOut = new Date(end);
            break ;
        case 's': case 'S':
			end = number * 1000 + start;
			iOut = new Date(end);
            break ;
        default:
        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error. 		
        alert(intervalMsg) ;
        return null ;
    }
//alert('DateDiff = ' + iOut);    
	return iOut ;
}

function getMonthStr()
{
	var lang  = getLang();
	var monthNames = new Array(12);
	
	var monthNamesFr = new Array ('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
// english months
	var monthNamesEn = new Array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

	if(lang == 'fr')
	{
		monthNames = monthNamesFr;
	}else
	{
		monthNames = monthNamesEn;
	}
	return monthNames;
}

function getDayStr()
{
	var lang  = getLang();
	var dayNames = new Array();
	
// French days
	 var dayNamesFr = new Array('', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di');
// English days 
	 var dayNamesEn = new Array('', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su');

	if(lang == 'fr')
	{
		dayNames = dayNamesFr;
	}else
	{
		dayNames = dayNamesEn;
	}
	return dayNames;
}

/*
isDate checks to see if the dateStr is truly a date.  
	It returns the array errorField
*/

function isDate(dateStr, errorField)
{
	var errStr;
	var pos;
	var yearStr;
	var posOld;
	var monthStr;
	var dayStr;
	var dateLength;
//make sure that dateStr is long enough to be a date
	if(dateStr == undefined)
	{
		dateLength = 0;
	} else
	{
		dateLength = dateStr.length;
	}
	if(dateLength < 6)
	{
		errorField[0] = errorField[0] + 1;
		if(lang=='fr')
		{
			errStr = 'La date n\'est pas correct';
		} else
		{
			errStr = 'The date is not correct';
		}	
		errorField[errorField[0]] =  errStr;

	} else
	{
//Separate day, month and year
		pos = dateStr.indexOf('-', 0);
//Check to see if the date uses slashes instead of dashes
		if(pos<0)
		{
			pos = dateStr.indexOf('/', 0);
			yearStr = dateStr.substring(0, pos);
			posOld = pos + 1;
			pos = dateStr.indexOf('/', posOld);
			monthStr = dateStr.substring(posOld, pos);
			posOld = pos + 1;
			dayStr = dateStr.substring(posOld, dateStr.length);
		} else
//Date probably uses dashes instead of slashes
		{
			yearStr = dateStr.substring(0, pos);
			posOld = pos + 1;
			pos = dateStr.indexOf('-', posOld);
			monthStr = dateStr.substring(posOld, pos);
			posOld = pos + 1;
			dayStr = dateStr.substring(posOld, dateStr.length);	
		}
		var monthName = new Array();
		var dayName = new Array();
		var lang = QueryString('lang');
		monthName = getMonthStr();
		dayName = getDayStr();
//check to see if the day and month are greater than 0
		if((yearStr < 1) || (monthStr < 1) || (dayStr < 1))
		{
			errorField[0] = errorField[0] + 1;
			if(lang=='fr')
			{
				errStr = 'La date n\'est pas correct';
			} else
			{
				errStr = 'The date is not correct';
			}	
			errorField[errorField[0]] =  errStr;

		}
	
//Check the months with 30 days
		if((monthStr == 4) || (monthStr == 6) || (monthStr == 9) || (monthStr == 11))
		{
			if(dayStr>30) 
			{
				if(lang=='fr') 
				{
					errStr = 'Il n\'y a pas 31 jours dans le mois de ' + monthName(monthStr) + '.';
				} else 
				{
					errStr = 'There are not 31 days in the month of ' +monthName(monthStr) + '.';
				}
				errorField[0] = errorField[0] + 1;
				errorField[errorField[0]] =  errStr;
			}
		}
	
//Check February
		if(monthStr == 2)
		{
			leapYear = yearStr % 4;
			if((dayStr > 28) && (leapYear > 0)) 
			{
				if(lang=='fr') 
				{
					errStr = 'Il n\'y a pas ' + dayStr + ' jours dans le mois de février ' + yearStr + '.';
				}else 
				{
					errStr = 'There are not ' + dayStr + ' days in the month of February ' + yearStr + '.';
				}
				errorField[0] = errorField[0] + 1;
				errorField[errorField[0]] =  errStr;
			} else if((dayStr>29) && leapYear == 0) 
			{
				if(lang=='fr') {
					errStr = 'Il n\'y a pas ' + dayStr + ' jours dans le mois de février ' + yearStr + '.';
				}else 
				{
					errStr = 'There are not ' + dayStr + ' days in February ' + yearStr + '.';
				}
				errorField[0] = errorField[0] + 1;
				errorField[errorField[0]] =  errStr;	
			}
		}
	}
	return errorField;	
}
/*This function opens the Departure calendar window
	frmStr is the name of the form calling the function
	DatePrefix is the Prefix of the strings representing
	the Year, Month and Day
*/
function openDepartWindow(frmStr, DateStr)
{
	var defaultStay = 6;
//Get the arrival date	
	var AYearStr = DateStr + 'AYear';
	var AMonthStr = DateStr + 'AMonth';
	var ADayStr = DateStr + 'ADay';
	var AYearObj = new getObj(AYearStr);
	var AYear = AYearObj.value;
	var AMonthObj = new getObj(AMonthStr);
	var AMonth = AMonthObj.value;
	var ADayObj = new getObj(ADayStr);
	var ADay = ADayObj.value;
	var radate = AYear + '/' + AMonth + '/' + ADay;
	var errorField = new Array();
	errorField[0] = 0;
	errorField = isDate(radate, errorField);
	if(errorField[0] > 0)
	{
		radate = new Date();
	}
//get the departure date
	var DYearStr = DateStr + 'DYear';
	var DMonthStr = DateStr + 'DMonth';
	var DDayStr = DateStr + 'DDay';
	var DYearObj = new getObj(DYearStr);
	var DMonthObj = new getObj(DMonthStr);
	var DDayObj = new getObj(DDayStr);
	var rdDay;
	var rdMonth;
	var rdYear;

	var rddate = DateAdd('d', defaultStay, radate);
//alert('rddate=' + rddate);
	var javadate = new Date(rddate);
//alert('rddate.getYear()=' + javadate.getYear());
//Add default stay length to the arrival date
	rdDay = javadate.getDate();
	rdMonth = javadate.getMonth() + 1;
	rdYear = javadate.getYear();
	document.getElementById(DDayStr).value = rdDay;
	document.getElementById(DMonthStr).value = rdMonth;
	document.getElementById(DYearStr).value = rdYear;
	
//Convert rddate back to yyyy/mm/dd format
	rddate = rdYear + '/' + rdMonth + '/' + rdDay;

	var caldepartStr = 'caldepart.aspx?formname=' + frmStr + '&radate=' + radate + '&rddate=' + rddate + '&datestr=' + DateStr;
	
	calendar_window=window.open(caldepartStr,'calendar_window','width=180,height=150');
//	calendar_window=window.open(caldepartStr,'calendar_window');
	calendar_window.focus();
}
/*openARrivalWindow opens a calendar with the necessary parameters to
	select a date of arrival
	frmStr is the name of the form you're calling from
	dateStr is the letter or letters in front of ADay, AMonth and AYear
*/

function openArrivalWindow(frmStr, dateStr)
{
	var calArriveStr;
	var currDate;
	var currYear;
	var currMonth;
	var currDay;
	var daysToAdd = 6;
	var errorField = new Array();
	errorField[0] = 0;
//Set the arrival dates to 2 weeks from today
	var AYearStr = dateStr + 'AYear';
	var AMonthStr = dateStr + 'AMonth';
	var ADayStr = dateStr + 'ADay';
	var AYearObj = new getObj(AYearStr);
	var AYear = AYearObj.value;
	var AMonthObj = new getObj(AMonthStr);
	var AMonth = AMonthObj.value;
	var ADayObj = new getObj(ADayStr);
	var ADay = ADayObj.value;
	var radate = AYear + '/' + AMonth + '/' + ADay;
	errorField = isDate(radate, errorField);
	if(errorField[0] > 0)
	{
		currDate = new Date();
		currYear = currDate.getYear();
		currMonth = currDate.getMonth() + 1;
		currDay = currDate.getDate();
		radate = currYear + '/' + currMonth + '/' + currDay;
		radate = DateAdd('d', daysToAdd, radate);
	}
	radate = new Date(radate);
	AYear = radate.getYear();
	AMonth = radate.getMonth() + 1;
	AMonth = AMonth + 100;
	AMonth = AMonth.toString();
	AMonth = AMonth.substr(1,2);
	ADay = radate.getDate();
	ADay = ADay + 100;
	ADay  = ADay.toString();
	ADay = ADay.substr(1,2);
	radate = AYear + '/' + AMonth + '/' + ADay;
	var javadate = new Date(radate);
	document.getElementById(ADayStr).value = javadate.getDate();
	document.getElementById(AMonthStr).value = javadate.getMonth() + 1;
	document.getElementById(AYearStr).value = javadate.getYear();

//If the dateStr length is 0, don't add datestr to the querystring
	if(dateStr.length > 0)
	{
		calArriveStr = 'calarrive.aspx?formname=' + frmStr + '&radate=' + radate + '&datestr=' + dateStr;
	}else
	{
		calArriveStr = 'calarrive.aspx?formname=' + frmStr + '&radate=' + radate;
	}
	calendar_window=window.open(calArriveStr,'calendar_window','width=180,height=150');
//	calendar_window=window.open(calArriveStr,'calendar_window');
	calendar_window.focus();
}


