var archive_entries, archive_shows_container_width, archive_show_width, archive_show_height, archive_max_width;
var min_slide = 3, max_slide, is_sliding = false;

function get_entry(id) {
	var entry = null;
	if (/^.*-([^\-]*)$/.test(id)) {
		entry = Number(RegExp.$1);
	}
	return entry;
}

var current_popout = null;

function get_parent_popout_object(start) {
	var node = start;
	while (node && (node.nodeName != 'BODY')) {
		if (Element.hasClassName(node, 'popout')) { 
			return node;
		}
		node = node.parentNode;
	}
	return null;
}

function show_popover(event) {
	var element = Event.element(event);
	
	var parent_popout_object = get_parent_popout_object(element);
	if (parent_popout_object !== null) {
		if (parent_popout_object.ok_to_popout) {
			var entry = get_entry(parent_popout_object.id);

			if (current_popout !== entry) {

				if (current_popout !== null) { hide_popover(); }
				
				if ($('popout-' + entry)) {
					Element.show($('popout-' + entry));
					
					Element.clonePosition($('popout-' + entry), 
																parent_popout_object, 
																{
																	setWidth: false, 
																	setHeight: false,
																	offsetTop: -($('popout-' + entry).offsetHeight - 40),
																	offsetLeft: -($('popout-' + entry).offsetWidth - archive_show_width)/2
																});
					current_popout = entry;
				}
			}
			Event.stop(event);
		}
	}
}

function hide_popover() {
	if ($('popout-' + current_popout)) {
		$('popout-' + current_popout).hide();
		current_popout = null;
	}
}

function handle_mouseout(event) {
	if (!event) var event = window.event;
	var element = Event.element(event);
	var related_target = get_parent_popout_object((event.relatedTarget) ? event.relatedTarget : event.toElement);
	
	if (related_target === null) { hide_popover(); }
}

function position_archive_entries(x) {
	var margin = Math.floor(x);
	for (var i = 0, il = archive_entries.length; i < il; ++i) {
		archive_entries[i].style.position = "absolute";
		archive_entries[i].style.marginLeft = margin + "px";
		archive_entries[i].ok_to_popout = false;
		
		if(margin == 0) {
			archive_entries[i].addClassName('selected');
		}else{
			if(archive_entries[i].hasClassName('selected')) {
				archive_entries[i].removeClassName('selected');
			}
		}
		
		if (margin < 0) {
			if (Math.abs(margin) > archive_show_width) {
				Element.hide(archive_entries[i]);
			} else {
				archive_entries[i].style.clip = "rect(0px " + archive_show_width + "px " + archive_show_height + "px " + (-margin) + "px)";
				Element.show(archive_entries[i]);
			}
		} else if ((Math.abs(margin) + archive_show_width) > archive_shows_container_width) {
			if (Math.abs(margin) > archive_shows_container_width) {
				Element.hide(archive_entries[i]);
			} else {
				archive_entries[i].style.clip = "rect(0px " + (-(margin - archive_shows_container_width)) + "px  " + archive_show_height + "px 0px)";
				Element.show(archive_entries[i]);
			}
		} else {
			archive_entries[i].ok_to_popout = true;
			if (Prototype.Browser.IE) {
				archive_entries[i].style.clip = "rect(auto)";
			} else {
				archive_entries[i].style.clip = "";
			}
		}

		margin += archive_show_width;
	}
}

function get_start_x() {
	var start_x;
	if (/^(.*)px$/.test(archive_entries[0].style.marginLeft)) { 
		start_x = Number(RegExp.$1);
	}
	return start_x;
}

function slide_archive_entries_to(end_x) {
	var slider;
	var start_x = get_start_x();
	
	end_x = Math.min(0, Math.max(end_x, -archive_max_width));
	if (Math.abs(end_x) < max_slide) { end_x = 0; }
	if ((archive_max_width - Math.abs(end_x)) < max_slide) { end_x = -archive_max_width; }

	if (!is_sliding) {
		slider = function() {
			is_sliding = true;
			var distance = end_x - start_x;
			var delta = Math.abs(distance);
			var sign = distance / delta;
			
			delta = Math.floor(delta / 3);
			if (delta < min_slide) {
				start_x = end_x;
			} else {
				start_x += (Math.min(max_slide, delta) * sign);
			}
			
			position_archive_entries(start_x);
			
			if (start_x != end_x) {
				setTimeout(slider, 50);
			} else {
				is_sliding = false;
			}
		};
		
		slider();
	}
}

function slide_archive_entries_by(delta_x) {
	var start_x = get_start_x();
	slide_archive_entries_to(start_x + delta_x);
}


function load_function() {
	if ($('archive-shows-container')) {
		archive_entries = document.getElementsByClassName("archive-entry");

		var selected_index = null;

		for (var i = 0, il = archive_entries.length; i < il; ++i) {
			archive_entries[i].show();
			Event.observe(archive_entries[i], 'mouseover', show_popover);
			Event.observe(archive_entries[i], 'mouseout', handle_mouseout);
			var entry = get_entry(archive_entries[i].id);

			if ($('popout-' + entry)) {
				Event.observe($('popout-' + entry), 'mouseout', handle_mouseout);
			}

			if (archive_entries[i].hasClassName("selected")) {
				selected_index = i;
			}
		}

		archive_shows_container_width = $('archive-shows-container').offsetWidth;
		archive_show_width = archive_entries[0].offsetWidth;
		archive_show_height = archive_entries[0].offsetHeight;
		archive_max_width = (archive_show_width * archive_entries.length) - archive_shows_container_width;

		if (archive_entries.length > 4) {
			$('archive-left-arrow').style.visibility = "";
			$('archive-right-arrow').style.visibility = "";

			Event.observe($('archive-left-arrow'), 'click', function(event) { slide_archive_entries_by(archive_shows_container_width); Event.stop(event); });
			Event.observe($('archive-right-arrow'), 'click', function(event) { slide_archive_entries_by(-archive_shows_container_width); Event.stop(event); });

			max_slide = archive_show_width / 3;

			position_archive_entries(-Math.max(0, selected_index) * archive_show_width);
		} else {
			position_archive_entries(0);  
		}
	}
}

