
var undefined;

function ShoppingBasket(id) {
  this.id = undefined;
  this.itemList = [];    
  this.itemListMan = 0;
  this.sendBCCMail = '';
  this.shoppingStep = 1;
  this.lang = "en";
  this.cmsID = "";
  this.shipping = ShoppingBasketShipping.createInstance();
  this.shippingPrice = 5;
  
  this._setId(id);
}

//**************************************************************************

ShoppingBasket.prototype._setId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->_setId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasket->_setId: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}           

//**************************************************************************

ShoppingBasket.prototype._setShoppingStep = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->_setShoppingStep: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  this.shoppingStep = n;
}          

//**************************************************************************

ShoppingBasket.prototype._getItemById = function(id) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->_getItemById: Falsche Anzahl von Argumenten!");
  }
  if (typeof id != "string") {
    focus();
    throw new Error("ShoppingBasket->_getItemById: Argument id ist nicht vom Typ String!");
  }
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    if (item.id != id) {
      continue;
    }
    return item;
  }
  return undefined;
}

//**************************************************************************

ShoppingBasket.prototype._getItemIdxById = function(id) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->_getItemIdxById: Falsche Anzahl von Argumenten!");
  }
  if (typeof id != "string") {
    focus();
    throw new Error("ShoppingBasket->_getItemIdxById: Argument id ist nicht vom Typ String!");
  }
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    if (item.id != id) {
      continue;
    }
    return i;
  }
  return undefined;
}      

//**************************************************************************

ShoppingBasket.prototype.setLang = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->setLang: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasket->setLang: Argument str ist nicht vom Typ String!");
  }
  this.lang = str;
}                

//**************************************************************************

ShoppingBasket.prototype.setCMSID = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->setCMSID: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasket->setCMSID: Argument str ist nicht vom Typ String!");
  }
  this.cmsID = str;
}                           

//**************************************************************************

ShoppingBasket.prototype.setSendBCCMail = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->setSendBCCMail: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasket->setSendBCCMail: Argument str ist nicht vom Typ String!");
  }
  this.sendBCCMail = str;
}                       

//**************************************************************************

ShoppingBasket.prototype.addItemList = function(item) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->addItemList: Falsche Anzahl von Argumenten!");
  }
  if (! (item instanceof ShoppingBasketItem)) {
    focus();
    throw new Error("ShoppingBasket->addItemList: Argument item ist nicht Instance von Klasse ShoppingBasketItem!");
  }
  if (! item.dbProp) {
    // es werden nur items registriert die ein pendent im database (cookie) haben.
    return;
  }
  this.itemList.push(item);
}                     

//**************************************************************************

ShoppingBasket.prototype.setItemListMan = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->setItemListMan: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  this.itemListMan = n;
}  

//**************************************************************************

ShoppingBasket.prototype.deleteItem = function(id) {
  if (arguments.length < 1) {
    focus();
    throw new Error("ShoppingBasket->deleteItem: Falsche Anzahl von Argumenten!");
  }
  if (typeof id != "string") {
    focus();
    throw new Error("ShoppingBasket->deleteItem: Argument id ist nicht vom Typ String!");
  }
  var item = this._getItemById(id);
  if (! item) {
    return;
  }
  var item = this._getItemById(id);
  if (SHOPPINGBASKET_DB) {
    var sbIdx = SHOPPINGBASKET_DB._getItemIdxById(item.dbProp.id);
    SHOPPINGBASKET_DB.itemList.splice(sbIdx, 1);
    ShoppingBasketDataBaseItem.deleteInstance(item.dbProp.id);
    SHOPPINGBASKET_DB.saveItemList();
    SHOPPINGBASKET_DB.setPreviewItemList();
  }
  var idx = this._getItemIdxById(id);
  this.itemList.splice(idx, 1);
  ShoppingBasketItem.deleteInstance(id);
  this.printShoppingTable();
  if (! this.itemList.length) {
    this.printShippingForm();
  }
  ShoppingBasket.displayAlert('item_deleted');
}           

//**************************************************************************

ShoppingBasket.prototype.deleteAllItem = function() {
  while (this.itemList.length) {
    var item = this.itemList.shift();
    if (SHOPPINGBASKET_DB) {
      var sbIdx = SHOPPINGBASKET_DB._getItemIdxById(item.dbProp.id);
      SHOPPINGBASKET_DB.itemList.splice(sbIdx, 1);
      ShoppingBasketDataBaseItem.deleteInstance(item.dbProp.id);
    }
    ShoppingBasketItem.deleteInstance(item.id);
  }
  if (SHOPPINGBASKET_DB) {
    SHOPPINGBASKET_DB.saveItemList();
    SHOPPINGBASKET_DB.setPreviewItemList();
  }  
}

//**************************************************************************

ShoppingBasket.prototype.updateItem = function(id, n) {
  if (arguments.length < 1) {
    focus();
    throw new Error("ShoppingBasket->updateItem: Falsche Anzahl von Argumenten!");
  }
  if (typeof id != "string") {
    focus();
    throw new Error("ShoppingBasket->updateItem: Argument id ist nicht vom Typ String!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  if (! n) {
    this.deleteItem(id);
    return;
  }
  var item = this._getItemById(id);
  if (! item ) {
    return;
  }
  item.dbProp.setQuantity(n);
  if (SHOPPINGBASKET_DB) {
    SHOPPINGBASKET_DB.saveItemList();
    SHOPPINGBASKET_DB.setPreviewItemList();
  }
  this.printShoppingTable();
  ShoppingBasket.displayAlert('item_updated');
}

//**************************************************************************

ShoppingBasket.prototype.setTrain = function() {
  var html = '';
  var elem = document.getElementById('__SHOPPING_TRAIN__');
  if (! elem) {
    return false;
  }
  html += '<div class="warenkorb-buchungsverlauf">\n';
  html += '<div class="warenkorb-buchungsverlauf-1';
  if (this.shoppingStep == 1) {
      html += '-aktiv';
  }
  html += '">\n';
  html += '<div class="warenkorb-buchungsverlauf-nummer';
  if (this.shoppingStep == 1 ) {
      html += '-aktiv';
  }
  html += '">1</div>\n';
  html += ShoppingBasket.getLangTranslation('shopping', this.lang)+ '<br />\n';
  html += '</div>\n';
  html += '<div class="warenkorb-buchungsverlauf-3';
  if (this.shoppingStep == 2) {
      html += '-aktiv';
  }
  html += '">\n';
  html += '<div class="warenkorb-buchungsverlauf-nummer';
  if (this.shoppingStep == 2 ) {
      html += '-aktiv';
  }
  html += '">2</div>\n';
  html += ShoppingBasket.getLangTranslation('confirm_shopping', this.lang)+ '<br />\n';
  html += '</div>\n';
  html += '<div class="warenkorb-buchungsverlauf-4';
  if (this.shoppingStep == 3) {
      html += '-aktiv';
  }
  html += '">\n';
  html += '<div class="warenkorb-buchungsverlauf-nummer';
  if (this.shoppingStep == 3 ) {
      html += '-aktiv';
  }
  html += '">3</div>\n';
  html += ShoppingBasket.getLangTranslation('payment_head', this.lang)+ '<br />\n';
  html += '</div>\n';
  html += '<div class="warenkorb-buchungsverlauf-5';
  if (this.shoppingStep == 4) {
      html += '-aktiv';
  }
  html += '">\n';
  html += '<div class="warenkorb-buchungsverlauf-nummer';
  if (this.shoppingStep == 4 ) {
      html += '-aktiv';
  }
  html += '">4</div>\n';
  html += ShoppingBasket.getLangTranslation('shopping_complete', this.lang)+ '<br />\n';
  html += '</div>\n';
  html += '<div class="float-aufheben"><br /></div>\n';
  html += '</div>\n';
  elem.innerHTML = html;
}

//**************************************************************************

ShoppingBasket.prototype.getTaxFromResult = function() {
  var res = this.getResultPrice();
  var tax = parseFloat(parseFloat(res / 119) * 19);
  return tax;
}

//**************************************************************************

ShoppingBasket.prototype.getResultPrice = function() {
  var res = 0;
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    var price = item.price;
    if (item.dbProp.price && item.dbProp.price < price) {
      price = item.dbProp.price;
    }
    res += parseFloat(price * item.dbProp.quantity);
  }   
  return res;
}          

//**************************************************************************

ShoppingBasket.prototype.getResultPriceInclShipping = function() {
  var res = this.getResultPrice();
  if (res) {
    res += this.shippingPrice;
  }
  return res;
}                                           

//**************************************************************************

ShoppingBasket.prototype.getItemQuantities = function() {
  var quant = 0;
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    quant += parseFloat(item.dbProp.quantity);
  }
  return quant;
}      

//**************************************************************************

ShoppingBasket.prototype.getDBCreatedDate = function() {
  var date = new Date();   
  var y = date.getFullYear();
  var m = date.getMonth();
  m++;
  if (m < 10) {
    m = '0' + m;
  }
  var d = date.getDate();
  if (d < 10) {
    d = '0' + d;
  }
  var res = y + '' + m + '' + d;
  if (SHOPPINGBASKET_DB) {
    res = SHOPPINGBASKET_DB.getEarliestDate();
  }
  var res_y = res.substring(0, 4);
  var res_m = res.substring(4, 6);
  var res_d = res.substring(6, 8);
  var res_date = res_d + '.'+ res_m + '.' + res_y;
  return res_date;
}

//**************************************************************************

ShoppingBasket.prototype.finishShoppingStep1 = function(elem) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->finishShoppingStep1: Falsche Anzahl von Argumenten!");
  }
  if (! this.cmsID) {
    focus();
    throw new Error("ShoppingBasket->finishShoppingStep1: Die CMS-Rubrik konnte nicht ermittelt werden!");
  }
  if (! elem) {
    return;
  }
  if (! Tools.checkRequiredData(elem)) {
    return false;
  }
  var org = document.getElementById('Organisation');
  if (org) {
    this.shipping.setOrganisation(Tools.getDataValue(org));  
  }     
  var name = document.getElementById('Name');
  if (name) {
    this.shipping.setName(Tools.getDataValue(name));  
  }     
  var fname = document.getElementById('Vorname');
  if (fname) {
    this.shipping.setFirstName(Tools.getDataValue(fname));  
  }      
  var title = document.getElementById('Titel');
  if (title) {
    this.shipping.setTitle(Tools.getDataValue(title));  
  }     
  var sal = document.getElementById('Anrede');
  if (sal) {
    this.shipping.setSalutation(Tools.getDataValue(sal));  
  }    
  var street = document.getElementById('Strasse');
  if (street) {
    this.shipping.setStreet(Tools.getDataValue(street));  
  }    
  var nr = document.getElementById('Hausnummer');
  if (nr) {
    this.shipping.setNr(Tools.getDataValue(nr));  
  }    
  var zip = document.getElementById('PLZ');
  if (zip) {
    this.shipping.setZip(Tools.getDataValue(zip));  
  }     
  var city = document.getElementById('Ort');
  if (city) {
    this.shipping.setCity(Tools.getDataValue(city));  
  }      
  var country = document.getElementById('Land');
  if (country) {
    this.shipping.setCountry(Tools.getDataValue(country));  
  }      
  var tel = document.getElementById('Telefon');
  if (tel) {
    this.shipping.setTelephone(Tools.getDataValue(tel));  
  }        
  var fax = document.getElementById('Telefax');
  if (fax) {
    this.shipping.setTelefax(Tools.getDataValue(fax));  
  }          
  var mail = document.getElementById('E-Mail');
  if (mail) {
    this.shipping.setEmail(Tools.getDataValue(mail));  
  }        
  var comment = document.getElementById('Kommentar');
  if (comment) {
    this.shipping.setComment(Tools.getDataValue(comment));  
  }    
  this.shipping.saveShipping(); 
  this.shoppingStep2();
  return false;
}

//**************************************************************************

ShoppingBasket.prototype.finishShoppingStep2 = function() {
  this.shoppingStep3();
  return false;
}  

//**************************************************************************

