var startCal;
var endCal;

function CalendarLoad() {
	if (typeof Calendar == "function") {
		var start = new Date();
		var end = start.valueOf() + (Calendar.OneDay * 365);
		
		var config = new Calendar.Config();
		config.startDate = start;
		config.endDate = new Date(end);
		config.className = 'calendar';
		config.width = 180;
	
		config.selectDate = new Date();
		
		config.autoHide = false;
		config.closeOnSelect = true;
		config.callBack = function (iDay,iMonth,iYear) {
							selectStartDate(iDay,iMonth,iYear);
						};
		
		startCal = new Calendar('startCal',config);
		
		var endconfig = new Calendar.Config();
		endconfig.startDate = new Date(start.valueOf()+Calendar.OneDay);
		endconfig.endDate = new Date(end+Calendar.OneDay);
		endconfig.className = 'calendar';
		endconfig.width = 180;
	
		endconfig.selectDate = endconfig.startDate;
		
		endconfig.autoHide = false;
		endconfig.closeOnSelect = true;
		endconfig.callBack = function (iDay,iMonth,iYear) {
							selectEndDate(iDay,iMonth,iYear);
						};
		
		endCal = new Calendar('endCal',endconfig);
	}
}

Calendar.addEvent(window,"load",CalendarLoad);

function selectStartDate(iDay,iMonth,iYear) {
    document.frmMain.txtFrom.value = (parseInt(iMonth)+1) + '/' + iDay + '/' + iYear
}

function selectEndDate(iDay,iMonth,iYear) {
    document.frmMain.txtTo.value = (parseInt(iMonth)+1) + '/' + iDay + '/' + iYear
}

/*
Validate two Date is valid range
1: date1 > date2
2: date1 < date 2
3: date1 = date2
*/
function dateCompare(iDay1,iMonth1,iYear1,iDay2,iMonth2,iYear2) {
	iDay1 = parseInt(iDay1,10);
	iMonth1 = parseInt(iMonth1,10);
	iYear1 = parseInt(iYear1,10);
	
	iDay2 = parseInt(iDay2,10);
	iMonth2 = parseInt(iMonth2,10);
	iYear2 = parseInt(iYear2,10);
	result = 0;
	if (iYear1 > iYear2) {
		result = 1;
	}else if (iYear1 < iYear2) {
		result = 2;
	}else {
		if (iMonth1 > iMonth2) {
			result = 1;
		}else if (iMonth1 < iMonth2) {
			result = 2;
		}else {
			if (iDay1 > iDay2) {
				result = 1;
			}else if (iDay1 < iDay2){
				result =  2;
			}else {
				result = 3;
			}
		}
	}
	return result;
}

function isValidDate(val) {
	var strExp;
	return (val.search(/^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/gi) != -1)
}

AutoValidator.addCustomType('validdate', function (n) {
	var arrStartMY = n.value.split('/');
	var d = arrStartMY[1];
	var m = arrStartMY[0];
	var yy = arrStartMY[2];

	return isValidDate(d + "/" + m + "/" + yy);
});
AutoValidator.addCustomType('validperiod', function (n) {
	frm = n.form;
	var arrStartMY = frm.txtFrom.value.split('/');
	var startDay = arrStartMY[1];
	var startMonth = arrStartMY[0];
	var startYear = arrStartMY[2];
	
	var arrEndMY = frm.txtTo.value.split('/');
	var endDay = arrEndMY[1];
	var endMonth = arrEndMY[0];
	var endYear = arrEndMY[2];
	if (dateCompare(startDay,startMonth,startYear,endDay,endMonth,endYear) < 2){
		return false;
	}
	else
	{
		return true;
	}
});
