var baseUrl = '';
var currentAZLetter;
var populateIndexAfterLoad = false;

function toggleDrawer(drawerName)
{
	var mainDrawer = document.getElementById('drawer');
	var azIndex = document.getElementById('azIndex');
	var tools = document.getElementById('tools');

	var drawerOpen = (mainDrawer.style.display && mainDrawer.style.display != 'none');

	if (drawerName == "tools")
	{
		loadToolsJSON();
		azIndex.style.display = 'none';

		if (drawerOpen)
			$(tools).fadeIn();
		else
			tools.style.display = '';
	}
	else
	{
		loadAZIndexJSON();
		tools.style.display = 'none';

		if (drawerOpen)
			$(azIndex).fadeIn(function () { populateIndex(currentAZLetter) });
		else
			azIndex.style.display = '';
	}

	if (!drawerOpen)
	{
		if (drawerName == "tools")
			$(mainDrawer).slideDown();
		else if (drawerName == "azindex")
			$(mainDrawer).slideDown(function () { populateIndex(currentAZLetter) });
	}
	else if (mainDrawer.currentDrawer == drawerName)
	{
		$(mainDrawer).slideUp();
	}

	mainDrawer.currentDrawer = drawerName;
}

function closeDrawer()
{
	$('#drawer').slideUp();
}

var azLoadStarted = false;
function loadAZIndexJSON()
{
	if (!azLoadStarted && typeof AZIndexLinks == 'undefined')
	{
		azLoadStarted = true;

		var azScript = document.createElement("script");
		azScript.src = document.location.protocol + "//www.csbsju.edu/Apps/AZIndex.ashx";
		azScript.type = "text/javascript";
		document.getElementsByTagName("head")[0].appendChild(azScript);

		if (readCookie('preloadAZIndex') != 'true')
			createCookie('preloadAZIndex', 'true', 5);
	}
}

var toolsLoadStarted = false;
function loadToolsJSON()
{
	if (!toolsLoadStarted && typeof ToolLinks == 'undefined')
	{
		toolsLoadStarted = true;

		var toolsScript = document.createElement("script");
		toolsScript.src = document.location.protocol + "//www.csbsju.edu/Apps/Tools.ashx";
		toolsScript.type = "text/javascript";
		document.getElementsByTagName("head")[0].appendChild(toolsScript);
	}
}

function createAlphabet()
{
	if (typeof AZIndexLinks == 'undefined' || AZIndexLinks == null || AZIndexLinks.length == 0)
	{
		document.getElementById('azindexlink').onclick = null;
		return;
	}
	
	var cnt = 0;
	var alphabetHTML = '<ul>';
	var firstLetter = '';

	for (var letter in AZIndexLinks)
	{
		alphabetHTML += '<li><a id="liOf' + letter + '" href="javascript:void(0);" onclick="populateIndex(\'' + letter + '\')">' + letter + '</a></li>';

		if (cnt == 0)
			firstLetter = letter;

		cnt++;
	}
	
	document.getElementById('azAlphabet').innerHTML = alphabetHTML + '</ul>';
	
	if (populateIndexAfterLoad)
		populateIndex(firstLetter);
}

var externalLinkRegExp = new RegExp("^https?://(?!www1?.csbsju.edu)");
var minAZHeight = 255;

