var ckCart = 'wnkCart';
var ckConf = 'config';
var shpSteps = 10;
var shpTime = 99;
var authCode = '';
var numerals;
var currency;
var cartAddTxt;
var shpLoggedInTpl;
var shpLoggedOutTpl;
var shpLoginTpl;
var shpPasswordTpl;
var shpUserData;
var checkDiscountTimeout;
var discountVoucher;

//inicjacja mini koszyka
function shpMiniCartInit() {
  var data;
  var text;
  try {
    data = getCookie(ckCart).split('|', 3);
    authCode = data[0];
    if(data[1] == 0)
      text = numerals[0];
    else
      text = data[1] + ' ' +
            (data[1] < 2
              ? numerals[data[1]]
              : data[1]%10 > 1 && data[1]%10 < 5 && (data[1]%100 > 20 || data[1]%100 < 10) ? numerals[2] : numerals[3]
            ) +
            '<br /><span>' + data[2].replace('.', ',') + (data[2].length > 1 && data[2].charAt(data[2].length - 2) == '.' ? '0' : '') + ' ' + currency + '</span>';
  } catch(ex) {
    text = numerals[0];
  }
  document.getElementById('miniCartOrder').innerHTML = text;
}

//dodawanie do koszyka, o-obiekt ikonki koszyka, id-identyfikator towaru, promo-identyfikator promocji (-1 uszkodzone)
function shpAddToCart(o, id, promo) {
  showInfoHourglass(o);
  coverPage();
  getCartObject().style.visibility = 'hidden';
  getCartObject().innerHTML = '';
  document.getElementById('cartPanel').className = '';
  advAJAX.get({
    url: '/sklep/page,dodaj_do_koszyka/index.html',
    parameters: {
      'id': id,
      'promo': promo
    },
    tag: o,
    onSuccess: function(obj) {
      if(obj.responseText == '-1') {
        advAJAX.get({
          url: '/sklep/page,dodaj_do_koszyka/index.html',
          parameters: {
            'id': obj.parameters.id,
            'promo': obj.parameters.promo,
            'ccv': 1
          },
          tag: o,
          onSuccess: function(obj) {
            finalizeAddToCart(obj.responseText, obj.tag);
          },
          onError: function(obj) {
            uncoverPage();
            hideInfo();
            alert('Błąd: ' + obj.status);
          }
        });
      } else {
        finalizeAddToCart(obj.responseText, obj.tag);
      }
    },
    onError: function(obj) {
      uncoverPage();
      hideInfo();
      alert('Błąd: ' + obj.status);
    }
  });
}

//finalizacja dodawania do koszyka
function finalizeAddToCart(at, o) {
  if(at != '') {
    hideInfo();
    alert(at);
    uncoverPage();
  } else {
    shpMiniCartInit();
    uncoverPage();
    showInfo(o, cartAddTxt);
    try {
      var config = getCookie(ckConf).split('|', 3);
      if(config[0].charAt(1) == '1')
        shpCartOpen(true);
    } catch(ex) {}
  }
}

//wyświetlanie i chowanie panelu logowania
function shpLogIn() {
  var o = document.getElementById('loginPanel');
  var oo = document.getElementById('sectionLogin');
  var t;
  if(o && oo) {
    if(oo.innerHTML) {
      t = oo.innerHTML;
      oo.innerHTML = '';
      o.className = 'login';
      o.innerHTML = t.replace(/ disabled="disabled"/g, '');
      document.forms['formLogin'].elements['login'].focus();
    } else {
      var l = document.forms['formLogin'].elements['login'].value;
      t = o.innerHTML;
      o.className = '';
      o.innerHTML = shpLoggedOutTpl;
      oo.innerHTML = t.replace('name="login"', 'name="login" value="' + l + '"');
    }
  }
}

