// ----------------------------------------------------
//    Copyright© (C) 2011 by Auspient, Inc. 
//    P.O. Box 1267
//    San Luis Obispo, California 93401, U.S.A.
//    All rights reserved.
//
//    This software is the confidential and proprietary information
//    of Auspient, Inc. ("Confidential Information").
// ----------------------------------------------------

	// ===>>> exec on page load,
	// after slight delay to insure page loaded
	window.setTimeout(InitiateSlides, 500);

// -----------------------------------------------

// ===>> THESE TWO VALUES DETERMINE BASIC SLIDE ROTATION SPEED

// number of seconds to delay (upon initial page load)
// before slide rotation starts
var gInitialDelaySeconds = 0;

// number of seconds each slide is displayed
var gSlideRotationSeconds = 5;

// ===>> THESE VALUES ENABLE AND CONTROL VISUAL EFFECTS

// enable use of effects on images vs simple slide show
var gUseImageEffects = true;
var gNextSlideID = null;

var gFadeInSpeed = 2;
var gFadeOutSpeed = .5;

// -----------------------------------------------

var gTimerCallbackID = null;
var gSlideRotationPaused = false;

var gBaseSlideImageID = "Middle_div";
var gBaseSlideButtonID = "SlideButton";

var gBaseSelectedSrc = "App_Themes/Default/graphics/btn_home_";
var gSlidePlaySrc = "App_Themes/Default/graphics/btn_home_play.gif";
var gSlidePausedSrc = "App_Themes/Default/graphics/btn_home_pause.gif";

var gCurrentSlide = 1;
var gMaxSlides = 5;

// -----------------------------------------------

function InitiateSlides()
{
	// compensate for rendering engine issues
	AdjustForBrowser();

	var Delay = gInitialDelaySeconds * 1000;

	// start slide rotation after slightly longer intial delay
	window.setTimeout(StartSlideShowRotation, Delay);

	ShowSlide(gCurrentSlide, true);
}

// -----------------------------------------------

function ShowNextSlide()
{
	if (gSlideRotationPaused)
		return;

	// capture the body's current scrolling position
	var ScrollTop = document.body.scrollTop;

	ShowSlide(gCurrentSlide, false);

	if (++gCurrentSlide > gMaxSlides)
		gCurrentSlide = 1;

	ShowSlide(gCurrentSlide, true);

	StopSlideShowRotation();

	// check for specific timeout for this slide
	var ID = gBaseSlideImageID + gCurrentSlide;
	var htmlElement = window.document.getElementById(ID);
	var SlideTimeout = null;
	
	// allow benign failure
	if (htmlElement)
		SlideTimeout = parseInt(htmlElement.getAttribute("SlideTimeout"));
	
	StartSlideShowRotation(SlideTimeout);

	// check for automatically setting focus
	// when the slide is displayed
	CheckSetFocusOnSlide(gCurrentSlide);

	// capture the body's current scrolling position now
	var ScrollTopNow = document.body.scrollTop;

	// compensate for Chrome and Safari changing scroll position
	// Note: seems like this only occurs on initial image change
	if (ScrollTop != ScrollTopNow)
	{
		var Diff = ScrollTopNow - ScrollTop;
		if (ScrollTopNow < ScrollTop)
			Diff = -Diff;

		window.scrollBy(0, Diff);
	}
}

// -----------------------------------------------
// Pause button
// -----------------------------------------------

function OnClickOnSlidePauseButton(ID)
{
	gSlideRotationPaused = !gSlideRotationPaused;
	SetSlideRotationPaused(gSlideRotationPaused);

	if (!gSlideRotationPaused)
		ShowNextSlide();
}

// -----------------------------------------------

function PauseSlideRotation()
{
	if (!gSlideRotationPaused)
	{
		SetSlideRotationPaused(true);
	}
}

// -----------------------------------------------

function FreezeSlideRotation(SlideNumber)
{
	PauseSlideRotation();
	ShowSlideBySlideNumber(SlideNumber);
}
// -----------------------------------------------

function PlaySlidesFromStart()
{
	SetSlideRotationPaused(false);    
	ShowSlideBySlideNumber(1);
	InitiateSlides();
}

// -----------------------------------------------
// Slide # button
// -----------------------------------------------

function OnClickOnSlideButton(ID, SlideNumber)
{
	SetSlideRotationPaused(true);

	ShowSlideBySlideNumber(SlideNumber);
}

// -----------------------------------------------
// Utility functions
// -----------------------------------------------

function ShowSlideBySlideNumber(SlideNumber)
{
	ShowSlide(gCurrentSlide, false, true);

	gCurrentSlide = SlideNumber;

	ShowSlide(gCurrentSlide, true, true);
}

// -----------------------------------------------

function ShowSlide(SlideNumber, IsSelected, SimpleDisplay)
{
	// display next slide
	var ID = gBaseSlideImageID + SlideNumber;
	ShowOrHideHTMLElement(ID, IsSelected, SimpleDisplay);

	// display current button as selected
	ID = gBaseSlideButtonID + SlideNumber;
	ShowSlideButtonSelected(ID, SlideNumber, IsSelected);

	// check for automatically setting focus
	// when the slide is displayed
	CheckSetFocusOnSlide(SlideNumber);
}

// -----------------------------------------------

function CheckSetFocusOnSlide(SlideNumber)
{
	// display next slide
	var ID = gBaseSlideImageID + SlideNumber;
	var htmlElement = window.document.getElementById(ID);

	// allow benign failure
	if (htmlElement)
	{
		var SetFocusTo = htmlElement.getAttribute("setfocusto");
		if (SetFocusTo && SetFocusTo != "")
		{
			htmlElement = window.document.getElementById(SetFocusTo);
			if (htmlElement && htmlElement.style.display == "")
			{
				try
				{
					htmlElement.focus();
				}
				catch(exception)
				{
					// simply don't set focus on failure
				}
			}
		}
	}
}

