var Gallery2=Class.create(Component,{_setupPaging:function(){var e=this.getMetadata(),t=0===e.totalItems,e=Math.ceil(e.totalItems/e.pageSize),a=this._page,i=this.getRootElement(),n=i.classList,n=(t?n.add("empty"):n.remove("empty"),t||1!==a?n.remove("firstPage"):n.add("firstPage"),t||a!==e?n.remove("lastPage"):n.add("lastPage"),i.querySelector(".pager"));if(n){var s,o,r=n.querySelector(".prev"),r=(r&&(r.stopObserving("click"),s=this._loadPage.bind(this,function(e){return!(e<=1)&&e-1}),r.observe("click",function(e){e.preventDefault(),s()})),n.querySelector(".next"));if(r&&(r.stopObserving("click"),o=this._loadPage.bind(this,function(e){return e+1}),r.observe("click",function(e){e.preventDefault(),o()})),i.hasClassName("basicPaging")){var l=n.querySelector(".pages");if(l&&(l.innerHTML="",!t)){var r=Math.max(1,a-5),h=Math.min(r+10-1,e),d=(h-r+1<10&&(r=Math.max(1,h-10+1)),++r,--h,[]);d.push(1);for(var u=r;u<=h;u++)d.push(u);if(1!==e&&d.push(e),1<d.length)for(var c=null,m=this._loadPage.bind(this),p=0,g=d.length;p<g;p++){var u=d[p],c=(null!==c&&1<u-c&&((v=document.createElement("div")).className="separator",l.appendChild(v),l.appendChild(v.cloneNode()),l.appendChild(v.cloneNode())),u),f="page",v=(a===u&&(f+=" current"),function(t){var e=document.createElement("div");return e.className=f,e.setAttribute("data-page",t),e.innerHTML=t,e.observe("click",function(e){e.preventDefault(),m(t)}),e}(u));l.appendChild(v)}}}}},_resize:function(){this._pageSize=this._calculatePageSize(),this._loadPage(Math.max(1,Math.min(this._page,this.getMetadata().totalPages)))},_calculatePageSize:function(){var e=this.getRootElement(),t=e.querySelector(".galleryContent");if(!Component.isVisible(t,!0))return null;var a=t.querySelector(".galleryItem"),i=!1,n=(a||(a=this._createGalleryItem(null),t.appendChild(a),i=!0),{w:null,h:null}),s=Component.getComputedStyle(a);if(n.w=Component.getStyleDim(s.width)+Component.getStyleDim(s.borderLeftWidth)+Component.getStyleDim(s.borderRightWidth)+Component.getStyleDim(s.marginLeft)+Component.getStyleDim(s.marginRight),n.h=Component.getStyleDim(s.height)+Component.getStyleDim(s.borderTopWidth)+Component.getStyleDim(s.borderBottomWidth)+Component.getStyleDim(s.marginTop)+Component.getStyleDim(s.marginBottom),i&&t.removeChild(a),!n.w||!n.h)return null;var o={w:null,h:null},s=Array.from(t.children),i=(t.innerHTML="",e.querySelector(".pager")),a=(i&&(i.style.display="none"),Component.getComputedStyle(t));if(t.style.flexGrow="1",o.w=Component.getStyleDim(a.width),o.h=Component.getStyleDim(a.height),!o.w||!o.h){var r=t.getBoundingClientRect();if(o.w=r.right-r.left,o.h=r.bottom-r.top,!o.w)for(var l=t.parentNode;l!==document&&(r=l.getBoundingClientRect(),o.w=r.right-r.left,!o.w);)l=l.parentNode;o.h||(o.h=n.h)}if(s.forEach(function(e){t.appendChild(e)}),t.style.flexGrow="",i&&(i.style.display=""),!o.w||!o.h)return null;e=Math.floor(o.w/n.w),a=1;return(a=0<o.h?Math.max(1,Math.floor(o.h/n.h)):a)*e},_setupDOM:function($super){$super();var t,$super=this.getRootElement(),a=$super.querySelector(".galleryContent"),e=$super.getAttribute("data-page-token"),e=(e&&(e=this._decodeToken(e),this._key=e.key,this._page=e.page),this._resultsCache={},this._removedIndexes=[],this.options.pageSize),e=(null===e||"auto"===e?(this._pageSize=this._calculatePageSize(),t=function(){this._resize()}.bind(this),Component.getResizeObserver(function(e){new e(t).observe(a)})):this._pageSize=parseInt(e,10),$super.getAttribute("data-current-item-id")),i=(this._currentItemId=null===e?null:parseInt(e),this.options.autoLoad&&this._loadPage(this._page),function(e){var t=e.parentNode,a=t.getAttribute("data-item-id");if(!this.sendEvent("itemNavigate",{itemId:a,itemContainer:t})){var i=e.href;switch(this.options.navigateTarget){case"none":break;case"blank":window.open(i,"_blank");break;default:Component.setLocation(i)}}}.bind(this));a.on("click",".thumb a",function(e){e.preventDefault();e=e.findElement("a");e&&i(e)})},_getApiFields:function(){var e="title,type/name,state(state,desc),lock/id,thumbnail(src,width,height),assets(original,stream reference)";switch(this.options.mediaOptions.allowNavigate){case"navigate":case!0:e+=",navigateUrl";break;case"edit":e+=",editUrl";break;case"canonical":e+=",canonicalUrl"}return this.options.selectable&&(e+=",selected,permissions/select"),e},_loadItems:function(t,s){function o(){var e;++i===a.length&&(e=t.map(function(e){var t=Math.floor(e/l)+1,a=h[t];if(a)return a[e-(t-1)*l]}).filter(function(e){return void 0!==e}),s(null,e))}var r=this._metadata,l=r.pageSize,a=(l||(l=Math.min(this._pageSize,50)||25,r.pageSize=l),0===t.length?[1]:t.map(function(e){return Math.floor(e/l)+1}).filter(function(e,t,a){return a.indexOf(e)===t})),h=this._resultsCache,i=0,n=function(i){var e,t,a,n=h[i];!(n&&n.length&&n[0])&&this._hasSearch()?((e=this._key)&&(e+="/"+i),t=this.serviceURL,a={fields:this._getApiFields(),maxResults:l,WINID:Component.getWindowID()},e&&(a.pageToken=e),new Ajax.Request(t,{method:"get",parameters:a,onSuccess:function(e){var e=e.responseJSON,t=this._decodeToken(e.pageToken),a=(n=t.page===i?e.items:new Array(e.pageSize),h[i]);a?n.forEach(function(e,t){a[t]=e}):h[i]=n,this._key||(this._key=t.key),r.loaded||(r.searchURL=e.searchURL,r.pageSize=e.pageSize,r.totalItems=e.totalItems,r.totalResults=e.totalResults,r.loaded=!0,this.sendEvent("metadata",this.getMetadata())),o()}.bind(this),onFailure:function(e){s&&s({apiUrl:t,apiParams:a,status:e.status,statusText:e.statusText},null)}})):o()}.bind(this);a.forEach(function(e){n(e)})},_hasSearch:function(){return this._key||"api/v2/items"!==this.serviceURL},_decodeToken:function(e){var t,a={key:e,page:1};return e&&0<=(t=e.indexOf("/"))&&(a.key=e.substring(0,t),e=parseInt(e.substring(t+1)),isNaN(e)&&(e=1),a.page=e),a},_loadPage:function(a,i){if("function"!=typeof a||!1!==(a=a.call(null,this._page))){var e=function(e,t){e?console&&console.error("Failed to load item page",e):(this._page=a,this._setupPaging(),this._addThumbs(t,l),(e=this.getRootElement().classList).remove("loading"),e.add("loaded"),this.sendEvent("afterLoad",a),this.sendEvent("visibility"),i&&i())}.bind(this),t=this._pageSize,n=0,s=(a-1)*t,o=this._removedIndexes;if(o.length)for(;;){var r=o.filter(function(e){return n<=e&&e<s}).length;if(0===r)break;n=s,s+=r}var l=[];if(null!==t)for(var h=0,d=s;h<t;h++){for(;-1!==o.indexOf(d);)++d;l.push(d++)}var u=this.getRootElement().classList;u.remove("loaded"),u.add("loading"),this.sendEvent("beforeLoad",{page:a}),this._loadItems(l,e)}},_addThumbs:function(e,a){var i=this.getRootElement().querySelector(".galleryContent");i.innerHTML="",e.forEach(function(e,t){e=this._createGalleryItem(e);e.setAttribute("data-index",a[t]),i.appendChild(e)},this)},_remove:function(e){var t=e.getAttribute("data-index");t&&(this.remove(parseInt(t,10)),this.reloadPage()),this.sendEvent("remove",e)},_getInitialMetadata:function(){return{searchURL:null,pageSize:null,totalItems:0,totalResults:0,loaded:!1}},initialize:function($super,e,t,a,i){$super(e,t,a),this.serviceURL="api/v2/items",this.options=i,this._key=null,this._page=1,this._pageSize=null,this._metadata=this._getInitialMetadata(),this._resultsCache={},this._currentItemId=null,this._removedIndexes=[],this._createGalleryItem=this.defaultGalleryItem.bind(this)},getClass:function(){return"Gallery2"},getMetadata:function(){var t=this._metadata,e=t.totalItems-this._removedIndexes.filter(function(e){return e<t.totalItems}).length,a=this._pageSize||t.pageSize;return{searchURL:t.searchURL,totalItems:e,totalResults:t.totalResults,pageSize:a,totalPages:Math.ceil(e/a)}},getSearchURL:function(){return Component.appendURLParam(this._metadata.searchURL,"WINID",Component.getWindowID())},containsItem:function(n){var e=this._resultsCache,s=this._removedIndexes;return Object.keys(e).some(function(i){return e[i].some(function(e,t,a){a=(i-1)*a.length+t;return!(0<=s.indexOf(a))&&e.id===n})})},reloadPage:function(e){this._loadPage(this._page,e)},reset:function(e){this._page=1,this._metadata=this._getInitialMetadata(),this._resultsCache={},this._removedIndexes=[],this._loadPage(1,e)},defaultGalleryItem:function(e){var t="itemContainer galleryItem",a=((e=e||{id:-1}).id===this._currentItemId&&(t+=" current"),document.createElement("div"));return a.className=t,a.setAttribute("data-item-id",e.id),e.type&&a.setAttribute("data-item-type",e.type.id),this.options.selectable&&(a.setAttribute("data-selectable",e.permissions&&e.permissions.select?"true":"false"),a.setAttribute("data-selected",e.selected?"true":"false")),this.options.removable&&((t=document.createElement("div")).className="remove",t.setAttribute("data-tooltip","Remove"),t.addEventListener("click",this._remove.bind(this,a)),a.appendChild(t)),Media.createThumb(e,a,this.options.mediaOptions),a},overrideGalleryItem:function(e){this._createGalleryItem=e},add:function(e,o){function t(){("number"==typeof e?a:i)(e)}var i=function(e){var t=r.pageSize,a=r.totalItems++,i=Math.floor(a/t)+1,a=a-(i-1)*t,n=this._resultsCache,s=n[i];s||(s=new Array(0|t),n[i]=s),a===s.length?s.push(e):s[a]=e,this.sendEvent("metadata",this.getMetadata()),o&&o()}.bind(this),a=function(t){var a="api/v2/items/"+t;new Ajax.Request(a,{method:"get",parameters:{fields:this._getApiFields(),WINID:Component.getWindowID()},onSuccess:function(e){e=e.responseJSON;1===e.totalItems?i(e.items[0]):console.error("Failed to add item "+t)}.bind(this),onFailure:function(e){console&&console.error({apiUrl:a,apiParams:params,status:e.status,statusText:e.statusText})}})}.bind(this),r=this._metadata;r.loaded?t():this._loadPage(this._page,t)},remove:function(e){var t=this._removedIndexes;-1===t.indexOf(e)&&t.push(e)},onDOMLoaded:function($super){$super(),this._setupDOM()}});