// 
// This file contains scripts to utilize common UI components
//

// Buy Button =======================================================================================
function onBuyButtonMouseOver(sourceObject)
{
	var urlStr = sourceObject.src;
	sourceObject.src = urlStr.replace(/idle/, 'hover');
	sourceObject.style.cursor = 'pointer';
}

function onBuyButtonMouseUp(sourceObject)
{
	var urlStr = sourceObject.src;
	sourceObject.src = urlStr.replace(/down/, 'hover');
}

function onBuyButtonMouseOut(sourceObject)
{
	var urlStr = sourceObject.src;
	sourceObject.src = urlStr.replace(/hover/, 'idle');
	sourceObject.style.cursor = 'default';
}

function onBuyButtonMouseDown(sourceObject)
{
	var urlStr = sourceObject.src;
	sourceObject.src = urlStr.replace(/hover/, 'down');
}

// Newsletter signup header =======================================================================================
gNewsletterHeaderClickEnabledBoolean = true;
gNewsletterHeaderHasFocusBoolean = false;
gNewsLetterHeaderImageIDString = 'newsletterHeaderImage';
gNewsletterContentIDString = 'newsletterContent';
gNewsletterHeaderStateCookieNameString = 'pvtNewsletterDialogIsOpen';
gNewsletterDialogAnimationDelayInteger = 33;

function onNewsletterHeaderMouseOver(sourceObject)
{
	try
	{
		gNewsletterHeaderHasFocusBoolean = true;
		var imageURLString = sourceObject.src;
		sourceObject.src = imageURLString.replace(/idle/, 'hover');
		sourceObject.style.cursor = 'pointer';
	}
	catch (exceptionObject)
	{
		alert('onNewsletterHeaderMouseOver: ' + exceptionObject.message);
	}
}

function onNewsletterHeaderMouseUp(sourceObject)
{
	try
	{
		if (!gNewsletterHeaderClickEnabledBoolean)
		{
			return;
		}
		
		var imageURLString = sourceObject.src;
		sourceObject.src = imageURLString.replace(/down/, 'hover');
	}
	catch (exceptionObject)
	{
		alert('onNewsletterHeaderMouseUp: ' + exceptionObject.message);
	}
}

function onNewsletterHeaderMouseOut(sourceObject)
{
	try
	{
		gNewsletterHeaderHasFocusBoolean = false;
		var imageURLString = sourceObject.src;
		sourceObject.src = imageURLString.replace(/hover/, 'idle');
		sourceObject.style.cursor = 'default';
	}
	catch (exceptionObject)
	{
		alert('onNewsletterHeaderMouseOut: ' + exceptionObject.message);
	}
}

function onNewsletterHeaderMouseDown(sourceObject)
{
	try
	{
		var imageURLString = sourceObject.src;
		sourceObject.src = imageURLString.replace(/hover/, 'down');
	}
	catch (exceptionObject)
	{
		alert('onNewsletterHeaderMouseDown: ' + exceptionObject.message);
	}
}

function onNewsletterHeaderClick(sourceObject)
{
	try
	{
		if (!gNewsletterHeaderClickEnabledBoolean)
		{
			return;
		}
		
		// First disable mouse events
		gNewsletterHeaderClickEnabledBoolean = false;
		
		// Now begin the animation
		if (document.getElementById(gNewsletterContentIDString).style.height != '0px')
		{
			closeNewsletterDialog(1);
		}
		else
		{
			openNewsletterDialog(1);
		}
	}
	catch (exceptionObject)
	{
		alert('onNewsletterHeaderClick: ' + exceptionObject.message);
	}
}

function swapNewsletterDialogHeader()
{
	var headerElement = document.getElementById(gNewsLetterHeaderImageIDString);
	var titleString = (headerElement.src.match(/open/)) ? 'Click to expand' : 'Click to collapse';
	headerElement.title = titleString;
	
	var newImageString = (gNewsletterHeaderHasFocusBoolean) ? '-hover' : '-idle';
	newImageString = (headerElement.src.match(/closed/)) ? 'open' + newImageString + '.gif' : 'closed' + newImageString + '.gif';
	headerElement.src = headerElement.src.replace(/((open)|(closed))\-((idle)|(hover))\.gif$/, newImageString);
}

function saveNewsletterDialogState(stateString)
{
	stateString = escape(stateString);
	var expirationDate = new Date();
	expirationDate.setYear(expirationDate.getFullYear() + 1);
	setCookie(gNewsletterHeaderStateCookieNameString, stateString, expirationDate);
}

function restoreNewsletterDialogEvents()
{	
	
	gNewsletterHeaderClickEnabledBoolean = true;
}

function closeNewsletterDialog(deltaInteger)
{
	var contentElement = document.getElementById(gNewsletterContentIDString);
	
	if (deltaInteger == null || deltaInteger == 0)
	{
		// Explicitly close the dialog and that's it.
		contentElement.style.height = '0px';
		swapNewsletterDialogHeader();
		return;
	}
	
	contentElement.style.height = Math.max(parseInt(contentElement.style.height) - deltaInteger, 0) + 'px';
	
	if (contentElement.style.height != '0px')
	{
		deltaInteger *= 2;
		
		// Set another timeout
		setTimeout('closeNewsletterDialog(' + deltaInteger + ');', gNewsletterDialogAnimationDelayInteger);
		return;
	}
	
	// If we got here then there is no more animation to do. Set the header, save the state and restore clicking
	swapNewsletterDialogHeader();
	saveNewsletterDialogState('closed');
	gNewsletterHeaderClickEnabledBoolean = true;
}

function openNewsletterDialog(deltaInteger)
{
	var contentElement = document.getElementById(gNewsletterContentIDString);
	contentElement.style.height = Math.min(parseInt(contentElement.style.height) + deltaInteger, 165) + 'px';
	
	if (contentElement.style.height != '165px')
	{
		deltaInteger *= 2;
		
		// Set another timeout
		setTimeout('openNewsletterDialog(' + deltaInteger + ');', gNewsletterDialogAnimationDelayInteger);
		return;
	}
	
	// If we got here then there is no more animation to do. Set the header, save the state and restore clicking
	swapNewsletterDialogHeader();
	saveNewsletterDialogState('open');
	gNewsletterHeaderClickEnabledBoolean = true;
}
// Jquery common UI Init
$(function(){
	//hover states on the static widgets
	$('.button-link').hover(
		function() { $(this).addClass('ui-state-hover'); }, 
		function() { $(this).removeClass('ui-state-hover'); }
	);				
});