ShoppingBasket.prototype.setShippingForm = function() {
  var org = document.getElementById('Organisation');
  if (org) {
    Tools.setDataValue(org, this.shipping.organisation);  
  }     
  var name = document.getElementById('Name');
  if (name) {
    Tools.setDataValue(name, this.shipping.name);  
  }     
  var fname = document.getElementById('Vorname');
  if (fname) {
    Tools.setDataValue(fname, this.shipping.first_name);  
  }      
  var title = document.getElementById('Titel');
  if (title) {
    Tools.setDataValue(title, this.shipping.title);   
  }     
  var sal = document.getElementById('Anrede');
  if (sal) {
    Tools.setDataValue(sal, this.shipping.salutation);   
  }    
  var street = document.getElementById('Strasse');
  if (street) {
    Tools.setDataValue(street, this.shipping.street);  
  }    
  var nr = document.getElementById('Hausnummer');
  if (nr) {
    Tools.setDataValue(nr, this.shipping.nr);  
  }    
  var zip = document.getElementById('PLZ');
  if (zip) {
    Tools.setDataValue(zip, this.shipping.zip);  
  }     
  var city = document.getElementById('Ort');
  if (city) {
    Tools.setDataValue(city, this.shipping.city);  
  }      
  var country = document.getElementById('Land');
  if (country) {
    Tools.setDataValue(country, this.shipping.country);  
  }      
  var tel = document.getElementById('Telefon');
  if (tel) {
    Tools.setDataValue(tel, this.shipping.telephone);  
  }        
  var fax = document.getElementById('Telefax');
  if (fax) {
    Tools.setDataValue(fax, this.shipping.telefax);  
  }          
  var mail = document.getElementById('E-Mail');
  if (mail) {
    Tools.setDataValue(mail, this.shipping.email);  
  }       
  var comment = document.getElementById('Kommentar');
  if (comment) {
    Tools.setDataValue(comment, this.shipping.comment);    
  }  
} 

//**************************************************************************

ShoppingBasket.prototype.printShippingDetail = function() {
  var html = '';
  var elem = document.getElementById('__SHOPPING_SHIPPING_FORM__');
  if (! elem) {
    return;
  }
  if (! this.itemList.length) {
    return;
  }
  
  html += '<h3 class="h3-zwischenueberschrift">Shipping details</h3>\n';
  html += '<form method="get" action="#" id="__SHIPPING__" onsubmit="return ShoppingBasket.getInstance(\''+ this.id +'\').finishShoppingStep2(document.getElementById(\'__SHIPPING__\'));">\n';
  html += '<fieldset>\n';
  html += ' <div class="formular">\n';
  html += '<div class="label"><label for="Name">'+ ShoppingBasket.getLangTranslation('name', this.lang) +':*</label></div>\n';
  html += this.shipping.name + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Vorname">'+ ShoppingBasket.getLangTranslation('first_name', this.lang) +':*</label></div>\n';
  html += this.shipping.first_name + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Titel">'+ ShoppingBasket.getLangTranslation('title', this.lang) +':*</label></div>\n';
  html += this.shipping.title + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Organisation">'+ ShoppingBasket.getLangTranslation('organisation', this.lang) +':</label></div>\n';
  html += this.shipping.organisation + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label>'+ ShoppingBasket.getLangTranslation('street_nr', this.lang) +'.*:</label></div>\n';
  html += this.shipping.street + '  ' + this.shipping.nr + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label>'+ ShoppingBasket.getLangTranslation('city_zip', this.lang) +'*:</label></div>\n';
  html += this.shipping.zip + '  ' + this.shipping.city + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';                                                         
  html += '<div class="label"><label for="Land">'+ ShoppingBasket.getLangTranslation('country', this.lang) +'*:</label></div>\n';
  html += this.shipping.country + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Telefon">'+ ShoppingBasket.getLangTranslation('phone', this.lang) +':</label></div>\n';
  html += this.shipping.telephone + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Telefax">'+ ShoppingBasket.getLangTranslation('fax', this.lang) +':</label></div>\n';
  html += this.shipping.telefax + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="E-Mail">'+ ShoppingBasket.getLangTranslation('mail', this.lang) +':*</label></div>\n';
  html += this.shipping.email + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Kommentar">'+ ShoppingBasket.getLangTranslation('comment', this.lang) +':</label></div>\n';
  html += this.shipping.comment + '\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '</fieldset>\n';
  
  html += '<fieldset class="versand">\n';
  html += '<div class="formular">\n';
  html += '<div class="label">&#160;</div>\n';
  html += '<input type="button" onclick="ShoppingBasket.getInstance(\''+ this.id +'\').shoppingStep1();" class="InputSendenBuchen" id="id-absenden-1" name="-/-" value="' +ShoppingBasket.getLangTranslation('back', this.lang)+ '" style="float: left; margin-right: 10px; width: 150px;"/>\n';
  html += '<input type="submit" class="InputSendenBuchen" id="id-absenden-2" name="-/-" value="'+ ShoppingBasket.getLangTranslation('forw', this.lang) +'" style="float: left; width: 150px;" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
  html += '</fieldset>\n';
    
  html += '</form>\n';
  
  elem.innerHTML = html;
}   

//**************************************************************************

