


// Настройки "по-умолчанию"
$(function(){
	
	if ($.fn.fancybox) $.fn.fancybox.defaults.titlePosition = 'inside';
	
});


// Добавление объекта в избранное
(function($){
	
	
	// Опции
	var options = {
		id: 0,
		url: 'users/ajax_add_favorites',
		callbackSuccess: null,
		el: null
	};
	
	
	// Методы
	var methods = {
		
		
		// Инициализация
		init: function(config) {
			data = $(this).data('objecAddFavorite');
			data.el = $(this);
			$(this).data('objecAddFavorite', data);
			$(this).bind('click.objecAddFavorite', methods.sendRequest);
		},
		
		
		// Отправка запроса
		sendRequest: function() {
			
			data = $(this).data('objecAddFavorite');
			
			$.ajax({
				type: 'POST',
				cache: false,
				dataType: 'json',
				data: 'id='+data.id,
				url: data.url,
				success: function(response) {
					data.callbackSuccess(data.el, response);
				}
			});
			
		}
		
		
	}
	
	
	$.fn.objecAddFavorite = function(config) {
		return this.each(function(){
			if (!$(this).data('objecAddFavorite')) {
				config = $.extend(options, config);
				$(this).data('objecAddFavorite', config);
				methods.init.apply(this, [0, config]);
			}
		});
	}
})(jQuery);


// Утилиты
utils = {
	
	// Красивый alert
	 candyAlert: {

	  // Инициализация
	  init: function() {
	   if (!$('.b-candyAlert').length) {
	    $('BODY').append('<div class="b-candyAlert"><div class="b-candyAlert-body"></div><div class="b-candyAlert-close"><a href="#"></a></div></div>');
	    $('.b-candyAlert-close A').click(function() {
	     $.modal.close();
	     return false;
	    });
	   }
	  },

	  // Показать alert
	  show: function(options) {

	   var config = {
	    text: '',
	    closeText: 'Закрыть'
	   }
	   $.extend(config, options);

	   this.init();

	   $('.b-candyAlert-body').html(config.text);
	   $('.b-candyAlert-close A').html(config.closeText);
	   $('.b-candyAlert').modal({
	    overlayCss: { backgroundColor: '#666' },
	    overlayClose: true
	   });
	  }

	 },
		
	// Определяет произошло ли событие e вне блока block
	isEventOut: function(block, e) {
		if ($(e.target).get(0)==$(block).get(0)) return false;
		return $(e.target).closest('HTML', $(block).get(0)).length!=0;
	}
	
}


// Реализация логики placeholder
placeholderLogic = {
	
	// Инициализация
	init: function(el) {
		
		el = $(el);
		
		// Показать подсказку, если поле пустое
		if (el.val()=='') el.prev().show();
		
		// Имеет ли фокус
		el.data('placeholderLogic-hasFocus', false);
		el.focus(function(){ $(this).data('placeholderLogic-hasFocus', true); });
		el.blur(function(){ $(this).data('placeholderLogic-hasFocus', false); });
		
		// Показать/скрыть подсказку
		el.bind('change blur focus', function() {
			if ($(this).val()=='') {	
				el.data('placeholderLogic-hasFocus') ? $(this).prev().hide() : $(this).prev().show(); 
			} else {
				$(this).prev().hide();
			}
		});
		
	}
	
}
$(function() {
    $('.js-placeholder').each(function(){
		placeholderLogic.init(this);
    });
});


// Визаулизатор AJAX-загрузки
ajaxLoader = {

	add: function (el) {
		el = $(el);
		el.css('position', 'relative');
		if (!$('.b-loader', el).length)
			$('<div class="b-loader"><div class="b-loader-bg"></div><div class="b-loader-w"><div class="b-loader-bar" style="background-image: url(_public/images/loader2.gif?'+(new Date().getTime())+');"></div></div></div>').prependTo($(el));
		return $('.b-loader', el);
	},

	setWidth: function (loader, w) {
		loader.width(w+'px');
	},

	setHeight: function (loader, h) {
		$('.b-loader-bg', loader).height(h+'px');
		$('.b-loader-bar', loader).css('margin-top', (h-31)/2+'px');
	}

}



//Загрузка файла
uploadFile = {
	
	config: '',
	
	allowExt: '',
	
	callback_success: '',
	
	data: {},
	
	
	// Инициализация
	init: function(config) {
		
		$('.b-popupUploadFile').remove();

		$html = '<div class="b-popupUploadFile">';
		$html+=		'<div class="b-popupUploadFile-intro"></div>';
		$html+=		'<div class="b-popupUploadFile-error"></div>';
		$html+=		'<form action="#" method="post" enctype="multipart/form-data">';
		$html+=			'<div class="b-popupUploadFile-form">';
		$html+=				'<input type="file" size="45" id="popupUploadFile-input" name="file">';
		$html+=			'</div>';
		$html+=		'</form>';
		$html+= '</div>';
		$('BODY').append($html);
		$('#popupUploadFile-input').change(uploadFile.doUpload);
		
		if ( (config['title']==undefined) || (config['title']=='') ) config['title'] = 'Загрузка файла';
		if (config['intro']==undefined) config['intro'] = '';
		if (config['allowExt']==undefined) config['allowExt'] = '';
		if (config['callback_success']==undefined) config['callback_success'] = function(a,b,c){};
		
		$('.b-popupUploadFile').attr('title', config['title']);
		
		if (config['intro']=='') {
			$('.b-popupUploadFile-intro').hide();
		} else {
			$('.b-popupUploadFile-intro').show().html( config['intro'] );
		}	

		uploadFile.allowExt = config['allowExt'];
		uploadFile.callback_success = config['callback_success'];
		
		uploadFile.config = config;
		
		$('.b-popupUploadFile-error').hide();
		
	},
	
	
	// Get file name from path
	getFileName: function(path){
		return path.replace(/.*(\/|\\)/, "");
	},
	
	
	// Get file extension from file name
	getFileExt: function(file){
		return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
	},
	
	
	// Показать ошибку
	showError: function(text) {
		$('.b-popupUploadFile-error')
			.html(text)
			.show();
	},
	
	
	// Загрузить файл
	doUpload: function(){
		
		// Скрыть ошибки
		$('.b-popupUploadFile-error').hide();
		
		// file path
		var filePath = $('#popupUploadFile-input').val();
		
		// Проверим на допустимость расширения файла
		if (uploadFile.allowExt!='') {
			var ext = uploadFile.getFileExt( uploadFile.getFileName(filePath) );
			var re = new RegExp('^('+uploadFile.allowExt+')$', 'i');
			if ( !(ext && re.test(ext)) ) {
				uploadFile.showError('Недопустимый тип файла');
				return;
			}
		}
		
		// Добавить визаулизатор загрузки
		var loader = ajaxLoader.add($('.b-popupUploadFile'));
		ajaxLoader.setHeight(loader, $('.b-popupUploadFile').outerHeight());
		loader.show();
		
		// Загрузка файла
		$.ajaxFileUpload({
			url: uploadFile.config['urlUploadFile'],
			secureuri: false,
			fileElementId: 'popupUploadFile-input',
			dataType: 'json',
			success: function(data, status)	{
				
				loader.hide();
				$('#popupUploadFile-input').change(uploadFile.doUpload);
				
				if(typeof(data.error) == 'undefined') {
					uploadFile.showError('Неизвестная ошибка');
					return;
				}
				
				if (data.error != '') {
					uploadFile.showError(data.error);
					return;
				}
				
				$('.b-popupUploadFile').dialog('close');
				
				uploadFile.data = data;
				
				setTimeout(function(){ uploadFile.callback_success(uploadFile.data['dir'], uploadFile.data['file'], uploadFile.data['fileData']); }, 100);
				
			},
			error: function (data, status, e) {
				loader.hide();
				$('#popupUploadFile-input').change(uploadFile.doUpload);
				uploadFile.showError('Неизвестная ошибка');
			}
		});
		
	},
	
	
	// Запустить
	go: function(config) {
		uploadFile.init(config);
		$('.b-popupUploadFile').dialog({
			draggable: false,
			modal: true,
			resizable: false,
			width: 450
		});
	}
	
	
}


