function OSMS_Ticker() {
}

OSMS_Ticker.ticker1Pos = 0;
OSMS_Ticker.ticker2Pos = 0;
// Default
OSMS_Ticker.TICKER_MOVE_INTERVAL = 50;
// Default
OSMS_Ticker.TICKER_MOVE_DISTANCE = 50;
OSMS_Ticker.TICKER_START_POSITION = 0;
OSMS_Ticker.TICKER_SPACING = 50;
OSMS_Ticker.tickerObject1 = null;
OSMS_Ticker.tickerObject2 = null;
OSMS_Ticker.tickerExecuter = null;
OSMS_Ticker.tickerContainerWidth = null;
OSMS_Ticker.tickerContentWidth = null;
OSMS_Ticker.tickerPadding = 0;
// Set to 0 when ticker 1 is displaying, set to 1 when ticker2 is displaying
OSMS_Ticker.displayState = 0;

// Public
OSMS_Ticker.tickerLeft = function() {
	//alert("offsetWidth: " + OSMS_Ticker.tickerContentWidth + ", ticker1Pos: " + Math.abs(OSMS_Ticker.ticker1Pos));
	
	// Detect when the right edge of the ticker container goes off the screen
	//if (OSMS_Ticker.tickerContentWidth < (Math.abs(OSMS_Ticker.ticker1Pos) + OSMS_Ticker.tickerPadding)) {
	if ((OSMS_Ticker.ticker1Pos <= -1*OSMS_Ticker.tickerContentWidth) && OSMS_Ticker.displayState == 0) {
		
		//alert("Ticker 1 done: Pos:" + OSMS_Ticker.ticker1Pos + ", style: " + OSMS_Ticker.tickerObject1.style.left);
		OSMS_Ticker.ticker1Pos = OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING;
		OSMS_Ticker.displayState = 1
		//OSMS_Ticker.tickerObject1.style.left = (OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING) + "px";
		
		/*
		if (OSMS_Ticker.displayState == 0) {
			OSMS_Ticker.displayState = 1;
			OSMS_Ticker.tickerObject1.style.left = OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING + "px";
		}
		else {
			OSMS_Ticker.displayState = 0;
			OSMS_Ticker.tickerObject2.style.left = OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING + "px";
		}
		*/
		
		//OSMS_Ticker.stopTicker();
		//alert(OSMS_Ticker.ticker1Pos + ", " + OSMS_Ticker.tickerContentWidth);
		//OSMS_Ticker.ticker1Pos = (OSMS_Ticker.tickerContentWidth);
		//OSMS_Ticker.tickerExecuter = new PeriodicalExecuter(OSMS_Ticker.tickerLeft, OSMS_Ticker.TICKER_MOVE_INTERVAL/1000);
		//return;
	}
	if ((OSMS_Ticker.ticker2Pos <= -1*OSMS_Ticker.tickerContentWidth) && OSMS_Ticker.displayState == 1) {
		
		//alert("Ticker 2 done: Pos:" + OSMS_Ticker.ticker2Pos + ", style: " + OSMS_Ticker.tickerObject2.style.left);
		OSMS_Ticker.ticker2Pos = OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING;
		OSMS_Ticker.displayState = 0
	}
	// Detect if the left edge of the ticker reaches the edge of the screen with padding
	/*
	if (Math.abs(OSMS_Ticker.ticker1Pos) >= (OSMS_Ticker.tickerContentWidth - OSMS_Ticker.tickerContainerWidth + OSMS_Ticker.tickerPadding)) {
		
		//alert("Reached the end of the ticker content");
		OSMS_Ticker.stopTicker();
		OSMS_Ticker.tickerExecuter = new PeriodicalExecuter(OSMS_Ticker.tickerRight, OSMS_Ticker.TICKER_MOVE_INTERVAL/1000);
		return;
	}
	*/
	
	try {
		OSMS_Ticker.ticker1Pos -= OSMS_Ticker.TICKER_MOVE_DISTANCE;
		OSMS_Ticker.ticker2Pos -= OSMS_Ticker.TICKER_MOVE_DISTANCE;
		OSMS_Ticker.tickerObject1.style.left = OSMS_Ticker.ticker1Pos + "px";
		OSMS_Ticker.tickerObject2.style.left = OSMS_Ticker.ticker2Pos + "px";
		return;
	}
	catch (e) {
		alert("OSMS_Ticker.tickerLeft threw exception: + " + e);
		try {
			OSMS_Ticker.stopTicker();
		}
		catch (e) {
			alert("OSMS_Ticker.stopTicker threw exception: + " + e);
			return;
		}
	}
}

