/* 
 * Все, что связанно с корзиной
 */

/**
 * Посмотреть содержимое корзины
 */
function cartView () {
    getCart (1);
}

/**
 * Запрос содержимого корзины из бекенда
 * getCartContents = true|false - получать описание продуктов в корзине
 */
function getCart (getCartContents) {
    var p = {};
    if (getCartContents)
        p.getCartContents = 'true';
    customerService (0, 'getCart', getCart_callback, p);
}

/**
 * Обработка содержимого корзины, возвращенного бекендом
 */
function getCart_callback (res) {
    eval (res);
    change_cart (count, sum);
    change_productionTime (productionTime);
    cart_contents = a;

    var div = $(document.createElement('div')).addClass('cart_article');
    i = false;

    $.each(a, function (key, val) {
        i = true;
        category = val.category;
        if(val.category == 'customshirt') {
            category = 'shirt';
        }
        var src = (val.category.match(/^custom/) || category == 'shirt' ) ?
            design_base + '/' + category + '/'+ val.product + '/fabric_icon.png' : design_base + '/' + category + '/' + val.product + '_pict.jpg';

        table = $(document.createElement('table')).appendTo(div);
        row = $(document.createElement('tr')).appendTo(table);

        firstTd = $(document.createElement('td')) //Первый столбец
            .attr('width', '100')
            .appendTo(row);
        img = $(document.createElement('img')) // Картинка продукта
            .attr('alt','')
            .attr('src', src)
            .appendTo(firstTd);
        $(document.createElement('br')).appendTo(firstTd);

        if (val.category != 'giftCerts') {
            updateAmount = $(document.createElement('span'));
            updateAmount //= $(document.createElement('span')) //Кнопка "пересчитать"
                .addClass('normal_link')
                .text($.i18n.prop('label_recalculate'))
                .click(function(){
                    updateArticleAmount(this, key);
                })
                .appendTo(firstTd);
            $(document.createElement('br')).appendTo(firstTd);
        }

        rArticle = $(document.createElement('span')) //Кнопка "удалить"
            .addClass('normal_link')
            .text($.i18n.prop('label_delete'))
            .click(function () {
                removeArticle(this, key);
            })
            .appendTo(firstTd);

        secondTd = $(document.createElement('td')) //Второй столбец (цена, кол-во, сумма)
            .attr('width', '130')
            .appendTo(row);
        articleName = $(document.createElement('span'))
            .addClass('articleName')
            .text(val.displayName)
            .click(function () {
                articleView(this, key);
            })
            .appendTo(secondTd);

        infotxt  = '<br />' + $.i18n.prop('label_price') + ':' + val.price + ' ' + $.i18n.prop('label_currency') + ' <br />';
        infotxt += '<br />' + $.i18n.prop('label_quantity') + ': <input type="text" id="article_count_' + key + '" size="1" maxlength="1" value="' + val.count + '" /><br />';
        infotxt += '<br />' + $.i18n.prop('label_total') + ': ' + val.sum + ' ' + $.i18n.prop('label_currency');
        info = $(document.createElement('span'))
            .html(infotxt)
            .appendTo(secondTd);

        thirdTd = $(document.createElement('td')).appendTo(row); //Третий столбец (описание)
            
        desc = $(document.createElement('span'))
            .addClass('articleDescrHeader')
            .text( $.i18n.prop('label_description') +':')
            .appendTo(thirdTd);
        $(document.createElement('br')).appendTo(thirdTd);
        thirdTd.html(thirdTd.html() + val.shortDescription);
    });
    $('#cartView').html(div);
    if (i || current_page == 'cart_page')
        change_popup ('cartView_page');
}

/**
 * Удалить продукт из корзины
 */
function removeArticle (f, oid) {
    var p = {
        objectId: oid,
        objectType: cart_contents[oid].objectType,
        getCartContents: 'true'
    };
    customerService (f, 'removeArticle', getCart_callback, p);
}

/**
 * Изменить число экземпляров продукта в корзине
 */
function updateArticleAmount (f, oid) {
    var p = {
        objectId: oid,
        objectType: cart_contents[oid].objectType,
        newCount: elt('article_count_' + oid).value,
        getCartContents: 'true'
    };
    customerService (f, 'updateArticleAmount', getCart_callback, p);
}

/**
 * Значение поля рубашки
 */
function cart_shirt_attr_val (attr, val) {
    return ('<b>' + productAttr.shirt[attr].attr.displayName + '</b>: ' + val + '<br />');
}

function cart_shirt_attr (attr) {
    return (cart_shirt_attr_val (attr, productAttr.shirt[attr].values[cart_shirt[attr]].shortName));
}

/**
 * Заполнение описания рубашки
 */