//logowanie
function shpLogInSubmit(reload) {
  var f = document.forms['formShopLogin'];
  if(!f || !f.elements['login'].value || !f.elements['password'])
    f = document.forms['formLogin'];
  if(f.elements['login'].value && f.elements['password'].value) {
    coverPage();
    advAJAX.submit(f, {
      onSuccess: function(obj) {
        if(obj.responseText.substr(0,1) == 1) {
          if(reload != undefined) {
            window.location.reload();
          } else {
            var config = getCookie(ckConf).split('|', 3);
            if(config[0].charAt(0) == '1') {
              window.location = '/konto/page,moja_strona/index.html';
            } else {
              uncoverPage();
              document.getElementById('loginPanel').innerHTML = shpLoggedInTpl.replace('<login/>', obj.responseText.substr(1));
              document.getElementById('loginPanel').className = 'logged';
              shpMiniCartInit();
            }
          }
        } else {
          document.getElementById('loginPanel').className = '';
          document.getElementById('loginPanel').innerHTML = shpLoggedOutTpl;
          uncoverPage();
          shpLogIn();
          alert(obj.responseText.substr(1));
        }
      },
      onError: function(obj) {
        uncoverPage();
        alert('Błąd: ' + obj.status);
      }
    });
    shpLogIn();
    document.getElementById('loginPanel').innerHTML = '<div>&#160;</div>';
    document.getElementById('loginPanel').className = 'login hourglass';
  }
}

//wyświetlanie i chowanie panelu resetowania hasła
function shpResetPassword() {
  var o = document.getElementById('loginPanel');
  var oo = document.getElementById('sectionResetPassword');
  var t;
  if(o && oo) {
    if(oo.innerHTML) {
      t = oo.innerHTML;
      oo.innerHTML = '';
      o.className = 'password';
      o.innerHTML = t.replace(/ disabled="disabled"/g, '');
      document.forms['formResetPassword'].elements['login'].focus();
    } else {
      var l = document.forms['formLogin'].elements['login'].value;
      t = o.innerHTML;
      o.className = '';
      o.innerHTML = shpLoggedOutTpl;
      oo.innerHTML = t.replace('name="login"', 'name="login" value="' + l + '"');
    }
  }
}

//zmiana hasła
function shpResetPasswordSubmit(reload) {
  if(document.forms['formResetPassword'].elements['login'].value) {
    coverPage();
    advAJAX.submit(document.forms['formResetPassword'], {
      onSuccess: function(obj) {
        if(obj.responseText.substr(0,1) == 1 && reload) {
          window.location.reload();
        } else {
          document.getElementById('loginPanel').className = '';
          document.getElementById('loginPanel').innerHTML = shpLoggedOutTpl;
          uncoverPage();
          alert(obj.responseText.substr(1));
        }
      },
      onError: function(obj) { uncoverPage(); alert('Błąd: ' + obj.status); }
    });
    shpResetPassword();
    document.getElementById('loginPanel').innerHTML = '<div>&#160;</div>';
    document.getElementById('loginPanel').className = 'password hourglass';
  }
}

//wylogowanie
function shpLogOut() {
  document.getElementById('loginPanel').innerHTML = '<div>&#160;</div>';
  document.getElementById('loginPanel').className = 'hourglass';
  advAJAX.get ({
    url: '/konto/page,logowanie/index.html',
    onSuccess: function(obj) { 
      document.getElementById('loginPanel').className = '';
      document.getElementById('loginPanel').innerHTML = shpLoggedOutTpl;
      if(window.location.search.indexOf('page=moja_strona') > 0) {
        window.location = '/';
      } else {
        shpMiniCartInit();
        if(document.getElementById('cartPanel').className == 'opened')
          shpCartOpen();
      }
    },
    onError: function(obj) {
      alert('Błąd: ' + obj.status);
    }
  });
}

//otwieranie i zamykanie koszyka
function shpCartOpen(force, scrToCart) {
  var o = document.getElementById('cartPanel');
  var pos = getObjectPosition(o);
  var cart = getCartObject();
  try {
    if(scrToCart)
      scrollPageUpTo(pos.y);
    var data = getCookie(ckCart).split('|', 3);
    if(data[1] != 0 && (force || o.className != 'opened')) {
      o.className = 'opened';
      cart.style.left = (pos.x + o.offsetWidth-cart.offsetWidth) + 'px';
      cart.style.top = (pos.y + o.offsetHeight) + 'px';
        cart.innerHTML = '<div>&#160;</div>';
        cart.className = 'hourglass';
        cart.style.visibility = 'visible';
      advAJAX.get ({
        url: '/sklep/page,koszyk/index.html',
        tag: o,
        onSuccess: function(obj) {
          var data = getCookie(ckCart).split('|', 3);
          var cart = getCartObject();
          if(obj.responseText != '') {
            if(data[1] != 0) {
              cart.className = '';
              cart.innerHTML = obj.responseText;
              cart.style.visibility = 'visible';
            } else {
              obj.tag.className = '';
              cart.style.visibility = 'hidden';
            }
          }
          shpMiniCartInit();
        },
        onError: function(obj) { alert('Błąd: ' + obj.status); }
      });
    } else {
      cart.style.visibility = 'hidden';
      o.className = '';
    }
  } catch(ex) {}
}