//Загрузка фотографии с кропом
uploadPhotoCrop = {
	
	config: '',
	
	normalWidth: 0,
	normalHeight: 0,
	
	dir: '',
	file: '',
	fileData: '',
	
	
	// Инициализация
	init: function(config) {
		
		$('.b-popupPhotoCrop').remove();
		
		$html = '<div class="b-popupPhotoCrop" title="Кадрировать фотографию">';
		$html+=		'<div class="b-popupPhotoCrop-intro">Можно перетащить рамку для выбора области кадрирования и воспользоваться ползунком для изменения размера.</div>';
		$html+=		'<div class="b-popupPhotoCrop-back2load"><a href="#">Загрузить другое фото</a></div>';
		$html+=		'<div class="b-popupPhotoCrop-error"></div>';
		$html+=		'<div class="b-popupPhotoCrop-crop"><div class="b-popupPhotoCrop-big"><img></div><div class="b-popupPhotoCrop-normal"><img></div></div>';
		$html+=		'<form action="#" onSubmit="return false;" method="post"><div class="b-popupPhotoCrop-form">';
		$html+=			'<input type="hidden" name="x"><input type="hidden" name="y"><input type="hidden" name="w"><input type="hidden" name="h"><input type="hidden" name="nw"><input type="hidden" name="nh">';
		$html+=		'</div></form>';
		$html+= '</div>';
		$('BODY').append($html);
		$('.b-popupPhotoCrop-back2load A').click(uploadPhotoCrop.back2load);
		
		if (config['width']<0) config['width'] = 0;
		if (config['height']<0) config['height'] = 0;
		if (config['urlUploadFile']==undefined) config['urlUploadFile'] = 'ajax/ajax_upload_img/'+config['width']+'/'+config['height']+'/';
		if (config['urlPrepareImg']==undefined) config['urlPrepareImg'] = 'ajax/ajax_prepare_img/'+config['width']+'/'+config['height']+'/';
		if (config['urlDelFile']==undefined) config['urlDelFile'] = 'ajax/ajax_delete_tmp_file/';
		
		$('.b-popupPhotoCrop-error').hide();
		
		uploadPhotoCrop.config = config;
		
		uploadPhotoCrop.normalWidth = $('.b-popupPhotoCrop-normal').width();
		uploadPhotoCrop.normalHeight = $('.b-popupPhotoCrop-normal').height();
		
	},

	
	// Вернуться к загрузке фотографии
	back2load: function() {
		$('.b-popupPhotoCrop').dialog('close');
		setTimeout(function(){ uploadPhotoCrop.loadFile(); }, 100);
		return false;
	},
	
	
	// Удалить загруженный файл
	delFile: function() {
		if (uploadPhotoCrop.file!='')
			$.ajax({
					type: 'POST',
					cache: false,
					dataType: 'html',
					data: 'file='+uploadPhotoCrop.file,
					url: uploadPhotoCrop.config['urlDelFile']
				});
	},
	
	
	// load file
	loadFile: function() {
		uploadFile.go({
			title: 'Загрузка фотографии',
			intro: 'Сюда можно загрузить файл формата JPG, GIF или PNG',
			allowExt: 'jpg|png|jpeg|gif',
			urlUploadFile: uploadPhotoCrop.config['urlUploadFile'],
			callback_success: function(dir, file, fileData) {
				uploadPhotoCrop.dir = dir;
				uploadPhotoCrop.file = file;
				uploadPhotoCrop.fileData = fileData;
				uploadPhotoCrop.show();
			}
		});
	},
	
	
	// Показать окно для кропа
	show: function() {
		
		uploadPhotoCrop.init(uploadPhotoCrop.config);
		
		$('.b-popupPhotoCrop-crop IMG').attr('src', uploadPhotoCrop.dir+uploadPhotoCrop.file);
		$('.b-popupPhotoCrop-big IMG').Jcrop({
			aspectRatio: (uploadPhotoCrop.config['width']>0) && (uploadPhotoCrop.config['height']>0) ? uploadPhotoCrop.config['width']/uploadPhotoCrop.config['height'] : 0,
			minSize: [uploadPhotoCrop.config['width'], uploadPhotoCrop.config['height']],
			setSelect: [0, 0, uploadPhotoCrop.config['width']>0 ? uploadPhotoCrop.config['width'] : uploadPhotoCrop.fileData['image_width'], uploadPhotoCrop.config['height']>0 ? uploadPhotoCrop.config['height'] : uploadPhotoCrop.fileData['image_height'] ],
			boxWidth: $('.b-popupPhotoCrop-big').width(),
			boxHeight: $('.b-popupPhotoCrop-big').height(),
			allowSelect: false,
			bgColor: 'transparent',
			onChange: uploadPhotoCrop.updateCoords,
			onSelect: uploadPhotoCrop.updateCoords
		});
		
		$('.b-popupPhotoCrop').dialog({
			draggable: false,
			modal: true,
			resizable: false,
			width: 750,
			open: function(event, ui){
				
				// Если изображение чётко по размерам - не надо кропа
				if 	(	
						( uploadPhotoCrop.fileData['image_width'] == uploadPhotoCrop.config['width'] ) &&
						( uploadPhotoCrop.fileData['image_height'] == uploadPhotoCrop.config['height'] )
					) {
					uploadPhotoCrop.ajaxPrepareImg('file='+uploadPhotoCrop.file);
				}
				
			},
			close: function(event, ui){
				uploadPhotoCrop.delFile();
			},
			buttons: {
				"Применить изменения": function() {
					uploadPhotoCrop.doCrop();
				}, 
				"Отмена": function() { 
					$(this).dialog("close"); 
				} 
			}
		});
		
	},
	
	
	// Обновить координаты
	updateCoords: function(coords) {
		
		var w = uploadPhotoCrop.normalWidth;
		var h = uploadPhotoCrop.normalHeight;
		var x = 1;
		var y = 1;
		var nw = uploadPhotoCrop.config['width']>0 ? uploadPhotoCrop.config['width'] : coords.w;
		var nh = uploadPhotoCrop.config['height']>0 ? uploadPhotoCrop.config['height'] : coords.h;
		
		// Если задана только ширина
		if ( (uploadPhotoCrop.config['width']>0) && (uploadPhotoCrop.config['height']==0) ) {
			nh = (nw / coords.w) * nh;
		}
		
		// Если задана только высота
		if ( (uploadPhotoCrop.config['height']>0) && (uploadPhotoCrop.config['width']==0) ) {
			nw = (nh / coords.h) * nw;
		}
		
		// Учитываем максимальные размеры изображения
		if (uploadPhotoCrop.config['maxwidth']>0)
			if (nw > uploadPhotoCrop.config['maxwidth'] ) {
				nh = nh * (uploadPhotoCrop.config['maxwidth'] / nw);
				nw = uploadPhotoCrop.config['maxwidth'];
			}
		if (uploadPhotoCrop.config['maxheight']>0)
			if (nh > uploadPhotoCrop.config['maxheight'] ) {
				nw = nw * (uploadPhotoCrop.config['maxheight'] / nh);
				nh = uploadPhotoCrop.config['maxheight'];
			}
		
		if (nw>w)
			x = w / nw;
		if (nh>h)
			y = h / nh;
		sizeFactor = x>y ? y : x;	
		
		$('.b-popupPhotoCrop-normal').css('width', nw * sizeFactor + 'px');
		$('.b-popupPhotoCrop-normal').css('height', nh * sizeFactor + 'px');
		
		$('.b-popupPhotoCrop-form INPUT[name=x]').val(coords.x);
		$('.b-popupPhotoCrop-form INPUT[name=y]').val(coords.y);
		$('.b-popupPhotoCrop-form INPUT[name=w]').val(coords.w);
		$('.b-popupPhotoCrop-form INPUT[name=h]').val(coords.h);
		$('.b-popupPhotoCrop-form INPUT[name=nw]').val(nw);
		$('.b-popupPhotoCrop-form INPUT[name=nh]').val(nh);
		
		var rx = nw / coords.w;
		var ry = nh / coords.h;
		
		$('.b-popupPhotoCrop-normal IMG').css({
			width: Math.round(rx * sizeFactor * $('.b-popupPhotoCrop-big IMG').width()) + 'px',
			height: Math.round(ry * sizeFactor * $('.b-popupPhotoCrop-big IMG').height()) + 'px',
			marginLeft: '-' + Math.round(rx * sizeFactor * coords.x) + 'px',
			marginTop: '-' + Math.round(ry * sizeFactor * coords.y) + 'px'
		});
		
	},
	
	
	// Показать ошибку
	showError: function(text) {
		$('.b-popupPhotoCrop-error').html(text).show();
	},
	
	
	// Сделать кроп
	doCrop: function() {
		
		var file = uploadPhotoCrop.file;
		var x = $('.b-popupPhotoCrop-form INPUT[name=x]').val();
		var y = $('.b-popupPhotoCrop-form INPUT[name=y]').val();
		var w = $('.b-popupPhotoCrop-form INPUT[name=w]').val();
		var h = $('.b-popupPhotoCrop-form INPUT[name=h]').val();
		var nw = $('.b-popupPhotoCrop-form INPUT[name=nw]').val();
		var nh = $('.b-popupPhotoCrop-form INPUT[name=nh]').val();
		
		uploadPhotoCrop.ajaxPrepareImg('file='+file+'&x='+x+'&y='+y+'&w='+w+'&h='+h+'&nw='+nw+'&nh='+nh);
		
		return false;
	},
	
	
	// Подготовка изображения
	ajaxPrepareImg: function(data) {
		
		// Добавить визаулизатор загрузки
		var loader = ajaxLoader.add($('.b-popupPhotoCrop'));
		ajaxLoader.setHeight(loader, $('.b-popupPhotoCrop').outerHeight());
		
		// Поехали!
		$.ajax({
			type: 'POST',
			cache: false,
			dataType: 'json',
			data: data,
			url: uploadPhotoCrop.config['urlPrepareImg'],
			beforeSend: function() {
				loader.show();
			},
			success: function (data) {
				loader.hide();
				if (data['error']=='') {
					if (uploadPhotoCrop.config['exInfo']!==undefined) data['data']['exInfo'] = uploadPhotoCrop.config['exInfo'];
					uploadPhotoCrop.config['callback'](data['data']);
					$('.b-popupPhotoCrop').dialog('close');
				} else {
					uploadPhotoCrop.showError(data['error']);
				}
			},
			error: function() {
				loader.hide();
				uploadPhotoCrop.showError('Неизвестная ошибка');
			}
		});
		
	},
	
	
	// Сделать это!
	go: function(config) {
		uploadPhotoCrop.init(config);
		uploadPhotoCrop.loadFile();
	}
	
	
}