ShoppingBasket.prototype.printShippingForm = function() {
  var html = '';
  var elem = document.getElementById('__SHOPPING_SHIPPING_FORM__');
  if (! elem) {
    return;
  }
  if (! this.itemList.length) {
    elem.innerHTML = '';
    return;
  }
  html += '<h3 class="h3-zwischenueberschrift">Shipping details</h3>\n';
  html += '<form method="get" action="#" id="__SHIPPING__" onsubmit="return ShoppingBasket.getInstance(\''+ this.id +'\').finishShoppingStep1(document.getElementById(\'__SHIPPING__\'));">\n';
  html += '<fieldset>\n';
  html += ' <div class="formular">\n';
  html += '<div class="label"><label for="Name">'+ ShoppingBasket.getLangTranslation('name', this.lang) +':*</label></div>\n';
  html += '<input type="text" name="Name" title="Name" id="Name" value="" class="InputTextfeldEinzeilig [required]" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Vorname">'+ ShoppingBasket.getLangTranslation('first_name', this.lang) +':*</label></div>\n';
  html += '<input type="text" name="Vorname" title="First Name" id="Vorname" value="" class="InputTextfeldEinzeilig [required]" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Titel">'+ ShoppingBasket.getLangTranslation('title', this.lang) +':*</label></div>\n';
  html += '<input type="text" name="Titel" title="Title" id="Titel" value="" class="InputTextfeldEinzeilig [required]" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Organisation">'+ ShoppingBasket.getLangTranslation('organisation', this.lang) +':</label></div>\n';
  html += '<input type="text" name="Organisation" title="Organisation" id="Organisation" value="" class="InputTextfeldEinzeilig" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label>'+ ShoppingBasket.getLangTranslation('street_nr', this.lang) +'.*:</label></div>\n';
  html += '<input type="text" name="Strasse" title="Street" id="Strasse" value="" class="InputTextfeldEinzeilig-mittel [required]" /> <input type="text" name="Hausnummer" title="Nr." id="Hausnummer" value="" class="InputTextfeldEinzeilig-kurz" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label>'+ ShoppingBasket.getLangTranslation('city_zip', this.lang) +'*:</label></div>\n';
  html += '<input type="text" name="PLZ" title="Postcode" id="PLZ" value="" class="InputTextfeldEinzeilig-kurz [required]" />&nbsp;<input type="text" name="Ort" title="City" id="Ort" value="" class="InputTextfeldEinzeilig-mittel [required]" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';                                                         
  html += '<div class="label"><label for="Land">'+ ShoppingBasket.getLangTranslation('country', this.lang) +'*:</label></div>\n';
  html += '<select name="Land" title="Country" id="Land" class="normal [required]">\n';
  html += '<option value="">Please choose ...</option>\n';    
  html += '<option value="">--------------------</option>\n'; 
  html += '<option value="AFGHANISTAN">AFGHANISTAN</option>\n';
  html += '<option value="ÅLAND ISLANDS">ÅLAND ISLANDS</option>\n';
  html += '<option value="ALBANIA">ALBANIA</option>\n';
  html += '<option value="ALGERIA">ALGERIA</option>\n';
  html += '<option value="AMERICAN SAMOA">AMERICAN SAMOA</option>\n';
  html += '<option value="ANDORRA ">ANDORRA </option>\n';
  html += '<option value="ANGOLA ">ANGOLA </option>\n';
  html += '<option value="ANGUILLA">ANGUILLA</option>\n';
  html += '<option value="ANTARCTICA">ANTARCTICA</option>\n';
  html += '<option value="ANTIGUA AND BARBUDA">ANTIGUA AND BARBUDA</option>\n';
  html += '<option value="ARGENTINA">ARGENTINA</option>\n';
  html += '<option value="ARMENIA">ARMENIA</option>\n';
  html += '<option value="ARUBA">ARUBA</option>\n';
  html += '<option value="AUSTRALIA">AUSTRALIA</option>\n';
  html += '<option value="AUSTRIA ">AUSTRIA </option>\n';
  html += '<option value="AZERBAIJAN">AZERBAIJAN</option>\n';
  
  html += '<option value="BAHAMAS">BAHAMAS</option>\n';
  html += '<option value="BAHRAIN">BAHRAIN</option>\n';
  html += '<option value="BANGLADESH">BANGLADESH</option>\n';
  html += '<option value="BARBADOS">BARBADOS</option>\n';
  html += '<option value="BELARUS">BELARUS</option>\n';
  html += '<option value="BELGIUM">BELGIUM</option>\n';
  html += '<option value="BELIZE">BELIZE</option>\n';
  html += '<option value="BENIN">BENIN</option>\n';
  html += '<option value="BERMUDA">BERMUDA</option>\n';
  html += '<option value="BHUTAN">BHUTAN</option>\n';
  html += '<option value="BOLIVIA, PLURINATIONAL STATE OF">BOLIVIA, PLURINATIONAL STATE OF</option>\n';
  html += '<option value="BOSNIA AND HERZEGOVINA">BOSNIA AND HERZEGOVINA</option>\n';
  html += '<option value="BOTSWANA">BOTSWANA</option>\n';
  html += '<option value="BOUVET ISLAND">BOUVET ISLAND</option>\n';
  html += '<option value="BRAZIL">BRAZIL</option>\n';
  html += '<option value="BRITISH INDIAN OCEAN TERRITORY">BRITISH INDIAN OCEAN TERRITORY</option>\n';
  html += '<option value="BRUNEI DARUSSALAM">BRUNEI DARUSSALAM</option>\n';
  html += '<option value="BULGARIA">BULGARIA</option>\n';
  html += '<option value="BURKINA FASO">BURKINA FASO</option>\n';
  html += '<option value="BURUNDI">BURUNDI</option>\n';
  
  html += '<option value="CAMBODIA">CAMBODIA</option>\n';
  html += '<option value="CAMEROON">CAMEROON</option>\n';
  html += '<option value="CANADA">CANADA</option>\n';
  html += '<option value="CAPE VERDE">CAPE VERDE</option>\n';
  html += '<option value="CAYMAN ISLANDS">CAYMAN ISLANDS</option>\n';
  html += '<option value="CENTRAL AFRICAN REPUBLIC">CENTRAL AFRICAN REPUBLIC</option>\n';
  html += '<option value="CHAD">CHAD</option>\n';
  html += '<option value="CHILE">CHILE</option>\n';
  html += '<option value="CHINA">CHINA</option>\n';
  html += '<option value="CHRISTMAS ISLAND">CHRISTMAS ISLAND</option>\n';
  html += '<option value="COCOS (KEELING) ISLANDS">COCOS (KEELING) ISLANDS</option>\n';
  html += '<option value="COLOMBIA">COLOMBIA</option>\n';
  html += '<option value="COMOROS">COMOROS</option>\n';
  html += '<option value="CONGO">CONGO</option>\n';
  html += '<option value="CONGO, THE DEMOCRATIC REPUBLIC OF THE">CONGO, THE DEMOCRATIC REPUBLIC OF THE</option>\n';
  html += '<option value="COOK ISLANDS">COOK ISLANDS</option>\n';
  html += '<option value="COSTA RICA">COSTA RICA</option>\n';
  html += '<option value="CÔTE D\'IVOIRE">CÔTE D\'IVOIRE</option>\n';
  html += '<option value="CROATIA">CROATIA</option>\n';
  html += '<option value="CUBA">CUBA</option>\n';
  html += '<option value="CYPRUS">CYPRUS</option>\n';
  html += '<option value="CZECH REPUBLIC">CZECH REPUBLIC</option>\n';
  
  html += '<option value="DENMARK">DENMARK</option>\n';
  html += '<option value="DJIBOUTI">DJIBOUTI</option>\n';
  html += '<option value="DOMINICA">DOMINICA</option>\n';
  html += '<option value="DOMINICAN REPUBLIC">DOMINICAN REPUBLIC</option>\n';
  
  html += '<option value="ECUADOR">ECUADOR</option>\n';
  html += '<option value="EGYPT">EGYPT</option>\n';
  html += '<option value="EL SALVADOR">EL SALVADOR</option>\n';
  html += '<option value="EQUATORIAL GUINEA">EQUATORIAL GUINEA</option>\n';
  html += '<option value="ERITREA">ERITREA</option>\n';
  html += '<option value="ESTONIA">ESTONIA</option>\n';
  html += '<option value="ETHIOPIA">ETHIOPIA</option>\n';
  
  html += '<option value="FALKLAND ISLANDS (MALVINAS)">FALKLAND ISLANDS (MALVINAS)</option>\n';
  html += '<option value="FAROE ISLANDS">FAROE ISLANDS</option>\n';
  html += '<option value="FIJI">FIJI</option>\n';
  html += '<option value="FINLAND">FINLAND</option>\n';
  html += '<option value="FRANCE">FRANCE</option>\n';
  html += '<option value="FRENCH GUIANA">FRENCH GUIANA</option>\n';
  html += '<option value="FRENCH POLYNESIA">FRENCH POLYNESIA</option>\n';
  html += '<option value="FRENCH SOUTHERN TERRITORIES">FRENCH SOUTHERN TERRITORIES</option>\n';
  
  html += '<option value="GABON">GABON</option>\n';
  html += '<option value="GAMBIA">GAMBIA</option>\n';
  html += '<option value="GEORGIA">GEORGIA</option>\n';
  html += '<option value="GERMANY" selected="selected">GERMANY</option>\n';
  html += '<option value="GHANA">GHANA</option>\n';
  html += '<option value="GIBRALTAR">GIBRALTAR</option>\n';
  html += '<option value="GREECE">GREECE</option>\n';
  html += '<option value="GREENLAND">GREENLAND</option>\n';
  html += '<option value="GRENADA">GRENADA</option>\n';
  html += '<option value="GUADELOUPE">GUADELOUPE</option>\n';
  html += '<option value="GUAM">GUAM</option>\n';
  html += '<option value="GUATEMALA">GUATEMALA</option>\n';
  html += '<option value="GUERNSEY">GUERNSEY</option>\n';
  html += '<option value="GUINEA">GUINEA</option>\n';
  html += '<option value="GUINEA-BISSAU">GUINEA-BISSAU</option>\n';
  html += '<option value="GUYANA">GUYANA</option>\n';
  
  html += '<option value="HAITI">HAITI</option>\n';
  html += '<option value="HEARD ISLAND AND MCDONALD ISLANDS">HEARD ISLAND AND MCDONALD ISLANDS</option>\n';
  html += '<option value="HOLY SEE (VATICAN CITY STATE)">HOLY SEE (VATICAN CITY STATE)</option>\n';
  html += '<option value="HONDURAS">HONDURAS</option>\n';
  html += '<option value="HONG KONG">HONG KONG</option>\n';
  html += '<option value="HUNGARY">HUNGARY</option>\n';
  
  html += '<option value="ICELAND">ICELAND</option>\n';
  html += '<option value="INDIA">INDIA</option>\n';
  html += '<option value="INDONESIA">INDONESIA</option>\n';
  html += '<option value="IRAN, ISLAMIC REPUBLIC OF">IRAN, ISLAMIC REPUBLIC OF</option>\n';
  html += '<option value="IRAQ">IRAQ</option>\n';
  html += '<option value="IRELAND">IRELAND</option>\n';
  html += '<option value="ISLE OF MAN">ISLE OF MAN</option>\n';
  html += '<option value="ISRAEL">ISRAEL</option>\n';
  html += '<option value="ITALY">ITALY</option>\n';
  
  html += '<option value="JAMAICA">JAMAICA</option>\n';
  html += '<option value="JAPAN">JAPAN</option>\n';
  html += '<option value="JERSEY">JERSEY</option>\n';
  html += '<option value="JORDAN">JORDAN</option>\n';
  
  html += '<option value="KAZAKHSTAN">KAZAKHSTAN</option>\n';
  html += '<option value="KENYA">KENYA</option>\n';
  html += '<option value="KIRIBATI">KIRIBATI</option>\n';
  html += '<option value="KOREA, DEMOCRATIC PEOPLE\'S REPUBLIC OF">KOREA, DEMOCRATIC PEOPLE\'S REPUBLIC OF</option>\n';
  html += '<option value="KOREA, REPUBLIC OF">KOREA, REPUBLIC OF</option>\n';
  html += '<option value="KUWAIT">KUWAIT</option>\n';
  html += '<option value="KYRGYZSTAN">KYRGYZSTAN</option>\n';
  
  html += '<option value="LAO PEOPLE\'S DEMOCRATIC REPUBLIC">LAO PEOPLE\'S DEMOCRATIC REPUBLIC</option>\n';
  html += '<option value="LATVIA">LATVIA</option>\n';
  html += '<option value="LEBANON">LEBANON</option>\n';
  html += '<option value="LESOTHO">LESOTHO</option>\n';
  html += '<option value="LIBERIA">LIBERIA</option>\n';
  html += '<option value="LIBYAN ARAB JAMAHIRIYA">LIBYAN ARAB JAMAHIRIYA</option>\n';
  html += '<option value="LIECHTENSTEIN">LIECHTENSTEIN</option>\n';
  html += '<option value="LITHUANIA">LITHUANIA</option>\n';
  html += '<option value="LUXEMBOURG">LUXEMBOURG</option>\n';
  
  html += '<option value="MACAO">MACAO</option>\n';
  html += '<option value="MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF">MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF</option>\n';
  html += '<option value="MADAGASCAR">MADAGASCAR</option>\n';
  html += '<option value="MALAWI">MALAWI</option>\n';
  html += '<option value="MALAYSIA">MALAYSIA</option>\n';
  html += '<option value="MALDIVES">MALDIVES</option>\n';
  html += '<option value="MALI">MALI</option>\n';
  html += '<option value="MALTA">MALTA</option>\n';
  html += '<option value="MARSHALL ISLANDS">MARSHALL ISLANDS</option>\n';
  html += '<option value="MARTINIQUE">MARTINIQUE</option>\n';
  html += '<option value="MAURITANIA">MAURITANIA</option>\n';
  html += '<option value="MAURITIUS">MAURITIUS</option>\n';
  html += '<option value="MAYOTTE">MAYOTTE</option>\n';
  html += '<option value="MEXICO">MEXICO</option>\n';
  html += '<option value="MICRONESIA, FEDERATED STATES OF">MICRONESIA, FEDERATED STATES OF</option>\n';
  html += '<option value="MOLDOVA, REPUBLIC OF">MOLDOVA, REPUBLIC OF</option>\n';
  html += '<option value="MONACO">MONACO</option>\n';
  html += '<option value="MONGOLIA ">MONGOLIA </option>\n';
  html += '<option value="MONTENEGRO">MONTENEGRO</option>\n';
  html += '<option value="MONTSERRAT">MONTSERRAT</option>\n';
  html += '<option value="MOROCCO">MOROCCO</option>\n';
  html += '<option value="MOZAMBIQUE">MOZAMBIQUE</option>\n';
  html += '<option value="MYANMAR">MYANMAR</option>\n';
  
  html += '<option value="NAMIBIA">NAMIBIA</option>\n';
  html += '<option value="NAURU">NAURU</option>\n';
  html += '<option value="NEPAL">NEPAL</option>\n';
  html += '<option value="NETHERLANDS">NETHERLANDS</option>\n';
  html += '<option value="NETHERLANDS ANTILLES">NETHERLANDS ANTILLES</option>\n';
  html += '<option value="NEW CALEDONIA">NEW CALEDONIA</option>\n';
  html += '<option value="NEW ZEALAND">NEW ZEALAND</option>\n';
  html += '<option value="NICARAGUA">NICARAGUA</option>\n';
  html += '<option value="NIGER">NIGER</option>\n';
  html += '<option value="NIGERIA">NIGERIA</option>\n';
  html += '<option value="NIUE">NIUE</option>\n';
  html += '<option value="NORFOLK ISLAND">NORFOLK ISLAND</option>\n';
  html += '<option value="NORTHERN MARIANA ISLANDS">NORTHERN MARIANA ISLANDS</option>\n';
  html += '<option value="NORWAY">NORWAY</option>\n';
  
  html += '<option value="OMAN">OMAN</option>\n';
  
  html += '<option value="PAKISTAN">PAKISTAN</option>\n';
  html += '<option value="PALAU">PALAU</option>\n';
  html += '<option value="PALESTINIAN TERRITORY, OCCUPIED">PALESTINIAN TERRITORY, OCCUPIED</option>\n';
  html += '<option value="PANAMA">PANAMA</option>\n';
  html += '<option value="PAPUA NEW GUINEA">PAPUA NEW GUINEA</option>\n';
  html += '<option value="PARAGUAY">PARAGUAY</option>\n';
  html += '<option value="PERU">PERU</option>\n';
  html += '<option value="PHILIPPINES">PHILIPPINES</option>\n';
  html += '<option value="PITCAIRN">PITCAIRN</option>\n';
  html += '<option value="POLAND">POLAND</option>\n';
  html += '<option value="PORTUGAL">PORTUGAL</option>\n';
  html += '<option value="PUERTO RICO">PUERTO RICO</option>\n';
  
  html += '<option value="QATAR">QATAR</option>\n';
  
  html += '<option value="RÉUNION">RÉUNION</option>\n';
  html += '<option value="ROMANIA">ROMANIA</option>\n';
  html += '<option value="RUSSIAN FEDERATION">RUSSIAN FEDERATION</option>\n';
  html += '<option value="RWANDA">RWANDA</option>\n';
  
  html += '<option value="SAINT BARTHÉLEMY">SAINT BARTHÉLEMY</option>\n';
  html += '<option value="SAINT HELENA">SAINT HELENA</option>\n';
  html += '<option value="SAINT KITTS AND NEVIS">SAINT KITTS AND NEVIS</option>\n';
  html += '<option value="SAINT LUCIA">SAINT LUCIA</option>\n';
  html += '<option value="SAINT MARTIN">SAINT MARTIN</option>\n';
  html += '<option value="SAINT PIERRE AND MIQUELON">SAINT PIERRE AND MIQUELON</option>\n';
  html += '<option value="SAINT VINCENT AND THE GRENADINES">SAINT VINCENT AND THE GRENADINES</option>\n';
  html += '<option value="SAMOA">SAMOA</option>\n';
  html += '<option value="SAN MARINO">SAN MARINO</option>\n';
  html += '<option value="SAO TOME AND PRINCIPE">SAO TOME AND PRINCIPE</option>\n';
  html += '<option value="SAUDI ARABIA">SAUDI ARABIA</option>\n';
  html += '<option value="SENEGAL">SENEGAL</option>\n';
  html += '<option value="SERBIA">SERBIA</option>\n';
  html += '<option value="SEYCHELLES">SEYCHELLES</option>\n';
  html += '<option value="SIERRA LEONE">SIERRA LEONE</option>\n';
  html += '<option value="SINGAPORE">SINGAPORE</option>\n';
  html += '<option value="SLOVAKIA">SLOVAKIA</option>\n';
  html += '<option value="SLOVENIA">SLOVENIA</option>\n';
  html += '<option value="SOLOMON ISLANDS">SOLOMON ISLANDS</option>\n';
  html += '<option value="SOMALIA">SOMALIA</option>\n';
  html += '<option value="SOUTH AFRICA">SOUTH AFRICA</option>\n';
  html += '<option value="SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS">SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS</option>\n';
  html += '<option value="SPAIN">SPAIN</option>\n';
  html += '<option value="SRI LANKA">SRI LANKA</option>\n';
  html += '<option value="SUDAN">SUDAN</option>\n';
  html += '<option value="SURINAME">SURINAME</option>\n';
  html += '<option value="SVALBARD AND JAN MAYEN">SVALBARD AND JAN MAYEN</option>\n';
  html += '<option value="SWAZILAND">SWAZILAND</option>\n';
  html += '<option value="SWEDEN">SWEDEN</option>\n';
  html += '<option value="SWITZERLAND">SWITZERLAND</option>\n';
  html += '<option value="SYRIAN ARAB REPUBLIC">SYRIAN ARAB REPUBLIC</option>\n';
  
  html += '<option value="TAIWAN, PROVINCE OF CHINA">TAIWAN, PROVINCE OF CHINA</option>\n';
  html += '<option value="TAJIKISTAN">TAJIKISTAN</option>\n';
  html += '<option value="TANZANIA, UNITED REPUBLIC OF">TANZANIA, UNITED REPUBLIC OF</option>\n';
  html += '<option value="THAILAND">THAILAND</option>\n';
  html += '<option value="TIMOR-LESTE">TIMOR-LESTE</option>\n';
  html += '<option value="TOGO">TOGO</option>\n';
  html += '<option value="TOKELAU">TOKELAU</option>\n';
  html += '<option value="TONGA">TONGA</option>\n';
  html += '<option value="TRINIDAD AND TOBAGO">TRINIDAD AND TOBAGO</option>\n';
  html += '<option value="TUNISIA">TUNISIA</option>\n';
  html += '<option value="TURKEY ">TURKEY </option>\n';
  html += '<option value="TURKMENISTAN">TURKMENISTAN</option>\n';
  html += '<option value="TURKS AND CAICOS ISLANDS">TURKS AND CAICOS ISLANDS</option>\n';
  html += '<option value="TUVALU">TUVALU</option>\n';
  
  html += '<option value="UGANDA">UGANDA</option>\n';
  html += '<option value="UKRAINE">UKRAINE</option>\n';
  html += '<option value="UNITED ARAB EMIRATES">UNITED ARAB EMIRATES</option>\n';
  html += '<option value="UNITED KINGDOM">UNITED KINGDOM</option>\n';
  html += '<option value="UNITED STATES">UNITED STATES</option>\n';
  html += '<option value="UNITED STATES MINOR OUTLYING ISLANDS">UNITED STATES MINOR OUTLYING ISLANDS</option>\n';
  html += '<option value="URUGUAY">URUGUAY</option>\n';
  html += '<option value="UZBEKISTAN">UZBEKISTAN</option>\n';
  
  html += '<option value="VANUATU">VANUATU</option>\n';
  html += '<option value="VATICAN CITY STATE">VATICAN CITY STATE</option>\n';
  html += '<option value="VENEZUELA, BOLIVARIAN REPUBLIC OF">VENEZUELA, BOLIVARIAN REPUBLIC OF</option>\n';
  html += '<option value="VIET NAM">VIET NAM</option>\n';
  html += '<option value="VIRGIN ISLANDS, BRITISH">VIRGIN ISLANDS, BRITISH</option>\n';
  html += '<option value="VIRGIN ISLANDS, U.S.">VIRGIN ISLANDS, U.S.</option>\n';
  
  html += '<option value="WALLIS AND FUTUNA">WALLIS AND FUTUNA</option>\n';
  html += '<option value="WESTERN SAHARA">WESTERN SAHARA</option>\n';
  
  html += '<option value="YEMEN">YEMEN</option>\n';
  
  html += '<option value="ZAMBIA">ZAMBIA</option>\n';
  html += '<option value="ZIMBABWE">ZIMBABWE</option>\n'; 
  html += '</select>\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Telefon">'+ ShoppingBasket.getLangTranslation('phone', this.lang) +':</label></div>\n';
  html += '<input type="text" name="Telefon" title="Telephone" id="Telefon" value="" class="InputTextfeldEinzeilig" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Telefax">'+ ShoppingBasket.getLangTranslation('fax', this.lang) +':</label></div>\n';
  html += '<input type="text" name="Telefax" title="Telefax" id="Telefax" value="" class="InputTextfeldEinzeilig" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="E-Mail">'+ ShoppingBasket.getLangTranslation('mail', this.lang) +':*</label></div>\n';
  html += '<input type="text" name="E-Mail" title="E-Mail" id="E-Mail" value="" class="InputTextfeldEinzeilig [required] [datatype=Mail]" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '<div class="formular">\n';
  html += '<div class="label"><label for="Kommentar">'+ ShoppingBasket.getLangTranslation('comment', this.lang) +':</label></div>\n';
  html += '<textarea name="Kommentar" title="Comment" id="Kommentar" class="Textfeld" cols="15" rows="8"></textarea>\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
    
  html += '</fieldset>\n';
  
  html += '<fieldset class="versand">\n';
  html += '<div class="formular">\n';
  html += '<div class="label">&#160;</div>\n';
  html += '<input type="submit" class="InputSendenBuchen" id="id-absenden-1" name="-/-" value="'+ ShoppingBasket.getLangTranslation('forw', this.lang) +'" />\n';
  html += '<div class="float-aufheben"></div>\n';
  html += '</div>\n';
  html += '</fieldset>\n';
    
  html += '</form>\n';
  
  elem.innerHTML = html;
}  

