Nakopitel = {};

/**
 * Флаг, куда вернуться
 */
Nakopitel.backTo = '';

/**
 * Инициализатор систем
 */
Nakopitel.init = function() {

	// Устанавливаем текущий выбранный регион
	Nakopitel.setRegion(NakoSettings.region.id, NakoSettings.region.title);

	// Активатор выбора категории для добавления объявления при нажатии на кнопку
	// добавления объявления
	$('#header_buttonAdd').click(function(){
		$('#add_CategorySelector').fadeIn(300);
	});

	// ** Заполняем рубрикатор добавления категориями
	
	var html = '';
	var category = null;
	var i,j;

	// Перебираем все категории
	for( i in NakoSettings.categories ) {
		if( NakoSettings.categories.hasOwnProperty(i) ) {

			// Получаем объект категории
			category = NakoSettings.categories[i];

			html += '<tr class="element">';
			html += '<td class="section">' + category.title + ':</td>';
			html += '<td class="actions">';
			for( j in category.actions ) {
				if( category.actions.hasOwnProperty(j) ) {
					html += '<a onclick="Nakopitel.addByCategory(' + category.actions[j].id + ')">' + category.actions[j].title + '</a>';
				}
			}
			html += '</td>';
			html += '</tr>';

		}
	}

	// Помещаем HTML в контейнер меню добавления
	$('#add_CategorySelector_Container').html(html);

	// ** Форма добавления

	// Клик по кнопке выбора региона - регион по-умолчанию
	$('#add_RegionSelector_Home').click(function(){
		
		// Отмечаем в форме добавления текущий выбранный регион
		$('#addForm_Region_Value').val(NakoSettings.region.id);

	});


	// Клик по кнопке выбора региона - уточнить регион
	$('#add_subregions').click(function(){
		
		// Включаем радиокнопку
		$('#add_RegionSelector_More').attr('checked', true);

		// Навешиваем событие на смену значения в списке регионов
		$('#add_subregions select').unbind('change');
		$('#add_subregions select').change(function(){

			// Отмечаем в форме добавления текущий выбранный регион
			$('#addForm_Region_Value').val( $(this).val() );

		});

		// Отмечаем в форме добавления текущий выбранный регион из списка
		$('#addForm_Region_Value').val( $('#add_subregions select').val() );

	});


	// Клик по ссылке отмены добавления - скрываем форму добавления, показываем
	// главный рубрикатор
	$('#add_Cancel').click(function(){
		Nakopitel.reset();
	});

	// Клик на текущий регион показывает окно выбора региона
	$('#currentRegion').click(function(){
		$('#regionSelector').fadeIn(300);
	});


	// ** Отрисовываем индексную страницу

	Nakopitel.drawIndex();


	

}


/**
 * Скрывает все страницы
 */
Nakopitel.hideAll = function() {
	$('#mainCategories').hide();
	$('#add').hide();
	$('#adsList').hide();
	$('#notFound').hide();
	$('#searchProcess').hide();
	$('#loadProcess').hide();
	$('#addSuccess').hide();
	$('#addFailed').hide();
	$('#view').hide();
}

/**
 * Сбрасывает состояние виджета на самое начало, скрывает все рабочие окна,
 * очищает данные, показывает главный рубрикатор
 */
Nakopitel.reset = function() {

	// Скрываем всё
	Nakopitel.hideAll();
	
	Nakopitel.drawIndex();
	
}


/**
 * Отрисовывает главный рубрикатор
 */