function populateIndex(letter)
{
	if (!letter)
		letter = 'A';

	if (!AZIndexLinks)
	{
		loadAZIndexJSON();
		setTimeout(function () { populateIndex(letter) }, 500);
		return;
	}

	currentAZLetter = letter;
	var numberOfAZColumns = 4;
	var links = AZIndexLinks[letter];

	for (var currLetter in AZIndexLinks)
		document.getElementById("liOf" + currLetter).className = "";

	document.getElementById("liOf" + letter).className = "selected";

	var output = '<div><table width="98%" border="0" height="100%"><tr>';

	/* colBreak specifies the number of items for the current column */
	var colBreak = Math.ceil(links.length / numberOfAZColumns);
	var colWidth = 100 / numberOfAZColumns;
	var currentCol = -1;
	var lastIndex = 0;

	for (var i = 0; i < links.length; i++)
	{
		if (i - lastIndex >= colBreak || i == 0)
		{
			if (i != 0)
				output += '</ul></td>';

			output += '<td width="' + colWidth + '%"><ul>';
			currentCol++;

			/* colBreak is updated when there is a new column */
			colBreak = Math.ceil((links.length - i) / (numberOfAZColumns - currentCol));
			lastIndex = i;
		}

		output += '<li><a href="' + getAbsoluteUrl(links[i].link) + '"' + getLinkTarget(links[i].link) + ' onclick="trackPageView(\'/AZ_Index/' + links[i].xID + '\');">' + links[i].name + '</a></li>';
	}

	document.getElementById("azLinks").innerHTML = output + '</ul></td></tr></table></div>';

	//set a-z div size
	var windowHeight = $(window).height();
	var azLinks = document.getElementById('azLinks');
	azLinks.style.height = ''; //reset height
	document.getElementById('azIndex').style.height = '';
	var azHeight = $(azLinks).height();
	var spacedUsed = azHeight + 185;

	if (azHeight < minAZHeight)
	//set to the minimum height
		azLinks.style.height = minAZHeight + 'px';
	else if (spacedUsed > windowHeight)
	//resize azindex based on window height
		azLinks.style.height = (windowHeight - 187 + $(window).scrollTop()) + 'px';
}

function populateTools()
{

	if (typeof ToolLinks == 'undefined' || ToolLinks == null || ToolLinks.length == 0)
	{
		document.getElementById('toolslink').onclick = null;
		return;
	}

	var numberOfColumns = 3;
	var output = '<table cellpadding="10"><tr>';

	var colWidth = 100 / numberOfColumns;
	var currentCol = -1;
	var lastIndex = 0;

	for (var column in ToolLinks)
	{
		output += '<td width="' + colWidth + '%">';

		for (var i = 0; i < ToolLinks[column].length; i++)
		{
			var tool = ToolLinks[column][i];
			output += '<p><a href="' + getAbsoluteUrl(tool.link) + '" onclick="trackPageView(\'/Tools/' + tool.xID + '\');"><img src="' + baseUrl + tool.icon + '" class="toolsIcon" />' + tool.title + '</a></p><p class="toolsDescription">' + tool.description + '</p>';
		}

		output += '</td>';
	}

	document.getElementById("tools").innerHTML = output + '</td></tr></table>';
}

function createTopNav()
{
	var mainNavHTML = '<ul>';
	var cnt = 0;

	for (var o in TopNavJSON)
	{
		var firstToken = (o.toString().split(' '))[0];

		mainNavHTML += '<li>' +
							'<div class="dropdown-menu">' +
								'<a class="menu-first" id="' + firstToken + 'Menu" href="' + getAbsoluteUrl(TopNavJSON[o].link) + '" >' + o + '</a>' +
								'<div class="subMenu" id="' + firstToken + 'SubMenu" style="display: none;">' +
										'<table border="0" class="subMenuStyle" id="' + firstToken + 'SubMenuTable">' +
											'<tr>' +
												'<td><ul>';

		for (var i = 0; i < TopNavJSON[o].items.length; i++)
			mainNavHTML += '<li><a href="' + getAbsoluteUrl(TopNavJSON[o].items[i].link) + '"' + getLinkTarget(TopNavJSON[o].items[i].link) + '>' + TopNavJSON[o].items[i].name + '</a></li>';

		mainNavHTML += '</ul></td>';

		if (TopNavJSON[o].image || TopNavJSON[o].content)
		{
			mainNavHTML += '<td class="subMenuContent"><center>';

			if (TopNavJSON[o].image)
				mainNavHTML += '<img src="' + TopNavJSON[o].image + '" />';

			if (TopNavJSON[o].content)
			{
				mainNavHTML += '<p>';

				if (TopNavJSON[o].contentLink)
					mainNavHTML += '<a href="' + getAbsoluteUrl(TopNavJSON[o].contentLink) + '"' + getLinkTarget(TopNavJSON[o].contentLink) + ' class="plain">';

				mainNavHTML += TopNavJSON[o].content;

				if (TopNavJSON[o].link)
					mainNavHTML += '</a>';

				mainNavHTML += '</p>';
			}

			mainNavHTML += '</center></td>';
		}

		mainNavHTML += '</tr></table></div></div></li>';
	}

	document.getElementById('mainnav').innerHTML = mainNavHTML + '</ul>';

	//The CSS position attribute cannot be set to 'absolute' until after the HTML has been
	//added to the DOM. Otherwise, the width of the subMenu div will not be calculated properly.
	for (var o in TopNavJSON)
	{
		var firstToken = (o.toString().split(' '))[0];
		var subMenu = document.getElementById(firstToken + 'SubMenu');

		if (jQuery.browser.msie && jQuery.browser.version == '6.0')
			subMenu.style.width = subMenu.offsetWidth + 'px';

		subMenu.style.position = 'absolute';
	}

	$('.dropdown-menu').hover
	(
		function ()
		{
			var subMenu = $('.subMenu', this);
			subMenu.css('display', '');
			subMenu.css('left', $("a", this).position().left + 'px');
		},
		function ()
		{
			$('.subMenu', this).css('display', 'none');
		}
	);
}

