//alert(number_format);
if (typeof number_format != 'function') {
  //console.info("asd");
  function number_format(number, decimals, dec_point, thousands_sep) {
      // http://kevin.vanzonneveld.net
      // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
      // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
      // +     bugfix by: Michael White (http://getsprink.com)
      // +     bugfix by: Benjamin Lupton
      // +     bugfix by: Allan Jensen (http://www.winternet.no)
      // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
      // +     bugfix by: Howard Yeend
      // +    revised by: Luke Smith (http://lucassmith.name)
      // +     bugfix by: Diogo Resende
      // +     bugfix by: Rival
      // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
      // +   improved by: davook
      // +   improved by: Brett Zamir (http://brett-zamir.me)
      // +      input by: Jay Klehr
      // +   improved by: Brett Zamir (http://brett-zamir.me)
      // +      input by: Amir Habibi (http://www.residence-mixte.com/)
      // +     bugfix by: Brett Zamir (http://brett-zamir.me)
      // +   improved by: Theriault
      // *     example 1: number_format(1234.56);
      // *     returns 1: '1,235'
      // *     example 2: number_format(1234.56, 2, ',', ' ');
      // *     returns 2: '1 234,56'
      // *     example 3: number_format(1234.5678, 2, '.', '');
      // *     returns 3: '1234.57'
      // *     example 4: number_format(67, 2, ',', '.');
      // *     returns 4: '67,00'
      // *     example 5: number_format(1000);
      // *     returns 5: '1,000'
      // *     example 6: number_format(67.311, 2);
      // *     returns 6: '67.31'
      // *     example 7: number_format(1000.55, 1);
      // *     returns 7: '1,000.6'
      // *     example 8: number_format(67000, 5, ',', '.');
      // *     returns 8: '67.000,00000'
      // *     example 9: number_format(0.9, 0);
      // *     returns 9: '1'
      // *    example 10: number_format('1.20', 2);
      // *    returns 10: '1.20'
      // *    example 11: number_format('1.20', 4);
      // *    returns 11: '1.2000'
      // *    example 12: number_format('1.2000', 3);
      // *    returns 12: '1.200'
      var n = !isFinite(+number) ? 0 : +number,
          prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
          sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
          dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
          s = '',
          toFixedFix = function (n, prec) {
              var k = Math.pow(10, prec);
              return '' + Math.round(n * k) / k;
          };
      // Fix for IE parseFloat(0.55).toFixed(0) = 0;
      s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
      if (s[0].length > 3) {
          s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
      }
      if ((s[1] || '').length < prec) {
          s[1] = s[1] || '';
          s[1] += new Array(prec - s[1].length + 1).join('0');
      }
      return s.join(dec);
  }
}

