/**
 * @author Rie (Ibliaminov Albert) (rie@artlebedev.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @version 0.1
 * @date 2010-04-01
 * @requires jQuery 1.3.2
**/

//Системные переменные
var middleSearchStructure = [];
var sessionActiviti 	= [],
		sessionSelect 	= [],
		isDropmenu 		= [],
		isParagraph		= [],
 		isDisabled 		= [],
 		isLoadInput		= [],
 		paramsArray 	= [],
 		isIntervals 	= [];
var moscow_metro,moscow_regions;
var busy = false;

//СКРИПТ НАСТРАИВАЕТСЯ, НО В ОПРЕДЕЛЕННЫХ ПРЕДЕЛАХ. СВОБОДНОЕ МАНИПУЛИРОВАНИЕ СВОЙСТВАМИ НЕ РЕКОМЕНДУЕТСЯ
//ИСПОЛЬЗОВАТЬ ДЛЯ ИЗМЕНЕНИЯ name-value СВОЙСТВ ЭЛЕМЕНТОВ И ДЛЯ ДОБАВЛЕНИЯ НОВЫХ ЭЛЕМЕНТОВ СО СХОЖИМИ ПОВЕДЕНЧЕСКИМИ ПРИЗНАКАМИ С СОСЕДНИМИ.

//В качестве объекта для действия указывается n|m, где n - name радиобутона, m- value радиобутона.
//В команде open_dropmenu указывается класс блока с чекбоксами
//В команде remove указывается n|m, где n - name радиобутона, m- value радиобутона.
//Команда default_intervals отвечает за интервалы в текстовых полях для слайдеров. Ограничений на ввод с клавиатуры в текстовое поле нет.

//При задании интервалов при методе smart максимальное значение задается для определения интервала перемещения слайдера, 
//но не задает жестко максимума, который определяется по ширене текстового поля.

//ПРИМЕРЫ
// action|rent - свойства инпут элемента идентифицирующие его name|value
// select|country - идентификация селекта
// open_dropmenu - открытие доп. списка элементов в том же контейнере paragraph

var settings = {
	"quick|flat":{
		"open_dropmenu": "apartment",
		"remove_paragraph": ['s_mkad_distance', 's_highways']
	},
	"quick|village":{
		"remove_paragraph": ["s_square", 's_near', 's_metro']
	},
	"act|rent":{
		"setrazm":"месяц",
		"remove_paragraph": [/*"s_price_interval", */"s_square"],
		"set_interval":"true"
	},
	"act|buy":{
		"setrazm":"м²",
		"set_interval":"true"
	},
	"ignore_price|0":{
		"intervals":{
			"act|buy":{
				"default":{"min":100000,"max":1000000000,"type":"smart",'int':10000,'default0':900000,'default1':4000000}
			},	
			"act|rent":{
				"default":{"min":1000,"max":999000,"type":"smart",'int':1000,'default0':10000,'default1':50000}
			},
			"default":{"min":100000,"max":1000000000,"type":"smart",'int':1000,'default0':900000,'default1':4000000}
		}
	},
	"price_metr|simple_interval":{
		"intervals":{
			"act|buy":{
				"default":{"min":10000,"max":1000000,"type":"smart",'int':10000,'default0':80000,'default1':500000}
			},			
			"act|rent":{
				"default":{"min":1000,"max":999000,"type":"smart",'int':10000,'default0':10000,'default1':50000}
			},			
			"default":{"min":10000,"max":1000000,"type":"smart",'int':10000,'default0':80000,'default1':500000}
		}
	},
	"square|simple_interval":{
		"intervals":{
			"default":{"min":10,"factor":3,"type":"short",'int':1}
		}	
	},
	"mkad_distance|simple_interval":{
		"intervals":{
			"default":{"min":1,"factor":5,"type":"short",'int':1}
		}	
	},
	"region|region":{
		"open_dropmenu":"region",
		"load_region":{"selector":"city","moskow":"moscow_districts","moskow_obl":"moscow_districts"},
		"hidden":"s_metro"
	},
	"metro|metro":{
		"open_dropmenu":"metromap",
		//TODO move out ids
		"load_metro":{"selector":"geo","32":"msk","54119053":"msk"},
		"hidden":"s_region"
	},
	"select|country":{
		"refresh":["s_metro","s_region"],
		"deleteMetro":"true",
		"deleteMap":"true",
		"options":{
			"russia":"true",
			"default":{"removeParagraph":["s_region","s_metro","s_near"],"remove":["select|city","strit|"]}
		}
	},
	"select|city":{
		"refresh":["s_metro","s_region"],
		"deleteMetro":"true",
		"deleteMap":"true",
		"options":{
			"moskow":"true",
			"moskow_obl":"true",
			"default":{"removeParagraph":["s_region","s_metro"]}
		}
	},
	//Корректировки значений при переходе из одного отображения меню к другому
	//переход из чузера в средний поиск
	"chusertomiddles":{
		"custom_type|flat_one":["type|apartment","precision_type[]|apartment_one"],
		"custom_type|flat_two":["type|apartment","precision_type[]|apartment_two"],
		"custom_type|flat_three":["type|apartment","precision_type[]|apartment_three"],
		"custom_type|flat_four":["type|apartment","precision_type[]|apartment_four"],
		"custom_type|flat_five":["type|apartment","precision_type[]|apartment_five"],
		"custom_type|elite":["iselite|elite","type|apartment"],
		"custom_type":"type"
	},
	"middlestochuser":{
		"apartment":{
				"apartment_one":"однокомнатную",
				"apartment_two":"двухкомнатную",
				"apartment_three":"трехкомнатную",
				"apartment_four":"четырехкомнатную",
				"apartment_five":"пятикомнатную"
				}		
	},
	"sort":[
		"s_action",
		"s_elite",
		"s_type",
		"s_country",
		"s_price_interval",
		"s_price_metr",
		"s_square",
		"s_region",
		"s_metro",
		"s_near"
	]
};

var metro_setting = {
	"msk":{
		"image":"<img width='610' height='840' src='/st/i/moscow_metro.gif' alt=''/>",
		"script":"/st/js/metro/mskMetro.js",
		"parts":"/st/i/moscow_metro_parts.gif",
		"transparent":"/st/i/0.gif"
	}
}

var region_setting = {
	"moscow_districts":{
		"image":'<img src="/st/i/moscow.gif" alt="" width="382" height="552" />',
		"parts":"/st/i/moskow_parts.png",
		"script":"/st/js/region/mskMap.js",
		"transparent":"/st/i/moscow_labels.gif"
	}
}
//settings = eval(settings);
// НАСТРОЙКИ ПО УМОЛЧАНИЮ
// могут переопределиться в head заголовке страницы 
		//-------------------------------------------
		//Адрес для AJAX запроса на получение результатов выборки по отмеченнымв данный момент полям в чузере 
		var url_getSearchResultsCount = 'ajax/searchResults.html';
		
		//Адресфайла с содержимым формы среднего поиска
		var url_advSearchForm = 'middle_form.html';
		//id элемента в конце html шаблона для вывода выподающих списков.
		var dropElementName = '#dropmenuplane';
		var dropElement;
		//классы слйдеров
		var sliderClass = 'middle_interval';

