function PayForm(object, isAdm, standartDays, businessDays) {

    this.lang = object ? object : "ru";
    this.sesDepartDate = null;
    this.sesAirport = null;
    this.sesDirection = null;
    this.sesService = null;
    this.sesTariff = null;
    this.sesSeat = null;
    this.sesTripTime = null;
    this.sesTicketQuantity = null;
    this.admForm = isAdm ? isAdm : false;
    this.seatTickedIdMap;
    this.standartDays = standartDays ? standartDays : 15;
    this.businessDays = businessDays ? businessDays : 30;
    this.maxDate_std = new Date((new Date()).getTime() + this.standartDays * 24 * 3600 * 1000);
    this.maxDate_bus = new Date((new Date()).getTime() + this.businessDays * 24 * 3600 * 1000);
    this.services = new Array();
    this.prices = new Array();
    this.utilUrl = 'util/orderutil.sx?lang=' + this.lang;

    this.loading = false;
    this.loaded = false;

    this.purchasing = false;

    this.messages_en = {
        'wrong_airport':'Choose the airport, please',
        'didnt_agree':'You should agree with the transport rules for pay the ticket',
        'contact_adm':'Error buying ticket. contact the administrator, please',
        'select_date':'Select trip date',
        'noMoreSeats':'No seats left. Choose another trip, please',
        'noMoreTrips' :'No more trips for today. Pick another date',
        'daysOverLimit1' : 'You cant buy ticket with departure date ',
        'daysOverLimit2' : ' days after current date',
        'selectTrip' : 'Please, select trip'
    };

    this.messages_ru = {
        'wrong_airport':'Пожалуйста, выберите аэропорт',
        'didnt_agree':'Для оплаты билета необходимо согласиться с правилами оформления билета',
        'contact_adm':'Произошла ошибка при покупке билета. Обратитесь к администратору',
        'select_date':'Выберите дату поездки',
        'noMoreSeats':'Не осталось мест в бизнесс-классе. Пожалуйста, выберите другой рейс',
        'noMoreTrips':'Сегодня рейсов по этому направлению больше не будет, выберите другую дату',
        'daysOverLimit1' : 'Вы не можете покупать билеты более чем за ',
        'daysOverLimit2' : ' дней до отправления',
        'selectTrip' : 'Выберите рейс'
    };


}

PayForm.prototype.getMessage = function(code) {
    if (code) {
        if (this.lang == 'ru') {
            return this.messages_ru[code];
        } else {
            return this.messages_en[code];
        }
    } else return "";
};


/**
 * Парсит хэш строку, выдавая параметры в объект
 * @param str Строка с хешем: #param=value&param1=value1&...
 */
PayForm.prototype.setParamsFromHash = function(str) {
    if (!str)
        return;
    var result = new Object();
    var buf = str.substring(1);
    while (buf.length > 0) {
        var ampInd = buf.indexOf("&");
        var param = ampInd > -1 ? buf.substring(0, ampInd) : buf;
        buf = buf.substring(buf.indexOf(param) + param.length + 1);
        var key = param.substring(0, param.indexOf("="));
        param = param.substring(param.indexOf("=") + 1);
        result[key] = param;
    }
    if (result) {
        this.sesAirport = result['airport'];
        this.sesDepartDate = result['departdate'];
        this.sesDirection = result['direction'];
        this.sesService = result['class'];
        this.sesTariff = result['tarif'];
        this.sesTripTime = result['trip'];
        this.sesSeat = result['place'];
        this.sesTicketQuantity = result['ticketQuantity'];
    }
};
/**
 * Зашружаем ли форму из сесии или по гет-урлу или по бэку
 */
PayForm.prototype.hasParamsFromSession = function() {
    if (this.sesDepartDate != null && this.sesAirport != null && this.sesService != null && !this.loaded) {
        this.loading = true;
        return true;
    }
    return  false;//todo - возможно проверку нужно усложнить
};

PayForm.prototype.loadFormFromSession = function() {
    if (this.sesDirection) {
        var $radios = $('input:radio[name=direction]');
        $radios.filter('[value=' + this.sesDirection + ']').attr('checked', true);
    }
    if (this.sesDepartDate) {
        $('#payform input[name=datepicker]').val(this.sesDepartDate);
    }
    if (this.sesAirport) {
        $('#payform select[name=airport]').val(this.sesAirport);
        $('#payform select[name=airport]').change(); //todo - зачем тут был этот ончейндж? проверить
    }

    if (this.sesTicketQuantity) {
        $('#ticketQuantity').val(this.sesTicketQuantity);
    }
};
/**
 * Находимся ли мы в режиме загрузки формы из сессии
 * @param el элемент для которого проверяется
 */
PayForm.prototype.isLoading = function(el) {
    return this.loading && !this.loaded;
    /*var result = el.attr('sxLoaded') ? false : true;
     el.attr('sxLoaded', 'true');
     return result;*/
};


PayForm.prototype.setUpCalendar = function() {
    if (this.lang != 'ru')
        $.datepicker.setDefaults($.datepicker.regional['']);
    if (!this.admForm)
        $.datepicker.setDefaults({ hideIfNoPrevNext: true, numberOfMonths: [1, 3] });
    var _maxDate = '+' + Math.max(this.standartDays, this.businessDays) + 'd';
    $("#datepicker").datepicker({ dateFormat: 'dd-mm-yy', maxDate: _maxDate, minDate: '-0d' });

};

