function GridScroller(e){function t(){l.scrollLeft()>0?f.addClass("active"):f.removeClass("active");var e=c.width()-l.width();l.scrollLeft()<e?d.addClass("active"):d.removeClass("active")}function r(){t();var r=l.scrollLeft(),n=r+l.width();u.removeClass("js-active").filter(function(e,t){var o=a($(t)),s=i($(t));return!(o>=n||r+1>s)}).addClass("js-active"),e.trigger("scroll-complete")}function n(e,t){l.animate({scrollLeft:a(e)},t?200:0,r)}function a(e){return Math.round(e.position().left)}function i(e){return a(e)+e.width()}function o(e){var t,r=l.scrollLeft(),o=r+l.width();if("right"===e)t=_.find(u,function(e){return o<i($(e))});else if("left"===e){var s=_.find(u.get().reverse(),function(e){return a($(e))<r});if(s){var c=i($(s)),d=c-l.width();t=_.find(u,function(e){return d<=a($(e))})}}t&&n($(t),!0)}var s=$(".grid-scroller-container",e),l=$(".grid-scroller-wrapper",s),c=$(".grid-scroller-row",l),u=$(".grid-scroller-column",c),d=$(".grid-scroller-arrow-right",e),f=$(".grid-scroller-arrow-left",e),h=s.hasClass("photo-container"),p=0,g=0,m=0;if(l.addClass("with-scrolling"),u.each(function(){var e=$(this),t=e.outerHeight(),r=e.outerWidth();g+=r,t>p&&(p=t),r>m&&(m=r)}),h){var v=$(u[0]).outerWidth(),w=u.length;c.width(v*w)}else p>0&&s.height(p),c.width(g);e.is(":visible")&&r(),d.click(function(){return o("right"),!1}),f.click(function(){return o("left"),!1}),h&&$(document).on("keyup",function(e){37===e.which?o("left"):39===e.which&&o("right")}),e.on("show-element",function(e,t,r){n($(t),r)})}!function(e){OT.createNS("OT.paginationGrid");var t=".js-pagination-grid",r="js-pagination-grid-initialized",n=function(e){return e.find(".js-pagination-row")};OT.paginationGrid.updateURLToPageNum=function(e){var t=OT.Common.Helpers.QueryString.parse();t.page=e;var r=OT.Common.Helpers.QueryString.stringify(t);history.pushState({currentPage:e},document.title,location.pathname+"?"+r)},OT.paginationGrid.paginateResults=function(){var a=function(e){return parseInt(e.attr("data-page-size"),10)},i=function(e){return parseInt(e.attr("data-page-current"),10)},o=function(e){return e.find(".js-pagination-prev")},s=function(e){return e.find(".js-pagination-next")},l=function(e){return e.find(".js-pagination-page")},c=function(e){return n(e).length},u=function(e){var t=a(e),r=c(e);return Math.ceil(r/t)},d=function(e,t){var r=i(e),n=r+t;f(e,n)},f=function(e,t){var r=u(e);0>t?t=0:t>=r&&(t=r-1),e.attr("data-page-current",t)},h=function(e){return e.find(".pagination-link")},p=function(t,r){var d=i(t),f=a(t),p=u(t),g=c(t),m=d*f,v=(d+1)*f,w=n(t);w.slice(0,m).hide(),w.slice(m,v).fadeIn(),w.slice(v).hide();var b=o(t);b.removeClass("inactive"),h(b).removeClass("pagination-unavailable"),0>=d&&(b.addClass("inactive"),h(b).addClass("pagination-unavailable"));var y=s(t);y.removeClass("inactive"),h(y).removeClass("pagination-unavailable"),d>=p-1&&(y.addClass("inactive"),h(y).addClass("pagination-unavailable"));var S=l(t),x=S.filter(".current"),T=S.filter("[data-page="+d+"]");x.removeClass("current"),h(x).removeClass("pagination-current"),T.addClass("current"),h(T).addClass("pagination-current"),"undefined"!=typeof r&&"click"===r.type&&e(r.target).hasClass("pagination-link")&&t.trigger("pushURL",d),t.trigger("paginateComplete",[g])},g=function(r){r.preventDefault();var n=e(r.currentTarget).parents(t);d(n,r.data.increment),p(n,r)},m=function(r){r.preventDefault();var n=e(r.currentTarget),a=n.parents(t);f(a,parseInt(n.attr("data-page"),10)),p(a,r)},v=e(t);v.each(function(){var t=e(this);t.hasClass(r)||(t.addClass(r),o(t).on("click",{increment:-1},g),s(t).on("click",{increment:1},g),l(t).on("click",m)),p(t)}),OT.paginationGrid.setPage=m,OT.paginationGrid.setCurrentPage=function(e,t){f(e,t),p(e)}},OT.paginationGrid.unpaginateResults=function(){var r=e(t),a=function(e){var t=n(e);t.css("display","")};r.each(function(){var t=e(this);a(t)})}}(jQuery),function(e){function t(e){return e.length?r(n(),a(e)):!0}function r(e,t){return e.left<=t.left&&t.right<=e.right&&e.top<=t.top&&t.bottom<=e.bottom}function n(){var t=e(window),r={left:t.scrollLeft(),top:t.scrollTop()};return r.right=r.left+t.width(),r.bottom=r.top+t.height(),r}function a(e){var t=e.offset();return t.right=t.left+e.outerWidth(),t.bottom=t.top+e.outerHeight(),t}e(".js-hover-ot-menu").each(function(){var t=e("#"+e(this).attr("data-target"));e(this).hover(function(e){t.addClass("ot-menu-opened")},function(){t.removeClass("ot-menu-opened")})}),e(".js-hover-menu").each(function(){var r=e("#"+e(this).attr("data-target"));e(this).hover(function(){OT.Common.Menus.showMenu(r),r.addClass("menu-top"),t(r.find(e(this).attr("data-containment-test-selector")))||r.toggleClass("menu-top")},function(){OT.Common.Menus.closeAllMenus()})})}(jQuery),!function(e,t){function r(e,t,r){var n=e.children(),a=!1;e.empty();for(var o=0,s=n.length;s>o;o++){var l=n.eq(o);if(e.append(l),r&&e.append(r),i(e,t)){l.remove(),a=!0;break}r&&r.detach()}return a}function n(t,r,o,s,l){var c=!1,u="table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style",d="script, .dotdotdot-keep";return t.contents().detach().each(function(){var f=this,h=e(f);if("undefined"==typeof f||3==f.nodeType&&0==e.trim(f.data).length)return!0;if(h.is(d))t.append(h);else{if(c)return!0;t.append(h),l&&t[t.is(u)?"after":"append"](l),i(o,s)&&(c=3==f.nodeType?a(h,r,o,s,l):n(h,r,o,s,l),c||(h.detach(),c=!0)),c||l&&l.detach()}}),c}function a(t,r,n,a,s){var u=t[0];if(!u)return!1;var f=c(u),h=-1!==f.indexOf(" ")?" ":"　",p="letter"==a.wrap?"":h,g=f.split(p),m=-1,v=-1,w=0,b=g.length-1;for(a.fallbackToLetter&&0==w&&0==b&&(p="",g=f.split(p),b=g.length-1);b>=w&&(0!=w||0!=b);){var y=Math.floor((w+b)/2);if(y==v)break;v=y,l(u,g.slice(0,v+1).join(p)+a.ellipsis),i(n,a)?(b=v,a.fallbackToLetter&&0==w&&0==b&&(p="",g=g[0].split(p),m=-1,v=-1,w=0,b=g.length-1)):(m=v,w=v)}if(-1==m||1==g.length&&0==g[0].length){var S=t.parent();t.detach();var x=s&&s.closest(S).length?s.length:0;S.contents().length>x?u=d(S.contents().eq(-1-x),r):(u=d(S,r,!0),x||S.detach()),u&&(f=o(c(u),a),l(u,f),x&&s&&e(u).parent().append(s))}else f=o(g.slice(0,m+1).join(p),a),l(u,f);return!0}function i(e,t){return e.innerHeight()>t.maxHeight}function o(t,r){for(;e.inArray(t.slice(-1),r.lastCharacter.remove)>-1;)t=t.slice(0,-1);return e.inArray(t.slice(-1),r.lastCharacter.noEllipsis)<0&&(t+=r.ellipsis),t}function s(e){return{width:e.innerWidth(),height:e.innerHeight()}}function l(e,t){e.innerText?e.innerText=t:e.nodeValue?e.nodeValue=t:e.textContent&&(e.textContent=t)}function c(e){return e.innerText?e.innerText:e.nodeValue?e.nodeValue:e.textContent?e.textContent:""}function u(e){do e=e.previousSibling;while(e&&1!==e.nodeType&&3!==e.nodeType);return e}function d(t,r,n){var a,i=t&&t[0];if(i){if(!n){if(3===i.nodeType)return i;if(e.trim(t.text()))return d(t.contents().last(),r)}for(a=u(i);!a;){if(t=t.parent(),t.is(r)||!t.length)return!1;a=u(t[0])}if(a)return d(e(a),r)}return!1}function f(t,r){return t?"string"==typeof t?(t=e(t,r),t.length?t:!1):t.jquery?t:!1:!1}function h(e){for(var t=e.innerHeight(),r=["paddingTop","paddingBottom"],n=0,a=r.length;a>n;n++){var i=parseInt(e.css(r[n]),10);isNaN(i)&&(i=0),t-=i}return t}if(!e.fn.dotdotdot){e.fn.dotdotdot=function(t){if(0==this.length)return e.fn.dotdotdot.debug('No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){e(this).dotdotdot(t)});var a=this;a.data("dotdotdot")&&a.trigger("destroy.dot"),a.data("dotdotdot-style",a.attr("style")||""),a.css("word-wrap","break-word"),"nowrap"===a.css("white-space")&&a.css("white-space","normal"),a.bind_events=function(){return a.bind("update.dot",function(t,s){t.preventDefault(),t.stopPropagation(),l.maxHeight="number"==typeof l.height?l.height:h(a),l.maxHeight+=l.tolerance,"undefined"!=typeof s&&(("string"==typeof s||s instanceof HTMLElement)&&(s=e("<div />").append(s).contents()),s instanceof e&&(o=s)),g=a.wrapInner('<div class="dotdotdot" />').children(),g.contents().detach().end().append(o.clone(!0)).find("br").replaceWith("  <br />  ").end().css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var u=!1,d=!1;return c.afterElement&&(u=c.afterElement.clone(!0),u.show(),c.afterElement.detach()),i(g,l)&&(d="children"==l.wrap?r(g,l,u):n(g,a,g,l,u)),g.replaceWith(g.contents()),g=null,e.isFunction(l.callback)&&l.callback.call(a[0],d,o),c.isTruncated=d,d}).bind("isTruncated.dot",function(e,t){return e.preventDefault(),e.stopPropagation(),"function"==typeof t&&t.call(a[0],c.isTruncated),c.isTruncated}).bind("originalContent.dot",function(e,t){return e.preventDefault(),e.stopPropagation(),"function"==typeof t&&t.call(a[0],o),o}).bind("destroy.dot",function(e){e.preventDefault(),e.stopPropagation(),a.unwatch().unbind_events().contents().detach().end().append(o).attr("style",a.data("dotdotdot-style")||"").data("dotdotdot",!1)}),a},a.unbind_events=function(){return a.unbind(".dot"),a},a.watch=function(){if(a.unwatch(),"window"==l.watch){var t=e(window),r=t.width(),n=t.height();t.bind("resize.dot"+c.dotId,function(){r==t.width()&&n==t.height()&&l.windowResizeFix||(r=t.width(),n=t.height(),d&&clearInterval(d),d=setTimeout(function(){a.trigger("update.dot")},100))})}else u=s(a),d=setInterval(function(){if(a.is(":visible")){var e=s(a);(u.width!=e.width||u.height!=e.height)&&(a.trigger("update.dot"),u=e)}},500);return a},a.unwatch=function(){return e(window).unbind("resize.dot"+c.dotId),d&&clearInterval(d),a};var o=a.contents(),l=e.extend(!0,{},e.fn.dotdotdot.defaults,t),c={},u={},d=null,g=null;return l.lastCharacter.remove instanceof Array||(l.lastCharacter.remove=e.fn.dotdotdot.defaultArrays.lastCharacter.remove),l.lastCharacter.noEllipsis instanceof Array||(l.lastCharacter.noEllipsis=e.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis),c.afterElement=f(l.after,a),c.isTruncated=!1,c.dotId=p++,a.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&a.watch(),a},e.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",fallbackToLetter:!0,lastCharacter:{},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0},e.fn.dotdotdot.defaultArrays={lastCharacter:{remove:[" ","　",",",";",".","!","?"],noEllipsis:[]}},e.fn.dotdotdot.debug=function(){};var p=1,g=e.fn.html;e.fn.html=function(r){return r!=t&&!e.isFunction(r)&&this.data("dotdotdot")?this.trigger("update",[r]):g.apply(this,arguments)};var m=e.fn.text;e.fn.text=function(r){return r!=t&&!e.isFunction(r)&&this.data("dotdotdot")?(r=e("<div />").text(r).html(),this.trigger("update",[r])):m.apply(this,arguments)}}}(jQuery),function(e){function t(e,t){var r=e.height();e.height(r),e.addClass("transition-enabled"),e.height(t)}e(function(){e(".js-div-expansion").on("div-expansion:hide",function(r){var n=e(r.target);t(n,0),n.addClass("hide")}),e(".js-div-expansion").on("div-expansion:show",function(r){var n=e(r.target),a=e(".js-div-expansion-inner",n),i=a.height();t(n,i)})})}(jQuery),function(e){OT.createNS("OT.expandableQuote"),OT.expandableQuote.initializeQuotes=function(t,r,n){var a="dotdotdot-is-truncated",i=function(e,t){e.toggleClass(a,t),e.find(n).toggleClass("hide",!t)};e(r,t).dotdotdot({after:n,callback:function(t){i(e(this),t)}}),e(t).on("click",r,function(t){if(t.preventDefault(),e(this).hasClass(a)){var r=e(t.currentTarget);r.trigger("destroy");var n=r.height();r.css({"max-height":"none",height:n}),r.trigger("div-expansion:show"),i(r,!1)}})}}(jQuery),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var t;"undefined"!=typeof window?t=window:"undefined"!=typeof global?t=global:"undefined"!=typeof self&&(t=self),t.jade=e()}}(function(){return function e(t,r,n){function a(o,s){if(!r[o]){if(!t[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=r[o]={exports:{}};t[o][0].call(c.exports,function(e){var r=t[o][1][e];return a(r?r:e)},c,c.exports,e,t,r,n)}return r[o].exports}for(var i="function"==typeof require&&require,o=0;o<n.length;o++)a(n[o]);return a}({1:[function(e,t,r){"use strict";function n(e){return null!=e&&""!==e}function a(e){return Array.isArray(e)?e.map(a).filter(n).join(" "):e}r.merge=function i(e,t){if(1===arguments.length){for(var r=e[0],a=1;a<e.length;a++)r=i(r,e[a]);return r}var o=e["class"],s=t["class"];(o||s)&&(o=o||[],s=s||[],Array.isArray(o)||(o=[o]),Array.isArray(s)||(s=[s]),e["class"]=o.concat(s).filter(n));for(var l in t)"class"!=l&&(e[l]=t[l]);return e},r.joinClasses=a,r.cls=function(e,t){for(var n=[],i=0;i<e.length;i++)t&&t[i]?n.push(r.escape(a([e[i]]))):n.push(a(e[i]));var o=a(n);return o.length?' class="'+o+'"':""},r.attr=function(e,t,n,a){return"boolean"==typeof t||null==t?t?" "+(a?e:e+'="'+e+'"'):"":0==e.indexOf("data")&&"string"!=typeof t?" "+e+"='"+JSON.stringify(t).replace(/'/g,"&apos;")+"'":n?" "+e+'="'+r.escape(t)+'"':" "+e+'="'+t+'"'},r.attrs=function(e,t){var n=[],i=Object.keys(e);if(i.length)for(var o=0;o<i.length;++o){var s=i[o],l=e[s];"class"==s?(l=a(l))&&n.push(" "+s+'="'+l+'"'):n.push(r.attr(s,l,!1,t))}return n.join("")},r.escape=function(e){var t=String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;");return t===""+e?e:t},r.rethrow=function o(t,r,n,a){if(!(t instanceof Error))throw t;if(!("undefined"==typeof window&&r||a))throw t.message+=" on line "+n,t;try{a=a||e("fs").readFileSync(r,"utf8")}catch(i){o(t,null,n)}var s=3,l=a.split("\n"),c=Math.max(n-s,0),u=Math.min(l.length,n+s),s=l.slice(c,u).map(function(e,t){var r=t+c+1;return(r==n?"  > ":"    ")+r+"| "+e}).join("\n");throw t.path=r,t.message=(r||"Jade")+":"+n+"\n"+s+"\n\n"+t.message,t}},{fs:2}],2:[function(e,t,r){},{}]},{},[1])(1)}),$(window).load(function(){var e="ot-grid-scroller";$(".grid-scroller").each(function(){$(this).data(e,new GridScroller($(this)))})}),function(){this.JST||(this.JST={}),this.JST["views/crosssell-restaurants"]=function(e){var t,r=[],n={},a=e||{};return function(e,a){r.push("mixin otAnchor()\n  -attributes.href = opentableLink(attributes.href)\n  a&attributes(attributes)\n    if block\n      block\n\nmixin jsanchor()\n  a(href='javascript:void(0)')&attributes(attributes)\n    if block\n      block\n\nmixin starRating(rating, isSmallStars, hasMetaInfo, isAnimated)\n  -var ratingPercentage = (rating/5)*100\n  -var starCss = isSmallStars ? 'small' : ''\n  -var roundedRating = Math.round(rating*10)/10\n  -var width = isAnimated ? 0 : ratingPercentage\n  -var widthStyle = \"width: \" + width + \"%\"\n  -var className = isAnimated ? 'all-stars filled animated' : 'all-stars filled'\n  div.star-wrapper(class=starCss)\n    .all-stars\n    div(class=className, style=widthStyle, title=roundedRating.toString(), data-percent=ratingPercentage.toString())\n    if(hasMetaInfo)\n      meta(itemprop=\"ratingValue\", content=roundedRating.toString())\n\nmixin safeEllipsis(ellipText, charLimit)\n  if(ellipText.length > charLimit)\n    =ellipText.substr(0, charLimit) + '...'\n  else\n    =ellipText\n\nmixin paginationGridLinks(totalPages)\n  ul.pagination\n    li.js-pagination-prev.pagination-li.pagination-arrow.pagination-arrow-prev\n      a.pagination-link.pagination-prev(href=\"#\")\n        =__('Previous')\n    -for (var paginationIndex = 0; paginationIndex < totalPages; paginationIndex++)\n      li.js-pagination-page.pagination-li(data-page=paginationIndex)\n        a.pagination-link(href=\"#\")=paginationIndex + 1\n    li.js-pagination-next.pagination-li.pagination-arrow.pagination-arrow-next\n      a.pagination-link.pagination-next(href=\"#\")\n        =__('Next')\n\nmixin showAllRests(metro, macro, neighborhood)\n  -var link = \"/s/restaurantList?metroid=\"+metro.id+\"&regionids=\"+macro.id+\"&neighborhoodids=\"+neighborhood.id\n      div.text-center\n        a.see-all-restaurants-link(href=opentableLink(link))=__(\"OTResources#seeAllRestaurants\")\n\nmixin menuMixin(props)\n  .menu(id=props.id, class=props['class'])\n    .menu-container\n      .menu-main\n        block\n\nmixin otMenuMixin(props)\n  .ot-menu(id=props.id, class=props['class'], data-alignment=props['data-alignment'], data-arrow-alignment=props['data-arrow-alignment'])\n    .ot-menu-content-wrapper\n        block\n\nmixin timeButton(rid, covers, time, timeClass, baseUrl)\n  -\n    var timeClasses = [timeClass]\n    var hasOffers = time.hasOffers() || time.isPOP()\n    var premiumAccessPrice = time.price || {}\n    var tableAttributes = time.tableAttributes\n    var hasTableCategories = !!tableAttributes && (tableAttributes.length > 1 || (tableAttributes.length === 1 && tableAttributes.indexOf('default') < 0))\n    var instantEligible = time.instantEligible ?\"true\":\"false\"\n\n    if (!time.isValid()) timeClasses.push('unavailable')\n    if (hasOffers) timeClasses.push('js-with-offers')\n    if (time.isPremium())\n      timeClasses.push(\"dtp-button-premium\")\n\n  a(href='javascript:void(0)',\n    class=timeClasses,\n    data-rid=rid,\n    data-datetime=time.time?time.time.format('YYYY-MM-DD HH:mm'):null,\n    data-covers=covers,\n    data-points=time.points,\n    data-offers=time.offerIds,\n    data-offers-count=time.numberOfOffers(),\n    data-hash=time.hash,\n    data-slot-type=time.slotType,\n    data-instant-eligible=instantEligible,\n    data-instant-url=(opentableLink(time.instantUrl)),\n    data-premium-access-price-amount=premiumAccessPrice['Amount'],\n    data-validate-url=(baseUrl ? baseUrl : opentableLink('/book/validate')),\n    data-table-categories=(hasTableCategories ? JSON.stringify(time.tableAttributes) : null),\n    data-table-category-tooltip-title=__('RdTableCategoriesTooltipTitle'))\n\n    if (time.isValid())\n      if time.time.print\n        = time.time.print()\n      else\n        = time.time.format(__(\"OTResources#LongTimeFormat\"))\n      if hasTableCategories\n        = '*'\n    else\n      | &nbsp;\n\n  if hasOffers || time.redemptionValue\n    .color-primary.text-center.font-weight-bold.margin-top-xxsmall.margin-bottom-xxsmall\n      if time.redemptionValue\n        =time.redemptionValue.Name\n      else if time.numberOfOffers() == 1 && time.isPOP()\n        =__('RdSearch#POPFormat', time.points)\n      else\n        span.offer-count.margin-right-xxsmall\n          =time.numberOfOffers()\n        =__n(__('RdSearch#OffersTextSingular'), __('RdSearch#OffersText'), time.numberOfOffers())\n\n  if time.isPremium()\n    .dtp-button-premium-label.text-center.font-weight-bold.margin-top-xxsmall.margin-bottom-xxsmall\n      =__('RdSearch#Premium')\n\nmixin affiliateLink(isRestRef)\n  -\n    var restrefQueryParam = (isRestRef) ? '&restref=' + restaurant.id : ''\n  a.affiliate-restaurant-link(href=opentableLink('/s/affiliaterestaurantlist?affiliaterestaurantid='+restaurant.id + restrefQueryParam), target='_blank')\n    =__('RdSearch#affiliateLink')\n\nmixin cuisineScrollerSection(cuisineScrollerProperties)\n  if cuisineScrollerProperties.visible\n    .content-block(id=cuisineScrollerProperties.id)\n      .content-block-header.hr-header\n        h3= cuisineScrollerProperties.title\n      .content-block-body\n        .grid-scroller.featured-scroller\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-left\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-right\n          .grid-scroller-container.cross-sell-container\n            .grid-scroller-wrapper\n              .grid-scroller-row.cross-sell-grid\n                each cuisine in cuisineScrollerProperties.cuisines\n                  //- if no cuisine image use the the random gradient that we use for restprofile header\n                  - var backgroundImageUrl = cuisine.imgUrl ? cuisine.imgUrl : assetPath(cuisine.imgFallback)\n                  .grid-scroller-column.cf.content-section-list-row\n                    .overlay\n                    if cuisine.targetUrl\n                      - style = `background-image: url('${backgroundImageUrl}')`\n                      a(href=cuisine.targetUrl, style=style).featured-card\n                        h5.featured-card-text= cuisine.cardText\n                    else\n                      .featured-card(class=cuisine.cardClass)\n                        h5.featured-card-text= cuisine.cardText\n\nmixin restaurantScrollerSection(restaurantScrollerProperties, currencySymbol, activeness)\n  if activeness !== false \n    - activeness = true\n    \n  if restaurantScrollerProperties.visible\n    .content-section(id=restaurantScrollerProperties.id, class=activeness ? '' : 'hide')\n      .content-section-header.hr-header\n        h3= restaurantScrollerProperties.title\n      .content-section-body\n        .grid-scroller\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-left\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-right\n          .grid-scroller-container.cross-sell-container\n            .grid-scroller-wrapper\n              .grid-scroller-row.cross-sell-grid(class=restaurantScrollerProperties.cardMode ? 'cross-sell-cardmode' : '')\n                - var crossSellRestaurantsOpts = {showOffers: false, showTimes: false, showQuote: false, showStars: true, showReviewSummary: true, showPricing: true, mediaAware: false, blockBelow: true, crossSell: true, currencySymbol: currencySymbol}\n                - crossSellRestaurantsOpts.lazyLoadImage = restaurantScrollerProperties.lazyLoadImage\n                \n                if restaurantScrollerProperties.cardClass\n                  .grid-scroller-column.cf.content-section-list-row\n                    if restaurantScrollerProperties.cardLink\n                      //- make sure these branches are exactly the same except for the a(href).\n                      a(href=restaurantScrollerProperties.cardLink, class=restaurantScrollerProperties.cardClass).featured-card\n                        h5.featured-card-text= restaurantScrollerProperties.cardText\n                    else\n                      .featured-card(class=restaurantScrollerProperties.cardClass)\n                        h5.featured-card-text= restaurantScrollerProperties.cardText\n\n                each restObj in restaurantScrollerProperties.restaurants\n                  .grid-scroller-column.cf.content-section-list-row\n                    +restaurantRow(restObj, crossSellRestaurantsOpts)\n\nmixin restaurantScrollerBlock(restaurantScrollerProperties, currencySymbol)\n  if restaurantScrollerProperties.visible\n    .content-block\n      .content-block-header.with-border\n        h3= restaurantScrollerProperties.title\n      .content-block-body\n        .grid-scroller\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-left\n          a(href='javascript:void(0);').grid-scroller-arrow.grid-scroller-arrow-right\n          .grid-scroller-container.cross-sell-container\n            .grid-scroller-wrapper\n              .grid-scroller-row.cross-sell-grid\n                - var crossSellRestaurantsOpts = {showOffers: false, showTimes: false, showQuote: false, showStars: true, showReviewSummary: true, showPricing: true, mediaAware: false, blockBelow: true, crossSell: true, currencySymbol: currencySymbol}\n                each restObj in restaurantScrollerProperties.restaurants\n                  .grid-scroller-column.cf.content-section-list-row\n                    +restaurantRow(restObj, crossSellRestaurantsOpts)\n\nmixin userListWidget(data)\n  if data.visible\n    a(href='javascript:void(0)')&attributes(data.linkAttributes)\n      span&attributes(data.textAttributes)\n        =data.widgetText\n\nmixin favoriteButtonWidget(data)\n  if data.visible\n    if data.shouldShowFavoriteCount\n      .favorite-tooltip-text&attributes(data.toolTipAttributes)\n        =data.toolTipText\n    a(href='javascript:void(0)')&attributes(data.linkAttributes)\n      span&attributes(data.textAttributes)\n        =data.widgetText\ninclude ./mixins.pug\n\n//- generate restaurant review info for a restaurant row\n  opts is a hash with\n  showStars: (default true)\n  assumes the properties are available\n    ReviewSummary\n    TotalDiningFeedbackCount\n    AverageOverallRating\nmixin _restaurantReviewSummaryInfo(restaurant, opts)\n  - opts = _.extend({showStars: true}, opts)\n  - var hasReviews = restaurant.ReviewSummary.TotalDiningFeedbackCount > 0 && restaurant.ReviewSummary.AverageOverallRating > 0\n  if opts.showStars\n    if hasReviews\n      .rest-row-rating\n        .star-rating\n          +starRating(restaurant.ReviewSummary.AverageOverallRating, true)\n          - var reviewsCount = restaurant.ReviewSummary.TotalDiningFeedbackCount\n          - var starsCopy;\n          - if (opts.crossSell) { starsCopy = '(' + reviewsCount + ')' }\n          - else { starsCopy = (reviewsCount > 1) ? __('RdHeader#reviewsLink', reviewsCount) : __('RdHeader#reviewsLinkSingular') }\n          span.star-rating-text #{starsCopy}\n    else\n      .rest-row-meta=__(\"RestaurantDetails#reviewsComingSoon\")\n\n//- generate restaurant info (that is, the message or quote or description)\nmixin _restaurantInfo(restaurant, opts)\n  - if(restaurant.Message && restaurant.Promo)\n    +restaurantRowQuote()\n      !=restaurant.Message\n    - var searchTime = restaurant.Promo.SelectionDate\n    - var reserveUrl = viewHelpers.url.updateQueryStringParameterFromObject(restaurant.RestaurantProfileUrl, {DateTime: searchTime, Covers: 2, pid: restaurant.Promo.id})\n    // data-promo-tab-reserve-link is for RUSH-169\n    a(href=reserveUrl, data-promo-tab-reserve-link) Reserve\n  - else if(opts.showQuote && opts.review)\n    +restaurantRowQuote(__('OpenTable Diner - '), opts.review.DinedDateTimeDisplay(moment))\n      =opts.review.ReviewText+' '\n  - else if(restaurant.Description)\n    +restaurantRowQuote()\n      != restaurant.Description\n  - else\n    .rest-row-meta=__(\"RestaurantDetails#reviewsComingSoon\")\n\n//- generate a restaurant row quote\n  cite and time can be null, and if so, the quote will suppress the cite info\n  block is the content\nmixin restaurantRowQuote(cite, time)\n  - var showingCiteAndTime = cite && time\n  - var id = _.uniqueId('quote_')\n  .rest-row-quote\n    blockquote(class=showingCiteAndTime ? 'showing-cite-and-time' : 'hiding-cite-and-time')\n      p.rest-row-quote-text.js-div-expansion(id=id, data-target='#' + id, data-review-expansion='')\n        span.js-div-expansion-inner\n          block\n          a.hide.secondary(href=\"#\")\n            = __(\"ShowMoreReviewText\")\n\n      if showingCiteAndTime\n        cite=cite\n        time=time\n\n//- generate a restaurant row\n opts is a hash with the following options\n (defaults in parens)\n   showImage: (true)\n   lazyLoadImage: (false) - set data-src to the real image and apply 'lazy' class to the image.\n   showReviewSummary: (true)\n   showPricing: (true)\n   showQuote: (true) - show the quote from the review either the restaurant message or a review text\n   review: (undefined) - a review object. If showQuote is true and the review is falsy, defaults to showing description.\n   blockBelow: (false) - show the 'message block' (review, quote, etc.) below the restaurant info versus to the right.\n     If you set this, it implies that mediaAware is true.\n   mediaAware: (false) - apply media query specific css. When this is true, it implies that the page is ready to handle\n     fully responsive layout down to mobile size; the rest-row will resize the image thumbnail, for example.\n\n if the block is defined, then neither promo message, quote, or description is generated, no matter what showQuote and review properties are.\n\n assumes the following properties on restaurant exist\n   RestaurantProfileUrl\n   LowResUrl (if showImage)\n   Description (if showQuote)\n   ReviewSummary (if showReviewSummary)\n   primaryCuisineName (a function!)\n   Neighborhood.Name\n checks the following properties and uses if not falsy:\n   Promo\n   Message\n additionally, see\n   @see _restaurantReviewSummaryInfo\n   @see _restaurantInfo\n\nmixin restaurantRow(restaurant, opts)\n  - opts = _.extend({showImage: true, showReviewSummary: true, showOffers: true, showTimes: true, showQuote: true, showPricing: true, lazyLoadImage: false, showStarsCopy: false, showSpecialOfferDetailsHomeTabs: false, crossSell: false}, opts)\n  - var profileUrl = restaurant.RestaurantProfileUrl\n  if opts.blockBelow\n    - opts.mediaAware = true\n  .rest-row&attributes(attributes)(\n    class = (opts.showImage ? \"with-image\" : \"\"),\n    class = (opts.blockBelow ? \"with-block-below\" : \"\"),\n    class = (opts.mediaAware ? \"media-aware\" : \"\"),\n    class = (opts.crossSell ? \"cross-sell\" : \"\")\n    id = 'rest-item-' + restaurant.id)\n    .row\n      .column(class=opts.blockBelow ? 'medium-12' : 'medium-7')\n        .rest-row-info\n          if (opts.showImage)\n            //- try to choose the photo service profile photo first - select the legacy low res url otherwise.\n               if the photo service one is selected, but no default rest profile photo is found,\n               fallback to the default rest img (note this is not necessary using the legacy photo url,\n               because consumer-web does the fallback for us).\n            - imgUrl = restaurant.ProfilePhoto !== undefined ? restaurant.ProfilePhoto.medium_thumb : opentableAsset(restaurant.LowResUrl)\n            - imgUrl = imgUrl || assetPath('img/default-rest-img.png')\n            a(href=opentableLink(profileUrl), target=\"_blank\", class=(opts.lazyLoadImage ? \"lazy\" : \"\")).rest-row-image\n              img(src=opts.lazyLoadImage ? '' : imgUrl, alt=restaurant.Name\n                  'data-src'=imgUrl).rest-row-image-img\n\n          a(href=opentableLink(profileUrl), target=\"_blank\").rest-row-name\n            if (opts.index)\n              span.rest-row-index\n                = opts.index + \". \"\n            = restaurant.Name\n            if restaurant.distance\n              span.restaurant-distance #{ Math.floor(restaurant.distance * 100) / 100 } mi\n\n          if(opts.showReviewSummary)\n            +_restaurantReviewSummaryInfo(restaurant, opts)\n\n          if(opts.showPricing)\n            .rest-row-pricing\n              .price-rating\n                each showPricingIndex in [1,2,3,4]\n                  span.price-rating-tier(class=restaurant.PriceBand.Display.length >= showPricingIndex ? 'on' : '')= opts.currencySymbol\n\n          .rest-row-meta\n            span.rest-cuisine-region #{restaurant.primaryCuisineName()} | #{restaurant.Neighborhood.Name}\n            span.ab-testing-hide\n              =\", \" + restaurant.Macro.Name\n          if restaurant.RecentReservationCount > 0\n            span.color-dark\n              img.padding-right-small(src=assetPath('img/social-proof.png') alt='icon' aria-hidden='true')\n              if restaurant.RecentReservationCount > 1\n                = __('SimpleSearch#SocialProof', restaurant.RecentReservationCount)\n              else\n                = __('SimpleSearch#SocialProofSingle')\n\n          if(opts.showSpecialOfferDetailsHomeTabs)\n            if(restaurant.PromotedOffer)\n              .rest-row-offer\n                a(class='rest-row-offer-link', href=opentableLink(profileUrl + \"#special-offers\"), target=\"_blank\") #{restaurant.PromotedOffer.Name}\n              if(restaurant.PromotedOffers.length > 1)\n                p.rest-row-offer: a(class='rest-row-offer-link', href=opentableLink(profileUrl + \"#special-offers\"), target=\"_blank\")\n                  = __(\"PromotedOfferTabContent#SeeAllOffers\")\n\n          if(opts.blockBelow && (!opts.crossSell))\n            .rest-row-extended-info\n              if(block)\n                block\n              else\n                +_restaurantInfo(restaurant, opts)\n\n      if (!opts.blockBelow && !opts.crossSell)\n        .column.medium-5\n          if(block)\n            block\n          else\n            +_restaurantInfo(restaurant, opts)\n"),
e&&e.length>0&&n.crossSellRestaurants.call({block:function(){r.push("<h3>"+jade.escape(null==(t=a)?"":t)+"</h3>")}},e)}.call(this,"restaurants"in a?a.restaurants:"undefined"!=typeof restaurants?restaurants:void 0,"title"in a?a.title:"undefined"!=typeof title?title:void 0),r.join("")}}.call(this),function(e){OT.createNS("OT.crossSellRestaurants"),OT.crossSellRestaurants.getRow=function(t,r){_.each(t,function(e){e.primaryCuisineName=function(){return e.cuisine}});var n=e(window.JST["views/crosssell-restaurants"]({restaurants:t,title:r,opentableLink:function(e){return e},__:function(){return"Reviews Coming Soon"}}));return GridScroller(n),n},OT.crossSellRestaurants.convertFromInjector=function(e){return _.map(e,function(e){return e.id=e.rid,e.RestaurantProfileUrl="",e.ProfilePhoto={small_thumb:e.image},e.Name=e.name,e.PriceBand={Display:{length:e.price_band}},e.primaryCuisineName=e.cuisine,e.Neighborhood={Name:e.neighborhood},e.Macro={Name:""},e.ReviewSummary={TotalDiningFeedbackCount:e.review_count,AverageOverallRating:e.review_overall},e})}}(jQuery),function(e){"use strict";var t=function(){var t=this instanceof jQuery?this:e(this);return t.one("lazy-load",function(){var t=e(this),r=t.attr("data-src"),n=t.attr("src");return void 0!==n&&""!==n?!0:void(r!==n&&void 0!==r&&t.attr("src",r).toggleClass("loaded",!0))}),this};e.fn.lazyLoad=t}(jQuery),$(document).on("tab:init",".js-tabs",function(e,t){OT.expandableQuote.initializeQuotes(t.$tab,".rest-row-quote-text","a")}),$("#home-tabs img").lazyLoad(),$("#home-tabs .js-tab-block").one("tab:visible",function(){$(this).find("img").trigger("lazy-load")}),$(function(){function e(){var e,t="smp";try{if(e=JSON.parse(window.OT.Common.Cookies.get(t)),!Array.isArray(e))throw new Error("Expected an array")}catch(r){e=[]}return e}function t(e,t,r){var n;r?(n=$.grep(t,function(t){return t!=e}),$("#"+e).addClass("hide")):(-1===t.indexOf(e)&&t.push(e),n=t,$("#"+e).removeClass("hide")),window.OT.Common.Cookies.set({smp:JSON.stringify(n)},i,a)}function r(e,t,r,n,a){var i=new Date;return e[t]?(e[t].num_visits+=1,e[t].true_visited=e[t].true_visited||a,a&&(e[t].time=i.getTime())):(e[t]={num_visits:1,time:i.getTime(),name:r,true_visited:a},n&&(e[t]["otVisited"+n]={})),e}function n(){if(window.START){var e,t,n,a=window.START.metroInfo.id,i=window.START.metroInfo.Name;window.START.macroInfo&&(e=window.START.macroInfo.id,currMacroName=window.START.macroInfo.Name),window.START.neighborhoodInfo&&(t=window.START.neighborhoodInfo.id,n=window.START.neighborhoodInfo.Name);var o=localStorage.getItem("otVisitedMetros");if(o=o?JSON.parse(o):{},o=r(o,a,i,"Macros",null==e),e){var s=o[a].otVisitedMacros;if(o[a].otVisitedMacros=r(s,e,currMacroName,"Neighborhoods",null==t),t){var l=o[a].otVisitedMacros[e].otVisitedNeighborhoods;o[a].otVisitedMacros[e].otVisitedNeighborhoods=r(l,t,n,null,!0)}}localStorage.setItem("otVisitedMetros",JSON.stringify(o))}}var a=window.OT.Common.Helpers.getCurrentDomain(window),i=31536e6;OT.paginationGrid.paginateResults();var o=$(".nearby-pois-img-wrapper img");o.lazyLoad();var s=$(".promo-card-image img");s.lazyLoad();var l=$("body.start .grid-scroller-wrapper img");if(l.lazyLoad(),o.trigger("lazy-load"),s.trigger("lazy-load"),l.trigger("lazy-load"),1===OTExperiments["rush-454"]){var c=$(".page-right-column").first(),u=c.offset().top+c.outerHeight();$(".content-section, .dtp-block").each(function(){$(this).offset().top<u&&$(this).addClass("page-right-column-offset")})}$(".scroller-manager-checkbox").click(function(){var r=$(this).data("scroller-id"),n=e(),a=this.checked===!1;t(r,n,a)}),$(document).on("click",".scroller-manager-item",function(r){r.preventDefault();var n=$(this).data("scroller-id"),a=e(),i=$(this).hasClass("active");t(n,a,i),$(this).toggleClass("active")}),$(document).on("click",".js-nn-show-more-links",function(e){e.preventDefault(),$(".js-nn-show-more-links").trigger("div-expansion:hide"),$(".js-nn-more-links").trigger("div-expansion:show")}),n()});