function getShirt_callback (res) {
    eval (res);
    cart_shirt = a;
    var last_measurements_step = a.model ? last_meas_ladies_step : last_meas_mens_step;
    var measurements = a.model ? meas_ladies : meas_mens;
    var attrs = a.model ? productAttr.ladies_shirt : productAttr.mens_shirt;
    var s = '';
    s += '<table summary="">';
    s += '<tr>';
    s += '<td width="50%">';
    s += '<img alt="" src="' + design_base + '/shirt/' +a.fabric + '/fabric_icon.png" />';
    s += '<span class="articleDescrHeader">' + $.i18n.prop('label_description') +':</span>';
    s += a.description;
    s += '</td>';
    s += '<td width="50%">';
    var i, j, n = 0;
    s += '<span class="articleDescrHeader">' + $.i18n.prop('label_sizes') + ':</span>';
    for (i = 1; i < last_measurements_step; i++)
        for (j in measurements[i])
            if (a[j])
                s += ++n + '. ' + attrs[j].attr.displayName + ': ' + a[j] + ' ' + $.i18n.prop('label_cm') + '<br />';
    if (a.stdSize && !a.model)
        s += ++n + '. ' + attrs.stdSize.attr.displayName + ': ' + a.stdSize + ' ' + $.i18n.prop('label_cm') + '<br />';
    s += '</td>';
    s += '</tr>';
    s += '</table>';
    write_inner ('shirtView', s);
    //if (design_sex == (a.model ? 'f' : 'm'))
    //    show_inline_item ('copy2design');
    //else
    //    hide_item ('copy2design');
    if (current_popup == 'cartView_page')
        change_popup2 ('shirtView_page');
    else
        change_popup4 ('shirtView_page');
}

/**
 * Закрыть страницу просмотра детальной информации о рубашке
 */
function close_shirtView () {
    if (current_popup2 == 'shirtView_page')
        change_popup2 ('');
    else
        change_popup4 ('');
}

/**
 * Запросить у бекенда детальную информацию о рубашке
 */
function customshirtView (f, o) {
    var p = {
        objectId: o.objectId,
        objectType: o.objectType
    };
    customerService (f, 'objectRead', getShirt_callback, p);
}

/**
 * Оформить заказ
 */
function checkout () {
    if ($('#cart_count').html() == '0') {
        myalert ($.i18n.prop('msg_emptyCart'));
        return;
    }
    customerService (0, 'addressList', addressList_callback);
    write_inner ('checkout_sum', elt('cart_sum').innerHTML);
    change_popup ('checkout_page');
}


/**
 *
 *  Секция адресов доставки
 *  Шаг 1 корзины
 *  
 */

/**
 * Реакция на получение списка адресов пользователя от бекенда
 */
function addressList_callback (res) {
    eval (res);
    addresses = a;

    var checkoutAddress = $('#checkout_address').html('<span class="normal_link" onclick="createAddress_page()">(+) '+ $.i18n.prop('label_addShippingAddr') + '</span>');
    var addressList = $('#addressList');
    
    var empty = true;
    var oid;
    for (oid in a) {
        empty = false;
        break;
    }
    if (empty)
        return;

    var s = '';
    /*
    table = $(document.createElement('table')).attr('cellspacing', '0'); //Create new table
    firstTr = $(document.createElement('tr')).appendTo(table); //First row - labels
    $(document.createElement('th'))
        .attr('width', '60%')
        .text($.i18n.prop('label_address'))
        .appendTo(firstTr);
    $(document.createElement('th'))
        .text($.i18n.prop('label_actions'))
        .appendTo(firstTr);

    $.each(a, function(key, val) {
        tr = $(document.createElement('tr')).appendTo(table);
        $(document.createElement('td')) //First td - name
            .text(val['displayName'])
            .appendTo(tr);
        secondTd = $(document.createElement('td')).appendTo(tr);
        updateSpan = $(document.createElement('span')) //Change
            .addClass('normal_link')
            .text($.i18n.prop('label_change'))
            .appendTo(secondTd)
            .click(function(){
                updateAddress_page(key);
            });
        deleteSpan = $(document.createElement('span')) //Delete
            .addClass('normal_link')
            .text($.i18n.prop('label_delete'))
            .appendTo(secondTd)
            .click(function() {
                deleteAddress(this, key);
            });

        if(val.selected != 'true') { //If current is not active
            $(document.createElement('br')).appendTo(secondTd);
            setActiveSpan = $(document.createElement('span')) //Option to make active
                .addClass('normal_link')
                .text($.i18n.prop('label_makeActive'))
                .appendTo(secondTd)
                .click(function() {
                    setActiveAddress(this, key);
                });
        } else { //If current is active
            tr.addClass('selected');
            displayPhone = val.contactPhone ? ', '+ $.i18n.prop('label_phoneNum') + val.contactPhone : '';
            selected_address = val;
            var phone = selected_address.contactPhone;
            
            checkout_address.empty();
            $(document.createElement('span'))
                .text(val.displayName + displayPhone)
                .appendTo(checkout_address);
            $(document.createElement('br')).appendTo(checkout_address);
            $(document.createElement('span')) //Change address
                .addClass('normal_link')
                .text($.i18n.prop('label_changeAddress'))
                .appendTo(checkout_address)
                .click(addressList_page);

            $(document.createElement('span')) //Continue
                .addClass('normal_link')
                .text($.i18n.prop('label_continue'))
                .appendTo($(document.createElement('p')).appendTo(checkout_address))
                .click(checkout2);
        }
    });
    addressList.html(table);
    */

    
    s += '<table summary="" cellspacing="0">';
    s += '<tr><th width="60%">' + $.i18n.prop('label_address') + 
        '</th><th>' + $.i18n.prop('label_actions') + '</th></tr>';
    $.each(a, function(key, val) {
        s += val.selected == 'true' ? '<tr class="selected">' : '<tr>';
        s += '<td>';
        s += val.displayName;
        s += '</td>';
        s += '<td>';
        s += '<span class="normal_link" onclick="updateAddress_page(\'' + key + '\')">';
        s += $.i18n.prop('label_change');
        s += '</span>';
        s += ' ';
        s += '<span class="normal_link" onclick="deleteAddress(this,\'' + key + '\')">';
        s += $.i18n.prop('label_delete');
        s += '</span>';
        if (val.selected != 'true') {
            s += '<br />';
            s += '<span class="normal_link" onclick="setActiveAddress(this,\'' + key + '\')">';
            s += $.i18n.prop('label_makeActive');
            s += '</span>';
        } else {
            selected_address = val;
            var phone = selected_address.contactPhone;
            var displayPhone = phone ? ', ' + $.i18n.prop('label_phoneNum') + '.' + phone : '';
            var txt = val.displayName + displayPhone
                + '<br /><span class="normal_link" onclick="addressList_page()">' + $.i18n.prop('label_changeAddress') + '</span>'
                + '<p><span class="normal_link" onclick="checkout2()">' + $.i18n.prop('label_continue') + '</span></p>';
            checkoutAddress.empty().html(txt);
        }
        s += '</td>';
        s += '</tr>';
    })
    s += '</table>';
    addressList.empty().html(s);
}

