if(typeof $j == "undefined") var $j=jQuery.noConflict();

$j.ajaxSetup({
   url: "/bs_ajax.php",
   type: "POST",
   cache: false,
   dataType: 'json'
});
// @todo: discounts aufräumen
var Cashbox = {
   
   action : false,
   
   vat_exempt : 0,
   net_prices : 0,
   
   liespeprob : 0,
   
   mlm_field_1 : false,
   mlm_field_2 : false,
   mlm_field_3 : false,
   
   bonus_points : false,
   
   errors : new Array(),
   
   sum_net : new Array(),
   sum_gross : new Array(),
   sum_summe : new Object(),
   sum_sum_discount : new Array(),
   discounts : new Object(),
   total : new Object(),
   
   no_shipping_type_needed : new Object(),
   
   shipping_types : new Object(),
   shipping_costs : new Object(),
   
   abo_states : new Object(),
   
   edit_address : false,
   saveOk : false,
   
   payment_params : new Object(),
   payment_costs : new Object(),
   
   loadAfterClose : "/shop.php?show_startpage=true", // link nach schließen der Cashbox
   
   price: function(val){
      return '<nobr>'+number_format(val, 2, ',', '.') + " " + $j('#currency_html').html()+'</nobr>';
   },
  
   login: function(user,password){
    // anmeldung, ajax; hat sich durch cashbox_dialog erübrigt...
   },
   
   hideLogin: function(){
      Cashbox.close_dialog('_login');
   },
   
   displayLogin: function(){
      Cashbox.dialog("/bs_login.php",500,240,'_login',500);
   },
   
   post2session: function(formular_selector){
      var post=new Object();
      post=$j.extend(post,$j(formular_selector+' input').serializeArray());
      //post=$j.extend(post,$j(formular_selector+' ').serializeArray());
      //post=$j.extend(post,$j(formular_selector+' ').serializeArray());
      /*+"&"
               +$j(formular_selector+' :checkbox').serializeArray()+"&"
               +$j(formular_selector+' :hidden').serializeArray(); //Cashbox.makeQueryObject(formular_selector);
     */
      var pdata=new Object({action: 'post2session',key: '___cashbox2_additional_post_data',postkeys: 'order,abo'});

      $j.each(post,function(i,field){
         pdata[field.name]=field.value;
      });
      //var pobj=new Object(data: stringify(pdata)});

      $j.ajax({data:
            pdata,
         success:function(response){
            
          },
          error:function (xhr, ajaxOptions, thrownError){
            Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
          }
      });
   },

   setPayed: function(stat){
      $j('#___payment_status').val((stat?'ok':'')); // hidden feld mit payment_status setzen>interne zahlungssysteme
   },

   reload: function(ms){
      Cashbox.redirect(location.href+"&0",ms);
   },

   redirect: function(){
      if(Cashbox.redirect.arguments.length>0) var url=Cashbox.redirect.arguments[0];
      else var url=location.href+"&0";
      if(Cashbox.redirect.arguments.length>1) var ms=Cashbox.redirect.arguments[1];
      else var ms=200;
      window.setTimeout("location.href='"+url+"'",ms);
   },

   reload_basket: function(vendor_id,data){
      if($j('#basket_'+vendor_id)){
         if(Cashbox.errors[vendor_id]!="") {
            $j('#errors_'+vendor_id).show();
            $j('#errors_'+vendor_id).html(Cashbox.errors[vendor_id]);
            Cashbox.errors[vendor_id]="";
         }else $j('#errors_'+vendor_id).hide();
         if(!data.positions)  return Cashbox.redirect(location.href+"&empty",50);
         if(data.positions.length==0){
            if(window.opera)  return Cashbox.redirect(location.href+"&opera=true",50);
            else{
               delete(Cashbox.sum_summe[vendor_id]);
               $j('#basket_'+vendor_id).remove(); // basket leer, weg damit!
               var baskets=trim($j('#basket_list').html());
               window.status=baskets.length;
               if(baskets.length==0){
                  // alle warenkörbe sind leer > seite neuladen...
                  Cashbox.reload(100);
               }
            }
            return Cashbox.calculate_total();
         }
         //$j('#basket_'+vendor_id+' .vendor').css({backgroundImage:'url(/media/images/ajax-loader-mini.gif)',backgroundPosition:'2px',backgroundRepeat:'no-repeat'});

         var sum_net=0;
         var sum_gross=0;
         var sum_vat=0;
         var vat_sums=$j('.vat_sum_'+vendor_id);
         var percent_sums_gross=new Array(vat_sums.length);
         var sum_discount_net=0;
         var sum_discount_gross=0;
         var tmp_sum=0;
        
         jQuery.each(vat_sums,function(vid,o){
            // alle verfügbaren steuer-sätze nullen
            percent_sums_gross[o.id] = 0;
         });
            
         jQuery.each(data.positions, function(pos_id,pos_data){
            if(pos_data.sum_articles==0) Cashbox.deleteBasketRow(pos_id);
            else{
               //laden
               if($j('#loading_pos_'+pos_id)) $j('#loading_pos_'+pos_id).show();
               sum_net   += pos_data.sum_net;
               sum_gross += pos_data.sum_gross;
               sum_vat   += pos_data.sum_vat;
               
               // Todo: hier prüfen ob net_price==1 noch etwas zu sagen hat...
               // soweit ich weiß dient net_prices nur der ansicht im shop, hat aber keinen einfluss auf den "echten" preis.
               if(Cashbox.vat_exempt==1) tmp_sum=pos_data.sum_net;
               else tmp_sum=pos_data.sum_gross;
               //rabatte...
               percent_sums_gross['v'+pos_data.vat_percent+'_'+vendor_id]+=pos_data.sum_vat;
               sum_discount_net+=pos_data.discount_sum_net;
               sum_discount_gross+=pos_data.discount_sum_gross;
               if(Cashbox.vat_exempt==1){
                  if(pos_data.sum_discount_net > 0){
                      if($j('#pos_'+pos_id+'_discount')) $j('#pos_'+pos_id+'_discount').html(Cashbox.price(-1 * pos_data.sum_discount_net));
                  }
                  var single_price=pos_data.price_per_unit_net;
               }else{
                  if(pos_data.sum_discount_gross > 0){
                      if($j('#pos_'+pos_id+'_discount')) $j('#pos_'+pos_id+'_discount').html(Cashbox.price(-1 * pos_data.sum_discount_gross));
                  }
                  var single_price=pos_data.price_per_unit_gross;
               }
               
               if($j('#pos_'+pos_id+'_single_price')) $j('#pos_'+pos_id+'_single_price').html(Cashbox.price(single_price));
               
               // Summe
               if($j('#pos_'+pos_id+'_sum')) $j('#pos_'+pos_id+'_sum').html(Cashbox.price(tmp_sum));
                              
               // optionale MLM Felder
               if(Cashbox.mlm_field_1 && $j('#pos_'+pos_id+'_mlm_field_1')) $j('#pos_'+pos_id+'_mlm_field_1').html(number_format(pos_data.sum_field_1,2,',','.'));
               if(Cashbox.mlm_field_2 && $j('#pos_'+pos_id+'_mlm_field_2')) $j('#pos_'+pos_id+'_mlm_field_2').html(number_format(pos_data.sum_field_2,2,',','.'));
               if(Cashbox.mlm_field_3 && $j('#pos_'+pos_id+'_mlm_field_3')) $j('#pos_'+pos_id+'_mlm_field_3').html(number_format(pos_data.sum_field_3,2,',','.'));
               
               if($j('#pos_sum_'+pos_id)) $j('#pos_sum_'+pos_id).val(pos_data.sum_articles)
               // "ent"laden
               if($j('#loading_pos_'+pos_id)) $j('#loading_pos_'+pos_id).hide();
            }
            
               
         });
         
         // Rabattierungen
         if(data.discounted){
            Cashbox.update_discounts(vendor_id, data.discounts);
         }
         
         if(data.shipping_types && !Cashbox.no_shipping_type_needed[vendor_id]){
            $j('.shipping_type_'+vendor_id+'_layer').hide();
            jQuery.each(data.shipping_types, function(sti,st_data){
               $j('#shipping_type_'+vendor_id+'_'+sti).show();
               var stcsum=(Cashbox.vat_exempt ? Cashbox.price(st_data.costs) : Cashbox.price(st_data.costs_gross))
               if(ie) $('shipping_type_cost_'+vendor_id+'_'+sti).innerHTML = stcsum;
               else $j('#shipping_type_cost_'+vendor_id+'_'+sti).html(stcsum);  //Funktioniert nicht im IE! http://docs.jquery.com/Attributes/html

               
               if(Cashbox.shipping_types[vendor_id]==sti){
                  Cashbox.shipping_costs[vendor_id]=st_data.costs_gross;
                  $('shipping_costs_'+vendor_id).innerHTML = Cashbox.price(st_data.costs_gross);
               }
               //alert(Cashbox.shipping_types[vendor_id] + " - " + sti);
            });
           
         }
         
         if(Cashbox.vat_exempt==1){
            // ust befreit, zeige netto preise
            var summe=sum_net;
            var sum_discount=sum_discount_net;
         }
         else{
            if(Cashbox.net_prices==1) var summe=sum_gross;
            else var summe=sum_gross; // siehe Todo in shopping_cart_type_2.inc
            var sum_discount=sum_discount_gross;
         }
         
         Cashbox.sum_net[vendor_id]=sum_net;
         Cashbox.sum_gross[vendor_id]=sum_gross;
         Cashbox.sum_summe[vendor_id]=summe;

         Cashbox.sum_sum_discount[vendor_id]=data.sum_discount;

         if($j('#base_sum_'+vendor_id)) $j('#base_sum_'+vendor_id).html(Cashbox.price(data.summe));
         //if($j('#discount_sum_'+vendor_id)) $j('#discount_sum_'+vendor_id).html(Cashbox.price(data.sum_discount));
         if($j('#total_'+vendor_id)) $j('#total_'+vendor_id).html(Cashbox.price(data.summe+data.sum_discount+Cashbox.shipping_costs[vendor_id]));
         
         jQuery.each(vat_sums,function(vid,o){
            $j('#'+o.id).html(Cashbox.price(percent_sums_gross[o.id]));
         });
         Cashbox.calculate_total();
         //$j('#basket_'+vendor_id+' .vendor').css({backgroundImage:'none'});
      }
   },
   
   // Rabatte aktualisieren
   update_discounts: function(vendor_id, discounts){
      Cashbox.discounts[vendor_id] = new Array();
      jQuery.each(discounts, function(discount_id, discount_data){
         if(Cashbox.vat_exempt == 1){
            Cashbox.discounts[vendor_id][discount_id] = discount_data.discount_net;            
            if($j('#discount_sum_'+vendor_id+'_'+discount_id)) $j('#discount_sum_'+vendor_id+'_'+discount_id).html(Cashbox.price(-1 * discount_data.discount_net));
         }else{
            Cashbox.discounts[vendor_id][discount_id] = discount_data.discount_gross;           
            if($j('#discount_sum_'+vendor_id+'_'+discount_id)) $j('#discount_sum_'+vendor_id+'_'+discount_id).html(Cashbox.price(-1 * discount_data.discount_gross)); 
         }
      });
   },
   
   load_basket: function(vendor){
    // warenkorb(e) laden; opt_argument[0] == lieferant

    if(typeof vendor == "undefined") var vendor=0;
    if(vendor<1) vendor='all';
    $j.ajax({data:
               {
                  action: 'load',
                  vendor: vendor
               },
               success:function(response){
                  /* na was nun? */
                  jQuery.each(response,function(v_id,v_data){
                     Cashbox.reload_basket(v_id,v_data);
                        Cashbox.action=false;
                     if(typeof Cashbox.shipping_types[v_id] != "undefined")
                        Cashbox.changeDelivery(v_id,Cashbox.shipping_types[v_id],null,false);
                  });
                  //alert(response[vendor]);
                },
                error:function (xhr, ajaxOptions, thrownError){
                  Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
                           Cashbox.action=false;
                }
            });
   },
   
   deletePos: function(id,vendor_id){
      Cashbox.setSum(id,0,vendor_id,true);
   },
   
   deleteBasketRow: function(id){
      if($j('#basket_pos_'+id)){
         $j('#basket_pos_'+id).hideRow();
         Cashbox.reload(20);
      }
   },
   
   setSum: function(id,newAm,vendor_id,loadAll){
      if(!Cashbox.action){
         Cashbox.action=true;
         if($j('#loading_pos_'+id)) $j('#loading_pos_'+id).show();
           $j.ajax({data:
                     {
                        action: 'adjustSum',
                        id_ord_order_position: id,
                        sum_articles: newAm
                     },
                  success:function(response){
                     if(response.error){
                        Cashbox.errors[vendor_id]=response.error;
                        Cashbox.load_basket(vendor_id);
                     }else{
                           if(newAm==0){
                              //artikel entfernen
                              Cashbox.deleteBasketRow(id);
                          }
                           //$j('#pos_sum_'+id).val(newAm);
                           if(loadAll){
                              Cashbox.load_basket();
                           }
                           else {
                              Cashbox.load_basket(vendor_id);
                           }
                     }
                   },
                   error:function (xhr, ajaxOptions, thrownError){
                     Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
                   }
               });
      }
   },
   
   adjustSum: function(id,amount,vendor_id){
      if($j('#pos_sum_'+id)){
         var newAm=Math.floor(parseInt($j('#pos_sum_'+id).val())+amount);
         this.setSum(id,newAm,vendor_id);
      }
   },
   
   confirm_abo: function(id_addr_address){
      // Diese Funktion ist überflüssig...
      return;
      // Todo: ausserdem mal nachsehen ob man bei den Zahlungssystemen entsprechende abo-zahlungen gibt; zurückgestellt
      //alert($j('input[name=abo['+id_addr_address+'][active]]'));
     var abo_active = $j('input[name=abo['+id_addr_address+'][active]]').is(':checked');
     var abo_d_first = $j('input[name=abo['+id_addr_address+'][d_first_delivery]]').val();
     
     //alert(abo_active);
    // alert(abo_d_first);
   },
   
   close_dialog: function(u_id){
      $j('.UID'+u_id).remove();
      if(u_id=="wk" && Cashbox.loadAfterClose){
         Cashbox.redirect(Cashbox.loadAfterClose);
      }
      if(Cashbox.close_dialog.arguments.length>1){
         if(Cashbox.close_dialog.arguments[1]==true) Cashbox.redirect(Cashbox.loadAfterClose+'&'+u_id);
      }
   },
   // url, w, h, u_id, z-index-add, attr, css
   dialog: function(url,w,h){

         var sL = $j(window).scrollLeft();
         var sT = $j(window).scrollTop();
         var wW = $j(window).width();
         var wH = $j(window).height();

         if(w<0) w = wW + w;
         if(h<0) h = wH + h;
         
         var p_top = Math.round((wH - h) / 2);
         if(p_top < 0) p_top = 10;
         
         var p_left = Math.round((wW - w) / 2);
         if(p_left < 0) p_left = 10;								
         
         if(Cashbox.dialog.arguments.length>4){
            var zI_g=Math.floor(3000+Cashbox.dialog.arguments[4]);
            var zI_o=Math.floor(2500+Cashbox.dialog.arguments[4]);
         }else{
            var zI_g=3000;
            var zI_o=2500;
         }
         
         var gb=$j("<iframe frameborder='0' />");
         if(Cashbox.dialog.arguments.length>3){
            gb.addClass('UID'+Cashbox.dialog.arguments[3]);
         }
         if(Cashbox.dialog.arguments.length>5){
            $j.each(Cashbox.dialog.arguments[5],function(_k,_v){
               gb.attr(_k,_v);
            });
         }else{
            gb.attr("id","cashbox_dialog");
         }
         gb.attr("src",url);
         if(Cashbox.dialog.arguments.length>6){
            gb.css(Cashbox.dialog.arguments[6]);
         }else{
            gb.css({
             width: w+"px",
             height: h+"px",
             top: p_top+'px',
             left: p_left+'px',
             position: "fixed",
             zIndex: zI_g,
             backgroundColor: "#fff",
             border: "1px solid #000"
           });
         }
         
         if(isIEversion(6) || isIEversion(7) || isIEversion(8)) gb.css({position: "absolute"});
      
      
         var boxclose=$j('<div />');
         var imgclose=$j('<img />');
         if(Cashbox.dialog.arguments.length>3){
            if(Cashbox.dialog.arguments[3]=='wk') {
            	imgclose.attr('src','/media/images/cb2_dialog_close_wk.png');
            	imgclose.attr('onclick', 'Cashbox.close_dialog(\'wk\');');
			} else {
				imgclose.attr('src','/media/images/cb2_dialog_close.png');
			}
             
             imgclose.attr('alt','close');

            boxclose.addClass('closeUID'+Cashbox.dialog.arguments[3]);
         boxclose.css({
            width:"50px",
            height:"50px",
            zIndex: Math.floor(zI_g+5),
            top: (p_top)+'px',
            left: (p_left+w+2)+'px',
            position: "fixed",
            border: "none",
            cursor: "pointer"
         });
         boxclose.append($j(imgclose));
         //boxclose.attr('onclick',parent.Cashbox.close_dialog(""+Cashbox.dialog.arguments[3]+""));/*
         
         var _arg=Cashbox.dialog.arguments[3];
         boxclose.bind('click',function(e){
            Cashbox.close_dialog(_arg);
         });
         if(isIEversion(6) || isIEversion(7) || isIEversion(8)) boxclose.css({position: "absolute"});
         }
      
         var box=$j("<div />");
         box.addClass('gb_container');
        // box.hide();
         if(Cashbox.dialog.arguments.length>3){
            box.addClass('UID'+Cashbox.dialog.arguments[3]);
         }
         
         var overlay=$j("<div />");
         overlay.addClass('gb_doverlay');
         overlay.css({zIndex:zI_o,backgroundColor:'#ffffff',left:0,opacity:'0.7',position:'absolute',top:'0'});
         //overlay.hide();
         if(Cashbox.dialog.arguments.length>3){
            overlay.addClass('UID'+Cashbox.dialog.arguments[3]);
         }
         box.append($j(boxclose));
         box.append($j(gb));
         
         if(ie) $j(gb).attr("src",url);
         if(isIEversion(6)) window.setTimeout("$j('.UID"+Cashbox.dialog.arguments[3]+"').attr('src','"+url+"');",50);

         if(isIEversion(7) || isIEversion(6)){
            //window.setTimeout("$j('.UID"+Cashbox.dialog.arguments[3]+"').css({top:'"+p_top+"px'});",100);
            //window.setTimeout("$j('.UID"+Cashbox.dialog.arguments[3]+"').attr('frameborder','0');",1000);
         }
         
         if(isIEversion(6) || isIEversion(7) || isIEversion(8)) {
            overlay.width(($j('.body').width()) + 'px');
            overlay.height($j('.body').height() + 'px');
         } else {
            overlay.width($j(document).width() + 'px');
            overlay.height($j(document).height() + 'px');
         }
         $j('.body').append($j(overlay));
         $j('.body').append($j(box));
         overlay.show();
         box.show();
   },
   
   calculate_total: function(){
      var tot=Cashbox.total();    
         var arr_methods_of_payment=$j('input[name=order[method_of_payment]]');
         $j.each(arr_methods_of_payment,function(n,e){
            var _params=Cashbox.payment_params[$j(e).val()];
            if(_params.id_account_amount){
               //wenn das geld im id-konto nicht ausreicht...zahlungsmethode "ausblenden"
               if(_params.id_account_amount<tot){
                  $j(e).attr("checked", false);
                  $j(e).hide();
               }else{
                  $j(e).show();
               }
            }
         });
      if(tot){
         $j('#cashbox2_central_total_sum').html(Cashbox.price(tot));
         $j('#cashbox2_central_total').show();
      }else{
         $j('#cashbox2_central_total').hide();
      }
   },
      
   abo: function(id_addr_address, abo_active_field){
      var state=false;
      if($j(abo_active_field).is(':checked')){
         $j('#abo_block_'+id_addr_address).show();
         Cashbox.abo_states[id_addr_address]=1;
      }
      else{
         $j('#abo_block_'+id_addr_address).hide();
         Cashbox.abo_states[id_addr_address]=0;
      }
      Cashbox.aboChange(id_addr_address);
      
   },
   
   aboChange: function(id_addr_address){
      if($j('#abo_'+id_addr_address+'_active').is(':checked')) var abo_active=1;
      else var abo_active=0;
        $j.ajax({data:
            {
               action: 'aboChange',
               addr_address_id: id_addr_address,
               active: abo_active,
               d_first_delivery: $j('#abo_'+id_addr_address+'_d_first_delivery').val(),
               d_last_delivery: $j('#abo_'+id_addr_address+'_d_last_delivery').val(),
               interval_step: $j('#abo_'+id_addr_address+'_interval_step').val(),
               interval_unit: $j('#abo_'+id_addr_address+'_interval_unit').val()
            },
             success:function(response){
                  var abolist="";
                  $j.each(Cashbox.abo_states,function(e,n){
                     if(n==1) abolist+=","+e;
                  });
                  if((!Cashbox.abo_prices && abolist!="") || (Cashbox.abo_prices && abolist=="")){
                     var loc=location.href.replace(/abolist/,"oldal");
                     Cashbox.redirect(loc+"&abolist="+abolist,20);
                  }
                },
               error:function (xhr, ajaxOptions, thrownError){
                  Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
                }
            });
   },
   
   total: function(){
      var _mops=$j('input[name=order[method_of_payment]]:checked');
      var error="";
      //error+= CashboxTrans.please_select_payment_method+"<br />\n";
      if(error.length==0){
         if(_mops.length==0) var mops_key=$j(_mops).val();
         var tot=0;
         //alert(Cashbox.sum_summe);
         
         $j.each(Cashbox.sum_summe,function(n,s){
         //   tot+=s;
         //   tot2+=n;
            tot+=s+Cashbox.shipping_costs[n];
            if(Cashbox.discounts[n].length > 0){
               $j.each(Cashbox.discounts[n],function(discount_id,discount_value){
                  tot-=discount_value;
               });
            }
            var _sts=$j('input[name=shipping_type\['+n+'\]]');
            var _sts_c=false;
            $j.each(_sts,function(sn,ss){
               if($j(ss).is(':checked')) _sts_c=true; 
            });
            if(!_sts_c && !Cashbox.no_shipping_type_needed[n]) error+=CashboxTrans.please_check_shipping_types+"<br />\n";
            //alert(s);//14.98
            //alert(n);//2803
           // alert(Cashbox.sum_sum_discount[n] + " + " +Cashbox.shipping_costs[n]);
         });
         
         if(parseFloat(tot)==0) error+="es gibt nichts zu zahlen..?!";
         if(error.length==0){
            if(mops_key && parseFloat(Cashbox.payment_costs[mops_key])>0) tot+=Cashbox.payment_costs[mops_key];
            return tot;
         }
      }
      
   },
   
   pay_after_save: function(which) {
      if(!Cashbox.saveOk) {}
      else{
         Cashbox.post2session('#cashbox2');
         if(which=="central"){
            //alle bezahlen > formular absenden...
            var _mops=$j('input[name=order[method_of_payment]]:checked');
            var error="";
            if(_mops.length==0) error+= CashboxTrans.please_select_payment_method+"<br />";
            var _acc=$j('input.page_settings_acc');
            var _acc_error = false;
            jQuery.each(_acc,function(n,e){
               if(!$j(e).is(':checked')) _acc_error = true;
            });
            if(_acc_error == true) error+= CashboxTrans.please_confirm_all_documents+"<br />";
            if(error.length == 0 && Cashbox.liespeprob != 0)
            {
               error+= CashboxTrans.liespe_connection_problem+"<br/>";
            }
            //alert(Cashbox.total);
            if(error.length==0){
               var mops_key=$j(_mops).val();
               if(Cashbox.payment_params[mops_key]){
                  var _pp=Cashbox.payment_params[mops_key];
                  if(_pp.quickdialog){
                     var tot=0;
                     //alert(Cashbox.sum_summe);
                     
                     $j.each(Cashbox.sum_summe,function(n,s){
                     //   tot+=s;
                     //   tot2+=n;
                       tot+=parseFloat(s);
                       
                     if(Cashbox.discounts[n].length > 0){
                        for(var isd = 0; isd < Cashbox.discounts[n].length; isd++){
                           //alert(tot + " - " + Cashbox.discounts[n][isd]);
                           tot -= parseFloat(Cashbox.discounts[n][isd]);
                        }
                     }
                     //if(Cashbox.discounts[n] > 0) tot += parseFloat(Cashbox.discounts[n]);
                     if(Cashbox.shipping_costs[n] > 0) tot += parseFloat(Cashbox.shipping_costs[n]);
                      
                        var _sts=$j('input[name=shipping_type\['+n+'\]]');
                        var _sts_c=false;
                        $j.each(_sts,function(sn,ss){
                           if($j(ss).is(':checked')) _sts_c=true; 
                        });
                        if(!_sts_c && !Cashbox.no_shipping_type_needed[n]) error+=CashboxTrans.please_check_shipping_types+"<br />\n";
                        //alert(s);//14.98
                        //alert(n);//2803
                       // alert(Cashbox.sum_sum_discount[n] + " + " +Cashbox.shipping_costs[n]);
                     });
                     if(parseFloat(tot)==0) error+="es gibt nichts zu zahlen..?!";
                     //alert(tot);
                     if(error.length==0){
                        //tot+=Cashbox.payment_costs[mops_key];
                        //alert(tot);
                        Cashbox.dialog(_pp.quickdialog_url+"&total="+tot,500,200,'payment_dialog');
                     }else{
                        Cashbox.dialog('bs_info.php?action=error&message='+Base64.encode(error), 300, 200, 'info_window');
                     }
                  }
                  else if(_pp.redirect_url){
                     Cashbox.dialog(_pp.redirect_url,600,400,'payment_dialog');
                  /*$j.each(_pp,function(k,v){
                     alert(k);
                     alert(v);
                  });*/
                  }
               }
               else alert("Kein Zahlungsvorgang programmiert.");
               
            } else Cashbox.dialog('bs_info.php?action=error&message='+Base64.encode(error), 300, 200, 'info_window');
         }
      }    
   },
   
   pay: function(which){
       Cashbox.pay_progress = true;
       Cashbox.pay_which = which;
       Cashbox.saveAddress('customer_info_1');       
      
   },
   
   saveComment: function(fld){
      if($j(fld)){
         var fldname = fld.name;
         var fldid = fld.id;
         eval("$j.ajax({data:{action:'tmpSavePost', '"+fldname+"': $j('#"+fldid+"').val()}});");         
      }
   },
   
   changeDelivery: function(id_addr_address,id_ord_shipping_type,fld){
      if(Cashbox.changeDelivery.arguments.length > 3){
         var loadBaskets = Cashbox.changeDelivery.arguments[3];
      }else loadBaskets = true;
      $j('#no_shipping_type_'+id_addr_address).hide();
      var sum_sums = 0;
      if(Cashbox.discounts[id_addr_address].length > 0){
         for(var isd = 0; isd < Cashbox.discounts[id_addr_address].length; isd++){
            //if(parseFloat(Cashbox.discounts[id_addr_address][isd]) < 0){
            //   sum_sums += parseFloat(Cashbox.discounts[id_addr_address][isd]);
            //}else
            sum_sums -= parseFloat(Cashbox.discounts[id_addr_address][isd]);
         }
      }
      $j.ajax({data:
                  {
                     action: 'changeDelivery',
                     id_addr_address: id_addr_address,
                     id_ord_shipping_type: id_ord_shipping_type,
                     sum_net: Cashbox.sum_net[id_addr_address],
                     sum_gross: Cashbox.sum_gross[id_addr_address] - sum_sums
                  },
               success:function(response){
                  if(response.error){
                     Cashbox.errors[id_addr_address]=response.error;
                  }else{
                     Cashbox.shipping_types[id_addr_address]=id_ord_shipping_type;
                     Cashbox.total[id_addr_address]=Cashbox.sum_summe[id_addr_address]+Cashbox.sum_sum_discount[id_addr_address]+response.shipping_costs;
                     Cashbox.shipping_costs[id_addr_address]=response.shipping_costs;
                     
                     
                     $j('#no_shipping_type_'+id_addr_address).hide();
                     $j('#shipping_costs_'+id_addr_address).html(Cashbox.price(response.shipping_costs));
                     $j('#shipping_type_cost_'+id_addr_address+'_'+id_ord_shipping_type).html(Cashbox.price(response.shipping_costs));
                     $j('#total_'+id_addr_address).html(Cashbox.price(Cashbox.total[id_addr_address]));
                     $j('#shipping_cost_row_'+id_addr_address).show();
                     $j('#total_row_'+id_addr_address).show();
                  }
                  if(loadBaskets) Cashbox.load_basket(id_addr_address);
                },
               error:function (xhr, ajaxOptions, thrownError){
                  Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
                }
            });
   },
   
   ajaxError: function(xhr, ajaxOptions, thrownError){
      // Todo: ErrorHandler erstellen mit entsprechenden Fehlermeldungen für den _USER_
      //alert(xhr.status);
      Cashbox.action=false;
      //alert(ajaxOptions);
      //alert(thrownError);
   },
   
   editAddress: function(which){       
       if(Cashbox.edit_address==which){
         $j('.customer_info_edit[id='+which+']').hide();
         Cashbox.saveAddress(which);
      }else{
         Cashbox.edit_address=which;
         
         $j('#edit_default_' + which).show();         
         $j('#'+which+' span.customer_info_value_text').hide();
         $j('#'+which+' .customer_info_value_input').show();
         $j('#'+which+' span#'+which+'_edit_button').hide();
         $j('#'+which+' span#'+which+'_save_button').show();
         $j('.'+which+'_save_button').addClass('save_button');        
		 
      }      
      //alert('hier jetzt die inputfelder einblenden, nachdem die texte ausgeblendet sind. CSS FEHLT NOCH!!!');
   },
   
   toggleAddressLabels : function(typ, dir) {
		if(typ == 1) which = "billing_address";
		else which = "delivery_address";
		if(dir == "in") {
			var pos = jQuery('#customer_info_block_'+typ).position();
			jQuery('#'+which+'_labels').css({top: pos.top+'px', left: (pos.left-1-jQuery('#'+which+'_labels').width())+'px', height: jQuery('#customer_info_block_'+typ).height()+'px'});
			jQuery('#'+which+'_labels').fadeIn(400);
			jQuery('#customer_info_block_'+typ).addClass("border_edit");
		} else {
			jQuery('#customer_info_block_'+typ).removeClass("border_edit");
			jQuery('#'+which+'_labels').fadeOut(400);
		}	   
   },
   
   saveAddress: function(which){
      var changed_address_fields=$j('.customer_info_value_input');
      var _ajaxdata=new Object({action:'changeAddress',type:which});
      $j.each(changed_address_fields,function(n,o){
         _ajaxdata[$j(o).attr('name')]=$j(o).val();
         //changed_fields[n]=$j(o).attr('name');
      });
      if(jQuery('#default_delivery_address').attr('checked') == true) {
      		_ajaxdata['default_delivery_address'] = true;	  
	  }
	  
	  if(jQuery('#default_billing_address').attr('checked') == true) {
      		_ajaxdata['default_billing_address'] = true;	  
	  }
      
      $j.ajax({data:_ajaxdata,
         success:function(response){
            if(response.error){
               //Cashbox.errors[id_addr_address]=response.error;
               var message="";
               jQuery.each(response.error['messages'],function(n,msg){
                  message+=msg+"\n";
               });
               jQuery.each(response.error['fields'],function(f,v){
                  $j('.'+f).css({borderColor:'#d33'});
               });
               $j('.customer_info_edit[id='+which+']').show();
               $j('#'+which+' span#'+which+'_save_button').show();
               //alert(message);
               Cashbox.dialog('bs_info.php?action=error&message='+Base64.encode(message), 300, 150, 'info_window');
               Cashbox.saveOk = false;
               
               Cashbox.pay_progress = false;
               Cashbox.pay_which = null;
            }else{
               $j.each(response,function(k,v){
                  $j('#customer_info_value_text_'+which+'_'+k).html(v);
                  //changed_fields[n]=$j(o).attr('name');
               });
               $j('.customer_info_edit[id='+which+']').show();
               $j('#'+which+' .customer_info_value_input').hide();
               $j('#'+which+' span.customer_info_value_text').show();
               $j('#'+which+' span#'+which+'_edit_button').show();
               $j('#'+which+' span#'+which+'_save_button').hide();
               $j('.'+which+'_save_button').removeClass('save_button');
               $j('#edit_default_' + which).hide(); 
               
               Cashbox.edit_address=false;
               Cashbox.saveOk = true;
               
               if(Cashbox.pay_progress == true) {
                    Cashbox.pay_after_save(Cashbox.pay_which);    
               }
               
               Cashbox.pay_progress = false;
               Cashbox.pay_which = null;
               
               if(which == "billing_address") typ = 1;
               else typ = 2;
               Cashbox.toggleAddressLabels(typ);
            }
            
            //??Cashbox.load_basket(id_addr_address);
          },
         error:function (xhr, ajaxOptions, thrownError){
            Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
          }
      });
   },
   
   deleteDeliveryAddress : function() {
   		jQuery('#customer_info_block_2 input').val('');
   		jQuery('#customer_info_block_2 span.customer_info_value_text').html('');   
   }
};
