var mousex = 0;
var mousey = 0;
var maxVelocity = 10;
var scrollVelocity = 0;
var scrollState = '';
var targetPosition = 0;
var scrollState = ''; 

var driftingTarget = 10;
var driftingStartPoint = 0;
var driftingInterval = -15;

var boxPosX = 0;
var boxPosY = 0;

var infoTextBox = document.getElementById('copy_showcase');
var wrapper = document.getElementById('wrapper');
var previewBox = document.getElementById('imageContainer');
var imageContainerContents = document.getElementById('imageContainerContents');
var previewWidth = previewBox.offsetWidth;
var contentPosition;
var cursor = {x:0, y:0};



function startScroller() {

	contentPosition = initialOffsetLeft;
	targetPosition = initialOffsetLeft;
	scrollState = 'decelerating'; 
	
	if (window.Event && document.captureEvents) {
		document.captureEvents(Event.MOUSEMOVE);
	}
	
	document.onmousemove = getMousePos;
	window.setInterval('updatePortfolioPos()', 5);
	
}


function getMousePos(e) {
    e = e || window.event;
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

previewBox.onmouseover = function() {
	scrollState = 'accelerating'; 
}

previewBox.onmouseout = function() {
	scrollState = 'decelerating'; 
}

function getVelocityInfo() {

	if (scrollState == 'accelerating') {
		
		mousex = cursor.x;
		mousey = cursor.y;
		 	
		var boxPosX =  mousex - wrapper.offsetLeft;
		var boxPosY =  mousey - wrapper.offsetTop;
	
		var distanceFromCentre = (boxPosX - (previewBox.offsetWidth/2))/(previewBox.offsetWidth/2);
		distanceFromCentre = Math.pow(distanceFromCentre, 9);
		distanceFromCentre = distanceFromCentre.toFixed(2);
		scrollVelocity = Math.round(distanceFromCentre * maxVelocity, 0);
		
		if (scrollVelocity != 0) {
			
			clearLinkTabs(); // clear thisTab status of other M2 items
			driftingTarget = 10; // reset drifting target if movement applied
			driftingInterval = -90;
			infoFadeDirection = 'out'; // if the scroller is moving text is fading 
			infoFadeText = '';
		}
		
	} 
	
}

function updatePortfolioPos() {	

	getVelocityInfo(); // determine if scrolle is being played with
	fadeInfo(); // determine if scrolle is being played with
	
	
	var predictedContentPosition = contentPosition - Math.floor(scrollVelocity);
	
	if ((predictedContentPosition <= 0) && (predictedContentPosition >= (previewBox.offsetWidth  - imageContainerContents.offsetWidth))) {
		contentPosition = predictedContentPosition; // move the box if it is in the required range
	}
		
	document.getElementById('imageContainerContents').style.left = contentPosition + 'px';
			
	if (scrollState == 'decelerating') {
	
		if (Math.floor(scrollVelocity) != 0) {
			if (scrollVelocity > 0) {
				scrollVelocity = (scrollVelocity - .1);
			} else {
				scrollVelocity = (scrollVelocity + .1);
			}
		}

	}
		
		if (driftingTarget == 10) { // set drift state variables if drifitng target 'no set'
		
			driftingStartPoint = contentPosition;
			driftingTarget = (Math.ceil(driftingStartPoint / previewWidth)) * previewWidth; // use ceil - values always under 0
				
			if (Math.abs(driftingStartPoint % previewWidth) > (previewWidth/2)) {
				driftingTarget -= previewWidth; // add preview width to scroll to nearest picture
			}
		
		
		}

		driftingInterval += 2;
		
		if (driftingInterval < 90) {
		
			var locationModifier = (Math.sin(driftingInterval* Math.PI/180) + 1)/2;
		
			if (driftingTarget > driftingStartPoint) {
				contentPosition = driftingStartPoint + ((driftingTarget - driftingStartPoint) * locationModifier);
			} else {
				contentPosition = driftingStartPoint - ((driftingStartPoint - driftingTarget) * locationModifier);
			}
			
		} else {
		
			driftingInterval = -90;
			contentPosition = driftingTarget;
			makeTextRequest(); // get new text now target is reached
			driftingTarget = 10;
			scrollState = '';
			scrollVelocity = 0;
			
		}
		
}

function goToTarget(itemID, destinationTarget) {	


		if (infoNextID != itemID) {
			
			// clear this tab status of other links
			clearLinkTabs	();	
	
			 // start drift to new destination 
			
			infoNextID = itemID;
			driftingStartPoint = contentPosition;
			driftingInterval = -90;
			driftingTarget = destinationTarget;
			scrollState = 'decelerating';
			
			infoFadeDirection = 'out';
			infoFadeText = '';
			
		}

}


function makeTextRequest() {
	for (keyVal in navTargetArray) {
		if (driftingTarget == navTargetArray[keyVal]) {
			nextItemID = keyVal.replace('link_', '')
			setTabbedLink(nextItemID);
			requestURL = '../../scripts/item_text.xml?itemID=' + nextItemID;
			makeRequest(requestURL);
		}
	}
}

	

