/* Main block interfaces */
var request;
var mainpage;

$(document).ready(function(){
    $('.calc-open,.calc-open-active,.plug-in,.plug-in-active,.plug').click(function(e){
        e.preventDefault();
        if($(this).hasClass('plug'))
        {
            mainpage = $(this).attr('rel');    
        }
        else
        {
            mainpage = 'main';    
        }
        
        if($('.calculator').size() == 0)
            showCalc();
    });
    
    // Fast entering links
    $('.fc-fast').live('click', function(e){
        e.preventDefault();
        $(this).closest('td').find('input').val($(this).html()).focus();    
    });
}); 

// Calculator loading
function showCalc(mainpage)
{
    preloadCalcImages();
    $('.right-panel > *:not(.icons-set,.mpi,.enter),.center-panel > *:not(.mp-center,.top-region-panel,.top-phone)').each(function(){
        $(this).fadeOut("normal", function(){
            $(this).remove();
            checkEmptiness();
        });    
    })
}

// Preload images
function preloadCalcImages()
{
    var img1 = new Image();
    img1.src = '/images/loader_eo.gif';
}


// Check areas for emptiness and make heights equal
function checkEmptiness()
{
    if($('.right-panel > *:not(.icons-set,.mpi,.enter),.center-panel > *:not(.mp-center,.top-region-panel,.top-phone)').length == 0)
    {
        if(mainpage != 'main')
        {
            $('.center-panel').append('<h1>Подключение к системе Контур-Экстерн</h1><p>Для подключения пройдите, пожалуйста, форму, представленную ниже. Это не займёт много времени, но сэкономит его на телефонном общении. Если же у вас возникают трудности с заполнением или же что-то работает не так, как надо &mdash; <a href="/contact.html">обратитесь к нам по телефону</a> &mdash; обязательно поможем.</p><p>После отправки вашего запроса наши менеджеры свяжутся с вами максимально оперативно (разумеется, в рабочее время).</p><p>Чтобы вам было удобнее, мы разместили здесь ссылки на описание тарифных планов (все ссылки откроются в новом окне, ваш расчёт никуда не пропадёт).</p><ul><li><a href="/prices/ip/" class="outer" target="_blank">для индивидуальных предпринимателей;</a></li><li><a href="/prices/org/" class="outer" target="_blank">для юридических лиц;</a></li><li><a href="/prices/buh/" class="outer" target="_blank">для обслуживающих бухгалтерий.</a></li></ul><br /><br />');
        }
        $('.center-panel').css('padding-bottom', '0');    
        if($('.center-panel').height() > $('.right-panel').height()) 
        {
            $('.right-panel').height($('.center-panel').height() + 5);    
        }
        placeCalc();
    }
}

// Put the first step calc on a page
function placeCalc()
{
    $('.right-panel').after('<div class="calculator"><div class="fc-stdby fc-mstdby fc-hidden">идёт&nbsp;загрузка...</div></div>');
    $('.fc-stdby').slideDown("fast");
    loadForm(1,false,'.calculator');
    
    // Create Request object
    request = new Request($('.trp-results B').attr('rel'));
}

