var imageMenuData = Array(); var nObject = ""; function setMenuMouseOver(id) { this.nObject = document.getElementById("menuImg_" + id); if(imageMenuData[id]["imgMouseOver"] != -1 && imageMenuData[id]["imgMouseOver"] != "undefined") { this.nObject.src = imageMenuData[id]["imgMouseOver"]; } return; } function setMenuMouseOut(id) { if(imageMenuData[id]["imgSrc"] != -1 && imageMenuData[id]["imgSrc"] != "undefined") { this.nObject.src = imageMenuData[id]["imgSrc"]; } return; } function init(frmName) { var frmObject = ""; var frmReturn = true; var frmErrorTxt = ""; var n_frmObject = ""; var frmValidate = ""; var color = ""; var defColor = "#CCCCCC"; var showColor = 0; var fieldData = new Array(); var frmData = new Array(); var checkData = new Array(); checkData[0] = "required"; checkData[1] = "numeric"; checkData[2] = "string"; checkData[3] = "alphanum"; checkData[4] = "email"; checkData[5] = "minlen"; checkData[6] = "maxlen"; checkData[7] = "float"; checkData[8] = "noselect"; checkData[9] = "nochecked"; checkData[10] = "date"; checkData[11] = "day"; checkData[12] = "month"; checkData[13] = "year"; checkData[14] = "noequals"; var errorMessage = new Array(); errorMessage[checkData[0]] = "Заполните все обязательные поля"; errorMessage[checkData[1]] = "Поле должно быть числовым"; errorMessage[checkData[2]] = "Поле должно содержать только буквы"; errorMessage[checkData[3]] = "Поле должно содержать только цифры и буквы"; errorMessage[checkData[4]] = "Поле должно содержать e-mail адрес"; errorMessage[checkData[5]] = "Количество символов должно быть не меньше %s. Текущее количество - %s"; errorMessage[checkData[6]] = "Количество символов должно быть не больше %s. Текущее количество - %s"; errorMessage[checkData[7]] = "Значение должно иметь тип float (разделитель .)"; errorMessage[checkData[8]] = "Выберите значение, отличающееся от \"%s\""; errorMessage[checkData[9]] = "Поле должно быть выделено"; errorMessage[checkData[10]] = "Поле должно являться датой. Шаблон ввода: %s"; errorMessage[checkData[11]] = "Количество дней не может быть отрицательным,\n не должно превышать 31,\n не должно быть равным 0 и\n должно быть числовым"; errorMessage[checkData[12]] = "Количество месяцев не может быть отрицательным,\n не должно превышать 12,\n не должно быть равным 0 и\n должно быть числовым"; errorMessage[checkData[13]] = "Год не может быть отрицательным,\n не должно превышать 2075,\n не должно быть меньше 1900 и\n должно быть числовым"; errorMessage[checkData[14]] = "Значения полей %s должны совпадать"; var addErrorMessage = new Array(); addErrorMessage["dayFormat"] = "Неправльно введён формат дня."; addErrorMessage["monthFormat"] = "Неправльно введён формат месяца."; addErrorMessage["yearFormat"] = "Неправльно введён формат года."; this.frmObject = document.forms[frmName]; this.checkText = function(frmTxt) { var checkedFrmTxt = frmTxt.replace(/(^ +)|( +$)/,""); var defaultError = ""; defaultError = errorMessage[this.frmValidate]; this.frmErrorTxt = (checkedFrmTxt.length > 0)? checkedFrmTxt : defaultError; return; } this.setFocus = function() { if(this.n_frmObject.type != "hidden" && this.n_frmObject.disabled == false) { this.n_frmObject.focus(); } return; } this.setColor = function(color) { this.color = color; return; } this.showColorer = function(flag) { flag = (flag == 0 || flag == 1)? flag : 0; this.showColor = flag; return; } this.inColor = function() { var nColor = this.color; if(!nColor) { nColor = defColor; } this.n_frmObject.style.background = nColor; return; } this.checkColor = function() { var tmpObjColor = this.n_frmObject.style.background.toString().toLowerCase(); var nColor = this.color; if(!nColor) { nColor = defColor; } var tmpCurrColor = nColor.toLowerCase(); if(tmpObjColor == tmpCurrColor) { return true; } return false; } this.noColor = function() { this.n_frmObject.style.background = ""; return; } this.checkValue = function(value) { this.n_frmObject.value = this.n_frmObject.value.replace(/(^ +)|( +$)/,""); } this.addReqField = function(fieldName, frmName) { var flag = 0; for(var i in fieldData) { if(fieldData[i] == fieldName) { flag = 1; } } if(flag == 0) { fieldData[fieldData.length] = fieldName; frmData[fieldData.length] = frmName; } } this.getErrorMessage = function(errorData) { var startPoint = 0; var endPoint = 0; var tmpMsg = this.frmErrorTxt; var endPoint = tmpMsg.search(/\%s/i); var tmpNewMsg = ""; var trueMsg = ""; if(typeof errorData == "object" && endPoint != -1) { for(i in errorData) { tmpNewMsg = tmpMsg.substring(startPoint, endPoint + 2); tmpMsg = tmpMsg.substr(endPoint + 2, tmpMsg.length); endPoint = tmpMsg.search(/\%s/i); trueMsg += tmpNewMsg.replace("%s", errorData[i]); } startPoint = this.frmErrorTxt.lastIndexOf("%s"); endPoint = this.frmErrorTxt.length; trueMsg += this.frmErrorTxt.substring(startPoint + 2, endPoint); this.frmErrorTxt = trueMsg; } return; } // Проверяем на обязательное заполнение this.addReqValidation = function(frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "required"; var invalidFields = new Array(); var counter = 0; var firstElement = ""; for(i in fieldData) { this.n_frmObject = this.frmObject[fieldData[i]]; this.checkText(frmTxt); this.checkValue(); if(this.n_frmObject.value.length == 0) { if(this.showColor == 1) { this.inColor(); } firstElement = (firstElement.length == 0)? fieldData[i] : firstElement; invalidFields[counter++] = this.n_frmObject; } else { //if(this.checkColor() == true) //{ this.noColor(); //} } } if(invalidFields.length > 0) { this.n_frmObject = this.frmObject[firstElement]; alert(this.frmErrorTxt); this.setFocus(); this.frmReturn = false; return false; } this.frmReturn = true; fieldData = new Array(); frmData = new Array(); return true; } // Проверяем на цифровые значения this.addNumValidation = function(frmName, frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "numeric"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /[^0-9 ]/gi; if(this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1) { alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем чтобы в значении были только буквы this.addStringValidation = function(frmName, frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "string"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /[^A-ZА-Я ]/gi; if(this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1) { alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем наличие букв и цифр this.addAlphaNumValidation = function(frmName, frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "alphanum"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /[^0-9A-ZА-Я_ ]/gi; if(this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1) { alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем корректность email this.addEmailValidation = function(frmName, frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "email"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i; if(this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) == -1) { alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем на минимальное кол-во символов this.addMinLengthValidation = function(frmName, frmTxt, nLength) { if(this.frmReturn == false) { return false; } this.frmValidate = "minlen"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); var valueLength = this.n_frmObject.value.length; if(valueLength != 0 && valueLength < nLength) { var errorData = new Array(nLength, valueLength); this.getErrorMessage(errorData); alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем на максимальное кол-во символов this.addMaxLengthValidation = function(frmName, frmTxt, nLength) { if(this.frmReturn == false) { return false; } this.frmValidate = "maxlen"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); var valueLength = this.n_frmObject.value.length; if(valueLength != 0 && valueLength > nLength) { var errorData = new Array(nLength, valueLength); this.getErrorMessage(errorData); alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем значение float this.addFloatValidation = function(frmName, frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "float"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /^[0-9]*(\.)?[0-9]*$/ig; if(this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) == -1) { alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } // Проверяем значение float this.addNoSelectValidation = function(frmName, frmTxt, invalidValue) { if(this.frmReturn == false || this.frmObject[frmName].type != "select-one") { return false; } this.frmValidate = "noselect"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); for(n = 0; n < this.n_frmObject.options.length; n++) { if(this.n_frmObject.options[n].selected == true) { selectedOption = this.n_frmObject.options[n]; } } if(selectedOption.value == invalidValue) { var errorData = new Array(selectedOption.text); this.getErrorMessage(errorData); alert(this.frmErrorTxt); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } this.addNoCheckedValidation = function(frmName, frmTxt, invalidValue) { if(this.frmReturn == false || this.frmObject[frmName].type != "checkbox") { return false; } this.frmValidate = "nochecked"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); if(this.n_frmObject.checked == false) { alert(this.frmErrorTxt); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } this.noColor(); this.frmReturn = true; return true; } this.addDateValidation = function(frmName, frmTxt, dateTemplate) { if(this.frmReturn == false) { return false; } var delimiterData = new Array(); var counter = 0; this.frmValidate = "date"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); if(this.n_frmObject.value.length == 0) { return true; } var delimiter = ""; if(dateTemplate.substr(1, 1) != "Y") { delimiter = dateTemplate.search(/.\%Y/); delimiter = dateTemplate.substr(delimiter, 1); } else { delimiter = dateTemplate.search(/.\%m/ig); delimiter = dateTemplate.substr(delimiter, 1); } // Проверяем корректность структуры var startPoint = 0; var endPoint = 0; var tmpPoint = 0; for(i = 0; i < this.n_frmObject.value.length; i++) { var symbol = this.n_frmObject.value.substr(i, 1); if(symbol == delimiter) { delimiterData[counter] = this.n_frmObject.value.substr(startPoint, tmpPoint); startPoint = endPoint + 1; counter++; tmpPoint = 0; } else { endPoint++; tmpPoint++; } } delimiterData[delimiterData.length] = this.n_frmObject.value.substring(startPoint + 1, this.n_frmObject.value.length); if(counter != 2 && this.n_frmObject.value.length > 0) { var errorData = new Array(dateTemplate); this.getErrorMessage(errorData); this.frmErrorTxt = this.frmErrorTxt.replace(/%/g, ""); alert(this.frmErrorTxt); this.setFocus(); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } // First point n = delimiter.length; if(this.n_frmObject.value.indexOf(delimiter, 0) > 0) { m = 1; tmpFormat = dateTemplate.substr(m, n); var new_point = this.n_frmObject.value.indexOf(delimiter, 0) + 1; this.tmpDateCoordinator(tmpFormat, delimiterData[0]); } // Second point if(this.n_frmObject.value.indexOf(delimiter, new_point) > 0) { m += 3; tmpFormat = dateTemplate.substr(m, 1); new_point = this.n_frmObject.value.indexOf(delimiter, new_point) + 1; this.tmpDateCoordinator(tmpFormat, delimiterData[1]); } // Third point m += 3; tmpFormat = dateTemplate.substr(m, 1); this.tmpDateCoordinator(tmpFormat, delimiterData[2]); if(this.frmReturn == false) { this.setFocus(); if(this.showColor == 1) { this.inColor(); } return false; } this.noColor(); this.frmReturn = true; return true; } this.tmpDateCoordinator = function(nFormat, nData) { switch(nFormat) { case("d"): case("D"): return this.tmpDayValidator(nData, nFormat); break; case("m"): case("M"): return this.tmpMonthValidator(nData, nFormat); break; case("Y"): return this.tmpYearValidator(nData, nFormat); break; } } this.tmpDayValidator = function(tmpData, dayTemplate) { if(this.frmReturn == false) { return false; } if(dayTemplate == "") { dayTemplate = "%d"; } this.frmValidate = "day"; var nData = tmpData; searchExpr = /\D/ig; if( nData.length != 0 && nData.search(searchExpr) != -1 || ( nData < 1 || nData > 31)) { alert(errorMessage["day"]); this.frmReturn = false; return false; } switch(dayTemplate) { case("%d"): if(nData < 10 && nData.length > 1) { alert(addErrorMessage["dayFormat"]); this.frmReturn = false; return false; } break; case("%D"): if(nData.length != 2) { alert(addErrorMessage["dayFormat"]); this.frmReturn = false; return false; } break; } this.frmReturn = true; return true; } this.tmpMonthValidator = function(tmpData, monthTemplate) { if(this.frmReturn == false) { return false; } if(monthTemplate == "") { monthTemplate = "%m"; } this.frmValidate = "month"; var nData = tmpData; searchExpr = /\D/ig; if( nData.length != 0 && nData.search(searchExpr) != -1 || ( nData < 1 || nData > 12)) { alert(errorMessage["month"]); this.frmReturn = false; return false; } switch(monthTemplate) { case("%m"): if(nData < 10 && nData.length > 1) { alert(addErrorMessage["monthFormat"]); this.frmReturn = false; return false; } break; case("%M"): if(nData.length != 2) { alert(addErrorMessage["monthFormat"]); this.frmReturn = false; return false; } break; } this.frmReturn = true; return true; } this.tmpYearValidator = function(tmpData, yearTemplate) { if(this.frmReturn == false) { return false; } if(yearTemplate == "") { yearTemplate = "%Y"; } this.frmValidate = "year"; var nData = tmpData; searchExpr = /\D/ig; if( nData.length != 0 && nData.search(searchExpr) != -1 || ( nData > 2075 || nData < 1900 || nData.length != 4)) { alert(errorMessage["year"]); this.frmReturn = false; return false; } switch(yearTemplate) { case("%Y"): if(nData.length != 4) { alert(addErrorMessage["yearFormat"]); this.frmReturn = false; return false; } break; } this.frmReturn = true; return true; } this.addDayValidation = function(frmName, frmTxt, dayTemplate) { // dayTemplate - Может иметь несколько видов // 1) %d - формат (1, 2, 3, 12) // 1) %D - формат двузначный (01, 02, 03, 12) if(this.frmReturn == false) { return false; } if(dayTemplate == "") { dayTemplate = "%d"; } this.frmValidate = "day"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /\D/ig; if( this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1 || ( this.n_frmObject.value < 1 || this.n_frmObject.value > 31)) { alert(this.frmErrorTxt); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } switch(dayTemplate) { case("%d"): if(this.n_frmObject.value < 10 && this.n_frmObject.value.length > 1) { alert(addErrorMessage["dayFormat"]); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } break; case("%D"): if(this.n_frmObject.value.length != 2) { alert(addErrorMessage["dayFormat"]); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } break; } this.noColor(); this.frmReturn = true; return true; } this.addMonthValidation = function(frmName, frmTxt, monthTemplate) { if(this.frmReturn == false) { return false; } this.frmValidate = "month"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /\D/ig; if( this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1 || ( this.n_frmObject.value < 1 || this.n_frmObject.value > 12)) { alert(this.frmErrorTxt); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } switch(monthTemplate) { case("%m"): if(this.n_frmObject.value < 10 && this.n_frmObject.value.length > 1) { alert(addErrorMessage["monthFormat"]); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } break; case("%M"): if(this.n_frmObject.value.length != 2) { alert(addErrorMessage["monthFormat"]); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } break; } this.noColor(); this.frmReturn = true; return true; } this.addYearValidation = function(frmName, frmTxt, yearTemplate) { if(this.frmReturn == false) { return false; } this.frmValidate = "year"; this.n_frmObject = this.frmObject[frmName]; this.checkText(frmTxt); this.checkValue(); searchExpr = /\D/ig; if( this.n_frmObject.value.length != 0 && this.n_frmObject.value.search(searchExpr) != -1 || ( this.n_frmObject.value > 2075 || this.n_frmObject.value < 1900 || this.n_frmObject.value.length != 4)) { alert(this.frmErrorTxt); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } switch(yearTemplate) { case("%Y"): if(this.n_frmObject.value.length != 4) { alert(addErrorMessage["yearFormat"]); if(this.showColor == 1) { this.inColor(); } this.frmReturn = false; return false; } break; } this.noColor(); this.frmReturn = true; return true; } this.addEqualField = function(fieldName, frmName) { var flag = 0; for(var i in fieldData) { if(fieldData[i] == fieldName) { flag = 1; } } if(flag == 0) { fieldData[fieldData.length] = fieldName; frmData[fieldData.length] = frmName; } } // Проверяем на обязательное заполнение this.addEqualValidation = function(frmTxt) { if(this.frmReturn == false) { return false; } this.frmValidate = "noequals"; var invalidFields = new Array(); var counter = 0; var n_counter = 0; var flag = 0; var firstElement = ""; for(i in fieldData) { this.n_frmObject = this.frmObject[fieldData[i]]; this.checkText(frmTxt); this.checkValue(); if(n_counter != 0 && a != this.n_frmObject.value) { if(flag == 0) { firstElement = i; } invalidFields[counter++] = this.n_frmObject; flag = 1; } a = this.n_frmObject.value; n_counter++; } if(invalidFields.length > 0) { for(i in fieldData) { this.n_frmObject = this.frmObject[fieldData[i]]; if(this.showColor == 1) { this.inColor(); } } this.n_frmObject = this.frmObject[firstElement]; var tmpMessage = ""; for(i in frmData) { if(frmData[i].length > 0) { tmpMessage += (tmpMessage.length == 0)? "\"" + frmData[i] + "\"" : ", \"" + frmData[i] + "\""; } } var errorData = new Array(tmpMessage); this.getErrorMessage(errorData); alert(this.frmErrorTxt); this.setFocus(); this.frmReturn = false; return false; } this.frmReturn = true; fieldData = new Array(); frmData = new Array(); return true; } }