//{{{ Inline Hint Functions

//{{{ registerInlineHint
/**
 * Регистрирует внутриинпутный хинт
 * @param Element el source element
 */
function registerInlineHint(el)
{
	if ( hasAttribute(el,'inlineHint') )
	{
		if ( emptyTrim(el.value) || el.value == el.getAttribute('inlineHint') )
		{
			addClass( el, 'inlineHint' );
			el.value = el.getAttribute('inlineHint');
		}
		else {
			removeClass( el, 'inlineHint' );
		}
		addEventHandler( el, 'onfocus',	function(el) { inlineHintFocus(el); },	'inlineHint' );
		addEventHandler( el, 'onblur',	function(el) { inlineHintBlur(el); },	'inlineHint' );
	}
}
//===========================================================================}}}
//{{{ inlineHintFocus
/**
 * onFocus для внутриинпутного хинта
 * @param Element el source element
 */
function inlineHintFocus(el)
{
	if ( hasAttribute(el,'inlineHint') )
	{
		if (el.value == el.getAttribute('inlineHint') )
		{
			el.value = '';
			removeClass( el, 'inlineHint' );
		}
	}
}
//===========================================================================}}}
//{{{ inlineHintBlur
/**
 * onBlur для внутриинпутного хинта
 * @param Element el source element
 */
function inlineHintBlur(el)
{
	if ( hasAttribute(el,'inlineHint') )
	{
		if ( emptyTrim(el.value) || el.value == el.getAttribute('inlineHint') )
		{
			addClass( el, 'inlineHint' );
			el.value = el.getAttribute('inlineHint');
		}
	}
}
//===========================================================================}}}
//{{{ inlineHintUpdate
/**
 * Обновление состояния внутриинпутного хинта
 * @param Element el source element
 */
function inlineHintUpdate(el)
{
	if ( hasAttribute(el,'inlineHint') )
	{
		if ( emptyTrim(el.value) || el.value == el.getAttribute('inlineHint') )
		{
			addClass( el, 'inlineHint' );
			el.value = el.getAttribute('inlineHint');
		}
		else {
			removeClass( el, 'inlineHint' );
		}
	}
}
//===========================================================================}}}

/*============================================================================*
 *  END OF Inline Hint Functions                                              *
 *=========================================================================}}}*/
 
//{{{ Required Fields Functions

//{{{ registerRequiredField
/**
 * Регистрирует внутриинпутный хинт
 * @param Element el source element
 */
function registerRequiredField(el)
{
	addClass( el, emptyTrim(el.value) ? 'reqEmpty' : 'reqOk' );
	addEventHandler( el, 'onchange', function(el) { requiredFieldChange(el); }, 'required' );
}
//===========================================================================}}}
//{{{ requiredFieldChange
/**
 * onChange для внутриинпутного хинта
 * @param Element el source element
 */
function requiredFieldChange(el)
{
	if ( el.getAttribute('hintIsDefault') != 'true' && (emptyTrim(el.value) || el.value == el.getAttribute('inlineHint')) )
	{
		if ( removeClass(el, 'reqOk') ) {
			addClass( el, 'reqEmpty' );
		}
	}
	else
	{
		if ( removeClass(el, 'reqEmpty') ) {
			addClass( el, 'reqOk' );
		}
	}
}
//===========================================================================}}}

/*============================================================================*
 *  END OF Required Fields Functions                                          *
 *=========================================================================}}}*/

//{{{ formFieldsGlobalRegister
/**
 * Регистрирует вспомогательные фишки для элементов формы
 * @param Element form target form
 */
function formFieldsGlobalRegister(form)
{
	for ( var i = 0; i < form.elements.length; i++ )
	{
		e = form.elements.item(i);
		/* Если inlineHint совпадает со значением по умолчанию, то сначала проставляем value*/
		if ( e.getAttribute('hintIsDefault') == 'true' && e.value == '') {
			e.value = e.getAttribute('inlineHint');
		}
		
		if ( e.getAttribute('required') == 'true' || e.getAttribute('required') == 'required'/*opera huck*/ ) {
			registerRequiredField(e);
		}
		
		if ( hasAttribute(e,'inlineHint') ) {
			registerInlineHint(e);
		}
	}
}
//===========================================================================}}}
//{{{ formFieldsCleanInlineHints
/**
 * Чистит внутриинпутные хинты (нужно вешать на onSubmit)
 * @param Element form target form
 */
