function ReadingListApi(n){var t=this;t._apiEndpointUrl=(window.location.href.indexOf("/oceans")>-1?"/oceans":window.location.href.indexOf("/expeditions")>-1?"/expeditions":"")+"/goodreads/GetRecommendedBooksByCruiseLite";t._cruiseid=JSON.stringify({cruiseid:n});t.getReadingList=function(n){$.ajax({contentType:"application/json; charset=utf-8",dataType:"json",type:"POST",url:t._apiEndpointUrl,data:t._cruiseid,success:function(t){n(t);$("#reading-list-loading-animation").empty()},failure:function(){console.log("failed")}})}}function ReadingListBook(n){var t=this;t._init=function(){t.imageUrl=n.imageUrl;t.title=n.title;t.author=n.author;t.avgRating=n.avgRating;t.ratingCount=n.ratingCount;t.link=n.link;t.description=n.description;t.genre=n.genre;t.descriptionHasOverflow=ko.observable(!1);t.timeTakenToQuery=n.TimeTakenToQuery};t._getAmount=function(n){if(n+1<t.avgRating)return"full";if(n+1>Math.ceil(t.avgRating))return"empty";var i=t.avgRating-Math.floor(t.avgRating);return i>=0&&i<=.25?"25":i>.25&&i<.75?"half":i>=.75?"75":void 0};t.getStars=function(){return[{},{},{},{},{}].map(function(n,i){return n.amount=t._getAmount(i),n})};t._init()}function ReadingListViewModel(){var n=this;n.onRenderBook=function(t,i){var u=n._findColumnNode(t),r=$(u).find(".book-card"),f=setInterval(function(){n._isDescriptionRendered(r,i)&&(n._setDescriptionOverflowFlag(r,i),clearInterval(f))},500);$(window).on("resize",function(){n._setDescriptionOverflowFlag(r,i)})};n._isDescriptionRendered=function(n,t){var i=n.find(".book-card-description").text().trim();return typeof t.description!="string"||i===t.description};n._setDescriptionOverflowFlag=function(n,t){var i=n.find(".book-card-description").height(),r=n.find(".book-card-description span").height();t.descriptionHasOverflow(i<r)};n._findColumnNode=function(n){return n.filter(function(n){return $(n).find(".book-card").length>0})[0]};n.books=[]}function ReadingList(n){var t=this;t.api=n;t.viewModel=new ReadingListViewModel;t.bind=function(n){return t.element=n,t.$element=$(n),t.api.getReadingList(function(n){t.viewModel.books=n.map(function(n){return new ReadingListBook(n)});ko.applyBindings(t.viewModel,t.element);t.$element.addClass("loaded")}),t}}