function isNS4() {
	return (document.layers) ? true : false;
}
function isIE4() {
	return (document.all) ? true : false;
}
function addAgentDataToUrl(url) {
	var userAgent;
	if (isNS4()) {
		userAgent = "ns";
	} else if(isIE4()) {
		userAgent = "ie";
	} else {
		userAgent = "simple";
	}
	var result = url;
	if (result.indexOf("?") > -1) {
		result += "&agent=" + userAgent;
	} else {
		result += "?agent=" + userAgent;
	}
	result += "&w=" + screen.width;
	result += "&h=" + screen.height;
	return result;
}
function countChar(str,chr) {
	var _len = str.length;
	var _result = 0;
	for (var _i = 0; _i < _len; _i++) {
		if (str.charAt(_i) == chr) {
			_result++;
		}
	}
	return _result;
}
function countNonASCII(str) {
	var _len = str.length;
	var _result = 0;
	for (var _i = 0; _i < _len; _i++) {
		if (str.charCodeAt(_i) > 127) {
			_result++;
		}
	}
	return _result;
}
function countWhiteSpaces(str) {
	var _len = str.length;
	var _result = 0;
	for (var _i = 0; _i < _len; _i++) {
		if (str.charCodeAt(_i) < 33) {
			_result++;
		}
	}
	return _result;
}
function countNonDigits(str) {
	var _len = str.length;
	var _result = 0;
	for(var _i = 0; _i < _len; _i++) {
		if ((str.charCodeAt(_i) < 48) || (str.charCodeAt(_i) > 57)) {
			_result++;
		}
	}
	return _result;
}
function isInteger(n) {
	return (!isNaN(n) && (Math.ceil(n) == Math.floor(n)));
}
function isNatural(n) {
	return (isInteger(n) && (n >= 0));
}
function isPositiveNumber(n) {
	return (!isNaN(n) && (n > 0));
}
function isPositiveInteger(n) {
	return (isInteger(n) && (n > 0));
}
function trimLeft(str) {
	var _len = str.length;
	var _i;
	var _result = new String(str);
	if (_len < 1) {
		return _result;
	}
	for (_i = 0; _i < _len; _i++) {
		if ((str.charCodeAt(_i) > 32) || (str.charCodeAt(_i) < -1)) {
			break;
		}
	}
	if (_i < 1) {
		return _result;
	}
	_result = _result.substring(_i,_len);
	return _result;
}
function trimRight(str) {
	var _len = str.length;
	var _i;
	var _result = new String(str);
	if (_len < 1) {
		return _result;
	}
	for (_i = 0; _i < _len; _i++) {
		if ((str.charCodeAt(_len - _i - 1) > 32) || (str.charCodeAt(_i) < -1)) {
			break;
		}
	}
	if (_i < 1) {
		return _result;
	}
	_result = _result.substring(0,_len - _i);
	return _result;
}
function trim(str) {
	var _result = trimLeft(str);
	if (_result.length > 0) {
		_result = trimRight(_result);
	}
	return _result;
}
function isBlank(str) {
	return (trimLeft(str) == "");
}
function isEmail(str) {
	var _str = new String(trim(str));
	if (countWhiteSpaces(_str) > 0) {
		return false;
	}
	if (countNonASCII(_str) > 0) {
		return false;
	}
	if ((_str.length < 6) || (countChar(_str,"@") != 1)) {
		return false;
	}
	var leftPart = _str.substring(0,_str.indexOf("@"));
	var rightPart = _str.substr(_str.indexOf("@") + 1);
	return ((leftPart.length > 0) && (rightPart.length > 3)
		&& (countChar(rightPart,".") > 0)
		&& (rightPart.charAt(rightPart.length - 1) != ".")
		&& (rightPart.charAt(0) != "."));
}
function isLeapYear(year) {
	if (year % 4 != 0) {
		return false;
	} else if (year % 400 == 0) {
		return true;
	} else if (year % 100 != 0) {
		return true;
	} else {
		return false;
	}
}
function getDaysInMonth(month,year) {
	if ((month < 1) || (month > 12)) {
		return 0;
	}
	var _daysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var _result = _daysInMonth[month - 1];
	if ((month == 2) && isLeapYear(year)) {
		_result++;
	}
	return _result;
}
function isCorrectDate(year,month,day) {
	if (!isNatural(year) || !isNatural(month) || !isNatural(day)) {
		return false;
	}
	if ((year < 1) || (month < 1) || (month > 12) || (day < 1)) {
		return false;
	}
	var _daysInMonth = getDaysInMonth(month,year);
	if (day > _daysInMonth) {
		return false;
	}
	return true;
}
function compareDates(date1,date2) {
	var dateInt1 = date1.getTime();
	var dateInt2 = date2.getTime();
	if (dateInt1 == dateInt2) {
		return 0;
	} else if (dateInt1 < dateInt2) {
		return -1;
	} else {
		return 1;
	}
}
function isPhoneNumber(str) {
	var _len = str.length;
	var _result = true;
	var _code;
	if (_len < 1) {
		return false;
	}
	for(var _i = 0; _i < _len ; _i++) {
		_code = str.charCodeAt(_i);
		if(
			(_code == 32) // space
			|| ((_code >= 48) && (_code <= 57)) // digits
			|| (_code == 43) // plus sign
			|| (_code == 45) // minus sign
			) {
			continue;
		}
		_result = false;
		break;
	}
	return _result;
}
function isWWW(str) {
	var _str = new String(trim(str));
	if (countWhiteSpaces(_str) > 0) {
		return false;
	}
	if (countChar(_str,".") < 1) {
		return false;
	}
	return true;
}
function fillLeft(s,c,l) {
	if (s.length >= l) {
		return new String(s);
	}
	var result = "";
	for (var i = 0; i < (l - s.length); i++) {
		result += c;
	}
	return result + s;
}
function fillRight(s,c,l) {
	if (s.length >= l) {
		return new String(s);
	}
	var result = "";
	for (var i = 0; i < (l - s.length); i++) {
		result += c;
	}
	return s + result;
}
function checkInOutDates(outYear,outMonth,outDay,inYear,inMonth,inDay) {
	if (!isCorrectDate(outYear,outMonth,outDay)) {
		return "дата прямого вылета не правильная " + outDay + "-" + outMonth + "-" + outYear;
	}
	if (!isCorrectDate(inYear,inMonth,inDay)) {
		return "дата обратного вылета не правильная " + inDay + "-" + inMonth + "-" + inYear;
	}
	var msecPerDay = 24 * 60 * 60 * 1000;
	var currDT = new Date();
	currDT.setHours(0);
	currDT.setMinutes(0);
	currDT.setSeconds(0);
	currDT.setMilliseconds(0);
	var outDT = new Date(outYear,outMonth - 1,outDay);
	var inDT = new Date(inYear,inMonth - 1,inDay);
	if ((outDT.getTime() - currDT.getTime()) < msecPerDay) {
		return "нельзя выбирать прошедшие или текущую даты " + outDT.getDate() + "-" + (outDT.getMonth() + 1) + "-" + outDT.getYear();
	}
	if ((inDT.getTime() - outDT.getTime()) < msecPerDay) {
		return "дата обратного вылета должна быть позже даты прямого вылета";
	}
	if ((outDT.getTime() - currDT.getTime()) >= 331 * msecPerDay) {
		return "можно забронировать не более чем за 331 день до прямого вылета";
	}
	if ((inDT.getTime() - currDT.getTime()) >= 331 * msecPerDay) {
		return "можно забронировать не более чем за 331 день до обратного вылета";
	}
	return null;
}

