function changeTab(boxname,tabcnt,newtab,adjustActive){
	var newStyle;
	for (var i=0; i<tabcnt;i++) {
		newStyle = "none";
		if (i == newtab) {
			$("content_"+boxname+i).show();

			$("tab_"+boxname+"_cell_"+i).removeClassName("tabbox");
			$("tab_"+boxname+"_cell_"+i).addClassName("tabbox_act");

			$("tab_"+boxname+"_text_"+i).removeClassName("tabbox_text");
			$("tab_"+boxname+"_text_"+i).addClassName("tabbox_text_act");

			$("tab_"+boxname+"_link_"+i).removeClassName("link_hand");
			$("tab_"+boxname+"_link_"+i).addClassName("link_no");
		} else {
			$("content_"+boxname+i).hide();	

			$("tab_"+boxname+"_cell_"+i).removeClassName("tabbox_act");
			$("tab_"+boxname+"_cell_"+i).addClassName("tabbox");

			$("tab_"+boxname+"_text_"+i).removeClassName("tabbox_text_act");
			$("tab_"+boxname+"_text_"+i).addClassName("tabbox_text");

			$("tab_"+boxname+"_link_"+i).removeClassName("link_no");
			$("tab_"+boxname+"_link_"+i).addClassName("link_hand");      
		}
	}

	if (adjustActive == null) {
		adjustActiveTab(boxname);
	}
}

function moveRight(tabbox_name, show_active_tab) {
	resetPoints(tabbox_name);

	var element = $('tab_' + tabbox_name + '_tabs_table');

	var on_element_left = $('tab_' + tabbox_name + '_arrow_left_button');
	var tmp_onclick_left = on_element_left.onclick;
	on_element_left.onclick = function() { };

	var on_element_right = $('tab_' + tabbox_name + '_arrow_right_button');
	var tmp_onclick_right = on_element_right.onclick;
	on_element_right.onclick = function() { };

	if (element != null) {
		var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
		var current_left = parseInt(element.style.left);
		var tabs_container_width = tabs_container.getWidth();

		var min_left = tabs_container_width - element.getWidth();

		var new_left = calculateRightMove(tabbox_name);
		var move_by = new_left - current_left;
		if (new_left < min_left) {
			move_by = min_left - current_left;
		}

		new Effect.Move(element, {
			afterFinish: function () {
				var adjust_pos = false;
				if (parseInt(element.style.left) <= min_left) {
					adjust_pos = true;
					hideRight(tabbox_name);
				}

				if (parseInt(element.style.left) < 0) {
					showLeft(tabbox_name, adjust_pos);
				}

				var active_tab_visible = activeTabVisible(tabbox_name);
				if ((show_active_tab == true) && (active_tab_visible === 1)) {
					moveRight(tabbox_name, true);
				}

				on_element_left.onclick = tmp_onclick_left;
				on_element_right.onclick = tmp_onclick_right;

				handlePoints(tabbox_name);
			},
			x: move_by,
			y: 0,
			duration: 0.5,
			mode: 'relative',
			transition: Effect.Transitions.linear
		});
	}
}

function moveLeft(tabbox_name, show_active_tab) {
	resetPoints(tabbox_name);
	
	var element = $('tab_' + tabbox_name + '_tabs_table');

	var on_element_left = $('tab_' + tabbox_name + '_arrow_left_button');
	var tmp_onclick_left = on_element_left.onclick;
	on_element_left.onclick = function() { };

	var on_element_right = $('tab_' + tabbox_name + '_arrow_right_button');
	var tmp_onclick_right = on_element_right.onclick;
	on_element_right.onclick = function() { };

	if (element != null) {
		var current_left = parseInt(element.style.left);

		var new_left = calculateLeftMove(tabbox_name);
		var move_by = new_left - current_left;
		if (new_left > 0) {
			move_by = 0 - current_left;
		}

		new Effect.Move(element, {
			afterFinish: function () {
				var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
				var tmp_diff = tabs_container.getWidth() - element.getWidth();

				if (parseInt(element.style.left) == 0) {
					hideLeft(tabbox_name);
				}

				if ((parseInt(element.style.left) <= 0) && (tmp_diff < 0)) {
					showRight(tabbox_name);
				}

				var active_tab_visible = activeTabVisible(tabbox_name);
				if ((show_active_tab == true) && (active_tab_visible === -1)) {
					moveLeft(tabbox_name, true);
				}

				on_element_left.onclick = tmp_onclick_left;
				on_element_right.onclick = tmp_onclick_right;

				handlePoints(tabbox_name);
			},
			x: move_by,
			y: 0,
			duration: 0.5,
			mode: 'relative',
			transition: Effect.Transitions.linear
		});
	}
}

