/*
* PRZESUWALNA LISTA ELEMENTOW
* W oparciu o jCarousel.
* @param o Object Lista opcji listy. Dostepne opcje opisane sa ponizej, wewnatrz opisu klasy (id, src, ...).
*/
ScrollList = function(o) {
 
 this.id = o.id; // Identyfikator bloku nadrzednego dla elementu UL, ktory ma zawierac liste. Identyfikator rozpoczyna sie od znaku '#'.
 this.src = o.src; // Adres wzgledem dokumentu XHTML do zrodla danych  dla listy.
 this.scroll = o.scroll != undefined ? o.scroll : 3; // Adres wzgledem dokumentu XHTML do zrodla danych  dla listy.
 this.nextName = o.nextName; // Nazwa klasy elementu, ktory ma sluzyc do przesuwania listy do przodu. Element ten musi miec wspolnego rodzica z UL.
 this.prevName = o.prevName; // Nazwa klasy elementu, ktory ma sluzyc do przesuwania listy do tylu. Element ten musi miec wspolnego rodzica z UL.
 this.vertical = (o.vertical != undefined && o.vertical) ? true : false; // Czy lista przesuwa sie w pionie, a nie w poziomie?
 
 //if (this.src && ($.browser.opera || $.browser.safari)) {
 // this.src = 'http://www.dopalacze.com/' + this.src;
 //}
 
 /*
 * INICJALIZACJA KARUZELI
 * Przypisanie akcji do elementow przesuwajacych liste.
 */
 this.init = function(carousel) {
  
  $(carousel.options.listObject.id + ' .' + carousel.options.listObject.prevName + ' a').bind('click', function() {
   carousel.prev();
   return false;
  });

  $(carousel.options.listObject.id + ' .' + carousel.options.listObject.nextName + ' a').bind('click', function() {
   carousel.next();
   return false;
  });
  
 };
 
 if (this.src != '') {
  
  $(this.id + ' ul').text('');
  
  /*
  * LADOWANIE NOWEGO ELEMENTU
  * Sprawdzenie, czy pozadane elementy sa juz zaladowane oraz ich doladowanie, jesli to konieczne.
  */
  this.itemLoad = function(carousel, state) {
   
   if (carousel.has(carousel.first, carousel.last)) { // Czy pozadane elementy juz istnieja w drzewie DOM?
    return;
   }
   $.get('http://www.dopalacze.com/' + carousel.options.listObject.src, {}, function(data) { // Pobierz dane i obrob je przy pomocy funkcji
    carousel.options.listObject.processOutput(carousel, carousel.first, carousel.last, data);
   });
   
  };
  
  /*
  * OBROBKA DANYCH ZRODLOWYCH
  * Przykladowa funkcja realizujaca ten proces - otrzymuje dane odczytane z pliku i wyciaga z nich wiersze, ktore maja zostac dodane do listy. Do zmiany wedle upodoban.
  */
  this.processOutput = function(carousel, first, last, data) {
   
   var items = data.split('|');
   for (i = first - 1; (i < last) && (i < items.length); i++) {
       carousel.add(i+1, items[i]);
   }
   carousel.size(items.length);
   
   this.updateTooltips(i + 1);
   
  };
  
  this.updateTooltips = function(i) {
   $(this.id + ' .tooltip, ' + this.id + ' .tooltip-before').each(function() {
    new CTooltip($(this));
   });
  };
  
 };
 
 // WYWOLANIE PROCEDURY TWORZENIA JCAROUSEL
 var carousel = $(this.id).jcarousel({
  initCallback: this.init,
  vertical: this.vertical,
  scroll: this.scroll,
  itemLoadCallback: {
   onBeforeAnimation: this.itemLoad,
   onAfterAnimation: null
  },
  buttonNextHTML: null,
  buttonPrevHTML: null,
  listObject : this
 });
 
};

/*
* TEXTFIELD
*/

function CTextfield(target) {
 
 this.m_iIndex = CTextfield.index++;
 CTextfield.instances[this.m_iIndex] = this;
 
 this.m_jTarget = target.parents('.field-text');
 this.m_jInput = target;
 this.m_sDefaultValue;
 
 this.Init = function() {
  
  this.m_jTarget.attr('id', 'textfield-' + this.m_iIndex);
  this.m_sDefaultValue = this.m_jTarget.find('label').text();
  if (this.m_jInput.val() == '') {
   this.m_jInput.val(this.m_sDefaultValue).focus(this.ClearValue);
  }
  
 };
 
 this.ClearValue = function() {
  var field = CTextfield.getInstance($(this));
  if ($(this).val() == field.m_sDefaultValue) {
   $(this).val('');
  }
 };
 
 this.Init();
 
};

CTextfield.index = 0;
CTextfield.instances = [];

CTextfield.getInstance = function(context) {
 return CTextfield.instances[context.parents('.field-text').eq(0).attr('id').substr(10)];
};


/*
* SELECT
*/

