var cardImages = {
    "VI" : "img/cards/visa.gif",
    "CA" : "img/cards/mc.gif",
    "DC" : "img/cards/dc.gif",
    "JC" : "img/cards/jcb.gif",
    "WM" : "img/cards/wm.gif",
    "KP" : "img/cards/kp.gif",
    "EP" : "img/cards/eport.gif",
    "AX" : "img/cards/ae.gif",
    "YM" : "img/cards/ym.gif",
    "EU" : "img/cards/eu.gif",
    "BO" : "img/cards/bo.gif",
    "GP" : "img/cards/gazprombank.gif",
    "MP" : "img/cards/beeline.gif",
    "DE" : "img/cards/ebanking-de.gif"
};

function Price(id, price, currency, agencyTax, clientId, timeLimit, eTicket) {
    this.id = id;
    this.price = price;
    this.currency = currency;
    this.agencyTax = agencyTax;
    this.clientId = clientId;
    this.isTimeLimit = timeLimit;
    this.isETicket = eTicket;
}

function enableAllPriceRadioButtons() {
    var isTimeLimitOnce = false;
    for (var payType in priceVariants) {
        var payTypePrices = priceVariants[payType];
        for (var priceId in payTypePrices) {
            if (!priceVariants[payType][priceId].isTimeLimit) {
                enableRadioButton("price_" + priceId);
            } else {
                isTimeLimitOnce = true;
            }
        }
    }
    if (isTimeLimitOnce) {
        showTimeLimitVariantMessage();
    }
}

var selectedPriceId = null;
var choosenTicketType = null;
var selectedFormPayAlias = null;
var selectedForwardFlightId = null;
var selectedBackwardFlightId = null;

function writeCardImage(code) {
    var url = cardImages[code];
    if (url) {
        document.write("<img src='" + url + "' alt = ' '/>");
    } else {
        document.write("<img src='img/cards2/" + code + ".gif'/>");
    }
}

function setDate(direction, date) {
    var input = document.getElementById(direction + "Date");
    input.value = date;
    input.setAttribute("class", "c5");
}

function cardsPaymentShow(paymentType) {
    var cards = document.getElementById("cards");
    var ecash = document.getElementById("ecash");
    var spp = document.getElementById("spp");
    if (paymentType == "card" || paymentType == "ecash") {
        if (cards) {
            cards.style.display = "block";
        }
        if (ecash) {
            ecash.style.display = "block";
        }
        if (spp) {
            spp.style.display = "none";
            uncheckChildInputs(spp);
        }
    } else if (paymentType == "spp") {
        if (cards) {
            cards.style.display = "none";
            uncheckChildInputs(cards);
        }
        if (ecash) {
            ecash.style.display = "none";
            uncheckChildInputs(ecash);
        }
        if (spp) {
            spp.style.display = "block";
        }
    } else {
        if (cards) {
            cards.style.display = "none";
            uncheckChildInputs(cards);
        }
        if (ecash) {
            ecash.style.display = "none";
            uncheckChildInputs(ecash);
        }
        if (spp) {
            spp.style.display = "none";
            uncheckChildInputs(spp);
        }
    }
}

function uncheckChildInputs(node) {
	var inputs = node.getElementsByTagName("input");
	for(var i = 0; i < inputs.length; i++) {
		inputs[i].checked = false;
	}
}

function disableNextButton() {
    var next = document.getElementById('pricetable-next-button');
    if (next.disabled == false) {
        next.setAttribute('disabled', 'disabled');
    }
}

function enableNextButton() {
    var next = document.getElementById('pricetable-next-button');
    next.disabled = null;
}

function enableCheckRules() {
    var check = document.getElementById('checkRules');
    check.disabled = null;
    var checkGermany = document.getElementById('checkGermanyRules');
    if(checkGermany) {
        checkGermany.disabled = null;
    }
}

function disableCheckRules() {
    var check = document.getElementById('checkRules');
    check.disabled = 'disabled';
    check.checked = false;
    var checkGermany = document.getElementById('checkGermanyRules');
    if(checkGermany) {
        checkGermany.disabled = 'disabled';
        checkGermany.checked = false;
    }
}

function uncheckedRules() {
    var check = document.getElementById('checkRules');
    check.checked = false;
    var checkGermany = document.getElementById('checkGermanyRules');
    if(checkGermany) {
        checkGermany.checked = false;
    }
}

function disableFlights(flights) {
    for (var i = 0; i < flights.length; i++) {
        var flightElement = document.getElementById(flights[i]);
        flightElement.checked = false;
        flightElement.disabled = true;
    }
}

function disableFlightsAndButton() {
    disableNextButton();
    disableCheckRules();
    disableFlights(flights['forward']);
    if (hasFlightsBack()) {
        disableFlights(flights['back']);
    }
}

function hasFlightsBack() {
    return flights["back"] != null;
}

function hideETicketInfo() {
    var eTicketInfoElement = document.getElementById("eTiketMessageBlock");
    if (eTicketInfoElement != null) {
        eTicketInfoElement.style.display = "none";
        var eTicketTypeInputElement = document.getElementById("eTicketTypeInput");
        var ticketTypeInputElement = document.getElementById("ticketTypeInput");
        eTicketTypeInputElement.disabled = "disabled";
        ticketTypeInputElement.disabled = "disabled";
    }
}

function showDivById(divId, message) {
    var divElement = document.getElementById(divId);
    if (divElement) {
        var divTextElement = document.getElementById(divId + "-text");
        while (divTextElement != null && divTextElement.hasChildNodes()) {
            divTextElement.removeChild(divTextElement.firstChild);
        }
        //добавляем новое сообщение в текстовый блок
        //divTextElement.appendChild(document.createTextNode(message));
        // изменено для возможности вставки хтмл в сообщение
        divTextElement.innerHTML = message;
        divTextElement.style.display = 'block';
        if (divElement != null) {
            divElement.style.display = 'block';
        }
    }
}

