var container;
var scroller;
var track;
var leftButton;
var rightButton;
var page=-1;
var totalPages=15;
var pageButtonsVisible=false;
var leftFadeEffect=null,rightFadeEffect=null;
var leftFadeTimer=null,rightFadeTimer=null;
var leftCanFade=true,rightCanFade=true;
var timer=null;
var speed=0;
var active=false;
var startSpeed=0;
var upToSpeed=false;
var pointer;
var currentPointerPos=0;
var caseScroller;
var shiftDown=false;

var scrollPositions=[{pointerPos:108,scrollPos:0},
                     {pointerPos:331,scrollPos:0},
                     {pointerPos:524,scrollPos:160},
                     {pointerPos:714,scrollPos:304},
                     {pointerPos:921,scrollPos:505},
                     {pointerPos:1048,scrollPos:654},
                     {pointerPos:1221,scrollPos:856},
                     {pointerPos:1457,scrollPos:1000},
                     {pointerPos:1662,scrollPos:1220},
                     {pointerPos:1876,scrollPos:1428},
                     {pointerPos:2096,scrollPos:1860},
                     {pointerPos:2334,scrollPos:2000},
                     {pointerPos:2558,scrollPos:2200},
                     {pointerPos:2785,scrollPos:2400},
                     {pointerPos:2940,scrollPos:2600}
                     ];

function setup()
{
  //return;
  var loc=document.location.toString();
  var anchor='';
  var anchorPos=loc.indexOf("#");
  if (anchorPos!=-1)
    anchor=loc.substring(anchorPos+1,loc.length);
  container=$('cms-scrollercontainer');
  scroller=$('cms-scroller');
  track=$('cms-scrollertrack');
  scroller.style.overflowX='hidden';
  scroller.scrollLeft=0;
  leftButton=$('cms-scrollerleftfade');
  rightButton=$('cms-scrollerrightfade');
  pointer=$('cmscase-pointer');
  caseScroller=$('cms-casescroller');
  caseScroller.style.overflowX='hidden';
  caseScroller.scrollLeft=0;
  
  Event.observe(container,'mouseover',mouseover,false);
  Event.observe(container,'mousemove',mousemove,false);
  Event.observe(container,'mouseout',mouseout,false);
  
  
  leftButton=$('cms-casescrollerleft');
  rightButton=$('cms-casescrollerright');
  Event.observe(leftButton,'click',scrollLeft,true);
  Event.observe(rightButton,'click',scrollRight,true); 
  
  //goto start page;
  switch (anchor)
    {
      case 'bridisco':
        selectPage(1);
        break;
      
      case 'draper':
        selectPage(2);
        break;
      
      case 'ec2i':
        selectPage(3);
        break;

      case 'evans':
        selectPage(4);
        break;
      
      case 'gloss':
        selectPage(5);
        break;
      
      case 'jdwilliams':
        selectPage(6);
        break;
      
      case 'maplin':
        selectPage(7);
        break;
      
      case 'ng15':
        selectPage(8);
        break;

      case 'otto':
        selectPage(9);
        break;
      
      case 'rapid':
        selectPage(10);
        break;
      
      case 'redcats':
        selectPage(11);
        break;
        
      case 'routeco':
        selectPage(12);
        break;

      case 'spicers':
        selectPage(13);
        break;
        
      case 'tts':
        selectPage(14);
        break;
        
      case 'zebra':
        selectPage(15);
        break;
          
      default:
        selectPage(7);
    }
  new Effect.Appear(pointer,{duration:1.0});        
}

function selectPage(pageNum)
{
  if (pageNum==page||pageNum<1||pageNum>totalPages)
    return;
  var timeScale=1;
  if (shiftDown)
    timeScale=3;
    
  var pointerPos=scrollPositions[pageNum-1].pointerPos;
  var scrollPos=scrollPositions[pageNum-1].scrollPos;
  new Effect.Tween(pointer,currentPointerPos,pointerPos,{duration:(0.5*timeScale),transition:Effect.Transitions.sinoidal},function(p){pointer.style.left=p+'px';});
  new Effect.Tween(scroller,scroller.scrollLeft,scrollPos,{duration:(1.0*timeScale),transition:Effect.Transitions.sinoidal},function(p){scroller.scrollLeft=p;});
  new Effect.Tween(caseScroller,caseScroller.scrollLeft,(pageNum-1)*794,{duration:(0.25*timeScale),transition:Effect.Transitions.sinoidal},function(p){caseScroller.scrollLeft=p;});
      
  currentPointerPos=pointerPos;  
  page=pageNum;
  validatePageButtons();  
}



function scrollLeft(e)
{
  if (e.shiftKey)
    shiftDown=true;
  selectPage(page-1);
  shiftDown=false;
}

function scrollRight(e)
{
  if (e.shiftKey)
    shiftDown=true;
  selectPage(page+1);
  shiftDown=false;
}

function validatePageButtons()
{
  switch (page)
    {
      case 1:
        fadeLeft();
        appearRight();
        break;
    
      case totalPages:
        fadeRight();
        appearLeft();
        break;
      
      default:
        appearLeft();
        appearRight();
    }
}

function fadeLeftFinished()
{
  leftFadeEffect=null;
}

