/* this function runs the initialize function once the DOM has loaded */
$(document).ready(function(){
	initTicker();
});

/* this function initializes all functions */
function initTicker(){
	/* controls */
	var timer = 1;
	var dater = 1;
	var pagination = 1;
	var ticker = 1;

	if (timer == 1){
		startTimer();
	}
	if (dater == 1){
		startDate();
	}
	if (pagination == 1){
		setPagination();
	}
	if (ticker == 1){
		setTickerOverlay();
		var ticker_timeout = 5;
		ticker_timeout = ticker_timeout * 1000;	
		var page_number = 1;
		setTimeout('getKeywords(\''+page_number+'\')',ticker_timeout);
	}
	setPaginationCoverAlert();
}

function setPaginationCoverAlert(){
	$('.ticker-pagination-cover').click(function(){
		alert('Please wait for the results to finish loading!');
	});
}

function setPaginationCover(){
	$('.ticker-pagination-cover').css('display','block');
}

function removePaginationCover(){
	$('.ticker-pagination-cover').css('display','none');
}

function resetTiles(){
	resetTilesKeyword();
	resetTilesPage();
	resetTilesPos();
	resetTilesTraffic();
}

function resetTilesKeyword(){
	var tile = $('.tile-number-small');
	tile.html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
	tile.css('top', '0px');
}

function resetTilesPage(){
	var tile = $('.tile-number-small');
	tile.html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
	tile.css('top', '0px');
}

function resetTilesPos(){
	var tile = $('.tile-number-small');
	tile.html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
	tile.css('top', '0px');
}

function resetTilesTraffic(){
	var tile = $('.tile-number-traffic');
	tile.html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
	tile.css('top', '0px');
	var tile = $('.tile-number-traffic-chars');
	tile.html('<img width="20" height="2045" src="/images/ticker/tiles/20/sseo-ticker-Characters_Yellow.png" alt="" />');
	tile.css('top', '0px');
}

function setPagination(){
	var max_pages = getMaxPages();
	updatePageOptions(1,max_pages);
	$('.ticker-arrow-left').click(function(){
		var max_pages = getMaxPages();
		incrementCurrentPage('prev',max_pages);
		var current_page = getCurrentPage(max_pages);
		updatePageOptions(current_page,max_pages);
		var prev_page = ((current_page-1) < 1) ? 1 : current_page-1;
		var next_page = ((current_page+1) > max_pages) ? max_pages : current_page+1;

		/* ajax call */
		setTickerOverlay();
		resetTiles();
		var ticker_timeout = 5;
		ticker_timeout = ticker_timeout * 1000;	
		var page_number = current_page;
		setTimeout('getKeywords(\''+page_number+'\')',ticker_timeout);
	});
	$('.ticker-arrow-right').click(function(){
		var max_pages = getMaxPages();
		incrementCurrentPage('next',max_pages);
		var current_page = getCurrentPage(max_pages);
		updatePageOptions(current_page,max_pages);
		var prev_page = ((current_page-1) < 1) ? 1 : current_page-1;
		var next_page = ((current_page+1) > max_pages) ? max_pages : current_page+1;
		
		/* ajax call */
		setTickerOverlay();
		resetTiles();
		var ticker_timeout = 5;
		ticker_timeout = ticker_timeout * 1000;	
		var page_number = current_page;
		setTimeout('getKeywords(\''+page_number+'\')',ticker_timeout);
	});
}

function getMaxPages(){
	var max_pages = 10;
	var ajax_url = base_url+'ajax/getMaxPages';
	var savedData = $.ajax({
		type: "GET",
		//cache: false,
		async: false,
		url: ajax_url,
		data: '',
		success: function(){
		}
	});
	var info = parseInt(savedData.responseText);
	if (!isNaN(info)){
		max_pages = info;
	}
	return max_pages;
}

function getCurrentPage(max_pages){
	var current_page = parseInt($('#current-page').html());
	if (current_page == null || current_page == 'undefined'){
		$('#current-page').html(1);
	}
	current_page = (current_page < 1) ? 1 : current_page;
	current_page = (current_page > max_pages) ? max_pages : current_page;

	return current_page;
}

function incrementCurrentPage(direction, max_pages){
	var current_page = parseInt($('#current-page').html());
	switch(direction){
		case 'prev':
			current_page = ((current_page-1) <= 1) ? 1 : current_page-1;
			$('#current-page').html(current_page);
			break;
		case 'next':
			current_page = ((current_page+1) >= max_pages) ? max_pages : current_page+1;
			$('#current-page').html(current_page);
			break;
	}
}

function nullifyArrow(direction){
	switch(direction){
		case 'left':
			$('.ticker-arrow-left').html('<img width="23" height="23" src="/images/ticker/chrome/ticker-arrow-left-inactive.png" alt="" />');
			$('.ticker-arrow-left').css('cursor', 'default');
			break;
		case 'right':
			$('.ticker-arrow-right').html('<img width="23" height="23" src="/images/ticker/chrome/ticker-arrow-right-inactive.png" alt="" />');
			$('.ticker-arrow-right').css('cursor', 'default');
			break;
	}
}

function rectifyArrow(direction){
	switch(direction){
		case 'left':
			$('.ticker-arrow-left').html('<img width="23" height="23" src="/images/ticker/chrome/ticker-arrow-left-active.png" alt="" />');
			$('.ticker-arrow-left').css('cursor', 'pointer');
			break;
		case 'right':
			$('.ticker-arrow-right').html('<img width="23" height="23" src="/images/ticker/chrome/ticker-arrow-right-active.png" alt="" />');
			$('.ticker-arrow-right').css('cursor', 'pointer');
			break;
	}
}