//Элементы форм - Изображение
$(function(){
	
	
	// Удалить
	$('.js-formItem-image-delete').click(function(){
		var block = $(this).closest('.js-formItem-image');
		$('.js-formItem-image-input', block).val('');
		$('.js-formItem-image-imgBlock', block).hide();
	});
	
	
	// Выбрать основное изображение
	$('.js-formItem-image-selectFile').click(function(){
		uploadPhotoCrop.go({
			width: $(this).data('width'),
			height: $(this).data('height'),
			maxwidth: $(this).data('maxwidth'),
			maxheight: $(this).data('maxheight'),
			exInfo: $(this).data('id'),
			callback: function(data) {
				$('.js-formItem-image-'+data['exInfo']+' .js-formItem-image-input').val( data['file'] )
				$('.js-formItem-image-'+data['exInfo']+' .js-formItem-image-img').attr('src', data['src']);
				$('.js-formItem-image-'+data['exInfo']+' .js-formItem-image-imgBlock').show();
			}
		});
	});
	
	
	// Инициализация
	var $i=0;
	$('.js-formItem-image').each(function(){
		$i++;
		$(this).addClass('js-formItem-image-'+$i);
		$('.js-formItem-image-selectFile', this).data('id', $i);
	});
	
	
});



// Tooltip
tooltip = {
	
	// Блок подсказки
	block: null,
	
	// Показать подсказку
	show: function(){
		
		// Задать текст
		$('.body', tooltip.block).html( $(this).data('tooltip') );
		
		// Показать
		tooltip.block.show();
		
		// Задать расположение
		tooltip.block
			.css('left', $(this).offset().left - tooltip.block.outerWidth() + 13 + ( $(this).outerWidth() / 2 ) + 'px')
			.css('top', $(this).offset().top - tooltip.block.outerHeight() - 4 + 'px')
		
	},
	
	// Скрыть подсказку
	hide: function(){
		tooltip.block.hide();
	},
	
	// Инициализация
	init: function(){
		
		if (tooltip.block==null) {
			tooltip.block = $('<div class="b-tooltip"><div class="body"></div><div class="pic"></div></div>');
			$('BODY').append(tooltip.block);
		}
		
		$('[data-tooltip]').hover(tooltip.show, tooltip.hide);		
		
	}
	
}
$(function(){
	tooltip.init();
});


// Эффект нажимаемости
$(function(){
	
	$('.b-button').live('mousedown', function(){
		$(this).addClass('b-button-pressed');
	});
	
	$('.b-button').live('mouseup mouseleave', function(){
		$(this).removeClass('b-button-pressed');
	});
	
});


// Вопросы и ответы (низ страницы)
$(function(){
if (!$('.b-bottomQA').length) return;
	
	// Карусель
	var options = new Array();
	options['vertical'] = true;
	options['scroll'] = 1;
	options['initCallback'] = function(carousel, state) {
		carousel.buttonNext.addClass('b-button');
		carousel.buttonPrev.addClass('b-button');
	};
	if ($('.b-bottomQA .body LI').length>1) options['wrap'] = 'circular';
	$('.b-bottomQA .body UL').jcarousel(options);
	
});


// фотослайдер
$(function(){
if (!$('.b-photoSlider').length) return;
	
	// Карусель
	var options = new Array();
	options['scroll'] = 4;
	if ($('.b-photoSlider LI').length>4) options['wrap'] = 'circular';
	$('.b-photoSlider UL').jcarousel(options);
	
	// Fancybox
	$('.b-photoSlider A').fancybox();
	
});


// Наши специалисты (низ страницы)
$(function(){
if (!$('.b-bottomSpecs').length) return;
	
	// Карусель
	var options = new Array();
	options['vertical'] = true;
	options['scroll'] = 3;
	options['initCallback'] = function(carousel, state) {
		carousel.buttonNext.addClass('b-button');
		carousel.buttonPrev.addClass('b-button');
	};
	if ($('.b-bottomSpecs .body LI').length>3) options['wrap'] = 'circular';
	$('.b-bottomSpecs .body UL').jcarousel(options);
	
});


// Стилизация элемента CHECKBOX
checkboxStyled = {
	
	
	// Установить статус
	setStatus: function(el) {
		if (el.prop('checked'))
			el.prev().addClass('b-checkboxStyled-checked');
		else
			el.prev().removeClass('b-checkboxStyled-checked');
	},
	
	
	// Клик по блоку
	clickHandler: function() {
		$(this).prop('checked', !$(this).prop('checked'));
		$(this).change();
	},

	
	// Инициализация
	init: function(els) {
		els.each(function() {
			if ($(this).data('styledData')===undefined) {
				
				$(this).before('<span class="b-checkboxStyled"><span></span></span>');
				$(this).css({
					'position'		: 'absolute',
					'left' 			: '-10000px'
				});
				
				// Клик на блоке
				$(this).prev().click($.proxy(checkboxStyled.clickHandler, this));
				$(this).change(function() {
					checkboxStyled.setStatus($(this));
				});
				checkboxStyled.setStatus($(this));
				
				// Данные
				$(this).data('styledData', true);
				
			}
		});
	}
	
	
}
$(function(){
	checkboxStyled.init($('.b-checkbox'));
});


// Стилизация элемента RADIO
radioStyled = {
	
	
	el: null, // Элемент
	block: null, // Стилизованный блок
	
	
	// Обновить
	update: function() {
		this.setStatus();
		$('INPUT[name="' + this.el.attr('name') + '"]').each(function(){
			$(this).data('fx').setStatus();
		});
	},
	
	
	// Установить статус
	setStatus: function() {
		this.el.prop('checked') ? this.block.addClass('b-radioStyled-checked') : this.block.removeClass('b-radioStyled-checked');
	},
	
	
	// Инициализация
	init: function(el) {
		
		el = $(el);
		this.el = el;
		
		el.before('<span class="b-radioStyled"></span>');
		el.css({
			'position'		: 'absolute',
			'left' 			: '-10000px',
			'top'			: '0'
		});
		
		// Стилизованный блок
		var block = el.prev();
		block.data('fx', this);
		this.block = block;
		
		block.click(function(){ if (!el.prop('checked')) el.prop('checked', true); $(this).data('fx').update(); });
		el.change(function(){ $(this).data('fx').update(); });
		this.setStatus();
		
	}
	
	
}
$(function(){
	$('.b-radio').each(function(){
		$(this).data('fx', $.extend({}, radioStyled) );
		$(this).data('fx').init(this);
	});
});


