
	/**
	 * @author Влад Масленников
	 * @author Евгений Дорошенко
	 * @date 2009-07-24
	 *
	 * Форма поиска предложений
	 */
	App.Offers = {
		
		childrenNumbers: ['Без детей', 'Один ребенок', 'Двое детей', 'Трое детей', 'Четверо детей', 'Пять детей', 'Шесть детей', 'Семь детей', 'Восемь детей', 'Девять детей', 'Десять детей', 'Одиннадцать детей', 'Двенадцать детей'],
	
		init: function() {
			// Отключим пост формы
			$('#form-search input[type=submit]').attr('disabled', true);
			
			// Настроим переключение обратно
			var reverse = $('#input-reverse');
			reverse.attr('disabled', !reverse.val());
			$('#input-reverse').attr('disabled', !reverse.val());
			$('#button-reverse').attr('disabled', !reverse.val());
			
			$('#is-reverse').attr('checked', reverse.val()).change(function() {
				var enabled = $(this).attr('checked');
				reverse.val('').attr('disabled', !enabled);
				$('#input-reverse').attr('disabled', !enabled);
				$('#button-reverse').attr('disabled', !enabled);
			});
			
			// Настроим автозаполнение
			$('#form-search input[suggest]').each(function(index, element) {
				$(element).suggest('/helper/points', {
					minchars: 2,
					delay: 500,
					createItems: function(response) {
						return eval(response);
					}
				});
			});
			
			// Настроим маски
			$('#form-search input.masked').setMask();
			
			// Настроим date-пикеры
			$('#form-search input[datepicker][type=text]').datepicker({
				minDate: 0,
				maxDate: '+3Y',
				numberOfMonths: 2,
				beforeShow: function(input, datepicker) {
					if ('reverse' == $(input).attr('datepicker')) {
						try {
							datepicker.settings.minDate = $.datepicker.parseDate('dd.mm.yy', $('#input-forward').val());
						} catch (e) {
							//
						}
					}
				}
			});
			$('#form-search input[datepicker][type=button]').click(function() {
				$('#input-' + $(this).attr('datepicker')).focus();
			});
			
			// Настроим drop-box'ы
			$('#form-search .level select').selectbox();
			$('#form-search .adults select').selectbox();
			
			// Настроим сложный контрол выбора детей
			$('#children').dropdownchecklist({
				width: 192,
				bgiframe: true,
				type: 'radio',
				formatText: function() {
					var number = 0;
					$('input[type="radio"][checked=true]', this.dropWrapper).each(function() {
						number += parseInt($(this).val());
					});
					return App.Offers.childrenNumbers[number];
				}
			});
			
			// Настроим форму поиска
			$('#form-search').ajaxForm({
				url: '/index/search',
				type: 'post',
				dataType: 'json',
				beforeSubmit: function(data, form, options) {
					// Перед отправкой
					App.notify('Поиск предложений');
					$('#form-search input[type=submit]').attr('disabled', true);
				},
				success: function(response, status) {
					// Получили ответ
					if (response.success) {
						if (response.redirect) {
							// Это была не страница поиска предложений
							location.href = response.redirect;
							return;
						}
						
						if (response.content) {
							// Покажем предложения
							App.notify();
							App.Offers.showOffers(response.content);
						} else {
							// Запустим таймер для проверки состояния поиска
							$(document).everyTime(
								'5s', 'offers',
								function(times) {
									$.ajax({
										url: '/index/check',
										data: {state: response.id},
										dataType: 'json',
										type: 'POST',
										success: function(data, status) {
											if (data.success) {
												if (data.content) {
													$(document).stopTime('offers');
													App.notify();
													App.Offers.showOffers(data.content);
												}
											} else {
												$(document).stopTime('offers');
												App.help({
													topic: data.redirect,
													title: 'Информация',
													width: 500,
													height: 300
												});
												App.Offers.showOffers(data.content);
												App.notify();
											}
										},
										error: function(request, status, error) {
											$(document).stopTime('offers');
											App.notify();
											if (500 == request.status)
												location.href = '/error';
										},
										cache: false
									});
									if (20 == times) {
										$(document).stopTime('offers');
										App.help({
											topic: 'error-service',
											title: 'Ошибка',
											width: 500,
											height: 400
										});
										App.notify();
										$('#form-search input[type=submit]').removeAttr('disabled');
									}
								},
								20
							);
						}
					} else {
						if (response.redirect) {
							// Если информер
							App.help({
								topic: response.redirect,
								title: 'Информация',
								width: 500,
								height: 300
							});
						} else {
							// Если ошибки
							$('#form-search').errors('set', response.errors);
						}
						App.Offers.showOffers(response.content);
						App.notify();
					}
				},
				error: function(request, type) {
					if (500 == request.status)
						location.href = '/error';
				}
			});
			
			// Фокус на departure
			$('#form-search input[name="form[departure]"]').focus();
			
			// Включим пост формы
			$('#form-search input[type=submit]').removeAttr('disabled');
			
			this.reloadOffers();
			
			// Поиск предложений с параметрами по умолчанию
			if ($('#form-search[autopost="1"] input[name="form[is_offers]"]').val())
				$('#form-search').submit();
		},
		
		showOffers: function(content) {
			$('.placeholder_content').fadeOut('fast', function() {
				$('.placeholder_content').html(content);
				$('#form-search input[type=submit]').removeAttr('disabled');
				
				$(this).fadeIn('fast');
				App.Offers.reloadOffers();
			});
		},
		
		find: function(param) {
			$('#input-' + param.name).val(param.value);
			$('#form-search').submit();
		},
		
		buy: function(offer) {
			location.href = '/index/offer?id=' + offer;
		},
		
		reloadOffers: function() {
			// Настроим загрузку УПТ
			$('a.conditions').each(function() {
				$(this).loader({
					preload: false,
					url: '/index/conditions',
					params: {
						offer: $(this).attr('offer')
					},
					multiple: {
						param: 'state',
						times: 20,
						error: '/error'
					},
					click: function() {
						App.notify('Загрузка Условий применения тарифа');
						return false;
					},
					success: function(response, content) {
						App.notify();
						App.conditions(content);
					},
					fetch: function(result) {
						return result.content;
					}
				});
			});
			
			// Настроим скрытие/раскрытие предложений
			$('.titles .togglers .open').click(function() {
				$('.offers .full').show();
				return false;
			});
			
			$('.titles .togglers .close').click(function() {
				$('.offers .full').hide();
				return false;
			});
			
			$('.full .togglers .close').click(function() {
				$(this).parents('.full').hide();
				return false;
			});
			
			$('.time-wrapper').click(function() {
				// $(this).parents('tr').next().toggle();
				//		- так было и будет, если jQuery будет корректно работать в 8 осле
				var row =  $(this).parents('tr').next();
				if('none' == row.css('display'))
					row.show();
				else
					row.hide();
			});
		}
		
	};
	
	
	$(function() {
	
		App.Offers.init();
		
		$.namespace('offers', {
		
			forward: function(element) {
				App.Offers.find({name: 'forward', value: $(element).attr('date')});
				return false;
			},
			
			reverse: function(element) {
				App.Offers.find({name: 'reverse', value: $(element).attr('date')});
				return false;
			},
			
			buy: function(element) {
				App.Offers.buy($(element).attr('offer'));
				return false;
			}
			
		});
		
	});
	