function updatePageOptions(current_page,max_pages){
	var page1_html = '<div class="ticker-pagination-number ticker-pagination-1">1</div>';
	var page2_html = '<div class="ticker-pagination-number ticker-pagination-2">2</div>';
	var page3_html = '<div class="ticker-pagination-number ticker-pagination-3">3</div>';
	var page4_html = '<div class="ticker-pagination-number ticker-pagination-4">4</div>';
	var page5_html = '<div class="ticker-pagination-number ticker-pagination-5">5</div>';
	if (max_pages < 5){
		//add pages
		for (var i = 1; i <= 5; i++){
			if ($('.ticker-pagination-'+i).length == 0){
				var tmp_html = '';
				switch (i){
					case 1:
						tmp_html = page1_html;
						break;
					case 2:
						tmp_html = page2_html;
						break;
					case 3:
						tmp_html = page3_html;
						break;
					case 4:
						tmp_html = page4_html;
						break;
					case 5:
						tmp_html = page5_html;
						break;
				}
				$('.paginate-'+i).append(tmp_html);	
			}	
		}
		//remove pages
		var tmp_var = 5-max_pages;
		for (var i = 0; i < tmp_var; i++){
			var tmp_page = 5-i;		
			if ($('.ticker-pagination-'+tmp_page).length > 0){
				$('.ticker-pagination-'+tmp_page).remove();
			}
		}
	}
	else{
		//add pages
		for (var i = 1; i <= 5; i++){
			if ($('.ticker-pagination-'+i).length == 0){
				var tmp_html = '';
				switch (i){
					case 1:
						tmp_html = page1_html;
						break;
					case 2:
						tmp_html = page2_html;
						break;
					case 3:
						tmp_html = page3_html;
						break;
					case 4:
						tmp_html = page4_html;
						break;
					case 5:
						tmp_html = page5_html;
						break;
				}
				$('.paginate-'+i).append(tmp_html);	
			}	
		}
	}
	if ($('.ticker-pagination-1').length > 0){
		$('.ticker-pagination-1').removeClass('highlighted-page');
	}
	if ($('.ticker-pagination-2').length > 0){
		$('.ticker-pagination-2').removeClass('highlighted-page');
	}
	if ($('.ticker-pagination-3').length > 0){
		$('.ticker-pagination-3').removeClass('highlighted-page');
	}
	if ($('.ticker-pagination-4').length > 0){
		$('.ticker-pagination-4').removeClass('highlighted-page');
	}
	if ($('.ticker-pagination-5').length > 0){
		$('.ticker-pagination-5').removeClass('highlighted-page');
	}
	var page1,page2,page3,page4,page5;
	/* <div class="highlighted-page"></div> */
	$('.ticker-pagination-'+current_page).addClass('highlighted-page');
	if (current_page <= 1){
		nullifyArrow('left');
		if (current_page == max_pages){
			nullifyArrow('right');
		}
		else{
			rectifyArrow('right');
		}
		page1 = current_page;
		page2 = current_page+1;
		page3 = current_page+2;
		page4 = current_page+3;
		page5 = current_page+4;
	}
	else if (current_page >= max_pages){
		rectifyArrow('left');
		nullifyArrow('right');
		if (max_pages >= 5){
			// if there are 5 or more pages
			page1 = max_pages-4;
			page2 = max_pages-3;
			page3 = max_pages-2;
			page4 = max_pages-1;
			page5 = max_pages;
		}
		else if (max_pages == 4){
			// if there are 4 pages
			page1 = max_pages-3;
			page2 = max_pages-2;
			page3 = max_pages-1;
			page4 = max_pages;
		}
		else if (max_pages == 3){
			// if there are 3 pages
			page1 = max_pages-2;
			page2 = max_pages-1;
			page3 = max_pages;
		}
		else if (max_pages == 2){
			// if there are 2 pages
			page1 = max_pages-1;
			page2 = max_pages;
		}
		else if (max_pages == 1){
			nullifyArrow('left');
			// if there is 1 page
			page1 = max_pages;
		}
	}
	else if (current_page == 2){
		rectifyArrow('left');
		if (current_page == max_pages){
			nullifyArrow('right');
		}
		else{
			rectifyArrow('right');
		}
		page1 = current_page-1;
		page2 = current_page;
		page3 = current_page+1;
		page4 = current_page+2;
		page5 = current_page+3;
	}
	else if (current_page == (max_pages - 1)){
		rectifyArrow('right');
		rectifyArrow('left');
		if (max_pages >= 5){
			// if there are 5 or more pages
			page1 = current_page-3;
			page2 = current_page-2;
			page3 = current_page-1;
			page4 = current_page;
			page5 = current_page+1;
		}
		else if (max_pages == 4){
			// if there are 4 pages
			page1 = current_page-2;
			page2 = current_page-1;
			page3 = current_page;
			page4 = current_page+1;
		}
		else if (max_pages == 3){
			// if there are 3 pages
			page1 = current_page-1;
			page2 = current_page;
			page3 = current_page+1;
		}
	}
	else{
		rectifyArrow('left');
		rectifyArrow('right');
		page1 = current_page-2;
		page2 = current_page-1;
		page3 = current_page;
		page4 = current_page+1;
		page5 = current_page+2;
	}
	if ($('.ticker-pagination-1').length > 0){
		$('.ticker-pagination-1').html(page1);
	}
	if ($('.ticker-pagination-2').length > 0){
		$('.ticker-pagination-2').html(page2);
	}
	if ($('.ticker-pagination-3').length > 0){
		$('.ticker-pagination-3').html(page3);
	}
	if ($('.ticker-pagination-4').length > 0){
		$('.ticker-pagination-4').html(page4);
	}
	if ($('.ticker-pagination-5').length > 0){
		$('.ticker-pagination-5').html(page5);
	}
}