var MiddleSearch = function(){

	//ПЕРЕМЕННЫЕ ПОИСКОВОЙ ФОРМЫ		
	//Элемент затемнения страницы расположен вначале DOM дерева на отображаемой странице 
	var pageFader = $('#page_fader');
	//Элемент, в который будет загружена форма среднего поиска
    var middleFormCont = $('#more_params_form');
    //Идентификатор чузера
    var searchBlock;
	var searchInput;
    //Отображение процесса загрузки среднего поиска
    var pageLoader = $('#page_loader');
    //Ссылка для запуска среднего поиска
    var loadLink = $('.more_params');
    var MiddleFormConstant;
    
    var chuser;
    var settingBank;
    this.isClicking = false;
    var oThis = this;
    
	/*Запуск расширенной формы*/
    loadLink.click(function(e){   	
		searchBlock = $('form.main_filter');
		searchInput = searchBlock.find('.list label a');
		
	    chuser = searchBlock.find('.chuser');
	    settingBank = searchBlock.find('.search_banks input');
    	
        e.preventDefault();
        pageFader.removeClass('hidden');
        pageFader.find('div').removeClass('hidden').css('top',(searchBlock.offset().top+5)+'px');
        stretchFader();
        pageLoader.addClass('active');
        /*Запускаем среднюю форму*/
        middleFormCont
			.html('')
	        .removeClass('hidden')
	        .css({
	            visibility: 'hidden',
	            top: parseInt(searchBlock.offset().top-5)+"px"
	        })
	        .load(url_advSearchForm,function(){
	    		setTimeout(function(){
		    		var closeLink = middleFormCont.find('.close_link');
					closeLink.click(closeMiddle);
					pageLoader.removeClass('active');
					/*Запускаем среднюю форму*/
					MiddleFormConstant = new MiddleForm(middleFormCont,chuser,settingBank,oThis);
					oThis.isClicking = false;
					settingBank.html('');
					middleFormCont.css('visibility','visible');
		    		pageFader.find('div').addClass('hidden');
	    		},300);
	    	})
	    return false;   
    });
    
    /*Растягиваем затемнение*/
    var fixHeight;
    function stretchFader() {
        if(fixHeight == $(document).height())
        	return false;
        pageFader.height($(document).height()+10);
        pageFader.css({"top":"-10px"});
        fixHeight = $(document).height();
    }    
	
    //Сворачивание среднего поиска
    function closeMiddle() {
    	/*
    	if(oThis.isClicking)
    	{
    		chuser.html('');
    	
	    	if(typeof(settings['sort']) != 'object')
	        {
	        	alert('Не настроен порядок проверки формы перед отправкой в чузер.');
	        	return false;
	        }
	        
	        if(searchBlock.hasClass('.narrow_filter'))
	        {
	        	searchBlock.find('.want').html('Я&nbsp;хочу');
	        }
	        
	        for(var i=0;i<settings['sort'].length;i++)
	        {
	        	var parag = middleFormCont.find('.paragraph.'+settings['sort'][i])
	        	
	        	switch (settings['sort'][i]) {
		            case 's_action' 		: prepare_s_action(parag); 	break;
		            case 's_type' 			: prepare_s_type(parag); 	break;
		            case 's_elite'  		: prepare_s_elite(parag); 	break;
		            case 's_price_interval' : prepare_s_texts(parag,'за&nbsp;сумму&nbsp;',10,''); 					break;
		            case 's_price_metr'  	: prepare_s_texts(parag,'за&nbsp;сумму&nbsp;',10,'&nbsp;/&nbsp;м²'); 	break;
		            case 's_square'  		: prepare_s_texts(parag,'метражом&nbsp;от&nbsp;',5,'м²'); 				break;
		            case 's_country'  		: prepare_s_country(parag); break;
		            case 's_near'			: prepare_s_action(parag); 	break;
		            case 's_metro'			: prepare_s_metro(parag,'metro','у&nbsp;любых&nbsp;станций&nbsp;метро'); 	break;
		            case 's_region'			: prepare_s_metro(parag,'region','в&nbsp;любых&nbsp;микрорайонах'); 		break;
		        }
		        
	        }
	        
	        chuser.find('.panel_control').each(function() {
				var iPanelControlNum = aPanelControls.length;
				aPanelControls[iPanelControlNum] = new PanelControl($(this), iPanelControlNum);
			});
		
    	}
		*/
        
        middleFormCont.addClass('hidden');
		MiddleFormConstant = undefined;
		stretchFader();
        pageFader.addClass('hidden');
        
        if(TimeFader != undefined)
        	clearInterval(TimeFader);
    }
    
    function prepare_s_metro(paragraph,namer,any)
    {
		var activeInput = paragraph.find('input[checked=true]');
		if(isLoadInput[activeInput.attr('name')] != true && activeInput.hasClass('default')){
			return false;}
    	
    	var checkboxes = ''; 	

    	if(paragraph.hasClass('s_metro'))    	
		{
			if(typeof(paramsArray['metro_branch_id']) == 'object' && paramsArray['metro_branch_id'].length > 0)
			{
				for(var t=0;t<paramsArray['metro_branch_id'].length;t++)
				{
					checkboxes += '<input type="checkbox" value="'+paramsArray['metro_branch_id'][t]+'" name="metro_branch_id" checked="checked" />';
				}
				paramsArray['metro_branch_id'] = [];
			}
			
			if(typeof(paramsArray['metro_station_id']) == 'object' && paramsArray['metro_station_id'].length > 0)
			{
				for(var t=0;t<paramsArray['metro_station_id'].length;t++)
				{
					checkboxes += '<input type="checkbox" value="'+paramsArray['metro_station_id'][t]+'" name="metro_station_id" checked="checked" />';
				}				
			}
			paramsArray['metro_station_id'] = [];
		}
    	else if(paragraph.hasClass('s_region'))
    	{
			if(typeof(paramsArray['district_id']) == 'object' && paramsArray['district_id'].length > 0)
			{
				for(var t=0;t<paramsArray['district_id'].length;t++)
				{
					checkboxes += '<input type="checkbox" value="'+paramsArray['district_id'][t]+'" name="district_id" checked="checked" />';
				}				
			}
			paramsArray['district_id'] = [];
    	}    	
   	
    	if(checkboxes == '') return false;
		
		var list = [];
    	list[0] = '<a class="selected"><span><input class="item ch_terminator" type="radio" name="'+namer+'" value="any" />'+any+'</span></a>';
    	list[1] = '<a class="selected"><div class="secret_bugs hidden">'+checkboxes+'</div><span><input class="item" checked="checked" type="radio" name="'+namer+'" value="selected :)" />'+paragraph.find('.ictrl').html()+'</span></a>';
    	var val =  paragraph.find('.ictrl').html();
    	
    	if(val != '')
    		chuser.append('<div class="panel_control">'+get_value(val)+get_list(list)+'</div>');
    }
    
    function prepare_s_texts(paragraph,textes,size,after)
    {			
		var list = [];
		var val = '';
 		
		var activeInput = paragraph.find('.sctrl.active input[type=radio]');
		if(isLoadInput[activeInput.attr('name')] != true && activeInput.hasClass('default'))
			return false;
		
		//Перебираем радиобутоны
 		paragraph.find('.sctrl').each(function(){
 		
 			var input = $(this).find('input[type=radio]');
 			var textus = $(this).find('input[type=text]');
 			var currency = $(this).find('.currency input[type=radio]').next();
 			var len = list.length;			
 						
	 			//Отображаем простой пункт меню без текстовых полей
	 			if(textus.length == 0)
	 			{
	 				if(input.attr('checked') == true)
	 				{
	 					list[len] = '<a class="selected"><span><input class="item" checked="checked" type="radio" name="'+input.attr('name')+'" value="'+input.attr('value')+'" />'+$(this).find('.inner span').html()+'</span></a>';
	 					$(this).find('.inner ins').remove();
	 					
	 					val = $(this).find('.inner span.pseudo').text();
	 					//debug(val);
	 				}
	 				else
	 				{
	 					list[len] = '<a><span><input class="item" type="radio" name="'+input.attr('name')+'" value="'+input.attr('value')+'" />'+$(this).find('.inner span').html()+'</span></a>';
	 				}
	 			}
	 			//Если есть текстовые поля
	 			else
	 			{
 					if(input.attr('checked') == true)
	 				{
	 					list[len] = '<a class="selected"><span><input class="item" checked="checked" type="radio" name="'+input.attr('name')+'" value="'+input.attr('value')+'" />'+textes+'&nbsp;</span></a>';
	 					val = textes;
	 				}
	 				else
	 				{
	 					list[len] = '<a><span><input class="item" type="radio" name="'+input.attr('name')+'" value="'+input.attr('value')+'" />'+textes+'</span></a>';
	 				}
	 				
	 				var i=0;
	 				if(textus.length == 1)
	 				{
	 					textus.each(function(){
		 					if(input.attr('checked') == true)
		 					{	
		 						val += $(this).attr('value')+'&nbsp;<span class="aftr"><b class="'+currency.attr('class')+'">'+currency.text()+'</b>'+after+'</span>';
		 						list[len] += '<input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />&nbsp;<span class="aftr">'+after+'</span>';	 					
		 					}
		 					else
		 					{
			 					list[len] += '<input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />&nbsp;<span class="aftr">'+after+'</span>';	 					
		 					}
	 					});
	 				}
	 				else
	 				{
	 				var one = "";
	 				var two = "";
	 				var dashs = "";
	 				var prevs = "";
	 				
	 				textus.each(function(){
	 					var is_dash = false;
	 					if(input.attr('checked') == true)
	 					{	
		 					if(i == 0)
		 					{
		 						//debug(parseInt($(this).attr('value')));
		 						if(parseInt($(this).attr('value')) == 0)
		 							prevs = "до&nbsp;";
		 						else
		 						{
		 							dashs = '&nbsp;&ndash;&nbsp;';
		 							one += $(this).attr('value');
		 						}
		 						list[len] += '<input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />';
		 					}
		 					else
		 					{
		 						//debug(parseInt($(this).attr('value')));
		 						if(parseInt($(this).attr('value')) == 0)
		 						{
		 							dashs = "";
		 							prevs = "от&nbsp;";
		 						}
		 						else
		 						{
		 							two += $(this).attr('value')+'&nbsp;<span class="aftr"><b class="'+currency.attr('class')+'">'+currency.text()+'</b>'+after+'</span>';
		 						}
		 						list[len] += '<span class="dash">&nbsp;&ndash;&nbsp;</span><input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />&nbsp;<span class="aftr"><b class="'+currency.attr('class')+'">'+currency.text()+'</b>'+after+'</span>';	 					
		 					}
		 					i++;
	 					}
	 					else
	 					{
		 					if(i == 0)
		 						list[len] += '<input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />';
		 					else
		 						list[len] += '<span class="dash">&nbsp;&ndash;&nbsp;</span><input type="text" name="'+$(this).attr('name')+'" maxlength="'+size+'" value="'+$(this).attr('value')+'" size="'+size+'" />&nbsp;<span class="aftr"><b class="'+currency.attr('class')+'">'+currency.text()+'</b>'+after+'</span>';	 					
		 					i++;
	 					}
	 				});
	 				
	 				val += prevs+one+dashs+two;
	 				//debug(val);
	 				}
	 			}
 		});
 		
 		
    	chuser.append('<div class="panel_control">'+get_value(val)+get_list(list)+'</div>');
    }
    
    function prepare_s_action(paragraph)
    {
    	var value = '<div class="value"><div class="t"><div class="l"><a><span>';
    	var list = '<div class="list"><div class="t"><div class="l">';
    	
		var activeInput = paragraph.find('input[checked=true]');
		if(isLoadInput[activeInput.attr('name')] != true && activeInput.hasClass('default')){
			return false;
		}
		
		paragraph.find('.middle_radio').each(function(){
    		
    		var radio = $(this).find('input[type=radio]');
        	var text = $(this).find('.inner .pseudo').html();
        	
    		if(radio.attr('checked') == true){
    			list += '<label><a class="selected"><span><input class="item" type="radio" name="'+radio.attr('name')+'" value="'+radio.attr('value')+'" checked="checked"/>'+text+'</span></a></label>'; 
    			value += text;
    		}
    		else
    			list += '<label><a><span><input class="item" type="radio" name="'+radio.attr('name')+'" value="'+radio.attr('value')+'" />'+text+'</span></a></label>';

    	});        	
    	list += '</div><ins class="r"></ins><ins class="clear"></ins></div><ins class="b"><ins class="r"></ins></ins><ins class="close_button"></ins></div>';
    	value += '</span></a><img src="/st/i/0.gif" class="arr"/></div><ins class="r"></ins></div><ins class="b"><ins class="l"></ins><ins class="r"></ins></ins></div>';        
    
    	chuser.append('<div class="panel_control">'+value+list+'</div>');    	
    }
    
   	function prepare_s_type(paragraph)
    {
		var radio = paragraph.find('input[type=radio]:checked');
		var text = paragraph.find('.inner .pseudo').html();
    	
    	var value = '<div class="value"><div class="t"><div class="l"><a><span>';
    	var list = '<div class="list"><div class="t"><div class="l">';
    	
		paragraph.find('.middle_radio').each(function(){
    		var radio = $(this).find('input[type=radio]');
    		var text = $(this).find('.inner .pseudo').html();
    		
    		if(radio.attr('checked') == true)
    		{	
    			var term = 'class="determinated"';
    			if(typeof(settings['middlestochuser'][radio.attr('value')]) != 'object')
    				term = 'class="terminated"';
    			
    			list += '<label><a class="selected"><span '+term+'><input class="item" type="radio" name="'+radio.attr('name')+'" value="'+radio.attr('value')+'" checked="checked"/>'+text+'</span></a></label>'; 
    			value += text;
    		}
    		else
    		{
    			var term = 'class="determinated"';
    			if(typeof(settings['middlestochuser'][radio.attr('value')]) != 'object')
				{
    				term = 'class="terminated"';        			
				}
    			list += '<label><a><span '+term+'><input class="item" type="radio" name="'+radio.attr('name')+'" value="'+radio.attr('value')+'" />'+text+'</span></a></label>';
    		}
    	});        	
    	list += '</div><ins class="r"></ins><ins class="clear"></ins></div><ins class="b"><ins class="r"></ins></ins><ins class="close_button"></ins></div>';
    	value += '</span></a><img src="/st/i/0.gif" class="arr"/></div><ins class="r"></ins></div><ins class="b"><ins class="l"></ins><ins class="r"></ins></ins></div>';        
    
    	chuser.append('<div class="panel_control">'+value+list+'</div>');
		
		//Если в конфиге есть описание данного исключения
    	if(typeof(settings['middlestochuser'][radio.attr('value')]) == 'object')
    	{
	    	var control_name = radio.attr('value');
	    	var dropmenu = paragraph.find('.dropmenu.'+control_name);
	    	var isEnabled=false;
	    	
	    	if(dropmenu.find('input[checked=true]').length > 0)
	    	{
				//Перебираем выделенные чекбоксы для получения строки в выпадающем списке
		    	var value_string='',value_input='',val_name='';
		    	dropmenu.find('input[checked=true]').each(function(){
		    		
		    		val_name = $(this).attr('value');
		    		
		    		value_input+= '<input type="checkbox" class="hidden" name="'+$(this).attr('name')+'" value="'+$(this).attr('value')+'" checked="checked" />';
		    		if(typeof(settings['middlestochuser'][control_name][val_name]) == 'string')
		    		{
		    			if(value_string.length < 1) 
		    				value_string += settings['middlestochuser'][control_name][val_name];
		    			else
		    				value_string += ', '+settings['middlestochuser'][control_name][val_name];
		    				
		    			isEnabled = true;
		    		}
		    	});
	    	}
	    	else
	    	{
		    	isEnabled = false;
		    	value_input= '';
			    value_string = 'любую';
	    	}	    	
	    	var value = get_value(value_input+value_string);
	    	
	    	list = [];var y=0;

			dropmenu.find('input').each(function(){
	        	if(y == 0)	
	        		list[y] = '<a><span><input class="item" type="radio" name="'+$(this).attr('name')+'" value="any" />любую</span></a>';
	        	y++;
	        	list[y] = '<a><span><input class="item" type="radio" name="'+$(this).attr('name')+'" value="'+$(this).attr('value')+'" />'+settings['middlestochuser'][control_name][$(this).attr('value')]+'</span></a>'; 
	    	});        	
				
				
			if(isEnabled)
				chuser.append('<div class="panel_control">'+value+get_list(list)+'</div>');
			else				
				chuser.append('<div class="panel_control hidden">'+value+get_list(list)+'</div>');
    	}	
    }
    
    function prepare_s_elite(paragraph){
    	var activeInput = paragraph.find('input[checked=true]');
    	if(isLoadInput[activeInput.attr('name')] != true && activeInput.hasClass('default'))
			return false;
    	prepare_s_type(paragraph);
    }
    
    function prepare_s_country(paragraph){
    	
    	var countryInput = paragraph.find('input[name=country]');
    	var controlCountry = countryInput.parents('.sctrl');
    	
    	if(!countryInput.attr('name') != 'russia')
    	{
    		// При необходимости доработать по шаблону Города и тероризировать последующие элементы в чузере.
    	
    		//settingBank.append('<input type="checkbox" value="'+countryInput.attr('value')+'" name="'+countryInput.attr('name')+'" />');
    	}
    	
    	var cityInput =  paragraph.find('input[name=city]');
    	var controlCity = cityInput.parents('.sctrl');

    	if(!controlCity.hasClass('hidden') && (isLoadInput[cityInput.attr('name')] == true || cityInput.attr('value') != 'moskow'))
    	{	
    		var list = [], val='',i=0;
    		controlCity.find('.container_select a').each(function(){

    			//console.log('Чузер: '+cityInput.attr('name')+' -- '+$(this).attr('name'));
    			
    			list[i] = '<a><span><input class="item" type="radio" name="'+cityInput.attr('name')+'" value="'+$(this).attr('name')+'" />в&nbsp;'+$(this).html()+'</span></a>';
    			i++;
    		});
    		val = 'в&nbsp;'+controlCity.find('a.selectus').text();
    		
    		chuser.append('<div class="panel_control">'+get_value(val)+get_list(list)+'</div>');
    	}

    	var stritInput = paragraph.find('input[name=strit]');
    	if(stritInput.attr('value') != '')
    	{
    		var list = [], val='';  
    		list[0] = '<a><span><input class="item" type="radio" name="'+stritInput.attr('name')+'" value="any" />на&nbsp;любой&nbsp;улице</span></a>';
    		list[1] = '<a><span><input class="item" type="radio" name="'+stritInput.attr('name')+'" value="'+stritInput.attr('value')+'" />на&nbsp;улице&nbsp;'+stritInput.attr('value')+'</span></a>';

    		val = 'на&nbsp;улице&nbsp;'+stritInput.attr('value');
    		chuser.append('<div class="panel_control">'+get_value(val)+get_list(list)+'</div>');    		
    	}
 	
    }
    
    function get_list(arr)
    {
    	var list = '<div class="list"><div class="t"><div class="l">';
    	for(var i=0;i<arr.length;i++)
    	{
    		list += '<label><ins>'+arr[i]+'</ins></label>';
    	}
    	list += '</div><ins class="r"></ins><ins class="clear"></ins></div><ins class="b"><ins class="r"></ins></ins><ins class="close_button"></ins></div>';

    	return list;
    }
    
    function get_value(text)
    {
    	var value = '<div class="value"><div class="t"><div class="l"><a><span>';
    	value += text;
    	value += '</span></a><img src="/st/i/0.gif" class="arr"/></div><ins class="r"></ins></div><ins class="b"><ins class="l"></ins><ins class="r"></ins></ins></div>';  	
    	return value;
    }
    
    var TimeFader = setInterval(function(){
    	stretchFader();
    },5000);    

	$(document).keypress(function(e) {
		var c = e.which ? e.which : e.keyCode;
		
		if(c == 27)
		{
			closeMiddle();
			return false;
		}
			
		return true;
	});
    
};

