var scene;
var beginX;
var canvasX;
var currentX;
var canvasTime;
var imageCounter=0;
var trackingMouseMove = false;
var imageNum=1;

if (!window.SilverlightJSApplication1)
	window.SilverlightJSApplication1 = {};

SilverlightJSApplication1.Scene = function() 
{
}

SilverlightJSApplication1.Scene.prototype =
{
	handleLoad: function(plugIn, userContext, rootElement) 
	{
		this.plugIn = plugIn;
		scene = rootElement;
		resetBoxes(scene);
		setImage(scene);
	}
}

function onMouseDown(sender, mouseEventArgs)
{
  currentX = beginX = mouseEventArgs.getPosition(null).x;
  trackingMouseMove = true;
  sender.captureMouse();
}

function onMouseUp(sender, mouseEventArgs)
{
  sender.releaseMouseCapture();
  mouseEvtArgs = mouseEventArgs;
  trackingMouseMove = false;
  coastGroup(sender);
}

function onMouseEnter(sender, mouseEventArgs)
{
  if(trackingMouseMove)
  {
    sender.releaseMouseCapture();
    mouseEvtArgs = mouseEventArgs;
    trackingMouseMove = false;
    coastGroup(sender);
  }
}

function onMouseMove(sender, mouseEventArgs)
{
  if(trackingMouseMove)
  {
    beginX = currentX;
    currentX = mouseEventArgs.getPosition(null).x;
    slideGroup(sender, currentX - beginX);
  }
}

function coastGroup(sender)
{
  var friction = 1.08;
  var smoothness = 25;
  var timer = 0;
  var dist = (currentX-beginX);
  if(dist==1||dist==-1){dist=0}
  
  if(dist!=0)
  {
    for(i=Math.abs(dist)/friction;i>.5;i=i/friction)
    {
      if(dist>0)
      {
        setTimeout("slideGroup(scene," + i + ")",timer);
      }
      else
      {
        setTimeout("slideGroup(scene," + -i + ")",timer);
      }
      timer += smoothness;
    }
  }
}

function slideGroup(sender, speed)
{

  for(i=0;i<9;i++){
    sender.findName("Box"+i)["Canvas.Left"] += speed;
    setOpacity(sender,i);
  }
  
  if(sender.findName("Box1")["Canvas.Left"]>=72)
  {
    imageCounter--;
    if(imageCounter<0){imageCounter=imageCount;}
    resetBoxes(sender);
  }
  else if(sender.findName("Box1")["Canvas.Left"]<=-128)
  {
    imageCounter++;
    if(imageCounter>imageCount){imageCounter=0;}
    resetBoxes(sender);
  }
  
  setImage(sender);

}

function resetBoxes(sender)
{
  for(i=0;i<9;i++){
    sender.findName("Box"+i)["Canvas.Left"]=(100*i)-128;
    setOpacity(sender,i);
    loadImage(sender,i);
    pauseUntilReset=false;
  }
}

function setOpacity(sender,i)
{
  if(sender.findName("Box"+i)["Canvas.Left"]+50<635/2){
    sender.findName("Box"+i)["Opacity"]=(sender.findName("Box"+i)["Canvas.Left"]+90)/(635/2);
  }
  else{
    sender.findName("Box"+i)["Opacity"]=(635/sender.findName("Box"+i)["Canvas.Left"])-1;
  }
}

function loadImage(sender,i)
{
  var image=imageCounter+i;
  if(image>imageCount){image=image-imageCount-1}
  else if(image<0){image=imageCount-imageCounter+i}
  sender.findName("image"+i)["Source"] = images[image];
}

function setImage(sender)
{
  var centerPoint = 320;
  
  if(centerPoint>=sender.findName("Box4")["Canvas.Left"]&&centerPoint<=sender.findName("Box4")["Canvas.Left"]+100)
  {transitionTo(sender, sender.findName("image4")["Source"]);}
  else if(centerPoint>=sender.findName("Box3")["Canvas.Left"]&&centerPoint<=sender.findName("Box3")["Canvas.Left"]+100)
  {transitionTo(sender, sender.findName("image3")["Source"]);}
  else if(centerPoint>=sender.findName("Box5")["Canvas.Left"]&&centerPoint<=sender.findName("Box5")["Canvas.Left"]+100)
  {transitionTo(sender, sender.findName("image5")["Source"]);}
}

function transitionTo(sender,url)
{
  if(sender.findName("imageMain"+imageNum)["Source"] != url)
  {
    sender.findName("fadeImageOut"+imageNum).begin();
    changeImageNum();
    sender.findName("imageMain"+imageNum)["Source"]=url;
    sender.findName("fadeImageIn"+imageNum).begin();
  }
}

function changeImageNum()
{
  if(imageNum==1){imageNum=2}
  else if(imageNum==2){imageNum=1}
}