Nakopitel.drawIndex = function() {

	var html = '';
	var category = null;
	var counter = 0;
	var iter = .0;
	var i,j;

	$('#mainCategories').html('');

	for( i in NakoSettings.categories ) {
		if( NakoSettings.categories.hasOwnProperty(i) ) {
			
			category = NakoSettings.categories[i];
			iter = counter / 4;
			
			if(counter == 0) {
				html += '<tr>';
			}

			if( iter > 0 && iter == Math.ceil(iter) ) {
				html += '</tr><tr>';
			}
			
			html += '<td class="card"><div class="wrapper"><div class="title">' + category.title + '</div><table><tr><td class="icon"><img src="' + category.picture + '" alt="' + category.title + '"></td><td class="actions">';
			
			for( j in category.actions ) {
				if( category.actions.hasOwnProperty(j) ) {
					html += '<div><a onclick="Nakopitel.searchByCategory(' + category.actions[j].id + ')">' + category.actions[j].title + '</a></div>';
				
				}
			}
			
			html += '</td></tr></table></div></td>';

			counter++;
			iter = counter / 4.0;
				
		}
	}
	
	if( iter != Math.ceil(iter) ) {
	
		var total = NakoSettings.categories.length;
		var need = Math.ceil(total / 4) * 4;
		var steps = need - total;
		for( i = 0; i < steps; i++ ) {
			html += '<td class="card">&nbsp;</td>';
		}
	
	}
	
	html += '</tr>';
	
	$('#mainCategories').html(html);

	
	$('#mainCategories').fadeIn(600);
	
}







Nakopitel.searchByCategory = function(id) {

	// Скрываем всё
	Nakopitel.hideAll();

	// Показываем индикатор поиска
	$('#searchProcess').show();
	
	$.ajax({
		type: 'post',
		url: '/nako/',
		data: {
			cmd: 'search_by_category',
			category: id,
			region: NakoSettings.region.id
		},
		dataType: 'json',
		success: function(response) {
			
			$('#searchProcess').hide();
			Nakopitel.drawSearchResult(response);

			// Флаг возврата
			Nakopitel.backTo = 'search';
			
		}
	});

}




Nakopitel.drawSearchResult = function(rows) {

	if( rows.length > 0 ) {
	
	
		var html = '';
		var row = null;
		var counter = 0.0;
		var iter = 0.0;
		var title, price, attribute;
		var i,j;

		$('#adsList').html('');

		for( i in rows ) {
			if( rows.hasOwnProperty(i) ) {
				
				row = rows[i];
				iter = counter / 4.0;
				title = '';
				price = '';
				
				for( j in row.attributes ) {
					if( row.attributes.hasOwnProperty(j) ) {
					
						attribute = row.attributes[j];
						
						// Определяем цену
						if( attribute.attribute == 7 ||attribute.attribute == 97 || attribute.attribute == 79 ||attribute.attribute == 89) {
							if(attribute.is_range) {
								
								if(attribute.value.min > 0 && attribute.value.max > 0 ) {
									price = 'от ' + parseInt(attribute.value.min) + ' до ' + parseInt(attribute.value.max) + ' ' + attribute.unit;
								} else if( attribute.value.min > 0 && attribute.value.max == 0 ) {
									price = 'от ' + parseInt(attribute.value.min) + ' ' + attribute.unit;
								} else if( attribute.value.min == 0 && attribute.value.max > 0 ) {
									price = ' до ' + parseInt(attribute.value.max) + ' ' + attribute.unit;
								}
								
							} else {
								price = parseInt(attribute.value) + ' ' + attribute.unit;
							}
						}
						
						// Определяем название по атрибутам
						if( attribute.attribute == 13 || attribute.attribute == 105 ) {
							title += attribute.value;
						}
						if( attribute.attribute == 65 || attribute.attribute == 21 || attribute.attribute == 124 || attribute.attribute == 285 || attribute.attribute == 131 || attribute.attribute == 136 || attribute.attribute == 140 || attribute.attribute == 149 || attribute.attribute == 152 || attribute.attribute == 193 || attribute.attribute == 171 || attribute.attribute == 172 || attribute.attribute == 173 || attribute.attribute == 182 || attribute.attribute == 212 || attribute.attribute == 301 || attribute.attribute == 225 || attribute.attribute == 238 || attribute.attribute == 253 || attribute.attribute == 304 || attribute.attribute == 267 || attribute.attribute == 274 || attribute.attribute == 306 || attribute.attribute == 298 || attribute.attribute == 299 || attribute.attribute == 308 ) {
							title += attribute.value[0].label + ' ';
						}
						if( attribute.attribute == 153 || attribute.attribute == 3 || attribute.attribute == 126 ) {
							title += attribute.value + ' ';
						}
						
						// Недвижимость
						if( attribute.attribute == 319 ) {
							title = attribute.value;
						} else {
							if( row.category == 39 || row.category == 40 || row.category == 41 || row.category == 42 ) {
								if( (attribute.attribute == 83 || attribute.attribute == 4) && attribute.value > 0 ) {
									title = attribute.value + '-к. квартира'
								} else {
									title = 'квартира';
								}
							} else if( row.category == 56 || row.category == 57 || row.category == 58 || row.category == 59 ) {
								if( attribute.attribute == 14 && attribute.value > 0 ) {
									title = 'комната '+  attribute.value + ' м²';
								} else {
									title = 'комната';
								}
							}
						}
					
					}
				}
				
				
				if(counter == 0.0) {
					html += '<tr>';
				}

				if( iter > 0.0 && iter == Math.ceil(iter) ) {
					html += '</tr><tr>';
				}
				
				html += '<td class="card">';
				if( title == '' ) {
					title = '—';
				}
				html += '<div class="wrapper"><div class="title">' + title + '</div>';
				html += '<table><tr>';
				if( row.files && row.files.length > 0 ) {
					html += '<td class="icon"><img src="http://resizer.mkechinov.ru/resize.php?maxwidth=50&maxheight=50&source=' + row.files[0].path + '" alt=""></td>';
				
				} else {
					html += '<td class="icon">&nbsp;</td>';
				}
				html += '<td class="info">';
				if( price != '' ) {
					html += '<div class="price">' + price + '</div>';
				}
				html += '<div class="more"><a onclick="Nakopitel.show(' + row.id + ')">подробнее</a></div>';
				html += '</td>';
				html += '</tr></table>';
				html += '</div></td>';

				counter++;
				iter = counter / 4.0;
					
			}
		}

		if( iter != Math.ceil(iter) ) {
			var total = rows.length + 0.0;
			var need = Math.ceil(total / 4.0) * 4.0;
			var steps = need - total;
			for( var i = 0; i < steps; i++ ) {
				html += '<td class="card">&nbsp;</td>';
			}
		}
		
		html += '</tr>';
		
		$('#adsList').html(html);

		
		$('#adsList').fadeIn(600);

	
	} else {
	
		$('#notFound').show();
	
	}

}