/**
 * Инициализируем среднюю форму
 * @param {obj} middle_form - id формы контейнера, которую необходимо обработать.
 */
var MiddleForm = function (middle_form,params,banks,oThis) {
	
	dropElement = $(dropElementName);
	
	paramsArray = new Array();
	
	params.find('input').each(function(){
		
		var name = $(this).attr('name');
		var val = $(this).attr('value');
		
		if($(this).attr('type') == 'radio'  && $(this).attr('checked')==true /* && input_el.attr('checked')*/)
		{
			isLoadInput[name]=true;
			prepareInputValue(name,val);
		}
		else if($(this).attr('type') == 'text')
		{
			prepareInputValue(name,val);
		}
		else if($(this).attr('type')=='checkbox' && $(this).attr('checked')==true /* && input_el.attr('checked') == true*/)
		{
			prepareInputCheckValue(name,val);
		}
	});
	
	banks.each(function(){

		var name = $(this).attr('name');
		var val = $(this).attr('value');
		
		if($(this).attr('type') == 'radio' && $(this).attr('checked'))
		{
			isLoadInput[name]=true;
			prepareInputValue(name,val);
		}
		else if($(this).attr('type') == 'text' && $(this).attr('value') != '')
		{
			prepareInputValue(name,val);
		}
		else if($(this).attr('type')=='checkbox' && $(this).attr('checked') == true)
		{
			prepareInputCheckValue(name,val);
		}
	});
	
	var searchResultsBlock = new positionResultsCounter(middle_form, $('.results_block'),oThis);
	
	var searchRadioButtons = new MiddleRadioButtons(middle_form,middle_form.find('.middle_radio'),searchResultsBlock,paramsArray);
	
	var searchSelectBlocks = new MiddleSelectBlocks(middle_form,middle_form.find('.middle_select'),searchResultsBlock);
	
	var searchCheckBlock = new CheckButton(middle_form.find('.middle_checkbox'),searchResultsBlock,paramsArray);
	
	var searchInputBlock = new MiddleInputBlocks(middle_form.find('.middle_input'),searchResultsBlock);
	
	searchResultsBlock.activate(middle_form.find('.middle_radio'));	
	
	function prepareInputValue(name,val)
	{
		//Проверяем настройки на наличие корректировки для переданных значений
		if(typeof(settings['chusertomiddles']) == 'object' && typeof(settings['chusertomiddles'][name+'|'+val]) == 'object')
		{
			var property = settings['chusertomiddles'][name+'|'+val];
			for(var y=0;y<property.length;y++)
			{	
				var obj = property[y].split("|");
				var nn = obj[0];
				paramsArray[nn] = obj[1];
			}
		}
		else if(typeof(settings['chusertomiddles']) == 'object' && typeof(settings['chusertomiddles'][name]) == 'string')
		{
			var t = settings['chusertomiddles'][name];
			paramsArray[t] = val;
		}
		else
			paramsArray[name] = val;
	}
	
	function prepareInputCheckValue(name,val)
	{
		//Проверяем настройки на наличие корректировки для переданных значений
		if(typeof(paramsArray[name]) != 'object')
			paramsArray[name] = new Array();
		
		var len = paramsArray[name].length;
		paramsArray[name][len] = val;
		
	}
	
	searchResultsBlock.change();
}