//przygotowanie koszyka do aktualizacji (aktywacja przycisku)
function shpSetCartForUpdate(o) {
  if(isNaN(parseInt(o.value)))
    o.value = 0;
  else
    o.value = parseInt(o.value);
  try {
    getPreviousTag(o, 'input').value = '1';
  } catch(ex) {}
}

//wyczyszczenie koszyka
function shpClearCart() {
  var f = document.forms['formCart'];
  var data;
  for(var i = 0; i < f.elements.length; i++)
    if(f.elements[i].name == 'quantity[]') {
      f.elements[i].value = 0;
      try {
        getPreviousTag(f.elements[i], 'input').value = '1';
      } catch(ex) {}
    }
  data = getCookie(ckCart).split('|', 3);
  if(data[1] != 0)
    advAJAX.submit(document.forms['formCart'], {
      onSuccess: function(obj) {
        if(obj.responseText == '') {
          shpMiniCartInit();
          shpCartOpen(true);
        } else {
          alert(obj.responseText);
        }
      },
      onError: function(obj) { alert('Błąd: ' + obj.status); }
    });
}

//usunięcie wybranej pozycji z koszyka
function removeFromCart(o) {
  if(o.previousSibling && o.previousSibling.value) {
    o.previousSibling.value = 0;
    shpSetCartForUpdate(o.previousSibling);
    if(o.previousSibling.form.name == 'formOrderCart')
      o.previousSibling.form.submit();
    else
      shpUpdateCart();
  }
}

//aktualizacja koszyka lub przejście do kasy jeżeli bezparametrowo
function shpUpdateCart(gtc) {
  var data = getCookie(ckCart).split('|', 3);
  if(data[1] != 0) {
    advAJAX.submit(document.forms['formCart'], {
      onSuccess: function(obj) {
        if(obj.responseText == '') {
          if(gtc) {
            top.location.replace(document.forms['formCart'].buyURL.value);
          } else {
            shpMiniCartInit();
            shpCartOpen(true);
          }
        } else {
          var a = obj.responseText.split('|');
          for(var i = 0; i < a.length; i++)
            alert(a[i]);
        }
      },
      onError: function(obj) { alert('Błąd: ' + obj.status); }
    });
  }
}

//inicjalizacja formularza z kroku pierwszego
function shpUserDataInit() {
  shpFormFill(shpUserData, utilsFormShopCustomer.form);
  setFieldsClass(['formShopSect3', 'formShopSect5', 'formShopSect7', 'formShopSect8'], 'section');
  setFieldsClass(['formShopSect0', 'formShopSect1', 'formShopSect2', 'formShopSect4', 'formShopSect9'], 'hiddenValue');
  if(utilsFormShopCustomer.form.elements['addInvReceiver'].value == '') {
    setFieldsClass('formShopSect6', 'hiddenValue');
    setFieldsClass('invoiceAddressOn', 'extra');
    setFieldsClass('invoiceAddressOff', 'hiddenValue');
  } else {
    setFieldsClass('formShopSect6', 'section');
    setFieldsClass('invoiceAddressOn', 'hiddenValue');
    setFieldsClass('invoiceAddressOff', 'extra');
    }
}

//przenoszenie z selecta do pola nazwy
function selectToName(o) {
  if(o.options[o.selectedIndex].value < 0)
    try {
      o.form.elements[o.name+'Name'].value = o.options[o.selectedIndex].text;
    } catch(ex) {}
}

//wypełnia formularz formName danymi z data (nazwa pola, wartość pola)
function shpFormFill(data, f) {
  for(var i = 0; i < data.length-1; i+=2)
    try {
      if(f.elements[data[i]].nodeName && f.elements[data[i]].nodeName.toLowerCase() == 'select') {
        for(var j = 0; j < f.elements[data[i]].options.length; j++) {
          if(Math.abs(f.elements[data[i]].options[j].value) == data[i+1])
            f.elements[data[i]].options[j].selected = true;
        }
      } else if(f.elements[data[i]].length != undefined) {
        for(var j = 0; j < f.elements[data[i]].length; j++)
          if(f.elements[data[i]][j].value == data[i+1])
            f.elements[data[i]][j].click();
      } else {
        f.elements[data[i]].value = data[i+1];
      }
    } catch(ex) {}
}