function CSelect(target, saveLabel, dontCopyLabel,redirect,defaultVal) {
 
 this.m_iIndex = CSelect.instances.push(this) - 1;
 
 this.m_jTarget = target.parents('.field-select');
 this.m_jSelect = target;
 this.m_jFake;
 this.m_jOptions;
 this.m_aOptions = [];
 this.m_bSaveLabel = (saveLabel != undefined) ? saveLabel : false;
 this.m_bCopyLabel = (dontCopyLabel != undefined) ? !dontCopyLabel : true;
 this.m_sDefaultValue = (defaultVal != undefined) ? defaultVal : '';
 this.m_bRedirect = (redirect != undefined) ? redirect : false;
 
 this.AcquireOptions = function() {
  
  var options = this.m_jSelect.find('option');
  for (var i = 0; i < options.length; i++) {
   this.m_aOptions.push({
    value: options.eq(i).attr('value'),
    caption: options.eq(i).text()
   });
   if (options.get(i).getAttribute('selected') == 'selected') {
    this.m_sDefaultValue = options.eq(i).text();
   }
  }
  
 };
 
 this.Init = function() {
  
  if (this.m_iIndex == 0) {
   $('body').append('<div id="fake-select-options"></div>');
  }
  
  this.AcquireOptions();
  
  this.m_jTarget.attr('id', 'fake-select-' + this.m_iIndex).addClass('fake-select-container').addClass(this.m_jTarget.find('span').attr('class'));
  
  this.m_jFake = $('<div></div>').addClass('fake-select');
  this.m_jFake.append($('<span>' + (this.m_sDefaultValue.length ? this.m_sDefaultValue : (this.m_bCopyLabel ? this.m_jTarget.find('label').text() : '...')) + '</span>').mousedown(this.ExtendOptions));
  this.m_jTarget.find('*').css('display', 'none');
  if (this.m_bSaveLabel) {
   this.m_jTarget.find('label').css('display', 'block');
  }
  this.m_jTarget.append(this.m_jFake);
  
  this.m_jOptions = $('<ul></ul>').attr('id', 'fake-sel-op-' + this.m_iIndex).addClass('fake-select-options-container').css('display', 'none');
  
  for (var i = 0; i < this.m_aOptions.length; i++) {
   var option = $('<li>' + this.m_aOptions[i].caption + '</li>').addClass('item-' + i).mouseup(this.ChooseOption);
   this.m_jOptions.append(option);
  }
  
  $('#fake-select-options').append(this.m_jOptions);
  
 };
 
 this.ExtendOptions = function() {
  if (!(this instanceof CSelect)) {
   return CSelect.getInstance($(this)).ExtendOptions();
  }
  if (this.m_jOptions.css('display') != 'none') {
   this.RetractOptions();
   return false;
  }
  document.onselectstart = function() {return false;};
  if (this.m_jOptions.height() < 300) {
   this.m_jOptions.removeClass('scrollable');
  }
  else {
   this.m_jOptions.addClass('scrollable');
  }
  this.m_jOptions.css('left', this.m_jFake.offset().left + ((navigator.oscpu && document.getElementsByClassName) ? 1 : 0)).css('top', this.m_jFake.offset().top + this.m_jFake.height()).css('width', this.m_jFake.width() + 8).slideDown('fast');
  return false;
 };
 
 this.RetractOptions = function() {
  document.onselectstart = function() {return true;};
  if (!(this instanceof CSelect)) {
   return CSelect.getInstance($(this)).RetractOptions();
  }
  this.m_jOptions.fadeOut(200);
  return false;
 };
 
 this.ChooseOption = function() {
  var select = CSelect.getInstance($(this));
  select.MakeChoice(CSelect.getClassValue($(this), 'item-'));
  select.RetractOptions();
  return false;
 };
 
 this.MakeChoice = function(choice) {
 
 if(this.m_bRedirect==true){
  window.location.href= this.m_aOptions[choice].value;
 }else{
  this.m_jSelect.val(this.m_aOptions[choice].value).change();
  this.m_jFake.find('span').text(this.m_aOptions[choice].caption);
 }
 
  
 };
 
 this.Init();
 
};

CSelect.instances = [];

CSelect.getInstance = function(context) {
 return CSelect.instances[context.parents('.fake-select-container, .fake-select-options-container').eq(0).attr('id').substr(12)];
};

CSelect.getClasses = function(context) {
 return context.attr('class').split(' ');
};

CSelect.getClassValue = function(context, needle) {
 var classes = CSelect.getClasses(context);
 for (var i = 0; i < classes.length; i++) {
  if (classes[i].substr(0, needle.length) == needle) {
   return classes[i].substr(needle.length);
  }
 }
};


/*
* SPINNER
*/

$(document).ready(function() {
 $('.field-spinner a').each(function() {
  if ($(this).hasClass('increment')) {
   $(this).click(function() {
    $(this).parent().find('input').val(parseInt($(this).parent().find('input').val()) + 1).change();
    return false;
   });
  }
  else {
   if ($(this).hasClass('decrement')) {
    $(this).click(function() {
     $(this).parent().find('input').val(Math.max(0, parseInt($(this).parent().find('input').val()) - 1)).change();
     return false;
    });
   }
  }
 });
});


/*
* CART PROTECTION EXTRA SAFE+
*/

$(document).ready(function() {
 
 $('form.product').submit(function() {
  if ($(this).find('option:selected:contains(\'Brak\')').length) {
    new CAlert('Aktualnie nie ma tego produktu.', 'Wybierz inne opakowanie lub zapach i spróbuj ponownie.', false, false);
    return false;
  }
  return true;
 });
 
  $('#payment_submit').click(function() {

  if($(":radio[@name='payment']:checked").length){
         $('#payment_form').submit();
  }else{
  new CAlert('', 'Wybierz formę płatno¶ci', false, false);
  
  }
  
       
  
  //}
 });
 
});

CDeadlineCountdown = function(target, deadline) {
 
 this.m_jTarget = target;
 var hourData = deadline.split(':');
 this.m_iDeadlineHour = hourData[0];
 this.m_iDeadlineMin = hourData[1];
 
 CDeadlineCountdown.target = this.m_jTarget;
 CDeadlineCountdown.deadline = deadline;
 
 CDeadlineCountdown.Update();
 
};

// Dni wolne:
CDeadlineCountdown.excludedDays = [
 '29.9.2008'
];

CDeadlineCountdown.target;
CDeadlineCountdown.deadline;

CDeadlineCountdown.Update = function() {
 
 var hourData = CDeadlineCountdown.deadline.split(':');
 
 var remainingHours = 0;
 var remainingMinutes = 0;
 var remainingSeconds = 0;
 
 var currentTime = new Date();

 if (currentTime.getHours() < hourData[0]) {
  var nextShipment = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate(), hourData[0], hourData[1], 0);
 }
 else {
  var nextShipment = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate() + 1, hourData[0], hourData[1], 0);
 }
 do {
  flag = false;
  var needle = nextShipment.getDate() + '.' + (nextShipment.getMonth() + 1) + '.' + nextShipment.getFullYear();
  if (nextShipment.getDay() == 0 || nextShipment.getDay() == 6) {
   flag = true;
  }
  else {
   for (var i = 0; i < CDeadlineCountdown.excludedDays.length; i++) {
    if (needle == CDeadlineCountdown.excludedDays[i]) {
     flag = true;
     break;
    }
   }
  }
  if (flag) {
   nextShipment = new Date(currentTime.getFullYear(), currentTime.getMonth(), nextShipment.getDate() + 1, hourData[0], hourData[1], 0);
  }
 } while (flag)
 
 var timeOffset = (nextShipment.getTime() - currentTime.getTime()) / (1000);
 
 remainingHours = Math.floor(timeOffset / 3600);
 timeOffset = timeOffset % 3600;
 remainingMinutes = Math.floor(timeOffset / 60);
 timeOffset = timeOffset % 60;
 remainingSeconds = Math.floor(timeOffset);
 
 CDeadlineCountdown.target.text(((remainingHours < 10) ? '0' + remainingHours : remainingHours) + 'h : ' + ((remainingMinutes < 10) ? '0' + remainingMinutes : remainingMinutes) + 'min : ' + ((remainingSeconds < 10) ? '0' + remainingSeconds : remainingSeconds) + 'sek');
 
 setTimeout(CDeadlineCountdown.Update, 1000);
 
};

function CNews(target) {
 
 target.children('li').each(function(i) {
  $(this).find('.heading').css('cursor', 'pointer').mouseover(function() {
   $(this).find('h3').css('text-decoration', 'underline');
  }).mouseout(function() {
   $(this).find('h3').css('text-decoration', 'none');
  }).click(function() {
   $(this).parents('li:first').find('.picture, .content').slideToggle('fast');
  // $(this).parents('ul:first').find('li .picture, li .content').slideUp('fast');
  // $(this).parents('li:first').find('.picture, .content').slideDown('fast');
  });
  if (i > 0) {
   $(this).find('.picture, .content').css('display', 'none');
  }
 });
 
};