function closeSubMenu()
{
	if (typeof TopNavJSON == 'undefined')
		return;

	for (var o in TopNavJSON)
	{
		var firstToken = (o.toString().split(' '))[0];
		document.getElementById(firstToken + 'Menu').className = '';
	}
}

function createFlashToggle()
{
	if (document.location.pathname == '/' || document.location.pathname.contains('x46.xml'))
	{
		var flashToggleSpan = document.getElementById('flashToggleSpan');

		if (typeof flashToggleSpan != 'undefined' && flashToggleSpan != null)
		{
			var toggleAction = (readCookie('flashDisabled') == 'true' ? 'Enable' : 'Disable');
			flashToggleSpan.innerHTML = '<br /><a href="" onclick="toggleFlash();">' + toggleAction + ' Image Carousel</a>';
		}
	}
}

function toggleFlash()
{
	var flashDisabled = readCookie('flashDisabled');

	if (flashDisabled != 'true')
		createCookie('flashDisabled', 'true', 1825);
	else
		eraseCookie('flashDisabled');

	document.location.reload();
}

//This will correctly set the z-index for all div elements, i.e., the higher they appear in the DOM 
//the higher their z-index will be. This is here to correct issues with IE7/6/5, but it also elminates
//the need to manually set the z-index in the stylesheet.
function resetZIndex()
{
	var divTags = document.getElementsByTagName('div');
	var CurrentZIndex = divTags.length;
	
	for (var i = 0; i < divTags.length; i++) {
		divTags[i].style.zIndex = CurrentZIndex;
		CurrentZIndex -= 1;
	}
}

function createCookie(name, value, days)
{
	var expires = '';

	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		expires = '; expires=' + date.toGMTString();
	}

	document.cookie = name + "=" + value + expires + "; domain=.csbsju.edu; path=/";
}

function readCookie(name)
{
	var nameEq = name + '=';
	var cookieArray = document.cookie.split(';');

	for (var i = 0; i < cookieArray.length; i++)
	{
		var cookie = cookieArray[i];

		while (cookie.charAt(0) == ' ')
			cookie = cookie.substring(1, cookie.length);

		if (cookie.indexOf(nameEq) == 0)
			return cookie.substring(nameEq.length, cookie.length);
	}

	return null;
}

function eraseCookie(name)
{
	createCookie(name, '', -1);
}

function resizePageHeight()
{
	document.getElementById('bg_rpt_center').style.minHeight = '0px';

	if (document.documentElement.clientHeight)
		document.getElementById('bg_rpt_center').style.minHeight = (document.documentElement.clientHeight + 200) + 'px';

}

function getWindowBottom()
{
	if (window.innerHeight && window.pageYOffset)
		return parseInt(window.innerHeight) + parseInt(window.pageYOffset);
	if (typeof document.documentElement == "object" && (document.documentElement.clientHeight > 0 || document.documentElement.clientWidth > 0))
		return document.documentElement.offsetHeight + document.documentElement.scrollTop;
	else
		return document.body.clientHeight + document.body.scrollTop;
}