function setDefaultStyle(flights) {
    for (var i = 0; i < flights.length; i++) {
        var forwardFlightId = flights[i];
        var flightTBody = document.getElementById("flight-tr-" + forwardFlightId);
        var trElements = flightTBody.getElementsByTagName("tr");
        for (var j = 0; j < trElements.length; j++) {
            trElements[j].style.color = "#000";
        }
    }

}

function setTimeLimitStyle(forwardFlightId) {
    var flightTBody = document.getElementById("flight-tr-" + forwardFlightId);
    var trElements = flightTBody.getElementsByTagName("tr");
    for (var j = 0; j < trElements.length; j++) {
        trElements[j].style.color = "#888";
    }
}

function enableTimeLimitAtentionBlock(paymentTypeAlias) {
    var errorMessage = hoursLimits[paymentTypeAlias].message;
    var errorElement = document.getElementById("time-limit-attention");
    var errorTextElement = document.getElementById("time-limit-attention-text");
    errorElement.style.display = "block";
    while (errorTextElement.hasChildNodes()) {
        errorTextElement.removeChild(errorTextElement.firstChild);
    }
    errorTextElement.appendChild(document.createTextNode(errorMessage));
}

function disableTimeLimitAtentionBlock() {
    var errorElement = document.getElementById("time-limit-attention");
    errorElement.style.display = "none";
}

function setPaymentType(paymentTypeAlias) {
    var paymentTypeInput = document.getElementById("choosen-payment-type");
    paymentTypeInput.value = paymentTypeAlias;
}

/**
 * @param selectedPriceId
 * @param forwardFlightId
 * @param backwardChainId
 * @return boolean
 */
function isETicketVariant(selectedPriceId, forwardFlightId, backwardChainId) {
    return flightVariants[selectedPriceId][forwardFlightId][backwardChainId];
}

function enableBackwardFlights(forwardFlightId, paymentTypeAlias) {
    resetIsETicket('back');
    var backwardFlights = flightVariants[selectedPriceId][forwardFlightId];
    var thereFlightArrivalTime = flightsTimes[forwardFlightId][1];
    var needMessage = false;

    for (var backwardFlightId in backwardFlights) {
        var backFlightDepartureTime = flightsTimes[backwardFlightId][0];

        var transfergap = hoursLimits['transfergap'].limit;
        var deltaExpired = backFlightDepartureTime - thereFlightArrivalTime > transfergap;

        var isET = backwardFlights[backwardFlightId];
        var ticketType = getTicketType(paymentTypeAlias);

        var isTicketTypeAndFlight = ticketType == 'both' || ticketType == 'paper' || ticketType == 'electronic' && isET;

        if (deltaExpired && isTicketTypeAndFlight) {
            var backwardFlightInput = document.getElementById(backwardFlightId);
            backwardFlightInput.disabled = null;
        } else if (!deltaExpired) {
            setTimeLimitStyle(backwardFlightId);
            needMessage = true;
        } else if (!isTicketTypeAndFlight) {
            needMessage = false;
        }

        if (selectTicketType) {
            createIsETicket(isET, "eticket-td-" + backwardFlightId);
        }
    }
    return needMessage;
}

function nextAble() {
    var check = document.getElementById('checkRules');
    var checkGermany = document.getElementById('checkGermanyRules');
    if(checkGermany) {
        if (!check.disabled && !checkGermany.disabled) {
            if (check.checked && checkGermany.checked) {
                enableNextButton();
            } else {
                disableNextButton();
            }
        }
    }
    else {
        if (!check.disabled) {
            if (check.checked) {
                enableNextButton();
            } else {
                disableNextButton();
            }
        }
    }
}

/*function openWin() {
 myWin= open("detalisation.html","detalisation","width=760,height=400,top=300,left=255,status=no,toolbar=no,menubar=no");
 }*/

function styleChange(el) {
    var cell = document.getElementById('cell');
    var children = cell.childNodes;
    for (var j = 0; j < children.length; j++) {
        if (children[j].tagName == "DIV") {
            children[j].style.background = '#eee';
        }
    }
    el.style.background = "#ccc";
}

