
window.addEvent('domready', function() { initForm(); });

/* расширения файлов для красивых полей  */
var inputFileExtensions = new Hash({ 
	'doc': 0,
	'bmp': 16,
	'jpg': 32,
	'jpeg': 32,
	'png': 48,
	'gif': 64,
	'psd': 80,
	'mp3': 96,
	'wav': 96,
	'ogg': 96,
	'avi': 112,
	'wmv': 112,
	'flv': 112,
	'pdf': 128,
	'exe': 144,
	'txt': 160,
	'default': 176 //изображение по-умолчанию - последнее
 });

/**
 * Инициализация формы
 */
function initForm()
{
	//все поля ввода
  $$('form.form .input').each( function(input)
  {
    // если осел меняем классы руками
    if(Browser.Engine.trident)
    {
      input.addEvent('focus',      function(){ this.addClass('inputFocus')  });
      input.addEvent('blur',       function(){ this.removeClass('inputFocus') });
      input.addEvent('mouseenter', function(){ this.addClass('inputHover') });
      input.addEvent('mouseleave', function(){ this.removeClass('inputHover') });
    }
    // показываем и скрываем хинты
    input.addEvent('focus',function(){ getHintsByInputId(this.getProperty('id')).each(showLabel) });
    input.addEvent('blur', function(){ getHintsByInputId(this.getProperty('id')).each(hideLabel) });
  });

  //пустые инпуты
	var empyInputs = $$('form.form .input').filter(function(el){
		return ((el.type == 'text' || el.type == 'password' || el.get('tag') == 'textarea') && el.value == '' && !el.get('noFocus') )
	});
	//выделяем первый пустой
	if(empyInputs.length)
	{
		empyInputs[0].focus();
	}

  //собственные красивые поля выбора файла
  $$('form.form .inputFileWrapper').each( function(wrapper)
  {
    //создаем новые элементы
    var button   = new Element('input', {'type': 'button', 'class': 'button fakeButton', 'value': 'Обзор...' });
    var blocker  = new Element('div',   {'class': 'inputFileBlocker'});
    var fileName = new Element('div',   {'class': 'inputFileName'});
    //добавляем во враппер новые элементы
    wrapper.adopt(button, blocker, fileName);

    //базовый файлинпут
    var inputFile = wrapper.getElement('input.inputFile');
    //событие выбора файла
    inputFile.addEvent('change', function(){ handleInputFileChange(this) });
  });
}

// получает массив лейблов по id инпута
function getLabelsByInputId(inputId, labelClass) 
{ 
//  alert(inputId);
	var inputId = inputId;
  var labelClass = labelClass ? '.' + labelClass : '';
  
  var labelArr = $$('form.form label' + labelClass).filter( function(label){
    return label.getProperty('for') == inputId;
  });

	return labelArr;
}

// массив подсказок по id инпута
function getHintsByInputId(inputId)
{
  return getLabelsByInputId(inputId, 'hint');
}

//показывает лейбл
function showLabel(label)
{
  if ( label.getStyle('opacity').toInt() )
  {
    label.setStyle('opacity', '0');
  }
  label.setStyle('visibility', 'visible');
  label.fade('in'); 
}

//скрывает лейбл
function hideLabel(label) 
{
  label.fade('out'); 
}

//обработка события выбора файла
function handleInputFileChange(inputFile)
{
  //элемент для отображения имени файла, привязанный к этому файлинпуту
  var fileName = inputFile.getParent().getElement('div.inputFileName');
  // получаем имя файла и расширение
  var pathInfo = pathinfo(inputFile.value);
  //выводим название файла
  fileName.set('html', pathInfo.basename);
  //показываем иконку типа файла
  if (pathInfo.extension) 
  {
    var ext = pathInfo.extension.toLowerCase();
    //если расширения не существует, то расширение по-умолчанию
    //inputFileExtensions - определен глобально 
    ext = inputFileExtensions.has(ext) ? ext : 'default';
    //получаем смещение бэкграунда в пикселях в зависимости от расширения
    var pos = '0 -' + inputFileExtensions.get(ext) + 'px';
    //смещаем бэкграунд
    fileName.setStyle('background-position', pos);        
  }
}    
    