function createCookie(name,value,days) {
       if (days) {
              var date = new Date();
              date.setTime(date.getTime()+(days*24*60*60*1000));
              var expires = "; expires="+date.toGMTString();
       }
       else {
  var expires = "";
 }
       document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name) {
       var nameEQ = name + "=";
       var ca = document.cookie.split(';');
       for(var i=0;i < ca.length;i++) {
              var c = ca[i];
              while (c.charAt(0)==' ') {
   c = c.substring(1,c.length);
  }
              if (c.indexOf(nameEQ) == 0) {
   return c.substring(nameEQ.length,c.length);
  }
       }
       return null;
};

function eraseCookie(name) {
       createCookie(name,"",-1);
};

$(document).ready(function() {
 
 function toggleHideableBox() {
  var block;
  if ($(this).hasClass('hideable')) {
   block = $(this);
  }
  else {
   block = $(this).parents('.hideable');
  }
  if (!block.length) {
   return;
  }
  if (block.hasClass('retracted')) {
   block.removeClass('retracted');
   expandHideableBox(block);
  }
  else {
   block.addClass('retracted');
   hideHideableBox(block);
  }
 };
 
 function expandHideableBox(block) {
  block.find('.expandHideableBox').attr('src', 'templates/new/img/icons/retract.png').attr('alt', 'Zwiń');
  createCookie('box-' + block.attr('id'), '1', 1);
  block.find('h2').css('margin-bottom', -20).css('padding-bottom', 20);
  if (document.all && !window.opera) {
   block.find('.expandableContent').removeClass('hidden2');
   block.css('min-height', 190);
   return;
  }
  block.find('.expandableContent').removeClass('hidden').css('display', 'none').slideDown('fast', function() {
   block.css('min-height', 190);
  });
 };
 
 function hideHideableBox(block) {
  block.find('.expandHideableBox').attr('src', 'templates/new/img/icons/expand.png').attr('alt', 'Rozwiń');
  createCookie('box-' + block.attr('id'), '0', 1);
  block.css('min-height', 0).find('h2').css('margin-bottom', 0).css('padding-bottom', 0);
  if (document.all && !window.opera) {
   block.find('.expandableContent').addClass('hidden2');
   return;
  }
  block.find('.expandableContent').slideUp('fast');
 };
 
 $('.hideable').each(function() {
  $(this).css('min-height', 0);
  $(this).find('h2').find('img').click(toggleHideableBox).css('cursor', 'pointer');
  $(this).children('div:not(.ending)').wrapAll($('<div></div>').addClass('expandableContent'));
  $(this).append(
   $('<img src="templates/new/img/icons/retract.png" alt="Rozwiń" title="Rozwiń"/>').addClass('expandHideableBox').css('position', 'absolute').css('padding', '0 4px').css('right', '7px').css('top', '17px').css('cursor', 'pointer').css('width', 8).css('height', 8).click(toggleHideableBox)
  );
  if (readCookie('box-' + $(this).attr('id')) == '0') {
   $(this).addClass('retracted').css('min-height', 0).find('h2').css('margin-bottom', 0).css('padding-bottom', 0);
   $(this).find('.expandHideableBox').attr('src', 'templates/new/img/icons/expand.png').attr('alt', 'Rozwiń');
   if (document.all && !window.opera) {
    $(this).find('.expandableContent').addClass('hidden2');
   }
   else {
    $(this).find('.expandableContent').addClass('hidden');
   }
  }
 });
});


/*
* ALERT
*/

function CAlert(title, message, ok, cancel) {
 
 this.m_sTitle = title;
 this.m_sMessage = message;
 this.m_cOk = ok;
 this.m_cCancel = cancel;
 
 CAlert.prototype.instances.push(this);
 
 this.create = function() {
  
  alert(this.m_sTitle + '\n' + this.m_sMessage);
  
  /*$('body').append('<div id="alert-overlay"><div class="alert" id="alert-' + (CAlert.prototype.instances.length - 1) + '"><div class="wnetrze"><h2>' + this.m_sTitle + '</h2><p>' + this.m_sMessage + '</p><p class="close"><a href="#"><img src="img/icons/ok.png" alt="OK"/></a>' + ((this.m_cCancel != false) ? ' <a class="cancel" href="#"><img src="img/icons/anuluj.png" alt="Anuluj"/></a>' : '') + '</p></div></div></div>');
  $('#alert-overlay').css('height', $(document).height() + 'px').find('.close a:first').click(function() {
   var id = $(this).parents('.alert').attr('id').split('-');
   CAlert.prototype.instances[id[1]].close();
   if (CAlert.prototype.instances[id[1]].m_cOk != false) CAlert.prototype.instances[id[1]].m_cOk();
   return false;
  }).parents('.alert').animate({marginTop: ($(window).scrollTop() + 200) + "px" }, {queue: false, duration: 500}).find('.close a.cancel').click(function() {
   var id = $(this).parents('.alert').attr('id').split('-');
   CAlert.prototype.instances[id[1]].close();
   if (CAlert.prototype.instances[id[1]].m_cFalse != false) CAlert.prototype.instances[id[1]].m_cCancel();
   return false;
  });
  $(window).scroll(function() {
   $('#alert-overlay .alert').animate({marginTop: ($(window).scrollTop() + 200) + "px" }, {queue: false, duration: 500});
  });*/
 };
 
 this.close = function() {
  $('#alert-overlay').fadeOut('fast', function() { $(this).remove() });
 };
 
 this.create();
 
};

CAlert.prototype.instances = new Array();


/*
* TOOLTIP
*/

function CTooltip(target, before) {
 
 this.m_iIndex = CTooltip.instances.push(this) - 1;
 
 this.m_jTarget = target;
 if (before) {
  this.m_jTrigger = target.prev();
 }
 else {
  this.m_jTrigger = target.parent();
 }
 
 this.m_sContent = '';
 
 this.Initialize = function() {
  
  if (!CTooltip.tooltipsInitialized) {
   this.CreateLayer();
  }
  this.m_sContent = this.m_jTarget.html();
  this.m_jTarget.remove();
  
  this.m_jTrigger.addClass('tooltip-trigger-' + this.m_iIndex).mouseover(this.ShowTooltip).mouseout(this.HideTooltip);
  $('body').mousemove(this.MoveTooltip);
  
 };
 
 this.CreateLayer = function() {
  $('body').append('<div id="tooltip"><div class="nw"><div class="ne"><div class="contents"></div></div></div><div class="sw"></div><div class="se"></div></div>');
  $('#tooltip').css('display', 'none');
  CTooltip.tooltipsInitialized = true;
 };
 
 this.MoveTooltip = function(e) {
  if (!CTooltip.visible) return;
  $('#tooltip').css('left', e.pageX - $('#tooltip').width()).css('top', e.pageY + 20);
 };
 
 this.ShowTooltip = function() {
  var tooltip = CTooltip.getInstance($(this));
  $('#tooltip .contents').html(tooltip.m_sContent);
  if (CTooltip.visible == 0) {
   CTooltip.visible = 1;
   //$('#tooltip').fadeIn(1, function() {  });
   $('#tooltip').css('display', 'block');
  }
 };
 
 this.HideTooltip = function() {
  CTooltip.visible = 0;
  //$('#tooltip').fadeOut(1, function() {  });
  $('#tooltip').css('display', 'none');
 };
 
 this.Initialize();
 
}

