var headerDataFileURL = '/banner/data/header-data.xml';
var leftPartDataItems = [];

var isMouseOverLeftPart = false;
var isTransition = false;

var imageHolder = null;

var timerID = -1;
var timerDelay = 800000;
var itemIndex = 0;

var expandedHolders = [];

var isStartup = true;

$(document).ready(function(){

	//hide header
	$('#headerBanner').css('opacity', 0);
	
	imageHolder = $('#headerBanner_imageHolder');
	imageHolder.html('');
	
	//load left part data xml file
	$.ajax({
		type: 'get', 
		url: headerDataFileURL, 
		dataType: 'xml', 
		success: function(xml){
			parseHeaderDataFile(xml);
			loadNextImage();
		}
	});
	
	//*******************************************
	//	right part lists
	//*******************************************
	$('.productFilterBlockHolder .listHolder').each(function(){
		var list = $(this).find('ul').eq(0);
		list.css('top', '-' + (list.height() + 5) + 'px');
	});
	
	$('.selectBoxHolder').click(function(){
		var $productFilterBlockHolder = $(this).parent();
		
		if($productFilterBlockHolder.hasClass('animated'))
		{
			return;
		}
		
		if($productFilterBlockHolder.hasClass('expanded'))
		{
			collapseList($productFilterBlockHolder);
		}
		else
		{
			expandList($productFilterBlockHolder);
		}
	});
});

function parseHeaderDataFile(xml)
{
	//left part data
	var $leftPartNode = $(xml).find('left_part').eq(0);
	$leftPartNode.find('item').each(function(){
		var itemNode = $(this);
		
		var titleValue = '';
		titleValue += '<span style="color: ' + itemNode.find('title_color').eq(0).text() + ';">';
		titleValue += clearString(itemNode.find('title').eq(0).text());
		titleValue += '</span>';
		
		var data = {
			title: titleValue, 
			description: clearString(itemNode.find('description').eq(0).text()), 
			image: itemNode.find('image').eq(0).attr('src'), 
			link: itemNode.find('link').eq(0).attr('href')
		};
		
		leftPartDataItems.push(data);
	});
	
	//right part data
	var $rightPartNode = $(xml).find('right_part').eq(0);
	$rightPartNode.find('filter').each(function(filterIndex){
		var listElement = 
			$('#filter' + (filterIndex + 1) + 'Holder .listHolder ul').eq(0);
		listElement.html('');
		
		var itemsCount = $(this).find('item').length;
		$(this).find('item').each(function(itemIndex){
			var itemNode = $(this);
			var itemClass = itemIndex == itemsCount - 1 ? ' class="last" ' : '';
			var htmlCode = '<li' + itemClass + '>';
			htmlCode += '<a href="' + itemNode.find('link').eq(0).attr('href') + '">';
			htmlCode += clearString(itemNode.find('title').eq(0).text());
			htmlCode += '</a>';
			htmlCode += '</li>';
			listElement.append(htmlCode);
		});
		
		listElement.css('top', '-' + (listElement.height() + 5) + 'px');
	});
}

function clearString(source)
{
	source = source.split('\t').join('');
	source = source.split('\r').join('');
	source = source.split('\n').join('');
	return source;
}

function startHeader()
{	
	isStartup = false;
		
	//set mouse handlers for #headerBanner-leftPart
	$('#headerBanner-leftPart').mouseover(function(){
		isMouseOverLeftPart = true;
		stopTimer();
	});
	
	$('#headerBanner-leftPart').mouseout(function(){
		isMouseOverLeftPart = false;
		startTimer();
	});
	
	//startup animation
	$('#headerBanner').animate({opacity: 1}, 700);
	
	var targetY;
	targetY = $('#rightPart-title').position().top;
	$('#rightPart-title').css('opacity', 0);
	$('#rightPart-title').css('top', (targetY + 20) + 'px');
	$('#rightPart-title').animate(
		{opacity: 1, top: targetY}, 
		500
	);
	
	for(var i = 1; i <= 3; i++)
	{
		var target = $('#filter' + i + 'Holder');
		targetY = target.position().top;
		target.css('opacity', 0);
		target.css('top', (targetY + 20) + 'px');
		target.delay(120 * (i - 0)).animate(
			{opacity: 1, top: targetY}, 
			500
		);
	}
	
	//start timer
	startTimer();
}

//***********************************************
//	right part lists
//***********************************************
function expandList($productFilterBlockHolder)
{
	if($productFilterBlockHolder.hasClass('expanded'))
	{
		return;
	}
	
	$productFilterBlockHolder.addClass('expanded');
	$productFilterBlockHolder.addClass('animated');
	
	var $selectBoxHolder = 
		$productFilterBlockHolder.find('.selectBoxHolder').eq(0);
	var $listHolder = $productFilterBlockHolder.find('.listHolder').eq(0);
	var $list = $listHolder.find('ul').eq(0);
	
	var width = $productFilterBlockHolder.width();
	var height = $list.height() + $selectBoxHolder.height() + 15;
	addHolderToExpandedHolders($productFilterBlockHolder, width, height);
	
	$listHolder.css('height', ($list.height() + 5) + 'px');
	$list.animate(
		{top: 0}, 
		500, 
		function(){
			$productFilterBlockHolder.removeClass('animated');
		}
	);
}