//wybór formularza w kroku pierwszym zamówienia
function shpFormSectSet(o) {
  utilsFormShopCustomer.form.elements['act'].value = o.value;
  switch(o.value) {
    case 'login' :
      setFieldsClass('formShopSect1', 'section');
      setFieldsClass(['formShopSect2', 'formShopSect3', 'formShopSect4', 'formShopSect5', 'formShopSect6', 'formShopSect7', 'formShopSect8', 'formShopSect9'], 'hiddenValue');
      setFieldsClass('invoiceAddressOn', 'hiddenValue');
      setFieldsClass('invoiceAddressOff', 'hiddenValue');
      break;
    case 'new' :
      setFieldsClass(['formShopSect2', 'formShopSect3', 'formShopSect4', 'formShopSect5', 'formShopSect8'], 'section');
      setFieldsClass(['formShopSect1', 'formShopSect6', 'formShopSect7', 'formShopSect9'], 'hiddenValue');
      setFieldsClass('invoiceAddressOn', 'extra');
      setFieldsClass('invoiceAddressOff', 'hiddenValue');
      utilsFormShopCustomer.form.reset();
      break;
    case 'none' :
      setFieldsClass(['formShopSect3', 'formShopSect5', 'formShopSect8'], 'section');
      setFieldsClass(['formShopSect1', 'formShopSect2', 'formShopSect4', 'formShopSect6', 'formShopSect7', 'formShopSect9'], 'hiddenValue');
      setFieldsClass('invoiceAddressOn', 'extra');
      setFieldsClass('invoiceAddressOff', 'hiddenValue');
      utilsFormShopCustomer.form.reset();
      break;
  }
}

//wybór rodzaju klienta w formularzu zamówienia
function shpFormClientTypeSet(o) {
  if(o.value == 'i') {
    shpFormElementSet(['firstName', 'lastName'], true, true);
    shpFormElementSet(['nip', 'fax', 'orderer', 'companyName'], false);
    setFieldsClass('formShopSect4', document.getElementById('formShopSect2').className);
    setFieldsClass('formShopSect9', 'hiddenValue');
    if(!document.getElementById('discount_s'))
      setFieldsClass('formShopSect7', 'hiddenValue');
    try {
      document.getElementById('discount_20').checked = false;
      document.getElementById('discount_20').parentNode.className = 'hiddenValue';
    } catch(ex) {}
  } else {
    shpFormElementSet(['firstName', 'lastName'], false);
    shpFormElementSet(['nip', 'fax'], true, false);
    shpFormElementSet(['orderer', 'companyName'], true, true);
    setFieldsClass('formShopSect4', 'hiddenValue');
    switch(utilsFormShopCustomer.form.elements['act'].value) {
      case 'new':
        setFieldsClass('formShopSect7', 'section');
        setFieldsClass('formShopSect9', 'hiddenValue');
        break;
      case 'none':
        setFieldsClass('formShopSect7', 'hiddenValue');
        setFieldsClass('formShopSect9', 'section');
        break;
    }
    try {
      document.getElementById('discount_20').parentNode.className = 'valueList';
    } catch(ex) {}
  }
}

//zmiana na kupowanie z rejestracją
function changeToRegistration() {
  document.getElementById('act_2').checked = true;
  setFieldsClass(['formShopSect2', 'formShopSect7'], 'section');
  setFieldsClass('formShopSect9', 'hiddenValue');
}

//podawanie innego adresu faktury
function shpFormInvoiceAddressSet(s) {
  if(s) {
    setFieldsClass('invoiceAddressOn', 'hiddenValue');
    setFieldsClass('invoiceAddressOff', 'extra');
    setFieldsClass('formShopSect6', 'section');
  } else {
    setFieldsClass('invoiceAddressOn', 'extra');
    setFieldsClass('invoiceAddressOff', 'hiddenValue');
    setFieldsClass('formShopSect6', 'hiddenValue');
  }
}