function fadeRightFinished()
{
  rightFadeEffect=null;
}

function appearLeftFinished()
{
  leftCanFade=true;
}

function appearRightFinished()
{
  rightCanFade=true;
}

function fadeLeft()
{
  if (leftCanFade)
    {
      if (leftFadeTimer)
        clearTimeout(leftFadeTimer);
      leftFadeTimer=null;
      leftFadeEffect=new Effect.Fade(leftButton,{duration:0.25,afterFinish:fadeLeftFinished});
    }
  else
    {
      if (leftFadeTimer)
        clearTimeout(leftFadeTimer);
      leftFadeTimer=setTimeout('fadeLeft();',250);
    }
}

function fadeRight()
{
  if (rightCanFade)
    {
      if (rightFadeTimer)
        clearTimeout(rightFadeTimer);
      rightFadeTimer=null;
      rightFadeEffect=new Effect.Fade(rightButton,{duration:0.25,afterFinish:fadeRightFinished});
    }
  else
    {
      if (rightFadeTimer)
        clearTimeout(rightFadeTimer);
      rightFadeTimer=setTimeout('fadeRight();',250);
    }
}

function appearLeft()
{
  if (leftFadeEffect)
    leftFadeEffect.cancel();
  leftCanFade=false;
  new Effect.Appear(leftButton,{duration:0.25,afterFinish:appearLeftFinished});
}

function appearRight()
{
  if (rightFadeEffect)
    rightFadeEffect.cancel();
  rightCanFade=false;
  new Effect.Appear(rightButton,{duration:0.25,afterFinish:appearRightFinished});
}

function showPageButtons()
{
  if (pageButtonsVisible)
    return;
  pageButtonsVisible=true;
  validatePageButtons();
}
  
function hidePageButtons()
{
  if (!pageButtonsVisible)
    return;
  pageButtonsVisible=false;
  fadeLeft();
  fadeRight();
}

function mouseMoveold(e)
{
  var leeway=50;
  var offset=container.viewportOffset();
  var mouseX=Event.pointerX(e)-offset.left;
  var mouseY=Event.pointerY(e)-offset.top;
  if (mouseX>=0&&mouseX<=(818+16+leeway)&&mouseY>=0&&mouseY<=172)
    showPageButtons();
  else
    hidePageButtons();
}

function getLocalMouse(e)
{
  var offset=container.viewportOffset();
  return {left:Event.pointerX(e)-offset.left,top:Event.pointerY(e)-offset.top};
}

function mouseover(e)
{
  if (active)
    return;
  active=true;
  speed=calcSpeed(e);
  if (speed>=0)
    startSpeed=1;
  else
    startSpeed=-1;
  stepUp();
}

function ismouseover(e)
{
  var buffer=-10;
  var mouse=getLocalMouse(e);
  return (mouse.left>-buffer&&mouse.left<770+buffer&&mouse.top>0&&mouse.top<178);
}

function calcSpeed(e)
{
  var midX=784/2;
  var mouse=getLocalMouse(e);
  var buffer=100;
  var pos=mouse.left-midX;
  if (Math.abs(pos)<buffer)
    pos=0;
  if (pos<0)
    pos+=buffer;
  else if (pos>0)
    pos-=buffer;
  pos/=20;
  return pos;
}

function mousemove(e)
{
  if (!upToSpeed)
    return;
  speed=calcSpeed(e);    
}

function mouseout(e)
{
  if (ismouseover(e))
    return;
  active=false;
  if (timer)
    clearTimeout(timer);
  timer=setTimeout('stepDown();',20);
}

function stepDown()
{
  speed*=0.9;
  if (Math.abs(speed)<0.5)
    {
      if (timer)
        clearTimeout(timer);
      upToSpeed=true;
      timer=null;
      return;
    }
  moveScroller(speed,'stepDown();');
}

function stepUp()
{
  startSpeed*=1.1;
  if (Math.abs(startSpeed)>=Math.abs(speed))
    {
      if (timer)
        clearTimeout(timer);
      upToSpeed=true;
      setTimeout('step();',20);
      return;
    }
  moveScroller(startSpeed,'stepUp();');
}

function step()
{
  if (false&&scroller.scrollLeft<=100&&speed<0)
    {
      if (timer)
        clearTimeout(timer);
      timer=setTimeout('easeDown();',20);
      return;
    }
  moveScroller(speed,'step();');
}

function moveScroller(inSpeed,func)
{
  var actualSpeed=inSpeed;
  var ticks=20;
  if (Math.abs(actualSpeed)<1)
    {
      actualSpeed*=2;
      ticks+=20;
    }
  if (Math.abs(actualSpeed)<1)
    {
      actualSpeed*=2;
      ticks+=20;
    }
  if (Math.abs(actualSpeed)<1)
    {
      actualSpeed*=2;
      ticks+=20;
    }
  scroller.scrollLeft+=actualSpeed;
  timer=setTimeout(func,ticks);
}

function easeDown()
{
  if (scroller.scrollLeft==0)
    {
      if (timer)
        clearTimeout(timer);
      timer=null;
      return;
    }
  speed*=0.9;
  scroller.scrollLeft+=speed;
  timer=setTimeout('easeDown();',20);
}

Event.observe(window,'load',setup,false);