// Calculator initialization
function initStep1()
{
    // Place region link
    $('.center-panel').append('<p class="rg-notice"><a href="#" class="inner-link">как изменить регион</a>Выбранный регион: <b>' + $('.trp-results B').html() + '</b></p>');
    $('.center-panel').css('paddingBottom', 0);
    
    // Hide hidden elements
    $('.hidden').hide();

    // Recommended checkbox
    $('INPUT[name=recommend]').click(function(){
        $('.recommended').toggle(); 
    });
    
    // Org type changing events
    $('SELECT[name=org_type]').change(function(){
        if($(this).val() == 1)
        {
            $('.org-caption').html('ФИО предпринимателя');
            $('.org-rcaption').html('Реквизиты');
            $('INPUT[name=org_kpp]').fadeOut("fast", function(){
                $('INPUT[name=org_inn]').animate({
                    width: '210px'
                }, "slow");
            });
            $('.yorg TD:eq(1)').html('');
        }
        else
        {
            $('.org-caption').html('Название организации');
            $('.org-rcaption').html('Реквизиты организации');
            $('INPUT[name=org_inn]').animate({
                width: '110px'
                }, 
                "slow", function(){
                    $('INPUT[name=org_kpp]').fadeIn("fast");    
                    $('.yorg TD:eq(1)').html('КПП');
                }
            );
        }    
    });
    
    // Form validation
    $('.step2-calc-form').validate({
        errorClass: 'invalid',
        validClass: "valid",
        rules: {
            org_name: {
                required: true
            },
            org_inn: {
                minlength: function(element) {
                        return $("SELECT[name=org_type]").val() == 2 ? 10 : 12;
                },
                maxlength: function(element) {
                        return $("SELECT[name=org_type]").val() == 2 ? 10 : 12;
                },
                digits: true
            },
            org_kpp: {
                minlength: 9,
                maxlength: 9,
                digits: true
            },
            r_inn: {
                required: {
                    depends: function(element) {
                        return $("INPUT[name=recommend]").attr("checked");
                    }
                },
                digits: true,
                rangelength: [10,12]
            },
            r_kpp: {
                required: {
                    depends: function(element) {
                        return $("INPUT[name=recommend]").attr("checked");
                    }
                },
                digits: true,
                minlength: 9,
                maxlength: 9
            }
        },
        messages: {
            org_name: 'Это поле должно быть заполнено',
            org_inn: {
                digits: "ИНН должен содержать {0} цифр",
                minlength: jQuery.format("ИНН должен состоять из {0} цифр"),
                maxlength: jQuery.format("ИНН должен состоять из {0} цифр")
            },
            org_kpp: {
                digits: "КПП должен состоять из 9 цифр",
                minlength: "КПП должен состоять из 9 цифр",
                maxlength: "КПП должен состоять из 9 цифр"
            },
            r_inn: {
                required: "Заполните, пожалуйста, ИНН",
                digits: "ИНН должен содержать 10 или 12 цифр",
                rangelength: "ИНН должен содержать 10 или 12 цифр"
            },
            r_kpp: {
                required: "Заполните, пожалуйста, КПП",
                digits: "КПП должен состоять из 9 цифр",
                minlength: "КПП должен состоять из 9 цифр",
                maxlength: "КПП должен состоять из 9 цифр"
            }    
        },
        errorPlacement: function(err, el) {
            if (el.attr("name") == "org_inn" || el.attr("name") == "org_kpp" )
                err.insertAfter(".yorg");
            else
            {
                if (el.attr("name") == "r_inn" || el.attr("name") == "r_kpp" )
                    err.insertAfter(".rorg");
                else                
                    err.insertAfter(el);
            }
        }
    });
    
    // Next step button
    $('.step3').click(function(e){
        e.preventDefault();
        
        if(!$('.step2-calc-form').valid())
        return false;
        
        // If editing company data
        if(request.currentCompany != -1)
        {
            request.companies[request.currentCompany] = new Company(
                $("INPUT[name=org_name]").val(),
                $("SELECT[name=org_type]").val(),
                $("SELECT[name=org_routine]").val(),
                $("INPUT[name=org_inn]").val(),
                $("INPUT[name=org_kpp]").val(),
                $("INPUT[name=r_kpp]").val(),
                $("INPUT[name=r_inn]").val()
            );
        }
        else
        {
            var companyID = request.addCompany(new Company(
                $("INPUT[name=org_name]").val(),
                $("SELECT[name=org_type]").val(),
                $("SELECT[name=org_routine]").val(),
                $("INPUT[name=org_inn]").val(),
                $("INPUT[name=org_kpp]").val(),
                $("INPUT[name=r_kpp]").val(),
                $("INPUT[name=r_inn]").val()
            ));
            request.setCurrentCompany(companyID);
        }
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step2-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step3').addClass('selected');
            
            // Start next step loader
            var params = getDataForTariff();
            loadForm(3, $.toJSON(params), '.form-contents');
        });    
    });
}
                      