/**
 * Вызов страницы добавления адреса. В английской версии сразу начинается с выбора страны.
 */
function createAddress_page () {
    $('#ca_postIndex, #ca_country, #ca_region, #ca_rn, #ca_city, #ca_np, #ca_streetAddress, #ca_recipientName, #ca_contactPhone').val('');
    customerService (0, 'countryList', countryList_callback);
    $('#ca_postIndex').focus();
}

/**
 * Вызов страницы со списком адресов
 */
function addressList_page () {
    customerService (0, 'addressList', addressList_callback);
    change_popup2 ('addressList_page');
}

/**
 * Вызов страницы обновления адреса доставки. Само выбирает необходимую функцию в зависимости
 * от того есть ли iso у выбранного адреса
 */
function updateAddress_page (oid) {
    if (addresses[oid].iso)
        updateIntlAddress_page (oid);
    else
        updateNatlAddress_page (oid);
}

/**
 * Вызов страницы обновления адреса обычной доставки
 */
function updateNatlAddress_page (oid) {
    elt('ua_objectId').value = oid;
    elt('ua_postIndex').value = addresses[oid].postIndex;
    elt('ua_country').value = addresses[oid].country;
    elt('ua_region').value = addresses[oid].region;
    elt('ua_rn').value = addresses[oid].rn;
    elt('ua_city').value = addresses[oid].city;
    elt('ua_np').value = addresses[oid].np;
    elt('ua_streetAddress').value = addresses[oid].streetAddress;
    elt('ua_contactPhone').value = addresses[oid].contactPhone;
    elt('ua_recipientName').value = addresses[oid].recipientName;
    change_popup3 ('updateAddress_page');
}

/**
 * Вызов страницы обновления адреса международной доставки
 */
function updateIntlAddress_page (oid) {
    addr = addresses[oid];
    $('#uia_objectId').val(oid);
    $('#uia_iso').val(addr.iso);
    $('#uia_postIndex').val(addr.postIndex);
    $('#uia_country').val(addr.country);
    $('#uia_region').val(addr.region);
    $('#uia_city').val(addr.city);
    $('#uia_streetAddress').val(addr.streetAddress);
    $('#uia_contactPhone').val(addr.contactPhone);
    $('#uia_recipientName').val(addr.recipientName);
    change_popup3 ('updateIntlAddress_page');
}
/**
 * Реакция на получение списка стран от бекенда
 */
function countryList_callback (res) {
    eval (res);
    country_list = a;
    var s = $('#countryList');
    //Каждую полученную страну засовываем в новый список
    $.each(country_list, function(key, val) {
        $(document.createElement('span'))
            .text(val.alpha2 + ' ' + val.nameEN)
            .addClass('normal_link')
            .click(function() {
                select_country(val.iso);
            })
            .appendTo(s);
        $(document.createElement('br')).appendTo(s);
    });
    change_popup3 ('countryList_page');
}

/**
 * Выбрать страну
 */
function select_country (iso) {
    var c = country_list[iso];
    $('#cia_iso').val(iso);
    $('#cia_country').val(c.nameEN);
    $('#cia_postIndex, #cia_region, #cia_city, #cia_streetAddress, #cia_recipientName, #cia_contactPhone').val('');

    change_popup3 ('createIntlAddress_page');
    $('#cia_postIndex').focus();
}

/**
 * Добавить адрес доставки в России
 * В английской версии не используется
 */
function createAddress (f) {
    var p = {};
    p.country = elt('ca_country').value;
    p.postIndex = elt('ca_postIndex').value;
    p.region = elt('ca_region').value;
    p.rn = elt('ca_rn').value;
    p.city = elt('ca_city').value;
    p.np = elt('ca_np').value;
    p.streetAddress = elt('ca_streetAddress').value;
    p.recipientName = elt('ca_recipientName').value;
    p.contactPhone = elt('ca_contactPhone').value;
    if (!p.country) {
        myalert ('Ошибка в почтовом индексе');
        elt('ca_postIndex').focus();
        return;
    } else if (!p.streetAddress) {
        myalert ('Не заполнен адрес');
        elt('ca_streetAddress').focus();
        return;
    } else if (!p.recipientName) {
        myalert ('Не заполнено ФИО получателя');
        elt('ca_recipientName').focus();
        return;
    }
    customerService (f, 'createAddress', createAddress_callback, p);
}

/**
 * Добавить адрес международной доставки
 */
