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"
};

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

function enableAllPriceRadioButtons() {
    for (var payType in priceVariants) {
        var payTypePrices = priceVariants[payType];
        for (var priceId in payTypePrices) {
            /*for (var thereFlightId in flightVariants[priceId]) {
             if ()
             }*/
            enableRadioButton("price_" + priceId);
        }
    }
}

var selectedPriceId = 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 selectCards() {

}

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

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;
}

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

function uncheckedRules() {
    var check = document.getElementById('checkRules');
    check.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 createETicketPictures(id) {

}

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 tarificationETicket(selectedPriceId, selectedFormPay, forwardFlightId, backwardFlightId) {
    enableDiv("waitingEticket");
    var clientId = priceVariants[selectedFormPay][selectedPriceId].clientId;
    var url = "xml/price-unit?variant-id=" + selectedPriceId + "&form-pay=" + selectedFormPay + "&ticket-type=ticketPrice" + "&client-id="+clientId;
    var priceunit = Spry.Utils.loadURL("POST", url, false, null, {postData:"forward-flight-id=" + forwardFlightId + "&backward-flight-id=" + backwardFlightId, headers: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}});
    var doc = priceunit.xhRequest.responseXML;
    if (!doc || !doc.firstChild) {
        doc = Spry.Utils.stringToXMLDoc(priceunit.xhRequest.responseText);
        if (!doc || !doc.firstChild) {
            alert("Failed to get XML document DOM!");
            return;
        }
    }
    var priceunitElement = doc.documentElement;
    var statusElement = priceunitElement.getElementsByTagName("status")[0];
    var priceElements = priceunitElement.getElementsByTagName("price");
    if (statusElement != null && statusElement.getAttribute("is-error") == 'false' &&
        priceElements != null && priceElements.length > 0) {
        var priceElement = priceElements[0];
        var value = priceElement.firstChild.nodeValue;
        var currency = priceElement.getAttribute("currency");
        var id = priceElement.getAttribute("id");
        var cost = { id: id, value : value, currency : currency };
        showETicketPriceMessage(cost, selectedFormPay, selectedPriceId);
    } else if (statusElement != null) {
        createTicketTypeLable('electronic', selectedPriceId, selectedFormPay, forwardFlightId, backwardFlightId);
    }
    disableDiv("waitingEticket");
}