OSMS_Ticker.tickerRight = function() {
	// Detect when the left edge of the ticker container goes off the screen
	//if ((OSMS_Ticker.ticker1Pos + OSMS_Ticker.tickerPadding) > OSMS_Ticker.tickerContainerWidth) {
	// Detect if the right edge of the ticker reaches the edge of the screen with padding
	if (OSMS_Ticker.ticker1Pos >= OSMS_Ticker.tickerPadding) {
		//alert("Reached the beginning of the ticker content");
		OSMS_Ticker.stopTicker();
		OSMS_Ticker.tickerExecuter = new PeriodicalExecuter(OSMS_Ticker.tickerLeft, OSMS_Ticker.TICKER_MOVE_INTERVAL/1000);
		return;
	}
	
	try {
		OSMS_Ticker.ticker1Pos += OSMS_Ticker.TICKER_MOVE_DISTANCE;
		OSMS_Ticker.tickerObject1.style.left = OSMS_Ticker.ticker1Pos + "px";
		return;
	}
	catch (e) {
		alert("OSMS_Ticker.tickerRight threw exception: + " + e);
		try {
			OSMS_Ticker.stopTicker();
		}
		catch (e) {
			alert("OSMS_Ticker.stopTicker threw exception: + " + e);
			return;
		}
	}
}


OSMS_Ticker.init = function(text, startPos, interval, distance, padding) {
	try {
		
		if (startPos != null) {
			OSMS_Ticker.TICKER_START_POSITION = startPos;
			OSMS_Ticker.ticker1Pos = startPos;
		}
		if (interval != null && interval > 10) {
			
			OSMS_Ticker.TICKER_MOVE_INTERVAL = interval;
		}
		
		if (distance != null && distance > 0) {
			OSMS_Ticker.TICKER_MOVE_DISTANCE = distance;
		}
		if (padding != null && padding > 0) {
			OSMS_Ticker.tickerPadding = padding;
		}
		
		OSMS_Ticker.tickerObject1 = document.getElementById("ticker1");
		OSMS_Ticker.tickerObject2 = document.getElementById("ticker2");
		
		if (text == null || text == "") {
			//alert("Please supply some text when initializing!");
			OSMS_Ticker.tickerObject1.innerHTML = "Please supply some text when initializing!";
		}
		else {
			OSMS_Ticker.tickerObject1.innerHTML = text;
			OSMS_Ticker.tickerObject2.innerHTML = text;
		}
		
		//OSMS_Ticker.tickerContentWidth = OSMS_Ticker.tickerObject1.offsetWidth;
		//OSMS_Ticker.tickerContentWidth = OSMS_Ticker.tickerObject1.clientWidth;
		OSMS_Ticker.tickerContentWidth = OSMS_Ticker.tickerObject1.scrollWidth;
		
		OSMS_Ticker.tickerObject2.style.left = OSMS_Ticker.tickerContentWidth;
		OSMS_Ticker.ticker2Pos = OSMS_Ticker.tickerContentWidth + OSMS_Ticker.TICKER_SPACING + OSMS_Ticker.TICKER_START_POSITION;
		//alert("Ticker width: " + OSMS_Ticker.tickerContentWidth + ", ticker2 position: " + OSMS_Ticker.ticker2Pos);
		//alert(OSMS_Ticker.ticker2Pos);
		
		OSMS_Ticker.tickerContainerWidth = document.getElementById("tickerContainer").offsetWidth;
		
		//alert("Content width: " + OSMS_Ticker.tickerContentWidth + ", Container width: " + OSMS_Ticker.tickerContainerWidth);
	}
	catch (e) {
		alert("OSMS_Ticker.init threw exception: + " + e);
		return;
	}
}

OSMS_Ticker.startTicker = function(goLeft) {
	try {
		if (goLeft) {
			OSMS_Ticker.tickerExecuter = new PeriodicalExecuter(OSMS_Ticker.tickerLeft, OSMS_Ticker.TICKER_MOVE_INTERVAL/1000);
		}
		else {
			OSMS_Ticker.tickerExecuter = new PeriodicalExecuter(OSMS_Ticker.tickerRight, OSMS_Ticker.TICKER_MOVE_INTERVAL/1000);
		}
	}
	catch (e) {
		alert("OSMS_Ticker.startTicker threw exception: + " + e);
		return;
	}
}

OSMS_Ticker.stopTicker = function() {
	try {
		OSMS_Ticker.tickerExecuter.stop();
	}
	catch (e) {
		alert("OSMS_Ticker.stopTicker threw exception: + " + e);
		return;
	}
}