// Check data functions
function IsLeapYear(yr)
{
    if ((yr % 4 == 0) && (yr % 100 != 0) || (yr % 400 == 0))
		return 1;
	else
		return 0;
}

function daysInMonth(mo, yr)
{
	if (mo == 2)
		return 28 + IsLeapYear(yr);
    else
        return 30 + ((mo + (mo > 7)) % 2);
}

function ValidateDate(Year, Month, Day)
{
	var maxDays = daysInMonth(Month.selectedIndex+1, parseInt(Year.value));

    if (Day.selectedIndex > maxDays-1)
		Day.selectedIndex = maxDays-1;
}

//Check Date for valid and correct it if need
function CheckDate(szDatePrefix)
{
	var objDay = MM_findObj(szDatePrefix + "Day");
	var objMonth = MM_findObj(szDatePrefix + "Month");
	var objYear = MM_findObj(szDatePrefix + "Year");
	
	var maxDays = daysInMonth(parseInt(objMonth.value), parseInt(objYear.value));
    if (objDay.value.length != 0 && objDay.value > maxDays)
		objDay.value = maxDays;
}

function savePrevValue(pThis){
	pThis.prevValue = pThis.value;
}

function loadPrevValue(pThis){
	pThis.value = pThis.prevValue;
}

//Time format - [m]mm:ss
function checkTime(pThis)
{
	var str = pThis.value;
	var re, result;
	
	re = new RegExp("([0-9]{1,3})(:([0-9]{1,2}))?");
	result = re.exec(str);
	
	if (result==null){
		loadPrevValue(pThis);
		//pThis.focus();
		alert("Пожалуйста, укажите правильное значение времени.");
		return false;
	}
	if (result[2]==null) result[2]=""; // Netscape 6.0
	if (result[3]==null) result[3]=""; // Netscape 6.0
	
	if (pThis.value != result[0] || parseInt(result[3])>59)
//	if  (RegExp.leftContext.length!=0 || 
//		(RegExp.rightContext.length!=0 && 
//		!(result[2]=="" && RegExp.rightContext==":")) ||
	{
		loadPrevValue(pThis);
		//pThis.focus();
		alert("Пожалуйста, укажите правильное значение времени.");
		return false;
	}

	if (result[1].length==1) result[1]="0"+result[1];
	if (result[3].length==1) result[3]="0"+result[3];
	if (result[3].length==0) result[3]="00";
	pThis.value = result[1]+":"+result[3];
	savePrevValue(pThis);
	return true;
}

//Time format - [m]mm:ss -> convert to Milliseconds
function Convert2Milliseconds(timeValue)
{
	var re, result;
	
	re = new RegExp("([0-9]{1,3})(:([0-9]{1,2}))?");
	result = re.exec(timeValue);
	
	if (result==null) return false;
	if (result[2]==null) result[2]=""; // Netscape 6.0
	if (result[3]==null) result[3]=""; // Netscape 6.0
	
	if (timeValue != result[0] || parseInt(result[3])>59) return false;

	return (result[1] * 60 * 1000) + (result[3] * 1000);
}

function checkNumberField(pThis, maxValue, isEnableEmpty)
{
	if (isEnableEmpty && pThis.value.length == 0){
		savePrevValue(pThis);
		return true;
	}
	
	var re, result;
	re = new RegExp("(0*)([0-9]+)");
	result = re.exec(pThis.value);
	
	if (result==null || 
		pThis.value != result[0])
	{
		loadPrevValue(pThis);
		alert("Пожалуйста, укажите правильное значение.");
		//pThis.focus();
		return false;
	}

	var value = parseInt(result[2]);
	if (value == 0)
	{
		loadPrevValue(pThis);
		alert("Пожалуйста, укажите правильное значение.");
		return false;
	}
	if (value > maxValue)
	{
		loadPrevValue(pThis);
		alert("Пожалуйста, укажите значение, не превосходящее " + maxValue + ".");
		return false;
	}
	pThis.value = value;
	savePrevValue(pThis);
	return true;
}

//	Check format of Year Field
function checkYear(pThis, isEnableEmpty, isEnableBefore1753)
{
	if (isEnableEmpty && pThis.value.length == 0){
		savePrevValue(pThis);
		return;
	}
	
	var re, result;
	re = new RegExp("(0*)([0-9]{1,4})");
	result = re.exec(pThis.value);

	if (result==null || pThis.value != result[0])
	{
		loadPrevValue(pThis);
		alert("Пожалуйста, укажите правильное значение года.");
		//pThis.focus();
		return false;
	}

	var year = parseInt(result[2]);
	if (year > 99 && year < 1753 && isEnableBefore1753 != true){
		loadPrevValue(pThis);
		alert("Даты ранее 1753 года не поддерживаются.");
		//pThis.focus();
		return false;
	}
	if (year < 10)	year += 2000;
	else if (year < 100) year += 1900;
	
	pThis.value = year;
	savePrevValue(pThis);
	return true;
}

// Convert Date Fields to String of format "YYYY-MM-DD"
function Fields2String(szFieldsPrefix, isRequiredFields){
	var objDate  = MM_findObj(szFieldsPrefix + "Date")
	var objDay   = MM_findObj(szFieldsPrefix + "Day");
	var objMonth = MM_findObj(szFieldsPrefix + "Month");
	var objYear  = MM_findObj(szFieldsPrefix + "Year");
	
	if (isRequiredFields == true) {
		//Все поля обязательные
		if (!objDay.value.length) {
			alert("Пропущено одно из полей. Заполните его пожалуйста.");
			objDay.focus();
			return false;
		}
		if (!objMonth.value.length) {
			alert("Пропущено одно из полей. Заполните его пожалуйста.");
			objMonth.focus();
			return false;
		}
		if (!objYear.value.length) {
			alert("Пропущено одно из полей. Заполните его пожалуйста.");
			objYear.focus();
			return false;
		}
	} 
	
	//Если дата не полная, ставить значения по-умолчанию
	iDay = objDay.value.length?objDay.value:1;
	iMonth = objMonth.value.length?objMonth.value:1;
	iYear = objYear.value.length?objYear.value:1900;
	
	var strDate = 	iYear + "-" +
					(iMonth	< 10?"0":"") + iMonth + "-" +
					(iDay	< 10?"0":"") + iDay;
	
	objDate.value = strDate;
	return true;
}

//Check Length of <textarea> element
function ValidateTextAreaLen(pThis, maxLen){
	if (maxLen == null) maxLen = 1000; //Default
	if (pThis.value.length > maxLen){
		alert("Значение поля не должно превышать длину в " + maxLen + " символов");
		pThis.value = pThis.value.substring(0, maxLen);
		return false;
	} else {
		return true;
	}
}