
var W3CDOM = (document.getElementsByTagName && document.createElement);

if (W3CDOM)
{
    var errorNode;
    errorNode = document.createElement('div');
    errorNode.className = "errormsg";
}

function verifySimpleSearch(form) {
    if (Trim(form.elements['search'].value).length < 3) {
        alert("Podaj przynajmniej 3 znaki, aby zacząć wyszukiwanie...");
        return false;
    }
    return true;
}

function verifyAddToCart(form) {
    var wynik=true;
    clearErrors(form);
    form.elements['amount'].value = parseInt(form.elements['amount'].value);
    if (isNaN(form.elements['amount'].value)) 
        form.elements['amount'].value = "0";
    if (parseInt(form.elements['amount'].value) <= 0 )
        wynik = addError(form, "Zamówiona ilość musi być większa od zera.");

    for (var i = 0 ; i < form.elements.length; i++) {
        if (form.elements[i].name.match(/oc_\d+/)) { // this is an option field
            if (form.elements[i].name.match(/^oc_\d+$/)) { // options for base product
                if (getSingleInputValue(form.elements[i]) == -1)
                    wynik = addError(form, "Nie wybrałeś wszystkich opcji tego towaru.");
            } else { // options for additional product
                match = form.elements[i].name.match(/^additional_options\[(\d+)\]\[oc_\d+\]$/);
                if (form.elements['additional[' + match[1] + ']'].checked && 
                    getSingleInputValue(form.elements[i]) == -1)
                        wynik = addError(form, "Nie wybrałeś wszystkich opcji tego towaru.");
            } 
        
        }
    }
    
    if (!wynik)
        alert("Nie dodano towaru - wystąpiły błędy.\nMusisz wybrać wszystkie opcje towaru, np. kolor obicia.");
    return wynik;
}

function verifyQuestion(form) {
    var wynik = true;
    clearErrors(form, 'email_errors');
    if (!isEmail(form.elements['email'].value))
        wynik = addError(form, 'Niepoprawny adres e-mail.', 'email', 'email_errors');
    if (Trim(form.elements['question'].value).length < 15)
        wynik = addError(form, "'Pytanie' musi mieć 15-200 znaków.", 'question', 'email_errors');
    if (!wynik)
        alert("W formularzu są błędy, proszę, popraw je.");
    return wynik;
}

function verifyContactForm(form) {
    var wynik=true;
    clearErrors(form);
    if (!isEmail(form.elements['email'].value))
        wynik = addError(form, 'Niepoprawny adres e-mail.', 'email');
    if (Trim(form.elements['message'].value).length < 15 || Trim(form.elements['message'].value).length > 1500)
        wynik = addError(form, "'Twoja wiadomość' musi mieć 15-1500 znaków.", 'message');
            
    if (!wynik)
        alert("W formularzu są błędy, proszę, popraw je.");
    return wynik;
}

function verifyEmailToFriend(form) {
    var wynik=true;
    clearErrors(form, 'email_errors');
    if (!isEmail(form.elements['email'].value))
        wynik = addError(form, 'Niepoprawny adres e-mail.', 'email', 'email_errors');
       
    if (!isEmail(form.elements['email_friend'].value))
        wynik = addError(form, 'Niepoprawny adres e-mail.', 'email_friend', 'email_errors');
        
    if (Trim(form.elements['message'].value).length < 15)
        wynik = addError(form, "'Twój komentarz' musi mieć 15-200 znaków.", 'message','email_errors');

    if (!wynik)
        alert("W formularzu są błędy, proszę, popraw je.");
    return wynik;
}