//**************************************************************************

ShoppingBasket.prototype.printShoppingTable = function(func) {
  var html = '';
  var elem = document.getElementById('__SHOPPING_TABLE__');
  if (! elem) {
    return false;
  }
  
  html += '<p style="margin-top: 30px; text-align: right; color: #8C8B8B; font-size: 0.9em;">';
  html += ShoppingBasket.getLangTranslation('db_created', this.lang) + ': ' + this.getDBCreatedDate();
  html += '</p>';
   
  html += '<table cellpadding="0" cellspacing="1" border="0" class="table-shop-detail-buchen" style="margin-top: 0; margin-bottom: 0;" summary="">\n';
  html += '<tr>\n';
  html += '<th class="th-shop-detail-buchen-0">\n';
  html += ShoppingBasket.getLangTranslation('no.', this.lang)+ '<br />\n'; 
  html += '</th>\n';
  html += '<th class="th-shop-detail-buchen-1">\n';
  html += ShoppingBasket.getLangTranslation('article', this.lang)+ '<br />\n';
  html += '</th>\n';
  html += '<th class="th-shop-detail-buchen-2">\n';
  html += ShoppingBasket.getLangTranslation('quantity', this.lang)+ '<br />\n';
  html += '</th>\n';
  html += '<th class="th-shop-detail-buchen-3">\n';
  html += ShoppingBasket.getLangTranslation('price', this.lang)+ ' (&#8364;)<br />\n';
  html += '</th>\n';
  html += '<th class="th-shop-detail-buchen-4">\n';
  html += ShoppingBasket.getLangTranslation('total', this.lang)+ ' (&#8364;)<br />\n';
  html += '</th>\n';
  html += '</tr>\n';
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    html += '<tr>\n';
    html += '<td class="td-shop-detail-buchen-0">\n';
    html += (i + 1);
    html += '</td>\n';
    html += '<td class="td-shop-detail-buchen-1">\n';
    var art_url = '/cgi-bin/cms';
    if (CMS_URL_PREFIX) {
      art_url = CMS_URL_PREFIX;
    }
    art_url += '&_bereich=artikel&_aktion=detail&idartikel=';
    html += '<a href="'+ art_url +'' + item.articleId + '" style="font-weight: bold;">'; 
    html += '<b>' + item.title + '</b>'; 
    html += '</a>';
    if (item.subTitle) {
      html += '<br />' + item.subTitle; 
    }
    html += '</td>\n';
    html += '<td class="td-shop-detail-buchen-2">\n';
    //html += ' [<a href="javascript:void(0);" onclick="ShoppingBasket.getInstance(\''+ this.id  +'\').deleteItem(\''+ item.id +'\');">'+ ShoppingBasket.getLangTranslation('delete', this.lang) +'</a>] \n';
    if (this.shoppingStep < 2) {     
      var deltitle = 'Artikel aus Warenkorb entfernen.';
      if (this.lang == 'en') {
        deltitle = 'Delete from Shopping basket.';
      }
      if (this.lang == 'fr') {
        deltitle = 'Delete from Shopping basket.';
      }
      if (this.lang == 'it') {
        deltitle = 'Delete from Shopping basket.';
      }
      html += '<a href="javascript:void(0);" onclick="ShoppingBasket.getInstance(\''+ this.id  +'\').deleteItem(\''+ item.id +'\');" title="'+ deltitle +'"><img src="/kiosk/grafik/del_button.gif" style="float: right; margin-left: 3px;"/></a>\n';
      html += '<input type="text" style="float: right;" name="_Item_'+ item.id +'" class="shop-detail-anzahl" onchange="ShoppingBasket.getInstance(\''+ this.id  +'\').updateItem(\''+ item.id +'\', this.value);" value="';
      html += item.dbProp.quantity;
      html += '">';
    } else {
      html += item.dbProp.quantity;
    }
    var price = item.price;
    if (item.dbProp.price && item.dbProp.price < price) {
      price = item.dbProp.price;
    }
    html += '</td>\n';
    html += '<td class="td-shop-detail-buchen-3">\n';
    html += ShoppingBasket.formatCash(price, this.lang) + '<br />\n';
    html += '</td>\n';
    html += '<td class="td-shop-detail-buchen-4">\n';
    html += ShoppingBasket.formatCash(price * item.dbProp.quantity, this.lang) + '<br />\n';
    html += '</td>\n';
    html += '</tr>\n';
  } 
  html += '</table>\n';
  
  
  
  
  
  html += '<table cellpadding="0" cellspacing="1" border="0" class="table-shop-detail-buchen-result" style="margin-bottom: 0;" summary="">\n';
  html += '<tr>\n';
  html += '<td class="td-shop-detail-buchen-1">\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-3" style="color: #8C8B8B;">\n';
  html += 'incl. '+ ShoppingBasket.getLangTranslation('vat', this.lang) +' 19%\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-4" style="color: #8C8B8B;">\n';
  html += ShoppingBasket.formatCash(this.getTaxFromResult(), this.lang) + '<br />\n';
  html += '</td>\n';
  html += '</tr>\n';
  html += '<tr>\n';
  html += '<td class="td-shop-detail-buchen-1">\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-3" style="color: #8C8B8B;">\n';
  html += 'plus '+ ShoppingBasket.getLangTranslation('shipping', this.lang) +'\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-4" style="color: #8C8B8B;">\n';
  var ship = 0;
  if (this.getResultPrice()) {
    ship = this.shippingPrice;
  }
  html += ShoppingBasket.formatCash(ship, this.lang) + '<br />\n';
  html += '</td>\n';
  html += '</tr>\n';
  html += '<tr>\n';
  html += '<td class="td-shop-detail-buchen-1">\n';
  //html += ShoppingBasket.formatCash(item.price, this.lang) + '<br />\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-3">\n';
  //html += 'incl. MwSt. 19%\n';
  html += '</td>\n';
  html += '<td class="td-shop-detail-buchen-4">\n';
  html += '<b>' + ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) + '</b>\n';
  html += '</td>\n';
  html += '</tr>\n';
  html += '</table>\n';
  
  if (this.shoppingStep == 3) {
    
    //html += '<form name="VerbindlichKaufen" id="VerbindlichKaufen" method="post" action="https://www2.era.int/cgi-bin/genmail/send" onsubmit="return ShoppingBasket.getInstance(\''+ this.id +'\').sendOrder(document.getElementById(\'VerbindlichKaufen\'));">\n';
    html += '<form name="VerbindlichKaufen" id="VerbindlichKaufen" method="post" action="https://www.era.int/cgi-bin/genmail/send" onsubmit="return ShoppingBasket.getInstance(\''+ this.id +'\').sendOrder(document.getElementById(\'VerbindlichKaufen\'));">\n';

    html += '<input type="hidden" name="_BETREFF_" value="Bestellung aus www.era.int" />\n';  
    if (this.lang == 'en'){
    html += '<input type="hidden" name="_CONFIG_" value="era/shopping/shopping_en.conf" />\n'; 
    } else if (this.lang == 'fr') {
    html += '<input type="hidden" name="_CONFIG_" value="era/shopping/shopping_fr.conf" />\n'; 
    } else if (this.lang == 'it') {
    html += '<input type="hidden" name="_CONFIG_" value="era/shopping/shopping_it.conf" />\n'; 
    } else {
    html += '<input type="hidden" name="_CONFIG_" value="era/shopping/shopping.conf" />\n'; 
    }
    if (this.sendBCCMail) {
      html += '<input type="hidden" name="_BCC_" value="'+ this.sendBCCMail +'" />\n'; 
    }
    html += '<input type="hidden" name="_CMS_RUBRIK_" value="'+ this.cmsID +'" />\n'; 
    html += '<input type="hidden" name="_HOSTNAME_" value="'+ window.location.protocol + '//' + window.location.hostname +'" />\n'; 
    //alert(window.location.hostname);
    
    html += '<input type="hidden" name="Kaeufer_Organisation" value="'+ this.shipping.organisation +'" />\n';   
    html += '<input type="hidden" name="Kaeufer_Name" value="'+ this.shipping.name +'" />\n';   
    html += '<input type="hidden" name="Kaeufer_Vorname" value="'+ this.shipping.first_name +'" />\n';    
    html += '<input type="hidden" name="Kaeufer_Titel" value="'+ this.shipping.title +'" />\n';      
    if ( this.shipping.salutation) {
      html += '<input type="hidden" name="Kaeufer_Anrede" value="'+ this.shipping.salutation +'" />\n';   
    }    
    html += '<input type="hidden" name="Kaeufer_Straße" value="'+ this.shipping.street +'" />\n';   
    html += '<input type="hidden" name="Kaeufer_Hausnummer" value="'+ this.shipping.nr +'" />\n';   
    html += '<input type="hidden" name="Kaeufer_PLZ" value="'+ this.shipping.zip +'" />\n';     
    html += '<input type="hidden" name="Kaeufer_Ort" value="'+ this.shipping.city +'" />\n';      
    html += '<input type="hidden" name="Kaeufer_Land" value="'+ this.shipping.country +'" />\n';   
    html += '<input type="hidden" name="Kaeufer_Telefon" value="'+ this.shipping.telephone +'" />\n';  
    html += '<input type="hidden" name="Kaeufer_Telefax" value="'+ this.shipping.telefax +'" />\n';    
    html += '<input type="hidden" name="Kaeufer_EMail" value="'+ this.shipping.email +'" />\n';    
    html += '<input type="hidden" name="Kaeufer_Mitteilung" value="'+ this.shipping.comment +'" />\n';    
     
    html += '<input type="hidden" name="Anzahl_Gesamt" value="'+ this.getItemQuantities() +'" />\n'; 
    html += '<input type="hidden" name="Preis_enth_MwSt" value="'+ ShoppingBasket.formatCash(this.getTaxFromResult(), this.lang) +'" />\n';  
    html += '<input type="hidden" name="Preis_Versand" value="'+ ShoppingBasket.formatCash(this.shippingPrice, this.lang) +'" />\n'; 
    html += '<input type="hidden" name="Preis_Gesamt" value="'+ ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) +'" />\n';  
    html += '<input type="hidden" name="Rechnungsnummer" value="" />\n'; 
    
    for (var i=0; i<this.itemList.length; i++) {
      var item = this.itemList[i];
      var price = item.price;
      if (item.dbProp.price && item.dbProp.price < price) {
        price = item.dbProp.price;
      }
      var pos = (i + 1);
      html += '<input type="hidden" name="Artikel'+ pos +'_Titel" value="'+ item.title +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Untertitel" value="'+ item.subTitle +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Kategorie" value="'+ item.category +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Typ" value="'+ item.type +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Sprache" value="'+ item.lang +'" />\n';      
      html += '<input type="hidden" name="Artikel'+ pos +'_Nummer" value="'+ item.articleNumber +'" />\n';     
      html += '<input type="hidden" name="Artikel'+ pos +'_ID" value="'+ item.articleId +'" />\n';    
      html += '<input type="hidden" name="Artikel'+ pos +'_Jahr" value="'+ item.year +'" />\n';    
      html += '<input type="hidden" name="Artikel'+ pos +'_Preis" value="'+ ShoppingBasket.formatCash(price, this.lang) +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Anzahl" value="'+ item.dbProp.quantity +'" />\n'; 
      html += '<input type="hidden" name="Artikel'+ pos +'_Preis_Gesamt" value="'+ ShoppingBasket.formatCash(price * item.dbProp.quantity, this.lang) +'" />\n'; 
    } 
    
    html += '<h3 class="h3-zwischenueberschrift">' +ShoppingBasket.getLangTranslation('payment', this.lang)+ '</h3>\n';          
    html += '<fieldset>\n';
    html += '<div class="formular">\n';
    if (this.lang == 'en'){
      html += '<input type="radio" name="Zahlung" title="Bestätigung der AGB und der Überweisung der Rechnung" id="Rechnung" value="Rechnung" class="InputRadio [required]" /><span class="hinweis">&#160;I have read and accept the <a href="javascript:void(0);">terms and conditions</a>. I agree to pay the sum of &euro; '+ ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) +'.</span><br />\n';
    } else if (this.lang == 'fr') {
      html += '<input type="radio" name="Zahlung" title="Bestätigung der AGB und der Überweisung der Rechnung" id="Rechnung" value="Rechnung" class="InputRadio [required]" /><span class="hinweis">&#160;J\'ai lu et accepté les <a href="javascript:void(0);">conditions générales</a>. Je m\'engage à payer le montant de '+ ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) +'&euro; après réception de la facture.</span><br />\n';
    } else if (this.lang == 'it') {
      html += '<input type="radio" name="Zahlung" title="Bestätigung der AGB und der Überweisung der Rechnung" id="Rechnung" value="Rechnung" class="InputRadio [required]" /><span class="hinweis">&#160;I have read and accept the <a href="javascript:void(0);">terms and conditions</a>. I agree to pay the sum of &euro; '+ ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) +'.</span><br />\n';
    } else {
      html += '<input type="radio" name="Zahlung" title="Bestätigung der AGB und der Überweisung der Rechnung" id="Rechnung" value="Rechnung" class="InputRadio [required]" /><span class="hinweis">&#160;Ich habe die <a href="javascript:void(0);">Allgemeinen Geschäftsbedingungen</a> gelesen und bin damit einverstanden. Ich werde die Summe von '+ ShoppingBasket.formatCash(this.getResultPriceInclShipping(), this.lang) +' &#8364; nach Erhalt der Rechnung zahlen.</span><br />\n';
    }
    html += '<div class="float-aufheben"></div>\n';
    html += '</div>\n';
    html += '</fieldset>\n';
    
    //Capture
    html += '<b>' +ShoppingBasket.getLangTranslation('verification', this.lang)+ '</b><br />\n';
    html += '<fieldset>\n';
    html += '<div class="formular">\n';
    html += '<div class="label"><br /></div>\n';
    html += '<img id="_CAPTCHA_IMAGE_" src="/kiosk/grafik/trans.gif" title="Sicherheitscode" alt="Sicherheitscode" style="height: 80px; width: 180px; border: none; "/><br />';
    html += '<div class="float-aufheben"></div>\n';
    html += '</div>\n';
    html += '<div class="formular">\n';
    html += '<div class="label"><br /></div>\n';
    html += '<input type="text" name="_CAPTCHA_STRING_" id="_CAPTCHA_STRING_" value="" title="Sicherheitscode" class="InputTextfeldEinzeilig [required]" /><br />\n';
    html += ShoppingBasket.getLangTranslation('verification_alert', this.lang) + '\n';
    html += '<div class="float-aufheben"></div>\n';
    html += '</div>\n';
    html += '</fieldset>\n';
            
    html += '<fieldset class="versand">\n';
    html += '<div class="formular">\n';
    html += '<div class="label">&#160;</div>\n';
    html += '<input type="button" onclick="ShoppingBasket.getInstance(\''+ this.id +'\').shoppingStep2();" class="InputSendenBuchen" id="id-absenden-1" name="-/-" value="' +ShoppingBasket.getLangTranslation('back', this.lang)+ '" style="float: left; margin-right: 10px; width: 150px;"/>\n';
    html += '<input type="submit" class="InputSendenBuchen" id="id-absenden-1" name="-/-" value="' +ShoppingBasket.getLangTranslation('submit', this.lang)+ '" style="float: left; width: 150px;"/>\n';
    html += '<div class="float-aufheben"></div>\n';
    html += '</div>\n';
    html += '</fieldset>\n';    
    html += '</form>\n';
    
    html += '<img onload="ShoppingBasket.setCapture();" src="/kiosk/grafik/trans.gif" title="Sicherheitscode" style="height: 1px; width: 1px; visibility: hidden; border: none; "/>';
  }
  
  elem.innerHTML = html;
  if (func && func instanceof Function) {
    func();
  }
}