CTooltip.tooltipsInitialized = false;
CTooltip.visible = 0;
CTooltip.instances = [];
CTooltip.extractId = function(classString) {
 var classes = classString.split(' ');
 for (var i = 0; i < classes.length; i++) {
  if (classes[i].substr(0, 16) == 'tooltip-trigger-') {
   return classes[i].substr(16);
  }
 }
};
CTooltip.getInstance = function(context) {
 return CTooltip.instances[CTooltip.extractId(context.attr('class'))];
};

$(document).ready(function() {
 
 $('.tooltip').each(function() {
  new CTooltip($(this));
 });
 
 $('.tooltip-before').each(function() {
  new CTooltip($(this), true);
 });
 
});



/*
* VOTE
*/

function CVote(target, product) {
 
 // Funkcja VoteHandler() jest wywolywana, gdy uzytkownik zaglosuje na produkt. Parametry to:
 // - indentyfikator produktu - zgodny z tym, co zostalo podane jako klasa "vote-product-XYZ", czyli "XYZ";
 // - ocena - liczba calkowita oznaczajaca ocene wybrana przez uzytkownika.
 // Funkcja powinna zwracac nowa ocene dla danego produktu, po uwzglednieniu oceny wydanej przez uzytkownika.
 this.VoteHandler = function(product, grade) {
  alert('Zaglosowano na produkt: ' + product + '\nProponowana ocena: ' + grade);
  return grade;
 };
 
 this.m_iIndex = CVote.instances.push(this) - 1;
 
 this.m_jTarget = target;
 this.m_iDefaultGrade = 0;
 this.m_sProductId = product;
 this.m_bEnabled = true;
 this.m_iProposedGrade = 0;
 
 this.Initialize = function() {
  
  this.m_iDefaultGrade = parseInt(this.m_jTarget.find('img').attr('src').substr(this.m_jTarget.find('img').attr('src').lastIndexOf('-') + 1));
  this.m_jTarget.addClass('vote-id-' + this.m_iIndex).html(this.m_jTarget.find('img')).append('<span class="caption">' + this.m_iDefaultGrade + '/5</span>');
  this.m_jTarget.find('img').attr('src', 'img/icons/grades.png').css('height', 138).css('position', 'relative').css('top', - this.m_iDefaultGrade * 23).css('cursor', 'pointer').mousemove(this.ChangeGrade).mouseout(this.ResetGrade).click(this.Vote);
  
 };
 
 this.ChangeGrade = function(e) {
  var vote = CVote.getInstance($(this));
  if (!vote.m_bEnabled) return;
  vote.m_iProposedGrade = Math.ceil((e.clientX - vote.m_jTarget.find('img').offset().left) / 12);
  vote.m_jTarget.find('img').css('top', - 23 * vote.m_iProposedGrade);
 };
 
 this.ResetGrade = function() {
  var vote = CVote.getInstance($(this));
  vote.m_jTarget.find('img').css('top', - 23 * vote.m_iDefaultGrade);
 };
 
 this.Vote = function() {
  var vote = CVote.getInstance($(this));
  if (!vote.m_bEnabled) return;
  vote.m_bEnabled = false;
  vote.m_iDefaultGrade = vote.VoteHandler(vote.m_sProductId, vote.m_iProposedGrade);
  vote.m_jTarget.find('img').css('cursor', 'default').css('top', - 23 * vote.m_iDefaultGrade);
  vote.m_jTarget.find('.caption').text(vote.m_iDefaultGrade + '/5');
 };
 
 this.Initialize();
 
};

CVote.instances = [];
CVote.extractId = function(classString) {
 var classes = classString.split(' ');
 for (var i = 0; i < classes.length; i++) {
  if (classes[i].substr(0, 8) == 'vote-id-') {
   return classes[i].substr(8);
  }
 }
};
CVote.getInstance = function(context) {
 return CVote.instances[CVote.extractId(context.parents('.grade:first').attr('class'))];
};

$(document).ready(function() {
 
 $('.grade').each(function() {
  
  var classes = $(this).attr('class').split(' ');
  for (var i = 0; i < classes.length; i++) {
   if (classes[i].substr(0, 13) == 'vote-product-') {
    new CVote($(this), classes[i].substr(13));
   }
  }
  
 });
 
});


/*
* OFFER OF A MOMENT
*/

$(document).ready(function() {
 
 $('.offer-of-a-moment').find('h2').after($('<p class="close"><a href="#"><img src="img/icons/close.png" alt="(zamknij)"/></a></p>').click(function() {
  $(this).parents('.offer-of-a-moment').slideUp('fast');
  return false;
 }));
 
});


/*
* zoomBox - Bartek Bazyluk, 2008
*/