/**
 * Загружает форму выбранной категории, скрывает все остальные формы,
 * отрисовывает форму добавления.
 */
Nakopitel.addByCategory = function(id) {

	// Скрываем всё
	Nakopitel.hideAll();

	// Скрываем форму выбора категории для добавления
	$('#add_CategorySelector').hide();

	// Показываем индикатор загрузки
	$('#loadProcess').fadeIn(300);

	// Отмечаем в форме добавления в скрытом поле выбранную категорию
	$('#addForm_Category_Value').val(id);

	// Отправляем запрос на загрузку данных формы
	$.ajax({
		type: 'post',
		url: '/nako/',
		data: {
			cmd: 'form',
			category: id,
			type: 'add',
			detail: 1,
			html: 1
		},
		dataType: 'html',
		success: function(response) {

			// Скрываем индикатор загрузки
			$('#loadProcess').hide();

			// Помещаем форму в контейнер
			$('#addForm_Container').html(response);

			// Показываем форму добавления
			$('#add').slideDown(300);

		}
	});

}




/**
 * Функция проверяет данные формы, если все нормально, отправляет объявление.
 * Если ошибки не было, то показывает результат добавления объявления.
 * Если была, то показывает сообщение об ошибке. 
 */
Nakopitel.add = function() {

	// Проверяем заполненность контактов
	if( $.trim($('#addForm textarea[name=contact]').val()) == '' ) {
		$('#addForm .contactErrorMsg').show();
		return false;
	} else {
		$('#addForm .contactErrorMsg').hide();
	}

	// Скрывает форму добавления
	$('#add').hide();

	// Показывает индикатор обработки
	$('#loadProcess').show();

	// Аяксово отправляем форму
	$('#addForm').ajaxSubmit({
		dataType: 'script',
		iframe: true/*,
		success: function(response, statusText) {
			alert(response);
			// Помещаем идентификатор объявления в контейнер
			//$('#adId').html(response.id);

		}*/
	});

	return true;

};




