//	Переменная для хранения данных о ширине верхнего меню
var swidth = 0;
var text_price = "все цены";
var top_price = "9999999";
var bottom_price = "0";

$(function(){

	$(".zoom")
		.fancybox({
			'transitionIn'		: 'none',
			'transitionOut'		: 'none',
			'titlePosition' 	: 'over',
			'cyclic'            : 'true',
			'type'				: 'image',
			'titleFormat'		: function(title, currentArray, currentIndex, currentOpts) {
				return '';
			}
		});

		$(".fancy_group").fancybox({
			'transitionIn'		: 'none',
			'transitionOut'		: 'none',
			'titlePosition' 	: 'outside',
			'type'				: 'image',
			'cyclic'			: true,
			'titleFormat'		: function(title, currentArray, currentIndex, currentOpts) {
				return '<span id="fancybox-title-over">' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
			}
		});

  	$(".nav li,.zoom,.iframezoom").append('<i></i>');

	$(".nav li")
	  	.mouseover(
			function(){
	      		$(this).addClass('activex');
	  	})
		.mouseout(
			function(){
	      		$(this).removeClass('activex');
	  	});

    /*
	$(".nav li a")
		.each(
			function(){
            	var str = $(this).html();
            	
            	if (str.length > 10) {
            		str2 = str.replace(" ", "<br />");
            		$(this).html(str2);
           		};
    	});
    	
  	$(".nav li span")
	  	.each(
		  	function(){
            	var str = $(this).html();
            	
            	if (str.length > 10) {
            		str2 = str.replace(" ", "<br />");
            		$(this).html(str2);
            	};
        });
    */     
	$(".nav li")
  		.each(
		  	function(){
				swidth =  swidth + $(this).width();
      	});

  	swidth =  812 - swidth + $(".nav li:last a").width();
  	$(".nav li:last a").width(swidth);
  	
	    	
    $('#filterformsend')
		.click(function(event){
			event.preventDefault();
	      	$("#filterform").submit();
	  	});
	  	
	$('.photoclick').addClass("iframe").fancybox({
		scrolling:"no",
		autoScale:false,
		width: 700,
		height: 500
	});

	/*
	*	Заглушка
	*   TODO: убрать после внедрения опиций смены телефона для конкретеной страницы
	*/
    $('#gaghide')
		.click(function(){
   			$('.mzShow').hide();
   			$('.mzHide').show();
	  	});
    $('#gagshow')
		.click(function(){
   			$('.mzShow').show();
   			$('.mzHide').hide();
	  	});
        
    $('#button-captcha').click(function(event){
		event.preventDefault();
		reloadCaptcha();
	});
	
	
	/*	Появляющеся окно при наведении мыши в таблице квартиры	*/
	$(".hOffset")
	  	.mouseover(
			function(){
				topThis = $(this).offset();
				s_rel = $(this).attr('rel')
	      		$("#" + s_rel).css({marginLeft: 250, top: topThis.top}).show();
	  	})
		.mouseout(
			function(){
	      		$("#" + s_rel).hide();
	  	});
	  	
    
    $.fn.ajaxForm = function(options)
	{
		var settings = {
			/**
			 * Sizzle selector for message container
			 * displayed after success sending
			 */
			messageContainerSelector: ''
		};			

		return this.each(function()
		{
			if (options) { 
				$.extend(settings, options);
			}

			var $form = $(this);
			var $messageContainer;
			if(settings.messageContainerSelector){
				$messageContainer = $(settings.messageContainerSelector);
			}
			if(!$messageContainer){
				$messageContainer = $form.parent().find('div.message');
			}
			
			var $loadingIcon = $('<div class="loadingIcon"><img src="/img/loading.gif" /></div>');			
			$form.find('input[type="submit"]').after($loadingIcon);
			$loadingIcon.hide();
			$form.submit(function(event)
			{
				event.preventDefault();
					
				$loadingIcon.show();
				var data = $form.serialize();
				$form.find('input, textarea, select').attr('disabled', 'disabled');
				$.post($form.attr('action'), data, function(data){ 
					$loadingIcon.hide(); 
					if(data.ok){
						$form.find('input[type="text"], textarea').val('');
						$form.find('select option:first').attr('selected', 'selected');
						$messageContainer.show();
						$form.hide();  
					} else if(data.errors) {   
						var errors = [];
						for(var p in data.errors){
							errors.push(data.errors[p]);
						}
						if(errors.length){
							alert(errors.join("\n"));
						}
					}
                    
					$form.find('input, textarea, select').removeAttr('disabled');
				}, 'json');
			}
			);
		}
		);
	}
	
	$(".val-n").keypress (
	function(event)
	{
	 	var key, keyChar;
		if(!event) var event = window.event;
		
		if (event.keyCode) key = event.keyCode;
		else if(event.which) key = event.which;
	
	if(key==null || key==0 || key==8 || key==13 || key==37 || key==39 || key==46 || key==9) return true;
	keyChar=String.fromCharCode(key);
	
	if(!/\d/.test(keyChar))	{
		alert('В это поле разрешено вводить только цифры');
		return false; 
	}
	});
	
});

