jQuery.fn.helpInput = function(o){
	/** Устанавливаются стандартные значения опций */
	var o = jQuery.extend({
		/** Поддержка втозаполнения полей */
		autoComplete: true,
		/** Класс div-муляжа */
		dummyClass: 'divInput',
		/** Класс выделенного text или password объекта */
		selectedTextFileClass: 'selectedInput',
		/** Класс иного выделенного объекта */
		selectedAnotherFileClass: 'selectedAnother'
	},o);

	/** Функция для нахождения следующего доступного для фокусв элемента(с проверкой на видимость) */
	function goToTab(obj,next){
		/** Если элемент видимый - делаем на него фокус */
		if(obj.is(':visible'))
			obj.focus();
		/** Если объект text или password и его муляж видимый - делаем фокус на input */
		else if(obj.data('tp') && obj.next().is(':visible'))
			obj.show().focus().next().hide();
		/** Иначе объект скрыт и мы переходим на следующий объект */
		else if(next)
			goToTab(obj.data('nt'),true);
		else
			goToTab(obj.data('pt'),false);
	}

	return this.each(function(e,form){
		/** Список всех элементов формы */
		var allObj = jQuery('input,textarea',form);
		/** Кол-во всех элементов формы */
		var objCount = allObj.length;
		/** Каждому объекту из списка устанавливаем события и свойства */
		allObj.each(function(e,i){
			var obj = jQuery(i);
			/** tabindex элемента */
			var tabIndex = +obj.attr('tabindex');
			/** Следующий tabindex */
			var nextTabIndex = (tabIndex+1>objCount)?1:tabIndex+1;
			/** Следующий элемент */
			var nextTab = jQuery('*[tabindex='+nextTabIndex+']',form);	
			obj.data('nt',nextTab);
			nextTab.data('pt',obj);
			if (obj.is('[type=text]')||obj.is('[type=password]')){
				obj .data('tp',true)
					.focus(function(){
						obj.addClass(o.selectedTextFileClass);
					})
					.blur(function(){
						if (obj.val().length) {
							obj.removeClass(o.selectedTextFileClass);
						} else {
							obj.hide().next().show();
						}
					})
					.keydown(function(event){
						/** Переопределяется событие клавиши Tab */
						if (event.keyCode == 9) {
							obj.blur();
							/** Зажата ли кнопка Tab */
							if(event.shiftKey){
								goToTab(obj.data('pt'),false);
							}else{
								goToTab(nextTab,true);
							}
							return false;
						} 
					})
					.hide()
					.next()
					.addClass(o.dummyClass)
					.addClass(obj.attr('class'))
					.show();
					
				/** По щелчку на div-муляж, прячем его и показывает input */
				obj.next().click(function(){
					jQuery(this).hide();
					obj.show().focus();
				});
				
				if(o.autoComplete){
					if(obj.val().length) 
						obj.next().click();
				}else{
					obj.val('');
				}
			} else {
				obj .data('tp',false)
					.focus(function(){
						obj.addClass(o.selectedAnotherFileClass);
					})
					.blur(function(){
						obj.removeClass(o.selectedAnotherFileClass);
					})
					.keydown(function(event){
						if (event.keyCode == 9) {
							obj.blur();
							if(event.shiftKey){
								goToTab(obj.data('pt'),false);
							}else{
								goToTab(nextTab,true);
							}
							return false;
						} 
				});			
			}
		});
	});
}
