var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

function ajaxCheckEmail() {

  // Ajax URL /basket/checkemail
  var url = $(this).parents('form').attr('action').replace('basket/update', 'ajax/basket/checkemail');
  


  // Check for valid email
  var email = $(this).val();
  var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
  if(emailPattern.test(email)) {
    $.post(url, 'email=' + encodeURIComponent(email), function(data) {
      $('.basket_createaccount').hide();
      $('.basket_login').hide();
    
      // Show relevant fields and focus
      var sel = data.exists ? '.basket_login' : '.basket_createaccount';
      $(sel).show();

    }, 'json');
  }
}

function ajaxUpdateBasket() {

  // return;

  // Clear total and shipping cost display
  $('span.shippingtotal').text('...');
  $('span.ordertotal').text('...');

  // Add loading icon
  var table   = $('table.basket');
  var loading = $('<div class="basketloading"></div>');
  $(loading).css({width:    table.width(),
                  height:   table.height(),
                  top:      table.offset().top,
                  left:     table.offset().left});

  $('body').append(loading);

   $.post('index.php/ajax/basket/update', $('form.basket').serialize(), function(data) {

     $('span.shippingtotal').text(data.order.shipping_total_inc);
     $('span.ordertotal').text(data.order.total);

     // Select the correct input field - this may override what was clicked
     $('input[name=shipping_service_id][value=' + data.order.shipping_service_id + ']').attr('checked', 'checked');

     // Update basket HTML
     $('div.basketbody').replaceWith(data.html);

     // Determine whether to hide delivery address
     if(data.order.use_delivery_address == 1) {
       $('div.basketbox.delivery').slideDown('normal', function() {
         $('div.basketbox.delivery input:visible:first').select();
       });
     } else {
       $('div.basketbox.delivery').hide();
     }
     
    // Hide password fields if email blank
    if(!emailPattern.test(data.order.email)) {
      $('.basket_createaccount').hide();
      $('.basket_login').hide();
    }

    // Remove loading
    $('div.basketloading').remove();

   }, 'json');
}


$(function() {

  // Fix IE buttons
  $('body').ieFixButtons();

  // Hide delivery address
  if($('input[name=use_delivery_address]').is(':not(:checked)')) {
    $('div.basketbox.delivery').hide();
  };

  // Basket less/more qty buttons
  $('a.change_qty').live('click', function() {


    var variation_id = $(this).attr('id').split('_')[1];
    var input_field  = $('input#qty_' + variation_id);
    var qty          = parseInt(input_field.val(), 10);

    // Ensure not less than 0
    if($(this).hasClass('less'))
      input_field.val( (qty-1) < 0 ? 0 : qty-1 );

    if($(this).hasClass('more'))
      input_field.val(qty+1);

    // Do Ajax update
    if($(input_field).hasClass('ajax')) {
      ajaxUpdateBasket();
    }

    return false;
  });


  // Quantity fields - select on focus
  $('input.qty').focus(function() {
    $(this).trigger('select');
  })

  // Autosubmit fields
  $('.autosubmit').change(function() {
    $(this).parents('form').trigger('submit');
  })


  // Make quantity fields select whole value on focus
  $('form.basket input.qty').focus(function() {
    $(this).trigger('select');
  });

  // Shipping service change - ajax
  //$('select[name=shipping_service_id]').change('click', ajaxUpdateBasket);
  $('select[name=shipping_service_id]').live('change', ajaxUpdateBasket);



  $('form.basket input.qty').change(ajaxUpdateBasket);
  $('form.basket input.qty').keyup(function() {
    if($(this).val() != '') {
      ajaxUpdateBasket();
    }
  });
  $('input[name=use_delivery_address]').live('click', ajaxUpdateBasket);
  $('input[name=gift_wrapping]').live('click', ajaxUpdateBasket);
  $('select[name=delivery_country]').live('change', ajaxUpdateBasket);
  $('select[name=billing_country]').live('change', ajaxUpdateBasket);


  // Ajax - check account exists
  if(!emailPattern.test($('.basketbox input[name=email]').val())) {
    $('.basket_createaccount').hide();
    $('.basket_login').hide();
  }


  $('.basketbox input[name=email]').live('keyup',  ajaxCheckEmail);
  $('.basketbox input[name=email]').live('change', ajaxCheckEmail);
  $('.basketbox input[name=email]').live('blur',   ajaxCheckEmail);


  // Show change qty buttons as JS on
  $('head').append('<style type="text/css"> table.basket a.change_qty { display: block; } </style>');



})
