//.net part contains same script!!!
//Work with DateUtil.js

var dateValidator = {
	defaultSQLBeginDate: new Date(1753, 0, 2),
	defaultSQLEndDate: new Date(9999, 11, 30),
	getToday: function() {
		var today = new Date();
		today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
		return today;
	},
	getDefaultBeginDate: function() {
		var beginDate = this.getToday();
		beginDate.setFullYear(beginDate.getFullYear() - 1);
		return beginDate;
	},
	getDefaultEndDate: function() {
		var endDate = this.getToday();
		endDate.setFullYear(endDate.getFullYear() + 1);
		return endDate;
	},
	checkDefaultSQLRange: function(validDateString) {
		return this.checkRange(validDateString, this.defaultSQLBeginDate, this.defaultSQLEndDate);
	},
	getRangeErrorMessage: function(beginDate, endDate) {
		if (beginDate.valueOf() == endDate.valueOf())
			return 'Дата может быть только ' + date_to_str(beginDate, 'dd.mm.yyyy') + '.';
		return 'Дата должнa быть между ' + date_to_str(beginDate, 'dd.mm.yyyy') + ' и ' + date_to_str(endDate, 'dd.mm.yyyy') + '.';
	},
	checkRange: function(validDateString, beginDate, endDate) {
		if (validDateString.length > 10) return false;
		var date = str_to_date(validDateString, 'dd.mm.yyyy');
		return date >= beginDate && date <= endDate;
	},
	getErrorMessage: function(fieldName) {
		return 'Поле "' + fieldName + '" заполнено неверно.';
	},
	checkDate: function(dateString) {
		return !check_date(dateString, 'dd.mm.yy');
	},
	checkDateControl: function(sender, arg) {
		if (!arg.Value || (/\s+/).test(arg.Value)) {
			arg.IsValid = true;
			return;
		}
		var dateValue = document.getElementById(sender.attributes['controltovalidate'].value).value;
		arg.IsValid = this.checkDate(dateValue);
		if (!arg.IsValid)
			return;
		var beginDate = this.defaultSQLBeginDate;
		var endDate = this.defaultSQLEndDate;
		arg.IsValid = this.checkRange(dateValue, beginDate, endDate);
	},
	checkBeginSearch: function(dateString, fieldName) {
		var beginDate = this.getToday();
		var endDate = this.getDefaultEndDate();
		endDate.setDate(endDate.getDate() - 1);
		var errorMessage = this.getErrorMessage(fieldName);
		if (!this.checkDate(dateString)
			|| !this.checkRange(dateString, beginDate, endDate)) {
			alert(errorMessage);
			return false;
		}
		return true;
	},
	checkEndSearch: function(dateString, fieldName, beginDateString, beginFieldName) {
		if (!this.checkBeginSearch(beginDateString, beginFieldName)) return false;
		var beginDate = str_to_date(beginDateString, 'dd.mm.yy');
		var endDate = this.getDefaultEndDate();
		var errorMessage = this.getErrorMessage(fieldName);
		if (!this.checkDate(dateString)
			|| !this.checkRange(dateString, beginDate, endDate)) {
			alert(errorMessage);
			return false;
		}
		return true;
	},
	checkBeginSearchHotels: function(dateString, fieldName) {
		var today = this.getToday();
		var beginDate = this.getToday();
		beginDate.setDate(beginDate.getDate() + 1);
		var endDate = this.getDefaultEndDate();
		var errorMessage = this.getErrorMessage(fieldName);
		if (!this.checkDate(dateString)) {
			alert(errorMessage);
			return false;
		}
		var validDate = str_to_date(dateString, 'dd.mm.yy');
		if (today >= validDate
			|| !this.checkRange(dateString, beginDate, endDate)) {
			alert(errorMessage);
			return false;
		}
		return true;
	},
	checkEndSearchHotels: function(dateString, fieldName, beginDateString, beginFieldName) {
		if (!this.checkBeginSearchHotels(beginDateString, beginFieldName)) return false;
		var beginDate = str_to_date(beginDateString, 'dd.mm.yy');
		var beginDateAndOne = str_to_date(beginDateString, 'dd.mm.yy');
		beginDateAndOne.setDate(beginDateAndOne.getDate() + 1);
		var endDate = this.getDefaultEndDate();
		var errorMessage = this.getErrorMessage(fieldName);
		if (!this.checkDate(dateString)) {
			alert(errorMessage);
			return false;
		}
		var validDate = str_to_date(dateString, 'dd.mm.yy');
		if (validDate <= beginDate) {
			alert(errorMessage);
			return false;
		}
		var finalDate = new Date(beginDate.getFullYear(), beginDate.getMonth(), beginDate.getDate() + 14);
		if (finalDate < validDate) {
			alert('Максимальное количество ночей: 14.');
			return false;
		}
		if (!this.checkRange(dateString, beginDateAndOne, endDate)) {
			alert(errorMessage);
			return false;
		}
		return true;
	},
	checkDocument: function(dateString) {
		if (!this.checkDate(dateString))
			return false;
		var beginDate = this.getToday();
		var endDate = this.getToday();
		endDate.setFullYear(endDate.getFullYear() + 50);
		if (!this.checkRange(dateString, beginDate, endDate))
			return false;
		return true;
	},
	checkBirthday: function(dateString) {
		if (!this.checkDate(dateString))
			return false;
		var beginDate = new Date(1900, 0, 1);
		var endDate = this.getToday();
		if (!this.checkRange(dateString, beginDate, endDate))
			return false;
		return true;
	}
}