function showLeft(tabbox_name) {
	var tabs_arrow_left = $('tab_' + tabbox_name + '_arrow_left');

	var toggles = tabs_arrow_left.select('.control');
	toggles.each(function(item) {
		item.show();
	});
	var toggles = tabs_arrow_left.select('.blanc');
	toggles.each(function(item) {
		item.hide();
	});
}

function hideLeft(tabbox_name) {
	var tabs_arrow_left = $('tab_' + tabbox_name + '_arrow_left');

	var toggles = tabs_arrow_left.select('.control');
	toggles.each(function(item) {
		item.hide();
	});
	var toggles = tabs_arrow_left.select('.blanc');
	toggles.each(function(item) {
		item.show();
	});
}

function showRight(tabbox_name) {
	var tabs_arrow_right = $('tab_' + tabbox_name + '_arrow_right');

	var toggles = tabs_arrow_right.select('.control');
	toggles.each(function(item) {
		item.show();
	});

	var toggles = tabs_arrow_right.select('.blanc');
	toggles.each(function(item) {
		item.hide();
	});

	var toggles = tabs_arrow_right.select('.border');
	toggles.each(function(item) {
		item.show();
	});
}

function hideRight(tabbox_name) {
	var tabs_arrow_right = $('tab_' + tabbox_name + '_arrow_right');

	var toggles = tabs_arrow_right.select('.control');
	toggles.each(function(item) {
		item.hide();
	});
	var toggles = tabs_arrow_right.select('.blanc');
	toggles.each(function(item) {
		item.show();
	});

	var toggles = tabs_arrow_right.select('.border');
	toggles.each(function(item) {
		item.hide();
	});
}

function calculateRightMove(tabbox_name) {
	var tabs_table = $('tab_' + tabbox_name + '_tabs_table');
	var current_left = parseInt(tabs_table.style.left);
	var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
	var tabs_container_width = tabs_container.getWidth();

	var new_left = 0;

	var all_tabs = tabs_table.select('.tabbox_all');
	all_tabs.each(function(item) {
		var tmp_offset_left = item.positionedOffset();
		var tmp_offset_right = tmp_offset_left[0] + item.getWidth();

		if (tmp_offset_right - Math.abs(current_left) >= tabs_container_width) {
			new_left = -tmp_offset_left[0];
			throw $break;
		}
	});

	return new_left;
}

function calculateLeftMove(tabbox_name) {
	var tabs_table = $('tab_' + tabbox_name + '_tabs_table');
	var current_left = parseInt(tabs_table.style.left);
	var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
	var tabs_container_width = tabs_container.getWidth();

	var new_left = 0;

	var all_tabs = tabs_table.select('.tabbox_all');
	all_tabs.reverse();
	all_tabs.each(function(item) {
		var tmp_offset_left = item.positionedOffset();
		if (tmp_offset_left[0] < Math.abs(current_left)) {
			new_left = -(tmp_offset_left[0] + item.getWidth() - tabs_container_width);
			throw $break;
		}
	});

	return new_left;
}

function adjustActiveTab(tabbox_name) {
	var active_tab_visible = activeTabVisible(tabbox_name);

	if (active_tab_visible === 1) {
		moveRight(tabbox_name, true);
	}

	if (active_tab_visible === -1) {
		moveLeft(tabbox_name, true);
	}
}

