// $Id: checkoutPages.js,v 1.14 2010/12/07 11:32:13 ashley Exp $
// Swap the dest and src nodes
function swapNodes(dest, src) {
    var parent = dest.parentNode;
    if (src) {
        parent.replaceChild(src, dest);
    } else {
        parent.removeChild(dest);
    }
    return src;
}

//Historically Used for Help Pop Ups - Can we do something more accessible?
function openWindow(url, name)
{
  popupWin = window.open(url, name, 'width=430,height=440,top='+((screen.height/2)-(220))+',left='+((screen.width/2)-(215))+', toolbar=no,scrollbars=no,resizable=yes,menubar=no,status=no,directories=no,location=no');
}

//Delivery Details Summary Display - when a user selects a value from the Delivery Address drop down
//update the address shown (Delivery Details), as well as the hidden form fields
function deliveryChoiceSummary(add_count, add_selection)
{
  for(i=0; i<=add_count; i++)
  {
    if(i == add_selection)
    {
      $('#delivery_add_' + i).show();
      if(i == 0) {
        document.getElementById('delivery_full_name_F').value = '';
        document.getElementById('delivery_address_line_1_F').value = '';
        document.getElementById('delivery_address_line_2_F').value = '';
        document.getElementById('delivery_address_line_3_F').value = '';
        document.getElementById('delivery_address_line_4_F').value = '';
        document.getElementById('delivery_address_line_5_F').value = 'test';
        document.getElementById('delivery_postcode_F').value = '';
        document.getElementById('delivery_telephone_F').value = '';
        document.getElementById('delivery_instructions_F').value = '';
        document.getElementById('delivery_telephone_F').disabled = true;
        document.getElementById('delivery_instructions_F').disabled = true;
        document.getElementById('gift_message_F').disabled = true;
      }
      else {
        document.getElementById('delivery_full_name_F').value = document.getElementById('stored_delivery_full_name' + i).value;
        document.getElementById('delivery_address_line_1_F').value = document.getElementById('stored_delivery_address_line_1' + i).value;
        document.getElementById('delivery_address_line_2_F').value = document.getElementById('stored_delivery_address_line_2' + i).value;
        document.getElementById('delivery_address_line_3_F').value = document.getElementById('stored_delivery_address_line_3' + i).value;
        document.getElementById('delivery_address_line_4_F').value = document.getElementById('stored_delivery_address_line_4' + i).value;
        document.getElementById('delivery_address_line_5_F').value = document.getElementById('stored_delivery_address_line_5' + i).value;
        document.getElementById('delivery_postcode_F').value = document.getElementById('stored_delivery_postcode' + i).value;
        document.getElementById('delivery_telephone_F').value = document.getElementById('stored_delivery_telephone' + i).value;
        document.getElementById('delivery_instructions_F').value = document.getElementById('stored_delivery_instructions' + i).value;
        document.getElementById('delivery_telephone_F').disabled = false;
        document.getElementById('delivery_instructions_F').disabled = false;
        document.getElementById('gift_message_F').disabled = false;
      }
    }
    else
    {
      $('#delivery_add_' + i).hide();
    } //end if
  } //end for
} //end func

function deliveryChoiceLoad()
{
  if(document.getElementById('deliveryDetailsAddressChoice'))
  {
    if(document.getElementById('deliveryDetailsAddressChoice').selectedIndex == 0 &&
       document.getElementById('deliveryDetailsAddressChoice').length > 1 )
    {
      document.getElementById('delivery_telephone_F').disabled = true;
      document.getElementById('delivery_instructions_F').disabled = true;
      document.getElementById('gift_message_F').disabled = true;
    } else {
      if(document.getElementById('delivery_address_line_5_F').value == 'GB') 
      {
         // clear error message as user has now selected a new address
         document.getElementById('ajaxedError').innerHTML = '';
      }
    }
  }
}