PayForm.prototype.calChanged = function() {
    var date = $.datepicker.parseDate('dd-mm-yy', $("#datepicker").val());
    $('#payform input[name=day]').val($.datepicker.formatDate('dd', date));
    $('#payform input[name=month]').val($.datepicker.formatDate('mm', date));
    $('#payform input[name=year]').val($.datepicker.formatDate('yy', date));
    this.requestTime();
    if ("2" != $('#payform select[name=service]').val()) {
        this.updateTariffs($('#payform select[name=tariff]').val());
    }
};

PayForm.prototype.airportChanged = function() {
    this.updateServices();
};


PayForm.prototype.updateServices = function() {
    if (!$('#payform select[name=airport]').val()) {
        return;
    }
    var serviceEL = $('#payform select[name=service]');
    var urlStr = "";
    urlStr += "&airport=" + $('#payform select[name=airport]').val();
    urlStr += "&cmd=airportChanged";
    var _this = this;//
    $.ajax({
        url : _this.utilUrl + urlStr,
        async : true,
        dataType: 'json',
        beforeSend: function() {
        },
        success: function(response) {
            serviceEL.html('');
            for (var key in response) {
                var title = response[key];
                var selected = _this.isLoading(serviceEL) && _this.sesService && _this.sesService == key ? 'selected="true"' : '';
                serviceEL.append('<option value="' + key + '" ' + selected + ' >' + title + '</option>');
            }
            _this.serviceChanged();
        }
    });
};

PayForm.prototype.isNewForm = function() {
    return $('#vagon') && $('#vagon').html() != null && $('#vagon').html() != '';
};

PayForm.prototype.serviceChanged = function() {
    if (!this.departDateIsDefined()) {
        $('#payform select[name=service]').val("1");
        alert(this.getMessage('select_date'));
        return false;
    }
    $('#tripPrice').html('');
    this.updateTariffs();
    if ("2" == $('#payform select[name=service]').val()) {
        $('#ticketQuantity').val(1);
        $('#ticketQuantity').attr('disabled', 'disabled');
        if (this.isNewForm()) {//Новая сайтовая версия
            setTimeout(function() {
                $('#vagon .seats').find('.loading').hide().end().find('.data').show();
            }, 1000);
            $('#vagon').show();
        } else {//Старая версия
            $('#seats_loading').show();
            $('#trainSeats').show();
            $('#tripTime').show();
        }
        this.requestTime();
    } else {
        $('#ticketQuantity').removeAttr('disabled');
        $('#payform select[name="trip_time"]').html('');
        $('#id_place').val('');
        if (this.isNewForm()) {//Новая сайтовая версия
            $('#vagon').hide();
        } else {
            $('#trainSeats').fadeOut();
            $('#tripTime').fadeOut();
        }
    }
};

PayForm.prototype.updateTariffs = function(currentTariff) {
    if (!$('#payform select[name=airport]').val() || !$('#payform select[name=service]').val()) {
        return;
    }
    var tariffEL = $('#payform select[name=tariff]');
    var urlStr = "";
    urlStr += "&airport=" + $('#payform select[name=airport]').val();
    urlStr += "&service=" + $('#payform select[name=service]').val();
    if ($("#datepicker").val() != ' - Выбор - ') {
        urlStr += "&departDate=" + $("#datepicker").val();
    }
    urlStr += "&cmd=serviceChanged";
    var _this = this;
    $.ajax({
        url : _this.utilUrl + urlStr,
        async : true,
        dataType: 'json',
        beforeSend: function() {
        },
        success: function(response) {
            tariffEL.html('');
            var s = true;
            this.prices = new Object();
            var selected = null;
            for (var key in response) {
                var title = response[key].substring(0, response[key].indexOf(";"));
                var price = response[key].substring(response[key].indexOf(";") + 1);
                selected = _this.isLoading(tariffEL) && _this.sesTariff && _this.sesTariff == key ? key : currentTariff && currentTariff == key ? key : null;
                $('#payform select[name=tariff]').append('<option value="' + key + '" ' + selected + ' >' + title + '</option>');
                _this.prices[key] = price;
                s = false;
            }
            if (selected) {
                tariffEL.val(selected);
            }
            _this.calculateSum();
        }
    });
    if ($('#classSelect').val() != 2) {
        _this.loaded = true;
    }
};

