/**
 * <code>reloadDispoSelects</code>
 * Reloads the disponibility select.
 * @param productId : the product id.
 */
function reloadDispoSelects(productId) {
  var dispoRegExp = new RegExp("(.+?)-(.+?)-(.+?)-(.+?)-(.+)");
  var dispoValue = $("#ipt_disponibility").val();
  $("#dispoSelect").load("/no-cache/elements/date-tarif-ajax.jsp", {pid:productId, dp:$("#depCityCode").val(), date:dispoValue.replace(dispoRegExp, "$1/$2/$3"), nights: dispoValue.replace(dispoRegExp, "$4,$5")});
}


/**
 * <code>switchTab</code>
 * Switches the display to another tab.
 * @param i : the selected tab number, starting from 1.
 */
function switchTab(i) {
  $("#fc-tab")
    .attr("class", "fc-navigation fc-tab" + i)
    .find("a").addClass("off").removeClass("on")
    .filter(":eq(" + eval(i - 1) + ")").addClass("on").removeClass("off");
  $("#" + $("#fc-tab a.on").attr("name")).show().siblings(".tab").hide();
}

function sortOpinions(sort, criteria, sortValue) {
    var claz;

    if (sort == 'stv') {
        $('.av-table').replaceWith(('<img src=\"/csvweb/images/ajax-loader-big.gif\" style=\"padding-left:460px; padding-top:80px;\" alt=\"\" title=\"\" / id=\"table-loader\">'));
        $.get("/elements/ajax-opinions.jsp?" + criteria + "&st=SORT_OPINION_CP_ASC&stv=" + sortValue, function(data) {
          $('#table-loader').replaceWith(data);
          $("#av .tooltip").wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});
        });
    } else if (sort == 'mcat') {
        claz = $('#' + sortValue).children(':first').attr('class') == 'up' ? 'down' : 'up';
        $('.' + sort).removeClass('on').children().removeClass('up').removeClass('down');
        $('#' + sortValue).addClass('on').children(':first').addClass(claz);
        $('.av-table').replaceWith(('<img src=\"/csvweb/images/ajax-loader-big.gif\" style=\"padding-left:460px; padding-top:80px;\" alt=\"\" title=\"\" / id=\"table-loader\">'));
        $.get("/elements/ajax-opinions.jsp?" + criteria + buildSortParam(sort, claz, sortValue), function(data) {
          $('#table-loader').replaceWith(data);
          $("#av .tooltip").wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});
        });
    } else {
        claz = $('#' + sort).children(':first').attr('class') == 'up' ? 'down' : 'up';
        $('.av-table').replaceWith(('<img src=\"/csvweb/images/ajax-loader-big.gif\" style=\"padding-left:460px; padding-top:80px;\" alt=\"\" title=\"\" / id=\"table-loader\">'));
        $.get("/elements/ajax-opinions.jsp?" + criteria + buildSortParam(sort, claz), function(data) {
          $('#table-loader').replaceWith(data);
          $('#' + sort).addClass('on').children(':first').addClass(claz);
          $("#av .tooltip").wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});
        });
    }
}

function buildSortParam(sort, dir, sortValue) {
    var st = '';
    if (sort == 'cp') {
        if (dir == 'up') {
            st = '&st=SORT_OPINION_CP_DESC';
        } else {
            st = '&st=SORT_OPINION_CP_ASC';
        }
    } else if (sort == 'mark') {
        if (dir == 'up') {
            st = '&st=mark_value_desc';
        } else {
            st = '&st=mark_value_asc';
        }
    } else if (sort == 'date') {
        if (dir == 'up') {
            st = '&st=mark_up_date_desc';
        } else {
            st = '&st=mark_up_date_asc';
        }
    } else if (sort == 'mcat') {
        if (dir == 'up') {
            st = '&st=mark_cat_asc';
        } else {
            st = '&st=mark_cat_desc';
        }
        st += "&stv=" + sortValue;
    }
    return st;
}

/**
 * Nagigator recursive method.
 * Create groups based on a number of elements to display.
 *
 * @param {Number} page The number of start page
 * @param {Number} nbDisplay The number of item into page
 * @param {String} prefix The prefix name of add classes
 */
$.fn.navigator = function(page, nbDisplay, prefix) {
  var nbDiv = 2 + (page > 0 ? 1 : 0);
  this.nextAll("li:lt(" + (nbDisplay - nbDiv) + ")").andSelf().addClass(prefix + page);
  if (this.nextAll("li").length > 0) {
    this.nextAll("li:lt(" + (nbDisplay - nbDiv) + ")").filter(":last").next().navigator((page + 1), nbDisplay, prefix);
  }
};