// Стилизация элемента SELECT
selectStyled = {

	// Кол-во показываемых элементов
	items4view: 30,

	// Уникальный номер
	id: 0,
	idPrefix: 'selectStyled',

 // Скрыть список
 hideList: function(el) {

  var data = el.data('styledData');
  var block = el.prev();
  var list = $('.b-selectStyled-list', block);

  list.stop(true, true).slideUp(300, function() {
   $(this).hide();
   block.css('z-index', 8);
  });
  $(document).unbind('click.selectStyled' + data.id);
 },


 // Выбрать "любой"
 setOnlyDefault: function(el) {

  var data = el.data('styledData');
  var block = el.prev();
  var items_block = $('.b-selectStyled-list-items', block);

  // Тольк для мультивыбора
  if (!data.multiple) return;

  // Выбрать "любой"
  $('OPTION', el).prop('selected', false);
  $('OPTION[data-default]', el).prop('selected', true);

  // Значение "любой"
  var any_value = $('OPTION[data-default]', el).val();

  // Проставить галочки
  $('INPUT:checkbox', items_block).each(function() {
   checkboxStyled.setStatus($(this).prop('checked', $(this).closest('.b-selectStyled-item').data('value')==any_value));
  });

 },


 // Убрать "любой"
 unsetDefault: function(el) {

  var data = el.data('styledData');
  var block = el.prev();

  // Тольк для мультивыбора
  if (!data.multiple) return;

  // Убрать "любой"
  $('OPTION[data-default]', el).prop('selected', false);

  // Значение "любой"
  var any_value = $('OPTION[data-default]', el).val();

  // Убрать галочки
  checkboxStyled.setStatus($('.b-selectStyled-item[data-value="' + any_value + '"] INPUT:checkbox', block).prop('checked', false));

 },


 // Обновить текущее значение (вывод)
 refreshCurValue: function(el) {

  // Стилизованный блок
  var block = el.prev();

  // Текстовое значение
  var val = '';
  $('OPTION:selected', el).each(function() {
   if (val!='') val += ', ';
   val += $(this).html();
  });
  $('.b-selectStyled-body-wrap', block).html(val);

  // Стилизовать дефолтное значение
  $('OPTION:selected', el).data('default') ? block.addClass('b-selectStyled-default') : block.removeClass('b-selectStyled-default');

 },


 // Клик на кнопке
 btnClick: function() {

  var el = $(this);
  var data = el.data('styledData');
  var block = el.prev();
  var list = $('.b-selectStyled-list', block);
  var items_block = $('.b-selectStyled-list-items', block);
  var btn = $('.b-selectStyled-showButton', block);
  var body = $('.b-selectStyled-body', block);

  // Показать/скрыть выбор
  if ((list.css('display')!='none') || (data.is_loading)) {

   selectStyled.hideList(el);

  } else {

	// Событие
	el.trigger('selectStyledShowList');
  
		// Скрыть часть элементов
		$('.b-selectStyled-item:gt('+selectStyled.items4view+')', items_block).addClass('g-hidden');
  
   block.css('z-index', 9);
   list.slideDown(300, function() {
    if (!items_block.data('jsp')) {
		if ($('.b-selectStyled-item', items_block).length>1)
		  items_block.jScrollPane({
		   showArrows: true,
		   verticalGutter: 0,
		   verticalDragMinHeight: 10,
		   verticalDragMaxHeight: 10,
		   contentWidth: items_block.outerWidth()
		  });
	} else {
		items_block.data('jsp').reinitialise();
	}
   });

   // При клике вне блока - скрывать
   $(document).bind('click.selectStyled' + data.id, function(e) {
    if (utils.isEventOut(list, e) && utils.isEventOut(btn, e) && utils.isEventOut(body, e))
     selectStyled.hideList(el);
   });

  }

 },


 // Клик на теле
 bodyClick: function() {

  var el = $(this);
  var data = el.data('styledData');
  var block = el.prev();

  if (!data.autocomplete) {

   // Инициировать клик на кнопке
   $.proxy(selectStyled.btnClick, el)();

  } else {

   var body = $('.b-selectStyled-body', block);
   var autocomplete_block = $('.b-selectStyled-body-autocomplete', block);

   // Скрыть список
   selectStyled.hideList(el);

   // Показать поле для автокомплита и дать ему фокус
   autocomplete_block.show(10, function() {
    $('INPUT', autocomplete_block).val('').focus();
   });

   // При клике вне блока - скрывать
   $(document).bind('click.selectStyled' + data.id, function(e) {
    if (utils.isEventOut(autocomplete_block, e) && utils.isEventOut(body, e))
     autocomplete_block.hide();
   });

  }

 },


 // Выбор элемента
 selectItem: function() {

  var el = $(this).closest('.b-selectStyled').next();
  var data = el.data('styledData');
  var block = el.prev();

  // Старое значение
  var old_value = el.val();

  // Поменять текущий элемент для обычного селекта
  if (!data.multiple) {
   $('OPTION', el).prop('selected', false);
   $('OPTION[value="' + $(this).data('value') + '"]', el).prop('selected', true);
  }

  // Выбор элемента для мультиселекта
  if (data.multiple) {

   // Выбираем элемент
   var item = $('OPTION[value="' + $(this).data('value') + '"]', el);
   item.prop('selected', !item.prop('selected'));
   checkboxStyled.setStatus($('INPUT:checkbox', this).prop('checked', item.prop('selected')));

   // Логика выбора "любой"
   if (item.prop('selected') && item.data('default')) {
    selectStyled.setOnlyDefault(el);
   } else {
    if (el.val()) {
     selectStyled.unsetDefault(el);
    } else {
     selectStyled.setOnlyDefault(el);
    }
   }

  }

  // Обновить текущее значение
  selectStyled.refreshCurValue(el);

  // Скрыть список, если не мультивыбор
  if (!data.multiple) selectStyled.hideList(el);

  // Если было изменено значение - вызвать событие change
  if (old_value!=el.val()) el.change();

 },


 // Показать индикатор загрузки
 showLoading: function(el) {
  var data = el.data('styledData');
  var block = el.prev();

  block.addClass('b-selectStyled-loading');

  data.is_loading = true;
  el.data('styledData', data);
 },


 // Скрыть индикатор загрузки
 hideLoading: function(el) {
  var data = el.data('styledData');
  var block = el.prev();

  block.removeClass('b-selectStyled-loading');

  data.is_loading = false;
  el.data('styledData', data);
 },


 // Инициализация автокомплита
 initAutocomplete: function() {

  var el = $(this);
  var data = el.data('styledData');
  var block = el.prev();
  var autocomplete_block = $('.b-selectStyled-body-autocomplete', block);
  var autocomplete_input = $('INPUT', autocomplete_block);

  var items = [];
  $('OPTION', el).each(function() {
   items.push({
    label: $(this).html(),
    val: $(this).val()
   });
  });

  autocomplete_input.autocomplete({
   source: items,
   delay: 0,
   focus: function(event, ui) {
    autocomplete_input.val(ui.item.label);
   },
   select: function(event, ui) {
    var option = $('OPTION[value="' + ui.item.val + '"]', el);
    if (!option.prop('selected'))
     $('.b-selectStyled-item[data-value="' + option.val() + '"]', block).click();
    autocomplete_block.hide();
   }
  });

  // При нажатии ESC скрывать автокомплит
  autocomplete_input.keypress(function(e) {
	  if (e.keyCode=='13') return false;
   if (e.keyCode=='27') autocomplete_block.hide();
  });

 },


 // Инициализация
 init: function(els) {
  els.each(function() {
   var el = $(this);

   // Если это реинициализация - удалить старые значения
   if (el.data('styledData')!=undefined) {
    el.data('styledData',undefined);
    el.prev().remove();
   }

   // ID
   var id = $(this).attr('id');
   if (id==undefined) {
    selectStyled.id++;
    id = selectStyled.idPrefix + selectStyled.id;
    $(this).attr('id', id);
   }

   // Данные
   var data = {
    multiple: el.prop('multiple'),
    autocomplete: el.data('autocomplete')==true,
    size: el.data('size'),
    is_loading: false,
    id: id
   };

   // Задаем каркас блока
   var html = '';
   html += '<div class="b-selectStyled">';
   html += '<div class="b-selectStyled-body ' + (data.autocomplete ? 'm-cursorText' : 'm-cursorPointer') + '">';
   html += '<div class="b-selectStyled-body-block">';
   html += '<div class="b-selectStyled-body-wrap"></div>';
   html += '<div class="b-selectStyled-body-hide"></div>';
   html += '</div>';
   html += '<div class="b-selectStyled-body-autocomplete"><div class="b-selectStyled-body-autocomplete-wrap"><input type="text" value=""></div></div>';
   html += '</div>';
   html += '<div class="b-selectStyled-showButton m-button"></div>';
   html += '<div class="b-selectStyled-list"><div class="b-selectStyled-list-wrap"><div class="b-selectStyled-list-items"></div></div></div>';
   html += '</div>' + "\n";

   // Добавляем каркас в структуру и скрываем селект
   el.before(html).hide();

   // Внешний вид блока
   var block = el.prev();
   var autocomplete_block = $('.b-selectStyled-body-autocomplete', block);
   var w = el.outerWidth();
   block.css('width', w + 'px');
   $('.b-selectStyled-body', block).css('width', w - 19 + 'px');
   $('.b-selectStyled-list', block).css('width', w - 19 + 'px');
   autocomplete_block.css('width', w - 19 + 'px');

   // Заполняем элементы
   var items_block = $('.b-selectStyled-list-items', block);
   var items = '';
   $('OPTION', el).each(function() {
    items += '<div class="b-selectStyled-item" data-value="' + $(this).val() + '"><div class="b-selectStyled-item-wrap">';
    if (data.multiple)
     items += '<div class="b-selectStyled-item-checkbox"><input type="checkbox" class="b-checkbox" ' + ($(this).prop('selected') ? 'checked' : '') + ' /></div>';
    items += $(this).html()=='' ? '&nbsp' : $(this).html();
    items += '</div><div class="b-selectStyled-item-hide"></div></div>';
    items += "\n";
   });
   items_block.append(items);

   // Подгрузка элементов
   items_block.bind('jsp-scroll-y',	function(event, scrollPositionY, isAtTop, isAtBottom) {
		if (isAtBottom) {
			$('.b-selectStyled-item.g-hidden:lt('+selectStyled.items4view+')', this).removeClass('g-hidden');
			$(this).data('jsp').reinitialise();
		}
	});
   
   // Инициализация чекбоксов
   checkboxStyled.init($('.b-checkbox', items_block));

   // Инициализация автокомплита
   if (data.autocomplete) $.proxy(selectStyled.initAutocomplete, el)();

   // Задаём стилизацию выпадающего списка
   if (data.size>0) items_block.css('max-height', data.size*18 + 'px');

   // Клик на кнопке
   $('.b-selectStyled-showButton', block).click($.proxy(selectStyled.btnClick, el));

   // При клике на тело
   $('.b-selectStyled-body-block', block).click($.proxy(selectStyled.bodyClick, el));

   // Выбор элемента
   $('.b-selectStyled-item', block).click(selectStyled.selectItem);

   // Запомним данные
   el.data('styledData', data);

   // Первоначальные установки
   selectStyled.refreshCurValue(el);

  });
 }


}
$(function() {
	selectStyled.init($('.b-select'));
});


