/**
jQuery Fancy Forms
http://www.diveintojavascript.com/projects/jquery-fancy-forms

Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
All rights reserved.

BSD license
**/
(function($) {
	var $w1 = $('<span></span>'), $w2 = $('<span><span class="o"><span class="i"></span></span></span>'),
		fields = {
			'input:text': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field.addClass('ff-styled').wrap($w2.clone().addClass('ff ff-text'));
				}
			},
			'textarea': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field.addClass('ff-styled').wrap($w2.clone().addClass('ff ff-textarea'));
				}
			},
			'input:password': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field.addClass('ff-styled').wrap($w2.clone().addClass('ff ff-text ff-password'));
				}
			},
			'input:file': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field
						.addClass('ff-styled').css({top: 0, right: 0, opacity: 0}).wrap($w1.clone().addClass('ff ff-file'))
						.after($w2.clone().addClass('ff-file-text'), $w2.clone().addClass('ff-file-button'))
						.change(function() { $('.i', $field.next('.ff-file-text')).html($field.val()); })
						.next('.ff-file-text').find('.i').html($field.val() || '&nbsp;');
					$field.nextAll('.ff-file-button').find('.i').text('Browse');
					$field.parents('.ff-file').mousemove(function(event) {
						var offset = $(this).offset();
						$field.css({top: event.pageY - offset.top - 10, left: event.pageX - offset.left - $field.width() + 10});
					});
				}
			},
			'input:radio': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field
						.addClass('ff-styled').css('opacity', 0)
						.wrap($w2.clone().addClass('ff ff-radio '+ ($field.is(':checked') ? 'ff-checked ff-radio-checked' : '')))
						.change(function() {
							$('input[name="'+ $field.attr('name') +'"]').parents('.ff').removeClass('ff-checked ff-radio-checked');
							$field.parents('.ff').addClass('ff-checked ff-radio-checked');
						});
				}
			},
			'input:checkbox': function () {
		        var $field = $(this);
		        if ($field.is(':not(.ff-styled)')) {
		            $field
						.addClass('ff-styled').css('opacity', 0)
						.wrap($w2.clone().addClass('ff ff-checkbox ' + ($field.is(':checked') ? '' : 'ff-checked ff-checkbox-checked')))
						.change(function () {
						    $field.parents('.ff')[$field.is(':checked') ? 'removeClass' : 'addClass']('ff-checked ff-checkbox-checked');
						});
		        }
		    },
			'select[size!=""]': function() {
				var $field = $(this).fancyFormsRefreshSelect();
				if ($field.is(':not(.ff-styled)')) {
					var $option_list = $('<ul class="ff-select-option-list"></ul>').hide(),
						$text = $w2.clone().addClass('ff-select-text'),
						$button = $w2.clone().addClass('ff-select-button');
					$('.i', $button).html('&nbsp;');
					$field
						.addClass('ff-styled').hide().wrap($w1.clone().addClass('ff ff-select'))
						.after($text, $button, $option_list).fancyFormsRefreshSelect()
						.change(function() {
							$('a.ff-selected', $option_list).removeClass('ff-selected');
							$('.i', $text).text($('a:eq('+ $field[0].selectedIndex +')', $option_list).addClass('ff-selected').text());
						});
					$text.add($button).click(function() {
						$('ul.ff-select-option-list:visible').fadeOut('fast');
						$option_list.fadeIn('fast');
						return false;
					});
					$('a', $option_list[0]).live('click', function() {
						$field[0].selectedIndex = $(this).attr('index');
						$field.change();
						$option_list.fadeOut('fast');
						return false;
					});
				}
			},
			'input:button, input:submit, input:reset': function() {
				var $field = $(this);
				if ($field.is(':not(.ff-styled)')) {
					$field.addClass('ff-styled').wrap($w2.clone().addClass('ff ff-button ff-button-'+ $field.attr('type')));
				}
			}
		};
	$('body').click(function () { $('ul.ff-select-option-list:visible').fadeOut('fast'); });
	$.fn.fancyForms = function() {
		return this.each(function() {
			var $this = $(this), nodes;
			$.each(fields, function(k, v) {
				if ((nodes = $(k, $this)).length == 0 && $this.is(k)) { nodes = $this; }
				nodes.each(v);
			});
		});
	};
	$.fn.fancyFormsRefreshSelect = function() {
		return this.each(function() {
			var $this = $(this);
			if ($this.is('select[size!=""]')) {
				var $text = $this.nextAll('.ff-select-text'), $option_list = $this.nextAll('ul.ff-select-option-list').html('');
				$('option', $this).each(function(i) {
					$option_list.append('<li><a href="#" index="'+ i +'">'+ this.text +'</a></li>');
				});
				$('.i', $text).text($('a:eq('+ $this[0].selectedIndex +')', $option_list).addClass('ff-selected').text());
			}
		});
	};

	$('.ff input, .ff textarea, .ff select')
		.live('mouseover', function() { $(this).parents('.ff').addClass('ff-hover'); })
		.live('mouseout', function() { $(this).parents('.ff').removeClass('ff-hover'); })
		.live('focus', function() { $(this).parents('.ff').addClass('ff-focus'); })
		.live('blur', function() { $(this).parents('.ff').removeClass('ff-focus'); });

}(jQuery));

