var ReevooMark = {_segment: "all"};
ReevooMark.init = function(settings) {
  this.settings = settings;

  this.setup_tabs();
  this.setup_tab_links()
  this.setup_helpfulness();
  this.setup_pagination();
  this.setup_other_locales_pagination();
  this.setup_segments();
  this.setup_sorting();
  this.setup_disclaimer();
  this.setup_ask_an_owner_sanity_check();
  this.setup_ask_an_owner_form_links();
};

ReevooMark.sort_order = function(){
  return $("#sort-filter").attr("value");
}

ReevooMark.segment = function(){
  if(this.settings.segments[this._segment]){
    return this.settings.segments[this._segment];
  }else{
    return this._segment;
  }
}

ReevooMark.review_count = function(){
  return $('#reviews .review').length;
}

ReevooMark.refresh_content = function(){
  ReevooMark.update_reviews("Loading&hellip;");

  var data = {product_group_id: this.settings.product_group_id, retailer: this.settings.retailer, offset: 0, sort_by: this.sort_order(), segment: this.segment()};
  $.getJSON(this.settings.reviews_url, data, function(data) {
    ReevooMark.settings.review_count = data.review_count;
    $('h3.summary').html(data.review_summary);
    ReevooMark.update_reviews(data,false);
    ReevooMark.toggle_more_reviews_button();
  });
}

ReevooMark.load_more_reviews = function(){
  var data = {product_group_id: this.settings.product_group_id, retailer: this.settings.retailer, offset: this.review_count(), sort_by: this.sort_order(), segment: this.segment()};

  $.getJSON(this.settings.reviews_url, data, function(data) {
    ReevooMark.update_reviews(data,true);
    ReevooMark.toggle_more_reviews_button();
  });
}

ReevooMark.update_reviews = function(data,append) {
  var ready_to_buy = $('#ready-to-buy')
  $('#reviews')[append ? 'append' : 'html'](data.html);
  if (!append && ready_to_buy.length) {
    $('#reviews').append(ready_to_buy);
    ReevooMark.setup_tab_links();
  }
  ReevooMark.setup_disclaimer();
}

ReevooMark.toggle_more_reviews_button = function() {
  if(this.review_count() >= this.settings.review_count)
    $('#show_more_reviews').hide();
  else
    $('#show_more_reviews').show();
}

ReevooMark.sort_reviews = function(){
  this.refresh_content();
};

ReevooMark.segment_changed = function(segment_id){
  $(".filters #segments-filter").attr("value", segment_id);

  this._segment = segment_id;
  ReevooMark.refresh_content();
};

ReevooMark.update_segment_scores = function(segment_id){
  $("#reviewer_segments ul.segment_list a.selected").removeClass("selected");
  $("div.segment_scores.selected").removeClass("selected");

  $("#reviewer_segments ul.segment_list a[href$=#segment-"+segment_id+"]").addClass("selected");
  $("#segment-"+segment_id).addClass("selected");
}

ReevooMark.setup_pagination = function(){
  $("#reevoomark #reviews").after(
    $("<a id='show_more_reviews'>"+ReevooMark.settings.more_link_text+" <span></span></a>").click(function(){ ReevooMark.load_more_reviews(); })
  )
  ReevooMark.toggle_more_reviews_button();
};

ReevooMark.setup_other_locales_pagination = function(){
  var locales = ReevooMark.settings.others.locales;
  var setup_reviews_button = function(locale) {
      $("#reviews-"+locale+' .reviews').after(
        $("<a class='more_reviews' id='show_more_reviews-"+locale+"'>"+ReevooMark.settings.others.more_link_text[locale]+" <span></span></a>").click(function(){
          ReevooMark.load_more_reviews_for_locale(locale);
        })
      )
      ReevooMark.toggle_more_reviews_button_for_locale(locale);
  }
  for(var i=0;i<locales.length;i++){
    setup_reviews_button(locales[i]);
  }
};

ReevooMark.load_more_reviews_for_locale = function(locale) {
  var data = {from_locale:locale, product_group_id: this.settings.product_group_id, retailer: this.settings.retailer, offset: $("#reviews-"+locale+" .review").length, sort_order: 'by_recent' };

  $.getJSON(this.settings.others.reviews_url, data, function(data) {
    $('#reviews-'+locale+' .reviews').append(data.html);
    ReevooMark.toggle_more_reviews_button_for_locale(locale);
  });
};

