﻿// Author:    Serge I. Zolotukhin ( serge@design.ru )
// Updated:   2003-02-18
// Namespace: AlgFE
// Modifyed for ANCOR: Pavel Motorin ( gilt@design.ru )
// ( убран namespace algfe, так как при xslt-трансформации, он пропадает нафиг. 
//   По крайней мере, при той библиотеке,которая на данный момент прикручена к парсеру.
//	 + переключение шагов в формах.
//	 + реакция на textarea
// )
// Updated:   2003-12-29
/****************************************************************

 Реализовано:
 Проверка заполнения обязательных полей:
 Для работы скрипта обязательные поля должны содержать
 аттрибут @required='true'
 xmlns:algfe="http://www.artlebedev.ru/"

 ****************************************************************/

//===============================================================
// Имя класса для обязательных незаполненных элементов
var AlgFE_RequiredClassName = 'AlgFERequired'
// Текст сообщения о незаполненности полей
var AlgFE_AlertMessage = 'Ошибка!\nНет данных в поле, обязательном для заполнения.'

if (document.getElementById) SetupEventHandler(window, 'load', AlgFE_Initialize)

//===============================================================
// Обработчик onsubmit для form[(input|select|textarea)/@required='true']
function AlgFE_FormEventHandler(oEvent)
{
	var oEvent = window.event ? window.event : oEvent
	var oForm = window.event ? window.event.srcElement : oEvent.currentTarget

	for (var i = 0; i < oForm.elements.length; i++)
		if (oForm.elements[i].getAttribute('required') == 'true' && !AlgFE_CheckValuePresence(oForm.elements[i]))
		{
			var eThisElement = oForm.elements[i]
			var bFindStep = false;
			while (eThisElement.parentNode && !bFindStep)
			{
				var eThisElement = eThisElement.parentNode
				if (eThisElement.getAttribute('id') && eThisElement.getAttribute('id').substr(0, 4) == 'step')
				{

					bFindStep = true;
					var StepNumberToSwitch = eThisElement.getAttribute('id').substr(4)
				}
			}
			if (StepNumberToSwitch) {

				StepEnable(StepArray[StepNumberToSwitch])
				oForm.elements[i].focus()
			}
			alert(AlgFE_AlertMessage)
			if (oEvent.preventDefault) oEvent.preventDefault();
			return false;
		}

	if (bCheckValidateState != 1) {
		bCheckValidateState = 0
	}
	bCheckValidateState = bCheckValidateState + 2;
	CheckValidateStateAndDisableSubmitButton();
	return true;
}


// Обработчик onchange, onkeyup, onkeydown для form/(input|select|textarea)[@required='true']
function AlgFE_InputEventHandler(oEvent)
{
	var oElement = window.event ? window.event.srcElement : oEvent.currentTarget
	AlgFE_CheckValuePresence(oElement) ? AlgFE_RemoveCssClass(oElement, AlgFE_RequiredClassName) : AlgFE_ApplyCssClass(oElement, AlgFE_RequiredClassName)
	if($(".req").length > 0 ){$("#DoSubmit").addClass("disable"); $("#disable_label").show();}else{$("#DoSubmit").removeClass("disable");$("#disable_label").hide();}
}


// Инициализация
function AlgFE_Initialize()
{
	var oForm

	// Нужно приделать обработчик onsubmit к form[child::./@required='true']
	for (var i = 0; i < document.forms.length; i++)
		for (var j = 0; j < document.forms[i].elements.length; j++)
			if (document.forms[i].elements[j].getAttribute('required') == 'true')
			{
				if (oForm != document.forms[i])
				{
					// Эта переменная для того, чтобы не приделывать обработчик к одной и той же форме несколько раз
					oForm = document.forms[i]
					SetupEventHandler(document.forms[i], 'submit', AlgFE_FormEventHandler)
				}
				SetupEventHandler(document.forms[i].elements[j], 'change', AlgFE_InputEventHandler)
				SetupEventHandler(document.forms[i].elements[j], 'keyup', AlgFE_InputEventHandler)
				SetupEventHandler(document.forms[i].elements[j], 'keydown', AlgFE_InputEventHandler)
				AlgFE_CheckValuePresence(document.forms[i].elements[j]) ? AlgFE_RemoveCssClass(document.forms[i].elements[j], AlgFE_RequiredClassName) : AlgFE_ApplyCssClass(document.forms[i].elements[j], AlgFE_RequiredClassName)
			}
}


// Проверка заполненности обязательного элемента
function AlgFE_CheckValuePresence(oElement)
{
if(oElement.id != 'BirthdayDay' && oElement.id != 'BirthdayYear' ){
	return !
			(
					( oElement && oElement.type && oElement.type == 'select-one' && !oElement.selectedIndex ) ||
					( oElement && oElement.type && oElement.type == 'select-multiple' && !oElement.selectedIndex ) ||
					( oElement && oElement.type && oElement.type == 'text' && !oElement.value ) ||
					( oElement && oElement.type && oElement.type == 'password' && !oElement.value ) ||
					( oElement && oElement.nodeName == 'TEXTAREA' && !oElement.value )
					)
}
else {


	if($("#BirthdayDay").val().length > 0 && $("#BirthdayYear").val().length == 4){
		
		return true;
	}
	else {
		return false;
	}
}

}

//===============================================================
// Приделать к элементу обработчик события
// sEventType -- из Мозилы, т.ы. не onclick, а click
function SetupEventHandler(oElement, sEventType, pHandler)
{
	if (oElement.attachEvent) oElement.attachEvent('on' + sEventType, pHandler)
	if (oElement.addEventListener) oElement.addEventListener(sEventType, pHandler, false)
}

// Применить CSS-класс к элементу
function AlgFE_ApplyCssClass(oElement, sClassName)
{
	//if (oElement) oElement.className += ' ' + sClassName
if(oElement.id != 'BirthdayDay' && oElement.id != 'BirthdayYear' ){
	$("label[@for = " + $(oElement).attr("id") + " ]").addClass("req");
	}else{
		$("label[@for = 'BirthdayDay' ]").addClass("req");

	}
}

// Удалить CSS-класс у элемента
function AlgFE_RemoveCssClass(oElement, sClassName)
{
if(oElement.id != 'BirthdayDay' && oElement.id != 'BirthdayYear' ){
	//if (oElement) oElement.className = oElement.className.replace(new RegExp(sClassName, 'g'), '')
	$("label[@for = " + $(oElement).attr("id") + " ]").removeClass("req");
}else{
		$("label[@for = 'BirthdayDay' ]").removeClass("req");

	}
}