var Webshop = Class.create({

  initialize: function() {
    var frm = $(arguments[0]) || false;
    if (frm) {
      frm.onsubmit = function() {
        return this.submit(frm);
      }.bind(this);
    }
  },

  submit: function(frm) {
    frm.request({
      parameters:'&xhr=true',
      onComplete: function(xml) {
        this.handleResponse(xml.responseText.evalJSON());
      }.bind(this)
    });
    return false;
  },

  handleResponse: function(json) {
    if (json['error']['msg']) {
      alert('Error number: '+json['error']['number']+'\n'+json['error']['msg']);
      return;
    }
    if (json['alert']['msg']) {
      alert(json['alert']['msg']);
      return;
    }
    if (json['message']['msg']) {
      alert(json['message']['msg']);
    }
    if (json['location']['href']) {
      window.location.href = json.location.href;
    }

    for (var x in json['basket']) {
      var pro = json['basket'][x];
      var qty = new Number(pro['qty']);
      var price = new Number(pro['price']);

      var nms = $$('input[name="p['+x+'][qty_dontadd]"]');
      for (var i = 0; i < nms.length; i++) {
        var n = $(nms[i]);
        var p = n.parentNode;
        p = p.parentNode;
        var ch = p.childNodes;
        for (var ii = 0; ii < ch.length; ii++) {
          var c = ch[ii];
          var cls = c.className;
          var clss = cls.split(" ");
          for (var iii = 0; iii < clss.length; iii++) {
            if (clss[iii] == 'webshop_basket_total') {

              var newPrice = "" + (qty * price);
              newPrice = number_format(newPrice, 2, ',', '.');
              //newPrice = newPrice.replace('.', '_');
              //newPrice = newPrice.replace(',', '.');
              //newPrice = newPrice.replace('_', ',');
              //newPrice = number_format(newPrice, 2, ',', '.');

              var splits = newPrice.split(',');
              if (splits[1]) {
                var spl = splits[1];
                if (spl.length === 1) {
                  newPrice += '0';
                }
              } else if (!splits[1]) {
                newPrice += ',00';
              }

              newPrice += ' DKK'; // Until we have a working currency object

              $(c).update(newPrice);
            }
          }
        }


        //n.up(element, expression, index)
      }
    }

    var tax = json['basket_total']['tax'];
    var price = json['basket_total']['total'];
    var price_for_goods = json['price_for_goods'];

    $('tax_updateable').innerHTML = tax;
    $('total_price_updateable').innerHTML = price;
    if ($('total_goods_price')) {
      $('total_goods_price').innerHTML = price_for_goods;
    }

  }

});


var delBasketRow = function() {
  var ele = $(arguments[0]) || false;
  if (!ele) return;
  var tr = ele.up('tr');
  var op = tr.hasClassName('webshop_basket_removed') || false;
  switch (op) {
    case false:
      ele.value = 0;
//      tr.setOpacity(.5);
      tr.addClassName('webshop_basket_removed');
      break;
    /*case true:
      ele.value = ele.defaultValue;
//      tr.setOpacity(1);
      tr.removeClassName('webshop_basket_removed');
      break;*/
  }
}

var addBasketAddress = function(qty,holder,key) {
  if (holder && qty) {
    holder = $(holder);
    qty = Number(qty);
    var skel = $('webshop_basket_address_skel');
    var cur_num = holder.childNodes.length;
    var qty_all = 0;
    $A(holder.childNodes).each(function(ele){
      var qty = $(ele).select('.webshop_tmp_qty')[0];
      qty_all += Number(qty.value);
    });
    if (qty_all < qty) {
      var rest = qty - qty_all;
      var n = holder.appendChild(skel.cloneNode(true));
      n.id = '';
      $(n).style.display = 'block';
      $(n).select('select').each(function(e){e.selectedIndex = 60})
      $(n).select('.webshop_tmp_qty')[0].value = rest;
      $(n).select('input').each(function(ele){
        var name = ele.name;
        ele.name = 'addresses['+key+']['+cur_num+']['+name+']';
      });
      $(n).select('select').each(function(ele){
        var name = ele.name;
        ele.name = 'addresses['+key+']['+cur_num+']['+name+']';
      });
    }
  }
}

var basketAddressCheck = function(ele) {
  ele = $(ele);
//  ele.disabled = true;
  var v = $F(ele);
  if (Number(v)) {
    var holder = ele.up('table').up('td');
    var max = $(holder.up('tr').previousSibling).select('.webshop_basket_table_qty')[0].value;
    var qty_all = 0;
    $(holder).select('.webshop_tmp_qty').each(function(ele){
      var qty = ele;
      qty_all += Number(qty.value);
    });
    if (qty_all > max) {
      ele.value = ele.value - 1;
      basketAddressCheck(ele);
      ele.focus();
    }
  }
  //ele.disabled = false;
  return false;
}

var addOne = function (el) {
  var v = el.value;
  v++;
  el.value = v;
}

var removeOne = function (el) {
  var v = el.value;
  v--;
  el.value = v;
}