ReevooMark.toggle_more_reviews_button_for_locale = function(locale) {
  if($("#reviews-"+locale+" .review").length >= ReevooMark.settings.others.review_counts[locale])
    $('#show_more_reviews-'+locale).hide();
  else
    $('#show_more_reviews-'+locale).show();
};

ReevooMark.setup_sorting = function(){
  $('.filters #sort-filter').change(function() { ReevooMark.sort_reviews(); });
};

ReevooMark.setup_segments = function(){
  $('#reviewer_segments ul.segment_list a').click(function(e){
    ReevooMark.update_segment_scores($(this).attr("href").replace(/^.*#segment-/, ""));
    $(this).trigger("blur");
    e.preventDefault();
    return false;
  });

  $('.filters #segments-filter').change(function() {
    ReevooMark.segment_changed($(this).attr("value"));
  });

  $("a.more-by-segment").live("click", function(e) {
    if(e.button != 0) { return; } // Left click only
    ReevooMark.segment_changed(this.className.match(/for-(.*)$/)[1]);
  });

  ReevooMark.update_segment_scores("all");
};

ReevooMark.setup_helpfulness = function() {
  $(".helpfulness form a").live("click", function(e) {
    if(e.button != 0) { return; } // Left click only
    var form = $(this).parent("form");
    var data = form.serialize();
    $.ajax({
      type: "POST",
      url: form.attr("action"),
      dataType: "json",
      data: data,
      success: function(response) {
        $("div#review_"+response.review_id+" .helpfulness .vote").html(response.message);
      },
      error: function(request, text_status, error_thrown) {
        var response = eval("("+request.responseText+")");
        $("div#review_"+response.review_id+" .helpfulness .vote").html(response.message);
      }
    })
  });
};

ReevooMark.setup_tabs = function() {
  $("ol.tabs a").click(function() {
    var tab = $(this).attr("href");
    tab = $("#"+tab.split("#")[1]);
    if(tab.length == 0) {
      return true;
    }

    $("ol.tabs li.selected").removeClass("selected");
    $("div.tab.selected").removeClass("selected");


    tab.addClass("selected");
    $(this).parent().addClass("selected");

    this.blur();
    return false;
  });

  var fragment = window.location.hash.replace(/^#open-/, "");
  if(fragment){
    $("ol.tabs a[href$=#"+fragment+"]").trigger("click");
  }
}

ReevooMark.setup_tab_links = function() {
  $("a.change-tab").click(function() {
    var tab = this.className.match(/for-([a-z-]+)/)[1];
    $("ol.tabs a[href$=#"+tab+"]").trigger("click");
  });
}

ReevooMark.setup_disclaimer = function() {
  $('#more-info').hide();
  $('#show-more-info').click(function() {
    $('#more-info').show();
    ReevooMark.setup_tab_links();
    $('#show-more-info').hide();
    return false;
  });
}
ReevooMark.setup_translation = function() {
  $('.other-language').each(function() {
    var from = $(this).attr('lang').split('-')[0];
    var to = $('html').attr('lang').split('-')[0];
    var element = $(this).find('div.reviews');
    var linkContainer = $(this).find(".translate-link-container");
    var link = $("<a></a>")
      .css("cursor", "pointer")
      .text(linkContainer.attr("-data-link-text"))
      .click(function(e) {
        ReevooMark.translate_reviews(element,from,to);
        e.preventDefault();
      });

    linkContainer.append(link);

    google.language.getBranding('translate-'+from);
  });
}

ReevooMark.translate_reviews = function(reviews_div, from, to) {
  var update_func = function(element) {
    return function(result) {
      if (!result.error) {
        element.innerHTML = result.translation;
      }
    }
  }
  reviews_div.find('.review.comment dd.pros, .review.comment dd.cons, .review .reviewer-segment, .review dd em, .review dd span.recommendation').each(function() {
    google.language.translate(this.innerHTML,from,to,update_func(this));
  })
}

ReevooMark.setup_ask_an_owner_sanity_check = function() {
  var form = $("#ask-an-owner-tab form.ask-an-owner"),
      button = form.find("button[type='submit']"),
      question_field = form.find("textarea");

  button.attr("disabled", "disabled");

  question_field
    .keyup(function() {
      $(this).trigger("change");
    })
    .change(function() {
      if($(this).attr("value") !== "") {
        button.removeAttr("disabled");
      } else {
        button.attr("disabled", "disabled");
      }
    });
}

ReevooMark.setup_ask_an_owner_form_links = function() {
  $('a[href="#ask-a-question"]').click(function() {
    $("#ask-a-question textarea").focus();
    $("#ask-a-question")[0].scrollIntoView();
    return false;
  });
}
