// Turn off when publishing
var debug = false;

// Base directory for images
var img_basedir = '/Sites/24/Templates/';

// Pages in navigation
var page_arr =  new Array('technology_solutions','marketing_solutions','the_active_edge','our_customers','contact_us','request_more_information');

// STOP EDITING 

// Constructor ID references
var _INIT_SUBNAV		= 0;
var _INIT_TABS			= 1;
var _INIT_HOME			= 2;
var _INIT_SP_A			= 3;
var _INIT_SP_B			= 4;
var _INIT_SP_G			= 5;

// Event references (mozilla and internet explorer)
var e_moz = 'target';
var e_ie = 'srcElement';

// Opera and Safari custom classes
var opsaf = 'opsaf';

// Navigation image arrays
var nav_out_images;
var nav_over_images;

// Custom DOM id reference
var offset = 'offset';

// Location breakdown
var locFile;
var locFileName;
var locAnchor;
var locQueryString;
var locTopParent;
var active_pg;

// current page
var pageTitle;

/**
 * Javascript constructor for all pages. Calls external functions based
 * on input fields. Takes multiple parameters separated by comma.
 *
 * @param 	[]		ID of element constructors to be called
 * @see				"Constructor ID reference"
 */
function constr() {
	
	// determine current location
	initLocation();

	// check if nav exists
	//if (initNavigation('nav_'+page_arr[0])) {
		// nav exists
	//}
	initNavigation2();

	// update breadcrumb
	var objBreadcrumb = ge('header_breadcrumb');
	if (objBreadcrumb != null) {
		// initiate breadcrumb update
		initBreadcrumb(objBreadcrumb);
	}
	// external constructors
	if (arguments.length > 0) {
		for (var i=0; i<arguments.length; i++) {
			arguments[i] == _INIT_SUBNAV ? subnavConstr() : '';
			arguments[i] == _INIT_TABS ? tabsConstr() : '';
			arguments[i] == _INIT_HOME ? homeConstr() : '';
			arguments[i] == _INIT_SP_A ? spaConstr() : '';
			arguments[i] == _INIT_SP_B ? spbConstr() : '';
			arguments[i] == _INIT_SP_G ? spgConstr() : '';
		}
	}
	// detect browser and CSS changes
	initBrowser();
}

/**
 * Detects browser and updates styles for certain elements
 *
 * @return			
 */
function initBrowser() {
	var objUA = navigator.userAgent;
	var updateCSS;
	((objUA.indexOf("Opera")!=-1) || (objUA.indexOf("Safari") != -1)) ? updateCSS = true : updateCSS = false;
	if (updateCSS) { 
		// update styles
		var objHeaderContainer = ge('body_intro_content');
		if (objHeaderContainer) {
			var objImages = objHeaderContainer.getElementsByTagName('img');

			// only update the first image
			if (objImages.length > 0) {
				objImages[0].className = opsaf;
			}
		}
	}
}

/**
 * Breaks down the location of current page for further instructions.
 *
 * @return			True or false
 */
function initLocation() {
	
	var fullURI = location.href;
	var splitURI = fullURI.split('/');
	var lastArr = splitURI.length - 1;
	var requestURI = splitURI[lastArr];
	
	locFile = requestURI;
	locFileName = locFile.split('.')[0];
	
	// if anchored
	var splitReq = requestURI.split('#');
	if (splitReq.length > 1) {
		locFile = splitReq[0];
		locFileName = splitReq[0].split('.')[0];
		locAnchor = splitReq[1];
		if (debug) { alert('File: '+ locFile + '\nAnchor: ' + locAnchor); }
	}
	
	// if querystring
	var splitQuery = splitReq[0].split('?');
	if (splitQuery.length > 1) {
		locFile = splitQuery[0];
		locFileName = splitQuery[0].split('.')[0];
		locQueryString = splitQuery[1];
		if (debug) { alert('File: '+ locFile + '\nAnchor: ' + locAnchor + '\nQueryString: ' + locQueryString); }
	}
	
	// get top parent
	if (splitURI.length > 4) { // http://www.X.com/XXX/test.htm get the next folder
		locTopParent = splitURI[3];
	}
	
	return (locFile != null);
}
/**
 * Modifies the breadcrumb generated by ACM to be more design friendly
 *
 * @param	objBreadcrumb	The element containing the breadcrumb
 * @return					True or false
 */