function activeTabVisible(tabbox_name) {
	var tabs_table = $('tab_' + tabbox_name + '_tabs_table');
  if (tabs_table) {
	  var active_tabs = tabs_table.select('.tabbox_act');
    
	  if (active_tabs.size() > 0) {
	  	var active_tab = active_tabs[0];
    
	  	var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
	  	var tabs_container_width = tabs_container.getWidth();
    
	  	var current_left = parseInt(tabs_table.style.left);
    
	  	var left_visible = Math.abs(current_left);
	  	var right_visible = left_visible + tabs_container_width;
    
	  	var active_tab_width = active_tab.getWidth();
	  	var active_tab_left = active_tab.positionedOffset();
	  	active_tab_left = active_tab_left[0];
	  	var active_tab_right = active_tab_left + active_tab_width;
    
	  	if (active_tab_left > right_visible) {
	  		return 1;
	  	}
    
	  	if (active_tab_right < left_visible) {
	  		return -1;
	  	}
    
	  	if (active_tab.select('.points').first().visible()) {
	  		if (active_tab_right > right_visible) {
	  			return 1;
	  		}
	  		if (active_tab_left < left_visible) {
	  			return -1;
	  		}
	  	}
	  }
  }

	return 0;
}

function resetPoints(tabbox_name) {
	var tabs_table = $('tab_' + tabbox_name + '_tabs_table');
	var tabs = tabs_table.select('.tabbox_all');

	tabs.each(function(item) {
		var span_left = item.select('.text-left').first();
		var span_right = item.select('.text-right').first();
		var span_points = item.select('.points').first().show();

		span_left.update(span_left.innerHTML + span_right.innerHTML);
		span_right.update();
		span_points.hide();

		span_right.style.visibility = 'visible';
		span_left.style.visibility = 'visible';
	});	
}

function handlePoints(tabbox_name) {
	var tabs_table = $('tab_' + tabbox_name + '_tabs_table');
	var tabs = tabs_table.select('.tabbox_all');

	var tabs_container = $('tab_' + tabbox_name + '_tabs_container');
	var tabs_container_width = tabs_container.getWidth();
	
	var current_left = parseInt(tabs_table.style.left);
	
	var left_visible = Math.abs(current_left);
	var right_visible = left_visible + tabs_container_width;

	tabs.each(function(item) {
		var span_points = item.select('.points').first();
		var points_width = span_points.getWidth();

		var current_tab_width = item.getWidth();
		var current_tab_left = item.positionedOffset();
		current_tab_left = current_tab_left[0];
		var current_tab_right = current_tab_left + current_tab_width;

		if ((current_tab_left < left_visible) && (current_tab_right > left_visible )) {
			var span_left = item.select('.text-left').first();
			var span_right = item.select('.text-right').first();
			span_points.show();

			span_right.update(span_left.innerHTML);
			span_left.update();

			var points_offset = span_points.positionedOffset();
			var points_offset_left = points_offset[0];

			while ((points_offset_left < left_visible) && (span_right.innerHTML.length > 0)) {
				var first_char = span_right.innerHTML.charAt(0);
				span_right.update(span_right.innerHTML.substr(1));
				span_left.update(span_left.innerHTML + first_char);
				points_offset = span_points.positionedOffset();
				points_offset_left = points_offset[0];
			}
			span_left.style.visibility = 'hidden';
		}

		if ((current_tab_left < right_visible) && (current_tab_right > right_visible + points_width)) {
//			console.log('current_left:' + current_tab_left + ' current_right:' + current_tab_right + ' right:' + right_visible);
			var span_left = item.select('.text-left').first();
			var span_right = item.select('.text-right').first();
			span_points.show();

			var points_offset = span_points.positionedOffset();
			var points_offset_left = points_offset[0];
			var points_offset_right = points_offset_left + points_width;
			while ((points_offset_right > right_visible) && (span_left.innerHTML.length > 0)) {
				var last_char = span_left.innerHTML.charAt(span_left.innerHTML.length - 1);
				span_right.update(last_char + span_right.innerHTML);
				span_left.update(span_left.innerHTML.substr(0, span_left.innerHTML.length - 1));

				points_offset = span_points.positionedOffset();
				points_offset_left = points_offset[0];
				points_offset_right = points_offset_left + points_width;
			}
			span_right.style.visibility = 'hidden';
		}
	});
}