//**************************************************************************

ShoppingBasket.prototype.sendOrder = function(elem) {
  if (! elem) {
    return false;
  }
  if (!Tools.checkRequiredData(elem) ) {
    return false;
  }
  var ivElem = elem['Rechnungsnummer'];
  var bElem = elem['_BETREFF_']
  var ajax = Ajax.createInstance();
  ajax.setAsynchron(false);
  ajax.setMethod('GET');
  ajax.setURL('http://www.era.int/cgi-bin/genid');
  ajax.open();
  ajax.sendNull();  
  if (ajax.getReadyState() != 4){
    return Ajax.cursorWait();
  }
  if (ajax.getReadyState() == 4){
    Ajax.cursorFinished();
    var xml = ajax.getReadableXMLNode();
    if (! xml){
      return;
    }
    var id = ajax.getSingleNodeValue('id');
    Tools.setDataValue(ivElem, id);  
    var bVal = Tools.getDataValue(bElem); 
    /*
    if (this.lang == 'en'){
      bVal += ' (Invoice-no.: ' + id + ')';
    } 
    if (this.lang == 'de'){
      bVal += ' (Rechnungsnr.: ' + id + ')';
    } 
    if (this.lang == 'fr'){
      bVal += ' (Invoice-no.: ' + id + ')';
    } 
    if (this.lang == 'it'){
      bVal += ' (Invoice-no.: ' + id + ')';
    } */
    bVal += ' (Rechnungsnr.: ' + id + ')';
    Tools.setDataValue(bElem, bVal);  
  }  
  
  return true;
}

//**************************************************************************

ShoppingBasket.prototype.getPriceTotal = function() {
  var cash = 0;
  for (var i=0; i<this.itemList.length; i++) {
      var item = this.itemList[i];
      cash += parseFloat(item.price);
  }
  return ShoppingBasket.formatCash(cash, this.lang);
}

//**************************************************************************

ShoppingBasket.prototype.shoppingStep1 = function() {
  this._setShoppingStep(1);
  this.setTrain();
  this.printShoppingTable();
  this.printShippingForm();
  this.setShippingForm();
}

//**************************************************************************

ShoppingBasket.prototype.shoppingStep2 = function() {
  this._setShoppingStep(2);
  this.setTrain();
  this.printShoppingTable();
  this.printShippingDetail();
  var elemForm = document.getElementById('__SHOPPING_SHIPPING_FORM__');
  elemForm.style.display = 'block';
}

//**************************************************************************

ShoppingBasket.prototype.shoppingStep3 = function() {
  this._setShoppingStep(3);
  this.setTrain();
  this.printShoppingTable();
  var elemForm = document.getElementById('__SHOPPING_SHIPPING_FORM__');
  elemForm.style.display = 'none';
}    

//**************************************************************************

ShoppingBasket.prototype.shoppingStep4 = function() {
  this._setShoppingStep(4);
  this.setTrain();
  var id = this.id;
  var func = function() {
    ShoppingBasket.getInstance(id).deleteAllItem();
  }
  this.printShoppingTable(func);
}

//**************************************************************************

ShoppingBasket._increment = [];
ShoppingBasket._registerInstance = {};
ShoppingBasket._registerInstanceLength = [];
ShoppingBasket.itemMaxLength = 1000;            
ShoppingBasket.timeout = undefined;

//**************************************************************************