PayForm.prototype.tariffChanged = function() {
    this.calculateSum();
    var langStr = "&lang=" + this.lang;
    $.ajax({
        url : "util/gettariffdescr.sx",
        async : true,
        data : "tariffCode=" + $('#payform select[name=tariff]').val() + langStr,
        beforeSend: function() {
        },
        success: function(response) {
            $('#tdesc_1_1').html(response);
        }
    });
};
PayForm.prototype.requestTime = function() {
    if ("2" != $('#payform select[name=service]').val())
        return;
    if ($('#classSelect').val() == 0)
        return;
    $('#tripTimeSelect').removeAttr('disabled');
    //Очищаем селект
    $('#tripTimeSelect').html('<option value="">выбор</option>');
    //Дата запроса
    var date = $("#datepicker").val();
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var urlStr = "&airport=" + airport;
    urlStr += "&direction=" + direction;
    urlStr += "&cmd=requestTime";
    urlStr += "&departDate=" + date;
    var tripTimeEL = $('#tripTimeSelect');
    var _this = this;
    $.ajax({
        url: _this.utilUrl + urlStr,
        async : true,
        dataType: 'json',
        beforeSend: function() {
            $('#seats').html('');
            $('#seats_loading').fadeIn();
            $('#seat_selected').html('---');
            $('#countFree').html('');
            $('#payform input[name="place"]').val('');
        },
        success: function(response) {
            //tripTimeEL.html('');
            //var loading = isLoading($('#tripTimeSelect'));
            var loadingValue = null;
            for (var key in response) {
                var value = response[key];
                if (value == 'na') {
                    tripTimeEL.attr('disabled', 'disabled');
                    tripTimeEL.fadeOut();
                    alert(_this.getMessage("noMoreTrips"));
                    $('#payform select[name=service]').val("1");
                    $('#payform select[name=service]').change();
                    return;
                    break;
                } else {
                    tripTimeEL.removeAttr('disabled');
                    tripTimeEL.fadeIn();
                }
                if (_this.isLoading(tripTimeEL) && _this.sesTripTime && value == _this.sesTripTime) {
                    loadingValue = key;
                }
                tripTimeEL.append('<option value="' + key + '" id="' + key + '">' + value + '</option>');
            }
            if (loadingValue) {
                $('#tripTimeSelect').val(loadingValue);
            }
            //на форме админского бронирования, кроме sxRequestSeats необходимо дергать еще одну функцию.
            //поэтому дергаем все что есть в onchange
            if (!tripTimeEL.attr('disabled'))
                if (tripTimeEL.attr('onchange') && tripTimeEL.val()) {
                    tripTimeEL.trigger('change');
                }
        }
    });
};

PayForm.prototype.requestSeats = function() {
    if ($('#classSelect').val() == 1)
        return;
    var time = $('#tripTimeSelect').val();
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var url = '&cmd=requestSeats&airport=' + airport + '&direction=' + direction + '&tripTime=' + time;
    url += "&departDate=" + $("#datepicker").val();
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : false,
        dataType: 'json',
        beforeSend: function() {
            $('#seats').html('');
            $('#seats_loading').fadeIn();
            $('#seat_selected').html('---');
            $('#countFree').html('');
            $('#payform input[name="place"]').val('');
        },
        success: function(response) {
            for (var key in response) {
                var value = response[key];
                if (_this.isLoading(null) && _this.sesSeat && key == _this.sesSeat && value == 'free') {
                    value = 'selected';
                }
                $('#seats').append('<div id="seat_' + key + '" class="' + value + '">' + key + '</div>');
            }
            _this.setUpSeats();
        }
    });
    return false;
};


PayForm.prototype.requestSeats2 = function() {
    var time = $('#tripTimeSelect').val();
    if ($('#classSelect').val() == 1)
        return;
    if (!time) {
        $('#seats').html('');
        $('#payform input[name="place"]').val('');
        return;
    }
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var url = '&cmd=requestSeats&airport=' + airport + '&direction=' + direction + '&tripTime=' + time;
    url += "&departDate=" + $("#datepicker").val();
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : false,
        dataType: 'json',
        beforeSend: function() {
            $('#seats').html('');
            // $('#seats_loading').fadeIn();
            //  $('#seat_selected').html('---');
            //  $('#countFree').html('');
            $('#payform input[name="place"]').val('');
        },
        success: function(response) {
            var s = "";
            s += '<table><tr>';
            var i = 1;
            var free = 0;
            //var firstFree = 0;
            $('#seat_selected').html('---');
            for (var key in response) {
                var value = response[key];
                //if
                /*if ((_this.isLoading(null) && _this.sesSeat && key == _this.sesSeat && value == 'free') || (!_this.sesSeat && !seatSettedUp && value == 'free')) {
                 value = 'selected';
                 $('#payform input[name="place"]').val(key);
                 $('#seat_selected').html('<b>' + key + '</b>');
                 seatSettedUp = true;
                 } */
                if (value != 'sold')
                    free++;
                if ((i - 1) % 4 == 0) {
                    if (i > 1)
                        s += '</td><td>';
                    else
                        s += '<td>';
                }
                s += '<i id="seat' + key + '" class="' + (value != 'admin' ? value : 'sold') + '" onclick="return {seat: ' + key + '};">' + key + '</i>';
                if (i > 1 && i % 2 == 0) {
                    s += '<b class="aisle"></b>';
                }
                i++;
            }
            s += '</tr></table>';
            s += '<div class="stats"><div><i></i> Свободно ' + free + '</div><div><i class="reserved"></i> Забронировано</div><div><i class="sold"></i> Продано</div></div>';
            $('#seats').html(s);

            if (_this.isLoading(null) && _this.sesSeat && $('#seat' + _this.sesSeat).attr('class') == 'free' && _this.sesTripTime && _this.sesTripTime == $('#tripTimeSelect option:selected').text()) {
                $('#seat' + _this.sesSeat).attr('class', 'selected');
                $('#payform input[name="place"]').val(_this.sesSeat);
                $('#seat_selected').html('<b>' + _this.sesSeat + '</b>');
            } else {
                var el = $('#seats').find('i.free:first');
                if (el && el.length > 0) {
                    el.attr('class', 'selected');
                    $('#payform input[name="place"]').val(el.attr('id').substring(4));
                    $('#seat_selected').html('<b>' + el.attr('id').substring(4) + '</b>');
                } else {
                    $('#seat_selected').html('<b>мест нет</b>');
                }
            }
            $('#vagon')
                .find('.seats table i')
                .filter(':not(.reserved)').filter(':not(.sold)')
                .css('cursor', 'pointer')
                .click(function() {
                    $('#payform input[name="place"]').val(this.onclick().seat);
                    $('#seat_selected').html('<b>' + this.onclick().seat + '</b>');
                    $('#vagon')
                        .find('.seats table i')
                        .filter(':not(.reserved)').filter(':not(.sold)').removeClass("selected");
                    $(this).removeClass("free");
                    $(this).addClass("selected");

                });

        }
    });
    return false;
};
PayForm.prototype.selectSeat = function(seat) {
    $('#payform input[name="place"]').val(seat);
};