/*Чекбоксы*/
var CheckButton = function(elements,button,params){
	
	if(elements.length < 1) return false;
	
	elements.each(function(){
		
		var control = addDecoration($(this));
		var title = control.find('.lctrl').html();
		var input = control.find('input[type=checkbox]');
		var link = control.find('.pseudo');
		
		$(this).addClass('ready');
		
		/*Выбираем выбранный в данный момент элемент*/
		var input_name = input.attr("name");
		if(typeof(params[input_name]) != undefined)
		{
			if(typeof(params[input_name]) == 'object')
			{
				for(var t=0;t<params[input_name].length;t++)
				{
					if(params[input_name][t] == input.attr("value"))
					{
						$(this).addClass('active');
						input.attr('checked',true);				
					}
				}
			}
			else if(params[input_name] == input.attr("value"))
			{
				$(this).addClass('active');
				input.attr('checked',true);				
			}
		}
		else if(input.attr('checked')=="checked")
		{
			$(this).addClass('active');
		}
			
		/*Нажатие на неактивную ссылку*/	
		link.click(function(){
			sets(input,control);
			button.change($(this));
			return false;
		});	
	});
	
	function sets(input,control){
		if(control.hasClass('active'))
		{
			input.attr('checked', '');
			control.removeClass('active');
		}
		else
		{
			input.attr('checked', 'checked');
			//control.find('input[type=checkbox]').checked = false;
			///input.checked = true;
			control.addClass('active');
		}	
	}
	
	function addDecoration(element){		
		element.find('.lctrl').removeClass('lctrl').addClass('pseudo');
		element.find('.pseudo').hover(function(){$(this).addClass('hover')},function(){$(this).removeClass('hover')});		
		return element;		
	}
}

var MiddleInputBlocks = function(elements,resultsBlock)
{
	if(elements.length < 1) return false;
	
	elements.each(function(){		
		var Els = addDecoration($(this));
		$(this).addClass('ready');
		
		Els.click(function(){
			$(this).addClass('active');
			return false;	
		});
		
		var closed = Els.find('.closed');
		
		closed.hover(function(){
			$(this).addClass('hover');
		},function(){
			$(this).removeClass('hover');
		});
		
		closed.click(function(){
			Els.find('input').val('');
			Els.removeClass('active');
			return false;
		});		
	});
	
	/**
	 * Метод декорирования переданного элемента с точки зрения радио буттона
	 */
	function addDecoration(element){
		var decor_befor = '<span class="deco"><ins class="bl"></ins><span class="inner"><ins class="tr"></ins>';
		var decor_after = '<span class="closed"></span></span></span>';
		
		var dlink = '<span class="pseudo">'+element.find('.lctrl').html()+'</span>';		
		if(element.find('.fctrl').length)
			dlink += element.find('.fctrl').html();
		if(element.find('.rctrl').length)	
			dlink += '<span class="razm">'+element.find('.rctrl').html()+'</span>';		
		
		var dinput = element.find('input[type="radio"]');
		
		if(!element.hasClass('hidden'))
			element.css({width:element.width(),height:element.height()});
		
		element.html(decor_befor+dlink+decor_after);				
		element.find('.pseudo').hover(function(){$(this).addClass('hover')},function(){$(this).removeClass('hover')});		
		return element;
	}
}

var MiddleSelectBlocks = function(middle_form,elements,resultsBlock)
{
	if(elements.length < 1) return false;
	
	elements.each(function(){
		prepareSelectBlock($(this),$(this).find('select'));
		$(this).addClass('ready');		
	});
	
	function prepareSelectBlock(control,input)
	{
		var selected = input.find('option:selected');
		
		var selName = input.attr('name');	
		var options = input.find('option');
		var drop = '';
		var afterdrop = '<div class="selectdrop">';
		var pclass = control.parent().attr('class');

		options.each(function(){
			if((paramsArray[selName] == undefined || $(this).attr('value') != paramsArray[selName] ))
			{
				drop += '<a href="#" class="pseudo" name="'+$(this).val()+'">'+$(this).text()+'</a><br/>';
			}
			else
			{
				selected = $(this);				
			}
		});
		
		afterdrop += '<a href="#" class="pseudo" name="'+selected.attr('value')+'">'+selected.text()+'</a><br/>';
		drop += '</div>';
		drop = afterdrop+drop;
		input.replaceWith('<span class="container_select hidden"></span><a href="#" class="selectus pseudo"><input type="radio" name="'+selName+'" value="'+selected.attr('value')+'" checked="checked" />'+selected.text()+'</a><ins class="arrowus"></ins>');
		sessionSelect[selName] = selected.attr('value');
		
		control.find('.container_select').html(drop);
		
		var selectors = control.find('a.selectus');

		selectors.click(function(){
			dropElement.addClass('hidden');
			dropElement.html(drop);
			dropElement.css({
				left:selectors.offset().left - dropElement.parent().offset().left-7,
				top:selectors.offset().top+(selectors.height()/2) - dropElement.parent().offset().top+7
			});
			dropElement.removeClass('hidden');			
			
			//Скрываем при убирании указателя
			dropElement.hover(function(){
					return false;
				},function(){
					dropElement.addClass('hidden');
				});
				
			dropElement.find('a').each(function(){
			$(this).click(function(){	
				
				
				//Восстанавливаем блоки при переключении
				//Если есть деактивированные элементы вызванные из данного параграфа
				if(typeof(isDisabled[pclass]) == 'object')
				{
					for(var key in isDisabled[pclass])
					{				
						if(typeof(isDisabled[pclass]) == undefined)
							break;
		
						if(typeof(isDisabled[pclass][key]) != 'object')
							break;
							
						isDisabled[pclass][key].removeClass('hidden');
					}
					isDisabled[pclass] = undefined;
				}
				if(typeof(isParagraph[pclass]) == 'object')
				{
					for(var key in isParagraph[pclass])
					{				
						if(typeof(isParagraph[pclass]) == undefined)
							break;
		
						if(typeof(isParagraph[pclass][key]) != 'object')
							break;
							
						isParagraph[pclass][key].removeClass('hidden');
					}
					isParagraph[pclass] = undefined;
				}
				
				sessionSelect[selName] = $(this).attr('name');
				selectors.html('<input type="radio" name="'+selName+'" value="'+$(this).attr('name')+'" checked="checked" />'+$(this).text())+'<ins class="arrowus"></ins>';
				dropElement.addClass('hidden');
					for(var key in settings["select|"+selName])
					{
						if(typeof(key) != 'string' )
							continue;
							
						if(typeof(settings["select|"+selName][key]) != 'object')
								continue;
								
						var vOption = settings["select|"+selName][key];		
						
						//Команда открыть блок с чекбоксами
						if(key == 'refresh')
						{
							for(var i=0;i<vOption.length;i++)
							{
								if(typeof(vOption[i]) != 'string')
									continue;
								
								reset_paragraph(vOption[i]);	
							}
						}
						else if(key == 'deleteMetro')
						{
							moscow_metro = undefined;
						}
						else if(key == 'deleteMap')
						{
							moscow_regions = undefined;
						}						
						else if(key == 'options')
						{
							var opt = $(this).attr('name');
							if(typeof(vOption[opt]) == 'string' || typeof(vOption[opt]) == 'object')
							{
								applyCommand(pclass,vOption[opt]);
							}
							else if(typeof(vOption['default']) == 'string' || typeof(vOption['default']) == 'object')
							{
								applyCommand(pclass, vOption['default']);
							}
							else
								continue;
						}
					
					}
					resultsBlock.change(control);
					return false;	
				});
			});
			
			return false;
		});
	}
	
	function applyCommand(pclass,setts)
	{
		if(typeof(setts) == 'string')
		{
			//ничего не происходит
		}
		else
		{	
			for(var vItem in setts)
			{
				if(typeof(vItem) != 'string' && (typeof(setts[vItem]) != 'string' || typeof(setts[vItem]) != 'object'))
					continue;
					
				if(vItem == 'remove')
				{
					isDisabled[pclass] = new Array();
				
					if(setts[vItem].length > 0)
					{
						for(var i=0;i<setts[vItem].length;i++)
						{
							var obj = setts[vItem][i].split('|');
							
							if(obj[0] == 'select')
							{
								var fals = middle_form.find('input[name='+obj[1]+']');
								isDisabled[pclass][i] = fals.parents('.sctrl');
								
								isDisabled[pclass][i].addClass('hidden');
							}
							else
							{
								middle_form.find('input[name='+obj[0]+']').each(function(){
									if($(this).attr('value')==obj[1])
									{
										isDisabled[pclass][i] = $(this).parent();
										
										if(isDisabled[pclass][i].attr('style') == undefined)
										isDisabled[pclass][i].css({width:isDisabled[pclass][i].width(),height:isDisabled[pclass][i].height()});	
	
										isDisabled[pclass][i].addClass('hidden');
									}								
								});
							}
						}
					}	
				}
				else if(vItem == 'removeParagraph')
				{
					isParagraph[pclass] = new Array();
					
					if(setts[vItem].length > 0)
					{
						for(var i=0;i<setts[vItem].length;i++)
						{
							isParagraph[pclass][i] = middle_form.find('.paragraph.'+setts[vItem][i]);
							
							isParagraph[pclass][i].addClass('hidden');
						}
						
					}
				}
			}
		}
	}
	
	function reset_paragraph(paragraph){
		var paragraph = middle_form.find('.paragraph.'+paragraph);
		
		paragraph.find('.sctrl').each(function()
		{
			if(!$(this).hasClass('hidden'))
			{
				$(this).addClass('active').find('input[type=radio]').attr('checked','checked');
				//Вновь выбранный элемент обрабатываем по прописанным правилам
				var tinut = $(this).find('input[type=radio]');
				configAction(tinut.attr('name')+'|'+tinut.attr('value'),paragraph,$(this));
				return false;
			}
		});
		return false;
	}
	
	function configAction(id,paragraph,control)
	{
		var pclass = paragraph.attr('class');
		
		paragraph.find('.highlight').removeClass('highlight');
		paragraph.find('.dropmenu').find('.lctrl').removeClass('active').prev().attr('checked','');
		paragraph.find('.dropmenu').addClass('hidden');
		isDropmenu[pclass] = false;
		
		paragraph.find('.sctrl.active').removeClass('active');
		control.addClass('active');
		return true;
	}
}