// Universal form loader
function loadForm(step, parameters, target)
{
    $('.form-contents').append('<div class="fc-stdby fc-hidden">идёт загрузка...</div>');
    $('.fc-stdby').slideDown("fast", function(){
        $.post('/lib/calcform/calcform.php', {action: 'showform', step: step, params: parameters}, function(data){
            $('.fc-stdby').fadeOut("slow", function(){
                $(this).remove();
                if(data)
                {
                    if(step != 6)
                    {
                        $(target).html('<div class="fc-hidden">' + data + '</div>');
                        $('.form-contents').width('');
                        $(target + ' > .fc-hidden').slideDown("normal", function(){
                            if(step != 6) eval("initStep" + step + "()");            
                        });
                    }
                    else
                    {
                        $(target).html(data);
                    }
                }
            });
        });
    });
}


// Initialize step 2 form
function initStep2()
{
    // Change header
    $('.mb-form H2').html('Данные о компании');
    
    // Hide hidden elements
    $('.hidden').hide();

    // Recommended checkbox
    $('INPUT[name=recommend]').click(function(){
        $('.recommended').toggle(); 
    });
    
    // Org type changing events
    $('SELECT[name=org_type]').change(function(){
        if($(this).val() == 1)
        {
            $('.org-caption').html('ФИО предпринимателя');
            $('.org-rcaption').html('Реквизиты');
            $('INPUT[name=org_kpp]').fadeOut("fast", function(){
                $('INPUT[name=org_inn]').animate({
                    width: '210px'
                }, "slow");
            });
            $('.yorg TD:eq(1)').html('');
        }
        else
        {
            $('.org-caption').html('Название организации');
            $('.org-rcaption').html('Реквизиты организации');
            $('INPUT[name=org_inn]').animate({
                width: '110px'
                }, 
                "slow", function(){
                    $('INPUT[name=org_kpp]').fadeIn("fast");    
                    $('.yorg TD:eq(1)').html('КПП');
                }
            );
        }    
    });
    
    // If editing company data
    if(request.currentCompany != -1)
    {
        var indx = request.currentCompany;
        $('SELECT[name=org_type]').val(request.companies[indx].type);
        $('SELECT[name=org_routine]').val(request.companies[indx].routine);
        $('INPUT[name=org_name]').val(request.companies[indx].name);
        $('INPUT[name=org_inn]').val(request.companies[indx].inn);
        $('INPUT[name=org_kpp]').val(request.companies[indx].kpp);
        $('INPUT[name=r_inn]').val(request.companies[indx].r_inn);
        $('INPUT[name=r_kpp]').val(request.companies[indx].r_kpp);
        if(request.companies[indx].r_inn)
        {
            $('INPUT[name=recommend]').click();
        }
        $('SELECT[name=org_type]').change();
    }
    
    // Form validation
    $('.step2-calc-form').validate({
        errorClass: 'invalid',
        validClass: "valid",
        rules: {
            org_name: {
                required: true
            },
            org_inn: {
                minlength: function(element) {
                        return $("SELECT[name=org_type]").val() == 2 ? 10 : 12;
                },
                maxlength: function(element) {
                        return $("SELECT[name=org_type]").val() == 2 ? 10 : 12;
                },
                digits: true
            },
            org_kpp: {
                minlength: 9,
                maxlength: 9,
                digits: true
            },
            r_inn: {
                required: {
                    depends: function(element) {
                        return $("INPUT[name=recommend]").attr("checked");
                    }
                },
                digits: true,
                rangelength: [10,12]
            },
            r_kpp: {
                required: {
                    depends: function(element) {
                        return $("INPUT[name=recommend]").attr("checked");
                    }
                },
                digits: true,
                minlength: 9,
                maxlength: 9
            }
        },
        messages: {
            org_name: 'Это поле должно быть заполнено',
            org_inn: {
                digits: "ИНН должен содержать {0} цифр",
                minlength: jQuery.format("ИНН должен состоять из {0} цифр"),
                maxlength: jQuery.format("ИНН должен состоять из {0} цифр")
            },
            org_kpp: {
                digits: "КПП должен состоять из 9 цифр",
                minlength: "КПП должен состоять из 9 цифр",
                maxlength: "КПП должен состоять из 9 цифр"
            },
            r_inn: {
                required: "Заполните, пожалуйста, ИНН",
                digits: "ИНН должен содержать 10 или 12 цифр",
                rangelength: "ИНН должен содержать 10 или 12 цифр"
            },
            r_kpp: {
                required: "Заполните, пожалуйста, КПП",
                digits: "КПП должен состоять из 9 цифр",
                minlength: "КПП должен состоять из 9 цифр",
                maxlength: "КПП должен состоять из 9 цифр"
            }    
        },
        errorPlacement: function(err, el) {
            if (el.attr("name") == "org_inn" || el.attr("name") == "org_kpp" )
                err.insertAfter(".yorg");
            else
            {
                if (el.attr("name") == "r_inn" || el.attr("name") == "r_kpp" )
                    err.insertAfter(".rorg");
                else                
                    err.insertAfter(el);
            }
        }
    });
    
    // Next step button
    $('.step3').click(function(e){
        e.preventDefault();
        
        if(!$('.step2-calc-form').valid())
        return false;
        
        // If editing company data
        if(request.currentCompany != -1)
        {
            request.companies[request.currentCompany] = new Company(
                $("INPUT[name=org_name]").val(),
                $("SELECT[name=org_type]").val(),
                $("SELECT[name=org_routine]").val(),
                $("INPUT[name=org_inn]").val(),
                $("INPUT[name=org_kpp]").val(),
                $("INPUT[name=r_kpp]").val(),
                $("INPUT[name=r_inn]").val()
            );
        }
        else
        {
            var companyID = request.addCompany(new Company(
                $("INPUT[name=org_name]").val(),
                $("SELECT[name=org_type]").val(),
                $("SELECT[name=org_routine]").val(),
                $("INPUT[name=org_inn]").val(),
                $("INPUT[name=org_kpp]").val(),
                $("INPUT[name=r_kpp]").val(),
                $("INPUT[name=r_inn]").val()
            ));
            request.setCurrentCompany(companyID);
        }
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step2-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step3').addClass('selected');
            
            // Start next step loader
            var params = getDataForTariff();
            loadForm(3, $.toJSON(params), '.form-contents');
        });    
    });
}