function showETicketPriceMessage(cost, selectedFormPay, selectedPriceId) {
    var selectedPrice = priceVariants[selectedFormPay][selectedPriceId];
    if (selectedFormPay == "juridical") {
        enableDiv("ticketMessageAgencyTax");

        var priceNode = document.createTextNode(selectedPrice.agencyTax + " " + selectedPrice.currency);
        var eTicketAgencyTaxElement = document.getElementById("eTicketAgencyTax");
        if (eTicketAgencyTaxElement) {
            while (eTicketAgencyTaxElement.hasChildNodes()) {
                eTicketAgencyTaxElement.removeChild(eTicketAgencyTaxElement.firstChild);
            }
            eTicketAgencyTaxElement.appendChild(priceNode);
        }
        //eTicketAgencyTaxElement.appendChild(priceNode);
        enableDiv("eTicketMessageAgencyTax");
    }
    enableDiv("eTiketMessageBlock");

    var eTicketPriceElement = document.getElementById("eTicketPrice");
    var ticketPriceElement = document.getElementById("ticketPrice");
    var ticketPriceNode = document.createTextNode(cost.value + " " + cost.currency);
    var eTicketPriceNode = document.createTextNode(selectedPrice.price + " " + selectedPrice.currency);
    while (ticketPriceElement.hasChildNodes()) {
        ticketPriceElement.removeChild(ticketPriceElement.firstChild);
    }
    ticketPriceElement.appendChild(ticketPriceNode);
    while (eTicketPriceElement.hasChildNodes()) {
        eTicketPriceElement.removeChild(eTicketPriceElement.firstChild);
    }
    eTicketPriceElement.appendChild(eTicketPriceNode);
    createDetalisationHref(selectedPriceId, 'eTicketPrice', 'eTicketPriceHref');
    createDetalisationHref(cost.id, 'ticketPrice', 'ticketPriceHref');
    createDetalisationHref(selectedPriceId, 'eTicketPrice', 'upt-description-href');
    var eTicketTypeInputElement = document.getElementById("eTicketTypeInput");
    var ticketTypeInputElement = document.getElementById("ticketTypeInput");
    var label = document.getElementById("eTicketDisabledLabel");
    /* ~U6~ */
    var juridicalMessageBlock = document.getElementById("juridicalMessageBlock");
    if (selectedFormPay == "juridical") {
        juridicalMessageBlock.style.display = "block";
    } else {
        juridicalMessageBlock.style.display = "none";
    }
    eTicketTypeInputElement.checked = "checked";
    eTicketTypeInputElement.disabled = null;
    ticketTypeInputElement.disabled = null;
    label.style.display = "none";
    eTicketTypeInputElement.onclick = function() {
        eval("createDetalisationHref(" + selectedPriceId + ",'eTicketPrice', 'upt-description-href');");
    };
    ticketTypeInputElement.onclick = function() {
        eval("createDetalisationHref(" + cost.id + ",'ticketPrice', 'upt-description-href');");
    };
    //agency taxes related code
    var eTicketAgencyTaxLink = document.getElementById("eTicketMessageAgencyTaxLink");
    var ticketAgencyTaxLink = document.getElementById("ticketMessageAgencyTaxLink");
    var url = "agency-taxes?paymentForm=" + selectedFormPayAlias + "&forwardFlightId=" + selectedForwardFlightId;
    if (selectedBackwardFlightId) {
        url += "&backwardFlightId=" + selectedBackwardFlightId;
    }
    if (eTicketAgencyTaxLink) {
        eTicketAgencyTaxLink.onclick = function() {
            eval("window.open('" + url + "&ticketType=electronic', 'clientWindow','width=800,height=600,left=0,top=0,scrollbars=yes,menubar=yes')");
        };
    }
    if (ticketAgencyTaxLink) {
        ticketAgencyTaxLink.onclick = function() {
            eval("window.open('" + url + "&ticketType=paper', 'clientWindow','width=800,height=600,left=0,top=0,scrollbars=yes,menubar=yes')");
        };
    }
}

