// js_warenkorb_library.js

function number_format (number, decimals, dec_point, thousands_sep) {
  
  var n = number, prec = decimals;

  var toFixedFix = function (n,prec) {
      var k = Math.pow(10,prec);
      return (Math.round(n*k)/k).toString();
  };

  n = !isFinite(+n) ? 0 : +n;
  prec = !isFinite(+prec) ? 0 : Math.abs(prec);
  var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
  var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

  var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

  var abs = toFixedFix(Math.abs(n), prec);
  var _, i;

  if (abs >= 1000) {
      _ = abs.split(/\D/);
      i = _[0].length % 3 || 3;

      _[0] = s.slice(0,i + (n < 0)) +
            _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
      s = _.join(dec);
  } else {
      s = s.replace('.', dec);
  }

  var decPos = s.indexOf(dec);
  if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
      s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
  }
  else if (prec >= 1 && decPos === -1) {
      s += dec+new Array(prec).join(0)+'0';
  }
  return s;  
}

/**
 *  Konfiguriert einen Artikel ...
 *  ------------------------------
 *
*/   
artikelKonfigurator = {
  
  // Hintergrund-Layer Id
  layerId : "artikel_konfigurator_layer",
  // Konfigurator Element Id
  konfiguratorId : "artikel_konfigurator",
  // Hintergrundfarbe
  configHintergrundfarbe : "#333",
  // Hintergrund Breite
  configBreite : false,
  // Hintergrund Hoehe
  configHoehe : false,
  // aktuelle Artikelnummer
  artikelNummer : "",
  // aktuelle Artikelbezeichung
  artikelBezeichnung : "",
  // aktuelle Artikelbeschreibung
  artikelBeschreibung : "",
  // aktuelle Zusatzoptionen
  artikelOptionen : new Array(),
  // optionale Direkteingabe
  artikelDirekteingabe : "",
  // aktueller Artikelpreis
  artikelPreis : 0.0,
  // Gesamtpreis der Position -> NUR rechnerisch !!
  artikelGesamtpreis : 0.0,
  // Warenkorb Währungssymbol
  artikelWaehrung : '&euro;',
  // aktuelle Stückzahl
  artikelMenge : 0,
  
  // Layer initialisieren
  initialize : function() {
    
    this.artikelNummer = '';
    this.artikelBezeichnung = '';
    this.artikelBeschreibung = '';
    this.artikelOptionen = new Array();
    this.artikelDirekteingabe = '';
    this.artikelPreis = 0.0;
    this.artikelGesamtpreis = 0.0;
    this.artikelMenge = 1;    // Der ist im Moment noch FIX !!
    return true;
  },
    
  // Artikeldaten übernehmen
  artikeldaten : function( ArtNummer, ArtBezeichnung, ArtBeschreibung, ArtPreis, ArtOptSet ) {
    
    /**
     *  Besser --> Artikeldaten per AJAX-Request laden und zuweisen !!!
     *  Optionen --> Link NUR einblenden, wenn Optionen verfügbar sind !!!
    */              
    
    this.artikelNummer = ArtNummer;
    this.artikelBezeichnung = '<b>' + ArtBezeichnung + '</b>';
    this.artikelBeschreibung = '<i>' + ArtBeschreibung + '</i>';
    this.artikelPreis = parseFloat( ArtPreis );
    this.artikelGesamtpreis = parseFloat( ArtPreis );
    // Bezeichnung setzen
    document.getElementById( 'artikel_konfigurator_titel' ).innerHTML = this.artikelBezeichnung + '<br />' + this.artikelBeschreibung;
    // Link 'Ajax: Zutaten nachladen'
    if ( ArtOptSet != '' )
      document.getElementById( 'artikel_konfigurator_inhalt' ).innerHTML = '<a href="javascript:void(0);" onclick="artikelKonfigurator.artikelOptionenAnzeigen();">+ Zutaten / Dressing / Getr&auml;nk w&auml;hlen </a>';
    // Positionspreis und Bestellbutton darstellen
    document.getElementById( 'artikel_konfigurator_preis' ).innerHTML = this.artikelWaehrung + '&nbsp;' + number_format (this.artikelGesamtpreis, 2, ',', '.');
    document.getElementById( 'artikel_konfigurator_bestellbutton' ).innerHTML = this.bestellbutton;
    // Konfigurator einblenden
    this.Show();
  },
  
  // Artikel Optionen laden und einblenden
  artikelOptionenAnzeigen : function() {
    // Artikel-Optionen laden
    ajaxShopArtikelOptionen( this.artikelNummer, 'artikel_konfigurator_inhalt' );
  },
  
  /**
   *  Artikel Option Wert addieren - nur in 1er-Schritten möglich !!
  */   
  addiereOption : function( ArtNummer, ArtPreis, ArtBezeichnung, ArtKategorie, Mehrfachwahl ) {    
    
    // Mehrfachwahl prüfen
    if ( Mehrfachwahl <= 0 ) {
      if ( this.artikelKategoriePruefen( ArtKategorie ) == true ) {
        alert( 'Für die Option ' + ArtBezeichnung + ' ist KEINE Mehrfachwahl möglich!' );
        return ;
      }
    }
    // Prüfe, ob ArtPreis eine gültige Zahl ist
    if( isNaN( ArtPreis ) )
      return ;
    // Erzeuge ein neues Array für Option
    if ( !this.artikelOptionen[ArtNummer] )
      this.artikelOptionen[ArtNummer] = new Array();
    // Übergebene Option zu Zusammenstellung hinzuaddieren, wenn 'menge' <= 0
    if ( this.artikelOptionen[ArtNummer]['menge'] <= 0 || this.artikelOptionen[ArtNummer]['menge'] == undefined ) {
      if ( this.artikelGesamtpreis+= ArtPreis ) {
        // Optionspreis addieren und Array-Werte nachtragen ...
        this.artikelOptionen[ArtNummer]['menge'] = 1;
        this.artikelOptionen[ArtNummer]['bezeichnung'] = ArtBezeichnung;
        this.artikelOptionen[ArtNummer]['kategorie'] = ArtKategorie;
      }
    }
    document.getElementById( 'artikel_konfigurator_titel' ).innerHTML = this.artikelBezeichnung + '<br />' + this.artikelBeschreibung + '<br />' + this.artikelOptionenString();
    document.getElementById( 'artikel_konfigurator_preis' ).innerHTML = this.artikelWaehrung + '&nbsp;' + number_format( this.artikelGesamtpreis, 2, ',', '.' );
  
  },
  
  /**
   *  Artikel Option Wert subtrahieren - nur in 1er-Schritten möglich !!
  */   
  subtrahiereOption : function( ArtNummer, ArtPreis, ArtBezeichnung ) {
    
    // Prüfe, ob ArtPreis eine gültige Zahl ist
    if( isNaN( ArtPreis ) )
      return ;
    // Erzeuge ein neues Array für Option
    if ( !this.artikelOptionen[ArtNummer] )
      return ;
    // Übergebene Option von Zusammenstellung subtrahieren, wenn 'menge' >= 1
    if ( this.artikelOptionen[ArtNummer]['menge'] >= 1 ) {
      if ( this.artikelGesamtpreis-= ArtPreis ) {
        // Optionspreis subtrahieren und Array-Werte zurücksetzen ...
        this.artikelOptionen[ArtNummer] = '';
        /*
        this.artikelOptionen[ArtNummer]['menge'] = 0;
        this.artikelOptionen[ArtNummer]['bezeichnung'] = '';
        this.artikelOptionen[ArtNummer]['kategorie'] = '';
        */
      }
    }
    document.getElementById( 'artikel_konfigurator_titel' ).innerHTML = this.artikelBezeichnung + '<br />' + this.artikelBeschreibung + '<br />' + this.artikelOptionenString();
    document.getElementById( 'artikel_konfigurator_preis' ).innerHTML = this.artikelWaehrung + '&nbsp;' + number_format( this.artikelGesamtpreis, 2, ',', '.' );
  
  },
  
  artikelOptionenString : function() {
    
    var ausgabe = '<div class="artikel_konfigurator_optionen" id="artikel_konfigurator_optionen">Dazu ';
    var counter = 0;
    
    // Ausgabeschleife
    if ( this.artikelOptionen.length ) {
      for ( var i in this.artikelOptionen ) {
        if ( this.artikelOptionen[i]['bezeichnung'] != '' && this.artikelOptionen[i]['menge'] >= 1 ) {
          if ( counter > 0 )
            ausgabe = ausgabe + ', ';
          ausgabe = ausgabe + this.artikelOptionen[i]['bezeichnung'];
          counter++;
        }
      }
      return ausgabe + '</div>';
    }
    return false;
  },
  
  artikelOptionenListing : function() {
    var ausgabe = '';
    var counter = 0;
    
    // Ausgabeschleife
    if ( this.artikelOptionen.length ) {
      for ( var i in this.artikelOptionen ) {
        if ( i != '' && this.artikelOptionen[i]['menge'] >= 1 ) {
          if ( counter > 0 )
            ausgabe = ausgabe + '~';
          ausgabe = ausgabe + i;
          counter++;
        }
      }
      return ausgabe;
    }
    return false;
  },
  
  artikelKategoriePruefen : function( pruefWert ) {
    
    if ( this.artikelOptionen.length ) {
      for ( var i in this.artikelOptionen ) {
        if ( this.artikelOptionen[i]['kategorie'] == pruefWert )
          return true;
        else
          return false;
      }
      return true;
    }
    
  },
  
  /**
   *   Ajax: Artikel an Warenkorb senden
   *   Achtung --> sendet numerisch NUR den Grundpreis des Artikels
  */      
  ajaxKassenbonNeuePosition : function() {
    // Optionale Direkteingabe übernehmen ...
    if ( typeof(document.getElementById( 'artikelDirekteingabe' )) == 'object' && document.getElementById( 'artikelDirekteingabe' ) != null ) {
      this.artikelDirekteingabe = document.getElementById( 'artikelDirekteingabe' ).value;
    }
    requestQueryString = 'action=get_kassenbon_neuer_artikel&artikelnummer=' + this.artikelNummer + '&menge=' + this.artikelMenge + '&preis=' + this.artikelPreis + '&optionen=' + this.artikelOptionenListing() + '&direkteingabe=' + this.artikelDirekteingabe;
    htmlElement = 'warenkorb_box_innen';
    setAjaxRequest();
    if ( request.readyState )
      this.Hide();
    return ;
  },
  
  // Bestellbutton
  // bestellbutton : '<button type="button" name="in_warenkorb" value="Auf den Bestellzettel" onclick="artikelKonfigurator.ajaxKassenbonNeuePosition()"><img src="templates/snackservant/images/konfigurator_bttn_bestellen.png" alt="Bestellen" title="Auf den Bestellzettel setzen" /></button>',
  // bestellbutton : '<a href="javascript:void(0);" onclick="artikelKonfigurator.ajaxKassenbonNeuePosition()"><img src="templates/snackservant/images/konfigurator_bttn_bestellen.png" alt="Bestellen" title="Auf den Bestellzettel setzen" /></a>',
  bestellbutton : '<input class="bestellbutton" type="button" name="in_warenkorb" value="Auf den Bestellzettel" onclick="artikelKonfigurator.ajaxKassenbonNeuePosition()" />',
  
  // Anzeigebreich ermitteln
  anzeigeBreite : function() {
    var de = document.documentElement;
    var breite = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
    return breite;
  },
  
  anzeigeHoehe : function() {
    var de = document.documentElement;
    var hoehe = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
    return hoehe;
  },
  
  // Layer einblenden
  Show : function() {
  
    // Breite des Anzeigebereichs
    document.getElementById(this.layerId).style.width = this.anzeigeBreite() + 'px';
    // Höhe des Anzeigebereichs
    document.getElementById(this.layerId).style.height = this.anzeigeHoehe() + 'px';
    // OVERRIDE: Höhe von 'div.docEnd' Tag auslesen und verwenden
    if ( getElementOffset( document.getElementById('docEnd') ).y > this.anzeigeHoehe() )
      document.getElementById(this.layerId).style.height = getElementOffset( document.getElementById('docEnd') ).y;
    // Höhe des Dialogfeldes
    document.getElementById(this.konfiguratorId).style.top = (getScrollXY()[1] + this.anzeigeHoehe()/4 ) + 'px';
    // Layer einblenden
    if ( document.getElementById( this.layerId ).style.display = 'block' )
      document.getElementById( this.konfiguratorId ).style.display = 'block';
  
  },
  
  // Layer ausblenden
  Hide : function() {
    
    this.initialize();
    document.getElementById( this.konfiguratorId ).style.display = 'none';
    document.getElementById( this.layerId ).style.display = 'none';
  
  }
} // Object end

warenkorbInhalt = {
  
  position : "",
  bezeichnung : "",
  
  // Kontrollfrage
  positionLoeschenDialog : function( Position, Bezeichnung ) {
    
    var check = false;
    
    if ( Position ) {
      this.position = parseInt( Position );
      this.bezeichnung = Bezeichnung;
      check = confirm( 'Möchten sie die "Position ' + (this.position+1) +  ': ' + this.bezeichnung + '" entfernen?' );
      if ( check == true )
        this.positionLoeschen();
      return ;
    }
  },
  
  // Ajax Request senden
  positionLoeschen : function() {
    requestQueryString = 'action=set_kassenbon_artikel_loeschen&position=' + this.position;
    htmlElement = 'warenkorb_box_innen';
    setAjaxRequest();
    return ;
  }

} // Object end