// Initialize step 3 form
function initStep3()
{
    // Change header
    $('.mb-form H2').html('Выбор тарифного плана');
    $('#dialog').jqm({overlay: 70});
    
    // Checking tariff functions
    $('INPUT[name=tariff]').click(function(){
        $('.fc-tariff-selected').removeClass('fc-tariff-selected');
        $(this).parent().addClass('fc-tariff-selected');
    });
    
    // Autoheight tariffs
    var maxheight = 0;
    $('.fc-tariff').each(function(){
        if($(this).height() > maxheight) maxheight = $(this).height();
    });
    $('.fc-tariff').each(function(){
        $(this).height(maxheight);
    });
    
    // Services and utilities details window show
    $('.fc-tdetails A').click(function(e){
        e.preventDefault();
        var dialog = $('#dialog').remove();
        $('BODY').append(dialog);
        $('#dialog').html('<h2>' + $(this).html() + '</h2><p>' + $(this).next().html() + '</p><p><strong><a href="#" class="dClose">закрыть окно</a></strong></p>');
        $('#dialog').jqmShow();
        
        $('#dialog .dClose').click(function(e){
            e.preventDefault();
            $('#dialog').jqmHide();
            var dialog = $('#dialog').remove();
            $('.step3-calc-form').append(dialog);
        });
    });

    // Prev step button
    $('.step2').click(function(e){
        e.preventDefault();
        removeCompanyFromList();
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step3-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step2').addClass('selected');
            loadForm(2, false, '.form-contents');
        });    
    });
    
    // Save and add new company button actions
    $('.step2new').click(function(e){
        e.preventDefault();
        
        // Check wether any tariff isn't selected
        if(!$('INPUT[name=tariff]:checked').val())
        {
            alert('Вы не выбрали тарифный план!');    
            return false;
        }
        
        // Add tariff to company
        $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice SPAN').remove();
        var tprice = $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice').text();
        $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice').remove();
        var tname = $('INPUT[name=tariff]:checked').siblings('H3').text();
        
        request.companies[request.currentCompany].setTariff($('INPUT[name=tariff]:checked').val(), tname, tprice);
        addCompanyToList();
        
        // Reset current company and go back to second step
        request.currentCompany = -1;
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step3-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step2').addClass('selected');
            
            // Show step 2
            loadForm(2, false, '.form-contents');
        });    
    });
    
    
    // Step 4 button actions
    $('.step4').click(function(e){
        e.preventDefault();
        
        // Check wether any tariff isn't selected
        if(!$('INPUT[name=tariff]:checked').val())
        {
            alert('Вы не выбрали тарифный план!');    
            return false;
        }
        
        // Add tariff to company
        $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice SPAN').remove();
        var tprice = $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice').text();
        $('INPUT[name=tariff]:checked').siblings('H3').find('.fc-tprice').remove();
        var tname = $('INPUT[name=tariff]:checked').siblings('H3').text();
        
        request.companies[request.currentCompany].setTariff($('INPUT[name=tariff]:checked').val(), tname, tprice);
        addCompanyToList();
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step3-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step4').addClass('selected');
            
            // Show step 4
            var params = getDataForTariff();
            loadForm(4, $.toJSON(params), '.form-contents');
        });    
    });
}