function getDeliveryChoiceValue() {
  if(document.forms['delivery_details']['delivery_choice_forced_F'].value != '')
  {
    return document.forms['delivery_details']['delivery_choice_forced_F'].value;
  } else {
    for (i = 0; i < document.forms['delivery_details']['delivery_choice_radio_F'].length; i++ ) {
      if (document.forms['delivery_details']['delivery_choice_radio_F'][i].checked) {
        return document.forms['delivery_details']['delivery_choice_radio_F'][i].value;
      }
    }
  }
}

function displayDelDetails()
{
  if (getDeliveryChoiceValue() == 'D') {
    if(document.getElementById('delivery_method_F')) {
        if(document.getElementById('delivery_method_F').value == 'WCL' ||
           document.getElementById('delivery_method_F').value == 'WED') {
          $('#deladdr').hide();
          $('#deldet').hide();
          $('#delpc').hide();
          $('#delphone').hide();
          $('#delinstr').hide();
          $('#giftmsg').hide();
        } else {
          $('#deladdr').show();
          if(document.getElementById('deldet')) {
            //only display deldet if an address has been selected
            if(document.delivery_details.address_choice_F.value == 0) {
              $('#deldet').hide();
            } else {
              $('#deldet').show();
            }
          }
          $('#delpc').show();
          $('#delphone').show();
          $('#delinstr').show();
          $('#giftmsg').show();
        }
    }
    //display deldisplay if a delivery method has been selected
    if(document.getElementById('delivery_method_F')) {
      if(document.getElementById('delivery_method_F').value != '') {
        $('#deldisplay').show();
      } else {
        $('#deldisplay').hide();
      }
    }
    deliveryDatepicker();
  }
  else {
    $('#deladdr').hide();
    $('#deldet').hide();
    $('#delpc').hide();
    $('#delphone').hide();
    $('#delinstr').hide();
    $('#giftmsg').hide();
  }
  updateRightBasket();
}

function updateRightBasket()
{
  //Update right basket based on address choice changes
  if (document.getElementById('deliveryDetailsAddressChoice')) {
    var parameters = 'delivery_choice_F=' + getDeliveryChoiceValue() + '&address_choice_F=' + document.getElementById('deliveryDetailsAddressChoice').value + '&delivery_method_F=' + document.getElementById('delivery_method_F').value + '&delivery_choice_forced_F=' + document.getElementById('delivery_choice_forced_F').value;
  } else {
    var parameters = 'delivery_choice_F=' + getDeliveryChoiceValue() + '&delivery_method_F=' + document.getElementById('delivery_method_F').value + '&delivery_choice_forced_F=' + document.getElementById('delivery_choice_forced_F').value;
  }
  $('#checkoutRightBasket').load( bust('/update-checkout-right-basket.lml?' + parameters), changeDeliveryChoice);
}

function changeDeliveryChoice()
{
  if (getDeliveryChoiceValue() == 'D') {
    updateDeliveryAddress();
  }
}

function updateDeliveryForm()
{
  var parameters = 'delivery_choice_F=';
  parameters += getDeliveryChoiceValue();
  if (document.getElementById('delivery_method_F')) {
    parameters += '&delivery_method_F=' + document.getElementById('delivery_method_F').value;
  }
  if (document.getElementById('deliveryDetailsAddressChoice')) {
    parameters += '&address_choice_F=' + document.getElementById('deliveryDetailsAddressChoice').value + '&delivery_telephone_F=' + escape(document.getElementById('delivery_telephone_F').value);
  }
  switch (getDeliveryChoiceValue()) {
    case 'D':
      if (document.getElementById('delivery_address_line_5_F')) {
        parameters +='&delivery_method_country_F=' + document.getElementById('delivery_address_line_5_F').value;
      }
      if (document.getElementById('delivery_postcode_F')) {
        parameters +='&delivery_postcode_F=' + escape(document.getElementById('delivery_postcode_F').value);
      }
      if (document.getElementById('delivery_morning_F')) {
        //$.log('morning? '+document.getElementById('delivery_morning_F').checked);
        if (document.getElementById('delivery_morning_F').checked == true) {
          parameters +='&delivery_morning_F=Y';
        } else {
          parameters +='&delivery_morning_F=N';
        }
      }
      break;
  }
  if (document.getElementById('rightBasketHeaderMessage')) {
    document.getElementById('rightBasketHeaderMessage').innerHTML = "Updating basket ...";
  }
  $('#deliveryDetailsForm').load( bust('/update-checkout-delivery.lml?' + parameters), displayDelDetails);
}