$(document).ready(function() {
 
 var zoomboxActive = false;
 var zoomboxThumbW = 0;
 var zoomboxThumbH = 0;
 var zoomboxOriginalW = 0;
 var zoomboxOriginalH = 0;
 var zoomboxMaxWidth = $(document).width() - 50;
 var zoomboxIndex = 0;
 
 function showZoombox(thumb)
 {
  
  var id = thumb.attr('id');
  var src = thumb.attr('href');
  var isFlash = thumb.hasClass('flash');
  var title;
  
  if (!isFlash) {
   title = thumb.find('img').attr('alt');
  }
  else {
   thumb = thumb.prev('div.flash');
  }
  
  if (zoomboxActive) {
   hideZoombox();
   return;
  }
  zoomboxActive = true;
  
  thumb.addClass('zoombox');
  thumb.append($('<div class="ladowanie"></div>'));
  thumb.css('opacity', '0.3');
  
  $('body').append($(''
   + '<div id="zoombox" style="visibility: hidden;">'
   + '<div class="e"></div>'
   + '<div class="n"></div>'
   + '<div class="s"></div>'
   + '<div class="w"></div>'
   + '<div class="ne"></div>'
   + '<div class="nw"></div>'
   + '<div class="se"></div>'
   + '<div class="sw"></div>'
   + (isFlash
       ? '<div id="zoomboxflashcontainer"><div id="zoomboxflash"></div></div><div class="opis"><a class="zamknij" href="#">Zamknij</a></div>'
      : '<img src="' + src + '" alt="Powiększenie: ' + title + '"/>' + '<div class="opis">' + title + '</div>'
   )
   + '</div>'
  +''));
  
  if (isFlash) {
   $('#zoombox #zoomboxflashcontainer').addClass(id);
   var o = thumb.offset();
   var offsetL = o.left - 10;
   var offsetT = o.top;
   zoomboxOriginalW = 650;
   zoomboxOriginalH = 650;
   if (zoomboxOriginalW > zoomboxMaxWidth) {
    var aspect = zoomboxOriginalW / zoomboxMaxWidth;
    zoomboxOriginalW = zoomboxMaxWidth;
    zoomboxOriginalH = zoomboxOriginalH / aspect;
   }
   zoomboxThumbW = thumb.width();
   zoomboxThumbH = thumb.height();
   $('#zoomboxflashcontainer').css('width', 650).css('height', 650).css('z-index', 10).css('display', 'none');
   var tOffsetT = Math.max(0, ($.browser.msie ? document.documentElement.scrollTop + (document.documentElement.offsetHeight - zoomboxOriginalH) / 2 : window.pageYOffset + (window.innerHeight - zoomboxOriginalH) / 2));
   $('#zoombox').css('left', offsetL + 'px').css('top', offsetT + 'px').css('width', zoomboxThumbW + 'px').css('height', zoomboxThumbH + 'px').css('opacity', '0.0').css('visibility', 'visible').animate({
    width: zoomboxOriginalW + 'px',
    height: zoomboxOriginalH + 'px',
    top: tOffsetT + 'px',
    left: ($('body').width() / 2 - zoomboxOriginalW / 2) + 'px',
    opacity: 2.0
   }, 400, 'linear', function() {
    $('#zoombox').css('height', 'auto').find('.opis').slideDown();
    $('#zoombox .zamknij').click(hideZoombox);
    $('#zoomboxflashcontainer').css('display', 'block');
    var myObject = swfobject.embedSWF(src, 'zoomboxflash', "650", "650", "9.0.0", "http://www.dopalacze.com/templates/new/data/expressInstall.swf", {}, { wmode:"opaque", bgcolor:"#000000", salign:"LT" }, {});
   });
   thumb.find('.ladowanie').remove();
  }
  else {
   $('#zoombox img').addClass(id).load(function() {
    var o = thumb.offset();
    var offsetL = o.left - 10;
    var offsetT = o.top;
    zoomboxOriginalW = $('#zoombox img').width();
    zoomboxOriginalH = $('#zoombox img').height();
    if (zoomboxOriginalW > zoomboxMaxWidth) {
     var aspect = zoomboxOriginalW / zoomboxMaxWidth;
     zoomboxOriginalW = zoomboxMaxWidth;
     zoomboxOriginalH = zoomboxOriginalH / aspect;
    }
    zoomboxThumbW = thumb.find('img').width();
    zoomboxThumbH = thumb.find('img').height();
    var tOffsetT = Math.max(0, ($.browser.msie ? document.documentElement.scrollTop + (document.documentElement.offsetHeight - zoomboxOriginalH) / 2 : window.pageYOffset + (window.innerHeight - zoomboxOriginalH) / 2));
    $('#zoombox img').css('width', '100%').css('height', '100%');
    $('#zoombox').css('left', offsetL + 'px').css('top', offsetT + 'px').css('width', zoomboxThumbW + 'px').css('height', zoomboxThumbH + 'px').css('opacity', '0.0').css('visibility', 'visible').animate({
     width: zoomboxOriginalW + 'px',
     height: zoomboxOriginalH + 'px',
     /*top: ($('body').height() / 2 - zoomboxOriginalH / 2) + 'px',*/
     top: tOffsetT + 'px',
     left: ($('body').width() / 2 - zoomboxOriginalW / 2) + 'px',
     opacity: 2.0
    }, 400, 'linear', function() { 
     $('#zoombox img').css('width', zoomboxOriginalW + 'px').css('height', zoomboxOriginalH + 'px');
     $('#zoombox').click(hideZoombox).css('height', 'auto').find('.opis').slideDown();
    });
    thumb.find('.ladowanie').remove();
   });
  }
  return false;
  
 };
 
 function hideZoombox()
 {
  var img = $('#zoombox img');
  if (img.length) {
   var o = $('#' + $('#zoombox img').attr('class')).offset();
   img.css('width', '100%').css('height', '100%');
  }
  else {
   var o = $('#' + $('#zoombox #zoomboxflashcontainer').attr('class')).prev('div.flash').offset();
   $('#zoombox #zoomboxflashcontainer').css('display', 'none');
  }
  var offsetL = o.left;
  var offsetT = o.top;
  $('#zoombox').css('height', zoomboxOriginalH + 'px').animate({
    width: zoomboxThumbW + 'px',
    height: zoomboxThumbH + 'px',
    left: offsetL + 'px',
    top: offsetT + 'px',
    opacity: 0.5
   }, 150, 'linear', function() {
    var img = $('#zoombox img');
    if (img.length) {
     $('#' + $('#zoombox img').attr('class') + ' img').css('opacity', '1.0');
    }
    else {
     $('#' + $('#zoombox #zoomboxflashcontainer').attr('class')).prev('div.flash').css('opacity', '1.0');
    }
    $('#zoombox').remove();
    zoomboxActive = false;
   });
   return false;
 };
 
 $('a.zoombox, .product .gallery a').each(function() {
  $(this).attr('id', 'zb' + (zoomboxIndex++)).click(function() {
   showZoombox($(this));
   return false;
  });
 });
 
});


/*
* CART
*/

