/* Javascript CF functions */

function deliveryMethodRefresh(event) {
  if ($('deliveryRadio').checked) {
    $('byPostalCode').style.display = 'block';
    $('byShop').style.display = 'none';
    setDeliveryMethodsInLinks('delivery');
  } else {
    $('byShop').style.display = 'block';
    $('byPostalCode').style.display = 'none';
    setDeliveryMethodsInLinks('collection');
  }
  resetShop();
}

//  Set delivery method parameter in the categories links
//
function setDeliveryMethodsInLinks(method) {
  $$('.setDeliveryMethodLink').each(function(e){
    replacement = "?delivery_method=" + method;
    if (e.href.match(/\?.*$/)) {
      e.href = e.href.replace(/(\?.*)$/, replacement);
    } else {
      e.href += replacement;
    }
  });
}

// Reset any shop's info to initial state
//
function resetShop() {
  // Hide shop details
  $$('.selectedShop').each(function(e){ e.style.display = 'none'; });

  // Index page only
  if ($('invalidCategories')) {
    // Display invalid categories
    $('invalidCategories').style.display = 'block';
    $('warningMessage').style.display = 'none';

    // Hide shop categories
    $$('.shopCategories').each(function(e){ e.style.display = 'none'; });
  }
  
  // Reset postal code & selected shop
  $$('#shop option').each(function(e){ e.selected = e.value=='selectShop' ? true:false; });
}

// Show selected shop info
//
function setShop(shopId) {
  // Display shop details
  $$('.selectedShop').each(function(e){ e.style.display = 'none'; });
  $('selectedShop_' + shopId).style.display = 'block';

  // Index page only
  if ($('invalidCategories')) {
    // Hide invalid categories
    $('invalidCategories').style.display = 'none';
    $('warningMessage').style.display = 'none';

    // Display shop categories
    $$('.shopCategories').each(function(e){ e.style.display = 'none'; });
    $('categories_' + shopId).style.display = 'block';
  }
}

// Checking if the postal code exists and show the corresponding shop info
//
function checkAndSetShop(field) {
  $('postalCodeWarning').hide();
  var postCode = field.value;
  if (window.shopsCodesRef[postCode]) {
    setShop(window.shopsCodesRef[postCode]);
  } else {
    resetShop();
    field.value = postCode;
  }
}

// Postal code autoselect events setting
//
function setAutocompleteEvents() {
  $('postalCodeField').observe('blur', function(event){
    if (this.value=='') 
    { this.value='Code Postal'; resetShop(); }
  else 
    { if(window.postCodes.indexOf(this.value) < 0) $('postalCodeWarning').show(); }
  });
  $('postalCodeField').observe('focus', function(event){
    if(this.value=='Code Postal') { this.value=''; return; }
    checkAndSetShop(this);
  });
  $('postalCodeField').observe('keyup', function(event){
    var ch = (event.which) ? event.which : event.keyCode;
    if(ch == 8) this.value = this.value.substr(0,5);
  this.value = this.value.strip();
    checkAndSetShop(this);
  });
  $('shop').observe('change', function(event) {
    if (this.value=='selectShop') { resetShop(); return; };
    setShop(this.value);
  });
}

// Postal codes arrays creating
//
function createCodesArrays() {
  window.postCodes = new Array();
  window.shopsCodesRef = new Array();

  window.shopsCodes.each(function(sc){
    window.shopsCodesRef[sc[1]] = sc[0];
    window.postCodes.push(sc[1]);
  });
}

