/*

TODO: image preloading doesn't work in Opera 9.5
Pull image preloading hack from p9-lightbox.js

*/

try {
	$(document).ready(function() {
		p9_player_init();
	});
} catch(ex) { /* Unhandled Exception */ }

var _p9_player_slides = null;

var _p9_player_mouse_inside = false;

var _p9_player_slide_width = 0;

var _p9_player_set_random_default_image = true;
var _p9_player_fade_in_default_image = true;

var _p9_player_num_slides = 0;
var _p9_player_current_slide_num = 1;

var _p9_player_is_sliding = false;

var _p9_player_button_fade_in_duration = 500;

var _p9_player_slide_in_duration = 550;
var _p9_player_slide_in_easing = 'easeInOutExpo'; //'easeInOutQuad'; 'easeOutQuad';

var _p9_player_user_active = false;

var _p9_player_slide_queue = new Array();
var _p9_player_slide_queue_latest_slide_num = 0;
var _p9_player_slide_queue_timer = null;
var _p9_player_slide_queue_delay = 75;

var _p9_player_halted = false;
var _p9_player_slide_auto_timer = null;
var _p9_player_slide_auto_timer_period = 6000;
var _p9_player_slide_auto_mod_active = false;

var _p9_player_slides_lightbox = new Array();
var _p9_player_current_slide_lightbox = null;

function p9_player_init()
{
	_p9_player_slide_width = $('.player-content-inner').width();
	
	p9_player_load_slides();
	
	// Create nav buttons
	var btnNext = $('<div class="player-btn btn-next" ><a href="#"></a></div>');
	var btnPrev = $('<div class="player-btn btn-prev" ><a href="#"></a></div>');
	btnNext.css('opacity', '0.0');
	btnPrev.css('opacity', '0.0');
	$('.player-content').append(btnNext).append(btnPrev);
	
	// Create .player-index
	$('.player').append($('<div class="player-index"><div class="player-index-inner"></div></div>'));
	var indexInner = $('.player-index-inner');
	
	// Create .player-index buttons for each slide
	for(var i=0;i<_p9_player_num_slides;i++)
	{
		var slideNum = i+1;
		indexInner.append($('<a class="index-btn index-btn-'+slideNum+(_p9_player_current_slide_num==slideNum ? ' index-btn-active' : '')+'" href="#"></a>'));
	}
	
	// Position .player-index (centered)
	$('.player-index').show();
	indexInner
		.css('left', (indexInner.parent().width()/2)-(indexInner.width()/2)+'px')
		.css('display', 'block')
		.css('position', 'absolute');
	$('.player-index').hide();
	$('.player-index').fadeIn(1500);
	
	// Bind events
	$('.player-content').hover(function(e) {
		_p9_player_mouse_inside = true;
		//p9_player_toggle_btns(true);
	}, function(e) {
		_p9_player_mouse_inside = false;
		p9_player_toggle_btns(false, '.player-btn');
	});
	
	$('.player-content').mousemove(function(e) {
		var offset = $(this).offset();
		var mX = e.clientX - offset.left;
		var mY = e.clientY - offset.top;
		p9_player_mouse_moved(mX, mY);
	});
	
	$('.btn-next').click(function() { p9_player_nav_slide(true); return false; });
	$('.btn-prev').click(function() { p9_player_nav_slide(false); return false; });
	
	// Fix IE6/IE7(IE8?) single-click/double-click wierdness (for fast clicking!)
	if($.browser.msie)
	{
		$('.btn-next').bind("dblclick", function(){
			p9_player_nav_slide(true); return false;
		});
	}

	$('.index-btn').click(p9_player_index_clicked);
	
	// Start Auto Slide
	if(_p9_player_slide_auto_timer_period>0)
		_p9_player_slide_auto_timer = setTimeout('p9_player_auto_slide()', _p9_player_slide_auto_timer_period);
}

function p9_player_load_slides()
{
	_p9_player_slides = $('.player-slides > img');
	_p9_player_num_slides = _p9_player_slides.length;
	
	for(var i=0;i<_p9_player_num_slides;i++)
	{
		var slide = $(_p9_player_slides[i]);
		var slideNext = slide.next();

		if(slideNext.is('a') && slideNext.hasClass('lightbox'))
			_p9_player_slides_lightbox[i] = slideNext;
		else
			_p9_player_slides_lightbox[i] = null;
	}
}

function p9_player_nav_slide(next)
{
	var curSlideNum = _p9_player_current_slide_num;
	
	if(_p9_player_slide_queue.length>0)
		curSlideNum = _p9_player_slide_queue_latest_slide_num;
		
	var slideNum = curSlideNum+1;
	
	if(!next)
		slideNum = curSlideNum-1;
		
	if(slideNum>_p9_player_num_slides)
		slideNum = 1;
	else if(slideNum<=0)
		slideNum = _p9_player_num_slides;
	
	if(!_p9_player_slide_auto_mod_active)
		_p9_player_user_active = true;
	
	p9_player_open_slide(slideNum);
}

function p9_player_index_clicked()
{
	var parent = $(this).parent();
	var parentChildren = parent.children();
	
	var slideNum = 1;
	for(var i=0;i<parentChildren.length;i++)
	{
		if(parentChildren[i]==this)
		{
			slideNum = i+1;
			break;
		}
	}
	
	if(slideNum==_p9_player_current_slide_num)
		return false;
	
	_p9_player_user_active = true;
	
	p9_player_open_slide(slideNum);
	
	return false;
}