function createIntlAddress (f) {
    var p = {
        iso             : $('#cia_iso').val(),
        country         : $('#cia_country').val(),
        postIndex       : $('#cia_postIndex').val(),
        region          : $('#cia_region').val(),
        rn              : '',
        city            : $('#cia_city').val(),
        np              : '',
        streetAddress   : $('#cia_streetAddress').val(),
        recipientName   : $('#cia_recipientName').val(),
        contactPhone    : $('#cia_contactPhone').val()
    };

    if (!p.postIndex && !myconfirm ($.i18n.prop('msg_emptyZip'))) { //Zip is empty
        $('#cia_postIndex').focus();
        return;
    }
    if (!p.streetAddress) { //Address is empty
        myalert ($.i18n.prop('msg_emptyAddress'));
        $('#cia_streetAddress').focus();
        return;
    } else if (!p.recipientName) { //Recipient is empty
        myalert ($.i18n.prop('msg_emptyRecipient'));
        $('#cia_recipientName').focus();
        return;
    }
    customerService (f, 'createAddress', createAddress_callback, p);
}

/**
 * Реакция на ответ бекенда по поводу создания нового адреса
 */
function createAddress_callback (res) {
    customerService (0, 'addressList', addressList_callback);
    change_popup3 ('');
}

/**
 * Функция обновления обычного адреса доставки
 */
function updateAddress (f) {
    var p = {
        objectId        : $('#ua_objectId').val(),
        country         : $('#ua_country').val(),
        postIndex       : $('#ua_postIndex').val(),
        region          : $('#ua_region').val(),
        rn              : $('#ua_rn').val(),
        city            : $('#ua_city').val(),
        np              : $('#ua_np').val(),
        streetAddress   : $('#ua_streetAddress').val(),
        recipientName   : $('#ua_recipientName').val(),
        contactPhone    : $('#ua_contactPhone').val()
    };
    customerService (f, 'updateAddress', updateAddress_callback, p);
}

/**
 * Функция обновления международного адреса доставки
 */
function updateIntlAddress (f) {
    var p = {
        objectId        : $('#uia_objectId').val(),
        iso             : $('#uia_iso').val(),
        country         : $('#uia_country').val(),
        postIndex       : $('#uia_postIndex').val(),
        region          : $('#uia_region').val(),
        rn              : '',
        city            : $('#uia_city').val(),
        np              : '',
        streetAddress   : $('#uia_streetAddress').val(),
        recipientName   : $('#uia_recipientName').val(),
        contactPhone    : $('#uia_contactPhone').val()
    };
    customerService (f, 'updateAddress', updateAddress_callback, p);
}

/**
 * Реакция на ответ бекенда по поводу обновления адреса доставки
 */
function updateAddress_callback (res) {
    addressList_page ();
}

/**
 * Удаление адреса доставки по его идентификатору
 */
function deleteAddress (f, oid) {
    var p = {
        objectId: oid
    };
    //customerService (f, 'deleteAddress', deleteAddress_callback, p);
    customerService (f, 'deleteAddress', function () {
        addressList_page ();
    }, p);
}

/*
function deleteAddress_callback (res) {
    addressList_page ();
}
*/

/**
 * Функция установки активного адреса доставки по идентификатору адреса
 */
function setActiveAddress (f, oid) {
    var p = {
        objectId: oid
    };
    customerService (f, 'setActiveAddress', setActiveAddress_callback, p);
}
/**
 * Реакция на изменение активного адреса доставки после получения ответа бекенда
 */
function setActiveAddress_callback (res) {
    customerService (0, 'addressList', addressList_callback);
    change_popup2 ('');
}

/**
 *
 * Конец секции адресов доставки
 *
 */

/**
 *
 * Шаги покупки 2 и 3. Часть функций не используеются при зарубежной доставке
 *
 */

/**
 * Второй шаг - вызывает список методов доставки
 */
function checkout2 () {
    write_inner ('checkout2_sum', elt('cart_sum').innerHTML);
    shippingList ();
    change_popup2 ('checkout2_page');
}

/**
 * Запрашивает список возможных способов доставки
 */
function shippingList () {
    var p = {
        objectType: 'shipping'
    };
    customerService (0, 'objectList', shippingList_callback, p);
}

/**
 * Обработка возвращенного списка способов доставки
 */