PayForm.prototype.setUpSeats = function() {
    $('#seats_loading').fadeOut();
    if (this.getIsAdm()) {
        $('#seats > div.free,#seats > div.selected')
            .click(function() {
                $('#seat_selected').html(this.innerHTML);
                $('#payform input[name="place"]').val(this.innerHTML);
                if ($('#seats > div.selected').get() != '')
                    $('#seats > div.selected').get(0).className = 'free';
                this.className = 'selected';
            });
        $('#seats > div.admin')
            .click(function() {
                if (confirm('Снять бронь?')) {
                    PF.cancelBooking($("#seat_" + this.innerHTML).attr("sxid"));
                    refreshAdmForm();
                }
            });
        $('#seats > div.reserved')
            .click(function() {
                if (confirm('Снять бронь?')) {
                    PF.cancelBooking($("#seat_" + this.innerHTML).attr("sxid"));
                    refreshAdmForm();
                }
            });
    } else {
        $('#seats > div.free,#seats > div.selected')
            .click(function() {
                $('#seat_selected').html(this.innerHTML);
                $('#payform input[name="place"]').val(this.innerHTML);
                if ($('#seats > div.selected').get() != '')
                    $('#seats > div.selected').get(0).className = 'free';
                this.className = 'selected';
            });
    }
    if ($('#seats > div.selected').size()) {
        this.loaded = true;
        var seat = $('#seats > div.selected').get(0).innerHTML;
        $('#seat_selected').html(seat);
        $('#payform input[name="place"]').val(seat);
    } else if ($('#seats > div.free').size()) {
        var seat = $('#seats > div.free').get(0).innerHTML;
        $('#seats > div.free').get(0).className = 'selected';
        $('#seat_selected').html(seat);
        $('#payform input[name="place"]').val(seat);
    }
    $('#seats > div').fadeIn();
    $('#countFree').html('(' + $('#seats > div.free').size() + ')');
};

PayForm.prototype.calculateSum = function() {
    var multiply = $('#ticketQuantity') && $('#ticketQuantity').val() != null
        && $('#classSelect').val() && $('#classSelect').val() != 2 ? $('#ticketQuantity').val() : 1;
    var sum = this.prices[$('#payform select[name=tariff]').val()] ? this.prices[$('#payform select[name=tariff]').val()] * multiply : '';
    $('#tripPrice').html(sum);
    $('#price').val(sum);
    return sum;
};

PayForm.prototype.cancelBooking = function(seatId) {
    var url = '&cmd=cancelBooking&seatId=' + seatId;
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : false,
        dataType: 'text',
        success: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Бронь успешно отменена");
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Ошибка при отмене брони");
        }
    });
    return false;
};

PayForm.prototype.departDateIsDefined = function() {
    try {
        var date = $.datepicker.parseDate('dd-mm-yy', $("#datepicker").val());
    } catch (e) {
        // alert(this.getMessage('select_date'));
        return false;
    }
    return true;
};

PayForm.prototype.confirm = function() {
    var wrong_airport = this.getMessage('wrong_airport');
    var didnt_agree = this.getMessage('didnt_agree');
    try {
        var date = $.datepicker.parseDate('dd-mm-yy', $("#datepicker").val());
    } catch (e) {
        alert(this.getMessage('select_date'));
        return false;
    }
    var begDay = new Date();
    begDay.setHours(0);
    begDay.setMinutes(0);
    begDay.setSeconds(0);
    begDay.setMilliseconds(0);
    if (begDay > date) {
        alert("Вы не можете покупать билет задним числом");
        return false;
    }
    var isBusiness = $('#payform select[name="service"]').val() != 1;
    var checkDate = isBusiness ? this.maxDate_bus : this.maxDate_std;
    if (date > checkDate) {
        alert(this.getMessage('daysOverLimit1') + (isBusiness ? this.businessDays : this.standartDays) + this.getMessage('daysOverLimit2'));
        return false;
    }

    if (!($('#payform select[name="airport"]').val())) {
        alert(wrong_airport);
        return false;
    }
    if ($('#agree') && !$('#agree').attr('checked')) {
        alert(didnt_agree);
        return false;
    }
    var sum = this.calculateSum();
    if (!sum || sum == null || sum == "") {
        return false;
    }

    if ($('#payform select[name="trip_time"] option:selected').text() && !$('#id_place').val()) {
        if (!$('tripTimeSelect').val()) {
            alert(this.getMessage('selectTrip'));
        } else
            alert(this.getMessage('noMoreSeats'));
        return false;
    }
    this.replaceLocation();
    //Пихаем заголовки выбранных в селектах полей для того чтобы передать их на форму выбора способов платежа
    $('#airport_title').val($('#payform select[name="airport"] option:selected').text());
    $('#class_title').val($('#payform select[name="service"] option:selected').text());
    $('#tarif_title').val($('#payform select[name="tariff"] option:selected').text());
    $('#trip_title').val($('#payform select[name="trip_time"] option:selected').text());
    $('#payform').submit();
};