// Initialize step 4 form
function initStep4()
{
    // Change header
    $('.mb-form H2').html('Дополнительные услуги');
    
    // Load data if present
    loadServicesData();
    
    // Checkboxes actions
    $('.fc-chkbox').click(function(){
        if($(this).attr("checked"))
        {
            $(this).siblings().fadeIn("fast");
        }
        else
        {
            $(this).siblings().fadeOut("fast");
        }
    });
    
    // Form validation
    $('.step4-calc-form').validate({
        errorClass: 'invalid',
        validClass: "valid",
        rules: {
            wsnum: {
                required: true,
                digits: true,
                min: 0
            }
        }
    });
    
    // Adding rules to the dynamic fields
    $('.fc-ua-controls INPUT[type=text]').each(function(){
        $(this).rules('add', {
            digits: true,
            min: 0
        });
    });
    
    // Counting button actions
    $('.count').click(function(e){
        e.preventDefault();
        countServices();
    });
    
    // Step 5 button actions
    $('.step5').click(function(e){
        e.preventDefault();
        if(!countServices()) return false;
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step4-calc-form').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step5').addClass('selected');
            
            // Show step 5
            loadForm(5, false, '.form-contents');
        });    
    });
}

// Initialize step 5 form
function initStep5()
{
    // Change header
    $('.mb-form H2').html('Контактная информация');
    
    
    // Form validation
    $('.step5-calc-form').validate({
        errorClass: 'invalid',
        validClass: "valid",
        rules: {
            contact_fio: {
                required: true
            },
            contact_email: {
                required: true
            },
            contact_duty: {
                required: true
            },
            contact_phone_code: {
                required: true,
                minlength: 3,
                maxlength: 5,
                digits: true
            },
            contact_phone: {
                required: true,
                minlength: 5,
                maxlength: 9
            },
            contact_mobile_code: {
                required: true,
                minlength: 3,
                maxlength: 5,
                digits: true
            },
            contact_mobile: {
                required: true,
                minlength: 5,
                maxlength: 9
            }
        },
        messages: {
            contact_fio: 'Это поле должно быть заполнено',
            contact_email: 'Это поле должно быть заполнено',
            contact_duty: 'Это поле должно быть заполнено',
            contact_phone_code: 'Некорректный код города',
            contact_phone: 'Некорректный номер телефона',
            contact_mobile_code: 'Некорректный код оператора',
            contact_mobile: 'Некорректный номер телефона'
        },
        errorPlacement: function(err, el) {
            if (el.attr("name") == "contact_phone_code" || el.attr("name") == "contact_phone" )
                err.insertAfter(".fc-phone-field");
            else
            {
                if (el.attr("name") == "contact_mobile_code" || el.attr("name") == "contact_mobile" )
                    err.insertAfter(".fc-mobile-field");
                else
                    err.insertAfter(el);
            }
        }
    });
    
    $('.send').click(function(e){
        e.preventDefault();
        
        if(!$('.step5-calc-form').valid())
        return false;
        
        // Save contact data
        request.addContactData(
            $("INPUT[name=contact_fio]").val(),
            $("INPUT[name=contact_email]").val(),
            $("INPUT[name=contact_duty]").val(),
            $("INPUT[name=contact_phone_code]").val(),
            $("INPUT[name=contact_phone]").val(),
            $("INPUT[name=contact_mobile_code]").val(),
            $("INPUT[name=contact_mobile]").val()
        );
        
        
         //Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.step5-calc-form').slideUp("normal", function(){
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            
            $('.fc-cart').slideUp("fast", function(){
                // Show finals
                loadForm(6, $.toJSON(request), '.form-contents');
            }); 
        });    
        
    });
}