/* ~mla события после выбора количества молодежи */
function onCountMLAChange(avalaiblePassengerCount) {
    var select = document.getElementById("count-mla");
    var selectedMLACount = parseInt(select.options[select.selectedIndex].value);

    var childSelectElement = document.getElementById("countChilds");
    var babySelectElement = document.getElementById("babyCount");
    var aaaSelectElement = document.getElementById("count-aaa");
    var pensionerSelectElement = document.getElementById("count-pensioner");
    var selectedChildCount = 0;
    var selectedAAACount = 0;
    var selectedBabyCount = 0;
    var selectedPensionerCount = 0;
    if (selectedMLACount == 0 || !isMlaCheck) {
        if (childSelectElement !=null) {
            selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
        }
        selectedAAACount = 1;
        selectedPensionerCount = 0;
        selectedChildCount = 0;
    }
    if (childSelectElement !=null) {
        changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount, 0);
    }

    if (babySelectElement !=null) {
        var babyLimit = selectedAAACount;
        if (babyLimit > avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount) {
            babyLimit = avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount;
        }

        changeOptionsLength(babySelectElement, babyLimit, 0, 0);
    }
    var aaaFirstCount;
    //если пассажиров"молодежь" и "пенсионер" нет, то взрослый должен быть хотя бы 1
    if ((selectedMLACount == null || selectedMLACount == 0) && (selectedPensionerCount == null || selectedPensionerCount == 0)) {
        aaaFirstCount = 1;
    } else {
        aaaFirstCount = 0;
    }
    /*изменение длинны селекта "aaa" пассажиров*/
    /* - selectedChildCount*/
    changeOptionsLength(aaaSelectElement, avalaiblePassengerCount - selectedMLACount - selectedPensionerCount, selectedAAACount, aaaFirstCount);

    if (pensionerSelectElement != null && !isCpaSeparate) {
        var pensionerFirstCount;
        //если пассажиров"молодежь" и "взрослый" нет, то пенсионер должен быть хотя бы 1
        if ((selectedAAACount == null || selectedAAACount == 0) && (selectedMLACount == 0 && !isMlaCheck)) {
            pensionerFirstCount = 1;
        } else {
            pensionerFirstCount = 0;
        }
        /*изменение длинны селекта "pensioner" пассажиров*/
        /* - selectedChildCount*/
        changeOptionsLength(pensionerSelectElement, avalaiblePassengerCount - selectedMLACount - selectedAAACount, selectedPensionerCount, pensionerFirstCount);
    }

    if (selectedMLACount != 0 && isMlaCheck) {
        if (childSelectElement !=null) {
            childSelectElement.disabled = true;
        }
        if (babySelectElement !=null) {
            babySelectElement.disabled = true;
        }
        selectChildCountChanged(0);
        aaaSelectElement.disabled = true;
        if (pensionerSelectElement != null) {
            pensionerSelectElement.disabled = true;
        }
        /*показываем сообщение для молодежи*/
        enableSpan("mla-message-block");
    } else {
        if (childSelectElement !=null) {
            childSelectElement.disabled = null;
        }
        if (babySelectElement !=null) {
            babySelectElement.disabled = null;
        }
        aaaSelectElement.disabled = null;
        if (pensionerSelectElement != null) {
            pensionerSelectElement.disabled = null;
        }
        disableDiv("mla-message-block");
    }
}
/* ~pensioner события после выбора количества пенсионеров */
function onCountPensionerChange(avalaiblePassengerCount) {
    var select = document.getElementById("count-pensioner");
    var selectedPensionerCount = select.options[select.selectedIndex].value;

    var childSelectElement = document.getElementById("countChilds");
    var babySelectElement = document.getElementById("babyCount");
    var aaaSelectElement = document.getElementById("count-aaa");
    /*var selectedAAACount = aaaSelectElement.options[aaaSelectElement.selectedIndex].value;
    var selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;*/

    /*mla*/
    var mlaSelectElement = document.getElementById("count-mla");

    var selectedChildCount = 0;
    var selectedAAACount = 0;
    var selectedBabyCount = 0;
    var selectedMLACount = 0;

    if (selectedPensionerCount == 0 || !isCpaSeparate) {
        if (childSelectElement !=null) {
            selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
        }
        selectedAAACount = 1;
        selectedMLACount = 0;
        selectedChildCount = 0;
    }
    if (childSelectElement !=null) {
        changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount, 0);
    }

    if (babySelectElement !=null) {
    var babyLimit = selectedAAACount;
    if (babyLimit > avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount) {
        babyLimit = avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount;
    }

    changeOptionsLength(babySelectElement, babyLimit, 0, 0);
    }
    var aaaFirstCount;
    //если пассажиров"молодежь" и "пенсионер" нет, то взрослый должен быть хотя бы 1
    if ((selectedMLACount == null || selectedMLACount == 0) && (selectedPensionerCount == null || selectedPensionerCount == 0)) {
        aaaFirstCount = 1;
    } else {
        aaaFirstCount = 0;
    }
    changeOptionsLength(aaaSelectElement, avalaiblePassengerCount - selectedMLACount - selectedPensionerCount, selectedAAACount, aaaFirstCount);

    if (mlaSelectElement != null && !isMlaCheck) {
        var mlaFirstCount;
        //если пассажиров"молодежь" и "взрослый" нет, то пенсионер должен быть хотя бы 1
        if ((selectedAAACount == null || selectedAAACount == 0) && (selectedPensionerCount == 0 && !isCpaSeparate)) {
            mlaFirstCount = 1;
        } else {
            mlaFirstCount = 0;
        }
        /*изменение длинны селекта "pensioner" пассажиров*/
        /* - selectedChildCount*/
        changeOptionsLength(mlaSelectElement, avalaiblePassengerCount - selectedPensionerCount - selectedAAACount, selectedMLACount, mlaFirstCount);
    }

    if (selectedPensionerCount != 0 && isCpaSeparate) {
        if (childSelectElement !=null) {
            childSelectElement.disabled = true;
        }
        if (babySelectElement !=null) {
            babySelectElement.disabled = true;
        }
        selectChildCountChanged(0);
        aaaSelectElement.disabled = true;
        if (mlaSelectElement != null) {
            mlaSelectElement.disabled = true;
        }
        /*показываем сообщение для молодежи*/
        enableSpan("cpa-message-block");
    } else {
        if (childSelectElement !=null) {
            childSelectElement.disabled = null;
        }
        if (babySelectElement !=null) {
            babySelectElement.disabled = null;
        }
        aaaSelectElement.disabled = null;
        if (mlaSelectElement != null) {
            mlaSelectElement.disabled = null;
        }
        disableDiv("cpa-message-block");
    }

}