PayForm.prototype.replaceLocation = function() {
    window.location.hash = this.getFormUrl();
};

PayForm.prototype.getFormUrl = function() {
    var hashStr = "airport=" + $('#payform select[name=airport]').val() + "&departdate=" + $("#datepicker").val();
    hashStr += "&class=" + $('#payform select[name=service]').val();
    hashStr += "&direction=" + $('#payform input[name="direction"]:checked').val();
    hashStr += "&trip=" + $('#payform select[name="trip_time"] option:selected').text();
    hashStr += "&tarif=" + $('#payform select[name=tariff]').val();
    if ($('#id_place').val()) {
        hashStr += "&place=" + $('#id_place').val();
    }
    hashStr += "&ticketQuantity=" + $('#ticketQuantity').val();
    return hashStr;
};
///////////////////////////Админское бронирование///////////////////////////////////////////////////////////////////////
PayForm.prototype.requestTickets = function() {
    if ($('#classSelect').val() == 1)
        return;
    var time = $('#tripTimeSelect').val();
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var url = '&cmd=requestTickets&airport=' + airport + '&direction=' + direction + '&tripTime=' + time;
    url += "&departDate=" + $("#datepicker").val();
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : true,
        dataType: 'json',
        beforeSend: function() {
            $('#tickets').html('');
        },
        success: function(response) {
            var change = false;
            var ticketLnk = '<b><a href=\'admin/ticketlist.htm?cls=emTicket&objCriteria=([emTicket.ouid] IN "';
            //$('#tickets').html('<b><a href="admin/objectsofclass.htm?cls=emTicket&objCriteria=([emTicket.ouid] IN "');
            for (var key in response) {
                $("#seat_" + response[key]).attr("sxid", key);
                change = true;
                ticketLnk = ticketLnk + key + ",";
            }
            ticketLnk = ticketLnk + '")\'' + ' target=\'_blank\'>Перейти к списку билетов</a></b>';
            if (change) {
                $('#tickets').html(ticketLnk);
            }
        }
    });

    return false;
};
PayForm.prototype.confirmCashier = function(baseUrl) {
    var wrong_airport = this.getMessage('wrong_airport');
    var didnt_agree = this.getMessage('didnt_agree');
    if (!($('#payform select[name="airport"]').val())) {
        alert(wrong_airport);
        return false;
    }
    if ($('#payform select[name="trip_time"] option:selected').text() && !$('#id_place').val()) {
        alert(this.getMessage('noMoreSeats'));
        return false;
    }
    if (!$('.checkbox:checked').size()) {
        alert(didnt_agree);
        return false;
    }
    //Проверили, теперь бронируем.
    this.purchasing = true;
    this.buyCashier(baseUrl);
};


PayForm.prototype.confirmAdmin = function() {
    var wrong_airport = this.getMessage('wrong_airport');
    var didnt_agree = this.getMessage('didnt_agree');
    if (!($('#payform select[name="airport"]').val())) {
        alert(wrong_airport);
        return false;
    }
    if ($('#payform select[name="trip_time"] option:selected').text() && !$('#id_place').val()) {
        alert(this.getMessage('noMoreSeats'));
        return false;
    }
    if (!$('.checkbox:checked').size()) {
        alert(didnt_agree);
        return false;
    }
    $('#conf_date').html('');
    $('#conf_date').append($('#datepicker').val());

    $('#conf_direction').html('');
    var title = $('#payform input[name="direction"]:checked').val() == '1' ? ', в аэропорт' : ', в Москву';
    $('#conf_direction').append($('#payform select[name="airport"] option:selected').text() + title);

    $('#conf_tarif').html('');
    $('#conf_tarif').append($('#payform select[name="tariff"] option:selected').text());


    $('#conf_class').html('');
    $('#conf_class').append($('#payform select[name="service"] option:selected').text());

    var trip = $('#payform select[name="trip_time"] option:selected').text();
    if (trip) {
        $('#tr_conf_trip').show();
        $('#tr_conf_seat').show();
    } else {
        $('#tr_conf_trip').hide();
        $('#tr_conf_seat').hide();
    }
    $('#conf_trip').html('');
    $('#conf_trip').append($('#payform select[name="trip_time"] option:selected').text());

    $('#conf_seat').html('');
    $('#conf_seat').append($('#id_place').val());

    $('#conf_price').html('');
    $('#conf_price').append($('#price').val());


    $('#fadein-layout').fadeIn();
    $('#confirmPay').fadeIn();
    $(document).keydown(function (e) {
        if (e.which == '13') {
            if ($('#submitdiv').attr('onclick')) {
                $('#submitdiv').trigger('click');
            }
        } else if (e.which == '27') {
            this.cancelCashier();
        }
    });
    return false;
};