function shippingList_callback (res) {
    eval (res);
    shipping_list = a;
    
    table = $(document.createElement('table')); //Table
    firstTr = $(document.createElement('tr')).appendTo(table); //Header row
    $(document.createElement('td'))
        .html('&nbsp;')
        .appendTo(firstTr);

    $(document.createElement('span')) //Shipment methods header
        .addClass('articleDescrHeader')
        .text($.i18n.prop('label_shippingMethods') + ':')
        .appendTo($(document.createElement('td')).appendTo(firstTr));
    $(document.createElement('td'))
        .html('&nbsp;')
        .appendTo(firstTr);
    var sel = 'true';
    $.each(a, function(k,v) {
        if (sel == 'true') {
            radiobuttons.shippingMethod = k;
        }
        var m = selected_address.contactPhone.match(/\d/g);
        var disabled = v.shippingMethod == 'cpcrShipping' && (m == null || m.length < 10);
        //var system_radio_class = disabled ? ' disabled="disabled"' : sel == 'true' ? ' checked' : '';
        system_radio_class = disabled ? {disabled: 'disabled'} : sel == 'true' ? {checked: true} : null;
        var img_radio_class = disabled ? ' disabled' : sel;

        tr = $(document.createElement('tr')).appendTo(table);
        firstTd = $(document.createElement('td')).appendTo(tr); //first column with checkbox
        $(document.createElement('input'))
            .attr({
                type: 'radio',
                name: 'shippingMethod',
                id  : k
            })
            .attr(system_radio_class)
            .val(k)            
            .addClass('shippingMethod_radio')
            .appendTo(firstTd)
            .click(function(){
                change_radio(this);
            });

        $(document.createElement('img')) //Clickable image (round)
            .attr({
                src : image_base + images_prefix +'/unisex/dummy.gif',
                id  : k + '_img'
            })
            .addClass('radio')
            .addClass(img_radio_class)
            .appendTo(firstTd)
            .click(function(){
                $('#'+ k)[0].click();
                return false;
            });

       secondTd = $(document.createElement('td')).appendTo(tr);
       $(document.createElement('label')) //Method text description
            .attr('for', k)
            .text(v.description)
            .appendTo(secondTd)
            .click(function() {
                $('#' + k)[0].click();
                return false;
            })
       if(disabled) {
            $(document.createElement('span')) //Phone number is required
                .attr('id', 'contactPhone_required')
                .addClass('normal_link')
                .text($.i18n.prop('label_contactPhoneNeeded'))
                .appendTo(secondTd)
                .click(addressList_page);
       }

       thirdTd = $(document.createElement('td'))  //Third td
            .appendTo(tr)
            .html($.i18n.prop('label_cost') + '<br />' + v.price + '&nbsp;' + $.i18n.prop('label_currency'));
       sel = 'false';
    });

    $('#checkout_shipping').html(table);

}

function change_use_balance () {
    enable_ckbox ('use_balance', use_balance);
    if (use_balance && account_balance >= order_total)
        hide_item ('checkout_payment');
    else
        show_item ('checkout_payment');
}

function select_ckbox_use_balance () {
    use_balance = !use_balance;
    change_use_balance ();
}

/**
 * 3й шаг покупки - выбор способа оплаты. Запрашивает варианты оплаты с бекенда
 */
function checkout3 (f) {
    var sum = parseInt (0 + $('#cart_sum').text(), 10);
    var shipping_cost = parseInt (0 + shipping_list[radiobuttons.shippingMethod].price, 10);
    order_total = sum + shipping_cost;
    if (!order_total) {
        checkout4 ();
        return;
    }
    $('#checkout3_sum').text(sum);
    $('#checkout3_shipping').text(shipping_cost);
    $('#checkout3_total').text(order_total);
    customerService (f, 'paymentList', checkout3_paymentList_callback);
}

/**
 * Обрабатывает возвращенные бекендом варианты оплаты и делает из них список передаваемый пользователю
 */
function checkout3_paymentList_callback (res) {
    eval (res);
    payment_list = a;
    var intl = false;
    $.each(shipping_list, function(k,v) { //Magic
       intl = v.shippingMethod.match (/^intl/);
       return false;
    });
    /*
    for (var i in shipping_list) {
        intl = shipping_list[i].shippingMethod.match (/^intl/);
        break;
    }
    */
    $('#checkout_payment').html(function() {
       table = $(document.createElement('table'));
       $.each(a, function(k,v) {
           var pm = v.paymentMethod;
           var sel = pm == 'cardPayment';
           if (sel) {
               radiobuttons.paymentMethod = pm;
           } else if (intl) //if not paying by card
               return true; //proceed to the next record
           tr = $(document.createElement('tr')).appendTo(table);
           firstTd = $(document.createElement('td')).appendTo(tr);
           $(document.createElement('input')) //Hidden checkbox
                .attr({
                    type: 'radio',
                    name: 'paymentMethod',
                    id  : pm
                })
                .attr(sel ? {checked: true} : '')
                .addClass('paymentMethod_radio')
                .val(pm)
                .appendTo(firstTd)
                .click(function() {
                   change_radio(this);
                });
           $(document.createElement('img')) //Drawn checkbox
                .attr({
                    src : image_base + images_prefix +'/unisex/dummy.gif',
                    id  : pm + '_img'
                })
                .addClass('radio')
                .addClass(sel)
                .appendTo(firstTd)
                .click(function(){
                   $('#' + pm)[0].click();
                });

           $(document.createElement('label')) //Description
                .attr('for', pm)
                .text(v.displayName)
                .appendTo($(document.createElement('td')).appendTo(tr))
                .click(function() {
                    $('#' + pm)[0].click();
                    return false;
                });
       });

       return table;
    });
    /*
    var s = '';
    s += '<table summary="">';
    for (i in a) {
        var pm = a[i].paymentMethod;
        var sel = pm == 'cardPayment';
        if (sel)
            radiobuttons.paymentMethod = pm;
        else if (intl)
            continue;
        s += '<tr>';
        s += '<td>';
        s += '<input type="radio" name="paymentMethod" class="paymentMethod_radio" id="' + pm + '" value="' + pm + '"' + (sel ? ' checked' : '') + ' onclick="change_radio(this)" />';
        s += '<img alt="" class="radio ' + sel + '" src="'+ image_base + images_prefix +'/unisex/dummy.gif" id="' + pm + '_img" onclick="elt(\'' + pm + '\').click()" />';
        s += '</td>';
        s += '<td>';
        s += '<label for="' + pm + '" onclick="elt(\'' + pm + '\').click();return(false)">' + a[i].displayName + '</label>';
        s += '</td>';
        s += '</tr>';
    }
    s += '</table>';
    write_inner ('checkout_payment', s);
    */
    change_use_balance ();
    $('#checkout_balance').html(account_balance);
    if (account_balance)
        show_item ('use_account_balance');
    else
        hide_item ('use_account_balance');
    change_popup ('checkout3_page');
}

