$(document).ready(function(){
    /* запуск поиска с дефолтными параметрами*/
    var runInitialSearch = true;    
    /* кол-во отображаемых дней на диаграмме */
    var range = 12;
	/* отображать расширенный модуль поиска*/
	var showCharts = false;
	/* открывать в новом окне */
	var openNewTab = true;
	/* отображать рейсы с отстутсвующими местами */
	var showOnSeats = true;
	
	/* код партнера*/
    var referer = 'slavtour';
	/* host */
	var host = 'http://clickavia.ru';
	/* высота столбца в пикселях*/
    var barHeight =  75;
	/* позиционирование блока подсказок над столбцами */
    var tooltipOffsetLeft = 40;
    var tooltipOffsetTop = 45;
	/* текст ссылок */
	var btnOrderText = 'Заказать';
	var btnNoSeatsText = 'Нет мест';
	
	
    /* результат ajax запроса*/
    var globalFlights;
    /* регистрация шаблонов*/
    $.template('flightWR', $('#tmpl_flight_wr').html());
    $.template('flightOD', $('#tmpl_flight_od').html());
    $.template('column', $('#tmpl_column').html());

	if(!showCharts && $('#ca_charts').length > 0){
		$('#ca_charts').hide();
	}
    if(!runInitialSearch){
        $('#ca_manage_view_flights, #ca_flights').addClass('ca_hidden_block');
		if(showCharts)
			$('#ca_charts').addClass('ca_hidden_block');
    }
    /**
     * ф-я добавляет в списки выбора направлений полета города и страны
     * @param reqSelect - id списка выбора
     * @param options - ассоциативный массив (объект), содержащий страны/города вида {IATA: title}
     * @param selected - IATA код активного элемента
     */
    function addSelectOptions(reqSelect, options, selected){
        var option;
        var htmlOptions;
        for(option in options){
            if(option == selected)
                htmlOptions += '<option value="'+option+'" selected="selected">'+options[option]+'</option>';
            else
                htmlOptions += '<option value="'+option+'">'+options[option]+'</option>';
        }
        $('#'+reqSelect).html(htmlOptions);
    }

    /**
     * ф-я возвращает дату в формате yyyymmdd
     * @param obj - объект типа Date()
     * @param rusFormat - отображать дату в формате dd.mm.yyyy
     */
    function convertDateToStr(obj, rusFormat){
        var month = obj.getMonth()*1+1 < 10 ? '0'+(obj.getMonth()*1+1) : obj.getMonth()*1+1;
        var day = obj.getDate() < 10 ? '0'+obj.getDate() : obj.getDate();
        if(rusFormat){
            return day+'.'+month+'.'+obj.getFullYear();
        } else {
            return obj.getFullYear()+month+day;
        }
    }

    /**
     * ф-я сортировки массива объектов по одному атрибуту
     * @param a - объект 1
     * @param b - объект 2
     * @param attr - атрибут
     * @param direction - направление сортировки
     * @param addByTime - дополнительная сортировка по времени вылета (для рейсов с одинаковыми ценами)
     */
    function sortObjByAttr(a, b, attr, direction, addByTime){
        if((a[attr] < b[attr] && direction == 'asc') || (a[attr] > b[attr] && direction == 'desc')){
            return -1;
        } else if((a[attr] > b[attr] && direction == 'asc') || (a[attr] < b[attr] && direction == 'desc')){
            return 1;
        } else {
            if(addByTime){
                if(a.flight_to.depart_time < b.flight_to.depart_time)
                    return -1;
                else if(a.flight_to.depart_time > b.flight_to.depart_time)
                    return 1;
            }
            return 0;
        }
    }

    /**
     * ф-я сортировки массива объектов по вложенному атрибуту
     * @param a - объект 1
     * @param b - объект 2
     * @param attr - внешний атрибут
     * @param attrInner - вложенный атрибут
     * @param direction - направление сортировки
     * @param addByPrice - дополнительная сортировка по цене (для рейсов с одинаковым временем)
     */
    function sortObjByDoubleAttr(a, b, attr, attrInner, direction, addByPrice){
        if((a[attr][attrInner] < b[attr][attrInner] && direction == 'asc') || (a[attr][attrInner] > b[attr][attrInner] && direction == 'desc')){
            return -1;
        } else if((a[attr][attrInner] > b[attr][attrInner] && direction == 'asc') || (a[attr][attrInner] < b[attr][attrInner] && direction == 'desc')){
            return 1;
        } else {
            if(addByPrice){
                if(a.price < b.price)
                    return -1;
                else if(a.price > b.price)
                    return 1;
            }
            return 0;
        }
    }
    function sortDepartTimeAsc(a, b){
        return sortObjByDoubleAttr(a, b, 'flight_to', 'depart_time', 'asc', true);
    }
    function sortDepartTimeDesc(a, b){
        return sortObjByDoubleAttr(a, b, 'flight_to', 'depart_time', 'desc', true);
    }
    function sortArriveTimeAsc(a, b){
        return sortObjByDoubleAttr(a, b, 'flight_to', 'arrive_time', 'asc', true);
    }
    function sortArriveTimeDesc(a, b){
        return sortObjByDoubleAttr(a, b, 'flight_to', 'arrive_time', 'desc', true);
    }
    function sortPriceFLightsAsc(a, b){
        return sortObjByAttr(a, b, 'price', 'asc', true);
    }
    function sortPriceFLightsDesc(a, b){
        return sortObjByAttr(a, b, 'price', 'desc', true);
    }
    /**
     * ф-я возвращает массив результатов поиска (рейсы, диаграммы)
     */
    function getFlights(){
        var seatsClass;
        if($('#ca_search_econom').hasClass('ca_sort_active'))
            seatsClass = 0;
        else
            seatsClass = 1;
        $('.ca_column').remove();
        $('#ca_flights').html("");
        $('#ca_flights').addClass("ca_load_flights");
        $('.ca_chart_info').addClass("ca_load_bars");
        $('#ca_header_extra').text('Поиск...');
        $('.ca_sort_buttons, .ca_name_sort').addClass('ca_hidden_block');
        $.ajax({
            type: 'GET',
            url: host+'/search/flights',
            dataType: 'jsonp',
            data: {
                depart_city : $('#ca_depart_city').val(),
                destin_city : $('#ca_destin_city').val(),
                depart_date : $('#ca_depart_date').val(),
                return_date : $('#ca_return_date').val(),
                seats_class : seatsClass,
				get_charts  : showCharts ? 1 : 0,
                range : range,
                referer: referer,
				show_no_seats: showOnSeats ? 1: 0,
                one_way : $('#ca_one_way').is(':checked') ? 1 : 0
            },
            jsonp: 'jsonp',
            success: function(data) {
                $('#ca_manage_view_flights, #ca_flights, .ca_sort_buttons, .ca_name_sort').removeClass('ca_hidden_block');
				$('#ca_flights').removeClass("ca_load_flights");
				if(showCharts){
					$('#ca_charts').removeClass('ca_hidden_block');
					$('.ca_chart_info').removeClass("ca_load_bars");
				}
                globalFlights = data;                
                
                var arrDateSplit;
                var today = new Date();
                var todayStr = convertDateToStr(today, false);

                if(data.flights.length > 0){
                    /* добавим к каждому рейсу указание адреса хоста для заказа билетов*/
                    var numFlight;
                    for(numFlight in data.flights){
                        data.flights[numFlight]['host'] = host;
                    }
                    /* сортировка */
                    var sort, sortType;
                    var sortBtnActive = $('.ca_sort_active:last');
                    if(sortBtnActive.hasClass('ca_sort_desc')){
                        sortType = 'desc';
                    } else {
                        sortType = 'asc';
                    }

                    if(sortBtnActive.attr('id') == 'ca_sort_depart_time'){
                        if(sortType == 'asc'){
                            data.flights.sort(sortDepartTimeAsc);
                        }else{
                            data.flights.sort(sortDepartTimeDesc);
                        }
                    }else if(sortBtnActive.attr('id') == 'ca_sort_arrive_time'){
                        if(sortType == 'asc'){
                            data.flights.sort(sortArriveTimeAsc);
                        }else{
                            data.flights.sort(sortArriveTimeDesc);
                        }
                    } else {
                        if(sortType == 'asc'){
                            data.flights.sort(sortPriceFLightsAsc);
                        }else{
                            data.flights.sort(sortPriceFLightsDesc);
                        }
                    }
                    
					var displayDepartDate, inst;
					arrDateSplit = data.query.depart_date.split('-');
					var departPointRange = new Date(arrDateSplit[0],arrDateSplit[1]-1,arrDateSplit[2]);
					var departSelectDate = data.flights[0].flight_to.date.replace(/-/g,'');
					
					if(showCharts){
						var curDate, curDateStr, columnObj;						
						for(var i = -data.query.range; i <= data.query.range; i++){
							curDate = new Date(departPointRange.getTime());
							curDate.setDate(curDate.getDate() + i);
							curDateStr = convertDateToStr(curDate, false);
							columnObj = {
								col_date: curDate.getDate() < 10 ? '0'+curDate.getDate() : curDate.getDate(),
								col_month: curDate.getMonth()*1+1 < 10 ? '0'+(curDate.getMonth()*1+1) : curDate.getMonth()*1+1,
								col_year: curDate.getFullYear().toString().substr(2),
								col_day_of_week: rusDayOfWeekShort[curDate.getDay()],
								col_past: curDateStr < todayStr ? 'ca_col_past' : '',
								col_weekend: (curDate.getDay() == 0 || curDate.getDay() == 6) ? 'ca_col_weekend' : '',
								col_select: curDateStr == departSelectDate ? 'ca_col_selected' : ''
							};
							if(curDateStr in data.charts.chart_to && curDateStr >= todayStr){
								columnObj['col_price'] = data.charts.chart_to[curDateStr]['min_price'];
							} else {
								columnObj['col_price'] = 0;
							}
							$.tmpl('column', columnObj).appendTo('#ca_chart_depart');
						}
						// зададим необходимый размер
						var maxPrice = 0;
						for(var timeStamp in data.charts.chart_to){
							if(maxPrice < data.charts.chart_to[timeStamp]['min_price'])
								maxPrice = data.charts.chart_to[timeStamp]['min_price'];
						}
					}
                    if(data.type_search == 'return_trip'){
						$.tmpl('flightWR', data.flights).appendTo('#ca_flights');
						
						if(showCharts){
							$('.ca_chart_half:eq(1)').show();                        
							arrDateSplit = data.query.return_date.split('-');
							var returnPointRange = new Date(arrDateSplit[0],arrDateSplit[1]-1,arrDateSplit[2]);
							var returnSelectDate = data.flights[0].flight_return.date.replace(/-/g,'');
							for(i = -data.query.range; i <= data.query.range; i++){
								curDate = new Date(returnPointRange.getTime());
								curDate.setDate(curDate.getDate() + i);
								curDateStr = convertDateToStr(curDate, false);
								columnObj = {
									col_date: curDate.getDate() < 10 ? '0'+curDate.getDate() : curDate.getDate(),
									col_month: curDate.getMonth()*1+1 < 10 ? '0'+(curDate.getMonth()*1+1) : curDate.getMonth()*1+1,
									col_year: curDate.getFullYear().toString().substr(2),
									col_day_of_week: rusDayOfWeekShort[curDate.getDay()],
									col_past: curDateStr < todayStr ? 'ca_col_past' : '',
									col_weekend: (curDate.getDay() == 0 || curDate.getDay() == 6) ? 'ca_col_weekend' : '',
									col_select: curDateStr == returnSelectDate ? 'ca_col_selected' : ''
								};
								if(curDateStr in data.charts.chart_return && curDateStr >= todayStr){
									columnObj['col_price'] = data.charts.chart_return[curDateStr]['min_price'];
								} else {
									columnObj['col_price'] = 0;
								}
								$.tmpl('column', columnObj).appendTo('#ca_chart_return');
							}
							for(timeStamp in data.charts.chart_return){
								if(maxPrice < data.charts.chart_return[timeStamp]['min_price'])
									maxPrice = data.charts.chart_return[timeStamp]['min_price'];
							}
						}
                        if(data.flights[0].flight_to.date != data.query.depart_date || data.flights[0].flight_return.date != data.query.return_date){
                            $('#ca_header_extra').text('К сожалению на выбранные вами даты с '+convertDateToStr(departPointRange, true)+' по '+convertDateToStr(returnPointRange, true)+' перелет не возможен. Предлагаем вам ближайшую возможную дату.');
                            
                            if(data.flights[0].flight_to.date != data.query.depart_date){
                                arrDateSplit = data.flights[0].flight_to.date.split('-');
                                displayDepartDate = new Date(arrDateSplit[0],arrDateSplit[1]-1,arrDateSplit[2]);
                                inst = {
                                    currentYear : displayDepartDate.getFullYear(),
                                    currentMonth : displayDepartDate.getMonth(),
                                    currentDay : displayDepartDate.getDate()
                                };
                                departDatepicker.datepicker("setDate", displayDepartDate);
                                changeDepartDate(inst);
                            }
                            if(data.flights[0].flight_return.date != data.query.return_date){
                                arrDateSplit = data.flights[0].flight_return.date.split('-');
                                var displayReturnDate = new Date(arrDateSplit[0],arrDateSplit[1]-1,arrDateSplit[2]);
                                inst = {
                                    currentYear : displayReturnDate.getFullYear(),
                                    currentMonth : displayReturnDate.getMonth(),
                                    currentDay : displayReturnDate.getDate()
                                };
                                returnDatepicker.datepicker("setDate", displayReturnDate);
                                changeReturnDate(inst);
                            }
                        } else {
                            $('#ca_header_extra').text('Вылеты на указанную дату:');
                        }
                    } else {
                        $.tmpl('flightOD', data.flights).appendTo('#ca_flights');
						
						if(showCharts){
							$('.ca_chart_half:eq(1)').hide();
						}
                        if(data.flights[0].flight_to.date != data.query.depart_date){
                            $('#ca_header_extra').text('К сожалению на выбранную вами дату '+convertDateToStr(departPointRange, true)+' перелет не возможен. Предлагаем вам ближайшую возможную дату.');
                            displayDepartDate = new Date(data.flights[0].flight_to.date);
                            inst = {
                                currentYear : displayDepartDate.getFullYear(),
                                currentMonth : displayDepartDate.getMonth(),
                                currentDay : displayDepartDate.getDate()
                            };
                            departDatepicker.datepicker("setDate", displayDepartDate);
                            changeDepartDate(inst);
                        } else {
                            $('#ca_header_extra').text('Вылеты на указанную дату:');
                        }
                    }
					
					if(showCharts){
						maxPrice = maxPrice > 0 ? Math.ceil(maxPrice/3000)*3000 : 3000;
						$('.ca_chart_scale3').text(maxPrice);
						$('.ca_chart_scale2').text(Math.round(maxPrice*2/3));
						$('.ca_chart_scale1').text(Math.round(maxPrice*1/3));

						var curHeight;
						$('.ca_column').each(function(){
							if($(this).find('.ca_col_price').length > 0){
								curHeight = Math.round(barHeight*($(this).find('.ca_col_price').text()/maxPrice));
								if(curHeight > 0){
									$(this).find('.ca_bar').css({
										'height': curHeight+'px',
										'margin-top': (barHeight-curHeight)+'px'
									});
									$(this).find('.ca_bar').addClass('ca_bar_active');
								}
							}
						});
					}
					/* отображение текста ссылок */
					$('.ca_btn_order').html(btnOrderText);
					$('.ca_btn_no_seats').html(btnNoSeatsText);
                } else {
                    $('#ca_header_extra').text('Рейсов не найдено');
                }
            }
        });
    }
    /**
     * ф-я возвращает объект со списком стран/городов в зависимости от выбранных начальных условий
     * @param startItems
     */
    function getDestinations(startItems, runSearch){
        $.ajax({
            type: 'GET',
            url: host+'/search/destinations',
            dataType: 'jsonp',
            data: startItems,
            jsonp: 'jsonp',
            success: function(data) {
                if(data['depart_country']){
                    addSelectOptions('ca_depart_country',data['depart_country']['list'],data['depart_country']['selected']);
                }
                if(data['depart_city']){
                    addSelectOptions('ca_depart_city',data['depart_city']['list'],data['depart_city']['selected']);
                }
                if(data['destin_country']){
                    addSelectOptions('ca_destin_country',data['destin_country']['list'],data['destin_country']['selected']);
                }
                if(data['destin_city']){
                    addSelectOptions('ca_destin_city',data['destin_city']['list'],data['destin_city']['selected']);
                }
                if(runSearch)
                    getFlights();
            }
        });
    }


    /* работа со списками стран/городов */
    $('#ca_depart_country').change(function(){
        var startItems = {};
        startItems[$(this).attr('name')] = $(this).find(':selected').val();
        $('#ca_depart_city').html('<option value="">загрузка...</option>');
        $('#ca_destin_country').html('<option value="">загрузка...</option>');
        $('#ca_destin_city').html('<option value="">загрузка...</option>');
        getDestinations(startItems, true);
    });
    $('#ca_depart_city').change(function(){
        var startItems = {};
        startItems[$(this).attr('name')] = $(this).find(':selected').val();
        $('#ca_destin_country').html('<option value="">загрузка...</option>');
        $('#ca_destin_city').html('<option value="">загрузка...</option>');
        getDestinations(startItems, true);
    });
    $('#ca_destin_country').change(function(){
        var startItems = {};
        startItems[$(this).attr('name')] = $(this).find(':selected').val();
        startItems[$('#ca_depart_city').attr('name')] = $('#ca_depart_city :selected').val();
        $('#ca_destin_city').html('<option value="">загрузка...</option>');
        getDestinations(startItems, true);
    });

    /* работа с датами */
    var departDate = new Date();
    var returnDate = new Date();
    returnDate.setDate(returnDate.getDate()+7);
    var departDatepicker = $('#ca_depart_date');
    var returnDatepicker = $('#ca_return_date');
    var departDatedescr = $('#ca_depart_month');
    var returnDatedescr = $('#ca_return_month');
    var rusMonthTitle = ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'];
    var rusDayOfWeekShort = ['в','п','в','с','ч','п','с'];
    $('#ca_day_to').text(departDate.getDate());
    $('#ca_month_to').text(rusMonthTitle[departDate.getMonth()].substr(0,3).toUpperCase());
    $('#ca_day_return').text(returnDate.getDate());
    $('#ca_month_return').text(rusMonthTitle[returnDate.getMonth()].substr(0,3).toUpperCase());
    function changeDepartDate(inst){
        var departDate = new Date(inst.currentYear, inst.currentMonth, inst.currentDay);
        returnDatepicker.datepicker("option", "minDate", departDate);
        var returnDate = returnDatepicker.datepicker("getDate");
        departDatedescr.text(rusMonthTitle[inst.currentMonth]+' '+inst.currentYear);
        returnDatedescr.text(rusMonthTitle[returnDate.getMonth()]+' '+returnDate.getFullYear());
        $('#ca_day_to').text(inst.currentDay);
        $('#ca_month_to').text(rusMonthTitle[inst.currentMonth].substr(0,3).toUpperCase());
    }
    function changeReturnDate(inst){
        returnDatedescr.text(rusMonthTitle[inst.currentMonth]+' '+inst.currentYear);
        $('#ca_day_return').text(inst.currentDay);
        $('#ca_month_return').text(rusMonthTitle[inst.currentMonth].substr(0,3).toUpperCase());
    }
    departDatepicker.datepicker({
        numberOfMonths: 2,
        minDate: departDate,
        onSelect: function(dateText, inst) {
            changeDepartDate(inst);
            getFlights();
        }
    });
    departDatepicker.datepicker("setDate", new Date());
    departDatedescr.text(rusMonthTitle[departDate.getMonth()]+' '+departDate.getFullYear());
    returnDatepicker.datepicker({
        numberOfMonths: 2,
        minDate: departDate,
        onSelect: function(dateText, inst) {
            changeReturnDate(inst);
            getFlights();
        }
    });
    returnDatepicker.datepicker("setDate", returnDate);
    returnDatedescr.text(rusMonthTitle[returnDate.getMonth()]+' '+returnDate.getFullYear());

    /* инициализация */
    getDestinations({}, runInitialSearch);

    /**
     * функция вычитает месяц из указанной в выбранном датепикере даты
     * @param lastDate - крайняя дата, ниже которой вычитание не производится
     * @param curDatepicker - элемент, содержащий datepicker
     * @param curDatedescr - элемент, содержащий полное описание месяца
     */
    function distinctMonth(lastDate, curDatepicker, curDatedescr, changeReturn){
        var modifyDate = curDatepicker.datepicker("getDate");
        if(modifyDate.toString() != lastDate.toString()){
            var dayCount = new Date(modifyDate.getFullYear(), modifyDate.getMonth(), 0).getDate();
            if(modifyDate.getDate() > dayCount){
                modifyDate.setDate(dayCount);
            }
            modifyDate.setMonth(modifyDate.getMonth()-1);
            if(modifyDate < lastDate) modifyDate = lastDate;
            curDatepicker.datepicker("setDate", modifyDate);
            curDatedescr.text(rusMonthTitle[modifyDate.getMonth()]+' '+modifyDate.getFullYear());
            if(changeReturn){
                returnDatepicker.datepicker("option", "minDate", modifyDate);
                $('#ca_day_to').text(modifyDate.getDate());
                $('#ca_month_to').text(rusMonthTitle[modifyDate.getMonth()].substr(0,3).toUpperCase());
            } else {
                $('#ca_day_return').text(modifyDate.getDate());
                $('#ca_month_return').text(rusMonthTitle[modifyDate.getMonth()].substr(0,3).toUpperCase());
            }
        }
    }

    /**
     * функция добавляет месяц к указанной в выбранном датепикере дате
     * @param curDatepicker - элемент, содержащий datepicker
     * @param curDatedescr - элемент, содержащий полное описание месяца
     * @param changeReturn - изменять дату возврата
     */
    function addMonth(curDatepicker, curDatedescr, changeReturn){
        var modifyDate = curDatepicker.datepicker("getDate");
        var dayCount = new Date(modifyDate.getFullYear(), modifyDate.getMonth()*1+2, 0).getDate();
        if(modifyDate.getDate() > dayCount){
            modifyDate.setDate(dayCount);
        }
        modifyDate.setMonth(modifyDate.getMonth()+1);
        curDatepicker.datepicker("setDate", modifyDate);
        curDatedescr.text(rusMonthTitle[modifyDate.getMonth()]+' '+modifyDate.getFullYear());
        if(changeReturn){
            var returnDate = returnDatepicker.datepicker("getDate");
            returnDatepicker.datepicker("option", "minDate", modifyDate);
            $('#ca_day_to').text(modifyDate.getDate());
            $('#ca_month_to').text(rusMonthTitle[modifyDate.getMonth()].substr(0,3).toUpperCase());
            if(returnDate.getTime() < modifyDate.getTime()){
                returnDatedescr.text(rusMonthTitle[modifyDate.getMonth()]+' '+modifyDate.getFullYear());
                $('#ca_day_return').text(modifyDate.getDate());
                $('#ca_month_return').text(rusMonthTitle[modifyDate.getMonth()].substr(0,3).toUpperCase());
            }
        } else {
            $('#ca_day_return').text(modifyDate.getDate());
            $('#ca_month_return').text(rusMonthTitle[modifyDate.getMonth()].substr(0,3).toUpperCase());
        }
    }
    $('#ca_depart_arr_left').click(function(){
        var minDate = new Date();
        minDate.setHours(0);
        minDate.setMinutes(0);
        minDate.setSeconds(0);
        distinctMonth(minDate, departDatepicker, departDatedescr, true);
        getFlights();
    });
    $('#ca_depart_arr_right').click(function(){
        addMonth(departDatepicker, departDatedescr, true);
        getFlights();
    });
    $('#ca_return_arr_left').click(function(){
        var minDate = departDatepicker.datepicker("getDate");
        distinctMonth(minDate, returnDatepicker, returnDatedescr, false);
        getFlights();
    });

    $('#ca_return_arr_right').click(function(){
        addMonth(returnDatepicker, returnDatedescr, false);
        getFlights();
    });

    /* поиск */
    $('#ca_button_search, #ca_button_update').click(function(){
        getFlights();
		return false;
    });
    $('#ca_search_econom').click(function(){
        if(!$(this).hasClass('ca_sort_active')){
            $(this).addClass('ca_sort_active');
            $('#ca_search_bussiness').removeClass('ca_sort_active');
            getFlights();
        }
    });
    $('#ca_search_bussiness').click(function(){
        if(!$(this).hasClass('ca_sort_active')){
            $(this).addClass('ca_sort_active');
            $('#ca_search_econom').removeClass('ca_sort_active');
            getFlights();
        }
    });
    $('.ca_bar_active').live('click', function(){
        $('#ca_tooltip_bar').html('').hide();
        var parentCol = $(this).parents('.ca_column:first');
        var selDay = $(parentCol).find('.ca_col_day').text();
        var selMonth = $(parentCol).find('.ca_col_month').text();
        var selYear = $(parentCol).find('.ca_col_year').text();
        var selDate = new Date('20'+selYear, selMonth-1, selDay);
        var inst = {
            currentYear : selDate.getFullYear(),
            currentMonth : selDate.getMonth(),
            currentDay : selDate.getDate()
        };
        if($(parentCol).parents('.ca_chart_columns:first').attr('id') == 'ca_chart_depart'){
            departDatepicker.datepicker("setDate", selDate);
            changeDepartDate(inst);
        } else {
            returnDatepicker.datepicker("setDate", selDate);
            changeReturnDate(inst);
        }
        getFlights();
    });
    $('#ca_one_way, #ca_destin_city').change(function(){
        getFlights();
    });
    /* отображение подсказок */
    $('.ca_bar_active').live('mouseenter',function(){
        var thisPosition = $(this).offset();
        var parentCol = $(this).parents('.ca_column:first');
        var selDay = $(parentCol).find('.ca_col_day').text();
        var selMonth = $(parentCol).find('.ca_col_month').text();
        var selYear = '20'+$(parentCol).find('.ca_col_year').text();
        var price = $(parentCol).find('.ca_col_price').text()+' руб.';
        $('#ca_tooltip_bar').html(selDay+'.'+selMonth+'.'+selYear+'<br>'+price).show().css({left: thisPosition.left-tooltipOffsetLeft, top: thisPosition.top-tooltipOffsetTop});
    });
    $('.ca_bar_active').live('mouseleave',function(){
        $('#ca_tooltip_bar').html('').hide();
    });

    $('.ca_sort_button').click(function(){
        var sortType;
        if($(this).hasClass('ca_sort_active')){
            if($(this).hasClass('ca_sort_asc')){
                $(this).removeClass('ca_sort_asc');
                $(this).addClass('ca_sort_desc');
                sortType = 'desc';
            } else {
                $(this).removeClass('ca_sort_desc');
                $(this).addClass('ca_sort_asc');
                sortType = 'asc';
            }
        } else {
            $('.ca_sort_button').removeClass('ca_sort_active');
            $('.ca_sort_button').removeClass('ca_sort_asc');
            $('.ca_sort_button').removeClass('ca_sort_desc');
            $(this).addClass('ca_sort_active');
            $(this).addClass('ca_sort_asc');
            sortType = 'asc';
        }

        if($(this).attr('id') == 'ca_sort_depart_time'){
            if(sortType == 'asc'){
                globalFlights.flights.sort(sortDepartTimeAsc);
            }else{
                globalFlights.flights.sort(sortDepartTimeDesc);
            }
        }else if($(this).attr('id') == 'ca_sort_arrive_time'){
            if(sortType == 'asc'){
                globalFlights.flights.sort(sortArriveTimeAsc);
            }else{
                globalFlights.flights.sort(sortArriveTimeDesc);
            }
        } else {
            if(sortType == 'asc'){
                globalFlights.flights.sort(sortPriceFLightsAsc);
            }else{
                globalFlights.flights.sort(sortPriceFLightsDesc);
            }
        }
        $('#ca_flights').html("");

        if(globalFlights.type_search == 'return_trip'){
            $.tmpl('flightWR', globalFlights.flights).appendTo('#ca_flights');
        } else {
            $.tmpl('flightOD', globalFlights.flights).appendTo('#ca_flights');
        }
    });

    $('.ca_btn_no_seats').live('click', function(){return false});
    $('.ca_btn_order').live('click', function(){
		if(openNewTab){
			$(this).attr('target','_blank');
		}
	});
});
