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(),
   error : "",

   sum_net 							: new Array(),
   sum_gross 						: new Array(),
   sum_summe 						: new Object(),
   sum_total_basket 				: new Object(),
   sum_sum_discount 				: new Array(),
   discounts 						: new Object(),
   sum_sum_vouchers 				: new Array(),
   vouchers  						: new Object(),
   total_sum 						: new Object(),
   sum_method_of_payment 			: 0,
   sum_method_of_payment_by_basekt 	: 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(),
   
   typeOfRounding : false,
   id_method_of_payment : 0,

   /**
    * gueltige Zahlungstechniken
    **/
   valid_payment_technique_keys : [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60],

   /**
    * Versandart <> gueltige Zahlungstechnik
    **/
   shipping_type_payment_techniques : new Object(),
   payment_techniques : new Object(),


   loadAfterClose : "/shop.php?show_startpage=true", // link nach schließen der Cashbox

   price: function(val) {       
       var rounding = false;
       val = parseFloat(val);
       if (Cashbox.typeOfRounding == true && Cashbox.price.arguments.length > 1) {
			val = Cashbox.roundForChf(val);		   
       }
       return '<nobr>'+ number_format(val.toFixed(2), 2, ',', '.') + " " + $j('#currency_html').html()+'</nobr>';
   },
   
   roundForChf : function(val) {
		val = (Math.round((20 * (val * 100 + 0.0000001) / 100), 0) / 20);
		
		return val;    
   },

   percent: function(val){
      return '<nobr>'+ number_format(parseFloat(val).toFixed(2), 2, ',', '.') + " %" + '</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 sum_voucher_net=0;
         var sum_voucher_gross=0;
         var tmp_sum=0;

         jQuery.each(vat_sums,function(vid,o){
            // alle verfügbaren steuer-sätze nullen
            id = o.id.replace("_", ".");
            percent_sums_gross[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 || Cashbox.net_prices == 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;

               // Gutscheine
               sum_voucher_net		+= pos_data.sum_vouchers_net;
               sum_voucher_gross	+= pos_data.sum_vouchers_gross;

               if(Cashbox.vat_exempt==1 || Cashbox.net_prices == 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);
         }

         // Gutscheine
         if (data.vouchered) {
		 	 jQuery('#voucher_tr_' + vendor_id).show();
		 	 Cashbox.update_voucher(vendor_id, data.vouchers);
         } else {
		 	jQuery('#voucher_tr_' + vendor_id).hide();
         }

         if (data.voucherMinOrderValue) {
			 jQuery('#voucher_min_order_value').hide();
         } else {
		 	jQuery('#voucher_min_order_value').show();
         }

         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(jQuery.browser.msie) {
					$j('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;
                  $j('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;
            var sum_voucher=sum_voucher_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;
            var sum_voucher=sum_voucher_gross;
         }

		 //alert(Cashbox.sum_sum_discount[vendor_id]+"="+data.sum_discount + " / "+sum_discount);

		 Cashbox.sum_net[vendor_id]				= sum_net; 			// ok
         Cashbox.sum_gross[vendor_id]			= sum_gross; 		// ok
         Cashbox.sum_summe[vendor_id]			= summe; 			// ok
         Cashbox.sum_total_basket[vendor_id] 	= data.sum_total; 	// ok

         Cashbox.sum_sum_discount[vendor_id] = data.sum_discount;
         Cashbox.sum_sum_vouchers[vendor_id] = data.sum_voucher;

         // Basissumme
         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));

         // Totalsumme des WKs
         if ($j('#total_'+vendor_id)) {
		 	$j('#total_'+vendor_id).html(Cashbox.price(data.sum_total));
         }
          
         jQuery.each(vat_sums,function(vid,o){
             baseId = o.id.replace("_", ".");
             htmlId = o.id.replace(".", "_");
             
             $j('#'+htmlId).html(Cashbox.price(percent_sums_gross[baseId]));
         });
         
         Cashbox.calculate_total();
         
         
         
         // Gesamtsumme berechnen
         //$j('#basket_'+vendor_id+' .vendor').css({backgroundImage:'none'});
      }
   },

   // Rabatte aktualisieren
   update_discounts: function(vendor_id, discounts) {
	  /*jQuery.each(Cashbox.discounts, function(d,e)
	  {
		 alert(d + " => "+e);
	  });*/
      Cashbox.discounts[vendor_id] = new Array();
      jQuery.each(discounts, function(discount_id, discount_data){
			if(Cashbox.vat_exempt == 1 || Cashbox.net_prices == 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));
			}

         	if($j('#discount_percent_'+vendor_id+'_'+discount_id)) $j('#discount_percent_'+vendor_id+'_'+discount_id).html(Cashbox.percent(discount_data.discount_percent));
      });
   },

   /**
   * Gutscheine aktualisieren
   */
   update_voucher: function(vendor_id, voucher) {
      	Cashbox.vouchers[vendor_id] = new Array();
		if(Cashbox.vat_exempt == 1 || Cashbox.net_prices == 1) {
			Cashbox.vouchers[vendor_id] = voucher.net;
			if ($j('#voucher_sum_'+vendor_id)) {
				$j('#voucher_sum_'+vendor_id).html(Cashbox.price(-1 * voucher.net));
			}
		} else {
			Cashbox.vouchers[vendor_id] = voucher.gross;
			if ($j('#voucher_sum_'+vendor_id)) {
				$j('#voucher_sum_'+vendor_id).html(Cashbox.price(-1 * voucher.gross));
			}
		}
        /*
		if ($j('#voucher_percent_'+vendor_id)) {
			$j('#voucher_percent_'+vendor_id).html(Cashbox.percent(discount_data.discount_percent));
		}
		*/
   },


   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);
                     
                     Cashbox.changeMethodOfPayment();
                  });
                  //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();

	  //alert("calculate_total; Cashbox.total() =  " + tot );
         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, true));
         $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="";
	  var log = "";
      //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;
         log+= "0";
         $j.each(Cashbox.sum_summe,function(n,s){
			if(Cashbox.total.arguments.length == 1 && Cashbox.total.arguments[0] != n)
			{}
			else
			{
			//   tot+=s;
			//   tot2+=n;
			// Steuer Total
			/*var _vat_total = Cashbox.sum_gross[n] - Cashbox.sum_net[n];
			log+= "0";

			//alert(Cashbox.sum_gross[n] +"/"+ Cashbox.sum_net[n] +" _ "+_vat_total +" - " + Cashbox.sum_summe[n]);


			//alert(Cashbox.sum_net[n] + " gross " + Cashbox.sum_gross[n] + " _net " + _net + " vat " + _vat);

			//alert("+" + s);
					*/
			// Positionssumme
			// Steuersatz
			var _vat_rate  = (Cashbox.sum_gross[n] / Cashbox.sum_net[n]).toFixed(2);
			var _sub_sum = 0;

			shipping_c = Cashbox.shipping_costs[n];
			if (typeof shipping_c == "undefined") shipping_c = 0;

            _sub_sum += s + shipping_c;

            if(Cashbox.discounts[n].length > 0){
			   /*

               });*/
			   if(typeof Cashbox.sum_sum_discount[n] == "undefined")
			   {
				  Cashbox.load_basket("all");
				  return;
				  $j.each(Cashbox.discounts[n],function(discount_id,discount_value){

					 if(Cashbox.vat_exempt == 1) var _net_disc = discount_value;
					 else var _net_disc = discount_value * _vat_rate;

					 _sub_sum-= _net_disc; //discount_value;
					 //alert(discount_value + " _ " + _net_disc + " = " + _sub_sum + "|"+Cashbox.sum_sum_discount[n]);
					 //alert(Cashbox.net_prices + " / " + Cashbox.vat_exempt + " | " + _sub_sum + " net disc: "+_net_disc + " = " + _sub_sum);

					 //alert("-" + discount_value);
				  });
			   }
			   else _sub_sum+=Cashbox.sum_sum_discount[n];
			   //alert(Cashbox.sum_sum_discount[n]);
            }

            // Gutscheine
            if (Cashbox.sum_sum_vouchers[n]) {
				_sub_sum += Cashbox.sum_sum_vouchers[n];
            }

            // Shipping Type Checkboxen
            var _sts = $j('input[name=shipping_type\['+n+'\]]');
           	
           	// Shipping Type gewaehlt? 
            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";
            
            tot+=_sub_sum;
			}
			//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..?!";
         else {
         	if (Cashbox.error == "es gibt nichts zu zahlen..?!") Cashbox.error = "";
		 }*/

		 // Neue Summenberechnung
		 var tot_new = 0;
		 jQuery.each(Cashbox.sum_total_basket, function(n,s) {
			 if(Cashbox.total.arguments.length == 1 && Cashbox.total.arguments[0] != n) {
				 // Do nothing
			 } else {
				 tot_new += s;
			 }
		 });
          
         if(error.length==0) {
            //if(mops_key && parseFloat(Cashbox.payment_costs[mops_key])>0) tot+=Cashbox.payment_costs[mops_key];
            return tot_new;
         } else {
		 	Cashbox.error = error;
         }
      }

   },

   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]);
                     });
		  */         
					 var tot = Cashbox.total();
					 //alert(tot);
                     //if(parseFloat(tot)==0) error+="es gibt nichts zu zahlen..?!";
                     //alert(tot);
					 if(Cashbox.error.length > 0 && error.length == 0)
					 {
						error = Cashbox.error;
						Cashbox.error = "";
					 }
					 else if(Cashbox.error.length > 0 && error.length > 0){
						error+="\n"+Cashbox.error;
						Cashbox.error = "";
					 }
                     if(error.length==0){
                        //tot+=Cashbox.payment_costs[mops_key];
                        //alert(tot);
                        Cashbox.dialog(_pp.quickdialog_url+"&total="+parseFloat(tot).toFixed(2),500,200,'payment_dialog');
                     }else{
                         Cashbox.dialog('bs_info.php?action=error&message='+Base64.encode(escape(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){       
       // Error aus dem Cashbox Objekt entfernen, da sonst doppelte Fehler angezeigt werden
       Cashbox.error = "";
       
       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+#
				if (Cashbox.discounts[id_addr_address][isd] !== undefined) {
					sum_sums -= parseFloat(Cashbox.discounts[id_addr_address][isd]);
				}
			}
		}
		jQuery.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;




					var _t = Cashbox.total(id_addr_address);
					if(parseFloat(_t) > 0)
						Cashbox.total_sum[id_addr_address] = _t;
					else
						Cashbox.total_sum[id_addr_address] 	= Cashbox.sum_summe[id_addr_address]
															+ Cashbox.sum_sum_discount[id_addr_address]
															+ Cashbox.sum_sum_vouchers[id_addr_address]
															+ response.shipping_costs;
															
					Cashbox.shipping_costs[id_addr_address] = response.shipping_costs;
					//alert("741: " + Cashbox.sum_summe[id_addr_address] +"+"+Cashbox.sum_sum_discount[id_addr_address]+"+"+response.shipping_costs + " = "+Cashbox.total_sum[id_addr_address]);
					response.shipping_costs = parseFloat(response.shipping_costs) + 0.0000001;
					//alert(response.shipping_costs + " toFixed " + parseFloat(response.shipping_costs).toFixed(2));
					$j('#no_shipping_type_'+id_addr_address).hide();
					$j('#shipping_costs_'+id_addr_address).html(Cashbox.price(response.shipping_costs));
					//$j('#shipping_type_'+id_addr_address+'_'+id_ord_shipping_type).html(" ");
					$j('#shipping_type_'+id_addr_address+'_'+id_ord_shipping_type).html("<span class='shipping_type_cost'>" + Cashbox.price(response.shipping_costs) + "</span>");
					//console.log(Cashbox.total_sum);
					$j('#total_'+id_addr_address).html(Cashbox.price(Cashbox.total_sum[id_addr_address]));
					$j('#shipping_cost_row_'+id_addr_address).show();
					$j('#total_row_'+id_addr_address).show();

					/**
					* jetzt die Zahlungsarten ausblenden, die eine unzulässige Technik haben
					**/
					if(Cashbox.shipping_type_payment_techniques[id_ord_shipping_type] !== undefined){
						Cashbox.valid_payment_technique_keys = Cashbox.shipping_type_payment_techniques[id_ord_shipping_type];
					}
					Cashbox.commitValidPaymentTechniqueKeys();
				}
				if(loadBaskets) Cashbox.load_basket(id_addr_address);
				
			},
			error:function (xhr, ajaxOptions, thrownError){
				Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
			}
		});
	},
	
	changeMethodOfPayment : function ()
	{
		
		if (Cashbox.changeMethodOfPayment.arguments.length > 0) {
			Cashbox.id_method_of_payment = Cashbox.changeMethodOfPayment.arguments[0]; 	
		}
		
		var reload_basket = false;
		if (Cashbox.changeMethodOfPayment.arguments.length > 1) {
			reload_basket = Cashbox.changeMethodOfPayment.arguments[1]; 	
		}
		
		jQuery.ajax({data: {
				action: 'changeMethodOfPayment',
				id_method_of_payment: Cashbox.id_method_of_payment
			},
			success:function(response) {
				
				Cashbox.sum_method_of_payment = 0;
				
				jQuery(response).each(function(n, res) {
					
					if (res.method_of_payment_costs != 0) {						
						jQuery('#cashbox_central_method_of_payment_' + res.basket).show();
						jQuery('#cashbox_central_method_of_payment_descr_' + res.basket).html(res.method_of_payment_text + " (" + res.method_of_payment_percent + "%)");
						jQuery('#cashbox_central_method_of_payment_costs_' + res.basket).html(Cashbox.price(res.method_of_payment_costs));
						
						Cashbox.sum_method_of_payment += res.method_of_payment_costs;
						Cashbox.sum_method_of_payment_by_basekt[res.basket] = res.method_of_payment_costs;
						
					} else {
						jQuery('#cashbox_central_method_of_payment_' + res.basket).hide();
					}
					
					if (reload_basket) {
						Cashbox.load_basket(res.basket);
					} 	
				});
				
				// Gesamtsumme neuberechnen
				Cashbox.calculate_total();	
			},
			error:function (xhr, ajaxOptions, thrownError) {
				Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
			}
		});		
	},
	
   commitValidPaymentTechniqueKeys : function()
   {
	  // dürfen: Cashbox.valid_payment_technique_keys
	  for(i in Cashbox.payment_techniques)
	  {
		 if(!in_array(Cashbox.payment_techniques[i],Cashbox.valid_payment_technique_keys))
		 {
			// verstecken...
			jQuery('#order_method_of_payment_'+i).attr('disabled','disabled');
			jQuery('#order_method_of_payment_'+i).attr('checked',false);
		 }else{
			jQuery('#order_method_of_payment_'+i).removeAttr('disabled');
		 }
	  }
   },
   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('#select_' + 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');
         jQuery('.select_' + which + '_label').show();

      }
   },

   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;
	  }
	  
	  if (jQuery('#selected_billing_address_id').length > 0) {
			_ajaxdata['selected_billing_address_id'] = jQuery('#selected_billing_address_id').val(); 
	  }
	  
	  if (jQuery('#selected_delivery_address_id').length > 0) {
			_ajaxdata['selected_delivery_address_id'] = jQuery('#selected_delivery_address_id').val(); 
	  }

      $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{
			   var refreshBaskets = false;
               $j.each(response,function(k,v){
				  if(k == '__refresh_baskets')
				  {
					 refreshBaskets = v;
				  }
                  else $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();
               $j('#select_' + which).hide();
               jQuery('.select_' + which + '_label').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);
			   if(refreshBaskets)
			   {
				  Cashbox.reload(10);
			   }
            }

            //??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('');
   },
   
   /**
   * Laedt die Daten einer Subadresse
   * @param int id_addr_address ID der Subadresse
   * @param int type			Typ der Subadresse. 1 = Rechnungsanschrift, 2 = Lieferanschrift
   */
   loadAddressFromSelection : function(id_addr_address, type) {
		if (id_addr_address > 0) {
			jQuery.ajax({
				data : {
					action 			: 'loadAddressFromSelection',
					id_addr_address : id_addr_address	
				}, 
				success : function(response) {
					if (response.success == true) {
						if (typeof response.addressData != "undefined") {							
							// Werte einsetzen
							jQuery.each(response.addressData, function(key, val) {
								if (jQuery('.order_order_addresses_' + type + '_0_' + key).attr('disabled') != true) { 
									if (key == "base_country_key") {
										if (response.billCountryEqDeliveryCountry == true) {
											if (type == 1) {
												jQuery('.order_order_addresses_' + type + '_0_' + key).val(val);
												jQuery('.order_order_addresses_2_0_' + key).val(val);
											}	
										} else {
											jQuery('.order_order_addresses_' + type + '_0_' + key).val(val);	
										}	
									} else {
										jQuery('.order_order_addresses_' + type + '_0_' + key).val(val);	
									}
								}								
							});
							
							// Gewaehlte Adress id setzen
							switch (type) {
								case 1:
								    jQuery('#selected_billing_address_id').val(id_addr_address);
									break;
									
								case 2:
								    jQuery('#selected_delivery_address_id').val(id_addr_address); 
									break;
							}	
						}
					}	
				}
			});
		}   
   },

   /**
   * Gutschein anwenden
   */
   useVoucher : function() {
	   if (jQuery('#voucher_code').val().length > 0) {
		   jQuery('#voucher_code_submit').addClass('voucher_submit_loading');
		   /*
		   jQuery.get('/bs_ajax.php', {
					'action' : 'useVoucher',
					'codeNr' : jQuery('#voucher_code').val()
				}, function(data) {

			  alert('Load was performed.');
			});
			*/


		   jQuery.ajax({
				data 	: {
					'action' : 'useVoucher',
					'codeNr' : jQuery('#voucher_code').val()
				},
				success	: function(response) {
					if (response.success == true) {
						jQuery('#voucher_response').html("<span class=\"confirm\">" + response.message + "</span>");
						Cashbox.reload(100);
					} else {
						jQuery('#voucher_response').html("<span class=\"error\">" + response.message + "</span>");
					}
					jQuery('#voucher_code_submit').removeClass('voucher_submit_loading');
				},
				error	: function (xhr, ajaxOptions, thrownError){
		        	jQuery('#voucher_code_submit').removeClass('voucher_submit_loading');
		        	Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
		        }
		   });

	   }
   },

   /**
   * Gutschein etnfernen
   */
   removeVoucher : function() {
		jQuery.ajax({
			data 	: {
				'action' : 'removeVoucher'
			},
			success	: function(response) {
				if (response.success == true) {
					jQuery('#voucher_response').html("<span class=\"confirm\">" + response.message + "</span>");
					Cashbox.reload(100);
				} else {
					jQuery('#voucher_response').html("<span class=\"error\">" + response.message + "</span>");
				}
			},
			error	: function (xhr, ajaxOptions, thrownError){
		        Cashbox.ajaxError(xhr, ajaxOptions, thrownError);
		    }
	   });
   }
};

