$(function(){
	if($('#slidecontainer').length > 0) {
		initSliderPage();
	}
	if($('#info').length > 0) {
		initInfoPanel();
	}
	
	if ($('.ro img').length > 0) {
		initRollOvers();
	}

	$(document).pngFix();
});

function initRollOvers(){
	$('.ro img').each(function(){
        $('<img/>').appendTo('body')
            .css({ display: "none" })
            .attr('src',$(this).attr('src').replace(/([^.]*)\.(.*)/, "$1_over.$2"));
    });
    $('.ro img').hover(
        function(){
            t = $(this);
            t.attr('src',t.attr('src').replace(/([^.]*)\.(.*)/, "$1_over.$2"));
        },
        function(){ 
            t = $(this);
            t.attr('src',t.attr('src').replace('_over',''));
        }
     );	
}

function fadeinElement(elementID) {
	var element = $(elementID);
	element.css("opacity", 0);
	element.animate({opacity: 1}, 1000);
}

/**
 * Slider page methods
 */

function initSliderPage() {
	if ($.browser.msie && $.browser.version.substr(0,1)<7) {
		$(document).pngFix();
	}
	updateSlider();
	setSliderValue(50);
	$(window).resize(updateSlider);
	enableTooltips(true);
	fadeinElement('#slidecontainer a img');
}

function updateSlider(fn) {
	winWidth = $(window).width();
	stageScrollWidth = $("#stage").attr("scrollWidth");
	maxScrollFactor = (stageScrollWidth - winWidth) / 100;
	
	var stage = $("#stage");
	var slider = $("#slider");
	
	if(maxScrollFactor > 0) {
		setSliderValue(stage.scrollLeft() / maxScrollFactor);
		stage.css("width", winWidth);
		stage.addClass("scroll-pane");
		$("#slidecontainer").addClass("scroll-content");
		$("#top.slide").css("overflow-x", "hidden");
		slider.css("display", "block");
		slider.slider({
			animate: "fast",
			step: 0.1,
			disabled: false,
			start: handleSliderStart,
			slide: handleSliderSlide
		});
		$("#divider").mousedown(handleMouseDown);
		$('#top').mousewheel(onMouseWheel);
		$('#divider').mousewheel(onMouseWheel);
		
		sliderFreshStart = false;
		var sliderMargin = (slider.outerWidth(true) - slider.outerWidth()) / 2;
		sliderMinX = slider.position().left + sliderMargin;
		sliderMaxX = sliderMinX + slider.width() - sliderMargin;
	} else {
		stage.css("width", null);
		$("#top.slide").css("overflow-x", "auto");
		slider.css("display", "none");
		slider.slider({ disabled: true });
		stage.css("width", "100%");
		stage.removeClass("scroll-pane");
		$("#slidecontainer").addClass("page");
		$("#slidecontainer").removeClass("scroll-content");
	}
	
	// Executed the passed in function, if necessary
	if (typeof fn == "function") fn();
}

function onMouseWheel(event, delta) {
	var newValue = Math.min(100, Math.max(0, $("#slider").slider( "option", "value" ) + delta * -1));
    setSliderValue(newValue);
    event.preventDefault()
}

function setSliderValue(value, pAnimate) {
	var stage = $("#stage");
	stage.stop();
	enableTooltips(false);
	if(pAnimate == true) {
		stage.animate({scrollLeft: value * maxScrollFactor}, "fast", onScrolledLeft);
	} else {
		stage.scrollLeft(value * maxScrollFactor);
		enableTooltips(true);
	}
	$("#slider").slider({value: value});
}

function onScrolledLeft() {
	enableTooltips(true);
}

function handleMouseDown(evt) {
	if(evt.target === this || $(evt.target).parent()[0] === this) {
		var mouseX = evt.layerX;
		if(mouseX < sliderMinX) {
			setSliderValue(0, true);
		} else if(mouseX > sliderMaxX) {
			setSliderValue(100, true);
		}
	}
}

function handleSliderStart(evt, ui)
{
	sliderFreshStart = true;
}

function handleSliderSlide(evt, ui)
{
	if(!sliderFreshStart) {
		setSliderValue(ui.value);
	} else {
		setSliderValue(ui.value, true);
	}
	sliderFreshStart = false;
}

/**
 * Tooltips
 */

function initTooltips() {
	tooltipObj = $('#slidecontainer a[title!=""]').tooltip({ 
	    delay: 100,
	    predelay: 300,
	    opacity: 0.8,
	    showURL: false, 
	    showBody: " - ", 
	    effect: 'slide',
	    position: "bottom center",
	    offset: [-50, 0],
	    onBeforeShow: renderTooltipContent
	});
	ttIsEnabled = true;
}

function renderTooltipContent() {
	var tips = $('.tooltip').not('.rendered');
	tips.addClass('rendered');
	var content = tips.text().split("/");
	tips.text("");
	tips.append('<p><span class="ttname">' + content[0] + '</span><br/>' + content[1] + '</p>');
	return ttIsEnabled;
}

function enableTooltips(enable) {
	if(typeof(tooltipObj) != "undefined") {
		if(enable == ttIsEnabled) {
			return;
		}
		if(!enable) {
			$(".tooltip").hide();
		}
		ttIsEnabled = enable;
	} else {
		initTooltips();
	}
}


/**
 * Info page methods
 */

function initInfoPanel() {
	iPanelIsOpen = false;
	fadeinElement('#background');
	infoPanel = $('#info');
	iPanelExtendedHeight = infoPanel.height();
	iPanelCollapsedHeight = 50;
	
	infoPanel.height(iPanelCollapsedHeight);
	infoPanel.show();
	if ($.browser.msie && $.browser.version.substr(0,1)<7) {
		$(document).pngFix();
		panelPopBack();
	}
	infoPanel.click(panelSwitch);
	infoPanel.hover(panelPop, panelPopBack);
	infoPanel.css("cursor", "pointer");
}

function panelSwitch() {
	if(iPanelIsOpen) {
		panelCollapse();
	} else {
		panelExtend();
	}
}

function panelPop() {
	if(!iPanelIsOpen) {
		infoPanel.animate({"height": iPanelCollapsedHeight + 5}, 30);
	}
}

function panelPopBack() {
	if(!iPanelIsOpen) {
		infoPanel.animate({"height": iPanelCollapsedHeight}, 50);
	}
}

function panelExtend() {
	infoPanel.animate({"height": iPanelExtendedHeight}, "slow");
	iPanelIsOpen = true;
}

function panelCollapse() {
	infoPanel.animate({"height": iPanelCollapsedHeight}, "slow");
	iPanelIsOpen = false;
}
