jQuery(document).ready(function($) {
  // We need to be able to kill of AJAX requests if we start a new one
  // This global object with have the current AJAX request assigned to it, meaning we can abot it before starting a new one
  var $ajax_request;
  
  // Start the homepage slideshow
  $('#home-slideshow').cycle({timeout: 8000});
  
  $("div.right-content > p > img").unwrap();
  
  $(this).find("ul#nav > li").each(function () {  
                    
    var maxSubNavWidth = 0;
    var maxSubSubNavWidth = 0;
    
    $(this).children("ul.sub-nav").css("display", "block");
    
    $(this).find("ul.sub-sub-nav").css("display", "block");
    
    //alert($(this).width());
    
    $(this).find("ul.sub-nav > li > a").each(function () {
  
      if($(this).width() > maxSubNavWidth)
      {
        maxSubNavWidth = $(this).width();
      }
      
        });
    
    
    $(this).find("ul.sub-nav > li > ul.sub-sub-nav > li > a").each(function () {
      
      if($(this).width() > maxSubSubNavWidth)
      {
        maxSubSubNavWidth = $(this).width();
      }
      
        });
    
    
    $(this).find("ul.sub-nav > li > a").width(maxSubNavWidth);
    
    $(this).find("ul.sub-sub-nav > li > a").width(maxSubSubNavWidth);
    
    $(this).children("ul.sub-nav").css("display", "none");
    
    $(this).find("ul.sub-sub-nav").css("display", "none");
    
  
  }); 
  
  
  
  
  
  
  $("ul#nav > li").mouseenter(function() {  
                    
    $(this).children("ul.sub-nav").css("display", "block");
    
    $(this).children("ul#nav > li > a").addClass("hover");              
  });
   
  
  //When mouse is removed  
  $("ul#nav > li").mouseleave(function(){
                    
    $(this).children("ul.sub-nav").css("display", "none");
    
    $(this).children("ul#nav > li > a").removeClass("hover");
     //$(this).stop().animate({height:'50px'},{queue:false, duration:600, easing: 'easeOutBounce'})  
  });  
  
  
  
  $("ul.sub-nav > li").mouseenter(function(){  
    
    $(this).children("ul.sub-sub-nav").css("display", "block");
    
    
    $(this).children("ul.sub-nav > li > a").addClass("hover");
    
    //$(this).stop().animate({height:'150px'},{queue:false, duration:600, easing: 'easeOutBounce'})  
  });  
  
  //When mouse is removed  
  $("ul.sub-nav > li").mouseleave(function(){
                    
    $(this).children("ul.sub-sub-nav").css("display", "none");
    
    $(this).children("ul.sub-nav > li > a").removeClass("hover");
     //$(this).stop().animate({height:'50px'},{queue:false, duration:600, easing: 'easeOutBounce'})  
  });  


  
  
  
  
  
  
  
  
  /**
   * Request a callback
   */
  $('#request-callback form').live('submit', function(event) {
    event.preventDefault();
    
    var form = $('#request-callback form');
    var thankyou = $('#request-callback-thanks');
    thankyou.hide();
    
    // Validate the data
    error = false;
    error_required = false;
    error_email = false;
    error_phone = false;
    error_time = false;
    
    // First, check the required fields have been filled in
    if($('#field_first_name').val() == '') {
      $('#field_first_name').addClass('error');
      error_required = true;
    } else $('#field_first_name').removeClass('error');
    /*  if($('#field_last_name').val() == '') {
      $('#field_last_name').addClass('error');
      error_required = true;
    } else $('#field_last_name').removeClass('error'); */
    if($('#field_postcode').val() == '') {
      $('#field_postcode').addClass('error');
      error_required = true;
    } else $('#field_postcode').removeClass('error');
    if(!isValidEmail($('#field_email').val())) {
      $('#field_email').addClass('error');
      error_email = true;
    } else $('#field_email').removeClass('error');
    if($('#field_call_between_start').val() == '') {
      $('#field_call_between_start').addClass('error');
      error_required = true;
    } else $('#field_call_between_start').removeClass('error');
    if($('#field_call_between_end').val() == '') {
      $('#field_call_between_end').addClass('error');
      error_required = true;
    } else $('#field_call_between_end').removeClass('error');
    
    // Do we have at least one contact number?
    var tel_work = $('#field_tel_work').val();
    var tel_home = $('#field_tel_home').val();
    var tel_mobile = $('#field_tel_mobile').val();
    if(tel_work == '' && tel_home == '' && tel_mobile == '') {
      error_required = true;
      error_phone = true;
      $('#field_tel_work').addClass('error');
      $('#field_tel_home').addClass('error');
      $('#field_tel_mobile').addClass('error');
    } else {
      $('#field_tel_work').removeClass('error');
      $('#field_tel_home').removeClass('error');
      $('#field_tel_mobile').removeClass('error');
      
      // Depending on what was filled in - Is it valid
      if(tel_work != '') {
        if(!isValidPhoneNumber(tel_work)) {
          error_phone = true;
          $('#field_tel_work').addClass('error');
        } else $('#field_tel_work').removeClass('error');
      }
      if(tel_home != '') {
        if(!isValidPhoneNumber(tel_home)) {
          error_phone = true;
          $('#field_tel_home').addClass('error');
        } else $('#field_tel_home').removeClass('error');
      }
      if(tel_mobile != '') {
        if(!isValidPhoneNumber(tel_mobile)) {
          error_phone = true;
          $('#field_tel_mobile').addClass('error');
        } else $('#field_tel_mobile').removeClass('error');
      }
    }
    
    // Validate the time
    var start = $('#field_call_between_start').val();
    var end = $('#field_call_between_end').val();
    
    if(end <= start) {
      error_time = true;
      $('#field_call_between_start').addClass('error');
      $('#field_call_between_end').addClass('error');
    } else {
      $('#field_call_between_start').removeClass('error');
      $('#field_call_between_end').removeClass('error');
    }
    
    if(error || error_required || error_phone || error_email) {
      $('#request-callback .error-message').html('').slideDown();
      if(error_required) $('#request-callback .error-message').append('Please fill in the mandatory fields<br />');
      if(error_phone) $('#request-callback .error-message').append('Please fill in a valid UK number<br />');
      if(error_email) $('#request-callback .error-message').append('Please fill in a valid email address<br />');
      if(error_time) $('#request-callback .error-message').append('The end time must be at least one hour after the start time<br />');
    } else {
      $.ajax({
        url: '/base/custom/sendCallbackRequest.aspx',
        type: 'post',
        data: $(this).serialize(),
        success: function(response) {
          form.slideUp();
          thankyou.slideDown();
        }
      });
    }
    
    return false;
  });
  
  $('#feedback-form').live('submit', function(event) {
    event.preventDefault();
    
    // Get a copy of the form and thank you think, as in the AJAX request, $(this) won't work
    var form = $('#feedback-form');
    var thankyou = $('#feedback-form-thankyou');
    
    // Do all the validation
    var error = false;
    
    if($('#field_name').val() == '') {
      $('#field_name').addClass('error');
      error = true;
    } else $('#field_name').removeClass('error');
    if(!isValidEmailAndNotEmpty($('#field_email').val(), false)) {
      $('#field_email').addClass('error');
      error = true;
    } else $('#field_email').removeClass('error');
    if($('#field_suggestion').val().trim() == '') {
      $('#field_suggestion').addClass('error');
      error = true;
    } else $('#field_suggestion').removeClass('error');
    
    // If there where no errors, submit the form
    if(error) {
      
    } else {
      $.ajax({
        url: form.attr('action'),
        type: 'post',
        data: $(this).serialize(),
        success: function(response) {
          form.slideUp();
          thankyou.slideDown();
        }
      });
    }
    
    return false;
  });
  
  // In the XSLT files, we need a white space in the textarea, otherwise it breaks
  // So lets remove that white space now
  // $('#field_suggestion').val($('#field_suggestion').val().trim());
  
  function abortAjaxRequests() {
    // First, kill off any other current requests
    if($ajax_request != undefined) $ajax_request.abort();
    
    // Then, we need to hide the error message
    $('#overlay-message-heading').text('');
    $('#overlay-message-message').text('');
    $('#overlay-message').hide();
  }
  
  /**
   * Tabed content for My Carlyle
   */
  $('.agreement-tabs .tab').click(function(event) {
    // We don't want the click to actually happen
    event.preventDefault();
    
    var $link = $(this);
    var $agreementNumber = $link.data("agreementNumber");
    
    // Make an AJAX request to get the settlement and drop it in
    $.ajax({
      url: $(this).attr('href'),
      type: 'post',
      dataType: 'json',
      data: {'agreementNumber': $agreementNumber},
      success: function(response) {
        if(response.error) {
          $('#agreement-details-error h2').text("Error");
          $('#agreement-details-error p').text(response.message);
          
          $('#agreement-details').hide();
          $('#agreement-details-error').show();
        } else {
          $('#agreement-vehicle-description').text(response.carDescription);
          $('#agreement-vehicle-registration-date').text(response.carRegistrationDate);
          $('#agreement-vehicle-registration').text(response.carRegistration);
          $('#agreement-vehicle-renewal-date').text(response.carInsuranceRenewalDate);
          
          $('#agreement-bank-name').text(response.bankName);
          $('#agreement-bank-account-number').text(response.bankAccountNumber);
          $('#agreement-bank-sortcode').text(response.bankSortCode);
          
          $('#agreement-number').text(response.agreementNumber);
          $('#agreement-start-date').text(response.startDate);
          $('#agreement-primary-status').text(response.primaryStatus);
          $('#agreement-next-payment-date').text(response.nextPaymentDueDate);
          $('#agreement-next-payment-amount').text(response.nextPaymentAmount);
          $('#agreement-remaining-payments-count').text(response.remainingPaymentsCount);
          $('#agreement-final-payment-date').text(response.finalPaymentDate);
          $('#agreement-final-payment-amount').text(response.finalPaymentAmount);
          $('#agreement-arrears-amount').text(response.arrearsAmount);
          
          // Need to update the links as well, as they have the agreement number
          $('#link-bank-details').attr('data-agreementnumber', response.agreementNumber);
          $('#link-vehicle-details').attr('data-agreementnumber', response.agreementNumber);
          $('#link-get-settlement').attr('data-agreementnumber', response.agreementNumber);
          
          $('#agreement-details').show();
          $('#agreement-details-error').hide();
        }
        
        doCufon();
        
        // Update the tabs
        // Start by removing the selected tab and then add it to this one
        $('.agreement-tabs .tab').removeClass("selected-tab");
        $link.addClass("selected-tab");
      },
      error: function(xhr, status, error) {
        // We're in the error block, so something has gone wrong
        // 1. We're returned HTML, not JSON, because we're redirected back to the login page (session timeout)
        // 2. There was an error, which returns a status code of 500
        if(xhr.status == 200) {
          $('#agreement-details').html("<div class=\"column middle no-divider wide\"><h2>Session timed out</h2><p>Sorry, you will need to login again to access this. If you're not automatically redirected within 5 seconds, please <a href=\"/login.aspx\">click here</a><p>");
          
          setTimeout(function() {
            window.location = "/login.aspx";
          }, 5000);
        } else {
          $('#agreement-details').html("<div class=\"column middle no-divider\"><h2>Error</h2><p>Sorry, there was an error, please try again</p></div>");
          
          $('#overlay-message-heading').text('Sorry, an unknown error occured');
          $('#overlay-message-message').text('Please try again.');
        }
        
        doCufon();
        
        $('.agreement-tabs .tab').removeClass("selected-tab");
        $link.addClass("selected-tab");
      }
    });
  });
  
  /**
   * Overlays for My Carlyle
   * When we click an overlay link, we make an AJAX call to the Umbraco server
   * This, with the help of the SSO server return a JSON object whichw e then add to the HTML
   * These overlays already exist within the DOM and we show and hide them as necessary
   * Forms are then submitted with AJAX to keep the user on the same page
   */
  $('#my-carlyle-content .overlay').live('click', function(event) {
    event.preventDefault();
    
    abortAjaxRequests();
    
    var $link = $(this);
    var $agreementNumber = $link.data("agreementNumber");
    
    // Instantly show the shaded background, so they can't click on anything else
    $('.overlay-container, .overlay-wrap, .overlay-box, .overlay-box-content .loading-gif').show();
    
    $ajax_request = $.ajax({
      url: $link.attr('href'),
      type: 'post',
      dataType: 'json',
      data: {'agreementNumber': $agreementNumber},
      success: function(response, status, xhr) {
        $('.overlay-box-content .loading-gif').hide();
        
        if(response.error) {
          $('#overlay-message-heading').text('Error');
          $('#overlay-message-message').text(response.message);
          
          $('#overlay-message').show();
        } else {
          if(response.overlay == 'customer-details') {
            $('#overlay-address1').val(response.address1);
            $('#overlay-address2').val(response.address2);
            $('#overlay-address3').val(response.address3);
            $('#overlay-county').val(response.county);
            $('#overlay-postcode').val(response.postcode);
            $('#overlay-tel-home').val(response.tel_home);
            $('#overlay-tel-mobile').val(response.tel_mobile);
            $('#overlay-tel-work').val(response.tel_work);
            
            $('#overlay-update-customer-details').show();
          } else if(response.overlay == 'vehicle-details') {
            $('#overlay-vehicle-insurance-date').val(response.insuranceDate);
            $('#overlay-vehicle-agreement-number').val(response.agreementNumber);
            
            $('#overlay-update-vehicle-details').show();
          } else if(response.overlay == 'bank-details') {
            $('#overlay-bank-name').val(response.bankName);
            $('#overlay-bank-account').val(response.bankAccount);
            $('#overlay-bank-sortcode').val(response.bankSortcode);
            $('#overlay-bank-agreement-number').val(response.agreementNumber);
            
            $('#overlay-update-bank-details').show();
          } else if(response.overlay == 'settlement-figure') {
            $('#overlay-settlement-agreement-number').val(response.agreementNumber);
            
            $('#overlay-get-settlement-figure').show();
          }
        }
        
        doCufon();
      },
      error: function(xhr, status, error) {
        $('.overlay-box-content .loading-gif').hide();
        
        // We're in the error block, so something has gone wrong
        // 1. We're returned HTML, not JSON, because we're redirected back to the login page (session timeout)
        // 2. There was an error, which returns a status code of 500
        if(xhr.status == 200) {
          $('#overlay-message-heading').text('Session timed out');
          $('#overlay-message-message').html("Sorry, you will need to login again to access this. If you're not automatically redirected within 5 seconds, please <a href=\"/login.aspx\">click here</a>");
          
          setTimeout(function() {
            window.location = "/login.aspx";
          }, 5000);
        } else {
          $('#overlay-message-heading').text('Sorry, an unknown error occured');
          $('#overlay-message-message').text('Please try again.');
        }
        
        $('.overlay-container, #overlay-message').show();
        doCufon();
      }
    });
  });
  
  $('form.overlay').live('submit', function(event) {
    event.preventDefault();
    
    $errors = {};
    
    // Do we need to apply validation to this?
    if($(this).parents('#overlay-update-bank-details').length > 0) {
      vaidateBankDetails();
    }
    
    if($errors.sortcode || $errors.accountNumber) {
      $('.overlay-content:visible .error').remove();
      $('.overlay-content:visible').prepend("<p class=\"error\">The sort code needs to be 6 digits and the account number needs to be 7 or 8 digits long</p>");
    } else {
      $.ajax({
        url: $(this).attr('action'),
        type: 'post',
        dataType: 'json',
        data: $(this).serialize(),
        success: function(response) {
          $('#overlay-message-heading').text(response.heading);
          $('#overlay-message-message').text(response.message);
          
          $('.hidden-overlay').hide();
          $('#overlay-message').show();
          
          doCufon();
        },
        error: function(response) {
          $('.overlay-content:visible .error').remove();
          $('.overlay-content:visible').prepend("<p class=\"error\">Sorry, there was an error, please try again</p>");
          
          doCufon();
        }
      });
    }  
  });

    $('.overlay-box .close-btn, .overlay-box-mini .close-btn').live('click', function (event) {
    event.preventDefault();

    $('.overlay-container, .hidden-overlay, .overlay-wrap, .overlay-wrap > div').hide();
  });
  
  /**
   * Get settlement figure
   * What we do here depends on what option the user picks
   */
  $('.get-settlement input.settlement').live('change', function() {
    if($(this).hasClass('top-three')) {
      $('#get-settlement-figure-link').hide();
      $('#contact-me-link, #no-finance-link').show();
    } else {
      $('#contact-me-link, #no-finance-link').show().hide(); // For some reason, the last link appears if one of the previous ones was visible - No idea why, maybe 2 is better then 1?
      $('#get-settlement-figure-link').show();
    }
    
    doCufon();
  });
  
  $('#proceed-options a').live('click', function(event) {
    event.preventDefault();
    
    // Build up the data to send to the server
    var data = {
      settlement:      $('input:radio[name=settlement]:checked').val(),
      link:        $(this).attr('id'),
      agreementNumber:  $('#overlay-settlement-agreement-number').val(),
      getSettlementFigure:1, // So we know we're processing this page instead of viewing it for the first time
      letter:        false
    };
    
    $('#overlay-get-settlement-figure').hide();
    $('.overlay-box-content .loading-gif').show();
    
    // Make the request to the server
    $.ajax({
      url: "/mycarlyle/getsettlementfigure.aspx",
      type: 'post',
      data: data,
      dataType: 'json',
      success: function(response) {
        $('.overlay-box-content .loading-gif').hide();
        
        if(response.error) {
          $('#overlay-message-heading').text('Error');
          $('#overlay-message-message').text(response.message);
          
          $('#overlay-message').show();
        } else {
          $('#overlay-the-settlement-balance').text(response.balance);
          $('#overlay-the-settlement-rebate').text(response.rebate);
          $('#overlay-the-settlement-amount').text(response.settlementAmount);
          
          $('#overlay-the-settlement-valid-until').text(response.validUntil);
          $('#overlay-the-settlement-next-payment-amount').text(response.nextPaymentAmount);
          $('#overlay-the-settlement-next-payment-date').text(response.nextPaymentDate);
          
          $('#overlay-the-settlement-agreement-number').val("" + response.agreementNumber);
          $('#overlay-the-settlement-id').val("" + response.settlementID);
          
          $('#overlay-get-settlement-figure').hide();
          $('#overlay-the-settlement-figure').show();
        }
      },
      error: function(xhr, status, error) {
        $('.overlay-box-content .loading-gif').hide();
        
        // We're in the error block, so something has gone wrong
        // 1. We're returned HTML, not JSON, because we're redirected back to the login page (session timeout)
        // 2. There was an error, which returns a status code of 500
        if(xhr.status == 200) {
          $('#overlay-message-heading').text('Session timed out');
          $('#overlay-message-message').html("Sorry, you will need to login again to access this. If you're not automatically redirected within 5 seconds, please <a href=\"/login.aspx\">click here</a>");
          
          setTimeout(function() {
            window.location = "/login.aspx";
          }, 5000);
        } else {
          $('#overlay-message-heading').text('Sorry, an unknown error occured');
          $('#overlay-message-message').text('Please try again.');
        }
        
        $('.overlay-container, #overlay-message').show();
        doCufon();
      }
      
    });
  });
  
  $('#written-settlement-link').live('click', function(event) {
    event.preventDefault();
    
    // Build up the data to send to the server
    var data = {
      settlementId:    $('#overlay-the-settlement-id').val(),
      agreementNumber:  $('#overlay-the-settlement-agreement-number').val(),
      getWrittenSettlement: 1
    };
    
    // Make the request to the server
    $.ajax({
      url: "/mycarlyle/getwrittensettlement.aspx",
      type: 'post',
      dataType: 'json',
      data: data,
      success: function(response) {
        $('#overlay-message-heading').text(response.heading);
        $('#overlay-message-message').text(response.message);
        
        // Don't want to append lots of buttons!
        if($('#overlay-message .close-btn.overlay-button').length == 0) {
          $('#overlay-content').append('<div class="clear">&nbsp;</div><a href="#" class="close-btn overlay-button"><img src="/images/btn-close.jpg" alt="" /></a>');
        }
        
        $('.hidden-overlay').hide();
        $('#overlay-message').show();
        
        doCufon();
      },
      error: function(response) {
        
      }
    });
  });
});

function isValidPhoneNumber(phonenumber){
  if(phonenumber.length < 11) return false;
  
  if (phonenumber != "") {
    var goodChars = "+- 1234567890()"
    for (i = 0; i < phonenumber.length; i++){   
        var c = phonenumber.charAt(i);
        if (goodChars.indexOf(c) < 0) return false;
    }
    return true;
  } else {
    return false;
  }
}
function isValidEmail(email) {
  // Not a required field, so allow an empty string
  if(email == '') return true;
  
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
  // search email text for regular exp matches
  if (email.search(validRegExp) == -1) {
    return false;
  }
  return true; 
}
function isValidEmailAndNotEmpty(email) {
  // Not a required field, so allow an empty string
  if(email == '') return false;
  
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
  // search email text for regular exp matches
  if (email.search(validRegExp) == -1) {
    return false;
  }
  return true; 
}

var errorMessages = new Object;
errorMessages.directionsTitle = "Sorry";
errorMessages.directionsMessage = "Sorry, we couldn't find anything for your search. Please try again";

function doCufon() {
  Cufon.replace('h1, h2 , h3, #nav li a', {hover: true });
}