// Стилизация элемента INPUT[type="text"]
inputStyledInit = {
	counter: 0,
	go: function(el){
		el = $(el);
		this.counter++;
		el.data('fx', $.extend({}, inputStyled) );
		el.data('fx').id = this.counter;
		el.data('fx').init(el);
	}
}
inputStyled = {

	id: null, // Уникальный номер
	el: null, // Элемент
	block: null, // Стилизованный блок
	
	
	// Инициализация
	init: function(el) {
		
		el = $(el);
		this.el = el;
		
		// id
		if (el.attr('id')) {
			this.id = el.attr('id');
		} else {
			this.id = 'inputStyled' + this.id;
			el.attr('id', this.id);
		}
		
		// Задаём каркас блока
		el.wrap('<div class="b-inputStyled"><div class="b-inputStyled-wrap"></div></div>');
		
		// Стилизованный блок
		var block = el.closest('.b-inputStyled');
		block.data('fx', this);
		this.block = block;
		
		// Задаём ширину
		w = el.width();
		el.css('width', w - 10 + 'px');
		block.css('width', w + 'px');
		
		// Добавить label для placeholder'а
		placeholder = $(el).data('placeholder');
		if ( (placeholder!='') && (placeholder!=undefined) ) {
			el.before('<label for="' + this.id + '">' + placeholder + '</label>');
			placeholderLogic.init(el);
		}
		
	}

	
}
$(function(){
	$('.b-input').each(function(){
		inputStyledInit.go(this);
	});
});


// Стилизация элемента TEXTAREA
textareaStyledInit = {
	counter: 0,
	go: function(el){
		el = $(el);
		this.counter++;
		el.data('fx', $.extend({}, textareaStyled) );
		el.data('fx').id = this.counter;
		el.data('fx').init(el);
	}
}
textareaStyled = {

	id: null, // Уникальный номер
	el: null, // Элемент
	block: null, // Стилизованный блок
	
	
	// Инициализация
	init: function(el) {
		
		el = $(el);
		this.el = el;
		
		// id
		if (el.attr('id')) {
			this.id = el.attr('id');
		} else {
			this.id = 'textareaStyled' + this.id;
			el.attr('id', this.id);
		}
		
		// Задаём каркас блока
		el.wrap('<div class="b-textareaStyled"><div class="b-textareaStyled-wrap"></div></div>');
		
		// Стилизованный блок
		var block = el.closest('.b-textareaStyled');
		block.data('fx', this);
		this.block = block;
		
		// Задаём ширину
		w = el.width();
		el.css('width', w - 10 + 'px');
		block.css('width', w + 'px');
		
		// Задаём высоту
		h = el.height();
		el.css('height', h - 6 + 'px');
		block.css('height', h + 'px');
		
	}

	
}
$(function(){
	$('.b-textarea').each(function(){
		textareaStyledInit.go(this);
	});
});


// Выбор адреса
selectAddress = {
	
	
	id: null, // ID выбора
	
	regionID: null, // ID региона
	regionType: null, // Тип региона
	district: null, // Районы
	suburb: null, // Города (пригороды)
	
	callbackUpdateDistrict: null, // Callback на обновление района
	callbackUpdateSuburb: null, // Callback на обновление пригорода
	callbackUpdateStreet: null, // Callback на обновление улиц
	
	ajaxStreetID: 0, // ID запроса на улицы
	ajaxSuburbID: 0, // ID запроса на пригороды
	
	
	// Сброс местоположения
	locationReset: function(type){
		
		if (type=='district') {
			var select = $('.js-selectAddress-district[data-selectaddressid=' + this.id + ']');
			select.html('<option value="any" selected="selected" data-default="true">Выберите район</option>');
			selectStyled.init(select);
			
			// Обновление района
			obj.updateDistrict();
			
			$('.js-selectAddress-suburb-label[data-selectaddressid=' + this.id + ']').html(this.regionType=='city' ? 'Пригород' : 'Город');
		}
		
		if (type=='suburb') {
			var select = $('.js-selectAddress-suburb[data-selectaddressid=' + this.id + ']');
			select.html('<option value="any" selected="selected" data-default="true">Выберите город / пригород</option>');
			
			// Обновление пригорода
			obj.updateSuburb();
			
			selectStyled.init(select);
		}
		
		if (type=='street') {
			var select = $('.js-selectAddress-street[data-selectaddressid=' + this.id + ']');
			select.html('<option value="any" selected="selected" data-default="true">Выберите улицу</option>');
			
			// Обновление улиц
			obj.updateStreet();
			
			selectStyled.init(select);
		}
		
	},
	
	
	// Выбор региона
	changeRegion: function(){
		
		// ID элемента
		id = $(this).data('selectaddressid');
		
		// Объект
		obj = $('.js-selectAddress-region[data-selectaddressid='+id+']').data('obj');
		
		// ID региона
		obj.regionID = $('OPTION:selected', this).val();
		
		// Тип региона (область или город)
		obj.regionType = $('OPTION:selected', this).attr('data-type');

		// Грузим районы
		$.ajax({
			type: 'POST',
			cache: false,
			dataType: 'json',
			data: 'id='+obj.regionID,
			url: HTTP_HOST+'objects/ajax_searchform_district',
			beforeSend: function() {
				selectStyled.showLoading($('.js-selectAddress-district[data-selectaddressid=' + obj.id + ']'));
			},
			success: function(data) {

                // Обнуляем районы, города и улицы
                obj.locationReset('district');
                obj.locationReset('suburb');
                obj.locationReset('street');

				var select = $('.js-selectAddress-district[data-selectaddressid=' + obj.id + ']');
				for (i=0; i<data['items'].length; i++)
					select.append('<option value="' + data['items'][i]['id'] + '">' + data['items'][i]['value'] + '</option>');
				selectStyled.init(select);
			},
			error: function() {
				selectStyled.hideLoading($('.js-selectAddress-district[data-selectaddressid=' + obj.id + ']'));
			}
		});
		
	},
	
	
	// Выбор района
	changeDistrict: function(){
		
		// ID элемента
		id = $(this).data('selectaddressid');
		
		// Объект
		obj = $('.js-selectAddress-region[data-selectaddressid='+id+']').data('obj');
		
		// Выбранные районы
		obj.district = $(this).val();

		// Обновление района
		obj.updateDistrict();
		
		// Грузим города (пригороды)
		selectAddress.ajaxSuburbID++;
		$.ajax({
			type: 'POST',
			cache: false,
			dataType: 'json',
			data: 'region='+obj.regionID+'&district='+obj.district+'&requestID='+selectAddress.ajaxSuburbID,
			url: HTTP_HOST+'objects/ajax_searchform_suburb',
			beforeSend: function() {
				selectStyled.showLoading($('.js-selectAddress-suburb[data-selectaddressid=' + obj.id + ']'));
			},
			success: function(data) {

				if (data['requestID'] != selectAddress.ajaxSuburbID) return false;
			
                // Обнуляем города
                obj.locationReset('suburb');

				var select = $('.js-selectAddress-suburb[data-selectaddressid='+obj.id+']');
				for (i=0; i<data['items'].length; i++)
					select.append('<option value="' + data['items'][i]['id'] + '">' + data['items'][i]['value'] + '</option>');
				selectStyled.init(select);
			},
			error: function() {
				selectStyled.hideLoading($('.js-selectAddress-suburb[data-selectaddressid=' + obj.id + ']'));
			}
		});
		
		// Если город - грузим улицы
		selectAddress.ajaxStreetID++;
		if (obj.regionType=='city')
			$.ajax({
				type: 'POST',
				cache: false,
				dataType: 'json',
				data: 'region='+obj.regionID+'&district='+obj.district+'&requestID='+selectAddress.ajaxStreetID,
				url: HTTP_HOST+'objects/ajax_searchform_street',
				beforeSend: function() {
					selectStyled.showLoading($('.js-selectAddress-street[data-selectaddressid=' + obj.id + ']'));
				},
				success: function(data) {

					if (data['requestID'] != selectAddress.ajaxStreetID) return false;
				
                    // Обнуляем улицы
                     obj.locationReset('street');

					var select = $('.js-selectAddress-street[data-selectaddressid='+obj.id+']');
					for (i=0; i<data['items'].length; i++)
						select.append('<option value="' + data['items'][i]['id'] + '">' + data['items'][i]['value'] + '</option>');
					selectStyled.init(select);
				},
				error: function() {
					selectStyled.hideLoading($('.js-selectAddress-street[data-selectaddressid=' + obj.id + ']'));
				}
			});
		
	},
	
	
	// Выбор города (пригорода)
	changeSuburb: function(){
		
		// ID элемента
		id = $(this).data('selectaddressid');
		
		// Объект
		obj = $('.js-selectAddress-region[data-selectaddressid='+id+']').data('obj');
		
		// Выбранные города (пригороды)
		obj.suburb = $(this).val();

		// Обновление пригорода
		obj.updateSuburb();
		
		// Грузим улицы
		selectAddress.ajaxStreetID++;
		$.ajax({
			type: 'POST',
			cache: false,
			dataType: 'json',
			data: 'region='+obj.regionID+'&district='+obj.district+'&suburb='+obj.suburb+'&requestID='+selectAddress.ajaxStreetID,
			url: HTTP_HOST+'objects/ajax_searchform_street',
			beforeSend: function() {
				selectStyled.showLoading($('.js-selectAddress-street[data-selectaddressid=' + obj.id + ']'));
			},
			success: function(data) {
				
				if (data['requestID'] != selectAddress.ajaxStreetID) return false;
				
                // Обнуляем улицы
                obj.locationReset('street');

				var select = $('.js-selectAddress-street[data-selectaddressid='+obj.id+']');
				for (i=0; i<data['items'].length; i++)
					select.append('<option value="' + data['items'][i]['id'] + '">' + data['items'][i]['value'] + '</option>');
				selectStyled.init(select);
			},
			error: function() {
				selectStyled.hideLoading($('.js-selectAddress-street[data-selectaddressid=' + obj.id + ']'));
			}
		});
		
	},
	
	
	// Выбор улицы
	changeStreet: function(){
		
		// ID элемента
		id = $(this).data('selectaddressid');
		
		// Объект
		obj = $('.js-selectAddress-region[data-selectaddressid='+id+']').data('obj');
		
		// Обновить улицы
		obj.updateStreet();
		
	},
	
	
	// Обновление района
	updateDistrict: function(){
		if ($.isFunction(this.callbackUpdateDistrict)) this.callbackUpdateDistrict();
	},
	
	
	// Обновление пригорода
	updateSuburb: function(){
		if ($.isFunction(this.callbackUpdateSuburb)) this.callbackUpdateSuburb();
	},
	
	
	// Обновление улиц
	updateStreet: function(){
		if ($.isFunction(this.callbackUpdateStreet)) this.callbackUpdateStreet();
	},
	
	
	// Инициализация
	init: function(config){
		
		// Конфиг
		this.id = config['id'];
		
		this.regionID = $('.js-selectAddress-region[data-selectaddressid='+this.id+'] OPTION:selected').val();
		this.regionType = $('.js-selectAddress-region[data-selectaddressid='+this.id+'] OPTION:selected').attr('data-type');
		this.district = $('.js-selectAddress-district[data-selectaddressid='+this.id+']').val();
		this.suburb = $('.js-selectAddress-suburb[data-selectaddressid='+this.id+']').val();
		
		// Выбор региона
		$('.js-selectAddress-region[data-selectaddressid='+this.id+']').change(this.changeRegion);
		
		// Выбор района
		$('.js-selectAddress-district[data-selectaddressid='+this.id+']')
			.bind('selectStyledShowList', function(){
				if ($('.js-selectAddress-region[data-selectaddressid='+$(this).data('selectaddressid')+']').data('obj').regionID=='any')
					alert('Сначала нужно выбрать регион!');				
			})
			.change(this.changeDistrict);
		
		// Выбор города (пригорода)
		$('.js-selectAddress-suburb[data-selectaddressid='+this.id+']')
			.bind('selectStyledShowList', function(){
				if (
					($('.js-selectAddress-region[data-selectaddressid='+$(this).data('selectaddressid')+']').data('obj').regionID=='any') ||
					($('.js-selectAddress-region[data-selectaddressid='+$(this).data('selectaddressid')+']').data('obj').district=='any')
					)
					alert('Сначала нужно выбрать регион и район!');				
			})
			.change(this.changeSuburb);
		
		// Выбор улицы
		$('.js-selectAddress-street[data-selectaddressid='+this.id+']')
			.bind('selectStyledShowList selectStyledFocusAutocomplete', function(){
				var obj = $('.js-selectAddress-region[data-selectaddressid='+$(this).data('selectaddressid')+']').data('obj');
				if (
					(obj.regionID=='any')
					) {
					alert('Сначала нужно выбрать регион!');				
				} else if ( (obj.regionType=='state') && ( (obj.suburb=='any') || (obj.district=='any') ) ) {
					alert('Сначала нужно выбрать город и район!');				
				} else if ( (obj.regionType=='city') && (obj.district=='any') ) {
					alert('Сначала нужно выбрать район! Если вы не знаете в каком районе нужная Вам улица, поставьте галочку у всех районов.');				
				}
			})
			.change(this.changeStreet);
		
	}
	
	
}
$(function(){
	$('.js-selectAddress-region').each(function(){
		$(this).data('obj', $.extend({}, selectAddress) );
		$(this).data('obj').init({
			'id': $(this).data('selectaddressid')
		});
	});
});