function initBreadcrumb(objBreadcrumb) {
	var objCurrentPage = objBreadcrumb.getElementsByTagName('H1')[0];
	var arrLinks = objBreadcrumb.getElementsByTagName('A');
	var newContent = '';
	
	for (var i=0; i<arrLinks.length; i++) {
		newContent += '<a href="' + arrLinks[i].href + '" title="' + arrLinks[i].innerHTML + '">' + arrLinks[i].innerHTML + '</a> &gt; ';
	}
	pageTitle = objCurrentPage.innerHTML;

	// update breadcrumb.  NOTE: must be the last line to execute in this function!
	objBreadcrumb.innerHTML = newContent + '<h1>' + objCurrentPage.innerHTML + '</h1>';	
}
/**
 * Preload navigation images and attach event listeners to change
 * the images on hover.
 *
 * @param		testPageName	Page name to test if exists
 * @return						True or false
 */
function initNavigation(testPageName) {

	if (ge(testPageName) != null) {
		// preload navigation images	
		nav_out_images = new Array(page_arr.length);
		nav_over_images = new Array(page_arr.length);
		
		// preload and attach listeners	
		for (var i=0; i<page_arr.length; i++) {
			nav_over_images[i] = new Image();
			nav_over_images[i].src = img_basedir + 'images/nav/' + page_arr[i] + '_hover.gif';
			nav_out_images[i] = new Image();
			nav_out_images[i].src = img_basedir + 'images/nav/' + page_arr[i] + '.gif';
			ge('nav_'+page_arr[i]).setAttribute(offset, i);
			
			if (window.addEventListener) { //mozilla
				// check if it's a sub page
				if (!inDirectory(page_arr[i])) {
					ge('nav_'+page_arr[i]).addEventListener('mouseover', navOver, false);
					ge('nav_'+page_arr[i]).addEventListener('mouseout', navOut, false);
				}
				else {
					ge('nav_'+page_arr[i]).src = img_basedir + 'images/nav/' + page_arr[i] + '_active.gif';
				}
			}
			else {
				if (!inDirectory(page_arr[i])) {
					ge('nav_'+page_arr[i]).attachEvent('onmouseover', navOver);
					ge('nav_'+page_arr[i]).attachEvent('onmouseout', navOut);
				}
				else {
					ge('nav_'+page_arr[i]).src = img_basedir + 'images/nav/' + page_arr[i] + '_active.gif';
				}
			}
		}
		return (page_arr.length > 0);
	}
	else {
		return false;
	}
}
/**
 * Used for the _new_ top navigation menu that's mostly CSS-based.  This function sets a classname to the body element, so that the appropriate link in the nav menu is highlighted.
 *
 */
function initNavigation2() {
	
	var i;
	var bodyElement = document.getElementsByTagName("body")[0];
	
	for (i=0; i<page_arr.length; i++) {
		if (inDirectory(page_arr[i])) {
			bodyElement.className = page_arr[i];
			break;
		}
	}
}
/**
 * Checks to see if page is within the current section of the website
 *
 * @param	testName	ID of the page to be tested against the top parent
 * @return				True or false
 */
function inDirectory(testName) {
	var testPage = testName.replace(/_/ig, '-');
	return ((testPage == locTopParent) || (testPage == locFileName));
}

/**
 * Shortened version of document.getElementById
 *
 * @param	eid			Element ID
 * @return				Object reference
 */
function ge(eid) {
	return document.getElementById(eid);
}

/**
 * Event listener for moving a mouse over a navigation element
 *
 * @param	e			Event object
 */
function navOver(e) {
	// if mozilla use getAttribute, else use array
	e[e_moz] ? e[e_moz].src = nav_over_images[e[e_moz].getAttribute(offset)].src : e[e_ie].src = nav_over_images[e[e_ie][offset]].src;
}
/**
 * Event listener for moving a mouse off of a navigation element
 *
 * @param	e			Event object
 */
function navOut(e) {
	// if mozilla use getAttribute, else use array
	e[e_moz] ? e[e_moz].src = nav_out_images[e[e_moz].getAttribute(offset)].src : e[e_ie].src = nav_out_images[e[e_ie][offset]].src;
}