function verifySearch(form) {
    var wynik=true;
    clearErrors(form);
    var option_chosen=false;

    for (var i = 0 ; i < form.elements.length; i++) {
        if (form.elements[i].name.match(/^oc\[\d+\]$/) 
            && form.elements[i].value != -1)
            option_chosen = true;
    }

    if (option_chosen) {
        if (!isBlank(form.elements['name'].value) && Trim(form.elements['name'].value).length < 3)
            wynik = addError(form, "'Nazwa towaru' musi mieć co najmniej 3 znaki(-ów).", 'name');
        if (!isBlank(form.elements['category'].value) && Trim(form.elements['category'].value).length < 3)
            wynik = addError(form, "'Nazwa kategorii' musi mieć co najmniej 3 znaki(-ów).", 'category');
    } else {
        if (isBlank(form.elements['name'].value) && isBlank(form.elements['category'].value))
            wynik = addError(form, "Podaj nazwę towaru lub kategorii, lub wybierz odpowiednie opcje towaru.", "name");
        if (!isBlank(form.elements['name'].value) && Trim(form.elements['name'].value).length < 3)
            wynik = addError(form, "'Nazwa towaru' musi mieć co najmniej 3 znaki(-ów).", 'name');
        if (!isBlank(form.elements['category'].value) && Trim(form.elements['category'].value).length < 3)
            wynik = addError(form, "'Nazwa kategorii' musi mieć co najmniej 3 znaki(-ów).", "category");
    }
    if (!wynik)
        alert("W formularzu są błędy, proszę, popraw je.");
    return wynik;
}

function updateAddressRadios(form, radio_group_name) {
    if (form.elements[radio_group_name] && form.elements[radio_group_name].length) {// sa opcje do wyboru, czyli jest opcja dodania pola
        form.elements[radio_group_name][form.elements[radio_group_name].length-1].checked = true; //select last radio (i.e., add new)
    }
}

function verifyAddresses(form, array_name, radio_group_name) {
    var wynik=true;
    clearErrors(form);
    if (typeof radio_group_name != "undefined") {
    
        if (form.elements[radio_group_name+'[address_id]'] && form.elements[radio_group_name+'[address_id]'].length) {// sa opcje do wyboru, czyli jest opcja dodania pola
            // ale wybrano inna
            if (getRadioValue(form.elements[radio_group_name+'[address_id]']) != "-1")
                return true;
        }
    }
    
    if (Trim(form.elements[array_name+'[address_title]'].value).length < 6)
        wynik = addError(form, "'Imię i nazwisko / Nazwa firmy' musi mieć co najmniej 6 znaki(-ów).", array_name+'[address_title]');
  
    if (Trim(form.elements[array_name+'[address_line1]'].value).length < 5)
        wynik = addError(form, "'Adres' musi mieć co najmniej 5 znaki(-ów).", array_name+'[address_line1]');
    
    form.elements[array_name+'[address_line2]'].value = Trim(form.elements[array_name+'[address_line2]'].value);

    if (Trim(form.elements[array_name+'[address_city]'].value).length == 0)
        wynik = addError(form, "Nie wypełniłeś wymaganego pola 'Miasto'.", array_name+'[address_city]');

    if (Trim(form.elements[array_name+'[address_zipcode]'].value).length == 0)
        wynik = addError(form, "Nie wypełniłeś wymaganego pola 'Kod pocztowy'.", array_name+'[address_zipcode]');

   if (array_name == 'billing_form') {// additional test for billing address
        if (!isBlank(form.elements[array_name+'[address_phone]'].value) && !isPhone(form.elements[array_name+'[address_phone]'].value))
            wynik = addError(form, "Numer telefonu musi się składać z 6-20 znaków, może zawierać tylko znaki: 0-9,-,+,().", array_name+'[address_phone]');
            
        if (form.elements['customer_email'] && !isBlank(form.elements['customer_email'].value)
            && !isEmail(form.elements['customer_email'].value))
            wynik = addError(form, "Niepoprawny adres e-mail.", 'customer_email');
    
        if (form.elements['customer_email'] && isBlank(form.elements['customer_email'].value) 
            && isBlank(form.elements[array_name+'[address_phone]'].value))
            wynik = addError(form, "Podaj numer telefonu lub adres e-mail, by złożyć zamówienie.",array_name+'[address_phone]'); 
    }
        
    if (!wynik)
        alert("W formularzu są błędy, proszę, popraw je.");
    return wynik;
}