//ajax function to refresh captcha
function getKeywords(page_number)
{
	setPaginationCover();
	var ajax_url = base_url+'ajax/getTickerResults/'+page_number;
	var ticker_keywords = new Array();
	var ticker_array = $.ajax({
		type: "GET",
		//cache: false,
		async: false,
		url: ajax_url,
		data: '',
		success: function(){
		}
	});
	ticker_string = ticker_array.responseText;
	startTicker(ticker_string);
}

function setTickerOverlay(){
	$('#ticker-main-center-middle-bottom').fadeTo('slow', 0.10);
	$('#ticker-overlay').css('display', 'block');
}

function removeTickerOverlay(){
	$('#ticker-overlay').css('display', 'none');
	$('#ticker-main-center-middle-bottom').fadeTo('slow', 1);
}

/* this function determines the appropriate final position for a keyword tiles and moves the keyword tiles to their appropriate final position */
function startTicker(ticker_string){
	resetTilesKeyword();
	removeTickerOverlay();
	var ticker_array = ticker_string.split(',');
	var keyword_string = '';
	var page_string = '';
	var pos_string = '';
	var traffic_string = '';
	for (var i = 0; i < ticker_array.length; i++){
		if (i % 4 == 0){
			if (keyword_string != ''){
				keyword_string = keyword_string+',';
			}
			keyword_string = keyword_string+ticker_array[i];	
		}
		else if (i % 4 == 1){
			if (page_string != ''){
				page_string = page_string+',';
			}
			page_string = page_string+ticker_array[i];	
		}
		else if (i % 4 == 2){
			if (pos_string != ''){
				pos_string = pos_string+',';
			}
			pos_string = pos_string+ticker_array[i];	
		}
		else if (i % 4 == 3){
			if (traffic_string != ''){
				traffic_string = traffic_string+',';
			}
			traffic_string = traffic_string+ticker_array[i];	
		}
	}
	var final_keyword_array = new Array();
	var final_page_array = new Array();
	var final_pos_array = new Array();
	var final_traffic_array = new Array();
	final_keyword_array = keyword_string.split(',');
	final_page_array = page_string.split(',');
	final_pos_array = pos_string.split(',');
	final_traffic_array = traffic_string.split(',');
	var test_keyword_array = new Array('health','insurance','test','outbound three words','lazy two','authority','checking','keywords','ranking','daily');
	continueTicker(final_keyword_array,0,final_page_array,final_pos_array,final_traffic_array);
}