ShoppingBasket.formatCash = function(n, lang) {
  if (arguments.length < 1) {
    focus();
    throw new Error("ShoppingBasket->formatCash: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  var rounded = parseFloat(Math.round(n * 100) / 100);
  var cash = rounded.toString();
  if (! cash.match(/\./)) {
    if (lang != 'en') {
      cash += ',00';
    } else {
      cash += '.00';
    }
  } else {
    var rightval = cash.split(/\./)[1];
    if (rightval.length < 2) {
      cash += '0';
    }
    if (lang != 'en') {
      cash = cash.replace(/\./,',');
    }
  }
  return cash;
}

//**************************************************************************
        
ShoppingBasket.getLangTranslation = function(str, lang){
  if (arguments.length < 1) {
    focus();
    throw new Error("ShoppingBasket->getLangTranslation: Falsche Anzahl von Argumenten!");
  }  
  if (! lang) {
    lang = 'en';
  }
  var item = {};
  item['en'] = {};
  item['fr'] = {};
  item['de'] = {};
  item['it'] = {}; 
  
  item['en']['shopping'] = 'Order';
  item['fr']['shopping'] = 'Order';
  item['de']['shopping'] = 'Einkauf';
  item['it']['shopping'] = 'Order'; 
  
  item['en']['confirm_shopping'] = 'Confirm<br />order';
  item['fr']['confirm_shopping'] = 'Confirmer<br />l\'order';
  item['de']['confirm_shopping'] = 'Einkauf<br />bestätigen';
  item['it']['confirm_shopping'] = 'Confirm<br />order'; 
  
  item['en']['payment_head'] = 'Payment';
  item['fr']['payment_head'] = 'Paiement';
  item['de']['payment_head'] = 'Zahlung';
  item['it']['payment_head'] = 'Paga'; 
  
  item['en']['shopping_complete'] = 'Complete<br />payment';
  item['fr']['shopping_complete'] = 'Conclure<br />Paiement';
  item['de']['shopping_complete'] = 'Einkauf<br />ausführen';
  item['it']['shopping_complete'] = 'Complete<br />payment'; 
  
  item['en']['no.'] = 'No.';
  item['fr']['no.'] = 'No';
  item['de']['no.'] = 'Nr.';
  item['it']['no.'] = 'No'; 
  
  item['en']['quantity'] = 'Quantity';
  item['fr']['quantity'] = 'Quantity';
  item['de']['quantity'] = 'Anzahl';
  item['it']['quantity'] = 'Quantity'; 
  
  item['en']['article'] = 'Item';
  item['fr']['article'] = 'Article';
  item['de']['article'] = 'Artikel';
  item['it']['article'] = 'Item'; 
  
  item['en']['price'] = 'Price';
  item['fr']['price'] = 'Prix';
  item['de']['price'] = 'Preis';
  item['it']['price'] = 'Prix'; 
  
  item['en']['total'] = 'Total';
  item['fr']['total'] = 'Total';
  item['de']['total'] = 'Gesamt';
  item['it']['total'] = 'Total'; 
  
  item['en']['delete'] = 'Delete';
  item['fr']['delete'] = 'Delete';
  item['de']['delete'] = 'Löschen';
  item['it']['delete'] = 'Delete'; 
  
  item['en']['listHasValue'] = 'The Article has been added to your shopping basket before.';
  item['fr']['listHasValue'] = 'The Article has been added to your shopping basket before.';
  item['de']['listHasValue'] = 'Der Artikel befindet sich bereits in Ihrem Warenkorb.';
  item['it']['listHasValue'] = 'The Article has been added to your shopping basket before.'; 
  
  item['en']['db_created'] = 'Shopping basket created';
  item['fr']['db_created'] = 'Shopping basket created';
  item['de']['db_created'] = 'Warenkorb eröffnet';
  item['it']['db_created'] = 'Shopping basket created'; 
  
  item['en']['salutation'] = 'Salutation';
  item['fr']['salutation'] = 'Titre';
  item['de']['salutation'] = 'Anrede';
  item['it']['salutation'] = 'Titolo';
  
  item['en']['male'] = 'Mr.';
  item['fr']['male'] = 'Monsieur';
  item['de']['male'] = 'Herr';
  item['it']['male'] = 'Signor';
  
  item['en']['female'] = 'Mrs.';
  item['fr']['female'] = 'Madame';
  item['de']['female'] = 'Frau';
  item['it']['female'] = 'Signora';
  
  item['en']['first_name'] = 'First name';
  item['fr']['first_name'] = 'Prénome';
  item['de']['first_name'] = 'Vorname';
  item['it']['first_name'] = 'Prenome';
  
  item['en']['name'] = 'Surname';
  item['fr']['name'] = 'Nom';
  item['de']['name'] = 'Name';
  item['it']['name'] = 'Nome';
  
  item['en']['title'] = 'Title';
  item['fr']['title'] = 'Titre';
  item['de']['title'] = 'Titel';
  item['it']['title'] = 'Titolo';
  
  item['en']['organisation'] = 'Organisation';
  item['fr']['organisation'] = 'Entreprise/Institution';
  item['de']['organisation'] = 'Firma';
  item['it']['organisation'] = 'Società';
  
  item['en']['street_nr'] = 'Street/No';
  item['fr']['street_nr'] = 'Rue/numéro';
  item['de']['street_nr'] = 'Straße/Nr.';
  item['it']['street_nr'] = 'Via/civico';
  
  item['en']['city_zip'] = 'Postcode/City';
  item['fr']['city_zip'] = 'Code postale/Village';
  item['de']['city_zip'] = 'PLZ/Ort';
  item['it']['city_zip'] = 'Codice postale/Città';
  
  item['en']['country'] = 'Country';
  item['fr']['country'] = 'Pays';
  item['de']['country'] = 'Land';
  item['it']['country'] = 'Paese';
  
  item['en']['phone'] = 'Telephone';
  item['fr']['phone'] = 'Téléphone';
  item['de']['phone'] = 'Telefon';
  item['it']['phone'] = 'Telefono';
  
  item['en']['fax'] = 'Fax';
  item['fr']['fax'] = 'Télécopie';
  item['de']['fax'] = 'Fax';
  item['it']['fax'] = 'Fax';
  
  item['en']['mail'] = 'E-Mail';
  item['fr']['mail'] = 'E-mail';
  item['de']['mail'] = 'E-Mail';
  item['it']['mail'] = 'E-Mail';
  
  item['en']['comment'] = 'Comment';
  item['fr']['comment'] = 'Comment';
  item['de']['comment'] = 'Mitteilung';
  item['it']['comment'] = 'Comment';                                  
  
  item['en']['payment'] = 'Payment by Invoice';
  item['fr']['payment'] = 'Paiement sur facture';    
  item['de']['payment'] = 'Zahlung per Rechnung';
  item['it']['payment'] = 'Payment by Invoice';    
  
  item['en']['back'] = 'Back to previous step';
  item['fr']['back'] = 'Page précédente';
  //item['de']['back'] = 'Zurück zum letzten Schritt';
  item['de']['back'] = 'Zurück';
  item['it']['back'] = 'Back to previous step';                                        
  
  item['en']['forw'] = 'Continue to next step';
  item['fr']['forw'] = 'Continuer';
  //item['de']['forw'] = 'Weiter zum nächsten Schritt';     
  item['de']['forw'] = 'Weiter';
  item['it']['forw'] = 'Continue to next step';                         
  
  item['en']['submit'] = 'Submit';
  item['fr']['submit'] = 'Submit';    
  item['de']['submit'] = 'Senden';
  item['it']['submit'] = 'Submit';                              
  
  item['en']['item_added'] = 'The Article has been added to your shopping basket';
  item['fr']['item_added'] = 'The Article has been added to your shopping basket';    
  item['de']['item_added'] = 'Der Artikel wurde Ihrem Warenkorb hinzugefügt.';
  item['it']['item_added'] = 'The Article has been added to your shopping basket';                       
  
  item['en']['system_alert_button'] = 'Close';
  item['fr']['system_alert_button'] = 'Close';    
  item['de']['system_alert_button'] = 'Hinweis schließen';
  item['it']['system_alert_button'] = 'Close';                                
  
  item['en']['item_updated'] = 'The Order-quantity has been updated in your shopping basket';
  item['fr']['item_updated'] = 'The Order-quantity has been updated in your shopping basket';    
  item['de']['item_updated'] = 'Die Bestellmenge wurde aktualisiert';
  item['it']['item_updated'] = 'The Order-quantity has been updated in your shopping basket';                                   
  
  item['en']['item_deleted'] = 'The Article has been deleted from your shopping basket';
  item['fr']['item_deleted'] = 'The Article has been deleted from your shopping basket';    
  item['de']['item_deleted'] = 'Der Artikel wurde aus Ihrem Warenkorb entfernt.';
  item['it']['item_deleted'] = 'The Article has been deleted from your shopping basket';                                               
  
  item['en']['shipping'] = 'Shipping';
  item['fr']['shipping'] = 'Shipping';    
  item['de']['shipping'] = 'Versand';
  item['it']['shipping'] = 'Shipping';                                  
  
  item['en']['vat'] = 'VAT';
  item['fr']['vat'] = 'VAT';    
  item['de']['vat'] = 'MwSt.';
  item['it']['vat'] = 'VAT';    
  
  
  if (! (item[lang] && item[lang][str])) {
    return '';
  }
  return item[lang][str];
} 

//**************************************************************************

ShoppingBasket.setCapture = function() {
  captcha = Captcha.createInstance();
  captcha.setFormIdx('VerbindlichKaufen');
  Captcha._documentHasLoad = true;
  var cImg = document.getElementById('_CAPTCHA_IMAGE_');
  if (cImg) {
    cImg.id = cImg.id +''+ captcha.id;
  }
  captcha.drawCaptchaImage();
  return false;
}

//**************************************************************************

ShoppingBasket.formatNumber = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasket->formatNumber: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  return n;
}       

//**************************************************************************

ShoppingBasket.displayAlert = function(err){
  var err_str = 'Die Aktion wurd durchgeführt ';
  var txt = ShoppingBasket.getLangTranslation(err, this.lang);
  if (txt.length) {
    err_str = txt;
  } else if (err.length) {
    err_str = err;
  }
  var elem = document.getElementById('__GLOBAL_SYSTEM_ALERT_ELEMENT__');
  if (! elem) {
    elem = document.createElement('div');
    elem.setAttribute('id','__GLOBAL_SYSTEM_ALERT_ELEMENT__');
    if (IE6 || IE7) {
      elem.setAttribute('className','gloabl-system-alert');
    } else {
      elem.setAttribute('class','gloabl-system-alert');
    }
    elem.setAttribute('style','visibility: hidden;');
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(elem);
  }
  elem.style.display = 'block';
  var html = '<div class="gloabl-system-alert-inner">';
  html += '<div class="gloabl-system-alert-inner-text">';
  html += err_str;
  html += '<div class="float-aufheben"><br /></div>';
  html += '</div>';
  html += '<div class="gloabl-system-alert-inner-button">';
  html += '<a href="javascript: void(0);" onclick="ShoppingBasket.hideAlert();">';
  html += ShoppingBasket.getLangTranslation('system_alert_button', this.lang);
  html += '</a>';
  html += '<div class="float-aufheben"><br /></div>';
  html += '</div>';
  html += '<div class="float-aufheben"><br /></div>';
  html += '</div>';
  elem.innerHTML = html;  
  var top = 0;
  top = Tools.getScreenHeight();
  top = top - Tools.getElementHeight(elem);
  top = top/2;
  top += Tools.getScrollPositionTop();
  top - 100;
  if (navigator.userAgent.toString().match(/Opera/)) {
      top -= 150;
  }
  elem.style.top = top + 'px';
  var left = parseFloat(1095 / 2);
  left -= parseFloat(Tools.getElementWidth(elem)/2);
  elem.style.left = left + 'px';
  var h = Tools.getElementHeight(elem);
  var w = Tools.getElementWidth(elem);
  elem.style.width = '1px';
  elem.style.height = '1px';
  elem.style.visibility = 'visible';
  ShoppingBasket.slideAlert(elem , w, h);
}       

//**************************************************************************

ShoppingBasket.slideAlert = function(elem, w, h){
  var fast = 0;
  var diff_h = 20;
  var diff_w = 20;
  if (ShoppingBasket.timeout) {
    window.clearTimeout(ShoppingBasket.timeout);
  }
  if (! elem) {
    return;
  }
  var eH = Tools.getElementHeight(elem);
  var eW = Tools.getElementWidth(elem);
  if (eH >= h && eW >= w) {
    return;
  }   
  if (eH < h) {
    if (h - eH < diff_h) {
      diff_h = parseFloat(h - eH);
    }
    elem.style.height = parseFloat(parseFloat(elem.style.height) + diff_h) + 'px';
  }      
  if (eW < w) {
    if (w - eW < diff_w) {
      diff_w = parseFloat(w - eW);
    }
    elem.style.width = parseFloat(parseFloat(elem.style.width) + diff_w) + 'px';
  }
  var func = function () {
    ShoppingBasket.slideAlert(elem, w, h);
  }
  ShoppingBasket.timeout = window.setTimeout(func, fast);
}

//**************************************************************************

ShoppingBasket.hideAlert = function(){
  var elem = document.getElementById('__GLOBAL_SYSTEM_ALERT_ELEMENT__');
  if (! elem) {
    return;
  }
  elem.style.display = 'none';
}

//**************************************************************************
        
ShoppingBasket.stripSpace = function(str){
  var result = '';
  if (str){
    str = new String(str);
    result = str.replace(/^\s+/,'');
    result = result.replace(/\s+$/,'');
  }
  return result;
}

//**************************************************************************
        
ShoppingBasket.init = function(id){
  var shopping = ShoppingBasket.getInstance(id);
  shopping.shoppingStep1();
}    

//**************************************************************************
        
ShoppingBasket.finish = function(id){
  var shopping = ShoppingBasket.getInstance(id);
  shopping.shoppingStep4();
}

//**************************************************************************
  
ShoppingBasket.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasket.Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasket._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasket.Instance mit id=" + id + " registriert!");
  }
  return ShoppingBasket._registerInstance[id];
}

//**************************************************************************

ShoppingBasket.createInstance = function(id) {
  if (!arguments.length) {
    id = 'ShoppingBasket' + ShoppingBasket._increment.length;
    ShoppingBasket._increment.push(1);
  }
  if (! (ShoppingBasket._registerInstance[id])){
    ShoppingBasket._registerInstance[id] = new ShoppingBasket(id);
    ShoppingBasket._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("ShoppingBasket.createInstance: id schon vorhanden!");
  }
  return ShoppingBasket.getInstance(id);
}