function enableBackwardFlights(forwardFlightId, paymentTypeAlias) {
    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(check) {
    if (check.checked) {
        enableNextButton();
    } else {
        disableNextButton();
    }
}

function checkIt(el) {
    var check = document.getElementById('checkRules');
    if (!check.disabled) {
        if (!check.checked) {
            check.checked = true;
            enableNextButton();
        } else {
            check.checked = null;
            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 aaaSelectElement = document.getElementById("count-aaa");
    var pensionerSelectElement = document.getElementById("count-pensioner");
    var selectedChildCount = 0;
    var selectedAAACount = 0;
    var selectedPensionerCount = 0;
    if (selectedMLACount == 0 || !isMlaCheck) {

        selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;
        selectedAAACount = 1;
        selectedPensionerCount = 0;
        /*if (pensionerSelectElement != null) {
            selectedPensionerCount = pensionerSelectElement.options[pensionerSelectElement.selectedIndex].value;
        }*/
        selectedChildCount = 0;
        //selectedChildCount = childCount(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedPensionerCount, selectedChildCount);

        /*if (pensionerSelectElement != null) {
            selectedPensionerCount = adultsCount(pensionerSelectElement, avalaiblePassengerCount - selectedMLACount - selectedChildCount - selectedAAACount, selectedPensionerCount);
        }*/
    }
    //alert(avalaiblePassengerCount + "; " + selectedAAACount);
    changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount, 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) {
        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) {
        childSelectElement.disabled = true;
        selectChildCountChanged(0);
        aaaSelectElement.disabled = true;
        if (pensionerSelectElement != null) {
            pensionerSelectElement.disabled = true;
        }
        /*показываем сообщение для молодежи*/
        enableSpan("mla-message-block");
    } else {
        childSelectElement.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 selectedChildCount = childSelectElement.options[childSelectElement.selectedIndex].value;

    var aaaSelectElement = document.getElementById("count-aaa");
    var selectedAAACount = aaaSelectElement.options[aaaSelectElement.selectedIndex].value;

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

    selectedChildCount = childCount(childSelectElement, avalaiblePassengerCount - selectedPensionerCount - selectedAAACount - selectedMLACount, selectedChildCount);

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

    /*изменение длинны селекта детей*/
    changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedPensionerCount - selectedAAACount - selectedMLACount, selectedChildCount, 0);

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

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

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

    var childSelectElement = document.getElementById("countChilds");
    var selectedChildCount = childSelectElement.options[childSelectElement.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;
    }
    selectedChildCount = childCount(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount);

    /*~mla*/
    if (mlaSelectElement != null && !isMlaCheck) {
        selectedMLACount = adultsCount(mlaSelectElement, avalaiblePassengerCount - selectedAAACount - selectedChildCount - selectedPensionerCount, selectedMLACount);
    }


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

    changeOptionsLength(childSelectElement, avalaiblePassengerCount - selectedAAACount - selectedMLACount - selectedPensionerCount, selectedChildCount, 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) {
        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 (selectedCount > 0) {
        childBlockElement.style.display = "inline";
        ageField.value = createAgesLine(getChildAges(), selectedCount);
    } else {
        childBlockElement.style.display = "none";
        ageField.value = "";
    }
    //select.options[0].selected = "true";
}

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 onPriceButtonClick() {
    //setChildAgeString();
    showWaitingBlock("tables");
    disablePriceTableBlock("price-table");
    disablePriceTableBlock("period-table");
    lockScreen();
    //disableFormErrorBlock();
    //disablePriceVariantErrorBlock();
}

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) {
        //variantErrorElement.disabled = "disabled";
        //variant.disabled = "disabled";
        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;

function changeCheck(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";
    }
}

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

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

    storedOnClick = imgBackCalendar.onclick;
    imgBackCalendar.onclick = null;
}

function enable() {
    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 = selectedPriceId;
    if (paymentTypeAlias == "ecash") {
        priceId = kiPriceIds[selectedPriceId];
    }
    selectedFormPayAlias = paymentTypeAlias;

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

    createDetalisationHref(priceId, ticketParam, "price-href-" + selectedPriceId);

    if (param == 'timetable') {
        processPricing(paymentTypeAlias, priceId);
    } else if (param == 'pricetable') {
        processingPrice(paymentTypeAlias, priceId);
    }
}

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

//TIMETABLE
function processPricing(paymentTypeAlias, priceId) {

    disableDiv("eTiketMessageBlock");
    disableDiv("ticket-type-block");
    disableDiv("eTicketMessageAgencyTaxSingle");
    disableDiv("ticketMessageAgencyTaxSingle");
    disableDiv("eTicketMessageAgencyTax");
    disableDiv("ticketMessageAgencyTax");
    disableDiv("juridicalMessageBlock");

    setPaymentType(paymentTypeAlias);

    createDetalisationHref(priceId, 'ticketPrice', 'upt-description-href');
    cardsPaymentShow(paymentTypeAlias);
    var realBackChain = backChoosenFlightId ? backChoosenFlightId : "chain-empty";
    var ticketType = getTicketType(paymentTypeAlias);
    var isETicket = isETicketVariant(priceId, thereChoosenFlightId, realBackChain);

    // ~U6~ only
    var label = document.getElementById("eTicketDisabledLabel");
    label.style.display = "none";

    if (paymentFormBlanks) {
        if (isETicket) {
            if (ticketType == "both") {
                tarificationETicket(priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
            } else {

                // ~U6~ only
                if (ticketType == "paper")
                    label.style.display = "block";

                createTicketTypeLable(ticketType, priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
            }
        } else {
            createTicketTypeLable("paper", priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
        }
    } else {
        if (selectTicketType) {
            if (isETicket) {
                tarificationETicket(priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
            } else {
                createTicketTypeLable('paper', priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
            }
        } else {
            createTicketTypeLable(ticketType, priceId, paymentTypeAlias, thereChoosenFlightId, realBackChain);
        }
    }
    enableCheckRules();
}

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

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

//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
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";
    }
}

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;
};