function continueTicker(keyword_array, i, page_array, pos_array, traffic_array){
	i = parseInt(i);
	/* loop for 10 rows */
	if (i < 10){
		var row_delay = 0;
		row_delay = row_delay * 1000;	
		loadRow(keyword_array,i);
		loadRowPage(page_array,i);
		loadRowPos(pos_array,i);
		loadRowTraffic(traffic_array,i);
		i++;
		/*setTimeout('continueTicker(\''+keyword_array+'\',\''+i+'\')', row_delay);*/
		setTimeout('continueTicker(\''+keyword_array+'\',\''+i+'\',\''+page_array+'\',\''+pos_array+'\',\''+traffic_array+'\')', row_delay);
	}
	else{

	}
	if (i == 9){
		setTimeout('removePaginationCover()', 6000);
	}
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function loadRowTraffic(traffic_array, i){
	i = parseInt(i);
	if (i != 0){
		traffic_array = traffic_array.split(',');
	}
	var tmp_traffic = traffic_array[i];

	/* deal with the traffic tiles */
	if (tmp_traffic == null || tmp_traffic == 'undefined' || tmp_traffic == '0' || parseInt(tmp_traffic) == -1){
		/* this area takes care of the tiles that don't have a letter */
		/* blank tile code must go here */
		for (var iv = 0; iv < 10; iv++){
			var tile = '#tile-number-small-traffic-'+(i+1)+'-'+(iv+1);
			$(tile).html('<img width="20" height="2045" src="/images/ticker/tiles/20/sseo-ticker-Characters_Yellow.png" alt="" />');
			$(tile).css('top', '0px');
		}
	}
	else{
		tmp_traffic = addCommas(tmp_traffic);
		var word_length = tmp_traffic.length;
		/* loop for length of traffic */
		/* this only takes care of the tiles that have a letter */
		if (word_length < 10){
			var remaining_length = 10-word_length;
			for (var ix = 0; ix < remaining_length; ix++){
				tmp_traffic = 'z'+tmp_traffic;
			}
		}
		for (var iv = 0; iv < 10; iv++){
			if ((iv == 2 || iv == 6) && tmp_traffic[iv] == ','){
				alpha_offset = getNumberOffset(tmp_traffic[iv],'character');
				var new_pos = getFinalOffset(20, 'character', alpha_offset);
				var tile = '#tile-number-small-traffic-'+(i+1)+'-'+(iv+1);
				$(tile).html('<img width="20" height="2045" src="/images/ticker/tiles/20/sseo-ticker-Characters_Yellow.png" alt="" />');
				$(tile).css('top', '0px');
				var random = Math.random();
				random = random * 100;
				var speed_ms = random * 5;
				var tile_size = 20;
				setTimeout('wait(\''+tile_size+'\', \''+tile+'\', \''+new_pos+'\')', speed_ms);
			}
			else{
				/* need to code in a check to see if the current letter is an integer. if it is, need to swap to int tiles */
				/* this gets the number of the letter of the alphabet */
				if (tmp_traffic[iv] == 'z'){
					var alpha_offset = 27;
				}
				else{
					var alpha_offset = tmp_traffic[iv];
				}
				/* this resets the tile, so that it ends in the correct position */
				var new_pos = getFinalOffset(20, 'number', alpha_offset);
				var tile = '#tile-number-small-traffic-'+(i+1)+'-'+(iv+1);
				if (alpha_offset <= 26){
					$(tile).html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
					$(tile).css('top', '0px');
					var random = Math.random();
					random = random * 100;
					var speed_ms = random * 5;
					var tile_size = 20;
					setTimeout('wait(\''+tile_size+'\', \''+tile+'\', \''+new_pos+'\')', speed_ms);
					/*$(tile).css('top', new_pos+'px');*/
				}
				else{
					$(tile).html('<img width="20" height="29" src="/images/ticker/tiles/blank-tile.png" alt="" />');
					$(tile).css('top', '0px');
				}	
			}
		}
	}
}

function loadRowPos(pos_array, i){
	i = parseInt(i);
	if (i != 0){
		pos_array = pos_array.split(',');
	}
	var tmp_position = pos_array[i];
	if (tmp_position < 10){
		tmp_position = '0'+tmp_position;
	}

	/* deal with the position tiles */
	if (tmp_position == null || tmp_position == 'undefined' || tmp_position == '00'){
		/* this area takes care of the tiles that don't have a letter */
		/* blank tile code must go here */
		for (var iv = 0; iv < 2; iv++){
			var tile = '#tile-number-small-position-'+(i+1)+'-'+(iv+1);
			$(tile).html('<img width="20" height="2045" src="/images/ticker/tiles/20/sseo-ticker-Characters_Yellow.png" alt="" />');
			$(tile).css('top', '0px');
		}
	}
	else{
		var word_length = tmp_position.length;
		/* loop for length of position */
		/* this only takes care of the tiles that have a letter */
		for (var iv = 0; iv < 2; iv++){
			/* need to code in a check to see if the current letter is an integer. if it is, need to swap to int tiles */
			/* this gets the number of the letter of the alphabet */
			var alpha_offset = tmp_position[iv];
			var new_pos = getFinalOffset(20, 'number', alpha_offset);
			/* this resets the tile, so that it ends in the correct position */
			var tile = '#tile-number-small-position-'+(i+1)+'-'+(iv+1);
			if (alpha_offset <= 26){
				/*$(tile).html('<img width="20" height="4369" src="/images/ticker/tiles/20/sseo-ticker-A-Z_Upper_Yellow.png" alt="" />');*/
				$(tile).css('top', '0px');
				var random = Math.random();
				random = random * 100;
				var speed_ms = random * 5;
				var tile_size = 20;
				setTimeout('wait(\''+tile_size+'\', \''+tile+'\', \''+new_pos+'\')', speed_ms);
				/*$(tile).css('top', new_pos+'px');*/
			}
			else{
				$(tile).html('<img width="20" height="29" src="/images/ticker/tiles/blank-tile.png" alt="" />');
				$(tile).css('top', '0px');
			}	
		}
	}
}

function loadRowPage(page_array, i){
	i = parseInt(i);
	if (i != 0){
		page_array = page_array.split(',');
	}
	var tmp_page = page_array[i];
	if (tmp_page < 10){
		tmp_page = '0'+tmp_page;
	}

	/* deal with the page tiles */
	if (tmp_page == null || tmp_page == 'undefined' || tmp_page == '00'){
		/* this area takes care of the tiles that don't have a letter */
		/* blank tile code must go here */
		for (var iv = 0; iv < 2; iv++){
			var tile = '#tile-number-small-page-'+(i+1)+'-'+(iv+1);
			$(tile).html('<img width="20" height="2045" src="/images/ticker/tiles/20/sseo-ticker-Characters_Yellow.png" alt="" />');
			$(tile).css('top', '0px');
		}
	}
	else{
		var word_length = tmp_page.length;
		/* loop for length of page */
		/* this only takes care of the tiles that have a letter */
		for (var iv = 0; iv < 2; iv++){
			/* need to code in a check to see if the current letter is an integer. if it is, need to swap to int tiles */
			/* this gets the number of the letter of the alphabet */
			var alpha_offset = tmp_page[iv]; 
			var new_pos = getFinalOffset(20, 'number', alpha_offset);
			/* this resets the tile, so that it ends in the correct position */
			var tile = '#tile-number-small-page-'+(i+1)+'-'+(iv+1);
			if (alpha_offset <= 26){
				/*$(tile).html('<img width="20" height="4369" src="/images/ticker/tiles/20/sseo-ticker-A-Z_Upper_Yellow.png" alt="" />');*/
				$(tile).css('top', '0px');
				var random = Math.random();
				random = random * 100;
				var speed_ms = random * 5;
				var tile_size = 20;
				setTimeout('wait(\''+tile_size+'\', \''+tile+'\', \''+new_pos+'\')', speed_ms);
				/*$(tile).css('top', new_pos+'px');*/
			}
			else{
				$(tile).html('<img width="20" height="29" src="/images/ticker/tiles/blank-tile.png" alt="" />');
				$(tile).css('top', '0px');
			}	
		}
	}
}

function loadRow(keyword_array, i){
	i = parseInt(i);
	if (i != 0){
		keyword_array = keyword_array.split(',');
	}
	var tmp_keyword = keyword_array[i];

	/* deal with the keyword tiles */
	if (tmp_keyword == null || tmp_keyword == 'undefined'){
		/* this area takes care of the tiles that don't have a letter */
		/* blank tile code must go here */
		for (var iv = 0; iv < 27; iv++){
			var tile = '#tile-number-small-keyword-'+(i+1)+'-'+(iv+1);
			$(tile).html('<img width="20" height="29" src="/images/ticker/tiles/blank-tile.png" alt="" />');
			$(tile).css('top', '0px');
		}
	}
	else{
		var word_length = tmp_keyword.length;
		/* loop for length of keyword */
		/* this only takes care of the tiles that have a letter */
		for (var iv = 0; iv < 27; iv++){
			/* need to code in a check to see if the current letter is an integer. if it is, need to swap to int tiles */
			/* this gets the number of the letter of the alphabet */
			if (isNaN(tmp_keyword[iv])){
				var alpha_offset = getNumberOffset(tmp_keyword[iv],'alpha');
			}
			else{
				if (!isNaN(tmp_keyword[iv])){
					var alpha_offset = parseInt(tmp_keyword[iv])+1;
				}
				else{
					var alpha_offset = getNumberOffset(tmp_keyword[iv],'alpha');
				}
			}
			var new_pos = getFinalOffset(20, 'alpha', alpha_offset);
			/* this resets the tile, so that it ends in the correct position */
			var tile = '#tile-number-small-keyword-'+(i+1)+'-'+(iv+1);
			if (alpha_offset <= 26){
				if (isNaN(tmp_keyword[iv])){
					$(tile).html('<img width="20" height="4369" src="/images/ticker/tiles/20/sseo-ticker-A-Z_Upper_Yellow.png" alt="" />');
				}
				else{
					$(tile).html('<img width="20" height="1709" src="/images/ticker/tiles/20/sseo-ticker-0-9_Yellow.png" alt="" />');
				}
				$(tile).css('top', '0px');
				var random = Math.random();
				random = random * 100;
				var speed_ms = random * 5;
				var tile_size = 20;
				setTimeout('wait(\''+tile_size+'\', \''+tile+'\', \''+new_pos+'\')', speed_ms);
				/*$(tile).css('top', new_pos+'px');*/
			}
			else{
				$(tile).html('<img width="20" height="29" src="/images/ticker/tiles/blank-tile.png" alt="" />');
				$(tile).css('top', '0px');
			}	
		}
	}
}

/* this function is a pseudo 'sleep' function */
function wait(tile_size, tile, new_pos){
	setFinalPosition(tile_size, tile, new_pos);
}

/* this function is helper function to setFinalPosition, it sets the position for each temporary move */
function moveToFinalPosition(tile_size, tile_id, final_pos, interval_id){	
	var current_pos = parseInt($(tile_id).css('top'));
	if (current_pos <= final_pos){
		setFinalPosition(tile_size, tile_id, final_pos, interval_id);
	}
	else{
		switch (tile_size){
			case '20':
				var trans_pos = parseInt(current_pos)-28;
				break;
			case '30':
				var trans_pos = parseInt(current_pos)-42;
				break;
			case 'second':
				var trans_pos = parseInt(current_pos)-42;
				break;
		}
		var speed_ms = getTileSizeSpeed(tile_size);
		$(tile_id).css('top', trans_pos+'px');
		tmp_interval_id = setTimeout('moveToFinalPosition(\''+tile_size+'\', \''+tile_id+'\', \''+final_pos+'\', \''+interval_id+'\')', speed_ms);
	}
}

function getTileSizeSpeed(tile_size){
	var new_tile_size = tile_size+'';
	switch (tile_size){
		case '20':
			var speed_ms = 1;
			break;
		case '30':
			var speed_ms = 1;
			break;
		case 'second':
			var speed_ms = 166;
			break;
		default:
			var speed_ms = 1;
			break;
	}
	return speed_ms;
}

/* this function begins and ends the process of moving a tile to its final position once the final position has been determined */ 
function setFinalPosition(tile_size, tile_id, final_pos, interval_id){
	var current_pos = parseInt($(tile_id).css('top'));
	if (current_pos > final_pos && detectBrowser(tile_size)){
		var speed_ms = getTileSizeSpeed(tile_size);
		var tmp_interval_id = tile_id+': '+$('#hidden_interval_id').val();
		tmp_interval_id = setTimeout('moveToFinalPosition(\''+tile_size+'\', \''+tile_id+'\', \''+final_pos+'\', \''+tmp_interval_id+'\')', speed_ms);
		$('#hidden_interval_id').val(parseInt($('#hidden_interval_id').val())+1);
	}
	else{
		/*clearInterval(interval_id);*/
		if (final_pos == null || final_pos == 'undefined'){
			var final_pos = 0;
		}
		quickJump(tile_id, final_pos);
	}
}

function quickJump(tile_id, final_pos){
	$(tile_id).css('top', final_pos+'px');
}

/* this function determines what the final position should be for a tile so that a correction can be made if a tile is out of place */
function getFinalOffset(tile_size, tile_type, alpha_offset){
	var final_offset;
	switch (tile_size){
		case 20:
			var offset_px = -28;
			/* this is the pixel position of the b tile */
			switch (tile_type){
				case 'alpha':
					var b_start = 168;
					/* this gets the px tile position of the letter of the alphabet */
					switch (alpha_offset){
						case 1: /* a */
							final_offset = 0;
							break;
						case 2: /* b */
							final_offset = -b_start;
							break;
						default: /* c and above */
							final_offset = b_start+(alpha_offset*offset_px*6);
							break;
					}
					break;
				case 'number':
					switch (alpha_offset){
						case 0:
							final_offset = 0;
							break;
						default: /* c and above */
							final_offset = alpha_offset*offset_px*6;
							break;
					}
					break;
				case 'character':
					switch (alpha_offset){
						case 27:
							final_offset = -840;
						break;
					}
					break;
			}
			break;
		case 30:
			var offset_px = -42;
			switch (tile_type){
				case 'alpha':
					/* this is the pixel position of the b tile */
					var b_start = 252;
					switch (alpha_offset){
						case 1:
							final_offset = 0;
							break;
						case 2:
							final_offset = -b_start;
							break;
						default:
							final_offset = b_start+(alpha_offset*offset_px*6);
							break;
					}
					break;
				case 'number':
					switch (alpha_offset){
						case 0:
							final_offset = 0;
						default: /* 1 and above */
							final_offset = alpha_offset*offset_px*6;
							break;
					}
					break;
			}
			break;
	}
	return final_offset;
}

/* this function starts the timer */
function startTimer(){
	var current_time = getCurrentTime();
	defaultTime('start');
}

function getCurrentTime(){
	var time_array = new Array();
	var now = new Date();
	var h = now.getHours();
	var m = now.getMinutes();
	var s = now.getSeconds();
	var ms = now.getMilliseconds();
	h = checkTime(h, 'hour');
	m = checkTime(m, 'reg');
	s = checkTime(s, 'reg');
	ms = checkTime(ms, 'mil');
	var current_time = h+':'+m+':'+s+':'+ms;
	return current_time;
}

/* this function keeps the time ticking once it begins */
function defaultTime(command, tmp_interval_id)
{
	var timer = '#ticker-main-timer-tester';
	var current_time = getCurrentTime();
	switch (command){
		case 'start':
			var tmp_interval_id = timer+': 0';
			$('#stopper').click(function(){
				defaultTime('stop',tmp_interval_id);
			});
			var new_command = 'continue';
			$(timer).html(current_time);
			defaultTime('continue');
			break;
		case 'stop':
			clearInterval(tmp_interval_id);
			break;
		case 'continue':
			setTimer(current_time);
			$(timer).html(current_time);
			break;
	}
}

function setTimer(current_time){
	var time_array = new Array();
	time_array = current_time.split(':');
	for (var i = 0; i < 3; i++){
		switch (i){
			case 0:
				for (var ii = 0; ii < 2; ii++){
					switch (ii){
						case 0:
							var tmp_number = parseInt(time_array[i].substring(0,1));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#hour-tens';
							setFinalPosition(30, tile, new_pos);
							break;
						case 1:
							var tmp_number = parseInt(time_array[i].substring(1,2));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#hour-ones';
							setFinalPosition(30, tile, new_pos);
							break;
					}
				}
				break;
			case 1:
				for (var ii = 0; ii < 2; ii++){
					switch (ii){
						case 0:
							var tmp_number = parseInt(time_array[i].substring(0,1));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#minute-tens';
							setFinalPosition(30, tile, new_pos);
							break;
						case 1:
							var tmp_number = parseInt(time_array[i].substring(1,2));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#minute-ones';
							setFinalPosition(30, tile, new_pos);
							break;
					}
				}
				break;
			case 2:
				for (var ii = 0; ii < 2; ii++){
					switch (ii){
						case 0:
							var tmp_number = parseInt(time_array[i].substring(0,1));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#second-tens';
							setFinalPosition(30, tile, new_pos);
							break;
						case 1:
							var tmp_number = parseInt(time_array[i].substring(1,2));
							var new_pos = getFinalOffset(30, 'number', tmp_number);
							var tile = '#second-ones';
							quickJump(tile, new_pos);
							setSecondUpdate(tile, 'start');
							break;
					}
				}
				break;
		}
	}
}

function setSecondUpdate(tile, direction){
	var timer = '#ticker-main-timer-tester';
	var current_time = getCurrentTime();
	$(timer).html(current_time);
	var time_array = new Array();
	time_array = current_time.split(':');
	switch (direction){
		case 'start':
			var new_direction = 'continue';
			var second_interval_id = 'second interval: 0';
			second_interval_id = setTimeout('setSecondUpdate(\''+tile+'\', \''+new_direction+'\')', 166);
			break;
		case 'continue':
			$('#ticker-main-timer-tester').html(current_time);
			tile_seconds_ones_position = parseInt($(tile).css('top'));	
			$(tile).css('top', tile_seconds_ones_position-42+'px');
			if (tile_seconds_ones_position == -2520){ /* at 0 */
				quickJump(tile, 0);
			}
			var seconds_ones = parseInt(time_array[2].substring(1,2));
			var milliseconds = parseInt(time_array[3].substring(0,1));
			if (seconds_ones == 0 && milliseconds >= 5){
				tmp_number_reference = getSecondReference(seconds_ones);
				quickJump(tile, tmp_number_reference);
				var seconds_tens = parseInt(time_array[2].substring(0,1));
				updateTimePosition('seconds_tens');
				if (seconds_tens == 0){
					var minutes_ones = parseInt(time_array[1].substring(1,2));
					updateTimePosition('minutes_ones');
					if (minutes_ones == 0){
						var minutes_tens = parseInt(time_array[1].substring(0,1));
						updateTimePosition('minutes_tens');
						if (minutes_tens == 0){
							var hours_ones = parseInt(time_array[1].substring(0,1));
							updateTimePosition('hours_ones');
							if (hours_ones == 0){
								var hours_tens = parseInt(time_array[1].substring(0,1));
								updateTimePosition('hours_tens');
							}
						}
					}
				}
			}
			var new_direction = 'continue';
			var second_interval_id = 'second interval: 0';
			second_interval_id = setTimeout('setSecondUpdate(\''+tile+'\', \''+new_direction+'\')', 166);
			break;
	}
}

function updateTimePosition(time_place){
	var current_time = getCurrentTime();
	var time_array = new Array();
	time_array = current_time.split(':');
	switch (time_place){
		case 'seconds_ones':
			break;
		case 'seconds_tens':
			var seconds_tens = parseInt(time_array[2].substring(0,1));
			if (seconds_tens == 0){
				seconds_tens = 6;
			}
			var final_seconds_tens_pos = getSecondReference(seconds_tens);
			setFinalPosition('second', '#second-tens', final_seconds_tens_pos);
			if (parseInt($('#second-tens').css('top')) <= -1512){
				$('#second-tens').css('top', '0px');
			}
			if (parseInt($('#hour-tens').css('top')) <= -756){
				$('#hour-tens').css('top', '0px');
			}
			if (parseInt($('#hour-tens').css('top')) >= 0){
				$('#hour-tens').css('top', '0px');
			}
			break;
		case 'minutes_ones':
			var minutes_ones = parseInt(time_array[1].substring(1,2));
			var final_minutes_ones_pos = getSecondReference(minutes_ones);
			setFinalPosition('second', '#minute-ones', final_minutes_ones_pos);
			break;
		case 'minutes_tens':
			var minutes_tens = parseInt(time_array[1].substring(0,1));
			if (minutes_tens == 0){
				minutes_tens = 6;
			}
			var final_minutes_tens_pos = getSecondReference(minutes_tens);
			setFinalPosition('second', '#minute-tens', final_minutes_tens_pos);
			if (parseInt($('#minute-tens').css('top')) <= -1512){
				$('#minute-tens').css('top', '0px');
			}
			break;
		case 'hours_ones':
			var hours_ones = parseInt(time_array[0].substring(1,2));
			var final_hours_ones_pos = getSecondReference(hours_ones);
			setFinalPosition('second', '#hour-ones', final_hours_ones_pos);
			break;
		case 'hours_tens':
			var hours = parseInt(time_array[0].substring(0,2));
			var hours_tens = parseInt(time_array[0].substring(0,1));
			if (hours_tens == 0 && hours > 12){
				hours_tens = 2;
			}
			var final_hours_tens_pos = getSecondReference(hours_tens);
			setFinalPosition('second', '#hour-tens', final_hours_tens_pos);
			break;
	}
}

/* this function helps set the date on the ticker */
function startDate(){
	var now = new Date();
	var trans_month = now.getMonth();
	var tmp_month = convertMonth(trans_month);
	var trans_date = now.getDate();
	var tmp_date = convertDate(trans_date);
	var tmp_year = now.getFullYear();
	setStartDate(tmp_month, tmp_date, tmp_year);	
}

function setStartDate(tmp_month, tmp_date, tmp_year){
	setMonth(tmp_month);
	setDate(tmp_date);
	setYear(tmp_year);
}

function setMonth(tmp_month){
	for (var i = 0; i < tmp_month.length; i++){
		var tmp_letter = getNumberOffset(tmp_month[i],'alpha');
		var new_pos = getFinalOffset(30, 'alpha', tmp_letter);
		switch (i){
			case 0:
				var tile = '#month-hundreds';
				break;	
			case 1:
				var tile = '#month-tens';
				break;
			case 2:
				var tile = '#month-ones';
				break;
		}
		setFinalPosition(30, tile, new_pos);
	}
}

function setDate(tmp_date){
	new_date = tmp_date+'';
	for (var i = 0; i < 2; i++){
		switch (i){
			case 0:
				var tmp_number = parseInt(new_date.substring(0,1));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#day-tens';
				break;
			case 1:
				var tmp_number = parseInt(new_date.substring(1,2));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#day-ones';
				break;
		}
		setFinalPosition(30, tile, new_pos);
	}
}

function setYear(tmp_year){
	new_date = tmp_year+'';
	for (var i = 0; i < 4; i++){
		switch (i){
			case 0:
				var tmp_number = parseInt(new_date.substring(0,1));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#year-thousands';
				break;
			case 1:
				var tmp_number = parseInt(new_date.substring(1,2));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#year-hundreds';
				break;
			case 2:
				var tmp_number = parseInt(new_date.substring(2,3));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#year-tens';
				break;
			case 3:
				var tmp_number = parseInt(new_date.substring(3,4));
				var new_pos = getFinalOffset(30, 'number', tmp_number);
				var tile = '#year-ones';
				break;
		}
		setFinalPosition(30, tile, new_pos);
	}
}

/* this number determines the numeric value of any letter of the alphabet */
function getNumberOffset(letter,type){
	switch (type){
		case 'alpha':
			var alpha_number;
			if (letter != null){
				var letter = letter.toLowerCase();
			}
			switch (letter){
				case 'a':
					alpha_number = 1;
					break;
				case 'b':
					alpha_number = 2;
					break;
				case 'c':
					alpha_number = 3;
					break;
				case 'd':
					alpha_number = 4;
					break;
				case 'e':
					alpha_number = 5;
					break;
				case 'f':
					alpha_number = 6;
					break;
				case 'g':
					alpha_number = 7;
					break;
				case 'h':
					alpha_number = 8;
					break;
				case 'i':
					alpha_number = 9;
					break;
				case 'j':
					alpha_number = 10;
					break;
				case 'k':
					alpha_number = 11;
					break;
				case 'l':
					alpha_number = 12;
					break;
				case 'm':
					alpha_number = 13;
					break;
				case 'n':
					alpha_number = 14;
					break;
				case 'o':
					alpha_number = 15;
					break;
				case 'p':
					alpha_number = 16;
					break;
				case 'q':
					alpha_number = 17;
					break;
				case 'r':
					alpha_number = 18;
					break;
				case 's':
					alpha_number = 19;
					break;
				case 't':
					alpha_number = 20;
					break;
				case 'u':
					alpha_number = 21;
					break;
				case 'v':
					alpha_number = 22;
					break;
				case 'w':
					alpha_number = 23;
					break;
				case 'x':
					alpha_number = 24;
					break;
				case 'y':
					alpha_number = 25;
					break;
				case 'z':
					alpha_number = 26;
					break;
				default:
					alpha_number = 27;
					break;
			}
			break;
		case 'character':
			switch (letter){
				case 'a':
					alpha_number = 1;
					break;
				case 'b':
					alpha_number = 2;
					break;
				case 'c':
					alpha_number = 3;
					break;
				case 'd':
					alpha_number = 4;
					break;
				case 'e':
					alpha_number = 5;
					break;
				case 'f':
					alpha_number = 6;
					break;
				case 'g':
					alpha_number = 7;
					break;
				case 'h':
					alpha_number = 8;
					break;
				case 'i':
					alpha_number = 9;
					break;
				case 'j':
					alpha_number = 10;
					break;
				case 'k':
					alpha_number = 11;
					break;
				case 'l':
					alpha_number = 12;
					break;
				case 'm':
					alpha_number = 13;
					break;
				default:
					alpha_number = 27;
					break;
			}
			break;
	}
	return alpha_number;
}

/* this function appends a 0 on to the beginning of an hours, minutes, or seconds number if it is a single digit */
function checkTime(i, type)
{
	switch (type)
	{
		case 'hour':
			if (i>12)
			{
				i = i-12;	
			}
			if (i < 10)
			{
				i = "0" + i;
			}
			if (i == '00')
			{
				 i = '12';
			}
			break;
		case 'reg':
			if (i<10)
			{
				i = "0" + i;
			}
			break;
		case 'mil':
			if (i<100 && i > 10)
			{
				i="0" + i;
			}
			else if (i<10)
			{
				i="00"+i;
			}
			break;
	}
	return i;
}

/* this function helps convert a month from a number to a string */
function convertMonth(month){
	var final_month;
	switch (month){
		case 0:
			final_month = 'jan';	
			break;
		case 1:
			final_month = 'feb';	
			break;
		case 2:
			final_month = 'mar';	
			break;
		case 3:
			final_month = 'apr';	
			break;
		case 4:
			final_month = 'may';	
			break;
		case 5:
			final_month = 'jun';	
			break;
		case 6:
			final_month = 'jul';	
			break;
		case 7:
			final_month = 'aug';	
			break;
		case 8:
			final_month = 'sep';	
			break;
		case 9:
			final_month = 'oct';	
			break;
		case 10:
			final_month = 'nov';	
			break;
		case 11:
			final_month = 'dec';	
			break;
	}
	return final_month;
}

function convertDate(tmp_date){
	var final_date;
	if (tmp_date <= 9){
		final_date = '0'+tmp_date;
	}
	else{
		final_date = tmp_date;
	}
	return final_date;
}

function getSecondReference(tmp_number){
	var final_position;
	switch (tmp_number){
		case 0:
			final_position = 0;
			break;
		case 1:
			final_position = -252;
			break;
		case 2:
			final_position = -504;
			break;
		case 3:
			final_position = -756;
			break;
		case 4:
			final_position = -1008;
			break;
		case 5:
			final_position = -1260;
			break;
		case 6:
			final_position = -1512;
			break;
		case 7:
			final_position = -1764;
			break;
		case 8:
			final_position = -2016;
			break;
		case 9:
			final_position = -2268;
			break;
		default:
			final_position = 0;
			break;
	}
	return final_position;
}

function detectBrowser(tile_size){
	if (parseInt(tile_size) == 30){
		return true;
	}
	var nVer = navigator.appVersion;
	var nAgt = navigator.userAgent;
	var browserName  = navigator.appName;
	var fullVersion  = ''+parseFloat(navigator.appVersion); 
	var majorVersion = parseInt(navigator.appVersion,10);
	var nameOffset,verOffset,ix;

	// In MSIE, the true version is after "MSIE" in userAgent
	if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
		browserName = "Microsoft Internet Explorer";
		fullVersion = nAgt.substring(verOffset+5);
	}
	// In Opera, the true version is after "Opera" 
	else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
		browserName = "Opera";
		fullVersion = nAgt.substring(verOffset+6);
	}
	// In Chrome, the true version is after "Chrome" 
	else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
		browserName = "Chrome";
		fullVersion = nAgt.substring(verOffset+7);
	}
	// In Safari, the true version is after "Safari" 
	else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
		browserName = "Safari";
		fullVersion = nAgt.substring(verOffset+7);
	}
	// In Firefox, the true version is after "Firefox" 
	else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
		browserName = "Firefox";
		fullVersion = nAgt.substring(verOffset+8);
	}
	// In most other browsers, "name/version" is at the end of userAgent 
	else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
	{
		browserName = nAgt.substring(nameOffset,verOffset);
		fullVersion = nAgt.substring(verOffset+1);
		if (browserName.toLowerCase()==browserName.toUpperCase()) {
			browserName = navigator.appName;
		}
	}
	if (browserName == 'Firefox' || browserName == 'Chrome' || browserName == 'Safari'){
		return true;
	}
	else{
		return false;
	}
	// trim the fullVersion string at semicolon/space if present
	if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
	if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);

	majorVersion = parseInt(''+fullVersion,10);
	if (isNaN(majorVersion)) {
		fullVersion  = ''+parseFloat(navigator.appVersion); 
		majorVersion = parseInt(navigator.appVersion,10);
	}
}
