// функции для проверки вводимых пользователем значений
// требуется подключение файлов: 
// numberFunctions.js, errorCodes.js, errMess_notNum_emptyField.js, formFunctions.js, dateFunctions.js


//----вспомогательные функции работы со строками-----//

/** обрезать лишние пробелы в начале и в конце строки **/
function Trim(STRING) 
{
	STRING = LTrim(STRING);
	return RTrim(STRING);
}

/** обрезать лишние пробелы в конце строки **/
function RTrim(STRING) 
{
	while(STRING.charAt((STRING.length -1))==" "){
		STRING = STRING.substring(0,STRING.length-1);
	}
	return STRING;
}


/** обрезать лишние пробелы в начале строки **/
function LTrim(STRING)
{
	while(STRING.charAt(0)==" "){
		STRING = STRING.replace(STRING.charAt(0),"");
	}
	return STRING;
}

//--------------------------------------------------//


function handleInputErr(errCode, params, elemName, formName) 
{
                if (!ecCheckNum[''+errCode+'']) { 
                        setElementValue(elemName, errCode, formName)
                        return true;
                }       
                eval (ecCheckNum[''+errCode+'']+"("+params+");");
                clearInputElementValue(elemName, formName);
                focusElement(elemName, formName);
                return false;
}

function handleInputErr_local(errCode, params, elemName, formName)
{
                if (!ecCheckNum[''+errCode+'']) { 
                        return errCode;
                }       
                eval (ecCheckNum[''+errCode+'']+"("+params+");");
                return -1;
}

function checkYear(str, elemName, rusName, formName, notCheckEmpty, local) 
{
        str=Trim(str);
        var errMess = (rusName) ? rusName : '';
        var intValue = checkNumber(str);
        if (intValue ==-1 || intValue==-2 || (intValue==-4 && !notCheckEmpty)) {
	     if (!local)
                return handleInputErr(intValue, "'"+errMess+" "+str.replace(/('"*)/g, '\\$1')+"'", elemName, formName);
	     else
                return handleInputErr_local(intValue, "'"+errMess+" "+str.replace(/('"*)/g, '\\$1')+"'", elemName, formName);
	}
	if (intValue==-4 && notCheckEmpty) return (local) ? '' : true;
        var fullYear=convertYearTo4Digit(intValue);
	if (!local)
        	return handleInputErr(''+fullYear, "'"+errMess+" "+str+"', 'emNotNumTailYear'", elemName, formName);
	else
        	return handleInputErr_local(''+fullYear, "'"+errMess+" "+str+"', 'emNotNumTailYear'", elemName, formName);
	
}

function checkPasswd(oldPwElem, newPwElem1, newPwElem2, formName)
{
    oldPw = getElementValue(oldPwElem, formName);
    newPw1 = getElementValue(newPwElem1, formName);
    newPw2 = getElementValue(newPwElem2, formName);
    if (oldPw=="")
        return handleInputErr(-4, "'СТАРОГО ПАРОЛЯ'", oldPwElem, formName);
    if (newPw1=="")
        return handleInputErr(-4, "'НОВОГО ПАРОЛЯ'", newPwElem1, formName);
    if (newPw2=="")
        return handleInputErr(-4, "'НОВОГО ПАРОЛЯ'", newPwElem2, formName);
    if (newPw1!=newPw2)
        return handleInputErr(-5, "'НОВОГО ПАРОЛЯ'", newPwElem2, formName);
    if (newPw1.length<8)
        return handleInputErr(-6, "'Пароль', 8", newPwElem1, formName);
    return true;
}

function checkEmpty(fieldsList, formName) 
{
    allEmpty = true;
    for (i=0; i<fieldsList.length; i++) {
        if (getElementValue(fieldsList[i], formName)!="")
            allEmpty=false;
    }
    if (allEmpty==true) 
        alert("Отсутствуют параметры поиска.");
    return !allEmpty;
}


function checkNotEmptyValue(valueStr, errMsg) 
{
    if (valueStr.length<1) {
	alert(errMsg);
	return false;
    }
    else
	return true;
}

function checkVDate(day, month, year, errMsg) {
	if (isDateValid(day, month, year))
		return true;
        alert(errMsg);
	return false;
}

function checkPFloat(str, elemName, rusName, formName, notCheckEmpty) {
// проверка на положительное, возможно дробное, число
        var errMess = (rusName) ? rusName : '';
        var fValue = checkFloat(str);
        if (fValue ==-8 || fValue==-2 || (fValue==-4 && !notCheckEmpty)) 
                return handleInputErr(fValue, "'"+errMess+" "+str.replace(/('"*)/g, '\\$1')+"'", elemName, formName);
	if (fValue==-4 && notCheckEmpty) return true;
        return handleInputErr(''+fValue, "'"+errMess+" "+str, elemName, formName);

}

function checkPInt(str, elemName, rusName, formName, notCheckEmpty, local) {
// проверка на положительное целое число
        var errMess = (rusName) ? rusName : '';
        var intValue = checkNumber(str);
        if (intValue ==-1 || intValue==-2 || (intValue==-4 && !notCheckEmpty)) {
	     if (!local)
                return handleInputErr(intValue, "'"+errMess+" <"+str.replace(/('"*)/g, '\\$1')+">'", elemName, formName);
	     else
                return handleInputErr_local(intValue, "'"+errMess+" <"+str.replace(/('"*)/g, '\\$1')+">'", elemName, formName);
	}
	if (intValue==-4 && notCheckEmpty) return (local) ? '' : true;
	if (!local)
        	return handleInputErr(''+intValue, "'"+errMess+" <"+str+">', 'emNotNumTailYear'", elemName, formName);
	else
        	return handleInputErr_local(''+intValue, "'"+errMess+" <"+str+">', 'emNotNumTailYear'", elemName, formName);
}

function checkNames(fieldsList, rusNamesList, likeElem, likeSetVal, formName)
{
    if (!checkEmpty(fieldsList, formName)) return false;
    for (i=0; i<fieldsList.length; i++) {
        val = getElementValue(fieldsList[i], formName);
        empVal = val.replace(/([А-Яа-я%_]*)/, '');
        if (empVal!="") 
            return handleInputErr(-7, "'"+rusNamesList[i]+" "+val.replace(/('"*)/g, '\\$1')+"'", fieldsList[i], formName);
    }    
    if (getElementValue(likeElem, formName)!=likeSetVal) {
        for (i=0; i<fieldsList.length; i++) {
            val = getElementValue(fieldsList[i], formName);
            if (val.indexOf('%')!=-1) {
                alert('Вы задали шаблон поиска для '+rusNamesList[i]+': '+val+'\nно не установили флаг "Частичное совпадение".');
		if (getElemProperty(likeElem+'Text', 'style.color')!='red') {
                    setElemProperty(likeElem+'Text', 'style.color', 'red');
                    blinkStr = "blinkElem('"+likeElem+"Text"+"')";
                    sI = setInterval(blinkStr, 700);
                    setInetrvalObj(sI);
		}
                return false;
	    }
        }
    }  
    return true;
}