/*события после выбора количества младенцев*/
function onCountBabyChange(avalaiblePassengerCount) {
    var selectAAA = document.getElementById("count-aaa");
    var selectedAAACount = selectAAA.options[selectAAA.selectedIndex].value;

    var childSelectElement = document.getElementById("countChilds");
    var selectedChildCount = 0;
    if (childSelectElement !=null) {
        selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
    }
    var babySelectElement = document.getElementById("babyCount");
    var selectedBabyCount = 0;
    if (babySelectElement !=null) {
        selectedBabyCount = babySelectElement.options[babySelectElement.selectedIndex].value;
    }
    var mlaSelectElement = document.getElementById("count-mla");
    var selectedMLACount = 0;
    if (mlaSelectElement != null) {
        selectedMLACount = mlaSelectElement.options[mlaSelectElement.selectedIndex].value;
    }

    var pensionerSelectElement = document.getElementById("count-pensioner");
    var selectedPensionerCount = 0;
    if (pensionerSelectElement != null) {
        selectedPensionerCount = pensionerSelectElement.options[pensionerSelectElement.selectedIndex].value;
    }

    if (childSelectElement !=null) {
        changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedBabyCount - selectedMLACount - selectedPensionerCount, selectedChildCount, 0);
    }
    changeOptionsLength(selectAAA, avalaiblePassengerCount - selectedChildCount - selectedBabyCount - selectedMLACount - selectedPensionerCount, selectedAAACount, 1);
}

/*события после выбора количества детей*/
function onCountChildChange(avalaiblePassengerCount) {
    var selectAAA = document.getElementById("count-aaa");
    var selectedAAACount = selectAAA.options[selectAAA.selectedIndex].value;

    var childSelectElement = document.getElementById("countChilds");
    var selectedChildCount = 0;
    if (childSelectElement !=null) {
        selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
    }

    var babySelectElement = document.getElementById("babyCount");
    var selectedBabyCount = 0;
    if (babySelectElement !=null) {
        selectedBabyCount = babySelectElement.options[babySelectElement.selectedIndex].value;
    }

    var mlaSelectElement = document.getElementById("count-mla");
    var selectedMLACount = 0;
    if (mlaSelectElement != null) {
        selectedMLACount = mlaSelectElement.options[mlaSelectElement.selectedIndex].value;
    }

    var pensionerSelectElement = document.getElementById("count-pensioner");
    var selectedPensionerCount = 0;
    if (pensionerSelectElement != null) {
        selectedPensionerCount = pensionerSelectElement.options[pensionerSelectElement.selectedIndex].value;
    }

    changeOptionsLength(selectAAA, avalaiblePassengerCount - selectedChildCount - selectedBabyCount - selectedMLACount - selectedPensionerCount, selectedAAACount, 1);

    if (babySelectElement != null) {
        var babyLimit = selectedAAACount;
        if (babyLimit > avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount) {
            babyLimit = avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount;
        }
        changeOptionsLength(babySelectElement, babyLimit, selectedBabyCount, 0);
    }
}

/*события после выбора количества взрослых*/
function onCountAAAChange(avalaiblePassengerCount) {
    var select = document.getElementById("count-aaa");
    var selectedAAACount = select.options[select.selectedIndex].value;

    var childSelectElement = document.getElementById("countChilds");
    var selectedChildCount = 0;
    if (childSelectElement !=null) {
        selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
    }

    var babySelectElement = document.getElementById("babyCount");
    var selectedBabyCount = 0;
    if (babySelectElement !=null) {
        selectedBabyCount = babySelectElement.options[babySelectElement.selectedIndex].value;
    }

    /*~mla*/
    var mlaSelectElement = document.getElementById("count-mla");
    var selectedMLACount = 0;
    if (mlaSelectElement != null) {
        selectedMLACount = mlaSelectElement.options[mlaSelectElement.selectedIndex].value;
    }

    var pensionerSelectElement = document.getElementById("count-pensioner");
    var selectedPensionerCount = 0;
    if (pensionerSelectElement != null) {
        selectedPensionerCount = pensionerSelectElement.options[pensionerSelectElement.selectedIndex].value;
    }
    if (childSelectElement !=null) {
        selectedChildCount = childCount(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount);
    }
    /*~mla*/
    if (mlaSelectElement != null && !isMlaCheck) {
        selectedMLACount = adultsCount(mlaSelectElement, avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedPensionerCount, selectedMLACount);
    }


    if (pensionerSelectElement != null && !isCpaSeparate) {
        selectedPensionerCount = adultsCount(pensionerSelectElement, avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount, selectedPensionerCount);
    }

    if (childSelectElement !=null) {
        changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedBabyCount - selectedMLACount - selectedPensionerCount, selectedChildCount, 0);
    }
    if (babySelectElement !=null) {
        var babyLimit = selectedAAACount;
        if (babyLimit > avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount) {
            babyLimit = avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedMLACount - selectedPensionerCount;
        }
        changeOptionsLength(babySelectElement, babyLimit, selectedBabyCount, 0);
    }

    var mlaFirstCount;
    if (mlaSelectElement != null && !isMlaCheck) {
        //если взрослых пассажиров 0, то должен быть пассажир "молодежь"
        if (selectedAAACount != 0) {
            mlaFirstCount = 0;
        } else {
            mlaFirstCount = 1;
        }

        changeOptionsLength(mlaSelectElement, avalaiblePassengerCount - selectedAAACount - selectedPensionerCount, selectedMLACount, mlaFirstCount);
    }

    if (pensionerSelectElement != null && !isCpaSeparate) {
        var pensionerFirstCount;
        //если пассажиров"молодежь" и "взрослый" нет, то пенсионер должен быть хотя бы 1
        if ((selectedMLACount == null || selectedMLACount == 0) && (selectedAAACount == 0)) {
            pensionerFirstCount = 1;
        } else {
            pensionerFirstCount = 0;
        }
        /*изменение длинны селекта "pensioner" пассажиров*/
        changeOptionsLength(pensionerSelectElement, avalaiblePassengerCount - selectedMLACount - selectedAAACount, selectedPensionerCount, pensionerFirstCount);
    }
}

/*количество пассажиров(adultsCount), максимально-возможное количество пассажиров - count */
function adultsCount(selectElement, count, adultsCount) {

    for (var i = 0; i < selectElement.options.length; i++) {
        if (selectElement.options[i] == selectElement.options[selectElement.selectedIndex] && i > count) {
            adultsCount = count;
        }
    }
    return adultsCount;
}