// Count services prices
function countServices()
{
    if(!$('.step4-calc-form').valid())
    {
        alert('Форма заполнена с ошибками, красным отмечены поля, заполненные некорректно');
        return false;
    }
    
    // Count prices
    request.clearServices(); 
    $('.fc-cart-service').remove();   
    $('.fc-ua-controls .fc-chkbox:checked').each(function(){
        var price = parseInt($(this).val());
        var quant = parseInt($(this).siblings('INPUT').val());
        var id = parseInt($(this).attr("rel"));
        var title = $(this).closest('TR').find('.fc-ua-title').html();
        
        addServiceToList(new Service(title, price, quant, id));
    });
    
    // Count delivery
    var delivery = $('INPUT[name=delivery]:checked');
    var del_value = delivery.val();
    var del_price = delivery.attr('rel');
    var del_title = delivery.next().text();
    
    request.clearDelivery();
    request.clearInstall();
    request.addDelivery(del_value, del_price, del_title);
    if(del_value != 2)
    {
        if(del_value == 0) del_title = 'Выезд специалиста';
        $('.fc-cart-row-overall').before('<tr class="fc-cart-service fc-cart-delivery"><td class="fc-cart-capt">' + del_title + '</td><td class="fc-cart-price"><span>' + del_price + '</span>руб.</td></tr>');
    }
    // Installation count
    if(del_value == 0)
    {
        var inst_price = parseInt($('INPUT[name=wsnum]').attr('rel'));
        var inst_quant = parseInt($('INPUT[name=wsnum]').val());
        
        var rgn = getRegionCode();
        var inst_summary = inst_price;
        
        // Regional installation price
        if(rgn == 77 || rgn == 50)
        {
            inst_summary = inst_summary * inst_quant;
        }
        request.addInstall(inst_quant, inst_price);
        $('.fc-cart-row-overall').before('<tr class="fc-cart-service fc-cart-install"><td class="fc-cart-capt">Установка программ<div class="fc-cart-details">Количество <b>новых</b> рабочих мест: ' + inst_quant + '</div></td><td class="fc-cart-price"><span>' + inst_summary + '</span>руб.</td></tr>');
    }
    recountCart();
    return true;
}