// -----------------------------------------------

function SetSlideRotationPaused(IsPaused)
{
	gSlideRotationPaused = IsPaused;

	var ID = "SlidePauseButton";
	var htmlElement = window.document.getElementById(ID);

	// allow benign failure
	if (htmlElement)
	{
		var ImageSrc;
		if (IsPaused)
			ImageSrc = gSlidePlaySrc;
		else
			ImageSrc = gSlidePausedSrc;

		htmlElement.src = ImageSrc;
	}
}

// -----------------------------------------------

function ShowSlideButtonSelected(ID, SlideNumber, IsSelected)
{
	var htmlElement = window.document.getElementById(ID);

	// allow benign failure
	if (htmlElement)
	{
		var ImageSrc;
		if (IsSelected)
			ImageSrc = gBaseSelectedSrc + SlideNumber + "on.gif";
		else
			ImageSrc = gBaseSelectedSrc + SlideNumber + ".gif";

		htmlElement.src = ImageSrc;
	}
}

// -----------------------------------------------

function ShowOrHideHTMLElement(ID, Display, SimpleDisplay)
{
	if (gUseImageEffects && !SimpleDisplay)
	{
		if (Display)
			gNextSlideID = ID; 
		else
			$("#" + ID).fadeOut(gFadeOutSpeed * 1000, CheckOnFadeOut);
	}
	else
	{
		var htmlElement = window.document.getElementById(ID);

		// allow benign failure
		if (htmlElement)
			htmlElement.style.display = (Display ? "" : "none");
	}
}

// -----------------------------------------------
// -----------------------------------------------

function CheckOnFadeOut()
{
	if (gSlideRotationPaused)
		ShowSlideBySlideNumber(gCurrentSlide);
	else
	{
		if (gNextSlideID)
			$("#" + gNextSlideID).fadeIn(gFadeInSpeed * 1000);
	}
}

// -----------------------------------------------
// -----------------------------------------------

function StartSlideShowRotation(Seconds)
{
	if (!Seconds)
		Seconds = gSlideRotationSeconds;

	var Delay = Seconds * 1000;

	gTimerCallbackID = window.setTimeout(ShowNextSlide, Delay);
}

// -----------------------------------------------

function StopSlideShowRotation()
{
	if (gTimerCallbackID)
		window.clearInterval(gTimerCallbackID);
	
	gTimerCallbackID = null;
}

// ----------------------------------------------------

function AdjustForBrowser()
{
	var ID = "Middle_WrapperDiv";

	var userAgent = window.navigator.userAgent;
//	alert(userAgent);

	// Note: use this calling order for proper detection:
	// IsIE(), IsChrome(), IsSafari(), IsFireFox()

	// compensate for rendering engine issues
	if (IsIE(userAgent))
		AdjustElementsHeightForBrowserType(ID, "IE");

	else if (IsChrome(userAgent) || IsSafari(userAgent))
		gUseImageEffects = false;
}

// -----------------------------------------------

function AdjustElementsHeightForBrowserType(ID, BrowserType)
{
	var htmlElement = window.document.getElementById(ID);
	if (htmlElement)
	{
		var AttributeName = BrowserType + "Height";

		var Height, Diff, AttributeValue;
		var MapID, areas, area, sCoords;
		var i, j, k;
		var elements = document.getElementsByTagName("img");
		for (i = 0; i < elements.length; i++)
		{
			htmlElement = elements[i];

			// save previous height
			Height = htmlElement.getAttribute("height")
			AttributeValue = htmlElement.getAttribute(AttributeName)

			if (AttributeValue)
			{
				htmlElement.height = parseInt(AttributeValue);

				Height = parseInt(Height);
				AttributeValue = parseInt(AttributeValue);

				// original height greater?
				Diff = Math.round(Height - AttributeValue);
				if (Height > AttributeValue)
					Diff = -Diff;

				// adjust map coordinates for image
				MapID = htmlElement.useMap;
				if (MapID)
				{
					MapID = MapID.replace("#", "");
					htmlElement = window.document.getElementById(MapID);
					if (htmlElement)
					{
						areas = htmlElement.areas;
						for (j = 0; j < areas.length; j++)
						{
							area = areas[j];

							sCoords = area.coords;
							coords = sCoords.split(",");

							verticalOffset1 = coords[1];
							verticalOffset2 = coords[3];
							verticalOffset1Number = parseInt(verticalOffset1) + Diff;
							verticalOffset2Number = parseInt(verticalOffset2) + Diff;
							coords[1] = verticalOffset1Number.toString();
							coords[3] = verticalOffset2Number.toString();

							k = 0;
							sCoords = coords[k++] + ",";
							sCoords += coords[k++] + ",";
							sCoords += coords[k++] + ",";
							sCoords += coords[k];

							area.coords = sCoords;
						}
					}
				}
			}
		}
	}
}

// -----------------------------------------------

function IsIE(userAgent)
{
	return userAgent.indexOf("MSIE") != -1;
}

// -----------------------------------------------

function IsChrome(userAgent)
{
	return userAgent.indexOf("Chrome") != -1;
}

// -----------------------------------------------

function IsSafari(userAgent)
{
	return userAgent.indexOf("Safari") != -1;
}

// -----------------------------------------------

function IsFireFox(userAgent)
{
	return userAgent.indexOf("FireFox") != -1;
}

