(function($){
    $.fn.bpcalc = function(options){
        var htmlForm = '';
        var pageNum = 1;

        var options = $.extend({eurl:'bpcalc.php'},options);

        if($('#bpcalc-form').length==0)
            $('body').append('<div id="bpcalc-form" style="display: none;"></dic>');

        return this.each(function(){
            var $button = $(this);
            var $form = $('#bpcalc-form');
            $button.click(function(){
                var thisFn = arguments.callee;
                if(htmlForm==''){
                    //Получение формы
                    htmlForm = '404';
                    $.getJSON(options.eurl+'?callback=?',{action:'getform'},function(data){
                        pageNum = 1;
                        if(data.result!='')
                            htmlForm = data.result;
                        thisFn();
                        return false;
                    });
                }else{
                    if(htmlForm=='404'){
                        $form.html('Не удалось получить HTML форму калькулятора');
                        htmlForm = '';
                    }else{
                        pageNum = 1;
                        $form.html(htmlForm);
                        $form.dialog({
                            title:'Оценка стоимости разработки бизнес-плана',
                            minWidth: '440',
                            modal: true
                        });
                    }
                }
                return false;
            });

            $form.delegate('select[name="target"]','change',function(){
                if($('option:selected',$(this)).hasClass('other')){
                    $('input[name="targetOther"]',$form).show();
                }else{
                    $('input[name="targetOther"]',$form).hide();
                }
            });

            function CheckPage(){
              var checked = 0;
              var isErr = false;
              $('.item',$('#bpcalc-box-'+pageNum)).each(function(){
                checked = 0;
                $('option:selected',$(this)).each(function(){
                    checked +=1;
                    if($(this).hasClass('other')){
                        var name = $(this).parent().attr('name')+'Other';
                    }
                });
                $('input[type="checkbox"]:checked,input[name="analysis"]',$(this)).each(function(){
                    checked +=1;
                });
                $('textarea',$(this)).each(function(){
                    if($(this).val()!=''||$(this).attr('name')=='more') checked +=1;
                });
                $('input[type="text"][class!="other"]',$(this)).each(function(){
                    if($(this).attr('name')=='email'){
                      if(/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i.test($(this).val()))
                        checked +=1;
                    }else if($(this).val()!='')
                      checked +=1;
                });
                if(checked==0) {
                    alert('Указано недостаточно информации для "'+$('.title',$(this)).html()+'"');
                    isErr = true;
                    return false;
                }
              });
              return !isErr;
            }

            $form.delegate('.box-next','click',function(){
                if(pageNum>=3){
                    var mailText = '';
                    var amount   = 0;
                    var isErr = false;
                    $('.item',$form).each(function(){
                        mailText += "\r\n"+$('.title',$(this)).html()+"\r\n";
                        var checked = 0;
                        $('option:selected',$(this)).each(function(){
                            checked +=1;
                            amount += parseInt($(this).val());
                            if($(this).hasClass('other')){
                                var name = $(this).parent().attr('name')+'Other';
                                mailText += ' - '+$('input[name="'+name+'"]',$form).val()+' ('+$(this).val()+"руб.)\r\n";
                            }else{
                                mailText += ' - '+$(this).html()+' ('+$(this).val()+"руб.)\r\n";
                            }
                        });
                        $('input[type="checkbox"]:checked,input[name="analysis"]',$(this)).each(function(){
                            checked +=1;
                            if($(this).attr('checked')){
                                mailText += ' - ' + $('.label',$(this).parent()).html() +' ('+ $(this).val()+"руб.)\r\n";
                                amount += parseInt($(this).val());
                            }else{
                                mailText += " - не нужно\r\n";
                            }
                        });
                        $('textarea',$(this)).each(function(){
                            mailText += ' - '+$(this).val()+"\r\n";
                            if($(this).val()!=''||$(this).attr('name')=='more') checked +=1;
                        });
                        $('input[type="text"][class!="other"]',$(this)).each(function(){
                            mailText += ' - '+$(this).val()+"\r\n";
                            if($(this).attr('name')=='email'){
                              if(/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i.test($(this).val()))
                                checked +=1;
                            }else if($(this).val()!='')
                              checked +=1;
                        });
                        if(checked==0) {
                            alert('Указано недостаточно информации для "'+$('.title',$(this)).html()+'"');
                            isErr = true;
                            return false;
                        }
                    });
                    if(!isErr){
                        mailText +="\r\n"+'Общая стоимость проекта составляет '+amount+'руб.';
                        $.post(options.eurl+'',{action:'sendmail',message:mailText},'json');
                        $form.dialog('close');
                        var waitSeconds = 10;
                        $('.value',$button).html('рассчет '+waitSeconds+'...');
                        setTimeout(function(){
                            waitSeconds -= 1;
                            if(waitSeconds>0){
                                $('.value',$button).html('рассчет '+waitSeconds+'...');
                                setTimeout(arguments.callee,1000);
                            }else{
                                $('.value',$button).html(amount+'руб.');
                                alert("Готово! Стоимость проекта "+amount+"руб.\r\nОкончательная стоимость будет расчитана в течении 24 часов, и выслана вам по почте");
                            }
                        },1000);
                    }
                }else{
                    if(CheckPage()){
                      $('#bpcalc-box-'+pageNum).hide();
                      pageNum+=1;
                      if(pageNum==3){
                          $(this).html('Расчитать!');
                      }
                      $('#bpcalc-box-'+pageNum).show();
                      $('.box-back',$form).show();
                    }
                }
                return false;
            });

            $form.delegate('.box-back','click',function(){
                if(pageNum>1){
                    $('#bpcalc-box-'+pageNum).hide();
                    pageNum-=1;
                    if(pageNum==1){
                        $(this).hide();
                    }
                    $('#bpcalc-box-'+pageNum).show();
                    $('.box-next',$form).html('далее');
                }
                return false;
            });

            $form.delegate('.more','click',function(){
                $('.more-content',$(this).parent()).toggle();
                return false;
            });
        });
    }
})(jQuery);