PayForm.prototype.showCashier = function(url) {
    $('#conf_date').html('');
    $('#conf_date').append($('#datepicker').val());

    $('#conf_direction').html('');
    var title = $('#payform input[name="direction"]:checked').val() == '1' ? ', в аэропорт' : ', в Москву';
    $('#conf_direction').append($('#payform select[name="airport"] option:selected').text() + title);

    $('#conf_tarif').html('');
    $('#conf_tarif').append($('#payform select[name="tariff"] option:selected').text());


    $('#conf_class').html('');
    $('#conf_class').append($('#payform select[name="service"] option:selected').text());

    var trip = $('#payform select[name="trip_time"] option:selected').text();
    if (trip) {
        $('#tr_conf_trip').show();
        $('#tr_conf_seat').show();
    } else {
        $('#tr_conf_trip').hide();
        $('#tr_conf_seat').hide();
    }
    $('#conf_trip').html('');
    $('#conf_trip').append($('#payform select[name="trip_time"] option:selected').text());

    $('#conf_seat').html('');
    $('#conf_seat').append($('#id_place').val());

    $('#conf_price').html('');
    $('#conf_price').append($('#price').val());


    $('#fadein-layout').fadeIn();
    $('#confirmPay').fadeIn();
    $(document).keydown(function (e) {
        if (e.which == '13') {
            if ($('#submitdiv').attr('onclick')) {
                $('#submitdiv').trigger('click');
            }
        } else if (e.which == '27') {
            this.payCashier();
        }
    });
    return false;
};

PayForm.prototype.cancelCashier = function() {
    var ticketId = $('#ticketId').val();
    var url = '&cmd=cancelCashier&ticketId=' + ticketId;
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : true,
        dataType: 'json',
        beforeSend: function() {
            $('#fadein-layout').fadeOut();
            $('#confirmPay').fadeOut();
        },
        success: function(response) {
            var result = response['result'];
            if (result == 'true') {
                alert('Билет отменен');
                _this.refreshForm();
            } else if (response['errorMsg']) {
                alert(response['errorMsg']);
            } else {
                alert(_this.getMessage('contact_adm'))
            }
        }
    });
    $('#fadein-layout').fadeOut();
    $('#confirmPay').fadeOut();
    $(document).unbind('keydown');
    return false;
};
PayForm.prototype.admBook = function() {
    var time = $('#tripTimeSelect').val() ? $('#tripTimeSelect').val() : '';
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var service = $('#payform select[name="service"] option:selected').val();
    var tariff = $('#payform select[name="tariff"] option:selected').val();
    var seat = $('#id_place').val();
    var price = $('#price').val();
    var phone = $('#clientPhoneNum').val();
    var url = '&cmd=admBook&airport=' + airport + '&direction=' + direction + '&tripTime=' + time;
    url += "&departDate=" + $("#datepicker").val() + "&service=" + service + "&seat=" + seat + "&tariff=" + tariff + '&price=' + price + '&phone=' + phone;
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : false,
        dataType: 'json',
        beforeSend: function() {
            $('#confirmPay').fadeOut();
        },
        success: function(response) {
            $('#ticketInfo').fadeIn();
            var ticketId = response['ticketId'];
            var ticketUN = response['ticketUN'];
            var ticketAir = response['airport'];
            var ticketDir = response['direction'];
            var ticketDD = response['depDate'];
            var ticketDT = response['depTime'];
            var ticketPlace = response['place'];
            if (ticketId && ticketUN) {
                $('#ticketinfo_id').html('');
                $('#ticketinfo_uniqueNum').html('');
                $('#ticketinfo_airport').html('');
                $('#ticketinfo_direction').html('');
                $('#ticketinfo_depDate').html('');
                $('#ticketinfo_depTime').html('');
                $('#ticketinfo_place').html('');
                $('#ticketinfo_id').append(ticketId);
                $('#ticketinfo_uniqueNum').append(ticketUN);
                $('#ticketinfo_airport').append(ticketAir);
                $('#ticketinfo_direction').append(ticketDir);
                $('#ticketinfo_depDate').append(ticketDD);
                $('#ticketinfo_depTime').append(ticketDT);
                $('#ticketinfo_place').append(ticketPlace);
                if (response['errorMsg']) {
                    alert(response['errorMsg']);
                }
            } else if (response['errorMsg']) {
                alert(response['errorMsg']);
                refreshAdmForm();
            } else {
                alert(_this.getMessage('contact_adm'))
            }
        }
    });
    return false;
};
PayForm.prototype.payCashier = function(baseUrl) {
    var ticketId = $('#ticketId').val();
    var printUrl = $('#ticketUrl').val();
    var url = '&cmd=payCashier&ticketId=' + ticketId;
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : true,
        dataType: 'json',
        beforeSend: function() {
            $('#fadein-layout').fadeOut();
            $('#confirmPay').fadeOut();
        },
        success: function(response) {
            var result = response['result'];
            if (result == 'true') {
                window.open(baseUrl + printUrl, "_blank", "height=" + 700 + ",width=" + 850 + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
                _this.refreshForm();
            } else if (response['errorMsg']) {
                alert(response['errorMsg']);
            } else {
                alert(_this.getMessage('contact_adm'))
            }
        }
    });
};
PayForm.prototype.buyCashier = function(baseUrl) {
    $(document).unbind('keydown');
    var time = $('#tripTimeSelect').val() ? $('#tripTimeSelect').val() : '';
    var airport = $('#payform select[name="airport"]').val();
    var direction = $('#payform input[name="direction"]:checked').val();
    var service = $('#payform select[name="service"] option:selected').val();
    var tariff = $('#payform select[name="tariff"] option:selected').val();
    var seat = $('#id_place').val();
    var price = $('#price').val();
    var url = '&cmd=cashierBuy&airport=' + airport + '&direction=' + direction + '&tripTime=' + time;
    url += "&departDate=" + $("#datepicker").val() + "&service=" + service + "&seat=" + seat + "&tariff=" + tariff + '&price=' + price;
    var _this = this;
    $.ajax({
        url: _this.utilUrl + url,
        async : true,
        dataType: 'json',
        beforeSend: function() {
            $('#fadein-layout').fadeOut();
            $('#confirmPay').fadeOut();
        },
        success: function(response) {
            var url = response['url'];
            var ticketId = response['ticketId'];
            if (url) {
                $('#ticketId').val(ticketId);
                $('#ticketUrl').val(url);
                $('#ticketId_caption').html(ticketId);
                _this.showCashier(url);
            } else if (response['errorMsg']) {
                alert(response['errorMsg']);
            } else {
                alert(_this.getMessage('contact_adm'))
            }
        }
    });
    return false;
};