function CCart(dataTable, summaryTable, pointsCurrent, pointsOrder, pointsTotal, pointsRemaining,pointsToUse,maxPoints) {
 
 this.m_iIndex = CCart.instances.push(this) - 1;
 
 this.m_jData = dataTable;
 this.m_jSummary = summaryTable;
 this.m_jPointsCurrent = pointsCurrent;
 this.m_jPointsOrder = pointsOrder;
 this.m_jPointsTotal = pointsTotal;
 this.m_jPointsRemaining = pointsRemaining;
 
 this.m_iDiscountIndex = 0;
 this.m_iCurrentPoints = 0;
 this.m_iOrderPoints = 0;
 this.m_iPointsToUse = pointsToUse;
 this.m_iMaxPointsToUse = maxPoints;
 
 // INICJALIZACJA
 this.Initialize = function() {
  
  this.m_jData.parent().addClass('cart-container').addClass('cart-id-' + this.m_iIndex);
  this.m_jData.find('tbody .qty input:text').change(this.UpdateRow).change();
  
  this.m_iCurrentPoints = parseInt(this.m_jPointsCurrent.text());

  // przygotowanie pokazywania formularza do wpisania kodu z kuponu
  this.m_jSummary.find('input.show-coupon-form').change(this.ShowCouponForm).get(0).checked = false;
  
  // przygotowanie obliczania wartosci punktow
  this.m_jSummary.find('input.use-all-points').change(this.TogglePointsUse).get(0).checked = false;
  
  this.m_jSummary.find('input.use-coupon').change(this.ToggleCouponUse).get(0).checked = false;
  // przygotowanie formularza kuponu
  this.m_jSummary.find('.coupon-form').css('display', 'none').find('.button input').click(this.UseCoupon);
  
 };
 
 this.ShowCouponForm = function() {
 
  if ($(this).get(0).checked){
  //alert('Dodane');
  $(this).parents('table:first').find('.coupon-form').show();
  }
  else {
  //alert('Skasowane');
  $(this).parents('table:first').find('.coupon-form').hide();
  $('.use-coupon').get(0).checked = false;
  CCart.getInstance($(this)).DeleteDiscount('kupon');
  }
 };
 
 this.TogglePointsUse = function() {
  var check = $('.use-all-points:checked').length;
  //var checked = $(this).parent().find('input:checked').length;
  //alert(check);
  if (check==1){
  //alert('Dodane');
  CCart.getInstance($(this)).UseAllPoints();
  }else{
  //alert('Skasowane');
  CCart.getInstance($(this)).UseNoPoints();
  }
 };
 
 this.ToggleCouponUse = function() {
  var check = $('.use-coupon:checked').length;
  if (!isNaN(parseFloat($('#coupon_value').text()))){
  //var checked = $(this).parent().find('input:checked').length;
  //alert(check);
  if (check==1){
  //alert('Dodane');
  CCart.getInstance($(this)).UseCoupon();
  }else{
  //alert('Skasowane');
  CCart.getInstance($(this)).DeleteCoupon();
  }
  }
 };
 
 // AKTUALIZACJA WIERSZA
 // Wymnozenie liczby produktow danego rodzaju z cena jednostkowa.
 this.UpdateRow = function() {
  
  var cart = CCart.getInstance($(this));
  var quantity = parseInt($(this).val());
  if (isNaN(quantity)) $(this).val(quantity = 0);
  var temp = new Array();
  temp = this.id.split('-');
  var pid = parseInt(temp[1]);
  if (pid == 532 && quantity > 1) {
       var pr1 = parseFloat($(this).parents('tr:first').find('.price>strong').text());
       var pr3 = 206.97;
       var pr5 = 339.95;
       var pr10 = 669.99;
       var q = quantity;
       var q10 = Math.floor(q/10);
       q = q - q10*10;
       var q5 = Math.floor(q/5);
       q = q - q5*5;
       var q3 = Math.floor(q/3);
       q = q - q3*3;
       q1 = q;
       var pricePerItem = (q10*pr10 + q5*pr5 + q3*pr3 + q1*pr1) / (q10*10+q5*5+q3*3+q1);
       var pointsPerItem = parseFloat($(this).parents('tr:first').find('.price .points strong').text());
       pointsPerItem = (pricePerItem / pr1) * pointsPerItem;
  }
  else {
       if (pid == 552 && quantity > 1) {
              var pr1 = parseFloat($(this).parents('tr:first').find('.price>strong').text());
              var pr3 = 266.97;
              var pr5 = 439.95;
              var pr10 = 869.90;
              var q = quantity;
              var q10 = Math.floor(q/10);
              q = q - q10*10;
              var q5 = Math.floor(q/5);
              q = q - q5*5;
              var q3 = Math.floor(q/3);
              q = q - q3*3;
              q1 = q;
              var pricePerItem = (q10*pr10 + q5*pr5 + q3*pr3 + q1*pr1) / (q10*10+q5*5+q3*3+q1);
              var pointsPerItem = parseFloat($(this).parents('tr:first').find('.price .points strong').text());
              pointsPerItem = (pricePerItem / pr1) * pointsPerItem;
       }
       else {
              var pricePerItem = parseFloat($(this).parents('tr:first').find('.price>strong').text());
              var pointsPerItem = parseFloat($(this).parents('tr:first').find('.price .points strong').text());
       }
  }
  
  
  var pointsPerItemToGet = parseFloat($(this).parents('tr:first').find('.price .points-to-get strong').text());
  var sum = quantity * pricePerItem;
  var points = quantity * pointsPerItem;
  var pointsToGet = quantity * pointsPerItemToGet;
  $(this).parents('tr:first').find('.sum>strong').text(sum.toFixed(2) + ' zł');
  $(this).parents('tr:first').find('.sum .points strong').text(Math.round(points) + ' pkt.');
  $(this).parents('tr:first').find('.sum .points-to-get strong').text(Math.round(pointsToGet) + ' pkt.');
  cart.UseNoPoints();
  $('.use-all-points').get(0).checked = false;
  cart.UpdateTotal();
  
 };
 
 // OBLICZENIE SUMY
 // Zsumowanie cen wszystkich produktow i uwzglednienie rabatow.
 this.UpdateTotal = function() {
      
  if (this instanceof CCart) var cart = this;
  else var cart = CCart.getInstance($(this));
  
  var prices = cart.m_jData.find('tbody .sum>strong');
  var points = cart.m_jData.find('tbody .sum .points strong');
  var points_to_get = cart.m_jData.find('tbody .sum .points-to-get strong');
 
  //var checked = $(this).parent().find('input:checked').length;
  
  var totalPrice = 0;
  var totalPoints = 0;
  var totalPointsToGet = 0;
  
  for (var i = 0; i < prices.length; i++) {
   totalPrice += parseFloat(prices.eq(i).text());
   totalPoints += parseFloat(points.eq(i).text());
   totalPointsToGet += parseFloat(points_to_get.eq(i).text());
  }
  
  /*
  totalPoints -= 1250;
  if (totalPoints < 0) {
       totalPoints = 0;
  }
  */
  
  var check = $('.use-all-points:checked').length;
  var totalShip = 0 - totalPrice;
  $('.info-2 strong').text(Math.max(0, totalShip).toFixed(2) + ' zł');
  
  var totalDelivery = 150 - totalPrice;
  $('.info-1 strong').text(Math.max(0, totalDelivery).toFixed(2) + ' zł');
  
  if(this.m_iMaxPointsToUse > totalPoints){//mamy wiecej punktow na koncie niz koszt
  this.m_iPointsToUse = totalPoints;
  
  }else{//mamy mniej punktow na koncie niz koszt 
  this.m_iPointsToUse = this.m_iMaxPointsToUse;
  
  }
  $('.use-all-points').val(this.m_iPointsToUse);
  this.m_iOrderPoints = totalPoints;
  //alert(totalPrice);
  // wypisanie sumy bez uwzglednienia rabatow
  cart.m_jSummary.find('tbody tr:first .sum').text(Math.max(0, totalPrice).toFixed(2) + ' zł');
  
  var discounts = cart.m_jSummary.find('tbody .discount p');
  
  for (var i = 0; i < discounts.length; i++) {
  //alert(discounts.length);
   totalPrice -= parseFloat(discounts.eq(i).text());
   
   //alert(discounts.eq(i).text());
   //alert(totalPrice);
  }

  // wypisanie sumy po uwzglednieniu rabatow
  cart.m_jSummary.find('tbody .total').text(Math.max(0, totalPrice).toFixed(2) + ' zł');
  if (check==1){
  // wypisanie punktow
  cart.m_jPointsOrder.text(this.m_iPointsToUse + ' punktów / ' + this.CalculatePointsValue(this.m_iPointsToUse).toFixed(2) + ' zł');
  cart.m_jPointsTotal.text((totalPointsToGet) + ' punktów / ' + this.CalculatePointsValue(totalPointsToGet).toFixed(2) + ' zł');
  cart.m_jPointsRemaining.text((parseInt(this.m_jPointsCurrent.text()) + totalPointsToGet - this.m_iPointsToUse) + ' punktów / ' + this.CalculatePointsValue(parseInt(this.m_jPointsCurrent.text()) + totalPointsToGet - this.m_iPointsToUse).toFixed(2) + ' zł');
  }else{
  cart.m_jPointsOrder.text('0 punktów / ' + this.CalculatePointsValue(0).toFixed(2) + ' zł');
  cart.m_jPointsTotal.text((totalPointsToGet) + ' punktów / ' + this.CalculatePointsValue(totalPointsToGet).toFixed(2) + ' zł');
  cart.m_jPointsRemaining.text((parseInt(this.m_jPointsCurrent.text()) + totalPointsToGet) + ' punktów / ' + this.CalculatePointsValue(parseInt(this.m_jPointsCurrent.text()) + totalPointsToGet).toFixed(2) + ' zł');
  
  }
 };
 
 // OBLICZENIE WARTOSCI PUNKTOW
 // Do uzupelnienia zgodnie z obowiazujacym algorytmem.
 this.CalculatePointsValue = function(points) {
 //alert(.04 *this.m_iPointsToUse);
  return .04 * points;
 };
 
 // DODANIE NOWEGO RABATU
 // Parametry to nazwa tego rabatu (pojawi sie ponad jego wartoscia), oraz wartosc w zlotowkach (ujemna, jesli to rabat).
 // Trzeci, opcjonalny parametr, to id rabatu. Domyslnie bedzie to kolejna liczba naturalna. Gdy istnieje juz rabat o takim id, wowczas funkcja zwroci false.
 // Funkcja zwraca identyfikator rabatu.
 this.AddDiscount = function(name, value, id) {
  if ((id != undefined) && this.m_jSummary.find('tbody tr:last .discount-id-' + id).length) return false;
  var discount = $('<div class="discount discount-id-' + ((id == undefined) ? this.m_iDiscountIndex : id) + '"><h5>' + name + '</h5><p>' + value.toFixed(2) + ' zł</p></div>');
  this.m_jSummary.find('tbody tr:last .total').before(discount.css('display', 'none').slideDown('fast'));
  this.UpdateTotal();
  return (id == undefined) ? this.m_iDiscountIndex++ : id;
 };
 
 // USUNIECIE RABATU
 // Jako parametr nalezy podac identyfikator rabatu, otrzymany z funkcji tworzacej nowy rabat.
 this.DeleteDiscount = function(id) {
  this.m_jSummary.find('.discount-id-' + id).remove();
  this.UpdateTotal();
 };
 
 // UZYCIE WSZYSTKICH PUNKTOW
 this.UseAllPoints = function() {
  //alert('Punkty++');
  //this.m_iPointsToUse = this.m_iCurrentPoints + this.m_iOrderPoints;
  //alert(this.m_iPointsToUse);

  this.AddDiscount('Punkty', this.CalculatePointsValue(this.m_iPointsToUse), 'points');
  //alert(this.CalculatePointsValue(this.m_iPointsToUse));
  //this.UpdateTotal();
 };
 
 // UZYCIE 0 PUNKTOW
 this.UseNoPoints = function() {
  //alert('Punkty--');
  //this.m_iPointsToUse = 0;
  this.DeleteDiscount('points');
  //this.UpdateTotal();
 };
 
 // UZYCIE KUPONU
 // Musi zwracac false, zeby nie wyslac calego formularza.
 this.UseCoupon = function() {
  if (this instanceof CCart) var cart = this;
  else var cart = CCart.getInstance($(this));
  cart.GetCoupon();
  if (!isNaN(parseFloat($('#coupon_value').text()))){
  //alert(parseFloat($('#coupon_value').text()));
  cart.AddDiscount('Kupon',parseFloat($('#coupon_value').text()),'kupon');
  
  }
  return false;

  
 };
 this.GetCoupon = function(){
 if($.browser.opera==true){
var urlto = 'http://www.dopalacze.com/coupons.php';
}else{
var urlto = 'coupons.php';
}
 var kod =  $('#coupon-id').val();
 var suma = parseFloat($('.total').text());
 $.get(urlto, { value: kod ,sum: suma},
  function(data){
  var a = data;       
  if(a>0){
  $('#coupon_value').text(a + ' zł');
  }else{
  alert(a);
  }       
  //$('.use-coupon').get(0).checked = true;
  });
 };
 
 this.DeleteCoupon = function() {
  if (this instanceof CCart) var cart = this;
  else var cart = CCart.getInstance($(this));
  cart.DeleteDiscount('kupon');
  cart.UpdateTotal();
 };
 
 this.Initialize();
 
};