//ukrywanie linii z wartością (i zdejmowanie obowiązkowości)
function shpFormElementSet(ns, d, ob, idx) {
  if(ns) {
    if(ns instanceof Array)
      true;
    else
      ns = [ns];
    for(var i = 0; i < ns.length; i++)
      utilsFormShopCustomer.form.elements[ns[i]].parentNode.parentNode.className = !d ? 'hiddenValue' : (ob ? 'obligatory' : 'optional');
  }
}

//validacja formularza z kroku pierwszego
function shpFormValidate(f, r) {
  var e;
  var lDiv;
  var sDiv;
  var err;
  var gErr = false;
  lDiv = shpFormGetLineDiv(f, 'userType');
  for(var i = 0; i < f.elements.length; i++) {
    e = f.elements[i];
    lDiv = shpFormGetLineDiv(f, e.name);
    if(lDiv != null)
      lDiv.className = lDiv.className.replace(' error', '');
  }
  for(var i = 0; i < f.elements.length; i++) {
    e = f.elements[i];
    if(f.elements[i].type == 'radio' || f.elements[i].type == 'checkbox') {
      if(f.elements[e.name].length == undefined || e == f.elements[e.name][0]) {
        lDiv = shpFormGetLineDiv(f, e.name);
        if(lDiv != null) {
          sDiv = getOuterTag(lDiv, 'div');
          if(sDiv != null && sDiv.className == 'formShopSect' && sDiv.style.visibility != 'hidden') {
            if(lDiv.className.indexOf(' obligatory') != -1) {
              err = true;
              if(f.elements[e.name].length == undefined) {
                if(e.checked)
                  err = false;
              } else {
                for(var j = 0; j < f.elements[e.name].length; j++)
                  if(f.elements[e.name][j].checked)
                    err = false;
              }
//              lDiv.className = lDiv.className.replace(' error', '');
              if(err) {
                gErr = true;
                lDiv.className = lDiv.className + ' error';
              }
            }
          }
        }
      }
    } else {
      lDiv = shpFormGetLineDiv(f, e.name);
      if(lDiv != null) {
        sDiv = getOuterTag(lDiv, 'div');
        if(sDiv != null && sDiv.className == 'formShopSect' && sDiv.style.visibility != 'hidden') {
          err = false;
          try {
            if(e.value != '' && !eval('check'+capitalize(e.name)+'(\''+e.value+'\')'))
              err = true;
          } catch(ex) {}
          try {
            if(e.value != '' && !eval(e.name+'RE').test(e.value))
              err = true;
          } catch(ex) {}
          try {
            if(e.name.indexOf('Retype') + 6 == e.name.length && e.value != f.elements[e.name.substr(0, e.name.length-6)].value)
              err = true;
          } catch(ex) {}
          if(lDiv.className.indexOf(' obligatory') != -1 && e.value == '')
            err = true;
//          lDiv.className = lDiv.className.replace(' error', '');
          if(err) {
            gErr = true;
            lDiv.className = lDiv.className + ' error';
          }
        }
      }
    }
  }
  if(gErr)
    alert('Niepoprawne dane w formularzu');
  if(r == undefined || !r) {
    if(!gErr)
      f.submit();
  } else {
    return !gErr;
  }
}

//validacja formularza zmiany hasła
function formChangePasswordValidate(f) {
  shpFormValidate(f);
}

//wykonanie ostatniego kroku formularza
function formShopFinalizeCommit() {
  var f = utilsFormShopFinalize.form;
  var e;
  var data = getCookie(ckCart).split('|', 3);
  if(data.length == 3) {
    if(f.elements['payment'].length) {
      for(var i = 0; i < f.elements['payment'].length; i++)
        if(f.elements['payment'][i].checked)
          e = paymentsParams[i*2+1];
    } else {
      if(f.elements['payment'].checked)
        e = paymentsParams[1];
    }
    if(e) {
      if(utilsFormShopFinalize.checkSimple()) {
        e = document.forms[e];
        try {
          e.elements[e.elements['nkShpParams'].value].value = data[0];
          if(f.elements['delivery'].length != undefined) {
            for(var i = 0; i < f.elements['delivery'].length; i++)
              if(f.elements['delivery'][i].checked)
                e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['delivery'][i].value;
          } else {
            if(f.elements['delivery'].checked)
              e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['delivery'].value;
          }
          if(f.elements['payment'].length != undefined) {
            for(var i = 0; i < f.elements['payment'].length; i++)
              if(f.elements['payment'][i].checked)
                e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['payment'][i].value;
          } else {
            if(f.elements['payment'].checked)
              e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['payment'].value;
          }
          e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['idBook'].value;
          e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['idPromo'].value;
          if(e.elements[e.elements['nkShpUrl'].value].value.substr(e.elements[e.elements['nkShpUrl'].value].value.length-1) == '=')
            e.elements[e.elements['nkShpUrl'].value].value += e.elements[e.elements['nkShpParams'].value].value;   //na wszelki wypadek parametry na twardo
          e.elements[e.elements['nkShpPrice'].value].value = document.getElementById('toPay').innerHTML.replace(',', '.');
        } catch(ex) {alert(ex);}
        e.submit();
      }
    } else {
      utilsFormShopFinalize.checkAndSubmit();
    }
  }
}

