/**
 * jquery.pseudous
 * Плагин для jQuery заменяющий radiobutton'ы и checkbox'ы внутри формы на псевдо-элементы.
 *
 * Использование:
 * 		$('form').pseudous();
 *
 * @param options Опции плагина
 * @param {String} options.labelClass Основной класс pseudous'а
 * @param {String} options.fieldClass Класс устанавливаемый pseudous'ом для поля
 * @param {Function} options.postInitFunction
 *
 * @author Vladimir 'Vii' Varankin, 2008
 */
jQuery.fn.pseudous = function( options ){
	settings = jQuery.extend({
		labelClass: 'pseudo',
		fieldClass: 'pseudo',
		// TODO
		postInitFunction: false
	}, options);

	$(this).each( function(){
		// Форма
		var f = jQuery(this),
			$lines = f.find('dd');

		var $labels = f.find('label.' + settings.labelClass),
			$linputs;

		$labels.each(function(){
			var this_field = $('input#' + $(this).attr('for'), f).addClass( settings.fieldClass );

			$(this).addClass( this_field.attr('type') );
			//var label = $(this).wrapInner('<span></span>').children();
			var label = $(this).parents('dd');

			if( this_field.is(':checked') || this_field.is(':selected') ) {
				label.addClass('checked');
			}

			// Визуально отображаем выделение текущего элемента
			// FIXME: потенциальный баг при работе с клавиатуры: при срабатывании onfocus у radiobutton'ов, они становятся активными
			this_field.focus(function(){
				label.addClass('focused');
			}).blur(function(){
				label.removeClass('focused');
			});

			// XXX
			this_field.click(function(e){
				// прикрепленный к данному лейблу инпут
				//var $field = $('input#' + $(this).attr('for'), f);

				var $field = $(this);

				//var $label = $(this).children();
				var $label = $(this).parents('dd');

				//$field.triggerHandler('click');

				if( $field.is(':radio') ){
					// Снимаем выбор со всех инпутов с данным именем (name)
					$('input[name='+$field.attr('name')+']', f).each( function(){
						//$('label[for='+$(this).attr('id')+']', f).children().removeClass('active');
						$('label[for='+$(this).attr('id')+']', f).parents('dd').removeClass('checked');
					} );

					$field.checked = true;
					$label.addClass('checked');

				} else if( $field.is(':checkbox') ){
					//$field.checked = true;
					$label.toggleClass('checked');
				}
			});
		});

		/*
		$labels.bind('click', function(e){
			$(e).stop();

			// прикрепленный к данному лейблу инпут
			var $field = $('input#' + $(this).attr('for'), f);

			//var $label = $(this).children();
			var $label = $(this).parents('dd');

			//$field.triggerHandler('click');

			if( $field.is(':radio') ){
				// Снимаем выбор со всех инпутов с данным именем (name)
				$('input[name='+$field.attr('name')+']', f).each( function(){
					//$('label[for='+$(this).attr('id')+']', f).children().removeClass('active');
					$('label[for='+$(this).attr('id')+']', f).parents('dd').removeClass('checked');
				} );

				$field.checked = true;
				$label.addClass('checked');

			} else if( $field.is(':checkbox') ){
				$field.checked = true;
				$label.toggleClass('checked');
			}

			//console.log( $field.attr('checked') );
		});
		*/

		$labels.bind('mouseover', function(e){
			$lines.removeClass('hover');

			var dd = $(this).parents('dd');

			dd.addClass('hover');
			dd.trigger('hover:modules');

		});

		/*$labels.bind('mouseout', function(e){
			$(this).parents('dd').removeClass('hover');
		});*/

		// поддержка работы с клавиатуры
		/*
		$('input.'+settings.fieldClass, f).bind('keypress', function( key ){
			// "ловим" нажатие на пробел
			if( key.which == 32 ){
				$('label[for='+$(this).attr('id')+']', f).triggerHandler('click');
			}
		});
		*/
	} );
};