/**
 * showPage.
 * Hide all pages and show only page with index parameter.
 *
 * @param {Number} index
 */
$.fn.showPage = function(index) {
  $(this).find("li").hide().end().find(".page-" + index).show();
};

/** DOM is ready */
$(function() {

  // Set variables
  var diapoPics = $(".pics-navigator"),
      diapoNavPrev = $("#prev"),
      diapoNavNext = $("#next"),
      diapoThumb = diapoPics.find("li"),
      diapoNbDisplay = 12,
      diapoIndex = 0;

  // When over maximum items show next nav button,
  // and hide slideshow thumbnails.
  if (diapoThumb.length > diapoNbDisplay) {
    diapoPics.children(":first").navigator(diapoIndex, diapoNbDisplay, "page-");
    diapoPics.showPage(diapoIndex);
    diapoNavNext.show();

    /** Add click event for previous nav button */
    diapoNavPrev.find(".link").click(function() {
      diapoIndex -= 1;
      diapoPics.showPage(diapoIndex);
      diapoNavNext.show();

      // Hide previous button when is start page
      if (diapoIndex === 0) {
        diapoNavPrev.hide();
      }
    });

    /** Add click event for next nav button */
    diapoNavNext.find(".link").click(function() {
      diapoIndex += 1;
      diapoPics.showPage(diapoIndex);
      diapoNavPrev.show();

      // Hide button next when is last page
      if (diapoPics.find("li:last").is(":visible")) {
        diapoNavNext.hide();
      }
    });
  }

  /** Initialize cycle jQuery pluin */
  $("#slideshow").cycle({
    fx:     "fade",
    speed:  "slow",
    timeout: 10000,
    cleartype:  1,
    pager:  "#nav",
    fit: 1,
    containerResize: 0,
    pagerAnchorBuilder: function(idx, slide) {
      return "#nav li:eq(" + (idx) + ") a";
    }
  });

  $("#submitDevis").click(function() {
    switchTab(4);
    $("#bk").css("margin-left", "7px");
    $("#bk .bk-right").show();
    $.scrollTo("#fc-tab", 800);
    return false;
  });

  $("#infos-pratiques").click(function() {
    switchTab(3);
    $.scrollTo("#fc-tab", 800);
    return false;
  });

  $(".fc-checkout").find(".avis a").click(function() {
    switchTab(1);
    $("#bk").show();
    $("#bk").css("margin-left", "150px");
    $("#bk .bk-right").hide();
    $.scrollTo("#fc-tab", 800);
    return false;
  });
  $(".fc-checkout").find(".description a").click(function() {
    switchTab(2);
    $("#bk").show();
    $("#bk").css("margin-left", "150px");
    $("#bk .bk-right").hide();
    $.scrollTo("#fc-tab", 800);
    return false;
  });

  $(".fc-checkout").find(".seePrices").click(function() {
    switchTab(4);
    $("#bk").css("margin-left", "7px");
    $("#bk .bk-right").show();
    $.scrollTo("#fc-tab", 800);
    return false;
  });

  $("#fc-tab a")
    .click(function(){
    var id=$("#fc-tab a").index(this) + 1;
    switchTab(id);
    if (id === 1 || id === 2) {
      $("#bk").show();
      $("#bk").css("margin-left", "150px");
      $("#bk .bk-right").hide();
    }
    else if (id === 4) {
      $("#bk").css("margin-left", "7px");
      $("#bk .bk-right").show();
    }
    return false;
    }).filter(".on").click();

  // Expert opinions / Destination info tab
  $("#date").addClass('on').children().addClass('up');
  $("#cpSort").labelValue();
  $("#av .tooltip").wTooltip({fadeIn: 350, offsetY: 15,offsetX: -15});

  function changeLoaderImage(){
    $("#submit").hide();
    $(".loader").show();
  }

  $('#submit').live('click', function() {
    var form = document.reservationForm,
        channel = $("#channelCode").attr("value");

    if(channel !== "") {
      if ($.validateResform()) {
          form.submit();
          changeLoaderImage();
      }
    } else {
       jAlert("Choisissez l'agence la plus proche de chez vous.", "Erreur de saisie");
    }
    return false;
  });

  loadLogin();
  loadFavorites();
  loadBookingChannelData();
  $.fn.displayDispoInfo();

});