PayForm.prototype.refreshForm = function() {
    $('#ticketinfo').fadeOut();
    var loc = window.location.toString();
    var pos = loc.lastIndexOf("?");
    var posSharp = loc.lastIndexOf("#");
    loc = pos > 0 ? loc.substring(0, pos + 1) + this.getFormUrl() : posSharp > 0 ? loc.substring(0, posSharp) + "?" + this.getFormUrl() : loc + "?" + this.getFormUrl();
    this.replaceLocation();
    $('#confirmPay').fadeOut();
    $('#ticketInfo').fadeOut();
    $('#fadein-layout').fadeOut();
    window.location = loc;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//------------------------------Старые функции без изменений------------------------------------------------------------
function show_big_img(winnum, title, width, height, imgurl) {
    var im = window.open('', 'win' + winnum, 'top=40,left=40,width=' + width + ',height=' + height + ',scrollbars=no,menu=no,status=yes,resizable=no');
    im.focus();
    im.document.open("text/html");
    im.document.write('<html><title>' + title + '</title><body leftmargin=0 topmargin=0 marginwidth=0 marginheight=0 bgcolor=#ffffff><img src=' + imgurl + '></body></html>');
    im.document.close();
}
function userSendFeedback(lang) {
    $('#sendok').hide();
    $('#sendfail').hide();
    var err_fbname = lang == 'en' ? 'Mandatory field \"Name\" is empty' : 'Поле \"Имя\" не заполнено.';
    var err_fbemail = lang == 'en' ? 'Mandatory field \"Email\" is empty' : 'Поле \"Эл. почта\" не заполнено.';
    var err_fbphone = lang == 'en' ? 'Mandatory field \"Phone\" is empty' : 'Поле \"Телефон\" не заполнено.';
    var err_fbtext = lang == 'en' ? 'Mandatory field \"Message\" is empty' : 'Поле \"Сообщение\" не заполнено.';

    var fbName = $('#feedbackform input[name="name"]').val();
    if (fbName == null || fbName == '') {
        alert(err_fbname);
    }
    var fbEmail = $('#feedbackform input[name="email"]').val();
    if (fbEmail == null || fbEmail == '') {
        alert(err_fbemail);
    }
    var fbPhone = $('#feedbackform input[name="phone"]').val();
    if (fbPhone == null || fbPhone == '') {
        alert(err_fbphone);
    }
    var fbText = $('#feedbackform textarea#text').val();
    if (fbText == null || fbText == '') {
        alert(err_fbtext);
    }

    $.ajax({
        type : "POST",
        url : $('#feedbackform').attr('action'),
        data : "name=" + $('#feedbackform input[name="name"]').val() + "&email=" + $('#feedbackform input[name="email"]').val() +
            "&phone=" + $('#feedbackform input[name="phone"]').val() + "&text=" + $('#feedbackform textarea#text').val(),
        async : true,
        success: function(response) {
            if (response == '0') {
                $('#sendok').toggle();
            } else {
                $('#sendfail').toggle();
            }
        }
    });
    return false;
}
function senTicketToUser(sendMethod, lang) {
    var err_send_data = lang == 'en' ? 'Error while sending data' : "Произошла ошибка при отправке данных";
    var err_send_sms = lang == 'en' ? 'Error while sending sms' : "Ошибка при отправке sms сообщения";
    var err_phone = lang == 'en' ? 'Wrong phone number' : "Номер телефона указан неверно";
    var incorrect_captcha = lang == 'en' ? 'Incorrect image code' : "Введенный код не совпадает с изображенным на картинке";
    var ticket_send = lang == 'en' ? 'Ticket data sent' : "Данные билета отправлены";
    var err_send_email = lang == 'en' ? 'Error while sending email' : "Ошибка при отправке email";
    var sendMethod = sendMethod;
    $.ajax({
        type : "POST",
        url : $('#getTicket').attr('href'),
        data : "ticket=" + $('#ticketUniqueNum').val() + "&captcha=" + $('#captcha').val() + "&sendMethod=" + sendMethod
            + "&phoneValue=" + $('#phoneValue').val() + "&emailValue=" + $('#emailValue').val(),
        async : true,
        success: function(response) {
            if (response == '1') {
                alert(ticket_send);
            } else if (response == '2') {
                alert(incorrect_captcha);
            } else if (response == '4') {
                alert(err_send_email);
            } else if (response == '5') {
                alert(err_send_sms);
            } else if (response == '6') {
                alert(err_phone);
            } else {
                alert(err_send_data);
            }
            if (sendMethod == 'phone') {
                toggleCaptcha(null);
            }
        }
    });
    return false;
}

function userGetPassword() {
    $('#sendok').hide();
    $('#sendfail').hide();
    $('#captchafail').hide();
    $.ajax({
        type : "POST",
        url : $('#getPassword').attr('href'),
        data : "crUser=" + $('#loginForm input[name="login"]').val() + "&captcha=" + $('#captcha').val(),
        async : true,
        success: function(response) {
            if (response == '0') {
                $('#sendok').toggle();
            } else if (response == '1') {
                $('#sendfail').toggle();
            } else {
                $('#captchafail').show();
            }
            toggleCaptcha();
        }
    });
    return false;
}
function updateProfile(lang) {
    var err_upd_profile = lang == 'en' ? 'Error updating profile' : 'Ошибка обновления профиля';
    var incorrect_email = lang == 'en' ? 'Error updating profile. Incorrect email.' : 'Ошибка обновления профиля. Введен некорректный email.';
    var profile_updated = lang == 'en' ? 'Profile updated' : 'Профиль обновлен';
    var pass_not_mach = lang == 'en' ? 'Password does not match' : 'Ошибка подтверждения пароля';
    $('#msgdiv').hide();
    if ($('#pass').val() == $('#repass').val()) {
        //    if ($('oldpass').val() != '') {
        $.ajax({
            type : "POST",
            url : "util/updateprofile.sx",
            data : "newpass=" + $('#pass').val() + "&email=" + $('#email').val(),
            async : true,
            success: function(response) {
                if (response == '0') {
                    $('#msgdiv').html(profile_updated);
                    $('#msgdiv').show();
                } else if (response == '2') {
                    $('#msgdiv').html(incorrect_email);
                    $('#msgdiv').show();
                } else {
                    $('#msgdiv').html(err_upd_profile);
                    $('#msgdiv').show();
                }
            }
        });
        /*    } else {
         $('#msgdiv').html('Не введен старый пароль');
         $('#msgdiv').show();
         }*/
    } else {
        $('#msgdiv').html(pass_not_mach);
        $('#msgdiv').show();
    }
    return false;
}
function toggleCaptcha() {
    if ($('#captchaDiv').is(':hidden')) {
        $('#jcaptcha').attr('src', 'jcaptcha?' + Math.random());
        $('#captcha').val('');
        $("#captchaDiv").fadeIn();
    } else {
        $("#captchaDiv").fadeOut();
    }
}
function swClass(e) {
    if ($(e).val() == 1) {
        $('#trainSeats').fadeOut();
        $('#tripTime').fadeOut();

        $('#tripPrice').html('250');
    } else {
        $('#seats_loading').show();
        $('#trainSeats').fadeIn();
        $('#tripTime').fadeIn();

        $('#tripPrice').html('700');

        this.requestTime();
    }
}
function sfv(field, event) {
    var value = field.title;

    switch (event) {
        case 'onblur':
            if (field.value == '') field.value = value;
            break;
        case 'onfocus':
            if (field.value == value) field.value = '';
            break;
    }
    return true;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Геттеры и сеттеры для сессионных параметров
PayForm.prototype.getSesDepartDate = function() {
    return this.sesDepartDate;
};
PayForm.prototype.setSesDepartDate = function(val) {
    this.sesDepartDate = val;
};
PayForm.prototype.getSesAirport = function() {
    return this.sesAirport;
};
PayForm.prototype.setSesAirport = function(val) {
    this.sesAirport = val;
};
PayForm.prototype.getSesDirection = function() {
    return this.sesDirection;
};
PayForm.prototype.setSesDirection = function(val) {
    this.sesDirection = val;
};
PayForm.prototype.getSesService = function() {
    return this.sesService;
};
PayForm.prototype.setSesService = function(val) {
    this.sesService = val;
};
PayForm.prototype.getSesTariff = function() {
    return this.sesTariff;
};
PayForm.prototype.setSesTariff = function(val) {
    this.sesTariff = val;
};
PayForm.prototype.getSesSeat = function() {
    return this.sesSeat;
};
PayForm.prototype.setSesSeat = function(val) {
    this.sesSeat = val;
};
PayForm.prototype.getSesTripTime = function() {
    return this.sesTripTime;
};
PayForm.prototype.setSesTripTime = function(val) {
    this.sesTripTime = val;
};
PayForm.prototype.setLang = function(val) {
    this.lang = val;
};

PayForm.prototype.getLang = function() {
    return this.lang;
};

PayForm.prototype.setIsAdm = function(val) {
    this.admForm = val;
};

PayForm.prototype.getIsAdm = function() {
    return this.admForm;
};

PayForm.prototype.getSesTicketQuantity = function() {
    return this.sesTicketQuantity;
};

PayForm.prototype.setSesTicketQuantity = function(val) {
    this.sesTicketQuantity = val;
};
PayForm.prototype.setUpQuantity = function(max) {
    $('#ticketQuantity').html('');
    for (var i = 1; i <= max; i++) {
        $('#ticketQuantity').append('<option value="' + i + '">' + i + '</option>');
    }
    $('#ticketQuantity').val(1);
};