var MiddleRadioButtons = function(middle_form,elements,resultsBlock,params)
{
	if(elements.length < 1) return false;
	
	//активируем нужные элементы
	elements.each(function(){
		var input = $(this).find('input[type=radio]');
		/*Берем выбранный в данный момент элемент*/
		if(typeof(paramsArray[input.attr("name")]) != "undefined")
		{
			$(this).parents('.paragraph').find('input[type=text]').attr('checked',false);
			if(paramsArray[input.attr("name")] == input.attr('value'))
				input.attr('checked',true);
		}

		var paragraph = $(this).parents('.paragraph');
		
		//Декорируем элемент
		if(addDecoration($(this)))
			$(this).addClass('ready');
		
		if(paragraph.hasClass('s_metro') && (typeof(paramsArray['metro_branch_id']) == 'object' || typeof(paramsArray['metro_station_id']) == 'object'))
		{
			var branch = 0, station = 0;
			
			if(typeof(paramsArray['metro_branch_id']) == 'object')
				branch = paramsArray['metro_branch_id'].length;
				
			if(typeof(paramsArray['metro_station_id']) == 'object')
				station = paramsArray['metro_station_id'].length;
				
			paragraph.find('.ictrl').html(checkout_metro(branch,station));			
			var input = paragraph.find('input[value=metro]');
			var control = input.parent();

			input.attr('checked',true);
			control.addClass('wait').find('.pseudo').addClass('abs_pseudo');
		}
		
		if(paragraph.hasClass('s_region') && typeof(paramsArray['district_id']) == 'object' && paramsArray['district_id'].length > 0)
		{
			var region = 0;
			
			if(typeof(paramsArray['district_id']) == 'object')
				region = paramsArray['district_id'].length;
				
			paragraph.find('.ictrl').html(checkout_region(region));
			var input = paragraph.find('input[value=region]');
			var control = input.parent();
			
			input.attr('checked',true)
			control.addClass('wait').addClass('active').find('.pseudo').addClass('abs_pseudo');
		}
		
		
		
		var paragraph = $(this).parent();
			
		var	control = $(this),
			input = $(this).find('input[type=radio]'),
			link = $(this).find('.pseudo');
			
		var valInput = input.attr("name")+'|'+input.attr("value");		

		if(input.attr('checked')==true){		
			
			sessionActiviti[paragraph.attr('class')] = valInput;
			$(this).addClass('active');
			
			if(!control.hasClass('wait'))
				configAction(valInput,paragraph,control);
		}
		
		prepareTextBlocks(control,input);
		
		prepareSelectBlock(control,input);		
		
		control.click(function(){
			
			if(control.hasClass('active') && !control.hasClass('wait'))
				return false;
				
			//Исключение для полуактивных карт
			if(control.hasClass('wait'))
			{
				control.removeClass('wait');	
				control.find('.pseudo').removeClass('abs_pseudo');
			}
				
			sessionActiviti[paragraph.attr('class')] = valInput;
						
			//Действия на основе конфигурации поиска
			configAction(valInput,paragraph,control);

			//Позиционируем кнопку
			resultsBlock.change(control);
			
			return false;
		});
	});
	
	function prepareSelectBlock(control,input)
	{
		var select = control.find('.deco select');
		
		if(select == undefined || select.length < 1)
			return false;
		
		var selected = select.find('option:selected');
		var selName = select.attr('name');
		var options = select.find('option');
		var drop = '';

		control.find('.deco select').replaceWith('<span class="pseudo currency"><span class="container_list hidden"></span><input  type="radio" class="hidden" name="'+selName+'" value="'+selected.attr('value')+'" checked="checked" />'+restore_rur(selected.html())+'</span>');
		
		drop = '<div class="selectdrop">';
		drop += '<span class="pseudo" name="'+selected.attr('value')+'">'+restore_rur(selected.html(),false)+'</span><br/>';
		options.each(function(){
			if($(this).attr('selected') == '')
			{
				drop += '<span class="pseudo" name="'+$(this).val()+'">'+$(this).text()+'</span><br/>';
			}
		});
		drop += '</div>';
		
		var selectors = control.find('.deco span.currency')
		
		selectors.click(function(){
			if(!control.hasClass('active'))
			{
				control.click();
				return false;
			}
			
			dropElement.addClass('hidden');
			dropElement.html(drop);
			dropElement.css({
				left:selectors.offset().left - dropElement.parent().offset().left-7,
				top:selectors.offset().top+(selectors.height()/2) - dropElement.parent().offset().top+7
			});

			dropElement.find('.pseudo').each(function(){
				$(this).hover(function(){$(this).addClass('hover')},function(){$(this).removeClass('hover')});
			});
			
			dropElement.removeClass('hidden');
			
			//Скрываем при убирании указателя
			dropElement.hover(function(){
				
				},function(){
					dropElement.addClass('hidden');
				});
				
			dropElement.find('.pseudo').each(function(){
			$(this).click(function(){	
				selectors.html('<span class="container_list hidden">'+drop+'</span><input type="radio" class="hidden" name="'+selName+'" value="'+$(this).attr('name')+'" checked="checked" />'+restore_rur($(this).html()));
				dropElement.addClass('hidden');
				resultsBlock.change(control);
				return false;
			});
			});
			return false;
		});
	}
	
	function restore_rur(text,arrow)
	{
		if(arrow != false)
		{
			if($c.browser.opera)
				arrow = '<ins class="arrow opera">&nbsp;</ins>';
			else
				arrow = '<ins class="arrow">&nbsp;</ins>';
		}	
		else
			arrow = '';
		
		if(text == 'р' || text == 'Р')
			return '<b class="rur">'+text+'</b>'+arrow;
		else
			return '<b>'+text+'</b>'+arrow;
	}
	
	function prepareTextBlocks(control,input)
	{
		var textus = control.find('.deco input[type=text]');
		var arrName = input.attr('name')+'|'+input.attr('value');
		
		control.find('.middle_interval').remove();
		
		if(textus != undefined && textus.length > 0)
		{
			
			var i=0;
			textus.each(function(){
				
				//Если элемент активен, заполняем поля полученными значениями
				if(input.attr('checked')==true && typeof(params[$(this).attr('name')]) == 'string')					
					$(this).attr('value',$c.formatNumber(clearNum(params[$(this).attr('name')])));
				else
					$(this).attr('value',$c.formatNumber(clearNum($(this).attr('value'))));
				
				if(isIntervals[arrName] == undefined)
					isIntervals[arrName] = new Array();
				
				isIntervals[arrName][i] = new MiddleInnerText($(this),control,arrName,i,resultsBlock);
				isIntervals[arrName][i].init();

				i++;
			});
		}
		
		
	}
	
	function clearNum(str)
	{
		if(typeof(str) == 'string')
			return str.replace(/[^0-9]+/g,'');
		return str;	
	}
	
	function reset_paragraph(paragraph){
		paragraph.find('.sctrl').each(function()
		{
			if(!$(this).hasClass('hidden'))
			{
				$(this).addClass('active').find('input[type=radio]').attr('checked','checked');

				//Вновь выбранный элемент обрабатываем по прописанным правилам
				var tinut = $(this).find('input[type=radio]');
				configAction(tinut.attr('name')+'|'+tinut.attr('value'),paragraph,$(this));
				return false;
			}
		});
		return false;
	}
	
	function configAction(id,paragraph,control)
	{
		var pclass = paragraph.attr('class');
		
		//Если открыто дропменю. Обнуляем его.
		if(isDropmenu[pclass] != undefined && isDropmenu[pclass] != false)
		{
			paragraph.find('.highlight').removeClass('highlight');
			paragraph.find('.dropmenu').find('.sctrl').removeClass('active').find('input[type=checkbox]').attr('checked','');
			paragraph.find('.dropmenu').addClass('hidden');
			isDropmenu[pclass] = false;
		}
		
		//Если удалены параграфы
		if(typeof(isParagraph[pclass]) == 'object')
		{
			for(var i=0;i<isParagraph[pclass].length;i++)
			{
				isParagraph[pclass][i].removeClass('hidden');
			
				var thy = isParagraph[pclass][i];
				
				if(thy.find('input[type=text]').length > 0)
				{
					var input = thy.find('input[type=radio]');
					thy.find('.sctrl').each(function(){
						prepareTextBlocks($(this),$(this).find('input[type=radio]'));
					});
					
				}
			}
			isParagraph[pclass] = false;
			for(var cl in isParagraph) if (isParagraph[cl] && isParagraph[cl].length) for(var t=0,l=isParagraph[cl].length;t<l;t++) isParagraph[cl][t] && isParagraph[cl][t].addClass('hidden');
		}
		
		//Если есть деактивированные элементы вызванные из данного параграфа
		if(typeof(isDisabled[pclass]) == 'object')
		{
			for(var key in isDisabled[pclass])
			{				
				if(isDisabled[pclass] == undefined)
					break;

				if(typeof(isDisabled[pclass][key]) != 'object')
					break;
					
				isDisabled[pclass][key].removeClass('hidden');	
			}
			isDisabled[pclass] = undefined;
		}
		
		paragraph.find('.sctrl.active').removeClass('active');
		control.addClass('active');
		control.find('input[type=radio]').attr('checked',true);
		
		if(settings[id] == undefined)
			return false;
		
		for(var key in settings[id]){
			if(typeof(key) != 'string' )
				continue;
				
			//Команда открыть блок с чекбоксами
			if(key == 'open_dropmenu'){
				isDropmenu[pclass] = true;
				control.addClass('highlight');
				paragraph.find('.dropmenu.'+settings[id][key]).removeClass('hidden');
			}
			
			//Команда удаления пункта меню
			else if(key == 'remove'){
				isDisabled[pclass] = new Array();
				
				if(typeof(settings[id][key]) != 'string')
					return false;
				
				var repl = /^[^\|]*\|/;
				var vs = settings[id][key].replace(repl,'');
				var k = settings[id][key];				
				
				isDisabled[pclass][k] = paragraph.parent().find("input[value="+vs+"]").parent();
				
				if(isDisabled[pclass][k].attr('style') == undefined)
					isDisabled[pclass][k].css({width:isDisabled[pclass][k].width(),height:isDisabled[pclass][k].height()});	
				
				//Если элемент активен
				if(isDisabled[pclass][k].hasClass('active'))
				{
					var eparent = isDisabled[pclass][k].parent();
					eparent.find('.highlight').removeClass('highlight');
					eparent.find('.dropmenu').addClass('hidden');
					isDropmenu[eparent.attr('class')] = false;
					
					//Если удален активный элемент перевыбираем активный элемент
					reset_paragraph(eparent);
				}
				isDisabled[pclass][k].removeClass('active').addClass('hidden');
			}
			else if(key == 'remove_paragraph'){
				isParagraph[pclass] = new Array();
				
				if(typeof(settings[id][key]) != 'object')
					return false;
					
				for(var t=0;t<settings[id][key].length;t++)
				{
					isParagraph[pclass][t] = middle_form.find('.paragraph.'+settings[id][key][t]);
					isParagraph[pclass][t].addClass('hidden');
				}
			}
			
			else if(key == 'set_interval'){
				if(typeof(isIntervals) == 'object')
				{				
					for(var m in isIntervals)
					{
						if(typeof(isIntervals[m]) != 'object')
							continue;
							
						for(var n in isIntervals[m])
						{
							if(typeof(isIntervals[m][n]) != 'object')
							continue;
							//Меняем интервалы на блоках с полями интервалов
							isIntervals[m][n].setPosition('default');
						}	
					}
				}				
			}
			
			else if(key == 'load_metro')
			{
				if(typeof(settings[id][key]) != 'object')
					continue;	
				
				if(typeof(settings[id][key]['selector']) != 'string')
					continue;
					
				var selector = settings[id][key]['selector'];
				
				if(typeof(sessionSelect[selector]) != 'string')
					continue;
				
				var idparams = sessionSelect[selector];
				var params = settings[id][key][idparams];
				isDropmenu[pclass] = true;
				var dropMap = paragraph.find('.dropmenu.metromap');
				
				//Если для данного объекта не задано идентификатора карты 				
				if(params == undefined)
				{
					dropMap.html('<h2>К сожалению карты для данного города нет.</h2>');
					continue;
				}
				
				dropMap.html('<h2>Пожалуйста подождите...</h2>');
				
				if(moscow_metro == undefined)
				{
					setTimeout(function(){
	                $.ajax({
	                    type: "GET",
	                    url: metro_setting[params]['script'],
	                    dataType: "script",
	                    complete: function() {
	                    		getMetroMap(params,dropMap,paragraph);
	                    }
	                });	
					},100);	
				}
				else
				{
					dropMap.html('<h2>Пожалуйста подождите...</h2>');
					setTimeout(function(){getMetroMap(params,dropMap,paragraph);},100);
				}
			}
			else if(key == 'load_region')
			{
				if(typeof(settings[id][key]) != 'object')
					continue;	
				
				if(typeof(settings[id][key]['selector']) != 'string')
					continue;
					
				var selector = settings[id][key]['selector'];
				
				if(typeof(sessionSelect[selector]) != 'string')
					continue;
				
				var idparams = sessionSelect[selector];
				var params = settings[id][key][idparams];
				isDropmenu[pclass] = true;
				var dropMap = paragraph.find('.dropmenu.region');
				
				//Если для данного объекта не задано идентификатора карты 				
				if(params == undefined)
				{
					dropMap.html('<h2>К сожалению карты для данного города нет.</h2>');
					continue;
				}
				
				dropMap.html('<h2>Пожалуйста подождите...</h2>');
				
				if(moscow_regions == undefined)
				{
					setTimeout(function(){
	                $.ajax({
	                    type: "GET",
	                    url: region_setting[params]['script'],
	                    dataType: "script",
	                    complete: function() {
	                    		getRegionMap(params,dropMap,paragraph);
	                    }
	                });	
					},100);	
				}
				else
				{
					dropMap.html('<h2>Пожалуйста подождите...</h2>');
					setTimeout(function(){getRegionMap(params,dropMap,paragraph);},100);
				}
			}			
			else if(key == 'setrazm'){
				if(typeof(settings[id][key]) != 'string')
					continue;
				
				middle_form.find('.razm').each(function(){
					
					var Parent = $(this).parents('.sctrl');
					Parent.css('width','auto');	
					
					$(this).html(settings[id][key]);
					
					var PWidth = Parent.find('.deco').width();
					
					if(PWidth != null)
					{
						Parent.css('width',PWidth+'px');
					}	
				});
			}
		
		}
			
		return true;
	}
	
	function getMetroMap(params,dropMap,paragraph)
	{
		$('#navigation_districts').find('.save').click();
		
		dropMap.html(metro_block);
		dropMap.find('#metro').html(metro_setting[params]['image']);
		
		var save = $('#navigation_metro').find('.save');
		var any = paragraph.find('.sctrl').eq(0);
		
		if(typeof(paramsArray['metro_station_id']) != 'object')
			paramsArray['metro_station_id'] = [];
			
		if(typeof(paramsArray['metro_branch_id']) != 'object')
			paramsArray['metro_branch_id'] = [];
		
		var eMetro = $('#metro')[0];
		moscow_metro = new Metro.Object( {
			eMetro: eMetro,
			sParts_URL: metro_setting[params]['parts'],
			sTransparent_URL: metro_setting[params]['transparent'],
			sCity_ID: params,
			sSelected_branches_input_name: 'metro_branch_id',
			eTags : $('#metro_tags')[0],
			eSelected_branches: $('#selected_metro_branches')[0],
			asSelected_branches: paramsArray['metro_branch_id'],
			sSelected_stations_input_name: 'metro_station_id',
			eSelected_stations: $('#selected_metro_stations')[0],
			asSelected_stations: paramsArray['metro_station_id'],
			OnChange: function(){
				resultsBlock.change(dropMap);
			}
		});
		
		save.click(function(){
			
			if(busy)
				return false;
			
			busy = true;
			
			var drops = $(this).parents('.dropmenu');
			var contr = paragraph.find('.sctrl.active');
			var link = contr.removeClass('highlight').find('.pseudo');
			
			link.addClass('abs_pseudo')
				.click(function(){
					$('#navigation_districts').find('.save').click();
					contr.addClass('highlight');
					$(this).removeClass('abs_pseudo');
					drops.removeClass('hidden');
					resultsBlock.change(dropMap);
				});
			
			paramsArray['metro_branch_id']=[];
			paramsArray['metro_station_id']=[];
			paragraph.find('.metro_options input').each(function(){
				paramsArray[$(this).attr('name')].push($(this).attr('value'));
			});
			
			paragraph.find('.ictrl').html(checkout_metro(paramsArray['metro_branch_id'].length,paramsArray['metro_station_id'].length));
			
			drops.addClass('hidden');
			resultsBlock.change(dropMap);
			
			busy = false;
		});
		
		any.click(function(){
			
			if(busy)
				return false;
			
			busy = true;
			
			paragraph.find('.metro_options input').each(function(){
				paramsArray[$(this).attr('name')]=undefined;
			});
			
			var drops = paragraph.find('.dropmenu');
			drops.html('').addClass('hidden');
			var desc = paragraph.find('.metro_desciption');
			desc.html('');
			
			busy = false;
		})
	
		
		resultsBlock.change(dropMap);
	}
	
	function checkout_metro(branch,station)
	{

		var br = parseInt(branch);
		var st = parseInt(station);
		
		var lines_label = [' линии', ' линиях', ' '];
        var lastDigit = String(br).length > 1 ? String(br).substring(String(br).length-1) : br;
        var descStr1 = '';
        
                if(br >0 && br < 21)
                switch (parseInt(lastDigit)) {
                    case 0 : descStr1 = '' + br + lines_label[0] + ''; break;
                    case 1 : descStr1 = '' + br + lines_label[0] + ''; break;
                    case 2  : descStr1 = '' + br + lines_label[1] + ''; break;
                    case 3  : descStr1 = '' + br + lines_label[1] + ''; break;
                    case 4  : descStr1 = '' + br + lines_label[1] + ''; break;
                    default : descStr1 = '' + br + lines_label[1] + ''; break;
                }                
                else if(br > 20)
                switch (parseInt(lastDigit)) {
                    case 0 : descStr1 = '' + br + lines_label[1] + ''; break;
                    case 1 : descStr1 = '' + br + lines_label[0] + ''; break;
                    case 2  : descStr1 = '' + br + lines_label[1] + ''; break;
                    case 3  : descStr1 = '' + br + lines_label[1] + ''; break;
                    case 4  : descStr1 = '' + br + lines_label[1] + ''; break;
                    default : descStr1 = '' + br + lines_label[1] + ''; break;
                }
		
        var station_label = [' станции', ' станциях', ' станций'];        
        var lastDigit = String(st).length > 1 ? String(st).substring(String(st).length-1) : st;
        var descStr = '';
        
		        if(st > 0 && st < 21)
		        switch (parseInt(lastDigit)) {
		            case 0 : descStr = '' + st + station_label[0] + ''; break;
		            case 1 : descStr = '' + st + station_label[0] + ''; break;
		            case 2  : descStr = '' + st + station_label[1] + ''; break;
		            case 3  : descStr = '' + st + station_label[1] + ''; break;
		            case 4  : descStr = '' + st + station_label[1] + ''; break;
		            default : descStr = '' + st + station_label[1] + ''; break;
		        }                
		        else if(st > 20)
		        switch (parseInt(lastDigit)) {
		            case 0 : descStr = '' + st + station_label[1] + ''; break;
		            case 1 : descStr = '' + st + station_label[0] + ''; break;
		            case 2  : descStr = '' + st + station_label[1] + ''; break;
		            case 3  : descStr = '' + st + station_label[1] + ''; break;
		            case 4  : descStr = '' + st + station_label[1] + ''; break;
		            default : descStr = '' + st + station_label[1] + ''; break;
		        }	 
		
		if(descStr1 == '')
			return 'на&nbsp;'+descStr+'&nbsp;метро';
		else if(descStr == '')
			return 'на&nbsp;'+descStr1+'&nbsp;метро';
		return 'на&nbsp;'+descStr1+'&nbsp;и&nbsp;'+descStr+'&nbsp;метро';
	}
	
	function checkout_region(selectedRegions)
	{
		selectedRegions = parseInt(selectedRegions);
		
		var regions_label = [' микрорайоне', ' микрорайонах', ' ']
        var lastDigit = String(selectedRegions).length > 1 ? String(selectedRegions).substring(String(selectedRegions).length-1) : selectedRegions;
        var descStr = '';
        
        if(selectedRegions < 10)
        switch (parseInt(lastDigit)) {
            case 0 : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 1 : descStr = '' + selectedRegions + regions_label[0] + ''; break;
            case 2  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 3  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 4  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            default : descStr = '' + selectedRegions + regions_label[1] + ''; break;
        }                
        else if(selectedRegions > 9 && selectedRegions < 21)
        switch (parseInt(lastDigit)) {
            case 0 : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 1 : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 2  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 3  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 4  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            default : descStr = '' + selectedRegions + regions_label[1] + ''; break;
        }           
        else 
        switch (parseInt(lastDigit)) {
            case 0 : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 1 : descStr = '' + selectedRegions + regions_label[0] + ''; break;
            case 2  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 3  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            case 4  : descStr = '' + selectedRegions + regions_label[1] + ''; break;
            default : descStr = '' + selectedRegions + regions_label[1] + ''; break;
        }

        return 'в&nbsp;'+descStr;
	}
	
	function getRegionMap(params,dropMap,paragraph)
	{
		$('#navigation_metro').find('.save').click();
		
		dropMap.html(region_block);
		dropMap.find('#districts').html(region_setting[params]['image']);		
		
		var save = $('#navigation_districts').find('.save');
		var any = paragraph.find('.sctrl').eq(0);
		var contr = paragraph.find('.sctrl.active');
		var link = contr.find('.pseudo');
		
		if(typeof(paramsArray['district_id']) != 'object')
			paramsArray['district_id'] = [];
		
		var eOn = $('#districts')[0];
		 moscow_regions = new Map.Object( {
			  eThis: eOn
			  , sArea_ID: params
			  , oClose: {button: save, container: paragraph.find('.dropmenu.region'), parentButton: link, regionDesc: paragraph.find('.ictrl')}
			  , sParts_URL: region_setting[params]['parts']
			  , sTransparent_URL: region_setting[params]['transparent']
			  , sSelected_input_name: 'district_id'
			  , eSelected: $('#selected_districts')[0]
			  , eTags: $('#districts_tags')[0]
			  , asSelected: paramsArray['district_id']
		 } );
		 resultsBlock.change(dropMap);
		 
		 save.click(function(){
		 	
		 	if(busy)
				return false;
			
			busy = true;
		 	
			$('#navigation_metro').find('.save').click();
			var drops = $(this).parents('.dropmenu');
			contr.removeClass('highlight');
			
			link.addClass('abs_pseudo')
				.click(function(){
					$('#navigation_metro').find('.save').click();
					contr.addClass('highlight');
					$(this).removeClass('abs_pseudo');
					//resultsBlock.change(dropMap);
				});
				
			paramsArray['district_id']=[];
			
			paragraph.find('.regions_options input').each(function(){
				paramsArray[$(this).attr('name')].push($(this).attr('value'));
			});	
			
			drops.addClass('hidden');
			resultsBlock.change(dropMap);
			busy = false;
		 });
		 
		
		any.click(function(){
			
			paragraph.find('.regions_options input').each(function(){
				paramsArray[$(this).attr('name')]=undefined;
			});
			
			var drops = paragraph.find('.dropmenu');
			drops.html('').addClass('hidden');
			var desc = paragraph.find('.region_desciption');
			desc.html('');

		});		 
		 
	}
		
	/**
	 * Метод декорирования переданного элемента с точки зрения радио буттона
	 */
	function addDecoration(element){
		var decor_befor = '<span class="deco"><ins class="bl"></ins><span class="inner"><ins class="tr"></ins>';
		var decor_after = '</span></span>';
		
		var dlink = '<span class="pseudo">'+element.find('.lctrl').html()+'</span>';		
		if(element.find('.fctrl').length)
			dlink += element.find('.fctrl').html();
		if(element.find('.rctrl').length)	
			dlink += '<span class="razm">'+element.find('.rctrl').html()+'</span>';
		
		var dinput = element.find('input[type="radio"]');
		
		if(element.parents('.paragraph').hasClass('hidden'))
		{
			element.parents('.paragraph').removeClass('hidden');
			element.css({width:element.width(),height:element.height()});
			element.parents('.paragraph').addClass('hidden');
		}
		else if(element.hasClass('hidden'))
		{
			element.removeClass('hidden');
			element.css({width:element.width(),height:element.height()});
			element.addClass('hidden');
		}
		else
		{
			element.css({width:element.width(),height:element.height()});
		}
			
		var checked = '';
		if(dinput.attr('checked') == true)
			checked = 'checked="checked"'
		
		if(dinput.hasClass('default'))
			var defClass = 'class="'+dinput.attr('class')+'"';
		else
			var defClass = '';
		
		element.html('<input type="radio" '+defClass+' name="'+dinput.attr('name')+'" value="'+dinput.attr('value')+'"' +checked+ '/>'+decor_befor+dlink+decor_after);				
		element.find('.pseudo').hover(function(){$(this).addClass('hover')},function(){$(this).removeClass('hover')});		
		return true;
	}	
	
}