function reloadCaptcha(){
	$captchaImage = $('#icp');
	if($captchaImage.length){
		$captchaImage.attr('src', captchaUrl + '?' + Math.floor(Math.random()*10));
	}
}

function formatNumber(number)
{
	return ((number / 1000) + '').replace('.', ' ') + '00';
}

// Framework
var jwi = jwi || {};
jwi.core = jwi.core || {};
// Диспетчер событий
jwi.core.EventDispatcher = function(){
	var listeners = {};

	return {
		/**
		 * Добавить обработчик события
		 * 
		 * @param string 	eventName 	Название события
		 * @param function	callback	Обработчик
		 */
		addEventListener: function(eventName, callback)
		{
			if(!listeners[eventName]){
				listeners[eventName] = [];
			}
			if(typeof(callback) == 'function'){
				listeners[eventName].push(callback);
			}
		},
		
		/**
		 * Уведомить о произошедшем событии
		 * 
		 * @param string eventName	Название события
		 */
		dispatchEvent: function(eventName)
		{
			if(listeners[eventName]){
				var length = listeners[eventName].length;
				for(var i = 0; i < length; i++){
					listeners[eventName][i]();
				}
			}
		}
	}
};

jwi.object = {
	isset: function(objectName)
	{
		try {
			return typeof(eval(objectName)) != 'undefined';
		} catch(e){
			return false;
		}
	}
};

// Project's namespace
/**
 * @type na
 */
var na = na || {};
na.eventDispatcher = new jwi.core.EventDispatcher();

/**
 * Инициализация быстрого фильтра
 * @memberOf na
 */
na.initFilterBar = function()
{
	// Генерирует значения списка цен для "всех квартир"
	na.prepareDefaultPrices(prices);
	
	$('select#areaSelect').naFilterDropdown('init');
	
	var $squareRangeSelect = $('select#squareSelect');
	if($squareRangeSelect.length){
		$squareRangeSelect.naFilterDropdown('init',
			{
				onChange: function(){
					var data;
					if(this.currentValue){
						data = squares[this.currentValue-1];
					} else {
						data = {from: 0, to: top_price};
					}
					
					if(data){
						$('input#square_from_save').val(data.from);
						$('input#square_to_save').val(data.to);
					}
				},
				
				onClear: function()
				{
					$('input#square_from_save').val(bottom_price);
					$('input#square_to_save').val(top_price);
				}
			});
		if(jwi.object.isset('squares')){
			$('#squareSelect').naFilterDropdown('clear');
			$('#squareSelect').naFilterDropdown('add', {value: '', label: 'Любой площадью'});
			var selected = false;
			for(var i = 0; i < squares.length; i++){
				selected = square_to == squares[i].to;
				$('#squareSelect').naFilterDropdown('add', {value: i+1, label: squares[i].label, selected: selected});
			}
		}
	}
	$('select#roomsSelect').naFilterDropdown('init', 
		{
			onChange: function(){
				na.syncFilterPricesToRooms(true);
			}
		}
	);
	
	
	$('#priceSelect').naFilterDropdown('init',
		{
			onChange: function(){
				var price;
				if(!isNaN(parseFloat(this.currentValue))){
					var currentRooms = na.getCurrentRooms();
					price = prices[currentRooms][this.currentValue];
				} else {
					price = {from: 0, to: top_price};
				}
				if(price){
					$('input#price_from_save').val(price.from);
					$('input#price_to_save').val(price.to);
				}
			},

			onClear: function()
			{
				$('input#price_from_save').val(bottom_price);
				$('input#price_to_save').val(top_price);
			}
		}
	);
	
	$('#priceCountrySelect').naFilterDropdown('init',
			{
				onChange: function(){
					var price;
					if(!isNaN(parseFloat(this.currentValue))){
						price = prices[0][this.currentValue];
					} else {
						price = {from: 0, to: top_price};
					}
					
					if(price){
						$('input#price_from_save').val(price.from);
						$('input#price_to_save').val(price.to);
					}
				},

				onClear: function()
				{
					$('input#price_from_save').val(bottom_price);
					$('input#price_to_save').val(top_price);
				}
			}
		);

	na.syncFilterPricesToRooms(false);
}