function setUpLocalNav()
{
	var currentHref = location.href;

	$("#localNav li.subnav").each(function ()
	{
		if (this.childNodes.length > 1)
		{
			var listNode;
			var linkNode;

			for (var a = this.childNodes.length - 1; a >= 0; a--)
			{
				var currNode = this.childNodes[a];

				if (typeof currNode == 'undefined' || typeof currNode.tagName == 'undefined')
					continue;

				var tagName = currNode.tagName.toLowerCase();

				if (tagName == 'a' && hasClass(currNode, 'linkArrow'))
				{
					currNode.linkNode = linkNode;
					linkNode.arrowNode = currNode;

					currNode.onmouseover = function () { this.linkNode.className = 'hover'; };
					currNode.onmouseout = function () { this.linkNode.className = ''; };

					linkNode.onmouseover = function () { this.arrowNode.className = 'linkArrow hover'; };
					linkNode.onmouseout = function () { this.arrowNode.className = 'linkArrow'; };

					if (typeof listNode != 'undefined')
					{
						currNode.listNode = listNode;

						if (hasClass(this, 'on'))
							listNode.style.display = '';
						else
							listNode.style.display = 'none';

						currNode.onclick = function ()
						{
							if (hasClass(this.parentElement, 'on'))
							{
								$(this.listNode).slideUp();
								this.parentElement.className = 'subnav';
							}
							else
							{
								$(this.listNode).slideDown();
								this.parentElement.className = 'subnav on';
							}

							return false;
						}
					}
				}
				else if (tagName == 'a')
					linkNode = currNode;
				else if (tagName == 'ul')
					listNode = currNode;
			}
		}
	});
}

function getAbsoluteUrl(link)
{
	if (baseUrl.length > 0 && !link.match("^https?://"))
	{
		if (link.indexOf('/') == 0)
			link = baseUrl + link.substring(1, link.length);
		else
			link = baseUrl + link;
	}

	return link;
}

function getLinkTarget(link)
{
	var target = '';

	if (link.match(externalLinkRegExp))
	{
		target = ' target="_blank"';
	}

	return target;
}

function hasClass(element, className)
{
	if (element.className)
	{
		if (element.className == className)
			return true;
		else
		{
			var classes = element.className.split(' ');

			for (var a = 0; a < classes.length; a++)
			{
				if (classes[a] == className)
					return true;
			}
		}
	}

	return false;
}

//*******************PHOTO GALLERY FUNCTIONS START*******************
var currentPage = 1; //used for hiding previous row
var aIDs = new Array;

function showImage(link)
{
	var display = link.getAttribute("display");

	if (display == "grid")
	{
		//hide thumbnails and display div
		document.getElementById("thumbnailsTable").style.display = "none";
		document.getElementById("imageDiv").style.display = "";
	}

	//set selected image and info
	document.getElementById("fullImage").src = link.getAttribute("fullpath");
	document.getElementById("fullImage").style.width = link.getAttribute("fullwidth") + "px";
	document.getElementById("fullImage").style.height = link.getAttribute("fullheight") + "px";
	document.getElementById("title").innerHTML = link.getAttribute("title");
	document.getElementById("description").innerHTML = link.getAttribute("description");

	//hide image and info then fade in
	document.getElementById("container").style.display = "none";
	$("#container").fadeIn("slow");

	if (display == "grid")
	{
		//set prev and next links
		var photoid = link.getAttribute("photoid");
		setLink("prev", photoid);
		setLink("next", photoid);
	}
}

function setLink(action, photoid)
{
	var link = action + "Link";
	var newID;

	//cycle through array to find photoid and assign newID
	for (var i = 0; i < aIDs.length; i++)
	{
		if (aIDs[i] == photoid)
		{
			if (action == "prev")
			{
				newID = aIDs[i - 1];

				//set label to photo position
				document.getElementById("curPhotoLabel").innerHTML = i + 1;
			}
			else if (action == "next")
			{
				newID = aIDs[i + 1];
			}
		}
	}

	//set to current id if first or last photo
	if (newID == null)
	{
		newID = photoid;
	}

	//set attributes for link
	var element = $("#link" + newID); //get attributes from thumbnail link
	document.getElementById(link).setAttribute("onclick", "showImage(this); return false;");
	document.getElementById(link).setAttribute("display", element.attr("display"));
	document.getElementById(link).setAttribute("photoid", newID);
	document.getElementById(link).setAttribute("fullpath", element.attr("fullpath"));
	document.getElementById(link).setAttribute("fullwidth", element.attr("fullwidth"));
	document.getElementById(link).setAttribute("fullheight", element.attr("fullheight"));
	document.getElementById(link).setAttribute("title", element.attr("title"));
	document.getElementById(link).setAttribute("description", element.attr("description"));
}