/*Текстовое поле внутри радиобуттонна*/
var MiddleInnerText = function(input,control,inNames,numImp,resultsBlock,decoframe){
	
	if(decoframe == undefined || decoframe == true)
	{
		control.find('.deco').addClass('addheight');
		if($c.browser.opera)
			control.find('.deco span').css('width',control.find('.deco').width()+'px');	
	}
	input.after('<div class="'+sliderClass+'"></div>');
	
	var input = input;
	var slider = input.next();
	var isChange = '';
	var iWidth = 0;
	var iOffset,cOffset,min,max,decimal,type,leftCron,factor,scale,interval,def;
	var bIsClicked = false,
		iSliderMouse = 0,
		iSliderWidth = 0;

	function init()
	{
		//debug('init');
		
		iWidth = input.width();
		iOffset = input.offset();
		cOffset = control.offset();
		iSliderWidth = parseInt(slider.width()/2);
		
		leftCron = parseInt((iOffset.left - cOffset.left)-iSliderMouse-iSliderWidth); 
		if($c.browser.msie && $c.browser.version < 7)
        		leftCron = leftCron-15;		
	
		setPosition(input.attr('value'));
	}
	
	function getIntervalSettings(setts)
	{
		if(setts['type'] != undefined)
			return setts;
		
		for(var vl in setts)
		{
			if(typeof(setts[vl]) != 'object')
				continue;
			
			if(vl == 'default')
				return setts['default'];
			
			for(var key in sessionActiviti)
			{
				if(typeof(sessionActiviti[key]) != 'string')
					continue;
				
				if(vl == sessionActiviti[key])
					return getIntervalSettings(setts[vl]);
			}	
		}
		return false;	
	}
	
	function setPosition(value)
	{		
		if(settings[inNames] == undefined)
			return false;
						
		if(settings[inNames]['intervals'] != undefined)
		{	
			var setts = getIntervalSettings(settings[inNames]['intervals']);
		}
		
		if(setts == undefined || setts == false)
			return false;
		
		if(typeof(value) == "undefined")
			value = input.attr('value');
		else if(value == 'default')
		{
			value = setts['default'+numImp];
			input.attr('value',value);
		}			
			
		type = setts['type'];
		if(type == 'smart')
		{			
			min = setts['min'];
			max = setts['max'];
			interval = setts['int'];
			smartPosition(min,max,clearNum(value));
		}
		else if(type == 'short')
		{
			min = setts['min'];
			interval = setts['int'];
			factor = setts['factor'];
			shortPosition(min,factor,clearNum(value));		
		}
	}
	
	function setSimplePosition(value)
	{
		if(value == undefined)
			value = input.attr('value');			

		if(type == 'smart')
		{
			smartPosition(min,max,clearNum(value));
		}
		else if(type == 'short')
		{
			shortPosition(min,factor,clearNum(value));			
		}		
	}
	
	function setIntervalPosition(act) {
		var value = input.attr('value');
		if(interval == undefined)
			interval = 0;
		
		if(act == '+')
			input.attr('value',$c.formatNumber(parseInt(clearNum(input.val())) + interval));
		else
			input.attr('value',$c.formatNumber(parseInt(clearNum(input.val())) - interval));
	}
	
	function shortPosition(min,factor,value){
		
		max = iWidth*factor + min;
		
		if(slider.hasClass('undef'))
			slider.removeClass('undef');
		
		if(value > max) {value = max; slider.addClass('undef');}
		else if(value < min) {value = min; slider.addClass('undef');}
		
		//slider.css({
	    //    left: parseInt(leftCron+(value/factor)-iSliderWidth-iSliderMouse)+'px'
	    //});
	    slider.animate({left: parseInt(leftCron+(value/factor))},300);
	}
	
	function smartPosition(min,max,value)
	{
		var mins = new String(min);mins = mins.length-1;
		var maxs = new String(max);maxs = maxs.length-1
		//Количество разрядов
		decimal = ((maxs-mins)*10)+(max/(Math.pow(10,maxs)))-(min/(Math.pow(10,mins)));
		//Шаг движения
		scale = parseInt(iWidth / decimal);
		
		if(slider.hasClass('undef'))
			slider.removeClass('undef');
		
		if(value > max) {value = max; slider.addClass('undef');}
		else if(value < min) {value = min; slider.addClass('undef');}
		
		var values = new String(value);values = values.length-1; 
		value = (((values-mins)*10)+(value/(Math.pow(10,values))) - (min/(Math.pow(10,mins))))*scale;
		
		//slider.css({
        //        left: (leftCron+value)+'px'
        //    });
        slider.animate({left: (leftCron+value)},300);  
	}
	
	function fixEvent(e) {
	    return e
	}
	
    slider.mousedown(function(e){
    	e = fixEvent(e);    	
        bIsClicked = true;
        iSliderMouse = e.pageX - slider.offset().left;
        slider.addClass('drag');
        // отменить перенос и выделение текста при клике на тексте
        document.ondragstart = function() { return false };
        document.body.onselectstart = function() { return false };
        return false;
    });
    
    $(document).mousemove(function(e){
		e = fixEvent(e);
        
        if(bIsClicked)
     	{
            e.preventDefault();
            
			if(slider.hasClass('undef'))
				slider.removeClass('undef');
            
            var sliderValue = parseInt(parseInt(e.pageX - input.offset().left - iSliderMouse + iSliderWidth)+leftCron);

            if(sliderValue > iWidth+leftCron)
            	sliderValue = iWidth+leftCron;
            else if(sliderValue < leftCron)
            	sliderValue = leftCron; 
        
            if(type == 'smart')
            {
            	//Определяем максимум шагов
            	var InputValue = Math.round((sliderValue-leftCron)/scale);
	            var cels = parseInt(InputValue/10);
	            var ost = InputValue%10+1;
	            
	            InputValue = min * Math.pow(10,cels)*ost;            	
            	
            	
            	//Определяем положение слайдера
	            if($c.browser.msie && $c.browser.version < 7)
	            {
	            	InputValue = min * Math.pow(10,cels)*ost;
	            	sliderValue = (Math.round((sliderValue-leftCron)/scale)*scale)+leftCron;
	            }
	            else
	            {
            		InputValue = min * Math.pow(10,cels)*ost;
            		sliderValue = (Math.round((sliderValue-leftCron)/scale)*scale)+leftCron;
	            }	
            }
            else if(type == 'short')
            {
            	var InputValue = ((sliderValue-leftCron)*factor)+min;
            }

            slider.css({
                left: sliderValue+'px'
            });
           	isChange = InputValue;
            input.attr('value',$c.formatNumber(InputValue));
			resultsBlock.change(control);
     		return false;
     	}

        return true;
    });
    
    $(document).mouseup(function(e){
        e = fixEvent(e);
        if(bIsClicked == true)
        {
	        //resultsBlock.change(control);
	        bIsClicked = false;
	        document.ondragstart = null;
	        document.body.onselectstart = null;
	        slider.removeClass('drag');
	        return false;
        }
        return true;
    });
    
    var TimeOut,TimeOutCheck;
    var SliderCheck = setInterval(function(){
    	var inp = clearNum(input.val());
    	if(bIsClicked == false && isChange != inp)
    	{
    		isChange = inp;
    		
    		clearTimeout(TimeOut);
    		TimeOut = setTimeout(function(){setSimplePosition(clearNum(input.val()));return false;},100);
    	}
    },500);  
    
	
	input.change(function(){
		if(bIsClicked == false)
		{
			var inp = clearNum($(this).val());
			input.val($c.formatNumber(inp));
			
			clearTimeout(TimeOutCheck);
    		TimeOutCheck = setTimeout(function(){setSimplePosition(setSimplePosition(inp));resultsBlock.change(control);;return false;},100);
		}
		return true;
	});
	
	input.keypress(function(e) {
		var c = e.which ? e.which : e.keyCode;
	
		if(c==38) setIntervalPosition('+');
		if(c==40) setIntervalPosition('-');
		
		if(checkNumKeys(e) == false)
		{
			debug("wrong press");
			input.addClass('wrong');
			setTimeout(function(){input.removeClass('wrong');},300);
			return false;
		}
		resultsBlock.change(control);
		return true;
	});
					
	input.keydown(function(e) {
		if(checkNumKeys(e) == false)
		{
			debug("wrong down");
			input.addClass('wrong');
			setTimeout(function(){input.removeClass('wrong');},300);
			return false;
		}
		return true;
	});	
	
	function clearNum(str)
	{
		if(typeof(str) == 'string')
			return str.replace(/[^0-9]+/g,'');
		
		if(typeof(str) == 'undefined')
			return '';

		return str;	
	}
	
	function checkNumKeys(evt) {
		var bWrongChar = true;
		var iKeyCode = evt.keyCode;
		var sType = evt.type;
		var bKeypress = (sType == 'keypress');
		
		var bCtrlKey = evt.ctrlKey || evt.metaKey;
		var bShiftKey = evt.shiftKey;
		if (iKeyCode == 0 || iKeyCode == 8 || iKeyCode == 9 || iKeyCode == 13 || iKeyCode == 12 || iKeyCode == 16 || iKeyCode == 17 || iKeyCode == 18 || iKeyCode == 33 || iKeyCode == 34 || iKeyCode == 35 || iKeyCode == 36 || iKeyCode == 37 || iKeyCode == 38 || iKeyCode == 39 || iKeyCode == 40 || (iKeyCode == 46 && !window.opera) ||	(iKeyCode > 47 && iKeyCode < 58) || (iKeyCode > 95 && iKeyCode < 106 && !bKeypress) || iKeyCode == 91 || iKeyCode == 224 ) bWrongChar = false;
	
		if ( (bCtrlKey && iKeyCode == 65) || (bCtrlKey && iKeyCode == 67) || (bCtrlKey && iKeyCode == 86) || (bCtrlKey && iKeyCode == 88) ) bWrongChar = false;
	
		if ( (bShiftKey && (iKeyCode > 47 && iKeyCode < 58)) ) bWrongChar = true;
	
		if (bWrongChar) {
			debug("Press wrong key");
			evt.returnValue = false;
			evt.cancelBubble = true;
			if (evt.preventDefault) evt.preventDefault();
			
			return false;
		}
		else
			return true;
			
		return false;	
	};	

	return {
		init:init,
		setPosition:setPosition,
		input:input
	}

}