/**
 * Загружает страницу объявления, отображает информацию об объявлении, если не
 * находит, то отображает страницу с ошибкой.
 * В любом случае есть кнопка "вернуться", которая возвращает на страницу
 * с текушей выбранной категорией (если была выбрана категория), а если не
 * было выбрано категории, то возвращает на главный рубрикатор
 */
Nakopitel.show = function(id) {

	// Скрываем всё
	Nakopitel.hideAll();

	// Показывает индикатор обработки
	$('#loadProcess').show();

	// Отправляем запрос на загрузку данных формы
	$.ajax({
		type: 'post',
		url: '/nako/',
		data: {
			cmd: 'view',
			id: id
		},
		dataType: 'html',
		success: function(response) {

			// Скрываем индикатор загрузки
			$('#loadProcess').hide();

			// Помещаем форму в контейнер
			$('#view .container').html(response);

			// Показываем страницу просмотра
			$('#view').slideDown(300);

			// Включаем карусель на фотографии
			if( $('#viewPhotos a').length > 0 ) {
				$('#viewPhotos').jcarousel({vertical: true});
			}

			// Включаем фотоувеличитель
			$('#viewPhotos a[rel=colorbox]').colorbox();
			
			// Если есть настройка "показывать ссылку подробнее", показываем
			if(NakoSettings.showMoreLink == true) {
				$('#showMeganakoDetails').show();
			} else {
				$('#showMeganakoDetails').hide();
			}
			

		}
	});

}


/**
 * Возвращает пользователя назад после просмотра объявления.
 * Если был просмотр категории, то возвращает в эту категорию.
 * Если был результат добавления, то возвращает на главную страницу
 */
Nakopitel.back = function() {

	// Скрыть все
	Nakopitel.hideAll();

	// Если был указан флаг, что вернуться в категорию
	if(Nakopitel.backTo == 'search') {

		// Показываем объявления
		$('#adsList').fadeIn(300);

	} else {

		// Показываем главную страницу
		Nakopitel.reset();

	}

}


/**
 * Устанавливает выбранный регион
 */
Nakopitel.setRegion = function(id, title) {

	// Устанавливаем в свойства (если пользователь изменил регион)
	NakoSettings.region.id = id;
	NakoSettings.region.title = title;

	// Устанавливаем текущий регион в метку региона
	$('#currentRegion').text( title );

	// Устанавливаем текущий регион в метку региона в форме добавления
	$('#add_RegionDefault_Name').text( title );

	// Загружаем информацию по региону и отрисовываем нужные формы
	$.ajax({
		type: 'post',
		url: '/nako/',
		data: {
			cmd: 'region',
			id: NakoSettings.region.id
		},
		dataType: 'json',
		success: function(response) {

			// Отмечаем в форме добавления текущий выбранный регион
			$('#addForm_Region_Value').val(NakoSettings.region.id);

			// Если был список дочерних регионов
			if( response.elements.length > 0 ) {

				// Перебираем элементы, формируем HTML-список SELECT и помещаем
				// его в SELECT выбора регионов в форме добавления
				var html = '';
				for( var i in response.elements ) {
					if(response.elements.hasOwnProperty(i)) {
						html += '<option value="' + response.elements[i].id + '">' + response.elements[i].title + '</option>';
					}
				}

				$('#add_subregions select').html(html)

				// Показываем подрегионы
				$('#add_subregions').fadeIn(300);

			} else {

				// Дочерних регионов не было, скрываем лишние элементы
				$('#add_subregions').css('display', 'none');

				// Включаем радиокнопку основного региона
				$('#add_RegionSelector_Home').attr('checked', true);

			}

		}
	});

}