function showRow(link)
{
	var newPage = link.getAttribute("pagenum");
	var prevPage = document.getElementById("prevPage");
	var nextPage = document.getElementById("nextPage");
	var totalPages = link.getAttribute("totalpages");

	//display selected row
	document.getElementById("row" + currentPage).style.display = "none";
	document.getElementById("row" + newPage).style.display = "";
	document.getElementById("thumbnailsTable").style.display = "none"; //hide table before it can fade in
	$("#thumbnailsTable").fadeIn("slow"); //fade in table since row can't fade in

	//update page links
	document.getElementById("pagelink" + currentPage).style.color = "#c7040e";
	document.getElementById("pagelink" + newPage).style.color = "black";

	//show/hide prev/next links
	if (newPage == 1)
		prevPage.style.display = "none";
	else
		prevPage.style.display = "";

	if (newPage == totalPages)
		nextPage.style.display = "none";
	else
		nextPage.style.display = "";

	//set current page to be next hidden when function is called
	currentPage = newPage;

	//display first image in row
	showImage(link);

	//update attributes for prev/next links
	setPageLinks(currentPage)
}

function setPageLinks(currentPage)
{
	currentPage = parseInt(currentPage);
	var prevPage = document.getElementById("prevPage");
	var nextPage = document.getElementById("nextPage");

	//set prev link if shown
	if (prevPage.style.display == "")
		setAttributes(prevPage, currentPage - 1);

	//set next link if shown
	if (nextPage.style.display == "")
		setAttributes(nextPage, currentPage + 1);
}

function setAttributes(link, index)
{
	var element = $("#pagelink" + index); //get attributes from page link

	link.setAttribute("pagenum", element.attr("pagenum"));
	link.setAttribute("fullpath", element.attr("fullpath"));
	link.setAttribute("fullwidth", element.attr("fullwidth"));
	link.setAttribute("fullheight", element.attr("fullheight"));
	link.setAttribute("title", element.attr("title"));
	link.setAttribute("description", element.attr("description"));
}

function showThumbnails(link)
{
	//hide images and navigation
	document.getElementById("thumbnailsTable").style.display = "none"; //must hide before fade in
	document.getElementById("imageDiv").style.display = "none";

	//display thumbnails
	$("#thumbnailsTable").fadeIn("slow");
}
//*******************PHOTO GALLERY FUNCTIONS END*******************

function setTrackingLinks()
{
	//iterate through every anchor tag
	$('a').each(function ()
	{
		//check if link already has an onclick event
		if (!this.onclick)
		{
			var href = this.href;
			var startIndex = href.toLowerCase().indexOf("csbsju.edu/documents/");

			//check if specified string is in href
			if (startIndex != -1)
			{
				//get file path and call tracking function
				var filePath = href.substring(startIndex + 10);
				this.onclick = function () { trackPageView(filePath); };
			}
		}
	});
}

//This helps older versions of Safari deal with empty action attributes.
function resetFMFormAction()
{
	var form = document.getElementById('FMFormTag');

	if (form.action.toLowerCase() != 'https://www.csbsju.edu/forms/submitform.aspx' && location.href.toLowerCase().indexOf('.aspx') > 0)
		form.action = location.href;
}

function trackPageView(page)
{
	_gaq.push(['_trackPageview', page]);
	_gaq.push(['t2._trackPageview', page]);
}

//also located in mobile.js
function SetSiteViewCookie(value)
{
	createCookie("SiteView", value, 365);
}

//This function will execute once the DOM has finished loading.
$(document).ready(function ()
{
	try { resetFMFormAction(); }
	catch (err) { }

	try { createTopNav(); }
	catch (err) { }

	try { resetZIndex(); }
	catch (err) { }

	try { createFlashToggle(); }
	catch (err) { }

	try { setTrackingLinks(); }
	catch (err) { }
}); 