function childCount(childSelectElement, count, childCount) {
    for (var i = 0; i < childSelectElement.options.length; i++) {
        if (childSelectElement.options[i] == childSelectElement.options[childSelectElement.selectedIndex] && i > count) {
            selectChildCountChanged(count);
            childCount = count;
        }
    }
    return childCount;
}

/*изменения количества опшенов в селекте(selectElement) до размера - length, начиная с - firstCount, и с выбранным элементом selectedCount*/
function changeOptionsLength(selectElement, length, selectedCount, firstCount) {

    if (Globals.isIE()) {
        while (selectElement.options.length > 0) {
            selectElement.remove(selectElement.options.length - 1);
        }
        for (var j = firstCount; j <= length; j++) {
            if (selectedCount != 0 && j == selectedCount) {
                addOption(selectElement, j, j, true);
            } else {
                addOption(selectElement, j, j, false);
            }
        }
    } else {
        var html = "";
        for (var k = firstCount; k <= length; k++) {
            html += "<option value='" + k + "' " + (k == selectedCount ? "selected='1'" : "") + ">" + k + "</option>\n";
        }
        selectElement.innerHTML = html;
        selectElement.options[selectedCount - firstCount].selected = "true";
    }
}

function addOption(selectElement, text, value, isSelected) {
    var option = document.createElement("option");
    option.appendChild(document.createTextNode(text));
    option.setAttribute("value", value);

    option.selected = isSelected;

    selectElement.appendChild(option);
}

function selectChildCountChanged(selectedCount) {
    var childBlockElement = document.getElementById("child-age-block");
    var ageField = document.getElementById("poleAge");
    if (childBlockElement && ageField) {
        if (selectedCount > 0) {
            childBlockElement.style.display = "inline";
            ageField.value = createAgesLine(getChildAges(), selectedCount);
        } else {
            childBlockElement.style.display = "none";
            ageField.value = "";
        }
    }
}

var DEFAULT_CHILD_AGE = 11;

function createAgesLine(array, count) {
    var string = "";
    for (var i = 0; i < count; i++) {
        var age = DEFAULT_CHILD_AGE;
        if (array != null && i < array.length) {
            age = array[i];
        }
        string += (i == 0) ? (age) : ("," + age);
    }
    return string;
}

function getChildAges() {
    var ageField = document.getElementById("poleAge");
    var childAges = ageField.value.split(",");
    if (childAges.length > 0) {
        for (var i = 0; i < childAges.length; i++) {
            if (childAges[i].trim() != "") {
                if (!isNumeric(childAges[i])) {
                    return null;
                }
            } else {
                return null;
            }
        }
    } else {
        return null;
    }
    return childAges;
}

function addAgeSelectChanged(select) {
    var ageField = document.getElementById("poleAge");
    if (ageField.value == "") {
        ageField.value = select.options[select.selectedIndex].value;
    } else {
        ageField.value += (  "," + select.options[select.selectedIndex].value );
    }
    select.options[0].selected = "true";
}

function setAAAOptions(selectedAAACount, selectedChildCount, selectedBabyCount) {
    var accessibleAAACount = passengerCountLimit - selectedChildCount - selectedBabyCount;
    if (accessibleAAACount < 0) accessibleAAACount = 0;

    document.getElementById("count-aaa").innerHTML = "";

    for (var i = 0; i <= accessibleAAACount; i++) {
        var opt = document.createElement("option");
        opt.setAttribute("value", i);
        if (i == selectedAAACount) opt.setAttribute("selected", "selected");
        opt.appendChild(document.createTextNode(i));
        document.getElementById("count-aaa").appendChild(opt);
    }

}

function setBabyOptions(selectedAAACount, selectedChildCount, selectedBabyCount) {

    var accessibleBabyCount = 0;
    if ((selectedAAACount * 2 + selectedChildCount * 1) > passengerCountLimit) {
        accessibleBabyCount = passengerCountLimit - selectedAAACount * 1 - selectedChildCount * 1;
    }
    else {
        accessibleBabyCount = selectedAAACount;
    }

    if (accessibleBabyCount < 0) accessibleBabyCount = 0;


    document.getElementById("babyCount").innerHTML = "";

    for (var i = 0; i <= accessibleBabyCount; i++) {
        var opt = document.createElement("option");
        opt.setAttribute("value", i);
        if (i == selectedBabyCount) opt.setAttribute("selected", "selected");
        opt.appendChild(document.createTextNode(i));
        document.getElementById("babyCount").appendChild(opt);
    }
}

function setChildOptions(selectedAAACount, selectedChildCount, selectedBabyCount) {
    var accessibleChildCount = passengerCountLimit - selectedAAACount - selectedBabyCount;
    if (accessibleChildCount < 0) accessibleChildCount = 0;

    document.getElementById("countChilds").innerHTML = "";

    for (var i = 0; i <= accessibleChildCount; i++) {
        var opt = document.createElement("option");
        opt.setAttribute("value", i);
        if (i == selectedChildCount) opt.setAttribute("selected", "selected");
        opt.appendChild(document.createTextNode(i));
        document.getElementById("countChilds").appendChild(opt);
    }

}

function onPriceButtonClick(but) {
    showWaitingBlock("tables");
    disablePriceTableBlock("price-table");
    disablePriceTableBlock("period-table");
    lockScreen();
    enableCountPassengersSelects();
    if(Globals.isSafari()) {
        var inp = document.createElement("input");
        inp.setAttribute("name", but.name);
        inp.setAttribute("value", "123");
        inp.setAttribute("type", "hidden");
        but.parentNode.appendChild(inp);
    }
    checkPaymentType();
    return false;
}

function checkPaymentType() {
    if(document.forms.indexform["base-payment-type"] && document.forms.indexform["base-payment-type"].value == "certificate") {
        setMySirenaRedirectParams();
    }
    else {
        document.forms.indexform.submit();
    }
}

