$(document).ready(function() {
    
    // Funzione che ritorna il form tipo di spedizione
    // @since 22/03/2011
    function getDeliverytypeForm() {
        if ($('#deliverytype').length>0) {
            $.getJSON('/cart-jsondeliverytype',{}, function(data) {

                // $(data.resp.html).replaceAll('#deliverytype');
                $('#deliverytype').html(data.resp.html);
                $(data.ext_data.html).replaceAll('#cartResume');
            });
        }
    }

    $('#deliverytype input[name^="service["]').live('click',function(e) {
        // console.log('#deliverytype input[name^="service["] click');
        // console.log($('#deliverytype input[name^="service["]').length);
        var services = [];
        $('#deliverytype input[name^="service["]').each(function(i){
            if(this.checked)
                services[services.length] = this.value;
        });
        $.getJSON('/cart-jsondeliveryservices',{'service':services}, function(data) {

            // $(data.resp.html).replaceAll('#deliverytype');
            $('#deliverytype').html(data.resp.html);
            $(data.ext_data.html).replaceAll('#cartResume');
        });
        return false;
    });

    $('.cart-add-quantity').click(function(event) {
        var $parent = $(this).parents('tr');
        var postData = {
            idRow: $parent.find('input[name="id_row[]"]').attr('value'),
            id_product: $parent.find('input[name="id_product[]"]').attr('value'),
            property:  {},
            quantity: 1
        }
        var property = {};
        $parent.find('input[name*="property["]').each(function() {
            var name = this.name.replace('property[','').replace(']','');
            if(this.value!='')
                eval('property.' + name + ' = ' + this.value);
        });
        postData.property = property;

        $.post('/cart-insproduct',postData,function(resp) {
            cart = $.parseJSON(resp);
            // modifica del totale del carrello
            //$('#checkPrice-subtotal').html('' + cart.subtotal);
            //$('#order-subtotal').html('' + cart.subtotal);
            //$('#order-total').html('' + cart.total);
            // console.log(cart.approxDelivery);
            $('#checkPrice-subtotal').html('' + cart.subtotal);
            $('#order-subtotal').html('' + cart.subtotal);
            $('#order-total').html('' + cart.total);
            $('#checkPrice-approx-delivery').html('' + cart.approxDelivery);
            $('#checkPrice-total').html('' + cart.approxTotal);
            
            
            if ($('#order-discount')) $('#order-discount').html('' + cart.discount);
            
            // modifica il totale della riga
            // DBG console.log(cart.rows);
            $(cart.rows).each(function() {
                
                if(this.id==postData.idRow) {
                    $('#checkPrice-' + postData.idRow).html('' + this.row_total);
                    $('#shopAlert-' + postData.idRow).html(this.msg);
                    // DBG console.log(postData.idRow + ' ---  '+ this.msg);
                    $parent.find('input[name="quantity[]"]').get(0).value = this.quantity;
                }
            });
        });
        
        // @since 19/06/2011
        // Dobbiamo aggiornare anche il prezzo delle spese di spedizione nel caso venga superata la soglia
        getDeliverytypeForm();
        
        event.preventDefault();
    });


    // bottone - del carrello e del checkout
    $('.cart-sub-quantity').click(function(event) {
        var $parent = $(this).parents('tr');
        var that = this;
        var postData = {
            idRow: $parent.find('input[name="id_row[]"]').attr('value'),
            id_product: $parent.find('input[name="id_product[]"]').attr('value'),
            property:  {},
            quantity: -1
        }
        var property = {};
        $parent.find('input[name*="property["]').each(function() {
            var name = this.name.replace('property[','').replace(']','');
            if(this.value!='')
                eval('property.' + name + ' = ' + this.value);
        });
        postData.property = property;

        $.post('/cart-insproduct',postData,function(resp) {
            cart = $.parseJSON(resp);
            // modifica del totale del carrello
            $('#checkPrice-subtotal').html('' + cart.subtotal);
            $('#order-subtotal').html('' + cart.subtotal);
            $('#order-total').html('' + cart.total);
            $('#checkPrice-approx-delivery').html(''+cart.approxDelivery);
            $('#checkPrice-total').html('' + cart.approxTotal);
            if ($('#order-discount')) $('#order-discount').html('' + cart.discount);
            // modifica il totale della riga
            found = false;
            $(cart.rows).each(function() {

                if(this.id==postData.idRow) {
                    found = true;
                    // $('#product-total-' + postData.idRow).html('' + this.row_total);
                    $('#checkPrice-' + postData.idRow).html('' + this.row_total);
                    $('#shopAlert-' + postData.idRow).html(this.msg);
                    $parent.find('input[name="quantity[]"]').get(0).value = this.quantity;
                }

            });
            // se non è stato trovato il prodotto allora va cancellata la riga
            // visualizzantelo
            if(!found) {
                // cancella la riga associata al prodotto
                parentTr = $(that).parents('tr');
                parentTr.prev().remove();
                parentTr.next().remove();
                parentTr.next().remove();
                // rimuovi totale prodotto, spedizione, totale ordine
                parentTable = parentTr.parents('table');
                
                parentTr.remove();
                if(parentTable.find('tr').length<7) {
                    // bisogna fare il redirect al carrello
                    // console.log('qui ci va una redirezione');
                    document.location = document.location;
                }
            }
        });

        // @since 19/06/2011
        // Dobbiamo aggiornare anche il prezzo delle spese di spedizione nel caso venga superata la soglia
        getDeliverytypeForm();

        event.preventDefault();
    });


    // verifica che nel campo quantity vengano inserito soltanto valori numerici
    $('#addCartForm input[name="quantity"]').keypress(function(e) {
        if( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) {
            return false;
        }
        return true;
    })

    // elemento per modificare le quantità da inserire nel carrello da dettaglio prodotto (aggiunta)
    $('.cart-add-quantity-prod').click(function(e) {
        e.preventDefault();
        var $el = $(this).parents('form').find('input[name="quantity"]');
        // if(eval($(this).parent().find('input[name="purchase_max_qty"]').get(0).value)>eval($el.get(0).value)) {
            $el.attr('value',eval($el.attr('value'))+1);
        //}
        
    });

    // elemento per modificare le quantità da inserire nel carrello da dettaglio prodotto (sottrazione)
    $('.cart-sub-quantity-prod').click(function(e) {
        e.preventDefault();
        var $el = $(this).parents('form').find('input[name="quantity"]');
        if(eval($el.attr('value'))>1/* && eval($(this).parent().find('input[name="purchase_min_qty"]').get(0).value)<eval($el.get(0).value)*/) {
            $el.attr('value',eval($el.attr('value'))-1);
        }
    });


    $('.cartAdd').click(function(e) {
        e.preventDefault();
        $('#addCartForm').submit();
    });

    // Serve per non far eseguire la submit sulla pressione del bottone  modifica indirizzo
    $('.plsNoSubmit').click(function(e){
        e.stopPropagation();
    });

    $(this).find('.shopTblHead input[type=radio]').css('visibility','hidden');

    // Quando si fa il submit di un form viene esguito la richiesta ajax
    $('.form-submit').parents('form').submit(function(e){
        var $formSubmit = $(this).find('.form-submit');
        e.preventDefault();
        // Se premuto uno dei bottoni del cambio indirizzo
        $.post($(this).attr('action'),$(this).serialize(),function(data) {
            var resp = $.parseJSON(data);
            // console.log(resp);
            if(resp.status == 0) {
                /* do nothing */
                alert(resp.msg);
            } else {
                  html = resp.resp.html;
                  $(html).replaceAll('#cartResume');

                  if($formSubmit.children(':first-child').find('input[type=radio]').get(0).name=='idUserAddress')
                      getDeliverytypeForm();
            }
        });
    });

    // elimina tutti gli event handlers click su gli elementi.form-submit
    $('.form-submit').css('cursor','pointer').unbind('click');
    
    if ($.browser.msie && $.browser.version.substr(0,1)<9) {
        
        $('.form-submit input[type=radio]').live('change',function() { 
            $(this).parents('.form-submit').trigger('click');
        });
    }

    // Se clicco su un oggetto della classe frm-submit dopo l'aggiornamento grafico eseguo il submit del form
    $('.form-submit').live('click',function() {
        $(this).siblings('.form-submit').children(':first-child').removeClass('checkSel');
        $(this).children(':first-child').addClass('checkSel')
               .find('input[type=radio]').get(0).checked = true;
        $(this).removeClass('shopDet').siblings().addClass('shopDet').children();
        // submit automatico del form
        $(this).parents('form').submit();
    });

    // mostra i tipi di pagamento vincolanti - esempion Cash on Delivery
    // puo' essere utilizzato solo da determinati corrieri
    $('#deliverytype .form-submit').live('click', function() {
        $('#deliverytype').find('input[name^="service["]').each(function(){this.checked = false;this.disabled = true;});
        $(this).find('input[name^="service["]').each(function() {this.disabled = false});

        // corriere scelto
        // DBG console.log('#deliverytype. form-submit click');
        var id = $(this).find('input[type=hidden]').get(0).value;
        // disabilita tutti i pagamenti vincolati
        $('.indirect').addClass('shopDet')
                      .css('display','none')
                      .find('td.checkSel')
                      .removeClass('checkSel');
        $('.indirect').each(function() {
                // patch grafico - toglie la riga che segue il pagamento disattivato

                $(this).next().css('display','none');
                payRadio = $(this).find('input[type=radio]').get(0);
                payRadio.disabled = true;
                payRadio.checked = false;

                // riabilita il pagamento vincolato se è legato al trasporto scelto
                if($(this).attr('id')=='idPayment' + id) {
                    $(this).css('display','');
                    $(this).next().css('display','');
                    payRadio.disabled = false;
                }
        });
        $('#payment-type-box form').submit();
        // recupera la descrizione del trasport
        // DBG console.log($(this).find('.note'));
        $('#deliveryNote').html('* '+$(this).find('.note').html());
    });
    
    // Submit form aggiungi al carello dalla pagina dei dettaglio
    $('.addCartForm').submit(function(e) {
        $('#product_error_log').html('');
        // Se presente il form per la fast registration
        if ($('#fast_registration').length>0) {
            $('#fast_registration').fancybox({
                onClosed: function(){
                    // console.log('main close');
                    $.ajax({
                        type: 'post',
                        url: '/user-disableFastRegistration' // la lingua non e' importante
                    });
                    $('#disable_fast_registration_form').attr('value',1);
                    $('#'+$('#pre_fast_registration_form').val()).submit();
                },
                //'autoDimensions': false,
                width: 660,
                height: 450

            });

            $('#pre_fast_registration_form').attr('value',this.id);
            if($('#disable_fast_registration_form').val()!='1') {
                $('#fast_registration').trigger('click');
                e.preventDefault();
                return false;
            }
        }

        // rimuovo tutti le eventuali finestre di errore
        $('.errorRequiredOption').each(function() {$(this).remove();});
        var $that = $(this);
        // e.preventDefault();
        var elsNames = [];
        var els = $(this).find('.required');

        // recupera i nome dei campi
        $(els).each(function(index) {
            found = false;
            // Va aggiunto anche il nome del form altrimenti potrei avere una stessa proprieta' con lo stesso nome e dello stesso formato
            // anche in altri form ed in quel caso prenderebbe la prima
            var filtername = '#'+$that.attr('id')+' '+this.nodeName.toLowerCase()+'[name="'+this.name+'"]';

            for(i=0;i<elsNames.length;i++) {
                if(elsNames[i]==filtername) found = true;
            }
            if(!found)
                elsNames.push(filtername);
        });

        stop = false;
        for(i=0;i<elsNames.length && !stop;i++) {

            switch($(elsNames[i]).get(0).nodeName) {
                case 'SELECT':
                    if($(elsNames[i]).get(0).value=='') {
                       position = $(elsNames[i]).prev().position();
                       $that
                            .append('<div class="errorRequiredOption" onclick="javascript:$(this).remove();" style="left:'+(position.left)+'px;top:'+(position.top)+'px;">'+$(elsNames[i]).prev().html()+' '+$('#errorMsgReqOpt').html()+'</div>');
                        stop = true;
                    }
                    break;
                case 'INPUT':
                    count = 0;
                    $(elsNames[i]).each(function(j) {
                       if(this.checked) count++;
                    });
                    if(count==0) {
                        position = $(elsNames[i]).parent().prev().position();

                        $that
                             .append('<div class="errorRequiredOption" onclick="javascript:$(this).remove();" style="left:'+(position.left)+'px;top:'+(position.top)+'px;" >'+$(elsNames[i]).parent().prev().html()+' '+$('#errorMsgReqOpt').html()+'</div>');
                        stop = true;
                    }
            }
        }

        if(!stop) {
            // Postiamo i dati via ajax
            e.preventDefault();
            $that = $(this);
            $.ajax({
                type: 'post',
                url: $that.attr('action'),
                data: $that.serialize(),
                success: function (data) {
                    var jdata = $.parseJSON(data);

                    if(jdata) {
                        if(jdata.status==0) {
                            $('#product_error_log').html(jdata.msg);
                            return false;
                        }
                    }

                    $('#resumeCartData').children().html(jdata.ext_data.cart_resume);

                    $.fancybox({
                        width: '450',
                        height: '120',
                        autoDimensions: false,
                        transitionIn: 'elastic',
                        transitionOut: 'elastic',
                        speedIn: 500,
                        scrolling: 'auto',
                        easingIn: 'swing',
                        padding: 20,
                        margin: 50,
                        content: jdata.ext_data.msg
                    });
                    return true;
                }
            });
            // this.submit();

        } else
            e.preventDefault();
    });


    // form di inserimento nel carrello
    // @deprecated
    $('.____addCartForm').submit(function(e) {
        return true;
        e.preventDefault();
        return true;
        stop = false;stop_radio = false;check_finded = false;
        // console.log($(this).find(''));
        // $(this).find('select[name^="property["].required').each(function(i) {
        $(this).find('input.required').each(function(i) {
            // Cancello il msg di errore al cambiamento del select
            $(this).change(function(e) {
               $(this).parent().find('.error').remove();
            });

            position = $(this).position();
            // Supponiano solo un gruppo di radio button
            // console.log(this.nodeName);
            if ($(this).attr('type')=='radio') {
                if (this.checked && !no_stop_radio) {
                    return true;
                }
            }             
        });

        if (!no_stop_radio)
            return !no_stop_radio;


        $(this).find('select[name^="property["].required').each(function(i) {
            if(this.value=='') {
              if($(this).parent().find('.error').length>0) {

              } else {
                  $(this).parent()
                         .append('<div class="error" onclick="javascript:$(this).remove();" style="padding:2px;background-color:#f00;color:#fff;-moz-box-shadow:2px 5px 10px rgba(68, 68, 68, 0.5);  -webkit-box-shadow:2px 5px 10px rgba(68, 68, 68, 0.5);position:absolute;left:'+(position.left)+'px;top:'+(position.top-30)+'px;z-index:999;">'+$(this).children('option').html()+'</div>');
                // console.log($(this).children('option').html());
              }
              $(window).resize(function(e) {
                  $('.error').remove();
              })
              // console.log('select');
              stop = true;
              e.preventDefault();
            }

        });


        return !stop;

        // Submit per inserimento prodotto nel carrello via ajax per carrellino
        if($(this).attr('action').indexOf('wishlist')<0) {
            if(!stop) {
                $.ajax({
                    type: 'post',
                    url: $(this).attr('action'),
                    data: $(this).serialize(),
                    success: function(data) {
                        // mostra il cart mini
                        json = $.parseJSON(data);
                        $('.cart_numprod').html(json.ext_data.quantity);
                        $('#quickCart').slideDown()
                                       .html(json.resp);
                        clearTimeout(timeouts.minicart);
                        setTimeout("$('#minicart_errornotify').slideUp()",3000);
                        setTimeout("$('#minicart_insertnotify').slideUp()",3000);
                        timeouts.minicart = setTimeout("$('#quickCart').slideUp()",5000);
                    }
                });
            }
            e.preventDefault();
        }
    });

    // funzioni per spostare gli elementi dal carrello alla wishlist e viceversa
    $('.cart-add').click(function(e){
        e.preventDefault();
        $(this).next('.cart-add-form').submit();
    });
    $('.wishlist-delete').click(function(e){
        e.preventDefault();
        $(this).next('.wishlist-delete-form').submit();
    });
    $('.wishlist-add').click(function(e){
        e.preventDefault();
        $(this).next('.wishlist-add-form').submit();
    });
    $('.cart-delete').click(function(e){
        e.preventDefault();
        $(this).next('.cart-delete-form').submit();
    });

   /**
    * Aggiunte per la gestione del codice promozionale di sconto
    */
    $('#addCoupon').click(function(e){
        e.preventDefault();
        checkcoupon();

    });

    function checkcoupon() {
        if ($('#codeCoupon').attr('value')) {
            $('#errCouponMsg').html('&nbsp;');
            $.getJSON($('#checkCouponCodeurl').attr('value'), {codeDiscount: $('#codeCoupon').attr('value')} , function (data) {
                if (data.resp=='1'){
                    $('#addCoupon').parents('form').submit();
                } else {
                    $('#errCouponMsg').html(data.ext_data.msg);
                }

            });
        }

    }
   
    $('#removeCouponreq').click(function(e){
        e.preventDefault();
        $('#removeCoupon').attr('value','1');
        $('#codeCoupon').attr('value','');
        $(this).parents('form').submit();
    });

    //visualizzazione informazioni di spedizione nel checkout (Laura - 2011-05-06)
    $('.infoMinBtn').click(function(e) {
        e.stopPropagation();
    });
});