var positionResultsCounter = function(jForm, jSearchBlock,oThis) {
    
    var formBlock = $('.form_block').eq(0),
        formOffset = formBlock.offset(),
        formCounter = jSearchBlock.find('.number'),
        parentOffset = jSearchBlock.parent().offset().top,
        blockHeight;
    var isloading = false;
    var thisajax;
    var oldJElement;
    var timeAjaxWite;
    var oThis = oThis;
    
    var button = jSearchBlock.find('.panel_control');
    
    button.click(function(){
    	$(this).addClass('press');
    	setTimeout(function(){button.removeClass('press');return true;},500);
    	return true;
    });

    /*Активирование блока*/
    function activate(jElement) {
        jSearchBlock.css('visibility','hidden');
        jSearchBlock.removeClass('hidden');
        blockHeight = jSearchBlock.height();
        jSearchBlock.css(
            {
                top: parseInt(formOffset.top - parentOffset + (blockHeight/2) + (jElement.parent().parent().height()/2)),
                visibility: 'visible'
            }
        );
    };

	/*Смена позиции управляющего элемента*/
	function change(jElement) {
		
		oThis.isClicking = true;
		
		if(typeof(jElement) == "object")
		{
		
			if(isloading && typeof(thisajax) == 'object') thisajax.abort();
			isloading = true;
			
			formBlock = jElement.parents('.paragraph');
	
			formOffset = formBlock.offset();
			jSearchBlock.animate({
				top: parseInt(formOffset.top - parentOffset + (blockHeight/2.5)) 
			}, 300);
			
				
			var eFormEl = jElement.parents('form').find('input');
		}
		else
		{
			var eFormEl = jForm.find('input');
		}
		var hValues = {}
		for (var i = 0; i < eFormEl.length; i++) {
			switch (eFormEl[i].type) {
				case 'radio':
					if (eFormEl[i].checked) hValues[eFormEl[i].name] = eFormEl[i].value;
					break;
				case 'text':
					hValues[eFormEl[i].name] = eFormEl[i].value;
				case 'checkbox':				
					if(eFormEl[i].checked)
					{
						if(typeof(hValues[eFormEl[i].name]) == 'undefined')
						{
							hValues[eFormEl[i].name] = eFormEl[i].value;
						}
						else if(typeof(hValues[eFormEl[i].name]) == 'string')
						{
							hValues[eFormEl[i].name] = [hValues[eFormEl[i].name]];
						}
						
						if(typeof(hValues[eFormEl[i].name]) == 'object')
						{
							hValues[eFormEl[i].name].push(eFormEl[i].value);
						}						
					}
				break;	
			}
		}			
			
		
		if(timeAjaxWite != undefined)
			clearTimeout(timeAjaxWite);
		timeAjaxWite = setTimeout(function(){
			thisajax = $.ajax({
				type: "GET",
				data: hValues,
				url: url_getSearchResultsCount,
				dataType: "json",
				success: function(data) {
					isloading = false;
					formCounter.text(data.results);
					
					if(parseInt(data.results) === 0) {
						button.addClass('disable');
						button.find('button').attr('disabled', 'disabled');
					} else {
						button.removeClass('disable');
						button.find('button').removeAttr('disabled');
					}
				}
			});
		},500);
	};

	return {
		change : change,
		activate : activate
	}	
}