//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************

function ShoppingBasketItem(id) {
  this.id = undefined;
  this.title = '';               
  this.subTitle = '';           
  this.category = '';           
  this.type = '';           
  this.price = '';        
  this.lang = '';     
  this.articleNumber = '';
  this.articleId = '';
  this.year = '';
  this.dbProp = '';
  
  this._setId(id);
}

//**************************************************************************

ShoppingBasketItem.prototype._setId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->_setId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->_setId: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}         

//**************************************************************************

ShoppingBasketItem.prototype.setPrice = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setPrice: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.replace(/\,/,'.');
    n = parseFloat(n);
  }
  this.price = n;
}               

//**************************************************************************

ShoppingBasketItem.prototype.setPriceNative = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setPriceNative: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = parseFloat(n);
  }
  this.price = n;
}    

//**************************************************************************

ShoppingBasketItem.prototype.setTitle = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setTitle: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setTitle: Argument str ist nicht vom Typ String!");
  }
  this.title = str;
}  

//**************************************************************************

ShoppingBasketItem.prototype.setSubTitle = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setSubTitle: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setSubTitle: Argument str ist nicht vom Typ String!");
  }
  this.subTitle = str;
}

//**************************************************************************

ShoppingBasketItem.prototype.setArticleNumber = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setArticleNumber: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setArticleNumber: Argument str ist nicht vom Typ String!");
  }
  this.articleNumber = str;
}

//**************************************************************************

ShoppingBasketItem.prototype.setArticleId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setArticleId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setArticleId: Argument str ist nicht vom Typ String!");
  }
  this.articleId = str;
}

//**************************************************************************

ShoppingBasketItem.prototype.setCategory = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setCategory: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setCategory: Argument str ist nicht vom Typ String!");
  }
  this.category = str;
}

//**************************************************************************

ShoppingBasketItem.prototype.setType = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setType: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setType: Argument str ist nicht vom Typ String!");
  }
  this.type = str;
}

//**************************************************************************

ShoppingBasketItem.prototype.setYear = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setYear: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = parseFloat(n);
  }
  this.year = n;
}    

//**************************************************************************

ShoppingBasketItem.prototype.setLang = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketItem->setLang: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketItem->setLang: Argument str ist nicht vom Typ String!");
  }
  this.lang = str;
}   

//**************************************************************************

ShoppingBasketItem.prototype.setDBProperties = function() {
  if (! ShoppingBasketDataBaseItem) {
    focus();
    throw new Error("ShoppingBasketItem->setDBProperties: Klasse ShoppingBasketDataBaseItem nicht geladen!");
  }
  var dbProp = ShoppingBasketDataBaseItem.getInstanceByContent(this.articleId);
  this.dbProp = dbProp;
}

//**************************************************************************

ShoppingBasketItem._increment = [];
ShoppingBasketItem._registerInstance = {};
ShoppingBasketItem._registerInstanceLength = [];

//**************************************************************************

ShoppingBasketItem.deleteInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketItem.deleteInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketItem._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketItem.Instance mit id=" + id + " registriert!");
  }
  delete ShoppingBasketItem._registerInstance[id];
  for (var i=0; i<ShoppingBasketItem._registerInstanceLength.length; i++) {
    if (ShoppingBasketItem._registerInstanceLength[i] != id) {
      continue;
    }
    ShoppingBasketItem._registerInstanceLength.splice(i, 1);
    break;
  }
}

//**************************************************************************
  
ShoppingBasketItem.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketItem.getInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketItem._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketItem.Instance mit id=" + id + " registriert!");
  }
  return ShoppingBasketItem._registerInstance[id];
}

//**************************************************************************

ShoppingBasketItem.createInstance = function(id) {
  if (!arguments.length) {
    id = 'ShoppingBasketItem' + ShoppingBasketItem._increment.length;
    ShoppingBasketItem._increment.push(1);
  }
  if (! (ShoppingBasketItem._registerInstance[id])){
    ShoppingBasketItem._registerInstance[id] = new ShoppingBasketItem(id);
    ShoppingBasketItem._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("ShoppingBasketItem.createInstance: id schon vorhanden!");
  }
  return ShoppingBasketItem.getInstance(id);
}

//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************

function ShoppingBasketDataBase(id) {
  this.id = undefined;
  this.itemList = [];    
  this.lang = "en";
  this.itemListName = 'myShoppingBasket';
  this.urlprefix = '';
  this._setId(id);
  this._loadItemList();
  this.itemListMaxLenght = 150;
}

//**************************************************************************

ShoppingBasketDataBase.prototype._setId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->_setId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->_setId: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}                              

//**************************************************************************

ShoppingBasketDataBase.prototype._loadItemList = function() {
  if (! (Tools && Tools.setCookieValue)) {
    focus();
    throw new Error("ShoppingBasketDataBase->loadItemList: Bitte das Modul Tools laden!");
  }
  var name = this.itemListName;  
  var val = Tools.getCookieValue(name);
  //alert(val);
  if (! val.length) {
    return;
  }
  var arr = val.split(/\,/);
  var list = [];
  for (var i=0; i<arr.length; i++) {
    var peer = arr[i].split(/\:/);
    var item = ShoppingBasketDataBaseItem.createInstance();
    item.setContent(peer[0]);  
    item.setQuantity(peer[1]);  
    var d = peer[2];  
    if (! d) {
      d = ShoppingBasketDataBase._createSetDate();
    }
    item.setSetDate(d);
    if (peer[3]) { 
      item.setPrice(peer[3]);  
    }
    list.push(item);
  }
  this.itemList = list;
  return true;
}                       

//**************************************************************************

ShoppingBasketDataBase.prototype._itemListToDBString = function() {
  var str = '';
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    var cont = item.content;
    var quant = item.quantity;
    var price = item.price;
    var setDate = item.setDate;
    str += cont + ':' + quant + ':' + setDate + ':' + price;
    if (i < this.itemList.length -1) {
     str += ',';
    }
  }
  return str;
}                      

//**************************************************************************

ShoppingBasketDataBase.prototype._createSetDate = function() {
  var date = new Date();
  var y = date.getFullYear();
  var m = date.getMonth();
  m++;
  if (m < 10) {
    m = '0' + m;
  }
  var d = date.getDate();
  if (d < 10) {
    d = '0' + d;
  }
  var str = y + '' + m + '' + d;
  return str;
}                                 

//**************************************************************************

ShoppingBasketDataBase.prototype._itemListHasValue = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->_itemListHasValue: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->_itemListHasValue: Argument str ist nicht vom Typ String!");
  }
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    if (str != item.content) {
      continue;
    }
    return true;
  }
  return false;
}                   

//**************************************************************************

ShoppingBasketDataBase.prototype.setLang = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->setLang: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->setLang: Argument str ist nicht vom Typ String!");
  }
  this.lang = str;
}                                  

//**************************************************************************

ShoppingBasketDataBase.prototype.setURLPrefix = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->setURLPrefix: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->setURLPrefix: Argument str ist nicht vom Typ String!");
  }
  this.urlprefix = str;
}                             

//**************************************************************************

ShoppingBasketDataBase.prototype.addItemList = function(str, quant, price) {
  if (arguments.length < 2) {
    focus();
    throw new Error("ShoppingBasketDataBase->addItemList: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->addItemList: Argument str ist nicht vom Typ String!");
  }
  if (! str.length) {
    return;
  }
  if (this.itemList.length >= this.itemListMaxLenght) {
    var txt = 'Sie können nur maximal " + this.itemListMaxLenght + " verschiedene Artikel in Ihrem Warenkorb aufnehmen.';
    ShoppingBasket.displayAlert(txt);    
    return;
  }
  if (this._itemListHasValue(str)) {
    ShoppingBasket.displayAlert('listHasValue');   
    return;
  }
  var item = ShoppingBasketDataBaseItem.createInstance();
  item.setContent(str);          
  item.setQuantity(quant);
  if (price.length) {
    item.setPrice(price);
  }
  item.setSetDate(ShoppingBasketDataBase._createSetDate());
  this.itemList.push(item);
  this.saveItemList();
  this.setPreviewItemList();
  ShoppingBasket.displayAlert('item_added');
}                                    

//**************************************************************************

ShoppingBasketDataBase.prototype._getItemIdxById = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->_getItemIdxById: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->_getItemIdxById: Argument str ist nicht vom Typ String!");
  }
  if (! str.length) {
    return;
  }
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];    
    if (item.content  != str) {
      continue;
    }    
    return idx;
  } 
  return undefined;
}                                              

//**************************************************************************

ShoppingBasketDataBase.prototype._getItemQuantities = function() {
  var quant = 0;
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    quant += parseFloat(item.quantity);
  }
  return quant;
}                                                

//**************************************************************************

ShoppingBasketDataBase.prototype.deleteItemList = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBase->deleteItemList: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBase->deleteItemList: Argument str ist nicht vom Typ String!");
  }
  if (! str.length) {
    return;
  }
  var idx = this._getItemIdxById(str);
  if (idx != undefined) {
    this.itemList.splice(idx, 1);
  }
  this.saveItemList();
  this.setPreviewItemList();
  this.showItemlist();
}                                     

//**************************************************************************

ShoppingBasketDataBase.prototype.showItemlist = function() {
  if (! this.urlprefix) {
    return;
  }
  var url = this.urlprefix;
  var templ = 'shop_de';
  if (this.lang == 'en') {
    templ = 'shop_en';
  }
  if (this.lang == 'fr') {
    templ = 'shop_fr';
  }
  if (this.lang == 'it') {
    templ = 'shop_it';
  }
  url += '&_sprache=' + templ;
  url += '&_sortierung=titel_asc';
  url += '&_seitenlaenge=' + this.itemListMaxLenght;
  if (! this.itemList.length) {
    url += '&_status=neu';
  }
  for (var i=0;i<this.itemList.length;i++) {
    var item = this.itemList[i];
    url += '&idartikel=';
    url += item.content;
  }
  window.location = url;
}                             

//**************************************************************************

ShoppingBasketDataBase.prototype.setPreviewItemList = function() {
  var elem = document.getElementById('__SB_ITEMLIST_PREVIEW_PAGES__');
  if (! elem) {
    return;
  }
  var post_fix = 'Artikel';
  if (this.lang != 'de') {
    post_fix = 'articles';
  }
  var res = this._getItemQuantities();
  elem.innerHTML = res + ' ' + post_fix;
}              

//**************************************************************************

ShoppingBasketDataBase.prototype.saveItemList = function() {
  if (! (Tools && Tools.setCookieValue)) {
    focus();
    throw new Error("ShoppingBasketDataBase->saveItemList: Bitte das Modul Tools laden!");
  }
  var name = this.itemListName;  
  var val = this._itemListToDBString(); 
  var date = new Date();
  var days365 = (1000 * 60 * 60 * 24 * 365);
  date = new Date(new Date().setTime(date.getTime() + days365));
  //alert(date);
  // mit Datum in einem Jahr
  Tools.setCookieValue(val, name, date);
} 

//**************************************************************************

ShoppingBasketDataBase.prototype.getEarliestDate = function() {
  var date = new Date();   
  var y = date.getFullYear();
  var m = date.getMonth();
  m++;
  if (m < 10) {
    m = '0' + m;
  }
  var d = date.getDate();
  if (d < 10) {
    d = '0' + d;
  }
  var res = y + '' + m + '' + d;
  for (var i=0; i<this.itemList.length; i++) {
    var item = this.itemList[i];
    if (item.setDate >= res) {
      continue;
    }
    res = item.setDate;
  }
  return res;
}

//**************************************************************************

ShoppingBasketDataBase._increment = [];
ShoppingBasketDataBase._registerInstance = {};
ShoppingBasketDataBase._registerInstanceLength = [];           

//**************************************************************************

ShoppingBasketDataBase._createSetDate = function() {
  var date = new Date();
  var y = date.getFullYear();
  var m = date.getMonth();
  m++;
  if (m < 10) {
    m = '0' + m;
  }
  var d = date.getDate();
  if (d < 10) {
    d = '0' + d;
  }
  var str = y + '' + m + '' + d;
  return str;
}    

//**************************************************************************

ShoppingBasketDataBase.getSetDate = function(str) {  
  var date = '';
  var item = ShoppingBasketDataBaseItem.getInstanceByContent(str);
  if (item) {
    date = item.setDate;
    date = date.substring(6,8) + '.' +date.substring(4,6)+ '.' + date.substring(0,4);
  }
  return date; 
}

//**************************************************************************
  