/**
 * 4й шаг заказа - создание заказа
 */
function checkout4 () {
    var sum = parseInt (0 + $('#cart_sum').text(), 10);
    var shipping_cost = parseInt (0 + shipping_list[radiobuttons.shippingMethod].price, 10);
    var p = {
        sum         : sum + shipping_cost,
        shipping    : shipping_list[radiobuttons.shippingMethod].shippingMethod,
        shippingSum : shipping_cost,
        useBalance  : use_balance
    };
    var mnogoRu = $('#mnogoRu').val();
    if (mnogoRu) {
        var t = {
            'mnogoRu' : /^\d{8}$/
        };
        check_inputs (t);
        p.mnogoRu = $('#mnogoRu').val();
    }
    customerService (0, 'createOrder', createOrder_callback, p);
}

/**
 * Обработка ответа бекенда на запрос создания заказа
 */
function createOrder_callback (res) {
    eval (res);
    write_inner ('checkout4_sum', sum - shippingSum);
    write_inner ('checkout4_shipping', shippingSum);
    write_inner ('checkout4_total', sum);
    var toPay = sum - usedOst - usedVirtual;
    var discount = sum - toPay;
    write_inner ('checkout4_usedBalance', discount);
    write_inner ('checkout4_toPay', toPay);
    if (discount) {
        elt('checkout4_usedBalance_row').className = '';
        elt('checkout4_toPay_row').className = '';
    } else {
        elt('checkout4_usedBalance_row').className = 'collapsed';
        elt('checkout4_toPay_row').className = 'collapsed';
    }
    var payment = radiobuttons.paymentMethod;
    cpi = $('#checkout_payment_instr')
    cpi.html(function(){
        div = $(document.createElement('div')).attr('id', 'checkout_invoice');
        switch (payment) {
            case 'cardPayment':
                $(document.createElement('p')).html($.i18n.prop('label_cardPayment1')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_cardPayment2')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_cardPayment3')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_cardPayment4')).appendTo(div);
                if (0 && !document.referrer) {
                    $(document.createElement('br')).appendTo(div);
                    $(document.createElement('b')).html($.i18n.prop('label_warning') + '!').appendTo($(document.createElement('p')).appendTo(div));
                    $(document.createElement('p')).html($.i18n.prop('label_noReferrer1')).appendTo(div);
                    $(document.createElement('p')).html($.i18n.prop('label_noReferrer2')).appendTo(div);
                    $(document.createElement('p')).html($.i18n.prop('label_noReferrer3')).appendTo(div);
                    $(document.createElement('p')).html($.i18n.prop('label_noReferrer4')).appendTo(div);
                }
                break;
            case 'postalPayment':
                $(document.createElement('p')).html($.i18n.prop('label_postalPayment1')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_postalPayment2')).appendTo(div);
                break;
            case 'sbrfPayment':
                $(document.createElement('p')).html($.i18n.prop('label_sbrfPayment1')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_sbrfPayment2')).appendTo(div);
                break;
            case 'bankPayment':
                $(document.createElement('p')).html($.i18n.prop('label_bankPayment1')).appendTo(div);
                $(document.createElement('p')).html($.i18n.prop('label_bankPayment2')).appendTo(div);
                break;
        }

        if (payment != 'cardPayment') {
            p = $(document.createElement('p'))
                .text($.i18n.prop('label_getPaymentForm')+ ' ')
                .appendTo(div);
            doc = invoiceUrl + objectId + '&payment=' + payment + '&format=doc';
            pdf = invoiceUrl + objectId + '&payment=' + payment + '&format=pdf';
            jpeg = invoiceUrl + objectId + '&payment=' + payment + '&format=jpg';
            $(document.createElement('a'))
                .attr({
                    href    : doc,
                    target  : '_blank'
                })
                .html('DOC')
                .appendTo(p);
            $(document.createElement('a'))
                .attr({
                    href    : pdf,
                    target  : '_blank'
                })
                .html('(Acrobat Reader)')
                .appendTo(p);

            $(document.createElement('a'))
                .attr({
                    href    : jpeg,
                    target  : '_blank'
                })
                .text('JPEG')
                .appendTo(p);
        }

        return div;
    });

    if (payment != 'cardPayment' || !toPay) {
        $(document.createElement('span'))
            .addClass('normal_link')
            .text($.i18n.prop('msg_confirmOrder'))
            .appendTo($(document.createElement('p')).appendTo(cpi))
            .click(function() {
                checkout_confirm(this, objectId);
            })
    } else {
        $(document.createElement('span'))
            .addClass('normal_link')
            .text($.i18n.prop('label_makePayment'))
            .appendTo($(document.createElement('p')).appendTo(cpi))
            .click(function() {
                payOrder(this, objectId);
            })
    }

    /*
    var s = '';
    s += '<div id="checkout_invoice">';
    s += '<p>';
    switch (payment) {
        case 'cardPayment':
            s += 'Вы выбрали оплату пластиковой картой.<br/>';
            s += 'Оплата производится на сервере платежной системы "КиберПлат".<br/>';
            s += 'Сейчас будет произведен переход на сайт "КиберПлат".<br/>';
            s += 'По возвращении обратно на наш сайт Ваш заказ будет доступен в истории заказов в Вашем "Личном кабинете".';
            if (0 && !document.referrer) {
                s += '<br/><br/><b>Внимание!</b><br/>';
                s += 'Ваш браузер не предоставил адрес ссылающейся страницы (Referer).<br/>';
                s += 'Пожалуйста, проверьте настройки Вашего браузера или других систем, которые могут блокировать отправку Referer.<br/>';
                s += 'Сервер КиберПлат требует предоставления Referer и проверяет его соответствие регистрационным данным интернет-магазина.<br/>';
                s += 'В случае отсутствия или несоответствия возвращается отказ с сообщением "В переданных магазином данных заказа содержится ошибка. Свяжитесь с администратором магазина".';
            }
            break;
        case 'postalPayment':
            s += 'Вы выбрали почтовый перевод для оплаты заказа.<br />';
            s += 'Ниже представлен бланк для оплаты в любом почтовом отделении.';
            break;
        case 'sbrfPayment':
            s += 'Вы выбрали оплату через Сбербанк.<br />';
            s += 'Ниже представлен бланк для оплаты заказа в любом отделении Сбербанка России.';
            break;
        case 'bankPayment':
            s += 'Вы выбрали оплату банковским переводом.<br />';
            s += 'Ниже представлен счет для оплаты заказа.';
            break;
    }
    s += '</p>';
    if (payment != 'cardPayment') {
        s += '<p>';
        s += 'Получить бланк в формате <a href="' + invoiceUrl + objectId + '&payment=' + payment + '&format=doc" target="_blank">DOC</a> (MS Word)';
        s += ', <a href="' + invoiceUrl + objectId + '&payment=' + payment + '&format=pdf" target="_blank">PDF</a> (Acrobat Reader), ';
        s += '<a href="' + invoiceUrl + objectId + '&payment=' + payment + '&format=jpg" target="_blank">JPEG</a>';
        s += '</p>';
    }
    s += '</div>';
    if (payment != 'cardPayment' || !toPay)
        s += '<p><span class="normal_link" onclick="checkout_confirm(this,\'' + objectId + '\')">Подтвердить заказ</span></p>';
    else
        s += '<p><span class="normal_link" onclick="payOrder(this,\'' + objectId + '\')">Оплатить заказ</span></p>';
    write_inner ('checkout_payment_instr', s);
    */
    getCart (0);
    if (!toPay)
        hide_item ('checkout_invoice');
    else
        show_item ('checkout_invoice');
    change_popup ('checkout4_page');
    if (use_balance) {
        select_ckbox_use_balance ()
        getDetails ();
    }

    // if customer's referal is mixmarket then let's public tracking code
    if (feeId == mix_market_code) {
        var univar1= objectId;
        var mixMarketImg = new Image(1,1);
        mixMarketImg.src = 'http://mixmarket.biz/uni/tev.php?id=1294933142&r='+escape(document.referrer)+'&t='+(new Date()).getTime()+'&a1='+univar1;
    } else if (feeId == mix_market_products_code) {
        var mixMarketProductsCardImg = new Image(1,1);
        mixMarketProductsCardImg.src = 'http://mixmarket.biz/tr.plx?e=3779408&r='+escape(document.referrer)+'&t='+(new Date()).getTime();
    }
}

/**
 * Подготовить данные для платежной системы
 */
function payOrder (f, id) {
    var p = {
        objectId: id,
        returnUrl: document.URL
    };
    customerService (f, 'payOrder', payOrder_callback, p);
}

/**
 * Обработка ответа сервера на запрос подготовки данных для платежной системы
 */
function payOrder_callback (res) {
    eval (res);
    if (retval != '0') {
        myalert ($.i18n.prop('msg_orderDataPrepareError'));
        return;
    }
    document.charset = charset;
    $('#payOrder_version').val(version);
    $('#payOrder_message').val(decodeURIComponent (message));
    $('#payOrder_form')
        .attr({ 
            action: action,
            acceptCharset: charset
        })
        .submit();
}

function get_invoice (f) {
    customerService (f, 'paymentList', get_invoice_paymentList_callback);
}

function get_invoice_paymentList_callback (res) {
    eval (res);
    payment_list = a;
    var objectId = order.objectId;
    var total = parseInt (0 + order.sum, 10);
    var shipping_cost = parseInt (0 + order.shippingSum, 10);
    write_inner ('get_invoice_sum', total - shipping_cost);
    write_inner ('get_invoice_shipping', shipping_cost);
    write_inner ('get_invoice_total', total);
    var s = '';
    s += '<table summary="">';
    for (var i in a) {
        var pm = a[i].paymentMethod;
        if (pm == 'cardPayment')
            continue;
        var sel = pm == 'postalPayment';
        if (sel)
            radiobuttons.invoice_paymentMethod = pm;
        s += '<tr>';
        s += '<td>';
        s += '<input type="radio" name="invoice_paymentMethod" class="invoice_paymentMethod_radio" id="invoice_' + pm + '" value="' + pm + '"' + (sel ? ' checked' : '') + ' onclick="change_invoice_radio(this)" />';
        s += '<img alt="" class="radio ' + sel + '" src="'+ image_base + images_prefix +'/unisex/dummy.gif" id="invoice_' + pm + '_img" onclick="elt(\'invoice_' + pm + '\').click()" />';
        s += '</td>';
        s += '<td>';
        s += '<label for="invoice_' + pm + '" onclick="elt(\'invoice_' + pm + '\').click();return(false)">' + a[i].displayName + '</label>';
        s += '</td>';
        s += '</tr>';
    }
    s += '</table>';
    s += '<p>';
    s += 'Получить бланк в формате <a id="invoice_doc" href="' + invoiceUrl + objectId + '&format=doc&payment=postalPayment" target="_blank">DOC</a> (MS Word)';
    s += ', <a id="invoice_pdf" href="' + invoiceUrl + objectId + '&format=pdf&payment=postalPayment" target="_blank">PDF</a> (Acrobat Reader), ';
    s += '<a id="invoice_jpg" href="' + invoiceUrl + objectId + '&format=jpg&payment=postalPayment" target="_blank">JPEG</a>';
    s += '</p>';
    write_inner ('get_invoice_payment', s);
    change_popup3 ('get_invoice_page');
}

function change_invoice_radio (f) {
    change_radio (f);
    var objectId = order.objectId;
    var pm = radiobuttons.invoice_paymentMethod;
    elt('invoice_doc').href = invoiceUrl + objectId + '&format=doc&payment=' + pm;
    elt('invoice_pdf').href = invoiceUrl + objectId + '&format=pdf&payment=' + pm;
    elt('invoice_jpg').href = invoiceUrl + objectId + '&format=jpg&payment=' + pm;
}



function confirmOrder_callback (res) {
    myalert ($.i18n.prop('msg_thankForOrder'));
    change_popup ('');
}

function checkout_confirm (f, oid) {
    var p = {};
    p.objectId = oid;
    customerService (f, 'confirmOrder', confirmOrder_callback, p);
}

function getReceipt (id) {
    elt('getReceipt_orderid').value = id;
    elt('getReceipt_form').action = getReceiptUrl + location;
    elt('getReceipt_form').submit();
}


/**
 *
 * Режимы просмотра подробностей продукте в корзине
 * вызвается в основном из articleView
 *
 */

/**
 * Просмотр подробностей о продукте
 */
function articleView (f, oid) {
    var o = cart_contents[oid];
    eval (o.category + 'View (f, o)');
}

/**
 * Галстуки (не конструкторные)
 */
function tiesView (f, product) {
    var s = '';
    s += '<h1>' + product.displayName + '</h1>';
    s += '<img alt="" class="product_photo" src="'+ design_base + '/' + product.category + '/' + product.product + '_photo.jpg" />';
    s += '<p>Цена: ' + product.price + ' руб.</p>';
    if (!current_popup)
        s += '<a class="addToCart" onclick="addProduct(this,\'' + product.objectId + '\')">Добавить в корзину</a>';
    s += '<p><span class="product_descr_hdr">Описание:</span><br />' + product.description + '</p>';
    write_inner ('tiesView', s);
    change_popup4 ('tiesView_page');
}

/**
 * Запонки
 */
function cuffLinksView (f, product) {
    var s = '';
    s += '<h1>' + product.displayName + '</h1>';
    s += '<img alt="" class="product_photo" src="' + design_base + '/' + product.category + '/' + product.product + '_photo.jpg" />';
    s += '<p>Цена: ' + product.price + ' руб.</p>';
    if (!current_popup)
        s += '<a class="addToCart" onclick="addProduct(this,\'' + product.objectId + '\')">Добавить в корзину</a>';
    s += '<p><span class="product_descr_hdr">Описание:</span><br />' + product.description + '</p>';
    write_inner ('cuffLinksView', s);
    change_popup4 ('cuffLinksView_page');
}

/**
 * Носки
 */
function socksView (f, product) {
    var s = '';
    s += '<h1>' + product.displayName + '</h1>';
    s += '<img alt="" class="product_photo" src="' + design_base + '/' + product.category + '/' + product.product + '_photo.jpg" />';
    s += '<p>Цена: ' + product.price + ' руб.<br/>(Цена женских носков указывается за комплект из двух пар, мужских &ndash; из трех пар)</p>';
    s += '<p><span class="product_descr_hdr">Описание:</span><br />' + product.description + '</p>';
    write_inner ('socksView', s);
    change_popup4 ('socksView_page');
}

/**
 * Книги
 */
function booksView (f, product) {
    var s = '';
    s += '<h1>' + product.displayName + '</h1>';
    s += '<img alt="" class="product_photo" src="' + design_base + '/' + product.category + '/' + product.product + '_photo.jpg" />';
    s += '<p>Цена: ' + product.price + ' руб.</p>';
    if (!current_popup)
        s += '<a class="addToCart" onclick="addProduct(this,\'' + product.objectId + '\')">Добавить в корзину</a>';
    s += '<p><span class="product_descr_hdr">Описание:</span><br />' + product.description + '</p>';
    write_inner ('booksView', s);
    change_popup4 ('booksView_page');
}

/**
 * Подарочные сертификаты
 */
function giftCertsView (f, product) {
    var s = '';
    s += '<h1>' + product.displayName + '</h1>';
    s += '<img alt="" class="product_photo" src="' + design_base + '/' + product.category + '/' + product.product + '_photo.jpg" />';
    s += '<p>Цена: ' + product.price + ' руб.</p>';
    if (!current_popup)
        s += '<a class="addToCart" onclick="addProduct(this,\'' + product.objectId + '\')">Добавить в корзину</a>';
    s += '<p><span class="product_descr_hdr">Описание:</span><br />' + product.description + '</p>';
    write_inner ('giftCertsView', s);
    change_popup4 ('giftCertsView_page');
}
/**
 *
 * Конец секции с режимами просмотра корзины
 *
 */