/**
 * Инициализация фильтра на главной страницы
 */
na.initIndexFilter = function()
{
	if(!$('#priceIndexSlider').length){
		return false;
	}

	$("#RoomLink a")
		.click(function(event) 
		{
			event.preventDefault();			 			 			 			
			if (!$(this).hasClass('notActive')) {
				$("#RoomLink a").removeClass('index-active');
				$("#RealText").hide();
				$(this).addClass('index-active');
	
				$("#subtypeIndexSlider").animate({
	   				left: '0'
				}, 500, function() {
	    			if(!$("ul#pricesList").is(":visible")){
	      				$("#RoomText").show();
	    			}
				});	
			}
		}
		);
    	
    $("ul#subtypesList a.subtype")
		.click(function(event)
		{
	        event.preventDefault();
	        var $this = $(this);
	        $this.parents('ul:first').find('a').removeClass('index-active');
	        $this.addClass('index-active');
	        $("#RoomText").hide();
	        
	        var $pricesList = $('ul#pricesList');
			var parts = $this.attr('id').split('-');
			var url = '/new-flat/properties/?rooms=' + parts[2];
			if(jwi.object.isset("indexFilterData['type-"+parts[1]+"']['subtype-"+parts[1]+"-"+parts[2]+"']")){
				var data = indexFilterData['type-'+parts[1]]['subtype-'+parts[1]+'-'+parts[2]];
				var html = '';
				
				for(var i = 0; i < data.prices.length; i++){
					html += '<li><a href="' + url + '&amp;price_from=' + data.prices[i][0] + '&amp;price_to=' + data.prices[i][1] + '">' + data.prices[i][2] + '</a></li>';
				}
				html += '<li class="all-offers"><a href="' + url + '">Все предложения</a></li>';
				$pricesList.html(html);
			}
			
			// Проверку для IE7 на подключение метода  .center()
			if ( $.browser.msie && $.browser.version == 7 ) {
       			$pricesList.show().center({
					horizontal: false // only vertical
				});
			} else {
                $pricesList.show();
			}

		}
	);
}

/**
 * Управление таблицей списка объектов (выборка элементов для печати).
 */