function setAction(button, field, value) {
    if (typeof field != 'undefined')
        button.form.elements[field].value = value;
    button.form.elements['actn'].value = button.name;
    button.form.submit();
    return false;
}

function setFormAction(form_name, button, field, value) {
    form = document.forms[form_name];	
    if (typeof field != 'undefined')
        form.elements[field].value = value;
    form.elements['actn'].value = button.name;
    form.submit();
    return false;
}
    
function clearErrors(forma, id)
{
	if (!W3CDOM) return;
	var i;
	if (!id)
	   id = 'form_errors' + (window.currentTab ? window.currentTab.toString() : "");
    // czyszczenie bledow poszczegolnych pol
    var pola = forma.getElementsByTagName("input");
    for (i = 0; i< pola.length; i++) {
        if (blad_pola = document.getElementById(pola[i].name.replace(/[\[\]]/g,'\.')+"_error"))
            blad_pola.innerHTML = '';
        if (hasClassName(pola[i], 'inline_error'))
            removeClassName(pola[i], 'inline_error');
            
    }
    pola = forma.getElementsByTagName("select");
    for (i = 0; i< pola.length; i++) {
        if (blad_pola = document.getElementById(pola[i].name.replace(/[\[\]]/g,'\.')+"_error"))
            blad_pola.innerHTML = '';
        if (hasClassName(pola[i], 'inline_error'))
            removeClassName(pola[i], 'inline_error');
    }
    pola = forma.getElementsByTagName("textarea");
    for (i = 0; i< pola.length; i++) {
        if (blad_pola = document.getElementById(pola[i].name.replace(/[\[\]]/g,'\.')+"_error"))
            blad_pola.innerHTML = '';
        if (hasClassName(pola[i], 'inline_error'))
            removeClassName(pola[i], 'inline_error');
    }

    pola = forma.getElementsByTagName("label");
    for (i = 0; i< pola.length; i++) {
        if (hasClassName(pola[i], 'inline_error'))
            removeClassName(pola[i], 'inline_error');
    }
    
    // i kontenera
        document.getElementById(id).innerHTML='';
}
   
function addError(form, title, field, id)
{
    if (!W3CDOM) 
        return false;
        
    if (!id)
	   id = 'form_errors' + (window.currentTab ? window.currentTab.toString() : "");
	   
    var errorBlock = document.getElementById(id);
    
	if (!title) title = "UNNAMED ERROR!";
	
	if (typeof errorBlock != 'undefined') {
	   var newError = errorNode.cloneNode(true); // dodawanie komunikatu o bledzie
	   newError.appendChild(document.createTextNode("Błąd: "+title));
	   errorBlock.appendChild(newError);
	}

	if (field) { // zawiadomienie o bledzie przy polu formularza
	    if (form.elements[field]) {
	       addClassName(form.elements[field], 'inline_error'); // pole dostaje inna klase
	       var label = form.elements[field].parentNode;
	       if (label) { // label dostaje inna klase i title
               addClassName(label, 'inline_error');
               label.title = title;
	       }  
	    }
	    field = field.replace(/[\[\]]/g,'\.');   //zamiana [ i ] na kropki
        field_error = document.getElementById(field+"_error");
        if (typeof field_error != 'undefined') // span o id=nazwa_pola_error dostaje zawartosc
            field_error.innerHTML='(!)&nbsp;';
    }
    
	return false;
}
function getRadioValue (radioButtonOrGroup) {
  var value = null;
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      if (radioButtonOrGroup[b].checked)
        value = radioButtonOrGroup[b].value;
  }
  else if (radioButtonOrGroup.checked)
    value = radioButtonOrGroup.value;
  return value;
}

