/**
* HostCMS
*
* @author Hostmake LLC, http://www.hostcms.ru/
* @version 5
*/

// Проверка ячейки field
// field - проверяемый элемент
function FieldCheck(field)
{
	//if (null == fieldType || undefined == fieldType)
	if (typeof fieldType == 'undefined')
	{
		return false;
	}

	var value = field.value;

	if (fieldType[field.id])
	{
		var message = '';

		//if (value.length > 0)
		//{
		// Проверка на минимальную длину
		if (fieldType[field.id]['minlen'] && value.length < fieldType[field.id]['minlen'])
		{
			var decl = declension(fieldType[field.id]['minlen'], 'символ', 'символа', 'символов');
			
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['minlen'])
			{
				message += fieldMessage[field.id]['minlen'];
			}
			else // Стандартное сообщение
			{
				message += 'Минимум ' + fieldType[field.id]['minlen'] + ' ' + decl + '. Текущая длина &mdash; ' + value.length + '. ';
			}
		}

		// Проверка на максимальную длину
		if (fieldType[field.id]['maxlen'] && value.length > fieldType[field.id]['maxlen'])
		{
			var decl = declension(fieldType[field.id]['maxlen'], 'символ', 'символа', 'символов');
			
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['maxlen'])
			{
				message += fieldMessage[field.id]['maxlen'];
			}
			else // Стандартное сообщение
			{
				message += 'Максимум ' + fieldType[field.id]['maxlen'] + ' ' + decl + '. Текущая длина &mdash; ' + value.length + '. ';
			}
		}

		// Проверка на регулярное выражение
		if (value.length > 0 && fieldType[field.id]['reg'] && !value.match(fieldType[field.id]['reg']))
		{
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['reg'])
			{
				message += fieldMessage[field.id]['reg'];
			}
			else // Стандартное сообщение
			{
				message += 'Значение поля не соответствует формату. ';
			}
		}

		// Проверка на соответствие значений полей
		if (fieldType[field.id]['fieldEquality'])
		{
			// Пытаемся получить значение поля, которому должны соответствовать
			var filed2 = document.getElementById(fieldType[field.id]['fieldEquality']);

			if (filed2)
			{
				// Сравниваем значение полей
				if (value != filed2.value)
				{
					// Есть пользовательское сообщение
					if (fieldMessage[field.id] && fieldMessage[field.id]['fieldEquality'])
					{
						message += fieldMessage[field.id]['fieldEquality'];
					}
					else // Стандартное сообщение
					{
						message += 'Значения полей различны. ';
					}
				}
			}
		}
		//}

		FieldCheckShowError(field.id, message);
	}
}


function FieldCheckShowError(fieldname, message)
{
	// Вносим в див сообщение
	var ElementErrorDiv = document.getElementById(fieldname + '_error');

	if (ElementErrorDiv)
	{
		ElementErrorDiv.innerHTML = message;
	}

	// Плучаем элемент формы, над которым ведется работа
	var ElementField = document.getElementById(fieldname);

	if (ElementField)
	{
		if (message.length > 0)
		{
			//ElementField.style.backgroundColor = "#FFD1C3";
			ElementField.style.borderStyle="solid";
			ElementField.style.borderWidth="1px";
			ElementField.style.borderColor="#DB1905";

			ElementField.style.backgroundImage = "url('/admin/images/bullet_red.gif')";
			ElementField.style.backgroundPosition = "center right";
			ElementField.style.backgroundRepeat = "no-repeat";
			// ElementField.style.paddingRight = "20px";

			// Устанавливаем флаг несоответствия
			fieldsStatus[fieldname] = true;
		}
		else //if (ElementField.value.length > 0) // Ошибок нет и в поле есть данные
		{
			//ElementField.style.backgroundColor = "#FFFFFF";

			ElementField.style.borderStyle="";
			ElementField.style.borderWidth="";
			ElementField.style.borderColor="";

			ElementField.style.backgroundImage = "url('/admin/images/bullet_green.gif')";
			ElementField.style.backgroundPosition = "center right";
			ElementField.style.backgroundRepeat = "no-repeat";
			//ElementField.style.paddingRight = "20px";

			// Устанавливаем флаг несоответствия
			fieldsStatus[fieldname] = false;
		}
		/*else // В поле нет данных
		{
		ElementField.style.backgroundColor = "#F5F5F5";
		ElementField.style.backgroundImage = "none";

		// Устанавливаем флаг несоответствия
		fieldsStatus[fieldname] = false;
		}*/
	}

	// Отображать контрольные элементы
	var ControlElementsStatus = true;

	//document.title = aaa.length;

	for (ItemIndex in fieldsStatus)
	{
		// если есть хоть одно несоответствие - выключаем управляющие элементы
		if (fieldsStatus[ItemIndex])
		{
			ControlElementsStatus = false;
			//break;
		}
	}

	// ControlElements
	var ControlElementsDiv = document.getElementById('ControlElements');

	if (ControlElementsDiv)
	{
		// Получаем управляющие эелементы внутри дива
		var element_array = ControlElementsDiv.getElementsByTagName("input");

		//document.title += ' C = ' + ControlElementsStatus;

		// Если получили хотя бы один
		if (element_array.length > 0)
		{
			// Проходимся по списку
			for (var i = 0; i < element_array.length; i++)
			{
				if (ControlElementsStatus)
				{
					// Вкючаем кнопку
					element_array[i].removeAttribute('disabled');
				}
				else
				{
					// Выключаем кнопки
					element_array[i].setAttribute('disabled', true);
				}
			}
		}
	}
}

function CheckAllField(form_name)
{
	var ElementForm = document.getElementById(form_name);

	if (ElementForm)
	{
		// Получаем все input-ы формы
		element_array = ElementForm.getElementsByTagName("input");

		// Если получили хотя бы один
		if (element_array.length > 0)
		{
			// Проходимся по списку
			for (var i = 0; i < element_array.length; i++)
			{
				FieldCheck(element_array[i]);
			}
		}

		// Получаем все textarea-и формы
		element_array = ElementForm.getElementsByTagName("textarea");

		// Если получили хотя бы один
		if (element_array.length > 0)
		{
			// Проходимся по списку
			for (var i = 0; i < element_array.length; i++)
			{
				FieldCheck(element_array[i]);
			}
		}
	}
}

/**
* Склонение после числительных
* int number числительное
* int nominative Именительный падеж
* int genitive_singular Родительный падеж, единственное число
* int genitive_plural Родительный падеж, множественное число
*/
function declension(number, nominative, genitive_singular, genitive_plural)
{
	var last_digit = number % 10;
	var last_two_digits = number % 100;
	
	if (last_digit == 1 && last_two_digits != 11)
	{
		var result = nominative;
	}
	else
	{
		if ((last_digit == 2 && last_two_digits != 12) || (last_digit == 3 && last_two_digits != 13) || (last_digit == 4 && last_two_digits != 14))
		{
			var result = genitive_singular;
		}
		else
		{
			var result = genitive_plural;
		}
	}
	
	return result;
}