function getRegionCode()
{
    return $('.trp-results B').attr('rel');
}

// Load services data into form from request
function loadServicesData()
{
    // Set dynamic services
    for(i in request.services)
    {
        $('INPUT[name=ua' + request.services[i].id + ']').attr('checked', 'checked');
        $('INPUT[name=ua' + request.services[i].id + ']').siblings().fadeIn("fast");
        $('INPUT[name=ua' + request.services[i].id + ']').siblings('INPUT').val(request.services[i].quant);
    }
    if(request.delivery.value)
    {
        $('.fc-delivery-radios INPUT').removeAttr("checked");
        $('.fc-delivery-radios INPUT[value=' + request.delivery.value + ']').attr('checked', 'checked');
    }
    if(request.install.quant)
    {
        $('INPUT[name=wsnum]').val(request.install.quant);
    }
}

// Adding service to list
function addServiceToList(service)
{
    // Delete link
    if($('.fc-serv-del').size() == 0)
    {
        $('.fc-serv-del').live('click', function(e){
            e.preventDefault();
            request.removeService($(this).attr('rel'));
            $(this).parent().parent().remove();
        });
    }
    
    // Add service to cart
    if(service.quant == 0) return false;
    request.addService(service);
    $('.fc-cart-row-overall').before('<tr class="fc-cart-service"><td class="fc-cart-capt">' + service.name + '<a href="#" class="fc-serv-del" rel="' + service.id + '">удалить</a><div class="fc-cart-details">Количество: ' + service.quant + '</div></td><td class="fc-cart-price"><span>' + (service.price * service.quant) + '</span>руб.</td></tr>');
    recountCart();
}

// Adding company to cart list
function addCompanyToList()
{
    // Create cart layer if it wasn't created yet
    if(!$('.fc-cart').size())
    {
        $('.mb-form').before('<div class="fc-cart"><h2>Ваша корзина</h2><table><tr class="fc-cart-row-overall"><td class="fc-cart-price" colspan="2">Итого: <span class="fc-cart-overall">0</span>руб.</td></tr></table></div>');
        $('.fc-cart').hide();
        
        // Bind click event to an editing link
        $('.fc-cart-capt A:not(.fc-serv-del)').live('click', function(e){
            e.preventDefault();
            request.currentCompany = $(this).parent().parent().attr("class");
            removeCompanyFromList();
        });
    }
    
    // Add company to cart
    var company = request.companies[request.currentCompany];
    $('.fc-cart-row-overall').before('<tr class="' + request.currentCompany + '"><td class="fc-cart-capt">' + company.name + '<a href="#">редактировать</a><div class="fc-cart-details">Тарифный план: ' + company.tariff.name + '</div></td><td class="fc-cart-price"><span>' + company.tariff.price + '</span>руб.</td></tr>');
    
    // Slide down cart layer if it's still hidden
    if(!$('.fc-cart').is(':visible'))
    {
        $('.fc-cart').slideDown("slow");
    }
    recountCart();
}

// Recounting cart contents
function recountCart()
{
    var sum = 0;
    $('.fc-cart TR:not(.fc-cart-row-overall) .fc-cart-price SPAN').each(function(){
        var value = parseInt(money_to_int($(this).html()));
        sum += value;
        $(this).html(int_to_money(value));
    }); 
    $('.fc-cart-row-overall .fc-cart-price SPAN').html(int_to_money(sum));   
}