function isEmail(str) {
// przepuszcza adres mailowy
        if(!str.match(/^[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}$/i)) {  //sam adres
		if (str.match(/<[\w]{1}[\w\.\-_]*@[\w]{1}[\w\-_\.]*\.[\w]{2,6}>$/i))  //nazwa i adres
			return true;
		else
	 		return false;
        } else {
            return true;
        }
}

function isPhone(s) 
{
 
     // Check for correct phone number
     rePhoneNumber = new RegExp(/^\+?[0-9()\- ]{6,}$/);
 
     return rePhoneNumber.test(s);
}

function fillAddressTitle(obj) {
if (obj.form.address_title && obj.form.address_title.value == '') 
    obj.form.address_title.value = 
      obj.form.customer_salutation.options[obj.form.customer_salutation.selectedIndex].value 
      + ' ' + obj.value;
}

function getElementsByClass(className) {

  var all = document.all ? document.all :
    document.getElementsByTagName('*');
  var elements = new Array();

  for (var e = 0; e < all.length; e++) {
    classes = all[e].className.split(" ");
    for (i = 0; i < classes.length; i++)
        if (classes[i] == className)
            elements[elements.length] = all[e];
  }
  
  return elements;
}

function _rollon() {
    this.src = this.src.replace(/(_f2)?\.(.{3,4})$/,'_f2.$2');
}

function _rolloff() {
    this.src = this.src.replace(/_f2\.(.{3,4})$/,'.$1');
}

function _rollonanchor() {
    if (this.getElementsByTagName) {
        var a = this.getElementsByTagName('img');
        a[0].onmouseover();
        
    }
}

function _rolloffanchor() {
    if (this.getElementsByTagName) {
        var a = this.getElementsByTagName('img');
        a[0].onmouseout();

    }
}



function attachRollovers() {
    var el = getElementsByClass('rollover');
    for (var i = 0; i < el.length; i++) {
        if (document.images) {
            image = new Image();
            image.src = el[i].src.replace(/\.(.{3,4})$/,'_f2.$1');
        }
        el[i].onmouseover = _rollon;
        el[i].onmouseout = _rolloff;
    }
    var el = getElementsByClass('rollover_anchor');
    for (var i = 0; i < el.length; i++) {
        el[i].onmouseover = _rollonanchor;
        el[i].onmouseout = _rolloffanchor;
    }
}

window.onload = function() {attachRollovers(); liveSearchInit()};

function removeClassName(el, name)
{

  var i, curList, newList;

  if (el.className == null)
    return;

  // Remove the given class name from the element's className property.

  newList = new Array();
  curList = el.className.split(" ");
  for (i = 0; i < curList.length; i++)
    if (curList[i] != name)
      newList.push(curList[i]);
  el.className = newList.join(" ");
}

function addClassName(el, name)
{
    
    if (el.className == null)
        el.className = name;
    else        
        el.className += " "+name;
}

function hasClassName(el, name) {
    var classes = el.className.split(" ");
    for (var i = 0; i < classes.length; i++)
        if (classes[i] == name)
            return true;
    return false;
}

function switchModule(obj, block) {
    var type = obj.value;
    var blocks = getElementsByClass(block + '_form');
    for (var i=0; i < blocks.length; i++)
        addClassName(blocks[i], "hidden"); // hide all
    if (document.getElementById(block + 'm_' + type))
        removeClassName(document.getElementById(block + 'm_' + type), 'hidden');
    
    updateActiveBlocks(obj.form);
    return true;
}

function updateActiveBlocks(form) {
    var radios = form.elements['sm'];
    for(var i = 0; i < radios.length; i++)
        if (radios[i].checked) {
            addClassName(radios[i].parentNode.parentNode, 'active');
        } else {
            removeClassName(radios[i].parentNode.parentNode, 'active');
        }
    radios = form.elements['pm'];
    for(i = 0; i < radios.length; i++)
        if (radios[i].checked) {
            addClassName(radios[i].parentNode.parentNode, 'active');
        } else {
            removeClassName(radios[i].parentNode.parentNode, 'active');
        }
}