na.initItemsTable = function()
{
	var clickEventName = 'tableItemClick';

	// Добавим обработчик события
	na.eventDispatcher.addEventListener(clickEventName, function(){
		var checkedNumber = $('input[name="flats[]"]:checked').length;
		$('.checkedItemsNumber').text(checkedNumber);
		
		var $container = $('#printCheckedContainer');
		if(checkedNumber && $container.is('.disabled')){
			$container.removeClass('disabled');
		} else if(!checkedNumber && $container.is(':not(.disabled)')){
			$container.addClass('disabled');
		}
	});
	
	$('#checkAllButton').click(function(event){
		event.preventDefault();
		// Если это чекбокс, то ориентируемся на его состояние,
		// иначе всегда выделяем.
		var checked = $(this).is('input[type="checkbox"]') ? $(this).attr('checked') : true;
		var $controls = $('input[name="flats[]"]');
		if(checked){
			$controls.attr('checked', 'checked');
		} else {
			$controls.removeAttr('checked');
		}
		
		// Уведомим о произошедшем событии
		na.eventDispatcher.dispatchEvent(clickEventName);
	});

	$('input[name="flats[]"]').click(function(event){
		na.eventDispatcher.dispatchEvent(clickEventName);
	});
	
	$('#printCheckedButton').click(function(event){
		event.preventDefault();
		if(!$(this).is('.disabled')){
			$('form#printForm').submit();
		}
	});

	// Чтобы установить кнопку печати выбранных элементов
	// в изначальное неактивное состояние, вызовем хендлер.
	na.eventDispatcher.dispatchEvent(clickEventName);
}

/**
 * Создает список значений и подписей для селекта цен
 * для значения по умолчанию
 * 
 * @memberOf na
 */
na.prepareDefaultPrices = function(prices)
{
	var num = 3;
	var min = jwi.object.isset("prices[0][0]['to']") 
				? Math.floor(prices[0][0]['to'] / 10) * 10 
				: 0;
	var max = jwi.object.isset("prices[prices.length-1][4]['from']") 
				? Math.ceil(prices[prices.length-1][4]['from'] / 10) * 10 
				: 0;
	var step = Math.floor(((max - min) / num) / 1000) * 1000;
	var values = [{from: 0, to: min, label: 'до ' + formatNumber(min) + ' тыс. рублей'}];
	var start = 0;
	for(var i = 0; i<num; i++){
		start = min + (step * i);
		values.push({from: start, to: start+step, label: 'от ' + formatNumber(start) + ' до ' + formatNumber(start + step)  + ' тыс. рублей'});
	}
	values.push({from: start + step, to: top_price, label: 'от ' + formatNumber(start + step) + ' тыс. рублей'});
	prices.push(values);
}

/**
 * Возвращает выбранное количество комнат. 
 * Если нисколько не выбрано, возвращается 5 - "любое количество комнат".
 * Если отсутствует сам селект выбора количества (например, на странице комнат
 * на вторичном рынке), возвращается ноль.
 * 
 * @memberOf na
 */
na.getCurrentRooms = function()
{
	var roomsNumber = $('form#filterform input[name="rooms"]').length ? $('input[name="rooms"]').val() : 0;
	return isNaN(parseInt(roomsNumber)) ? 5 : roomsNumber;
}

na.syncFilterPricesToRooms = function(clear)
{
	var value = na.getCurrentRooms();
	
	var $select = $('#priceSelect').length ? $('#priceSelect') : $('#priceCountrySelect');
	
	// Очищаем селект с ценами
	// и заполняем актуальными данными
	if(clear){
		$select.naFilterDropdown('clear');
	}
	var values = prices[value];
	if(!values){
		values = prices[0];
	}
	
	if(values){
		$select.naFilterDropdown('add', {value: '', label: 'Все цены', selected: true, skipCallback: true});
		$.each(values, function(i){
			var selected = this.from == $('input[name="price_from"]').val() && this.to == $('input[name="price_to"]').val();
			$select.naFilterDropdown('add', {value: i, label: this.label, selected: selected});
		});
	}
}

/**
 * Объект, отвечающий за переключение телефонов в шапке.
 * 
 * @author Viacheslav Makhotkin <retardeddude@gmail.com>
 */
na.PhoneSwitcher = (function()
{
	var _$container;
	var _values = {};
	
	function _getContainer()
	{
		if(!_$container){
			_$container = $('div.tel span.number');
		}
		
		return _$container;
	}
	
	return {
		add: function(key, value)
		{
			_values[key] = value;
		},
		
		to: function(key)
		{
			var $container = _getContainer();
			if(!$container){
				return false;
			}
			
			var value = _values[key] || null;
			if(value === null){
				return false;
			}
			
			$container.text(value);
		}
	}
})();