ShoppingBasketDataBase.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketDataBase.getInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketDataBase._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketDataBase.Instance mit id=" + id + " registriert!");
  }
  return ShoppingBasketDataBase._registerInstance[id];
}

//**************************************************************************

ShoppingBasketDataBase.createInstance = function(id) {
  if (!arguments.length) {
    id = 'ShoppingBasketDataBase' + ShoppingBasketDataBase._increment.length;
    ShoppingBasketDataBase._increment.push(1);
  }
  if (! (ShoppingBasketDataBase._registerInstance[id])){
    ShoppingBasketDataBase._registerInstance[id] = new ShoppingBasketDataBase(id);
    ShoppingBasketDataBase._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("ShoppingBasketDataBase.createInstance: id schon vorhanden!");
  }
  return ShoppingBasketDataBase.getInstance(id);
}

//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************

function ShoppingBasketDataBaseItem(id) {
  this.id = undefined;
  this.content = '';
  this.setDate = '';
  this.quantity = '';
  this.price = '';
  this._setId(id);
}

//**************************************************************************

ShoppingBasketDataBaseItem.prototype._setId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->_setId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->_setId: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}             

//**************************************************************************

ShoppingBasketDataBaseItem.prototype.setContent = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setContent: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setContent: Argument str ist nicht vom Typ String!");
  }
  this.content = str;
}                

//**************************************************************************

ShoppingBasketDataBaseItem.prototype.setSetDate = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setSetDate: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setSetDate: Argument str ist nicht vom Typ String!");
  }
  this.setDate = str;
}          

//**************************************************************************

ShoppingBasketDataBaseItem.prototype.setQuantity = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setQuantity: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = parseFloat(n);
  }
  this.quantity = n;
}                  

//**************************************************************************

ShoppingBasketDataBaseItem.prototype.setPrice = function(n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketDataBaseItem->setPrice: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != "number") {
    n = ShoppingBasket.stripSpace(n);
    n = n.toString().replace(/\./,'');
    n = n.toString().replace(/\,/,'.');
    n = parseFloat(n);
  }
  this.price = n;
}           

//**************************************************************************

ShoppingBasketDataBaseItem._increment = [];
ShoppingBasketDataBaseItem._registerInstance = {};
ShoppingBasketDataBaseItem._registerInstanceLength = []; 

//**************************************************************************
  
ShoppingBasketDataBaseItem.deleteInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketDataBaseItem.deleteInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketDataBaseItem._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketDataBaseItem.Instance mit id=" + id + " registriert!");
  }
  delete ShoppingBasketDataBaseItem._registerInstance[id];
  for (var i=0; i<ShoppingBasketDataBaseItem._registerInstanceLength.length; i++) {
    if (ShoppingBasketDataBaseItem._registerInstanceLength[i] != id) {
      continue;
    }
    ShoppingBasketDataBaseItem._registerInstanceLength.splice(i, 1);
    break;
  }
} 

//**************************************************************************

ShoppingBasketDataBaseItem.getInstanceByContent = function(str) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketDataBaseItem.getInstanceByContent: Falsche Anzahl von Argumenten!");
  }    
  for (var i in ShoppingBasketDataBaseItem._registerInstance) {
    if (ShoppingBasketDataBaseItem._registerInstance[i].content != str) {
      continue;
    }
    return ShoppingBasketDataBaseItem._registerInstance[i];
  }
  return undefined;
}  

//**************************************************************************
  
ShoppingBasketDataBaseItem.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketDataBaseItem.Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketDataBaseItem._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketDataBaseItem.Instance mit id=" + id + " registriert!");
  }
  return ShoppingBasketDataBaseItem._registerInstance[id];
}

//**************************************************************************

ShoppingBasketDataBaseItem.createInstance = function(id) {
  if (!arguments.length) {
    id = 'ShoppingBasketDataBase' + ShoppingBasketDataBaseItem._increment.length;
    ShoppingBasketDataBaseItem._increment.push(1);
  }
  if (! (ShoppingBasketDataBaseItem._registerInstance[id])){
    ShoppingBasketDataBaseItem._registerInstance[id] = new ShoppingBasketDataBaseItem(id);
    ShoppingBasketDataBaseItem._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("ShoppingBasketDataBaseItem.createInstance: id schon vorhanden!");
  }
  return ShoppingBasketDataBaseItem.getInstance(id);
}

//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************
//**************************************************************************

function ShoppingBasketShipping(id) {
  this.id = undefined;         
  this.dbName = 'myShoppingBasketShipping'; 
  this.organisation = '';  
  this.name = '';
  this.first_name = '';
  this.title = '';            
  this.salutation = '';      
  this.street = '';    
  this.nr = ''; 
  this.zip = ''; 
  this.city = '';
  this.country = '';
  this.telephone = '';
  this.telefax = '';
  this.email = '';
  this.comment = '';
  
  this._setId(id);
  this._loadShipping();
}

//**************************************************************************

ShoppingBasketShipping.prototype._setId = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->_setId: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->_setId: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}                  

//**************************************************************************

ShoppingBasketShipping.prototype.setComment = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setComment: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setComment: Argument str ist nicht vom Typ String!");
  }
  this.comment = str;
}               

//**************************************************************************

ShoppingBasketShipping.prototype.setEmail = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setEmail: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setEmail: Argument str ist nicht vom Typ String!");
  }
  this.email = str;
}                       

//**************************************************************************

ShoppingBasketShipping.prototype.setTelefax = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setTelephone: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setTelephone: Argument str ist nicht vom Typ String!");
  }
  this.telefax = str;
}                       

//**************************************************************************

ShoppingBasketShipping.prototype.setTelephone = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setTelephone: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setTelephone: Argument str ist nicht vom Typ String!");
  }
  this.telephone = str;
}                    

//**************************************************************************

ShoppingBasketShipping.prototype.setCity = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setCity: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setCity: Argument str ist nicht vom Typ String!");
  }
  this.city = str;
}                       

//**************************************************************************

ShoppingBasketShipping.prototype.setZip = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setZip: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setZip: Argument str ist nicht vom Typ String!");
  }
  this.zip = str;
}                  

//**************************************************************************

ShoppingBasketShipping.prototype.setNr = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setNr: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setNr: Argument str ist nicht vom Typ String!");
  }
  this.nr = str;
}                          

//**************************************************************************

ShoppingBasketShipping.prototype.setStreet = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setStreet: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setStreet: Argument str ist nicht vom Typ String!");
  }
  this.street = str;
}                 

//**************************************************************************

ShoppingBasketShipping.prototype.setSalutation = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setSalutation: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setSalutation: Argument str ist nicht vom Typ String!");
  }
  this.salutation = str;
}                  

//**************************************************************************

ShoppingBasketShipping.prototype.setTitle = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setTitle: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setTitle: Argument str ist nicht vom Typ String!");
  }
  this.title = str;
}             

//**************************************************************************

ShoppingBasketShipping.prototype.setFirstName = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setFirstName: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setFirstName: Argument str ist nicht vom Typ String!");
  }
  this.first_name = str;
}                    

//**************************************************************************

ShoppingBasketShipping.prototype.setName = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setName: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setName: Argument str ist nicht vom Typ String!");
  }
  this.name = str;
}               

//**************************************************************************

ShoppingBasketShipping.prototype.setOrganisation = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setOrganisation: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setOrganisation: Argument str ist nicht vom Typ String!");
  }
  this.organisation = str;
}                             

//**************************************************************************

ShoppingBasketShipping.prototype.setCountry = function(str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("ShoppingBasketShipping->setCountry: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("ShoppingBasketShipping->setCountry: Argument str ist nicht vom Typ String!");
  }
  this.country = str;
}                            

//**************************************************************************

ShoppingBasketShipping.prototype._shippingToDBString = function() {
  var str = '';
  str += ShoppingBasketShipping.escapeDBString(this.organisation) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.name) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.first_name) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.title) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.salutation) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.street) + ':';  
  str += ShoppingBasketShipping.escapeDBString(this.nr) + ':';  
  str += ShoppingBasketShipping.escapeDBString(this.zip) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.city) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.country) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.telephone) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.telefax) + ':'; 
  str += ShoppingBasketShipping.escapeDBString(this.email); 
  return str;
}                                

//**************************************************************************

ShoppingBasketShipping.prototype._loadShipping = function() {
  if (! (Tools && Tools.setCookieValue)) {
    focus();
    throw new Error("ShoppingBasketShipping->_loadShipping: Bitte das Modul Tools laden!");
  }
  var name = this.dbName;  
  var val = Tools.getCookieValue(name);
  if (! val.length) {
    return;
  }
  var arr = val.split(/\:/);
  var str = arr[0];
  if (str && str.length) {
    this.setOrganisation(str);
  }
  str= arr[1];
  if (str && str.length) {
    this.setName(str);
  }
  str= arr[2];
  if (str && str.length) {
    this.setFirstName(str);
  }
  str= arr[3];
  if (str && str.length) {
    this.setTitle(str); 
  }
  str= arr[4];
  if (str && str.length) {
    this.setSalutation(str);
  }
  str= arr[5];
  if (str && str.length) {
    this.setStreet(str);
  }
  str= arr[6];
  if (str && str.length) {
    this.setNr(str);
  }
  str= arr[7];
  if (str && str.length) {
    this.setZip(str);
  }
  str= arr[8];
  if (str && str.length) {
    this.setCity(str); 
  }
  str= arr[9];
  if (str && str.length) {
     this.setCountry(str);
  }
  str= arr[10];
  if (str && str.length) {
    this.setTelephone(str);
  }
  str= arr[11];
  if (str && str.length) {
    this.setTelefax(str);
  }
  str= arr[12];
  if (str && str.length) {
    this.setEmail(str);
  }  
  return true;
}                                

//**************************************************************************

ShoppingBasketShipping.prototype.saveShipping = function() {
  if (! (Tools && Tools.setCookieValue)) {
    focus();
    throw new Error("ShoppingBasketShipping->saveShipping: Bitte das Modul Tools laden!");
  }
  var name = this.dbName; 
  var val = this._shippingToDBString();
  var date = new Date();
  var days365 = (1000 * 60 * 60 * 24 * 365);
  date = new Date(new Date().setTime(date.getTime() + days365));
  //alert(date);
  // mit Datum in einem Jahr
  Tools.setCookieValue(val, name, date);
}     

//**************************************************************************

ShoppingBasketShipping._increment = [];
ShoppingBasketShipping._registerInstance = {};
ShoppingBasketShipping._registerInstanceLength = []; 

//**************************************************************************   

ShoppingBasketShipping.escapeDBString = function(str) {
  str = str.replace(/\;/gi,'');
  return str;
}                           

//**************************************************************************
  
ShoppingBasketShipping.deleteInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketShipping.deleteInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketShipping._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketShipping.Instance mit id=" + id + " registriert!");
  }
  delete ShoppingBasketShipping._registerInstance[id];
  for (var i=0; i<ShoppingBasketShipping._registerInstanceLength.length; i++) {
    if (ShoppingBasketShipping._registerInstanceLength[i] != id) {
      continue;
    }
    ShoppingBasketShipping._registerInstanceLength.splice(i, 1);
    break;
  }
} 

//**************************************************************************

ShoppingBasketShipping.getInstanceByContent = function(str) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketShipping.getInstanceByContent: Falsche Anzahl von Argumenten!");
  }    
  for (var i in ShoppingBasketShipping._registerInstance) {
    if (ShoppingBasketShipping._registerInstance[i].content != str) {
      continue;
    }
    return ShoppingBasketShipping._registerInstance[i];
  }
  return undefined;
}  

//**************************************************************************
  
ShoppingBasketShipping.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("ShoppingBasketShipping.Falsche Anzahl von Argumenten!");
  }
  if (! (ShoppingBasketShipping._registerInstance[id])){
    focus();
    throw new Error("Es ist keine ShoppingBasketShipping.Instance mit id=" + id + " registriert!");
  }
  return ShoppingBasketShipping._registerInstance[id];
}

//**************************************************************************

ShoppingBasketShipping.createInstance = function(id) {
  if (!arguments.length) {
    id = 'ShoppingBasketDataBase' + ShoppingBasketShipping._increment.length;
    ShoppingBasketShipping._increment.push(1);
  }
  if (! (ShoppingBasketShipping._registerInstance[id])){
    ShoppingBasketShipping._registerInstance[id] = new ShoppingBasketShipping(id);
    ShoppingBasketShipping._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("ShoppingBasketShipping.createInstance: id schon vorhanden!");
  }
  return ShoppingBasketShipping.getInstance(id);
}

//**************************************************************************