CCart.instances = [];
CCart.extractId = function(classString) {
 var classes = classString.split(' ');
 for (var i = 0; i < classes.length; i++) {
  if (classes[i].substr(0, 8) == 'cart-id-') {
   return classes[i].substr(8);
  }
 }
};
CCart.getInstance = function(context) {
 return CCart.instances[CCart.extractId(context.parents('.cart-container:first').attr('class'))];
};

function updateDB(products_id,qty,attributes){
if($.browser.opera==true){
var urlto = 'http://www.dopalacze.com/shopping_cart.php';
}else{
var urlto = 'shopping_cart.php';
}
        $.get(urlto, { update: products_id,quantity:qty,attribs:attributes });
              };
              
  
/*
* VALIDATION
*/

var passwordToCheck = '';

function CValidation() {
 
 /*
 * REGULY WALIDACJI
 * Parametry:
 * - nazwa (name) pola, ktorego tyczy sie regula;
 * - wyrazenie regularne, ktore musi byc spelnione przez wartosc pola;
 * - funkcja, ktora ma byc wywolana w przypadku gdy powiedzie sie test z wyrazeniem regularnym. Funkcja ta dostaje jeden parametr - wartosc pola, a zwrocic ma prawde (wartosc poprawna) lub falsz (wartosc niepoprawna).
 */
 
 this.m_aFields = new Array(
  new CTextfieldCriteria('firstname', /^.{2,}$/i, false),
  new CTextfieldCriteria('lastname', /^.{2,}$/i, false),
  new CTextfieldCriteria('postcode', /^[0-9][0-9]$/i, false),
  new CTextfieldCriteria('postcode2', /^[0-9][0-9][0-9]$/i, false),
  new CTextfieldCriteria('street_address', /^.{2,}$/i, false),
  new CTextfieldCriteria('city', /^.{2,}$/i, false),
  //new CTextfieldCriteria('nip', /^[0-9]{10}$/i, checkNip),
  //new CTextfieldCriteria('regon', /^[0-9]{9}$/i, checkRegon),
  new CTextfieldCriteria('email_address', /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)$/i, false),
  new CTextfieldCriteria('telephone', /^.{2,}$/i, false),
  new CTextfieldCriteria('password', /^.{2,}$/i, function(a) { passwordToCheck = a; return true; }),
  new CTextfieldCriteria('confirmation', /^.{2,}$/i, function(a) { return (passwordToCheck == a); })
 );
 
 this.m_bIgnoreFiles = false;
 
 this.validateAll = function() {
  
  // Sprawdzenie wszystkich pol tekstowych po kolei
  var correctFields = 0;
  for (var i = 0; i < this.m_aFields.length; i++) {
   if (this.m_aFields[i].m_sId == 'kod-rabatowy' || this.m_aFields[i].validate()) correctFields++;
  }
  
  // Jesli sa blednie wypelnione pola
  if (correctFields != i) {
   new CAlert('Błędne dane', 'W formularzu wykryto błędnie wypełnione pola. Aby kontynuować, musisz je poprawić.', false, false);
   return false;
  }
  
  // Sprawdzenie wieku klienta
  var minimalAge = 18;
  var today = new Date();
  var birthDate = new Date(
   parseInt($('#registration-form select[name=dob_year] option:selected').val()) + minimalAge, // Rok urodzenia
   parseInt($('#registration-form select[name=dob_month] option:selected').val()) - 1, // Miesiac urodzenia (zero-based)
   parseInt($('#registration-form select[name=dob_day] option:selected').val()) // Dzien urodzenia
  );
  //alert(today.getTime());
  //alert(birthDate.getTime());
  if (today.getTime() - birthDate.getTime() < 0) {
   new CAlert('Błędne dane', 'Przykro nam, ale w naszym sklepie mog± kupować jedynie osoby pełnoletnie.', false, false);
   return false;
  }

  // Sprawdzenie, czy zostaly zaakceptowane warunki
  if (!$('#registration-form input[name=akceptuje-warunki]:checked').length) {
   new CAlert('Nie zaakceptowano warunków', 'Aby kontynuować, musisz zaakceptować regulamin.', false, false);
   return false;
  }
  
  return true;
 };
 
 this.validate = function(field) {
  for (var i = 0; i < this.m_aFields.length; i++) {
   if (this.m_aFields[i].m_sId != field) continue;
   this.m_aFields[i].validate();
  }
 };
 
 this.criteriaExist = function(field) {
  for (var i = 0; i < this.m_aFields.length; i++) {
   if (this.m_aFields[i].m_sId != field) return true;
  }
  return false;
 };
 
 $(document).ready(function() {
  $('#registration-form').submit(function() {
   return v.validateAll();
  });
  $('#registration-form input:text[name]').each(function() {
   if (v.criteriaExist($(this).attr('name'))) {
    if ($(this).parents('.field-postcode').length) {
     $(this).parent().css('margin-right', 0).wrap('<span class="subwrapper" style="display: inline; float: left; position: relative; margin-right: 10px;"></span>');
    }
    $(this).change(function() {
     v.validate($(this).attr('name'));
    });
   }
  });
 });
 
};

