var scrl=scrl||{};scrl.ui=scrl.ui||{};function _activateScroller(selectItem,nameViewId){var scroller=new scrl.ui.Scroller({scrollerId:'scrollerViewport',scrollerControlsId:'scrollerControls',scrollerPagePreviousId:'pagePrevious',scrollerPageNextId:'pageNext',itemsContainerId:'content_thumbnail',selectedItemClass:'selectedItem',selectedPageLinkClass:'selectedPageLink',disabledControlClass:'disabledControl',noOverflowClass:'scrollerNoOverflow',displayItemContentClass:'displayItemContent',defaultSelectedItem:selectItem,centerFlag:false,randomFlag:false,contentsWidth:640,itemWidth:128,viewId:nameViewId});return scroller}scrl.ui.Scroller=function(config){this.scroller=document.getElementById(config.scrollerId);this.pagePrevious=document.getElementById(config.scrollerPagePreviousId);this.pageNext=document.getElementById(config.scrollerPageNextId);this.itemsContainer=document.getElementById(config.itemsContainerId);this.selectedItemClass=config.selectedItemClass;this.selectedPageLink=config.selectedPageLinkClass;this.disabledControlClass=config.disabledControlClass;this.displayItemContentClass=config.displayItemContentClass;this.defaultSelectedItem=config.defaultSelectedItem||null;this.centerFlag=config.centerFlag||null;this.callbackOnSelect=config.callbackOnSelect||null;this.centerOnInitFlag=config.centerOnInitFlag||null;this.viewId=config.viewId||null;this.currentPage=1;this.items=[];this.itemLookup=[];this.pageLinks=[];this.isAnimating=false;var item;this.scroller.style.overflow='hidden';this.scroller.className+=' '+config.noOverflowClass;if(!this.checkAndInitItems(config)){this.scroller.style.overflow='auto';this.removeClass(this.scroller,config.noOverflowClass);return null}for(var i=0;i<this.items.length;i++){item=this.items[i];item.item.id=item.item.id+'_old';item.link.onclick=this.createlinkClickHandler(this,item.id);item.item.style.display='none'}this.currentId=this.getStringAfterHash(location.href);if(!this.isValidItem(this.currentId)){this.currentId=this.defaultSelectedItem||this.selectFirstItem()}this.selectItem(this.currentId);this.pageCount=Math.ceil((this.items.length-1)/(this.itemsPerPage-1));if(this.centerFlag){this.pagePrevious.onclick=this.createPageLinkClickHandlerWithCentering(this,-1);this.pageNext.onclick=this.createPageLinkClickHandlerWithCentering(this,1)}else{this.pagePrevious.onclick=this.createChangePageHandler(this,-1);this.pageNext.onclick=this.createChangePageHandler(this,1)}if(config.scrollerPageLinksId){for(i=0;i<this.pageCount;i++){pageLink=document.createElement('a');pageLink.innerHTML=i+1;pageLink.href='javascript: void 0';if(this.centerFlag){pageLink.onclick=this.createPageLinkClickHandlerWithCentering(this)}else{pageLink.onclick=this.createPageLinkClickHandler(this,i+1)}document.getElementById(config.scrollerPageLinksId).appendChild(pageLink);this.pageLinks[i]=pageLink}}if(this.centerFlag||this.centerOnInitFlag){this.centerOnItem(this.currentId)}else{this.scrollToPage(Math.floor(this.itemLookup[this.currentId].pos/(this.itemsPerPage-1))+1)}this.callbackOnSelect?eval(this.callbackOnSelect):null;document.onkeyup=this.createKeyUpHandler(this);document.getElementById(config.scrollerControlsId).style.display='block'};scrl.ui.Scroller.prototype.selectRandomItem=function(){return this.items[Math.floor(Math.random()*(this.items.length-1))+1].id};scrl.ui.Scroller.prototype.selectFirstItem=function(){return this.items[0].id};scrl.ui.Scroller.prototype.isValidItem=function(id){for(var i in this.items){if(this.items[i].id==id){return true}}return false};scrl.ui.Scroller.prototype.checkAndInitItems=function(config){var id,item,links=this.scroller.getElementsByTagName('a');var tempDiv=document.createElement('div');this.scroller.appendChild(tempDiv);var contentsWidth=config.contentsWidth||tempDiv.offsetWidth;this.scroller.removeChild(tempDiv);this.totalWidth=0;for(var i=0;i<links.length;i++){id=this.getStringAfterHash(links[i].href);item=document.getElementById(id);this.linkWidth=config.itemWidth||links[i].offsetWidth;this.totalWidth+=this.linkWidth;this.itemsPerPage=contentsWidth/this.linkWidth;this.itemLookup[id]={link:links[i],item:item,pos:i,id:id,onpage:Math.floor(i/this.itemsPerPage)+1};this.items[i]=this.itemLookup[id];if(Math.floor(this.itemsPerPage)!=this.itemsPerPage){return false}}this.scroller.getElementsByTagName('ul')[0].style.width=this.totalWidth+'px';return true};scrl.ui.Scroller.prototype.createPageLinkClickHandler=function(me,page){return function(){me.scrollToPage(page)}};scrl.ui.Scroller.prototype.createPageLinkClickHandlerWithCentering=function(me,dir){return function(){var targetPos=me.currentPos+Math.floor(me.itemsPerPage/2)*dir;if(targetPos>0&&targetPos<me.items.length&&!me.isAnimating){me.centerOnItem(me.items[targetPos].id)}}};scrl.ui.Scroller.prototype.createKeyUpHandler=function(me){return function(e){if(!e){e=window.event}var pos=me.itemLookup[me.currentId].pos,targetPos=pos;switch(e.keyCode){case 37:targetPos=pos-1;break;case 39:targetPos=pos+1;break}if(targetPos<0){targetPos=me.items.length-1}else if(targetPos>=me.items.length){targetPos=0}if(targetPos!=pos){me.selectItem(me.items[targetPos].id);me.scrollToItem(me.items[targetPos].id);window.location='#'+me.items[targetPos].id;if(me.centerFlag){me.centerOnItem(me.items[targetPos].id)}}}};scrl.ui.Scroller.prototype.getStringAfterHash=function(str){var regex=new RegExp('#([^&]*)');var results=regex.exec(str);return(results?results[1]:null)};scrl.ui.Scroller.prototype.scrollToPage=function(page,fastFlag){if(this.isAnimating)return false;this.currentPage=page;this.setControls(page);var x=(page-1)*(this.linkWidth*(this.itemsPerPage-1));if(fastFlag){this.scroller.scrollLeft=x}else{this.isAnimating=true;this.animateScroll(this.scroller,x,15,2)}};scrl.ui.Scroller.prototype.setControls=function(page){for(var i=0;i<this.pageLinks.length;i++){if(i==page-1){this.pageLinks[i].className+=' '+this.selectedPageLink}else{this.removeClass(this.pageLinks[i],this.selectedPageLink)}}var itemsHalfPage=Math.floor(this.itemsPerPage/2);if((page==1&&!this.centerFlag)||(this.currentPos<=itemsHalfPage)){this.pagePrevious.className+=' '+this.disabledControlClass}else{this.removeClass(this.pagePrevious,this.disabledControlClass)}if((page==this.pageCount&&!this.centerFlag)||(this.currentPos>=this.items.length-itemsHalfPage)){this.pageNext.className+=' '+this.disabledControlClass}else{this.removeClass(this.pageNext,this.disabledControlClass)}};scrl.ui.Scroller.prototype.animateScroll=function(el,x,steps,delayfactor){var me=this;if(!delayfactor||delayfactor<1)delayfactor=1;if(delayfactor>10)delayfactor=10;if(steps>0){var a=steps;if(x<el.scrollLeft)el.scrollLeft-=Math.floor(this.linkWidth/a);if(x>el.scrollLeft)el.scrollLeft+=Math.floor(this.linkWidth/a);var alt=Math.floor(steps*10/Math.pow((delayfactor-9),2));window.setTimeout(function(){me.animateScroll(el,x,steps-1,delayfactor)},alt)}else{el.scrollLeft=x;me.isAnimating=false;this.selectItem(this.currentId)}};scrl.ui.Scroller.prototype.createlinkClickHandler=function(me,id){return function(){me.selectItem(id);me.centerFlag?me.centerOnItem(id):null}};scrl.ui.Scroller.prototype.selectItem=function(id){this.setControls(this.currentPage);this.itemLookup[this.currentId].item.style.display='none';this.removeClass(this.itemLookup[this.currentId].link,this.selectedItemClass);var animate=false;if(this.formerId&&this.formerId!=id){animate=true}this.formerId=id,this.currentId=id;var selectedItem=this.itemLookup[id];if(this.displayItemContentClass&&selectedItem.item.className.indexOf(this.displayItemContentClass<0)){selectedItem.item.className+=' '+this.displayItemContentClass}selectedItem.link.className=this.selectedItemClass;if(animate==true){$("#"+selectedItem.id+"_old").fadeIn("fast")}else{selectedItem.item.style.display='block'}this.callbackOnSelect?eval(this.callbackOnSelect):null};scrl.ui.Scroller.prototype.selectSpecificItem=function(id){if(this.centerFlag){this.setControls();this.centerOnItem(id)}else{this.scrollToItem(id)}this.selectItem(id)};scrl.ui.Scroller.prototype.createlinkFocusHandler=function(me,id){return function(){me.scrollToItem(id)}};scrl.ui.Scroller.prototype.centerOnItem=function(id){this.currentPage=this.itemLookup[id].onpage;this.currentPos=this.itemLookup[id].pos;var centerLoc=this.linkWidth*(this.itemLookup[id].pos)-(this.linkWidth*Math.floor(this.itemsPerPage/2));var steps=Math.ceil(Math.abs(this.scroller.scrollLeft-centerLoc)/90)+1;(steps>20)?steps=20:null;if(!this.isAnimating){this.isAnimating=true;this.animateScroll(this.scroller,centerLoc,steps,5)}};scrl.ui.Scroller.prototype.scrollToItem=function(id){var pos,pageSteps=0,inPageFlag=false;this.setControls(this.currentPage);this.centerFlag?null:this.scrollToPage(this.currentPage,true);while(!inPageFlag){pos=this.itemLookup[id].pos-((this.scroller.scrollLeft/this.linkWidth))-(pageSteps*(this.itemsPerPage-1));if(pos<0){pageSteps-=1}else if(pos>this.itemsPerPage-1){pageSteps+=1}else{inPageFlag=true}}if(pageSteps){this.setControls(this.currentPage+pageSteps);this.centerFlag?null:this.scrollToPage(this.currentPage+pageSteps)}};scrl.ui.Scroller.prototype.createChangePageHandler=function(me,dir){return function(){var newPage=me.currentPage+dir;if(newPage>0&&newPage<=me.pageCount){me.scrollToPage(newPage)}}};scrl.ui.Scroller.prototype.removeClass=function(el,name){el.className=el.className.replace(new RegExp(name,'g'),'')};