var metro_block =
'<div id="navigation_metro"><span class="pseudo save">сохранить</span></div>'
+'<div id="metro_block">'                
	+'<div class="map">'
	    +'<div id="metro">'   
	    +'</div>'
	    +'<div class="metro_options">'
	        +'<div id="metro_tags">'
	            +'<div class="stations"></div>'
	            +'<div class="branches"></div>'
	        +'</div>'
	        +'<div id="selected_metro_branches"></div>'
	        +'<div id="selected_metro_stations"></div>'
	    +'</div>'
	+'</div>'
+'</div>';
var region_block = 
'<div id="navigation_districts"><span class="pseudo save">сохранить</span></div>'
+'<div id="destricts_block">'
    +'<div class="corners_content">'
		+'<div class="map">'
			+'<div id="districts"></div>'
           	
			+'<div class="regions_options">'
                +'<div class="tags">'
                    +'<p id="districts_tags"></p>'
               +'</div>'
               +'<div class="results">'
                    +'<p id="selected_districts"></p>'
                +'</div>'
            +'</div>'
        +'</div>'
    +'</div>'
+'</div>';
/*
var chuser_select = 
'<div class="panel_control">
    +'<div class="value">
        +'<div class="t"><div class="l"><a><span>однушку</span></a><img src="/st/i/0.gif" class="arr"/></div><ins class="r"></ins></div>
        +'<ins class="b"><ins class="l"></ins><ins class="r"></ins></ins>
    +'</div>
    +'<div class="list">
        +'<div class="t"><div class="l">
                <label><a class="selected"><span><input class="item" type="radio" name="type" value="flat_one" checked="checked"/>однушку</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="flat_two"/>двушку</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="flat_three"/>трешку</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="flat_four"/>4-комнатную</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="flat_five"/>5-комнатную</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="house"/>дом</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="office"/>офис</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="townhouse"/>таунхаус</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="villa"/>дачу</span></a></label>
                <label><a><span><input class="item" type="radio" name="type" value="elite"/>элитную&nbsp;недвижимость</span></a></label>
            </div>
            <ins class="r"></ins>
            <ins class="clear"></ins>
        </div>
        <ins class="b">
            <ins class="r">
            </ins>
        </ins>
        <ins class="close_button">
        </ins>
    </div>
</div>
*/