//validacja finalnego kroku formularza
function shpFormStepFinalValidate() {
  var data = getCookie(ckCart).split('|', 3);
  var f = document.forms['formFinalize'];
  var e = '';
  if(data.length == 3 && shpFormValidate(f, true)) {
    if(f.elements['payment'].length != undefined) {
      for(var i = 0; i < f.elements['payment'].length; i++)
        if(f.elements['payment'][i].checked)
          e = paymentsParams[i*2+1];
    } else {
      if(f.elements['payment'].checked)
        e = paymentsParams[1];
    }
    if(e == '') {
      f.submit();
    } else {  //pobranie informacji o dostawie i płatności przez formularz zewnętrzny
      e = document.forms[e];
      try {
        e.elements[e.elements['nkShpParams'].value].value = data[0];
        if(f.elements['delivery'].length != undefined) {
          for(var i = 0; i < f.elements['delivery'].length; i++)
            if(f.elements['delivery'][i].checked)
              e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['delivery'][i].value;
        } else {
          if(f.elements['delivery'].checked)
            e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['delivery'].value;
        }
        if(f.elements['payment'].length != undefined) {
          for(var i = 0; i < f.elements['payment'].length; i++)
            if(f.elements['payment'][i].checked)
              e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['payment'][i].value;
        } else {
          if(f.elements['payment'].checked)
            e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['payment'].value;
        }
        e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['idBook'].value;
        e.elements[e.elements['nkShpParams'].value].value += '|'+f.elements['idPromo'].value;
        if(e.elements[e.elements['nkShpUrl'].value].value.substr(e.elements[e.elements['nkShpUrl'].value].value.length-1) == '=')
          e.elements[e.elements['nkShpUrl'].value].value += e.elements[e.elements['nkShpParams'].value].value;   //na wszelki wypadek parametry na twardo
        e.elements[e.elements['nkShpPrice'].value].value = document.getElementById('toPay').innerHTML.replace(',', '.');
      } catch(ex) {alert(ex);}
      e.submit();
    }
  }
}

//przejście do kroku wyboru płatności
function shpFormGoStepPayment(b) {
  b.form.action = b.form.elements['nextURL'].value;
  b.form.submit();
}

//obsługa książki promocyjnej za wysokość zakupów
function shpUpdateToPayPromoBook(o, idPromo, price) {
  var f = document.forms['formShopFinalize'];
  var toPay = document.getElementById('toPay');
  var booksQuantity = document.getElementById('booksQuantity');
  if(f.elements['idBook'].value == o.value) {
    o.checked = false;
    toPay.innerHTML = booksPrice.toFixed(2).replace('.', ',');
    booksQuantity.innerHTML = (parseInt(booksQuantity.innerHTML)-1);
    f.elements['idBook'].value = '0';
    f.elements['idPromo'].value = '0';
    promoBookPrice = 0;
  } else {
    toPay.innerHTML = (booksPrice + price).toFixed(2).replace('.', ',');
    if(f.elements['idBook'].value == '0')
      booksQuantity.innerHTML = (parseInt(booksQuantity.innerHTML)+1);
    f.elements['idBook'].value = o.value;
    f.elements['idPromo'].value = idPromo;
    promoBookPrice = price;
  }
}