function handleBuyXGetY(input, src_amount, dest_amount, dest_product_id) {
    var entered_amount = input.form.elements['amount'].value;
    var div = document.getElementById('options' + dest_product_id);
    
    switch (input.checked) {
        case true: // enable promotion
            // disable all other promotions
            for (var i = 0 ; i < input.form.elements.length; i++) {
                if (input.form.elements[i].name.match(/^additional\[\d+\]/)
                    && input.form.elements[i].type == 'checkbox' && input.form.elements[i] != input) {
                    input.form.elements[i].checked = false;
                    
                    input.form.elements[i].onclick();
                }
            } 
            // correct the amount of source product
            if (parseInt(entered_amount) < src_amount) {
                input.form.elements['amount'].value = src_amount;
                
                var text = "Zwiększono zamówioną ilość do " + src_amount + ", aby uwzględnić warunki promocji.";
                text += "\nJeśli chcesz dodać towary ręcznie (np. by uwzględnić różne ich opcje), skoryguj ilość towarów i dodaj towary ręcznie, promocja zostanie uznana."
                alert(text);   
            }
            
            // add calculated amount of destination product
            var howMany = Math.floor(input.form.elements['amount'].value / src_amount);
            input.form.elements['additional[' + dest_product_id + ']'].value = dest_amount * howMany;
            if (div)
                div.style.display = 'block';
        break;
        case false: // disable promotion
            input.form.elements['additional[' + dest_product_id + ']'].value = "";
            if (div)
                div.style.display = 'none';            
        break;
    }
}

function checkout_editAddress(obj, address_id, link) {
    obj.form.action = link;
    return setAction(obj,'address_id',address_id);
}

// the functions in this file require the supplementary library lib.js

// These defaults should be changed the way it best fits your site
var _POPUP_FEATURES = '';

function raw_popup(url, target, features) {
    // pops up a window containing url optionally named target, optionally having features
    if (isUndefined(features)) features = _POPUP_FEATURES;
    if (isUndefined(target  )) target   = '_blank';
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    return theWindow;
}

function link_popup(src, features) {
    // to be used in an html event handler as in: <a href="..." onclick="link_popup(this,...)" ...
    // pops up a window grabbing the url from the event source's href
    return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function event_popup(e) {
    // to be passed as an event listener
    // pops up a window grabbing the url from the event source's href
    link_popup(e.currentTarget);
    e.preventDefault();
}

function event_popup_features(features) {
    // generates an event listener similar to event_popup, but allowing window features
    return function(e) { link_popup(e.currentTarget, features); e.preventDefault() }
}

function isUndefined(v) {
    var undef;
    return v===undef;
}

function validateSP(form) {
    var wynik = true;
    clearErrors(form, 'sp_errors');
    
    var checked = false;

    if (form.elements['sm'].type == 'hidden')
        checked = true;
        
    for (var i = 0; i < form.elements['sm'].length; i++)
        if (form.elements['sm'][i].checked) {
            checked = true;
            break;
        }
    
    if (!checked) {
        wynik = addError(form, "Wybierz sposób dostawy.", null, 'sp_errors');
    }

    if (form.elements['pm'].type == 'hidden')
        checked = true;
    
    for (i = 0; i < form.elements['pm'].length; i++)
        if (form.elements['pm'][i].checked) {
            checked = true;
            break;
        }
    
    if (!checked) {
        wynik = addError(form, "Wybierz formę płatności.", null, 'sp_errors');
    }
    
    return wynik;
}

function validateAddComment(form) {
    if (isBlank(form.elements['order_comment_text'].value)) {
        alert("Nie można wysłać komentarza - wpisz odpowiedni tekst w polu komentarza!");
        return false;
    }
    return true;
}