// Авторизация
$(function(){
if (!$('.b-popupAuth').length) return;
	
	
	// Попытка авторизации
	$('.b-popupAuth FORM').submit(function(){
		
		// Добавить визаулизатор загрузки
		var loader = ajaxLoader.add($('.b-popupAuth'));
		ajaxLoader.setHeight(loader, $('.b-popupAuth').outerHeight());
		
		// Поехали!
		$.ajax({
			type: 'POST',
			cache: false,
			dataType: 'json',
			data: $(this).serialize(),
			url: 'profile/auth',
			beforeSend: function() {
				loader.fadeIn(300);
			},
			success: function (data) {
				loader.fadeOut(300);
				if (!data['error']) {
					location.reload(true);
				} else {
					data['errorBase']=='' ? $('.b-popupAuth .base-error').hide() : $('.b-popupAuth .base-error').html( data['errorBase'] ).show();
					data['errorEmail']=='' ? $('.b-popupAuth .email-error').hide() : $('.b-popupAuth .email-error').html( data['errorEmail'] ).show();
					data['errorPassword']=='' ? $('.b-popupAuth .password-error').hide() : $('.b-popupAuth .password-error').html( data['errorPassword'] ).show();
				}
			},
			error: function() {
				loader.fadeOut(300);
				$('.b-popupAuth .base-error').html('Неизвестная ошибка').show()
			}
		});
		
	});
	
	
	// Закрыть окно
	$('.b-popupAuth .close').click(function(){
		$.modal.close();
	});
	
	
	// Показать окно авторизации
	$('.js-showPopupAuth').click(function(){
		$('.b-popupAuth').modal({
			overlayCss: { backgroundColor: '#666' },
			overlayClose: true
		});
	});
	
	
});


// Прокрутка авторов блога
$(function(){
if (!$('.b-sideBlogAuthors').length) return;
	
	var options = new Array();
	options['scroll'] = 1;
	options['initCallback'] = function(carousel, state) {
		carousel.buttonNext.addClass('b-button');
		carousel.buttonPrev.addClass('b-button');
	};
	if ($('.b-sideBlogAuthors .slider LI').length>1) options['wrap'] = 'circular';
	$('.b-sideBlogAuthors .slider UL').jcarousel(options);

});


// Объекты на карте
$(function(){
if (!$('.b-map').length) return;
	
	// Создаём карту
	objectsMap = new YMaps.Map( $('.b-map .map') );
	objectsMap.addControl(new YMaps.SearchControl({noPlacemark: true}));
	objectsMap.addControl(new YMaps.Zoom());
	objectsMap.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [3]));
	//objectsMap.enableScrollZoom(); 
	
	// Добавляем метки
	for (var i=0; i<objectsMapObjects.length; i++) {
		var placemark = new YMaps.Placemark(new YMaps.GeoPoint(objectsMapObjects[i]['x'], objectsMapObjects[i]['y']), {
			draggable: false,
			hasBalloon: true,
			hasCloseButton: true,
			balloonOptions: {
				maxWidth: 240
			}
		});
		placemark.setStyle('default#houseIcon');
		placemark.name = objectsMapObjects[i]['title'];
		placemark.description = objectsMapObjects[i]['desc'];
		objectsMap.addOverlay(placemark);
	}
	
	// Установка центра карты
	objectsMap.setCenter(new YMaps.GeoPoint(39.184495, 51.687695), 12);
	
});


// Контакты
$(function(){
if (!$('.b-contacts').length) return;
	
	// Создаём карту
	contactsMap = new YMaps.Map( $('.b-contacts .map') );
	contactsMap.addControl(new YMaps.Zoom());
	contactsMap.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [3]));
	//contactsMap.enableScrollZoom(); 
	
	// Добавляем метки
	for (var i=0; i<contactsMapObjects.length; i++) {
		var item = $('.b-contacts .list LI[data-id="' + contactsMapObjects[i]['id'] + '"]');
		if (item.length) {
			item.data('placemark', new YMaps.Placemark(new YMaps.GeoPoint(contactsMapObjects[i]['x'], contactsMapObjects[i]['y']), {
				draggable: false,
				hasBalloon: true,
				hasCloseButton: true
			}));
			item.data('placemark').setStyle('default#houseIcon');
			item.data('placemark').name = contactsMapObjects[i]['title'];
			item.data('placemark').description = contactsMapObjects[i]['desc'];
			contactsMap.addOverlay(item.data('placemark'));
		}
	}
	
	// Установка центра карты
	contactsMap.setCenter(new YMaps.GeoPoint(39.184495, 51.687695), 12);
	
	// Выбор офиса
	$('.b-contacts .list .onMap').click(function(){
		$(this).closest('LI').data('placemark').openBalloon();
	});
	
});


// Информация о филиале
$(function(){
if (!$('.b-branchInfo').length) return;
	
	// Блок карты
	block = $('.b-branchInfo .map');
	
	// Создаём карту
	branchMap = new YMaps.Map(block);
	branchMap.addControl(new YMaps.Zoom());
	branchMap.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [3]));
	//branchMap.enableScrollZoom(); 
	
	// Добавляем метки
	for (var i=0; i<branchInfoMapObjects.length; i++) {
		var placemark = new YMaps.Placemark(new YMaps.GeoPoint(branchInfoMapObjects[i]['x'], branchInfoMapObjects[i]['y']), {
			draggable: false,
			hasBalloon: true,
			hasCloseButton: true
		});
		placemark.setStyle('default#houseIcon');
		placemark.name = branchInfoMapObjects[i]['title'];
		placemark.description = branchInfoMapObjects[i]['desc'];
		branchMap.addOverlay(placemark);
	}
	
	// Установка центра карты
	 var x = branchInfoMapObjects.length>0 ? branchInfoMapObjects[0]['x'] : 0;
	 var y = branchInfoMapObjects.length>0 ? branchInfoMapObjects[0]['y'] : 0;
	 branchMap.setCenter(new YMaps.GeoPoint(x, y), block.data('zoom'));
	
});