function enableCountPassengersSelects() {
    var selects = document.getElementById("count-passengers-block").getElementsByTagName("select");
    for(var i = 0; i < selects.length; i++) {
        selects[i].disabled = null;
    }
}

function onPaymentTypeChange() {
    var defaultSearchType = document.getElementById("defaultSearchType");
    var mySirenaSearchType = document.getElementById("mySirenaSearchType");

    if(document.forms.indexform["base-payment-type"].value == "certificate") {
        mySirenaSearchType.style.display = "block";
        defaultSearchType.style.display = "none";
    }
    else {
        mySirenaSearchType.style.display = "none";
        defaultSearchType.style.display = "block";
    }
    checkClassPayment();

}

function showWaitingBlock(field) {
    var waitingElement = document.getElementById(field + "-waiting");
    waitingElement.style.display = "block";
    var so = new SWFObject("img/progressbar (1).swf", "mymovie", "100", "9", "7");
    so.write(field + "-block-waiting");
}

function disablePriceTableBlock(blockName) {
    var variant = document.getElementById(blockName);
    if (variant != null) {
        variant.style.display = "none";
    }
}

function disableFormErrorBlock() {
    var formErrorElement = document.getElementById("index-form-error");
    if (formErrorElement != null) {
        //formErrorElement.disabled = "disabled";
        formErrorElement.style.display = "none";
    }
}

var storedOnClick = null;

var changeCheck = function(check) {
    if (!check.checked) {
        disable();
        document.getElementById('block_chb').style.background = "url('img/no_chb.gif') no-repeat center top";
    } else {
        enable();
        document.getElementById('block_chb').style.background = "url('img/yes_chb.gif') no-repeat center top";
    }
};

var switchOverCities = function(self) {
    var one = document.getElementById('originCityName');
    var two = document.getElementById('destinationCityName');
    var oneVal = one.value;
    var twoVal = two.value;
    one.value = twoVal;
    two.value = oneVal;
    changeCheck(self);
};

var disable = function() {
    var inputBackDate = document.getElementById('backDate');
    var imgBackCalendar = document.getElementById('backCalendar');

    inputBackDate.style.background = "#d4d0c8";
    inputBackDate.onclick = function() {
        return false;
    }

    if (!storedOnClick) {
        storedOnClick = imgBackCalendar.onclick;
    }

    imgBackCalendar.onclick = null;
};

var enable = function() {
    var inputBackDate = document.getElementById('backDate');
    var imgBackCalendar = document.getElementById('backCalendar');

    inputBackDate.disabled = null;

    inputBackDate.style.background = "#fff";

    if (storedOnClick) {
        imgBackCalendar.onclick = storedOnClick;
    }
};

//TIMETABLE
function enableTimeTableNextButton() {
    var nextButton = document.getElementById("timetable-next-button");
    nextButton.disabled = false;
}

//TIMETABLE
function disableTimeTableNextButton() {
    var nextButton = document.getElementById("timetable-next-button");
    nextButton.disabled = true;
}

var thereChoosenFlightId = null;
var backChoosenFlightId = null;

function enableAllThereFlights() {
    for (var thereFlightId in thereFlightsMap) {
        var flightChain = thereFlightsMap[thereFlightId];
        if (!flightChain.isOtherDisable()) {
            enableRadioButton("there_" + thereFlightId);
        }
    }
}

// CompanyCode
function enableBackRaces(companyCode, oneWayAllowed) {
    disableRaces(backFlightsMap, "back");
    for (var flightChainId in backFlightsMap) {
        var flightChain = backFlightsMap[flightChainId];
        if (
                (companyCode == null || flightChain.companyCode() == companyCode)
                        && (!flightChain.isLinkedFlight() || flightChain.isOneWayAllowed())
                        && (!flightChain.isLinkedFlight() || oneWayAllowed)
                        && flightChain.isHasPlaces() && !flightChain.isOtherDisable()

                ) {
            enableRadioButton("back_" + flightChain.id);
        }
    }
}

// flightsChainMap
function disableRaces(flightsChainMap, prefix) {
    for (var flightChainId in flightsChainMap) {
        var flightElement = document.getElementById(prefix + "_" + flightChainId);
        flightElement.checked = false;
        flightElement.disabled = true;
    }
}


/*
 * переопределяет идентификатор цены при выборе карт, електронных денег или спп
 * paymentTypeAlias - электронные деньги, пластиковая карта или спп
 * param - от рассписания или от прайсинга
 * */
function onKIFormPayChoose(paymentTypeAlias, param, ticketParam) {
    var priceId = null;
    if (paymentTypeAlias == "ecash" || paymentTypeAlias == "card") {
        var i = 0;
        var ecashPos;
        var cardPos;
        for(var payType in priceVariants) {
            if(payType == "ecash") ecashPos = i;
            if(payType == "card") cardPos = i;
            i++;
        }
        // Если электронная начность выбрана и идет после карт в прайс-вариантах - подменяем прайс-ид.
        if(ecashPos > cardPos && paymentTypeAlias == "ecash") {
            priceId = kiPriceIds[selectedPriceId];
        }
        // Если выбрана ПК и идет после эл. нал. в прайс-вариантах - подменяем прайс-ид.
        else if (ecashPos < cardPos && paymentTypeAlias == "card") {
            priceId = kiPriceIds[selectedPriceId];
        }
    }

    if (!priceId) {
        priceId = selectedPriceId;
    }
    selectedFormPayAlias = paymentTypeAlias;

    /*обновление ссылок на цены и скрытого инпута с выбранной формой оплаты*/
    var hiddenPriceInput = document.getElementById("choosen-payment-type");
    hiddenPriceInput.setAttribute("value", paymentTypeAlias);

    if (param == 'timetable') {
        var realBackChain = backChoosenFlightId ? backChoosenFlightId : "chain-empty";
        processTicketTypeSelection(priceId, thereChoosenFlightId, realBackChain, paymentTypeAlias);
    } else if (param == 'pricetable') {
        processingPrice(paymentTypeAlias, priceId);
    }
}