function updateDeliveryAddress()
{
  if (document.getElementById('deliveryDetailsAddressChoice')) {
    var doEdit = document.getElementById('deliveryDetailsAddressChoice').value;
    var parameters = 'address_choice_F=' + doEdit;
    //on ajax destroy and remove address dialogs and divs
    //so they can be re-created on ajax response with fresh data
    $('#addAnotherAddressDialog').dialog('destroy');
    $('#anotherAddressDialog').dialog('destroy');
    $('#addAnotherAddressDialog').remove();
    $('#anotherAddressDialog').remove();
    $('#addressDialogDisplay').load( bust('/update-checkout-delivery-address.lml?' + parameters), addAnotherAddressDialog);
    deliveryChoiceLoad();
  }
}

//Provide a text area for alternate title
function otherTitle(obj, title_value)
{
  if (obj != null && obj != 'undefined')
  {
    var titleIndex = obj.selectedIndex;

    if(obj.options[titleIndex].value == 'Other')
    {
      //var title_value = '<DATA EXPR="title">';
      title_HTML = '<INPUT NAME="title_other_F" MAXLENGTH="10" VALUE="' + title_value + '" CLASS="bodyText" STYLE="width: 100px; margin:0; padding: 0;" />';
      document.getElementById('titleHTML').innerHTML = title_HTML;
    }
    else
    {
      title_HTML = '';
      document.getElementById('titleHTML').innerHTML = title_HTML;
    }
  }
}

function check_delivery_details_form() {
  alert_message = "";
  if (document.delivery_details.storage_delivery_choice_F) {
    if (document.delivery_details.storage_delivery_choice_F.value == "Y") {
      if ((!isBlank(document.delivery_details.delivery_forename_F.value)) ||
          (!isBlank(document.delivery_details.delivery_surname_F.value)) ||
          (!isBlank(document.delivery_details.delivery_address_line_1_F.value)) ||
          (!isBlank(document.delivery_details.delivery_address_line_3_F.value)) ||
          (!isBlank(document.delivery_details.delivery_postcode_F.value))) {

        if (isBlank(document.delivery_details.delivery_telephone_F.value)) {
          alert_message = alert_message + "A delivery telephone number is needed if delivery details\n";
          alert_message = alert_message + "are not the same as your details.\n";
        }
        if (isBlank(document.delivery_details.delivery_forename_F.value) ||
            isBlank(document.delivery_details.delivery_surname_F.value)) {
          alert_message = alert_message + "A delivery forename & surname are needed if delivery details\n";
          alert_message = alert_message + "are not the same as your details.\n";
        }
        if (isBlank(document.delivery_details.delivery_address_line_1_F.value)) {
            alert_message = alert_message + "A delivery Address Line 1 is needed if delivery details\n";
            alert_message = alert_message + "are not the same as your details.\n";
        }
        if (isBlank(document.delivery_details.delivery_address_line_3_F.value))  {
            alert_message = alert_message + "A delivery Town is needed if delivery details\n";
            alert_message = alert_message + "are not the same as your details.\n";
        }
        if (isBlank(document.delivery_details.delivery_address_line_5_F.value)) {
            alert_message = alert_message + "A delivery Country is needed if delivery details\n";
            alert_message = alert_message + "are not the same as your details.\n";
        }
        if (isBlank(document.delivery_details.delivery_postcode_F.value)) {
            alert_message = alert_message + "A delivery Zip/Postcode is needed if delivery details\n";
            alert_message = alert_message + "are not the same as your details.\n";
        }

        if (!isBlank(document.delivery_details.delivery_postcode_F.value) && document.delivery_details.delivery_address_line_5_F.value == 'GB') {
          if (!isPostcode(document.delivery_details.delivery_postcode_F.value)) {
            alert_message = alert_message + "Valid Delivery Postcode Format required.\n1. Valid UK postcodes are 5, 6, or 7 characters long.\n2. The first character of a UK postcode must be a character.\n3. The second half of a UK postcode is always the same format: \nnumber, letter, letter (3 characters long).\n\n";
          }
        }
      }
      if (document.delivery_details.gift_message_F.value.length > 240) {
        alert_message = alert_message + "Gift message must be 240 characters or less.\n";
      }
    }
  }
  if (document.delivery_details.weddingorder_F.value == "yes") {
    if (isBlank(document.delivery_details.giver_name_F.value)) {
      alert_message = alert_message + "Giver name required.\n";
    }
  }
  return show_alert();
}