// Removing company from cart list
function removeCompanyFromList()
{
    $('.fc-cart TABLE TR.' + request.currentCompany).slideUp("fast", function(){
        $(this).remove();
        
        // Remove form contents
        $('.form-contents').width($('.form-contents').width());
        $('.form-contents FORM').slideUp("normal", function(){ 
            $(this).remove();
            $('.steps .selected').removeClass('selected');
            $('#step2').addClass('selected');
            
            // Start next step loader
            var params = getDataForTariff();
            loadForm(2, false, '.form-contents');
        });    
        
        recountCart();
        
        // Remove cart if it's empty
        if($('.fc-cart TABLE TR').size() == 1)
        {
            $('.fc-cart').slideUp('slow', function(){$(this).remove();});
        }
    });
    
}

// Prepare data for tariff getting
function getDataForTariff()
{
    var index = request.currentCompany;
    var params = {region: request.region, routine: request.companies[index].routine, type: request.companies[index].type};
    return params;
}


// Request classes
var Request = jQuery.Class.create({
    init: function(region)
    {
        this.region = region;
        this.companies = new Array();
        this.services = {};
        this.currentCompany = -1;
        this.delivery = {};
        this.install = {};
        this.contact = {};
    },
    addCompany: function(company)
    {
        this.companies[this.companies.length] = company;
        return this.companies.length - 1;
    },
    addService: function(service)
    {
        this.services[service.id] = service;
    },
    removeService: function(id)
    {
        delete this.services[id];
    },
    setCurrentCompany: function (index)
    {
        this.currentCompany = index;
    },
    clearServices: function()
    {
        this.services = {};
    },
    addDelivery: function(val, price, title)
    {
        this.delivery = {value: val, price: price, title: title};
    },
    clearDelivery: function()
    {
        this.delivery = {};
    },
    addInstall: function(quant, price)
    {
        this.install = {quant: quant, price: price};
    },
    clearInstall: function()
    {
        this.install = {};
    },
    addContactData: function(fio, email, duty, pcode, phone, mcode, mobile)
    {
        this.contact = {fio: fio, email: email, duty: duty, phone: '(' + pcode + ') ' + phone, mobile: '(' + mcode + ') ' + mobile};
    }
});

var Company = jQuery.Class.create({
    init: function(name, type, routine, inn, kpp, r_kpp, r_inn)
    {
        this.name = name;
        this.type = type;
        this.routine = routine;
        this.inn = inn;
        this.kpp = kpp;
        this.r_inn = r_inn;
        this.r_kpp = r_kpp;
    },
    setTariff: function(tariffId, tariffName, tariffPrice)
    {
        this.tariff = {id: tariffId, name: tariffName, price: tariffPrice};
    }    
});

var Service = jQuery.Class.create({
    init: function(name, price, quant, id)
    {
        this.price = price;
        this.name = name;
        this.id = id;
        this.quant = quant;
    }
});


// Money -> integer
function money_to_int(money)
{
    money += '';
    return money.replace(/\s+/, '');
}

// Integer -> money
function int_to_money(intvar)
{
    return intvar.nformat(' ');
} 
 
// Функция для оформления чисел
Number.prototype.nformat = function(delimiter, signed)
{
    // Выравнимаеи и разбиваем число на целую и друбную часть
    var arr = Math.abs(this).toFixed(2).toString().split('.', 2);
    var wn  = [];
   
    // Дефолтные значения для параметров
    if ( typeof delimiter !== 'string' ) delimiter = ',';
   
    // Делим по триместрам строку
    for( var i = arr[0].length - 3; i >= 0; i -= 3 )
        wn.push(arr[0].substr(i, 3));
       
    // Если был остаток, то прибавляем его
    if ( i == -1 || i == -2 ) wn.push(arr[0].substr(0, 3 + i));
   
    // Заменяем исходное число на оформленное
    arr[0] = (this < 0 ? '-' : signed ? '+' : '') + wn.reverse().join(delimiter);
   
    // Возвращаем результат
    return arr[0];
}