/*обработка выбора цены после рассписания*/
function timetablePricingProcess(self, paymentTypeAlias, priceId) {
    if (priceId != null) {
        selectedPriceId = priceId;
    }

    setPaymentType(paymentTypeAlias);

    selectedFormPayAlias = paymentTypeAlias;
    processPricing(paymentTypeAlias, selectedPriceId);

    var div;
    if(self.parentNode) {
        div = nextSibling(self.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
        if (div && div.id != "") {
            var inp = div.getElementsByTagName("input")[0];
            if (inp && inp.getAttribute("name") == "card-type") {
                inp.setAttribute("checked", "checked");
                inp.checked = true;

                var onclick = inp.getAttribute("onclick") + "";
                var strings = onclick.split('\n');
				for(var i = 0; i < strings.length; i++) {
					if(strings[i] != "function onclick()" && strings[i] != "function anonymous()" && strings[i] != "{" && strings[i] != "}") {
						eval(strings[i]);
					}
				}
            }
        }
    }
}

//TIMETABLE
function processPricing(paymentTypeAlias, priceId) {
    cardsPaymentShow(paymentTypeAlias);
    if (paymentTypeAlias != "card" && paymentTypeAlias != "ecash") {
        var realBackChain = backChoosenFlightId ? backChoosenFlightId : "chain-empty";
        processTicketTypeSelection(priceId, thereChoosenFlightId, realBackChain, paymentTypeAlias);
    }
}

function processTicketTypeSelection(priceId, forwardId, backwardId, formpay) {
    disableDiv("ticket-type-block");
    enableDiv("waitingEticket");

    var paymentType;

    if(formpay != "juridical" && formpay != "cash") {
        var paymentTypeElements = document.getElementsByName("card-type");
        for (var i = 0; i < paymentTypeElements.length; i++) {
            var paymentTypeElement = paymentTypeElements[i];
            if (paymentTypeElement.checked) {
                paymentType = paymentTypeElement.value;
            }
        }
    }
    else {
        paymentType = "";
    }

    var req = Spry.Utils.loadURL("POST", "ticket-type-select", false, null, {postData: "payment-form="+formpay+"&payment-type="+paymentType+"&variant-id="+priceId+"&forward-flight-id="+forwardId+"&backward-flight-id="+backwardId, headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "accept-charset" : "utf-8"}});

    var ticketTypeBlock = document.getElementById("ticket-type-block");
    while (ticketTypeBlock.hasChildNodes()) {
        ticketTypeBlock.removeChild(ticketTypeBlock.firstChild);
    }
    ticketTypeBlock.innerHTML = req.xhRequest.responseText;

    disableDiv("waitingEticket");
    enableDiv("ticket-type-block");
    enableCheckRules();
    onTicketTypeSelectionLoad(selectedPriceId);
}

function onTicketTypeSelectionLoad(priceId) {
    var inputs = document.getElementById("ticket-type-block").getElementsByTagName("input");
        for(var j = 0; j < inputs.length; j++) {
            if(inputs[j] && inputs[j].getAttribute("name") == "ticket-type" && inputs[j].getAttribute("checked")) {
                var onclick = inputs[j].getAttribute("onclick") + "";
                var strings = onclick.split('\n');
                for(var n = 0; n < strings.length; n++) {
				    if(strings[n] != "function onclick()" && strings[n] != "function anonymous()" && strings[n] != "{" && strings[n] != "}") {
    					eval(strings[n]);
				    }
		        }
            }
            if(inputs[j] && inputs[j].getAttribute("type") == "hidden") {
                createDetalisationHref(priceId, inputs[j].value + 'Price', 'upt-description-href');
            }
        }
}

//TIMETABLE
function onPricingButtonClick() {
    showWaitingBlock("pricing");
    disablePriceTableBlock("timetabe-pricing");
    lockScreen();
}

//TIMETABLE
function showPseudoclasses(classesDivId) {
    var a = document.getElementById("a-" + classesDivId);
    var aPosition = getPositionData(a);
    var div = document.getElementById(classesDivId);
    div.style.display = "block";
    div.style.left = aPosition["left"];
    div.style.top = aPosition["top"] + aPosition["height"];
}

//TIMETABLE
function choosePseudoClass(pseudoclassId, prefix, flightChainId, companyRaceNum, pseudoClassLetter, pseudoclassName, seats, isTimeLimit) {
    var pseudoclassInputId = "pseudoclass-" + flightChainId + "-" + companyRaceNum;
    setPseudoclassInputData(pseudoclassId, pseudoclassInputId);
    setPseudoclassNameCount("a-seats-" + pseudoclassInputId, pseudoClassLetter, pseudoclassName, seats);
    disableDiv("seats-" + pseudoclassInputId);
    if (isTimeLimit != '1') {
        var isAllFlightsHasPlases = checkFlightChainPlaces(flightChainId);
        if (isAllFlightsHasPlases) {
            enableRadioButton(prefix + "_" + flightChainId);
        }
    }
}

//TIMETABLE
function checkFlightChainPlaces(flightChainId) {
    var races = flightChainId.split('-');
    for (var i = 1; i <= races.length - 1; i++) {
        var companyRaceNum = races[i];
        var racePlasesInput = document.getElementById("pseudoclass-" + flightChainId + "-" + companyRaceNum);
        if (racePlasesInput == null || racePlasesInput.value == '') {
            return false;
        }
    }
    return true;
}