function deliveryDatepicker() {
    if(document.getElementById('noonde_milestone_date_from')) { var noOndStart = document.getElementById('noonde_milestone_date_from').value;}
    if(document.getElementById('noonde_milestone_date_to')) { var noOndEnd = document.getElementById('noonde_milestone_date_to').value;}
    if(document.getElementById('decdel_milestone_date_from')) { var decDelStart = document.getElementById('decdel_milestone_date_from').value;}
    if(document.getElementById('decdel_milestone_date_to')) { var decDelEnd = document.getElementById('decdel_milestone_date_to').value;}
    var firstGreenDaySelected = 'N';
    var greenDaySelected = new Date();
    if(document.getElementById('delivery-datepicker') ) {
      if(document.getElementById('delivery_method_F').value == 'OND') {
        var today = new Date();
        today.setDate(today.getDate());
        //datepicker (calendar) called here as it is called on page load, and also after every ajax change
        $("#delivery-datepicker").datepicker(
        {
          firstDay: 1,
          dateFormat: 'yymmdd',
          minDate: '+1d',
          maxDate: '+3m',
          altField: '#delivery_selected_date_F',
          altFormat: 'yymmdd',
          onSelect: function(dateText, inst){
            var theDate = new Date(Date.parse($(this).datepicker('getDate')));
            //$.log('date selected '+theDate);
            updateSelectedDate(theDate);
            var express = new Date();
            express.setDate(express.getDate() + 2);
            if ((theDate.getDay() != 6) && (theDate > express) ) {
              $('#morndisplay').show();
            }
            else {
              $('#morndisplay').hide();
              document.getElementById('delivery_morning_F').checked = false;
            }
          },
          beforeShowDay: function(thisDate)
          // beforeShowDay is a function that accepts the date as a parameter and returns an array with 
          // [0] being true if selectable, false if not, 
          // [1] being the CSS class to apply, 
          // [2] being an optional popup tooltip.
            {
              var checkDay = [true, '', ''];
              var futureDate = new Date();
              futureDate.setMonth(futureDate.getMonth() + 3);
              if (thisDate <= today) {
                //Past dates - dont display as green
                checkDay[0] = false;
                checkDay[2] = 'Delivery Unavailable';
              } else
              if (thisDate > futureDate) {
                //Future dates - dont display as green
                checkDay[0] = false;
                checkDay[2] = 'Delivery Unavailable';
              } else
              if (($.datepicker.formatDate('yymmdd', thisDate)) >= noOndStart &&
                  ($.datepicker.formatDate('yymmdd', thisDate)) <= noOndEnd) {
                //No OND milestone active on this date
                checkDay[0] = false;
                checkDay[2] = 'Delivery Unavailable';
              } else
              if (($.datepicker.formatDate('yymmdd', thisDate)) >= decDelStart &&
                  ($.datepicker.formatDate('yymmdd', thisDate)) <= decDelEnd) {
                //Decdel (December Delivery) milestone active on this date
                checkDay[0] = false;
                checkDay[2] = 'Delivery Unavailable';
              } else
              if (thisDate.getDay() == 0) {
                // No deliveries on Sundays
                checkDay[0] = false;
                checkDay[2] = 'No deliveries on Sundays';
              } else
              if (thisDate.getDay() == 6) {
                // No morning deliveries on Saturdays
                checkDay[2] = 'No morning deliveries on Saturdays';
              } else
              if (document.getElementById('delivery_green_monday_F')) {
                //Green days
                if ((thisDate.getDay() == 1 && document.getElementById('delivery_green_monday_F').value == 'Y') ||
                   (thisDate.getDay() == 2 && document.getElementById('delivery_green_tuesday_F').value == 'Y') ||
                   (thisDate.getDay() == 3 && document.getElementById('delivery_green_wednesday_F').value == 'Y') ||
                   (thisDate.getDay() == 4 && document.getElementById('delivery_green_thursday_F').value == 'Y') ||
                   (thisDate.getDay() == 5 && document.getElementById('delivery_green_friday_F').value == 'Y')) {
                  //$.log('green '+thisDate+',select green '+greenDaySelected+' '+firstGreenDaySelected);
                  checkDay[1] = 'ui-datepicker-green';
                  checkDay[2] = 'A van already in your postcode';
                }
              }
              return checkDay;
            }
        });
        // Express delivery cut off is midday, so if the time is past midday,
        // the next available delivery day should be the day after tomorrow.
        var midday  = new Date();
        midday.setHours(12);
        midday.setMinutes(0);
        midday.setSeconds(0);
        if (today > midday) {
          if (today.getDay() == 5) {
            $( "#delivery-datepicker" ).datepicker( "option", "minDate", +4 );
          } else {
            $( "#delivery-datepicker" ).datepicker( "option", "minDate", +2 );
          }
        } else if (today < midday && today.getDay() == 5) {
          $( "#delivery-datepicker" ).datepicker( "option", "minDate", +2 );
        }

        //On Saturdays we need to bump up the minimum selectable date by a few days, so customers cannot choose a Monday delivery
        if (today.getDay() == 6) {
          $( "#delivery-datepicker" ).datepicker( "option", "minDate", +3 );
        }
        //On Sundays we need to bump up the minimum selectable date by a few days, so customers cannot choose a Monday delivery
        if (today.getDay() == 0) {
          $( "#delivery-datepicker" ).datepicker( "option", "minDate", +2 );
        }

        //Berrys do not want a default date pre-selected in the datepicker
        $('#delivery-datepicker').datepicker("setDate", null );          
        $("#delivery_selected_date_disp").text(' Please select a delivery date using the calendar below.'); 
        //the datepicker had an unwanted hover class added, so find it and remove it.
        $("#delivery-datepicker").find("td.ui-datepicker-days-cell-over").find("a:first-child").removeClass('ui-state-hover');
      }
    }
}
// Update the page to show the user the date they have currently selected 
function updateSelectedDate(selectedDate) {
  var dateCustomerFormatted = $.datepicker.formatDate(' DD d MM yy', selectedDate);
  $("#delivery_selected_date_disp").text(dateCustomerFormatted); 
  var dateEmailFormatted = $.datepicker.formatDate('DD d MM yy', selectedDate);
  document.getElementById('delivery_selected_date_disp_F').value = dateEmailFormatted; 
  var dateDayOfWeek = $.datepicker.formatDate('D', selectedDate);
  document.getElementById('delivery_selected_sat_F').value = dateDayOfWeek;
}

$(document).ready(function() {
 deliveryDatepicker();
});

function changeBasketTab(nextTab) {
  //alert($( "#checkoutBasket" ).tabs( "option", "cache" ));
  $("#checkoutBasket").tabs( 'select' , nextTab);
}