// Объект - Выбор точки на карте
objectMapSelect = {
	
	
	// Параметры карты
	defaultX: 39.204078,
	defaultY: 51.662507,
	defaultZoom: 11,
	placeZoom: 15,
	
	// Блоки
	wrap: null, // Оболчка
	block: null, // Карта
	inputX: null, // INPUT X
	inputY: null, // INPUT Y
	
	// Карта
	map: null,
	
	// Точка
	placemark: null,
	
	// Инициализация
	init: function(wrap){
		
		// Блоки
		this.wrap = $(wrap);
		this.block = $('.b-objectMapSelect-map', this.wrap);
		this.inputX = $('INPUT[data-type="x"]', this.wrap);
		this.inputY = $('INPUT[data-type="y"]', this.wrap);
		
		// Определяем координаты, что показывать и где точка
		centerX = this.inputX.val();
		centerY = this.inputY.val();
		placemarkX = centerX;
		placemarkY = centerY;
		zoom = this.placeZoom;
		if (centerX==0) {
			centerX = this.defaultX;
			centerY = this.defaultY;
			placemarkX = -170;
			placemarkY = -90;
			zoom = this.defaultZoom;
		}
		
		// Создает экземпляр карты и привязывает его к созданному контейнеру
		this.map = new YMaps.Map(this.block[0]);
		
		// Устанавливает начальные параметры отображения карты: центр карты и коэффициент масштабирования
		this.map.setCenter(new YMaps.GeoPoint(centerX, centerY), zoom);
		
		// Устанавливаем элементы контроля картой
		this.map.addControl(new YMaps.Zoom());
		var mapSearch = new YMaps.SearchControl({noPlacemark: true});
		this.map.addControl(mapSearch);
		this.map.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [3]) );
		
		// Создаём метку
		this.placemark = new YMaps.Placemark(new YMaps.GeoPoint(placemarkX, placemarkY), {
			draggable: true,
			hasBalloon: false,
			style: 'default#lightblueSmallPoint'
		});
		
		// Добавляем метку на карту
		this.map.addOverlay(this.placemark); 
		
		// Клик на карте
		YMaps.Events.observe(this.map, this.map.Events.Click, function(map, mEvent) {
			
			myObj = $(this.getContainer()).parent().data('fx');
			
			// Показываем метку в месте клика
			myObj.placemark.setGeoPoint( mEvent.getGeoPoint() );
			
			// Сохраняем координаты
			myObj.inputX.val(mEvent.getGeoPoint().getX());
			myObj.inputY.val(mEvent.getGeoPoint().getY());
			
		});
		
		// Перетакскивание метки
		YMaps.Events.observe(this.placemark, this.placemark.Events.DragEnd, function (obj) {
			
			myObj = $( this.getMap().getContainer() ).parent().data('fx');
			
			// Сохраняем координаты
			myObj.inputX.val(obj.getGeoPoint().getX());
			myObj.inputY.val(obj.getGeoPoint().getY());
			
		});
		
		// Поиск объекта
		YMaps.Events.observe(mapSearch, mapSearch.Events.Select, function(el, result){
			
			myObj = $( this.getMap().getContainer() ).parent().data('fx');
			
			// Показываем метку в месте клика
			myObj.placemark.setGeoPoint( result.getGeoPoint() );
			
			// Сохраняем координаты
			myObj.inputX.val( result.getGeoPoint().getX() );
			myObj.inputX.val( result.getGeoPoint().getY() );
			
		});
		
		// Не отправлять форму при нажатии на Enter в поиске по Яндекс.Карте
		$('.YMaps-search-control-text', this.block).keypress(function(event) {
			if (event.keyCode=='13') return false;
		});
		
	}
	
	
}
$(function(){
	$('.b-objectMapSelect').each(function(){
		$(this).data('fx', $.extend({}, objectMapSelect) );
		$(this).data('fx').init(this);
	});
});


// Карточка товара
$(function(){
if (!$('.b-cardHeader').length) return;
	
	
	// Избранное
	var a = $('.b-cardHeader .favorite SPAN');
	a.objecAddFavorite({
		id: a.data('id'),
		callbackSuccess: function(el, response){
			if (response.error) {
				alert(response.errorText)
			} else {
				response.status ? el.addClass('active').data('tooltip', 'Убрать из избранного') : el.removeClass('active').data('tooltip', 'Добавить в избранное');
			}
		}
	});
	
	
	// Переключатель КАРТА-КАЛЬКУЛЯТОР
	$('.b-cardCalcMapHeader .toggle SPAN').click(function(){
		
		$('.b-cardCalcMapHeader .tab').hide();
		$('.b-cardCalcMapHeader .tab-' + $(this).attr('class') ).show();
		
		$(this).parent().siblings().removeClass('cur');
		$(this).parent().addClass('cur');
		
		$('.b-cardCalc').hide();
		$('.b-cardMap').hide();
		if ($(this).attr('class')=='map') {
			$('.b-cardCalc').hide();
			$('.b-cardMap').show()
		}
		
		if ($(this).attr('class')=='calc') {
			$('.b-cardCalc').show();
			$('.b-cardMap').hide();
		}
		
	});
	
	
	// Карта
	var mapBlock = $('.b-cardMap .map');
	if (mapBlock.length) {
		
		// Создаём карту
		cardMap = new YMaps.Map(mapBlock);
		cardMap.addControl(new YMaps.Zoom());
		cardMap.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [3]));
		//cardMap.enableScrollZoom();
		
		// Координаты
		var x = mapBlock.data('x');
		var y = mapBlock.data('y');
		
		// Создание стиля для многоугольника
		var style = new YMaps.Style("default#greenPoint");
		style.polygonStyle = new YMaps.PolygonStyle();
		style.polygonStyle.fill = 1;
		style.polygonStyle.outline = 1;
		style.polygonStyle.strokeWidth = 3;
		style.polygonStyle.strokeColor = "ffff0088";
		style.polygonStyle.fillColor = "ff000055";
		YMaps.Styles.add("polygon#objectStyle", style);

		// Создание многоугольника
		var polygon = new YMaps.Polygon([
			new YMaps.GeoPoint(x + 0.003, y),
			new YMaps.GeoPoint(x, y + 0.003),
			new YMaps.GeoPoint(x - 0.003, y),
			new YMaps.GeoPoint(x, y - 0.003)
		], {
			style: "polygon#objectStyle",
			hasHint: 1,
			hasBalloon: 1
		});
		
		// Добавляем многоугольник
		cardMap.addOverlay(polygon);
		
		// Добавляем школы
		mapBlock.data('school', new YMaps.GeoObjectCollection() );
		for (var i=0; i<schoolMapObjects.length; i++) {
			var placemark = new YMaps.Placemark(new YMaps.GeoPoint(schoolMapObjects[i]['x'], schoolMapObjects[i]['y']), {
				draggable: false,
				hasBalloon: true,
				hasCloseButton: true
			});
			placemark.setStyle('default#blueSmallPoint');
			placemark.name = schoolMapObjects[i]['title'];
			placemark.description = schoolMapObjects[i]['desc'];
			mapBlock.data('school').add(placemark);
		}
		
		// Добавляем детские сады
		mapBlock.data('kindergarten', new YMaps.GeoObjectCollection() );
		for (var i=0; i<kindergartenMapObjects.length; i++) {
			var placemark = new YMaps.Placemark(new YMaps.GeoPoint(kindergartenMapObjects[i]['x'], kindergartenMapObjects[i]['y']), {
				draggable: false,
				hasBalloon: true,
				hasCloseButton: true
			});
			placemark.setStyle('default#redSmallPoint');
			placemark.name = kindergartenMapObjects[i]['title'];
			placemark.description = kindergartenMapObjects[i]['desc'];
			mapBlock.data('kindergarten').add(placemark);
		}
		
		// Установка центра карты
		cardMap.setCenter(new YMaps.GeoPoint(x, y), 14);
		
	}
	
	
	// Показать/скрыть школы
	$('.b-cardCalcMapHeader .mapItems .school').click(function(){
		var is_do = $(this).hasClass('active') ? 'hide' : 'show';
		if (mapBlock.length)
			if (is_do=='show') {
				cardMap.addOverlay(mapBlock.data('school'));
			} else {
				cardMap.removeOverlay(mapBlock.data('school'));
			}
		is_do=='show' ? $(this).addClass('active') : $(this).removeClass('active');
	});
	
	
	// Показать/скрыть детские сады
	$('.b-cardCalcMapHeader .mapItems .kindergarten').click(function(){
		var is_do = $(this).hasClass('active') ? 'hide' : 'show';
		if (mapBlock.length)
			if (is_do=='show') {
				cardMap.addOverlay(mapBlock.data('kindergarten'));
			} else {
				cardMap.removeOverlay(mapBlock.data('kindergarten'));
			}
		is_do=='show' ? $(this).addClass('active') : $(this).removeClass('active');
	});
	
	
	// Рассчитать
	$('.b-cardCalc .go SPAN').click(function(){
		
		var type = $('.b-cardCalc .form .type SELECT').val();
		var procent = parseFloat($('.b-cardCalc .form .procent INPUT').val().replace(',', '.')/1200);
		var amount = parseFloat($('.b-cardCalc .form .amount INPUT').val().replace(',', '.'));		
		var period = parseFloat($('.b-cardCalc .form .period INPUT').val().replace(',', '.')*12);		
		
		if (isNaN(amount) || !amount) {
			$('.b-cardCalc .form .amount').val(0);
			amount = 0;
		}
		
		if (isNaN(procent) || !procent) {
			$('.b-cardCalc .form .procent').val(12);
			procent = 12/1200;
		}
		
		if (isNaN(period) || !period) {
			$('.b-cardCalc .form .period').val(1);
			period = 12;
		}
		
		function nrm(val, to) {
			var t = Math.round(val*to);
			var tt = t / to;
			return tt;
		}
		
		var html = '<div class="b-baseTable-wrap"><div class="b-baseTable"><table><thead><tr><td class="cell">М</td><td class="cell">Платеж</td><td class="cell">Вып. %</td><td class="cell">Вып. долга</td><td class="cell">Ост. долга</td><td class="cell">Погаш. долга</td></tr></thead><tbody>';
		
		if (type=='annuity') {
			
			var monthly = ( procent + procent / ( Math.pow(1 + procent, period) - 1 ) )*100;
			var ezm = monthly * amount / 100;
			
			var oz = amount;
			for (var i=1; i<=period; i++) {
				
				html+= '<tr><td class="cell">' + i + '</td>';
				html+= '<td class="cell">' + nrm(ezm, 100);
				
				epv = oz * procent;
				oz-= ezm - epv;
				html+= '<td class="cell">' + nrm(epv, 100) + '</td>';
				html+= '<td class="cell">' + nrm(monthly*amount/100-epv, 100) + '</td>';
				html+= '<td class="cell">' + nrm(oz, 100) + '</td>';
				html+= '<td class="cell">' + nrm(amount-oz, 100) + '</td>';
				
				html+='</tr>';
				
			}
			
		}
		
		if (type=='differentiate') {
			
			var ep = new Array();
			var oz = 0;
			var ssum = 0;
			for (var i=0; i<period; i++) {
				oz = amount - (amount/period)*i;
				ep[i] = amount/period + oz*procent;
				ssum+= ep[i];
			}
			
			var oz = amount;
			for (var i=1; i<=period; i++) {
				
				html+= '<tr><td class="cell">' + i + '</td>';
				
				vyp = oz*procent;
				oz-= amount/period;
				html+= '<td class="cell">' + nrm(vyp + amount/period, 100);
				html+= '<td class="cell">' + nrm(vyp, 100) + '</td>';
				html+= '<td class="cell">' + nrm(amount/period, 100);
				html+= '<td class="cell">' + nrm(oz, 100) + '</td>';
				html+= '<td class="cell">' + nrm(amount-oz, 100) + '</td>';
				
				html+='</tr>';
			}
			
		}
		
		html+= '</tbody></table></div></div>';
		
		$('.b-cardCalc .result .body').html(html);
		$('.b-cardCalc .result').show();
		
		return false;
	});
	
	
});


