if (!window.Scrolling)
	window.Scrolling = {};

Scrolling.Page = function() 
{
}

Scrolling.Page.prototype =
{
	handleLoad: function(control, userContext, rootElement) 
	{
		this.offset = 0;
		this.widths = new Array(220, 340, 190, 280, 200, 310, 220);
		this.control = control;
		
		this.scrollHost = rootElement.FindName("ScrollHost");
		
		// Use timer on FF to avoid script timeouts.
		// Use Storyboards on IE to get smoother animations.
		if (Silverlight.ua.Browser == 'Firefox')
			window.setInterval(Silverlight.createDelegate(this, this.handleTickerCompleted), 30);
		else {
			this.ticker = rootElement.FindName("Ticker");
			this.ticker.addEventListener("Completed", Silverlight.createDelegate(this, this.handleTickerCompleted));
			this.ticker.Begin();
		}
		
		new WheelHelper().wheelScrolled = Silverlight.createDelegate(this, this.handleMouseWheel);
	},
	
	handleMouseWheel: function(delta) {
		this.offset += delta * 15;
	},
	
	handleTickerCompleted: function() {
		if (this.ticker)
			this.ticker.Begin();
		
		// Simple easing animation to smooth out the value.
		var currentOffset = this.scrollHost["Canvas.Left"];
		var actualOffset = (this.offset - currentOffset) * .1 + currentOffset;

		this.scrollHost["Canvas.Left"] = actualOffset;

		var index = 0;
		var farLeft = 1000000;
		var farRight = -1000000;
		var rightChild = null;
		
		for (var i = 0; i < this.scrollHost.children.count; ++i) {
			
			var child = this.scrollHost.children.getItem(i);
			
			var width = this.widths[index];
			var left = child["Canvas.Left"];
			var childOffset = left + actualOffset;
			if (childOffset + width < 0) {
				child["Canvas.Left"] = left + this.scrollHost.width + 10;
				left = left + this.scrollHost.width + 10;
			}

			if (left < farLeft)
				farLeft = left;

			if (left > farRight) {
				farRight = left;
				rightChild = child;
			}
			++index;
		}
		
		if (farLeft + actualOffset > 0)
			rightChild["Canvas.Left"] =  rightChild["Canvas.Left"] - this.scrollHost.width - 10;
		/*

		foreach (FrameworkElement child in this.ScrollHost.Children) {
			double width = this.widths[index];
			double left = (double)child.GetValue(Canvas.LeftProperty);
			double childOffset = left + actualOffset;
			if (childOffset + width < 0) {
				child.SetValue<double>(Canvas.LeftProperty, left + this.ScrollHost.Width + 10);
				left = left + this.ScrollHost.Width + 10;
			}

			if (left < farLeft)
				farLeft = left;

			if (left > farRight) {
				farRight = left;
				rightChild = child;
			}
			++index;
		}

		if (farLeft + actualOffset > 0) {
			rightChild.SetValue<double>(Canvas.LeftProperty, (double)rightChild.GetValue(Canvas.LeftProperty) - this.ScrollHost.Width - 10);
		}
	*/
	}
}