//TIMETABLE / PRICETABLE
function createDetalisationHref(priceId, param, idElement) {
    //alert(param);
    enableUptLink();
    var detalisationAElement = document.getElementById(idElement);
    detalisationAElement.href = "#";
    //"showDetailedPricePage("+priceId+");";
    detalisationAElement.onclick =  function() { eval("showDetailedPricePage("+priceId+", '"+param+"');"); };
}

function enableUptLink() {
    var uptLink = document.getElementById("upt-description-href");
    if(uptLink) {
        uptLink.className = "act";
    }
}

function disableUptLink() {
    var uptLink = document.getElementById("upt-description-href");
    if(uptLink) {
        uptLink.className = "";
        uptLink.onclick = null;
    }
}

// TIMETABLE
function disableRadioButton(radioButtonId) {
    var inputElement = document.getElementById(radioButtonId);
    inputElement.disabled = true;
}

//TIMETABLE
function enableRadioButton(radioButtonId) {
    var inputElement = document.getElementById(radioButtonId);
    if (inputElement) inputElement.disabled = null;
}

//TIMETABLE
function setPseudoclassInputData(pseudoclassId, pseudoclassInputId) {
    var pseudoclassInputElement = document.getElementById(pseudoclassInputId);
    pseudoclassInputElement.value = pseudoclassId;
}

//TIMETABLE
function setPseudoclassNameCount(aId, pseudoclassLetter, pseudoclassName, seats) {
    var a = document.getElementById(aId);
    var acronymElement = document.createElement("acronym");
    var text = document.createTextNode(" / " + seats);

    acronymElement.setAttribute("title", pseudoclassName);
    acronymElement.appendChild(document.createTextNode(pseudoclassLetter));

    while (a.hasChildNodes()) {
        a.removeChild(a.firstChild);
    }
    a.appendChild(acronymElement);
    a.appendChild(text);
}

function disableDiv(divId) {
    var div = document.getElementById(divId);
    if (div) {
        div.style.display = "none";
    }
}

function enableDiv(divId) {
    var div = document.getElementById(divId);
    if (div) {
        div.style.display = "block";
    }
}

function enableSpan(blockId) {
    var block = document.getElementById(blockId);
    block.style.display = "inline";
}


function setFlightsId(thereId, backId) {
    if (thereId != null && thereId != "") {
        flightChooseProcessing(thereId, "there");
    }
    if (backId != null && backId != "") {
        flightChooseProcessing(backId, "back");
        var backFlightRadioButton = document.getElementById("back_" + backId);
        backFlightRadioButton.checked = "checked";
    }
}

function setFlightFormpayDependence() {
    if(priceVariants) {
        for(var formpay in priceVariants) {
            flightFormpayDependence[formpay] = {};
            for(var price in priceVariants[formpay]) {
                for(var flight in flightVariants[price]) {
                    flightFormpayDependence[formpay][flight] = 1;
                }
            }
        }
    }
}

var changeDateDependence = function() {
    var thereDateInp = document.getElementById("thereDate");
    var backDateInp = document.getElementById("backDate");
    var thereDateStr = thereDateInp.value;
    var thereDate = DateUtils.stringToDate(thereDateStr);
    var backDate = DateUtils.datePlus(thereDate, 7);
    var backDateStr = DateUtils.dateToString(backDate);
    backDateInp.value = backDateStr;
};

var thereDateClickListener = function(lang, e, self) {
    if (e) {
        if (e.ctrlKey) {
            calendarQuantityOfDaysWithLanWithoutDefaultDate('thereDate', 'thereDate', 'thereDate', e, self, lang, 0, 270, Globals.isIE() ? Globals.LEFT : Globals.BOTTOM);
        }
        else {
            calendarQuantityOfDaysWithLanWithoutDefaultDateWithCallBack('thereDate', 'thereDate', 'thereDate', e, self, lang, 0, 270, Globals.isIE() ? Globals.LEFT : Globals.BOTTOM, changeDateDependence);
        }
    }
    else {
        calendarQuantityOfDaysWithLanWithoutDefaultDateWithCallBack('thereDate', 'thereDate', 'thereDate', e, self, lang, 0, 270, Globals.isIE() ? Globals.LEFT : Globals.BOTTOM, changeDateDependence);
    }
};

var setMySirenaRedirectParams = function() {
	document.forms.mySirenaRedirect["origin-city-name"].value = document.forms.indexform["origin-city-name"].value;
	document.forms.mySirenaRedirect["destination-city-name"].value = document.forms.indexform["destination-city-name"].value;
	document.forms.mySirenaRedirect["there-date"].value = document.forms.indexform["there-date"].value;
	if(document.getElementById("useBack").checked) {
		document.forms.mySirenaRedirect["back-date"].value = document.forms.indexform["back-date"].value;
	}
	else {
		document.forms.mySirenaRedirect["back-date"].value = "";
	}

	var count_aaa = document.forms.indexform["count-aaa"].value * 1;
    var count_mla = document.forms.indexform["count-mla"].value * 1;
    var count_pensioner = document.forms.indexform["count-pensioner"].value * 1;
	if(count_mla) {
	    count_aaa =+ count_mla;
	}
	if(count_pensioner) {
	    count_aaa =+ count_pensioner;
	}
	document.forms.mySirenaRedirect["count-aaa"].value = count_aaa;

	document.forms.mySirenaRedirect["count-rbm"].value = document.forms.indexform["count-rbg"].value;
	document.forms.mySirenaRedirect["count-rmg"].value = document.forms.indexform["count-rmg"].value;

	if(document.getElementById("availabilityButton").checked) {
	    document.forms.mySirenaRedirect["page"].value = "avia.availability";
    }

    if(document.getElementById("placesPeriodButton").checked) {
        document.forms.mySirenaRedirect["page"].value = "avia.places-period";
    }

	document.forms.mySirenaRedirect.submit();
    return false;
};