function CTextfieldCriteria(id, expression, callback) {
 
 this.m_sId = id;
 this.m_rExpression = expression;
 this.m_cCallback = callback;
 
 this.validate = function() {
  var target = $('#registration-form input[name=\'' + this.m_sId + '\']');
  
  if ((target.parents('#dane-osoby-prywatnej').length && $('#rodzaj-klienta input:radio:checked').val() != 0) || (target.parents('#dane-firmy').length && $('#rodzaj-klienta input:radio:checked').val() != 1)) return true;
  
  var result = this.m_rExpression.test(target.val());
  
  if (result && (this.m_cCallback != false)) {
   result = this.m_cCallback(target.val());
  }
  
  if (this.m_sId != 'kod-rabatowy' || !discountPending) {
   this.notify(result);
  }
  
  return result;
 };
 
 this.notify = function(result) {
  var target = $('#registration-form input[name=\'' + this.m_sId + '\']');
  if (result) {
   if (target.val().length == 0) { target.parents('.field-text, .subwrapper').eq(0).find('img.status').fadeOut('fast'); }
   else if (target.parents('.field-text, .subwrapper').eq(0).find('img.status').length) {
    if (-1 != target.parents('.field-text, .subwrapper').eq(0).find('img.status').attr('src').indexOf('invalid')) {
    target.parents('.field-text, .subwrapper').eq(0).find('img.status').fadeOut('fast', function() { $(this).attr('src', 'templates/new/img/icons/ok.png').attr('alt', '(dane poprawne)'); }).fadeIn('slow');
    }
   }
   else {
    target.parents('.field-text, .subwrapper').eq(0).append('<img class="status" src="templates/new/img/icons/ok.png" alt="(dane poprawne)"/>').find('img').css('display', 'none').fadeIn('slow');
   }
  }
  else {
   if (target.parents('.field-text, .subwrapper').eq(0).find('img.status').length) {
    if (-1 != target.parents('.field-text, .subwrapper').eq(0).find('img.status').attr('src').indexOf('nie')) {
     target.parents('.field-text, .subwrapper').eq(0).find('img.status').attr('src', 'templates/new/img/icons/invalid.png').attr('alt', '(niepoprawne dane)').fadeOut('fast').fadeIn('fast').fadeOut('fast').fadeIn('fast').fadeOut('fast').fadeIn('fast');
    }
    else {
     target.parents('.field-text, .subwrapper').eq(0).find('img.status').fadeOut('fast', function() { $(this).attr('src', 'templates/new/img/icons/invalid.png').attr('alt', '(niepoprawne dane)'); }).fadeIn('fast');
    }
   }
   else {
    target.parents('.field-text, .subwrapper').eq(0).append('<img class="status" src="templates/new/img/icons/invalid.png" alt="(niepoprawne dane)"/>').find('img').css('display', 'none').fadeIn('slow');
   }
  }
 };
 
};

var v = new CValidation();

function checkNip(nip) {
 var weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
 var sum = 0;
 for (var i = 0; i < weights.length; i++) {
  sum += weights[i] * parseInt(nip.charAt(i));
 }
 if (parseInt(nip.charAt(weights.length)) == (sum % 11)) return true;
 return false;
};

function checkRegon(regon) {
 var weights = [8, 9, 2, 3, 4, 5, 6, 7];
 var sum = 0;
 for (var i = 0; i < weights.length; i++) {
  sum += weights[i] * parseInt(regon.charAt(i));
 }
 if (parseInt(regon.charAt(weights.length)) == (sum % 11) % 10) return true;
 return false;
};