function p9_player_open_slide(slideNum, mod_queue)
{
	if(_p9_player_is_sliding && !mod_queue)
	{
		_p9_player_slide_queue_latest_slide_num = slideNum;
		p9_player_queue_slide(slideNum);
		return;
	}
	
	_p9_player_is_sliding = true;
	
	var newSlideImg = $(_p9_player_slides[slideNum-1]);
	newSlideImg.attr('alt', '');
	
	if(_p9_player_slides_lightbox[slideNum-1])
		_p9_player_current_slide_lightbox = _p9_player_slides_lightbox[slideNum-1];
	else
		_p9_player_current_slide_lightbox = null;

	var newSlide = $('<div class="slide-holder"></div>');
	
	if(_p9_player_current_slide_lightbox)
		newSlide.click(function() { p9_lightbox_open(_p9_player_current_slide_lightbox); });
	
	newSlide.css('width', '0px').css('opacity', '0.5').append(newSlideImg);
	$('.player-content-inner').append(newSlide);
	newSlide.animate({width: _p9_player_slide_width, opacity: 1.0}, _p9_player_slide_in_duration, _p9_player_slide_in_easing, p9_player_done_sliding);

	_p9_player_current_slide_num = slideNum;
	
	p9_player_update_index();
}

function p9_player_update_index()
{
	$('.index-btn-active').removeClass('index-btn-active');
	$('.index-btn-' + _p9_player_current_slide_num).addClass('index-btn-active');
}

function p9_player_queue_slide(slideNum)
{
	_p9_player_slide_queue.push(slideNum);
	
	if(!_p9_player_slide_queue_timer)
	{
		if(_p9_player_slide_queue_delay>0)
			_p9_player_slide_queue_timer = setTimeout('p9_player_slide_queue_tick()', _p9_player_slide_queue_delay);
		else
			p9_player_slide_queue_tick()
	}
}

function p9_player_done_sliding()
{
	if(_p9_player_slide_queue.length>0)
	{
		/*var nextSlideNum = _p9_player_slide_queue.shift();
		_p9_player_slide_queue_mod_active = true;
		p9_player_open_slide(nextSlideNum);
		_p9_player_slide_queue_mod_active = false;*/
		//p9_player_slide_queue_tick();
	}
	else
	{
		_p9_player_is_sliding = false;
		p9_player_collect_garbage();
	}
	
	//p9_player_collect_garbage();
}

function p9_player_slide_queue_tick()
{
	if(_p9_player_slide_queue.length>0)
	{
		var nextSlideNum = _p9_player_slide_queue.shift();
		p9_player_open_slide(nextSlideNum, true);
		
		_p9_player_slide_queue_timer = setTimeout('p9_player_slide_queue_tick()', _p9_player_slide_queue_delay);
	}
	else
	{
		_p9_player_slide_queue_timer = null;
	}
}

function p9_player_collect_garbage()
{
	var visibleSlides = $('.player-content-inner').children();
	
	// Find newest slide which isn't animating
	var backgroundSlideIndex = -1;
	for(var i=visibleSlides.length-1;i>=0;i--)
	{
		var slide = $(visibleSlides[i]);
		//if(slide.width()==_p9_player_slide_width)
		if(!slide.is(':animated'))
		{
			backgroundSlideIndex = i;
			break;
		}
	}
	
	if(backgroundSlideIndex<0)
		return;
		
	var r = 0;
	for(var i=0;i<backgroundSlideIndex;i++)
	{
		var slide = $(visibleSlides[i]);
		slide.remove();
		r++;
	}
}

function p9_player_auto_slide()
{
	if(_p9_player_user_active || _p9_player_halted)
		return;
	
	_p9_player_slide_auto_mod_active = true;
	p9_player_nav_slide(true);
	_p9_player_slide_auto_mod_active = false;

	_p9_player_slide_auto_timer = setTimeout('p9_player_auto_slide()', _p9_player_slide_auto_timer_period);
}

function p9_player_toggle_btns(show, button_selector, omitStop)
{
	var btn = $(button_selector);
		
	if(!btn.length)
		return;
		
	if(!omitStop)
		btn.stop(true, false);
			
	if(show)
		btn.animate({opacity: 1.0}, _p9_player_button_fade_in_duration);
	else
		btn.animate({opacity: 0.0}, _p9_player_button_fade_in_duration);
}

function p9_player_get_default_slide()
{
	p9_player_load_slides();
	
	var rand = Math.floor(Math.random()*(_p9_player_num_slides))+1;
	_p9_player_current_slide_num = rand;
	
	return '<img src="' + $(_p9_player_slides[rand-1]).attr('src') + '" alt="" class="default-slide" />';
}

function p9_player_mouse_moved(mX, mY)
{
	if(mX<(_p9_player_slide_width/8))
		p9_player_toggle_btns(true, '.btn-prev');
	else
	{
		if($('.btn-prev').is(':visible'))
			p9_player_toggle_btns(false, '.btn-prev', false);
	}
	
	if(mX>=_p9_player_slide_width-(_p9_player_slide_width/8))
		p9_player_toggle_btns(true, '.btn-next');
	else
	{
		if($('.btn-next').is(':visible'))
			p9_player_toggle_btns(false, '.btn-next', false);
	}
}

function p9_player_halt()
{
	_p9_player_halted = true;
}

function p9_player_resume()
{
	_p9_player_halted = false;
	if(_p9_player_slide_auto_timer_period>0)
	{
		clearTimeout(_p9_player_slide_auto_timer);
		p9_player_auto_slide();
	}
}