function collapseList($productFilterBlockHolder)
{
	if(!$productFilterBlockHolder.hasClass('expanded'))
	{
		return;
	}
	
	$productFilterBlockHolder.removeClass('expanded');
	$productFilterBlockHolder.addClass('animated');
	removeHolderFromExpandedHolders($productFilterBlockHolder);
	
	var $selectBoxHolder = 
		$productFilterBlockHolder.find('.selectBoxHolder').eq(0);
	var $listHolder = $productFilterBlockHolder.find('.listHolder').eq(0);
	var $list = $listHolder.find('ul').eq(0);
	
	$list.stop();
	$list.animate(
		{top: -($list.height() + 5)}, 
		500, 
		function(){
			$productFilterBlockHolder.removeClass('animated');
			$listHolder.css('height', '0px');
		}
	);
}

function addHolderToExpandedHolders($productFilterBlockHolder, width, height)
{
	for(var i = 0; i < expandedHolders.length; i++)
	{
		var obj = expandedHolders[i];
		if(obj.instance == $productFilterBlockHolder)
		{
			return;
		}
	}
	var offsetObj = $productFilterBlockHolder.offset();
	var obj = {
		instance: $productFilterBlockHolder, 
		x: offsetObj.left, 
		y: offsetObj.top, 
		width: width, 
		height: height
	};
	
	expandedHolders.push(obj);
	$(document).unbind('mousemove', document_mouseMoveHandler);
	$(document).bind('mousemove', document_mouseMoveHandler);	
}

function removeHolderFromExpandedHolders($productFilterBlockHolder)
{
	for(var i = 0; i < expandedHolders.length; i++)
	{
		var obj = expandedHolders[i];
		if(obj.instance == $productFilterBlockHolder)
		{
			expandedHolders.splice(i, 1);
			break;
		}
	}
	
	if(expandedHolders.length == 0)
	{
		$(document).unbind('mousemove', document_mouseMoveHandler);
	}
}

function document_mouseMoveHandler(event)
{
	if(expandedHolders.length == 0)
	{
		$(document).unbind('mousemove', document_mouseMoveHandler);
		return;
	}
	
	var instancesToCollapsing = [];
	
	for(var i = 0; i < expandedHolders.length; i++)
	{
		var obj = expandedHolders[i];
		var isMouseOver = true;
		isMouseOver = isMouseOver && event.pageX > obj.x;
		isMouseOver = isMouseOver && event.pageX < (obj.x + obj.width);
		isMouseOver = isMouseOver && event.pageY > obj.y;
		isMouseOver = isMouseOver && event.pageY < (obj.y + obj.height);
		
		if(!isMouseOver)
		{
			instancesToCollapsing.push(obj.instance);
		}
	}
	
	for(i = 0; i < instancesToCollapsing.length; i++)
	{
		collapseList(instancesToCollapsing[i]);
	}
}

//***********************************************
//	left part timer
//***********************************************
function startTimer()
{
	if(timerID > -1 || isMouseOverLeftPart || isTransition)
	{
		return;
	}
	timerID = setTimeout(timerHandler, timerDelay);
}

function stopTimer()
{
	clearTimeout(timerID);
	timerID = -1;
}

function timerHandler()
{
	stopTimer();
	change();
}

//***********************************************
//	left part transition
//***********************************************
function change()
{
	itemIndex++;
	if(itemIndex >= leftPartDataItems.length)
	{
		itemIndex = 0;
	}
	isTransition = true;
	loadNextImage();
}

function loadNextImage()
{
	var img = $('<img src="' + leftPartDataItems[itemIndex].image + '" />').prependTo(imageHolder);
	
	img.load(function(){
		img.unbind('load');
		
		var imgSrc = img.attr('src');
		$('<div class="headerBanner_image"></div>').appendTo(imageHolder).css('background-image', 'url(' + imgSrc + ')');
		img.remove();
		
		if(isStartup)
		{
			changeLeftPartContent();
			startHeader();
		}
		else
		{
			hideLeftPart();
		}
	});
}

function hideLeftPart()
{
	imageHolder.fadeOut(500);
	$('#headerBanner_descriptionHolder').animate({opacity: 0}, 500, function(){
		changeLeftPartContent();
		showLeftPart();
	});
}

function changeLeftPartContent()
{
	if(imageHolder.find('.headerBanner_image').length > 1)
	{
		imageHolder.find('.headerBanner_image').eq(0).remove();
	}
	var data = leftPartDataItems[itemIndex];
	$('#headerBanner_title').html(data.title);
	$('#headerBanner_descr').html(data.description);
	$('#headerBanner_detailsButton').attr('href', data.link);
	
	Cufon.replace('#headerBanner_title', {fontFamily: 'QTypeSemiExt-Book'});
	Cufon.replace('#headerBanner_descr');
	Cufon.replace('div#rightPart-title');
	Cufon.replace('.productFilterTitle');
}

function showLeftPart()
{
	imageHolder.fadeIn(500);
	$('#headerBanner_descriptionHolder').css('left', '-20px');
	$('#headerBanner_descriptionHolder').animate({left: 0, opacity: 1}, 500, function(){
		isTransition = false;
		startTimer();
	});
}