// Рубрики (Сайдбар)
$(function(){
	
	$('.b-sideRubrics LI A').hover(
		function(){ $(this).parent().addClass('hover') },
		function(){ $(this).parent().removeClass('hover') }
	);
	
});


// Поисковая форма
searchForm = {
	
	tab: null, // Вкладка
	regionID: null, // ID региона
	regionType: null, // Тип региона
	district: null, // Районы
	suburb: null, // Города (пригороды)
	
	
	// Переключение вкладок
	changeTab: function(){
		
		$('.b-searchForm .header .tabs .cur').removeClass('cur');
		$(this).parent().addClass('cur');
		
		$('.b-searchForm .tabBody').hide();
		
		searchForm.setTabSettings();
		
		$('.b-searchForm .tab-'+searchForm.tab).show();
		
	},
	
	
	// Установить настройки для вкладки
	setTabSettings: function() {
		
		this.tab =$('.b-searchForm .header .tabs .cur').data('id');
		
		var tab = $('.b-searchForm .tab-'+this.tab);
		
		this.regionID = $('.select-region OPTION:selected', tab).val();
		this.regionType = $('.select-region OPTION:selected', tab).attr('data-type');
		this.district = $('.select-district', tab).val();
		this.suburb = $('.select-suburb', tab).val();
		
	},

	
	// Выбор типа недвижимости
	changeTypeRealty: function(){
		
		var block = $(this).closest('.tabBody'); // Текущая вкладка
		var option = $('OPTION:selected', this); // Текущий выбор
		var id = $('OPTION:selected', this).val(); // id типа недвижимости
		var kind = $('OPTION:selected', this).data('type'); // Вид недвижимости
		
		// Установка соответствующей площади
		$('.select-area-from', block)
			.html( '<option value="any" data-default="true">от</option>' + $('.area-data .i'+id+'-from', block).html() );
		selectStyled.init($('.select-area-from', block));
		$('.select-area-to', block)
			.html( '<option value="any" data-default="true">до</option>' + $('.area-data .i'+id+'-to', block).html() );
		selectStyled.init($('.select-area-to', block));
		
		// Показывать элементы в зависимости от типа недвижимости
		$('.item-space1', block).show();
		$('.item-countRooms', block).hide();
		$('.item-areaUnit', block).hide();
		$('.item-area .label').html('Площадь / кв. м.');
		if (kind=='flats') {
			$('.item-countRooms', block).show()
			$('.item-space1', block).hide();
		}
		if (kind=='ground') {
			$('.item-areaUnit', block).show()
			$('.item-space1', block).hide();
			$('.item-area .label').html('Площадь');
		}
		
	},
	
	
	// Инициализация
	init: function(){
		
		// Переключение вкладок
		$('.b-searchForm .header .tabs SPAN').click(searchForm.changeTab);
		
		// Выбор типа недвижимости
		$('.b-searchForm .select-typeRealty').change(this.changeTypeRealty);
		
		// Показать текущую вкладку
		$('.b-searchForm .header .tabs .cur SPAN').click();
		
		// Выбрать текущий тип недвижимости
		$('.b-searchForm .select-typeRealty').change();
		
	}
	
	
}
$(function(){
if (!$('.b-searchForm').length) return;
	searchForm.init();
});


// Алерт о необходимости регистрации
$(function(){
	$('.js-alertNeedAuth').click(function(){
		var txt = 'Эта функция доступна только зарегистрированным пользователям.<br/><a href="profile/login/">Войти</a> или пройти <a href="profile/registration/">простую регистрацию</a>';
		if ($(this).data('needauthtext')!=undefined) txt = $(this).data('needauthtext');
		utils.candyAlert.show({ text: txt });
		return false;
	});
});


//Fancybox
$(function(){
 $('.js-fancybox').fancybox();
});


// Добавление нескольких файлов (simple)
$(function () {
    if (!$('.b-formItem-el-simpleMultiAdd').length) return;

    // Добавить
    $('.b-formItem-el-simpleMultiAdd .add SPAN').click(function () {
        var html = '<div class="g-line item"><input type="file" name="' + $(this).closest('.b-formItem-el-simpleMultiAdd').data('name') + '[]"><span class="m-dotted del">Удалить</span></div>';
        $($(this).parent()).before(html);
    });

    // Удалить
    $('.b-formItem-el-simpleMultiAdd').delegate('.item .del', 'click', function () {
        if ($('.item', $(this).closest('.b-formItem-el-simpleMultiAdd')).length == 1)
            $('.add SPAN', $(this).closest('.b-formItem-el-simpleMultiAdd')).click();
        $(this).closest('.item').remove();
    });

    $('.b-formItem-el-simpleMultiAdd .add SPAN').click();

});


// Фотогаллерея при добавлении объекта
$(function () {

    $('.b-addObject-gallery .del SPAN').click(function () {

        var item = $(this).closest('LI');

        var loader = ajaxLoader.add(item);
        ajaxLoader.setHeight(loader, item.outerHeight());
        $.ajax({
            type:'POST',
            cache:false,
            dataType:'json',
            data:'id=' + item.data('id'),
            url:'objects/ajax_delete_photos_object',
            beforeSend:function () {
                loader.show();
            },
            success:function (data) {
                loader.hide();
                if (data['error']) {
                    alert(data['errorText']);
                } else {
                    item.remove();
                }
            },
            error:function () {
                loader.hide();
                alert('Возникла неопознанная ошибка. Обратитесь в техническую поддержку сайта!');
            }
        });

    });

});


$(function(){
	
	$('.statusObject select[name=type]').change(function(){
		//console.log($(this).val());
		if ($(this).val() == 1){
			$('.typeObjectRent').addClass('g-hidden');
			$('.typeObjectSale').removeClass('g-hidden');
		} else {
			$('.typeObjectSale').addClass('g-hidden');
			$('.typeObjectRent').removeClass('g-hidden');
		}
	});
});


// Голубая кнопка
$(function(){

	$('BODY').on('mousedown', '.b-blueButton', function() {
		$(this).addClass('s-pressed');
	});

	$('BODY').on('mouseleave', '.b-blueButton', function() {
		$(this).removeClass('s-pressed');
	});

});