//aktualizacja ceny do zapłaty
function shpUpdateToPay(o) {
  var f = o.form;
  var es = f.elements;
  if(o.name == 'delivery') {
    if(delPay[o.value]) {
      for(var i = 0; i < es['payment'].length; i++) {
        if(payDel[es['payment'][i].value] == o.value) {
          es['payment'][i].parentNode.className = es['payment'][i].parentNode.className.replace(' undisplayed', '');
        } else {
          es['payment'][i].parentNode.className = es['payment'][i].parentNode.className.replace(' undisplayed', '') + ' undisplayed';
          es['payment'][i].checked = false;
        }
      }
    } else {
      for(var i = 0; i < es['payment'].length; i++) {
        if(payDel[es['payment'][i].value]) {
          es['payment'][i].parentNode.className = es['payment'][i].parentNode.className.replace(' undisplayed', '') + ' undisplayed';
          es['payment'][i].checked = false;
        } else {
          es['payment'][i].parentNode.className = es['payment'][i].parentNode.className.replace(' undisplayed', '');
        }
      }
    }
  }
  o = document.getElementById('toPay');
  var cost = 0;
  if(es['payment'].length != undefined) {
    for(var i = 0; i < es['payment'].length; i++)
      if(es['payment'][i].checked)
        cost += paymentsParams[i*2];
  } else {
    if(es['payment'].checked)
      cost += paymentsParams[0];
  }
  if(es['delivery'].length != undefined) {
    for(var i = 0; i < es['delivery'].length; i++)
      if(es['delivery'][i].checked) {
        if(deliveriesParams[2*i+1] < 0 || deliveriesParams[2*i+1] > booksPrice)
          cost += deliveriesParams[2*i];
        else
          cost = 0;
      }
  } else {
    if(es['delivery'].checked) {
      if(deliveriesParams[1] < 0 || deliveriesParams[1] > booksPrice)
        cost += deliveriesParams[0];
      else
        cost = 0;
    }
  }
  if(physicalBooksQuantity != 0 || promoBookPrice != 0) {
    cost = Math.floor((cost / (physicalBooksQuantity + (promoBookPrice == 0 ? 0 : 1))) * 100) / 100 * (physicalBooksQuantity + (promoBookPrice == 0 ? 0 : 1));
  }
  o.innerHTML = (booksPrice + cost + promoBookPrice).toFixed(2).replace('.', ',');
}

//pobranie obiektu koszyka
function getCartObject() {
  var o = document.getElementById('cart');
  if(!o) {
    o = document.createElement('div');
    o.id = 'cart';
    document.body.appendChild(o);
  }
  return o;
}

//zmiana kraju
function changeCountry(o) {
  var nm = o.name.replace('Country', '');
  if(o.options[o.selectedIndex].value == '-1') {
    eval(nm + 'PostalCodeRE = polishPostalCodeRE;');
  } else {
    eval(nm + 'PostalCodeRE = abroadPostalCodeRE;');
  }
}

//sprawdzanie kodu rabatowego
function checkDiscountVoucher(p) {
  if(checkDiscountTimeout) {
    clearTimeout(checkDiscountTimeout);
    checkDiscountTimeout = null;
  }
  var f = document.forms['formOrderCart'];
  if(f) {
    var dv = f.elements['discountVoucher'];
    if(dv) {
      if(p) {
        if(dv.value != discountVoucher) {
          dv.nextSibling.className = 'undisplayed';
          dv.nextSibling.nextSibling.innerHTML = '';
          dv.parentNode.getElementsByTagName('a')[0].className = '';
          discountVoucher = dv.value;
        }
        advAJAX.post ({
          url: '/page,sprawdzanie_kodu_rabatowego/index.html',
          parameters: {
            'discountVoucher': dv.value,
            'cartPrice': document.getElementById('cartPrice').innerHTML
          },
          tag: dv,
          onSuccess: function(obj) {
            obj.tag.nextSibling.className = obj.responseText.substr(0, 4) == '<1/>' ? 'btnBlue' : 'undisplayed';
            obj.tag.nextSibling.nextSibling.innerHTML = obj.responseText.replace(/<[01]\/>/, '');
            obj.tag.nextSibling.nextSibling.className = obj.responseText.substr(0, 4) == '<1/>' ? '' : 'invalid';
            obj.tag.parentNode.getElementsByTagName('a')[0].className = obj.responseText.substr(0, 4) == '<1/>' ? 'highlighted' : '';
          },
          onError: function(obj) {
            alert('Błąd: ' + obj.status);
          }
        });
      } else {
        checkDiscountTimeout = setTimeout('checkDiscountVoucher(true);', 1000);
      }
    } 
  }
}