function formFieldsCleanInlineHints(form)
{
	for ( var i = 0; i < form.elements.length; i++ )
	{
		e = form.elements.item(i);
		if (	hasAttribute(e,'inlineHint')
			&& e.getAttribute('inlineHint') == e.value
			&& e.getAttribute('hintIsDefault') != 'true' )
		{
			e.value = '';
		}
	}
}
//===========================================================================}}}
//{{{ blockFieldsUpdate
/**
 * Обновляет состояние всех полей внутри заданного элемента
 * @param Element el элемент
 */
function blockFieldsUpdate(el)
{
	var i;
	var fields = el.getElementsByTagName('INPUT');
	for ( i = 0; i < fields.length; i++ )
	{
		inlineHintUpdate(fields[i]);
		requiredFieldChange(fields[i]);
	}
	fields = el.getElementsByTagName('TEXTAREA');
	for ( i = 0; i < fields.length; i++ )
	{
		inlineHintUpdate(fields[i]);
		requiredFieldChange(fields[i]);
	}
}
//===========================================================================}}}
//{{{ blockFieldsRegister
/**
 * Регистрирует вспомогательные фишки для элементов формы внутри заданного блока
 * @param Element el элемент
 */
function blockFieldsRegister(el)
{
	var i;
	var fields = el.getElementsByTagName('INPUT');
	for ( i = 0; i < fields.length; i++ )
	{
		if ( fields[i].getAttribute('required') == 'true' || fields[i].getAttribute('required') == 'required'/*opera huck*/ ) {
			registerRequiredField(fields[i]);
		}
		if ( hasAttribute(fields[i],'inlineHint') ) {
			registerInlineHint(fields[i]);
		}
	}
	fields = el.getElementsByTagName('TEXTAREA');
	for ( i = 0; i < fields.length; i++ )
	{
		if ( fields[i].getAttribute('required') == 'true' || fields[i].getAttribute('required') == 'required'/*opera huck*/ ) {
			registerRequiredField(fields[i]);
		}
		if ( hasAttribute(fields[i],'inlineHint') ) {
			registerInlineHint(fields[i]);
		}
	}
}
//===========================================================================}}}
//{{{ sychrozineRequiredFields
/**
 * Синхронизируент стили одно элемента с другим
 * @param Element el_child - зависимый элемент
 * @param Element el_parent - элемент от которого зависит стиль
 */
function sychrozineRequiredFields( el_child, el_parent )
{
	if ( ( el_child.getAttribute('required') == 'true' || el_child.getAttribute('required') == 'required' ) &&
		  ( el_parent.getAttribute('required') == 'true' || el_parent.getAttribute('required') == 'required' ) )
	{
		if ( emptyTrim(el_parent.value) )
		{
			if ( removeClass(el_child, 'reqOk') ) {
				addClass( el_child, 'reqEmpty' );
			}
		}
		else
		{
			if ( removeClass(el_child, 'reqEmpty') ) {
				addClass( el_child, 'reqOk' );
			}
		}
	}
}
//===========================================================================}}}
//{{{ endisFormBlock
/**
 * Делает блок формы disabled или наоборот
 * @param Element el элемент, представляющий блок формы
 * @param bool enable enable ли?
 */
function endisFormBlock(el, enable)
{
	var fields = el.getElementsByTagName('INPUT');
	var i;
	for ( i = 0; i < fields.length; i++ ) {
		fields[i].disabled = !enable;
	}
	fields = el.getElementsByTagName('SELECT');
	for ( i = 0; i < fields.length; i++ ) {
		if ( fields[i] != jQuery('#region')[0] )
		fields[i].disabled = !enable;
	}
	fields = el.getElementsByTagName('TEXTAREA');
	for ( i = 0; i < fields.length; i++ ) {
		fields[i].disabled = !enable;
	}
	if ( is_ie ) {
		el.disabled = !enable;
	}
	if ( enable ) {
		removeClass(el, 'disabled');
	}
	else {
		addClass(el, 'disabled');
	}
}
//===========================================================================}}}

/*============================================================================*
 * vim: set expandtab tabstop=3 shiftwidth=3 foldmethod=marker:               *
 *   END OF FILE                                                              *
 *============================================================================*/
