jQuery.fn.replacerSelect = function(settings, functions){
	return jQuery(this).each(function(){
	
		select = jQuery(this);
		
		//Параметры по умолчанию
		var replacerSelect_data = {	'select_functions':		{	'beginMaking':				0,
																'readyBuild':				0,
															
																'ul_openBefore':			0,
																'ul_openAfter':				0,
															
																'ul_closeBefore':			0,
																'ul_closeAfter':			0,
																
																'item_selectBefore':		0,
																'item_selectAfter':			0,
																
																'goActionBefore':			0,
																'goActionAfter':			0,
																
																'text_clickBefore':			0,
																'text_clickAfter':			0,
																
																'text_mouseOutBefore':		0,
																'text_mouseOutAfter':		0,
																
																'text_mouseOverBefore':		0,
																'text_mouseOverAfter':		0,
																
																'ul_mouseOutBefore':		0,
																'ul_mouseOutAfter':			0,
																
																'ul_mouseOverBefore':		0,
																'ul_mouseOverAfter':		0	},
																
									'select_options':		{	'condition':		'notready',
																'multiselect':		false,
																'action':			'',
																'autoStyle':		true,
																'event':			'click',
																'selected':			-1,
																'hover':			false,
																'target':           '_self',
																
																'textMouseOutDelay':100,
																'ulMouseOutDelay':	100,
																
																'addDataToLi':		false,
																'addDataToOptions':	false,
																'noActionClass':	false},
																
									'position':				{	'left':		0,
																'top':		0,
																'position':	'inline',
																'float_':	'none',
																'clear':	'none',
																'margin':	0,
																//'padding':	0,
																'width':	0,
																'height':	0					},
																
									'openUl':				0,
									'closeUl':				0									
								};
							
		//Обновляем параметры по умолчатию теми, которые были переданы
		jQuery.extend(replacerSelect_data.select_functions, functions);
		jQuery.extend(replacerSelect_data.select_options, settings);
		
		//Создаем уникальный id
		if (select.attr('id')) {//Если у селекта был id, то прибавляем к нему константу
			replacerSelect_id = 'replacerSelect_' + select.attr('id');}
		else {//Если небыло, тогда генерим по уникальному номеру
			//Получаем номер предыдущего selecta, у которого небыло id и кторый мы переделывали
			var replacerSelect_num = jQuery(document).data('replacerSelect_num');
			replacerSelect_num = replacerSelect_num + 1;
			jQuery(document).data('replacerSelect_num', replacerSelect_num);	
			var replacerSelect_id = 'replacerSelect_' + replacerSelect_num;
		}
			
		jQuery.extend(replacerSelect_data.position, select.offset());
		replacerSelect_data.position.position =	select.css('position');
		replacerSelect_data.position.float_ =	select.css('float');
		replacerSelect_data.position.clear =	select.css('clear');
		replacerSelect_data.position.width =	select.outerWidth();
		replacerSelect_data.position.height =	select.outerHeight();
		replacerSelect_data.position.margin = 	new Array(select.css('marginTop'), select.css('marginRight'), select.css('marginBottom'), select.css('marginLeft'));
		//replacerSelect_data.position.padding =	new Array(select.css('paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'));
		
		var container_style = '';
		
		if (replacerSelect_data.select_options.autoStyle) {
			container_style = 	'display:' + 	'block' + '; ' + 
								'width:' +		replacerSelect_data.position.width + 'px; ' + 
								'height:' +		replacerSelect_data.position.height + 'px; ' + 
								'float:' +		replacerSelect_data.position.float_ + '; ' + 
								'clear:' +		replacerSelect_data.position.clear + '; ';
		}
			
		replacerSelect_data.replacerSelect_select =		select;
		replacerSelect_data.replacerSelect_container =	jQuery("<div id='"+ replacerSelect_id +"' class='replacerSelect replacerSelect_container' style='"+ container_style +"'></div>");
		replacerSelect_data.replacerSelect_options = 	select.find("option");
		replacerSelect_data.replacerSelect_optionsArr =	new Array();
		replacerSelect_data.replacerSelect_ul = 		jQuery("<ul class='replacerSelect replacerSelect_ul'></ul>");
		replacerSelect_data.replacerSelect_text = 		jQuery("<a href='#' class='replacerSelect replacerSelect_text'></a>");
		replacerSelect_data.replacerSelect_li = 		jQuery;
		replacerSelect_data.replacerSelect_liArr =		new Array();
		replacerSelect_data.replacerSelect_form = 		select.parents("form");
		
		if (jQuery.isFunction(replacerSelect_data.select_functions.beginMaking)&&replacerSelect_data.select_functions.beginMaking(replacerSelect_data)) {
			return true;}
		
		replacerSelect_data.option_counter = 0;
		var option_selected = replacerSelect_data.select_options.selected;
		var yesIFind = true; // заменил 26,05,2010 чтобы сохранялся селект при перезагрузке страницы было false
		
		//Проходим по всем пунктам селекта
		replacerSelect_data.replacerSelect_options.each(function(){
		
			replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter] = jQuery(this);
			
			//Набираем строку атрибутов будущей ссылки
			var item_attr =	" href='" + 	replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].attr('value') + "' " +
							" class='" + 	replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].attr('class') + "' " +
							" title='" + 	replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].text() + "' " +
							" rel='" + 		replacerSelect_data.option_counter + "' ";
			if ('_blank' == replacerSelect_data.select_options.target) {
			    item_attr = item_attr + " target='_blank' ";
			}
			var newItem = 	jQuery("<li class='repalcerSelect replacerSelect_li'></li>");
			var newItemA = 	jQuery("<a "+ item_attr +">"+ replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].text() +"</a>");
			
			if (((yesIFind == false || replacerSelect_data.select_options.multiselect == true)) && (replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].attr('selected'))) {
				newItemA.addClass('repalcerSelect_activeItem');
				replacerSelect_data.replacerSelect_activeItem = newItem;
				
				if (replacerSelect_data.select_options.multiselect == false) {
					yesIFind == true;}
			}
			
			//Если мы заранее не решили какой элемент будет выбран (в параметры вызова не передали номер) или передали неправильно
			if ((option_selected <= -1)||(option_selected >= replacerSelect_data.replacerSelect_options.size())) {
				//Если такущий элемент в коде помечен активным
				/*if (replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].attr('selected') == 'selected') {*/
			    if (replacerSelect_data.replacerSelect_optionsArr[replacerSelect_data.option_counter].attr('selected')) {
					//Добавляем ссылке и ЛИ, ее сордержащему, класс, что здесь дежит активный пункт
					newItemA.addClass('repalcerSelect_activeItem');
					replacerSelect_data.replacerSelect_activeItem = newItem;
				}
			}//Если у нас есть выбранные пункты (мы их передали в качестве параметров)
			else if (option_selected == replacerSelect_data.option_counter) {
				newItemA.addClass('repalcerSelect_activeItem');
				replacerSelect_data.replacerSelect_activeItem = newItem;
				yesIFind = true;
			}
			
			newItem.append(newItemA);
			
			replacerSelect_data.replacerSelect_liArr[replacerSelect_data.option_counter] = newItem;
			
			//Сразу добавляем вновь созданные ЛИ внутрь УЛа
			replacerSelect_data.replacerSelect_ul.append(newItem);
			
			replacerSelect_data.option_counter++;
			
		});
		
		
		//Кладем все что нужно куда нужно
		replacerSelect_data.replacerSelect_select.wrap(replacerSelect_data.replacerSelect_container);
		replacerSelect_data.replacerSelect_ul.insertAfter(replacerSelect_data.replacerSelect_select);
		replacerSelect_data.replacerSelect_text.insertBefore(replacerSelect_data.replacerSelect_select);
		
		//Находим все ЛИ внутри УЛа
		replacerSelect_data.repalcerSelect_li = replacerSelect_data.replacerSelect_ul.find("li");
		
		if (!yesIFind) {
			replacerSelect_data.replacerSelect_activeItem = replacerSelect_data.replacerSelect_liArr[0].addClass('repalcerSelect_activeItem');}
		
		replacerSelect_data.replacerSelect_text.text(replacerSelect_data.replacerSelect_activeItem.find("a").text());
		/*replacerSelect_data.replacerSelect_text.text(replacerSelect_data.replacerSelect_activeItem.find("a").html());*/
		
		if (replacerSelect_data.select_options.autoStyle) {
			replacerSelect_data.replacerSelect_ul.css({	'padding':		'0px',
														'marginTop':	replacerSelect_data.position.height + 'px',
														'marginRight':	'0px',
														'marginBottom':	'0px',
														'marginLeft':	-(jQuery("body").width()/2 - replacerSelect_data.position.left) + 'px',
														
														'position':		'absolute',
														'left':			'50%',
														'top':			replacerSelect_data.position.top,
														
														'width':		replacerSelect_data.position.width,
														'height':		'auto',
														'overflow':		'hidden'
													});
			
			replacerSelect_data.replacerSelect_li = replacerSelect_data.replacerSelect_ul.find("li");
			
			replacerSelect_data.replacerSelect_li.each(function(){
				jQuery(this).css({	'display':	'block',
						'width':	replacerSelect_data.position.width + 'px',
						'height':	replacerSelect_data.position.height + 'px',
						'margin':	'0px',
						'padding':	'0px',
						'clear':	'both'
				});
			});
		}else{
			replacerSelect_data.replacerSelect_ul.css({	'marginLeft':	-(jQuery("body").width()/2 - replacerSelect_data.position.left) + 'px',
														
														'position':		'absolute',
														'left':			'50%',
														'top':			replacerSelect_data.position.top	});
													
			replacerSelect_data.replacerSelect_li = replacerSelect_data.replacerSelect_ul.find("li");
		}
		
		replacerSelect_data.replacerSelect_ul.hide();
		
		replacerSelect_data.closeUl = function(replacerSelect_data) {
			if (jQuery.isFunction(replacerSelect_data.select_functions.ul_closeBefore) && replacerSelect_data.select_functions.ul_closeBefore(replacerSelect_data)) {return false;}
			
			replacerSelect_data.replacerSelect_ul.hide();
			replacerSelect_data.select_options.condition = 'close';
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.ul_closeAfter) && replacerSelect_data.select_functions.ul_closeAfter(replacerSelect_data)) {return false;}
			
			return false;
		};
		
		replacerSelect_data.openUl = function(replacerSelect_data) {
			if (jQuery.isFunction(replacerSelect_data.select_functions.ul_openBefore) && replacerSelect_data.select_functions.ul_openBefore(replacerSelect_data)) {return false;}
			
			container_position = replacerSelect_data.replacerSelect_text.offset();
			replacerSelect_data.replacerSelect_ul.css({'marginLeft':-(jQuery("body").width()/2 - container_position.left) + 'px', 'top':	container_position.top+'px'}).show();
			replacerSelect_data.select_options.condition = 'open';
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.ul_openAfter) && replacerSelect_data.select_functions.ul_openAfter(replacerSelect_data)) {return false;}
			
			return false;
		};
		
		replacerSelect_data.selectItem = function(replacerSelect_data, item) {
			var item = item.find("a");
			if (jQuery.isFunction(replacerSelect_data.select_functions.item_selectBefore) && replacerSelect_data.select_functions.item_selectBefore(replacerSelect_data, item)) {return false;}
			
			replacerSelect_data.replacerSelect_activeItem = item.parent("li");
			replacerSelect_data.replacerSelect_text.html(item.html());
			
			var selectedItem_num = parseInt(item.attr('rel'));
			
			if (replacerSelect_data.replacerSelect_options.multiselect == false) {
				replacerSelect_data.replacerSelect_select[0].selectItem = 	selectedItem_num;
				replacerSelect_data.replacerSelect_select[0].selectedItem = selectedItem_num;
				
				replacerSelect_data.replacerSelect_options.removeAttr('selected');
				jQuery(replacerSelect_data.replacerSelect_options[selectedItem_num]).attr({'selected':'selected'});
			}else{
				var clickedOption = jQuery(replacerSelect_data.replacerSelect_options[selectedItem_num]);
				if (clickedOption.attr('selected') == 'selected') {
					clickedOption.removeAttr('selected');
				}else{
					clickedOption.attr({'selected': 'selected'});}
			}
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.item_selectAfter) && replacerSelect_data.select_functions.item_selectAfter(replacerSelect_data, item)) {return false;}
			
			return false;
		};
		
		replacerSelect_data.goAction = function(replacerSelect_data){
			if (jQuery.isFunction(replacerSelect_data.select_functions.goActionBefore) && replacerSelect_data.select_functions.goActionBefore(replacerSelect_data)) {return false;}
			
			if (replacerSelect_data.select_options.action == 'goto') {
				return 'goto';}
			else if (replacerSelect_data.select_options.action == 'submit') {
				replacerSelect_data.replacerSelect_form.submit();}
							
			if (jQuery.isFunction(replacerSelect_data.select_functions.goActionAfter) && replacerSelect_data.select_functions.goActionAfter(replacerSelect_data)) {return false;}
			
			return false;
		};
		
		replacerSelect_data.rollback = function(replacerSelect_data){
			var old_container = replacerSelect_data.replacerSelect_select.parents(".replacerSelect_container");
			if (old_container.size()) {
				var clone = replacerSelect_data.replacerSelect_select.clone();
				clone.insertBefore(old_container);
				old_container.remove();
				clone.show();
				
				return clone;
			}else{
				return replacerSelect_data.replacerSelect_select;
			}
			
		}
		
		replacerSelect_data.replacerSelect_select.data('replacerSelect_data', replacerSelect_data);
		replacerSelect_data.replacerSelect_ul.data('replacerSelect_data', replacerSelect_data);
		//Если нам нужно хранить данные в каждом li
		if (replacerSelect_data.select_options.addDataToLi) {
			replacerSelect_data.replacerSelect_li.data('replacerSelect_data', replacerSelect_data);}
		replacerSelect_data.replacerSelect_text.data('replacerSelect_data', replacerSelect_data);
		//Если нам нужно хранить данные в каждом li
		if (replacerSelect_data.select_options.addDataToOptions) {
			replacerSelect_data.replacerSelect_options.data('replacerSelect_data', replacerSelect_data);}
		replacerSelect_data.replacerSelect_container.data('replacerSelect_data', replacerSelect_data);
		
		replacerSelect_data.replacerSelect_text.hover(
			function() {
				var text = jQuery(this);
				var replacerSelect_data = text.data('replacerSelect_data');
				replacerSelect_data.replacerSelect_container.data('hover', true);
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.text_mouseOverBefore) && (replacerSelect_data.select_functions.text_mouseOverBefore(replacerSelect_data) != 0)) {return false;}
				
				if (replacerSelect_data.select_options.event == 'hover') {
					replacerSelect_data.openUl(replacerSelect_data);}
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.text_mouseOverAfter) && (replacerSelect_data.select_functions.text_mouseOverBefore(replacerSelect_data) != 0)) {return false;}
				
				return false;
			},
			
			function(){
				var text = jQuery(this);
				var replacerSelect_data = text.data('replacerSelect_data');
				replacerSelect_data.replacerSelect_container.data('hover', false);
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.text_mouseOutBefore) && (replacerSelect_data.select_functions.text_mouseOutBefore(replacerSelect_data) != 0)) {return false;}
				
				setTimeout(function(){if (replacerSelect_data.replacerSelect_container.data('hover') == false) {replacerSelect_data.closeUl(replacerSelect_data);}}, replacerSelect_data.select_options.textMouseOutDelay);//}
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.text_mouseOutAfter) && (replacerSelect_data.select_functions.text_mouseOutBefore(replacerSelect_data) != 0)) {return false;}
				
				return false;
			}
		);
		
		replacerSelect_data.replacerSelect_ul.hover(
			function() {
				var text = jQuery(this);
				var replacerSelect_data = text.data('replacerSelect_data');
				replacerSelect_data.replacerSelect_container.data('hover', true);
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.ul_mouseOverBefore) && (replacerSelect_data.select_functions.ul_mouseOverBefore(replacerSelect_data) != 0)) {return false;}
				
				if (replacerSelect_data.select_options.condition == 'close') {
					replacerSelect_data.openUl(replacerSelect_data);}
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.ul_mouseOverAfter) && (replacerSelect_data.select_functions.ul_mouseOverBefore(replacerSelect_data) != 0)) {return false;}
				
				return false;
			},
			
			function(){
				var text = jQuery(this);
				var replacerSelect_data = text.data('replacerSelect_data');
				replacerSelect_data.replacerSelect_container.data('hover', false);
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.ul_mouseOutBefore) && (replacerSelect_data.select_functions.ul_mouseOutBefore(replacerSelect_data) != 0)) {return false;}
				
				if (replacerSelect_data.select_options.condition == 'open') {
					setTimeout(function(){if (replacerSelect_data.replacerSelect_container.data('hover') == false) {replacerSelect_data.closeUl(replacerSelect_data);}}, replacerSelect_data.select_options.ulMouseOutDelay);}
				
				if (jQuery.isFunction(replacerSelect_data.select_functions.ul_mouseOutAfter) && (replacerSelect_data.select_functions.ul_mouseOutBefore(replacerSelect_data) != 0)) {return false;}
				
				return false;
			}
		);
													
		replacerSelect_data.replacerSelect_text.click(function(){
			var text = jQuery(this);
			var replacerSelect_data = text.data('replacerSelect_data');
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.text_clickBefore) && (replacerSelect_data.select_functions.text_clickBefore(replacerSelect_data) != 0)) {return false;}
			
			if (replacerSelect_data.select_options.event == 'click') {
				if (replacerSelect_data.select_options.condition == 'close') {
					replacerSelect_data.openUl(replacerSelect_data);}
				else if (replacerSelect_data.select_options.condition == 'open') {
					replacerSelect_data.closeUl(replacerSelect_data);}
			}
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.text_clickAfter) && (replacerSelect_data.select_functions.text_clickAfter(replacerSelect_data) != 0)) {return false;}
			
			return false;
			
		});
		
		replacerSelect_data.replacerSelect_li.find("a").click(function(){
			var clicked_li = jQuery(this).parent("li");
			replacerSelect_data = clicked_li.parents("ul").data('replacerSelect_data');
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.item_clickBefore) && (replacerSelect_data.select_functions.item_clickBefore(replacerSelect_data) != 0)) {return false;}
			
			if (replacerSelect_data.selectItem(replacerSelect_data, clicked_li)) {
				return false;}
			if (!replacerSelect_data.select_options.multiselect) {
				replacerSelect_data.closeUl(replacerSelect_data);}
			if ((replacerSelect_data.select_options.noActionClass == false)&&(jQuery(this).hasClass(replacerSelect_data.select_options.noActionClass) == false)) {
				if (replacerSelect_data.goAction(replacerSelect_data) == 'goto') {
					return true;}
			}
			
			if (jQuery.isFunction(replacerSelect_data.select_functions.item_clickAfter) && (replacerSelect_data.select_functions.item_clickAfter(replacerSelect_data) != 0)) {return false;}
			
			return false;
		});
		
		replacerSelect_data.replacerSelect_select.hide();
		replacerSelect_data.select_options.condition = 'close';
		
		if (jQuery.isFunction(replacerSelect_data.select_functions.readyBuild) && replacerSelect_data.select_functions.readyBuild(replacerSelect_data)) {return false;}
		
	});
};
