var t5sitebase = function() {
	var isTouchOnlyDevice = ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)) || ('ontouchstart' in window));
	var isMenuHidden;
	var objXMLHttp;
	var objSocialMediaItems;
	var objSocialMediaOpened;
	var objSearchList;
	var objSearchItemSelected;
	var objSearchItemFooter;
	var objSearchWatermark;
	var objSearchInput;
	var objSearchIcon;
	var objSearchTimer;
	var objSearchCurrent;
	var objSearchRunning;
	var objSearchShowing;
	var objShareLookup;
	var joinSpanUp;
	var joinSpanDown;
	var shareSpanUp;
	var shareSpanDown;
	var menuAdList;
	var objMenuAdContainer;var currentMenuAdIx;
	var objCurrentMenuAd;
	var objLastMenuAd;
	var animMenuAdChange;
	var animMenuAdFade;
	var animMenuAdStartTime;
	var animMenuAdEndTime;
	var objAdNames;
	var objHost;
	
	function onSocialMediaMouseOver() {
		var img = this.getElementsByTagName('img');
		if (img.length == 2) {
			img[1].style.display = 'inline';
		}
	}

	function onSocialMediaMouseOut() {
		var img = this.getElementsByTagName('img');
		if (img.length == 2) {
			img[1].style.display = 'none';
		}
	}
	
	function onSocialMediaClick() {
		try {
			var joinImg = this.getElementsByTagName('img')[0];
			document.getElementById('socialmediaiconid').src = joinImg.src.replace('-stencil.png','-large-icon.png');
			var shareInfo = objShareLookup[this.id].split('|');
			var elem = document.getElementById('socialmediaheaderid');
			var joinButton = document.getElementById('socialmediajoinid');
			var joinSpans = joinButton.getElementsByTagName('span');
			var shareButton = document.getElementById('socialmediashareid');
			var shareSpans = shareButton.getElementsByTagName('span');
			elem.innerHTML = shareInfo[1];
			joinSpans[1].innerHTML = '&raquo; ' + shareInfo[2];
			joinSpans[3].innerHTML = '&raquo; ' + shareInfo[2];
			elem = document.getElementById('socialmediajoinhelpid');
			elem.style.display = 'none';
			elem.innerHTML = shareInfo[3]; 
			joinButton.href = shareInfo[4];
			joinButton.onclick = doNavigateToLink;
			shareSpans[1].innerHTML = '&raquo; ' + shareInfo[5];
			shareSpans[3].innerHTML = '&raquo; ' + shareInfo[5];
			elem = document.getElementById('socialmediasharehelpid');
			elem.style.display = 'none';
			elem.innerHTML = shareInfo[6]; 
			shareButton.href = shareInfo[7] + location.href;
			shareButton.onclick = doNavigateToLink;
			document.getElementById('socialmediadialogid').style.display = 'inline';
			document.getElementById('backgrounddisableid').style.display = 'inline';
 			if (!objSocialMediaOpened) {
				document.getElementById('socialmediacloseid').onclick = onSocialMediaCloseClick;
				joinSpanUp = joinSpans[0];
				joinSpanDown = joinSpans[2];
				shareSpanUp = shareSpans[0];
				shareSpanDown = shareSpans[2];
				if (!isTouchOnlyDevice) {
					joinButton.onmouseover = onSocialMediaJoinMouseOver;
					joinButton.onmouseout = onSocialMediaJoinMouseOut;
					shareButton.onmouseover = onSocialMediaShareMouseOver;
					shareButton.onmouseout = onSocialMediaShareMouseOut;
				}
				objSocialMediaOpened = true;
			}
			return false;
		} catch (ex) { }
	}

	function onSocialMediaCloseClick() {
		document.getElementById('socialmediadialogid').style.display = 'none';
		document.getElementById('backgrounddisableid').style.display = 'none';
		return false;
	}

	function onSocialMediaJoinMouseOver() {
		document.getElementById('socialmediajoinhelpid').style.display = 'inline';
		document.getElementById('socialmediasharehelpid').style.display = 'none';
		joinSpanDown.style.display = 'inline';
		joinSpanUp.style.display = 'none';
	}

	function onSocialMediaJoinMouseOut() {
		document.getElementById('socialmediajoinhelpid').style.display = 'none';
		joinSpanUp.style.display = 'inline';
		joinSpanDown.style.display = 'none';
	}

	function onSocialMediaShareMouseOver() {
		document.getElementById('socialmediasharehelpid').style.display = 'inline';
		document.getElementById('socialmediajoinhelpid').style.display = 'none';
		shareSpanDown.style.display = 'inline';
		shareSpanUp.style.display = 'none';
	}

	function onSocialMediaShareMouseOut() {
		document.getElementById('socialmediasharehelpid').style.display = 'none';
		shareSpanUp.style.display = 'inline';
		shareSpanDown.style.display = 'none';
	}

	function onSearchInputFocus() {
		objSearchWatermark.style.display = 'none';
		objSearchInput.className = '';
		if (objSearchShowing) {
			objSearchList.style.display = 'inline';
		}
	}
	
	function onSearchInputLostFocus() {
		objSearchHide = setTimeout(onSearchInputLostFocusAction, 250);
	}
	
	function onSearchInputLostFocusAction() {
		objSearchList.style.display = 'none';
		objSearchInput.className = 'muted';
		if (objSearchInput.value.replace(/^\s+|\s+$/g,'') == '') {
			objSearchWatermark.style.display = 'inline';
		}
	}
	
	function onSearchInputSpecialKey(e) {
		e = e || window.event;
		if (e && e.keyCode == 13) {  // enter
			if (objSearchShowing && objSearchItemSelected) {
				onSearchClick(objSearchItemSelected);
			}
			return;
		} else if (e && e.keyCode == 27) {  // esc
			onSearchListHighlight();
			if (objSearchShowing) {
				objSearchList.style.display = 'none';
				objSearchShowing = false;
				return false;
			}
			return;
		} else if (e && e.keyCode == 38) {  // up
			onSearchListHighlight(-1);
		} else if (e && e.keyCode == 40) {  // down
			onSearchListHighlight(1);
		}
	}

	function onSearchInputChange(e) {
		e = e || window.event;
		objSearchCurrent = (objSearchInput.value + String.fromCharCode(e.charCode ? e.charCode : e.keyCode)).replace(/^\s+|\s+$/g,'');
		if (e && e.keyCode == 13) {
			onSearchClick();
		} else {
			if (objSearchTimer) {
				clearTimeout(objSearchTimer);
			}
			objSearchTimer = setTimeout(onSearch, 250);
		}
	}
	
	function onSearchListHighlight(dir) {
		if (objSearchItemSelected) {
			objSearchItemSelected.className = objSearchItemSelected.className.replace(' searchlistitemselect', '');
		}
		if (dir) {
			var listItems = objSearchList.getElementsByTagName('a');
			var oldSelection = objSearchItemSelected;
			var newSelection;
			if (oldSelection) {
				for (var i = 0; i < listItems.length; i++) {
					if (listItems[i] == oldSelection) {
						if (dir == -1) {
							if (i != 0) {
								newSelection = listItems[i - 1];
							}
							break;
						} else if (dir == 1) {
							if (listItems[i + 1] != objSearchItemFooter) {
								newSelection = listItems[i + 1];
							}
							break;
						}
					}
				}
			}
			if (!newSelection) {
				for (var i = 0; i < listItems.length; i++) {
					if (dir == -1 && i > 0 && listItems[i] == objSearchItemFooter) {
						newSelection = listItems[i - 1];
						break;
					} else if (dir == 1) {
						newSelection = listItems[i];
						break;
					}
				}
			}			
			if (newSelection) {
				newSelection.className += ' searchlistitemselect';
				objSearchItemSelected = newSelection;
				objSearchList.style.display = 'inline';
				objSearchShowing = true;
			}
		}
	}
	
	function onSearch() {
		try {
			if (objSearchCurrent != objSearchRunning) {
				if (!objXMLHttp) {
					if (typeof XMLHttpRequest) {
						objXMLHttp = new XMLHttpRequest();
					} else if (window.ActiveXObject) {
						objXMLHttp = new ActiveXObject('Microsoft.XMLHTTP')
					}
				}
				if (objSearchCurrent) {
					try {
						objXMLHttp.abort();
					} catch (ex) { }
				}
				objSearchRunning = objSearchCurrent;
				if (objSearchRunning != '') {
					objSearchIcon.style.cursor = 'pointer';
					objXMLHttp.open('GET', '/api/search-suggest?q='+escape(objSearchRunning), true);
					objXMLHttp.onreadystatechange = onSearchResults;
					objXMLHttp.send();
				} else {
					objSearchIcon.style.cursor = 'auto';
					objSearchList.style.display = 'none';
					objSearchShowing = false;
				}
			}
		} catch (ex) { }		
	}
	
	function onSearchResults() {
		try {
			if (objXMLHttp.readyState == 4) {
				if (objXMLHttp.status == 200) {
					var res = eval(objXMLHttp.responseText);
					if (res[0] == "searchsuggest") {
						if (res[1] == objSearchRunning) {
							while (objSearchList.firstChild != objSearchItemFooter) {
								objSearchList.removeChild(objSearchList.firstChild);
							}
							if (res[2].length > 0) {
								for (var i = 0; i < res[2].length; i++) {
									var searchLink = document.createElement('a');
									searchLink.className = 'searchlistitem';
									searchLink.href = res[2][i][1];
									searchLink.onclick = onSearchItemClick;
									searchLink.innerHTML = '<b>' + res[2][i][0] + '</b><br />' + res[2][i][2];
									objSearchList.insertBefore(searchLink, objSearchItemFooter);
								}
								objSearchList.style.display = 'inline';
								objSearchShowing = true;
							} else {
								objSearchList.style.display = 'none';
								objSearchShowing = false;
							}
							objSearchItemSelected = undefined;
						}
					}
				}
			}
		} catch (ex) { }
	}
	
	function onSearchItemClick() {
		onEventTrack('Search', 'Query - '+escape(objSearchCurrent), normalizePath(this.href));
		return doNavigateToLink(this);
	}
	
	function onSearchClick(searchObject) {
		if (objSearchCurrent) {
			if (searchObject && searchObject.href) {
				doNavigateToLink(searchObject);
			} else {
				if (objSearchCurrent != '') {
					location.assign(objHost + '/search?q=' + escape(objSearchCurrent));
				}
			}
		}
	}
	
	function doGetT5CookieValue(name) {
		var t5cookie = doGetT5Cookie();
		var nameEqual = name + '=';
		for (var i = 0; i < t5cookie.length; i++) {
			if (t5cookie[i].indexOf(nameEqual) == 0) {
				return unescape(t5cookie[i].substring(nameEqual.length, t5cookie[i].length));
			}
		}
		return '';
	}
	
	function doSetT5CookieValue(name, value) {
		var t5cookie = doGetT5Cookie();
		var nameEqual = name + '=';
		var found = false;
		for (var i = 0; i < t5cookie.length; i++) {
			if (t5cookie[i].indexOf(nameEqual) == 0) {
				t5cookie[i] = nameEqual + escape(value.toString());
				found = true;
				break;
			}
		}
		if (!found) {
			t5cookie.push(nameEqual + escape(value.toString()));
		}
		document.cookie = 'TripleFiveSite=' + t5cookie.join('&') + '; path=/';
	}
	
	function doGetT5Cookie() {
		var dCookie = document.cookie.split(';');
		for (var i = 0; i < dCookie.length; i++) {
			var cookiePart = dCookie[i];
			while (cookiePart.charAt(0)==' ') {
				cookiePart = cookiePart.substring(1);
			}
			if (cookiePart.indexOf('TripleFiveSite=') == 0) {
				return cookiePart.substring(15).split('&');
			}
		}
		return new Array();
	}

	function changeRenderTo(renderTo) {
		if (renderTo) {  //||location.href.match(/render=/))
			var newHash=location.hash;
			var newSearch=location.search;
			if (renderTo||doGetT5CookieValue('render')!='') {
				newHash=newHash.replace(/render=[^&]*/,'').replace(/render=.*/,'');
				newSearch=newSearch.replace(/render=[^&]*/,'').replace(/render=.*/,'');
			}
			if (newHash.length>0&&newHash.substr(newHash.length-1)=='?') { newHash=newHash.substr(0,newHash.length-1);}
			if (renderTo) { newSearch+=(newSearch==''?'?':'&')+'render='+renderTo; }
			if (newSearch=='?') { newSearch=''; }
			var newHref=location.protocol+'//'+location.host+location.pathname+newSearch+newHash;
			if (location.href != newHref) { location.replace(newHref); }
		}
	}
	
	function normalizeHash() {
		if (location.hash&&location.hash.length>1&&location.hash.substr(0,2)=='#/') {
			var newHash=location.hash;
			if (newHash.length>0) { newHash=newHash.substr(1); }
			var newSearch=location.search;
			var ix=location.hash.indexOf('?');
			if (ix!=-1) {
				if(ix<newHash.length-1) { newSearch=(newSearch==''?'?':newSearch)+newHash.substr(ix+1) }
				newHash=newHash.substr(0,ix);
			}
			var newHref=location.protocol+'//'+(location.host+location.pathname+newSearch+newHash).replace('//','/');
			if (location.href != newHref) { location.replace(newHref); }
		}
	}
	
	function normalizePath(path) {
		if (path.indexOf(objHost)==0) {
			return path.substr(objHost.length);
		}
		return path;
	}
	
	function doNavigateToLink(inlink) {
		var link=(inlink && inlink.href ? inlink : this);
		if (link.id && link.id.match(/adid\d*/)) {
			onEventTrack('Ads', 'AdClick - '+objAdNames[link.id.replace(/adid/g,'')].name, normalizePath(location.pathname));
		}
		if (link.href.substr(0,5) == "/pdf/") {
			onEventTrack('Internal Link', 'Open - '+link.href, normalizePath(location.pathname));
		} else if (link.href.substr(0,4) == "http" && link.href.indexOf(objHost)!=0) {
			var extLink = link.href.replace(/^(http[s]?:\/\/)([^\/]*)(\/.*)?$/, '$2');
			onEventTrack('External Link', 'Open - '+extLink, normalizePath(location.pathname));
		}
		var ref = (link.href).toString();
		_gaq.push(function() { location.href = ref; });
		return false;
	}
	
	function checkMenuAd() {
		objMenuAdContainer = document.getElementById('menuadimagesid');
		if (objMenuAdContainer) {
			menuAdList = new Array();
			var ads = objMenuAdContainer.getElementsByTagName('li');
			if (ads.length == 1) {
				ads[0].style.display = 'inline';
				registerAdView(ads[0]);
			} else if (ads.length > 1) {
				if (!isTouchOnlyDevice) {
					objMenuAdContainer.onmouseover = onMenuAdMouseOver;
					objMenuAdContainer.onmouseout = onMenuAdMouseOut;
				}
				for (var ix = 0; ix < ads.length; ix++) {
					menuAdList.push(ads[ix]);
				}
				for (var ix = ads.length - 1; ix > 0; ix--) {
					objMenuAdContainer.removeChild(ads[ix]);
				}
				currentMenuAdIx = 0;
				objCurrentMenuAd = menuAdList[0];
				objCurrentMenuAd.style.display = 'inline';
				animMenuAdChange = setInterval(animateMenuAdChange, 7000);  // animate every 7 seconds
			}
		}
	}
	
	function animateMenuAdChange() {
		objLastMenuAd = objCurrentMenuAd;
		currentMenuAdIx++;
		if (currentMenuAdIx >= menuAdList.length) {
			currentMenuAdIx = 0;
		}
		objCurrentMenuAd = menuAdList[currentMenuAdIx];
		objLastMenuAd.style.opacity = 1;
		objLastMenuAd.style.MozOpacity = 1;
		objLastMenuAd.style.filter = 'alpha(opacity=100)';
		objLastMenuAd.style.display = 'inline';
		objCurrentMenuAd.style.opacity = 0;
		objCurrentMenuAd.style.MozOpacity = 0;
		objCurrentMenuAd.style.filter = 'alpha(opacity=0)';
		objCurrentMenuAd.style.display = 'inline';
		objMenuAdContainer.appendChild(objCurrentMenuAd);
		animMenuAdStartTime = new Date();
		animMenuAdEndTime = new Date(animMenuAdStartTime.getTime() + 1000); // Fade over 1 second.
		animMenuAdFade = setInterval(animateMenuAdFade, 10); // animate every 10 ms
	}
	
	function animateMenuAdFade() {
		var d = new Date();
		if (d >= animMenuAdEndTime) {
			clearInterval(animMenuAdFade);
			animMenuAdFade = null;
			objLastMenuAd.style.display = 'none';
			objLastMenuAd.style.opacity = null;
			objLastMenuAd.style.MozOpacity = null;
			objLastMenuAd.style.filter = null;
			objCurrentMenuAd.style.opacity = null;
			objCurrentMenuAd.style.MozOpacity = null;
			objCurrentMenuAd.style.filter = null;
			objMenuAdContainer.removeChild(objLastMenuAd);
			registerAdView(objCurrentMenuAd);
		} else {
			var alphaChange = ((d - animMenuAdStartTime) / (animMenuAdEndTime - animMenuAdStartTime));
			objLastMenuAd.style.opacity = 1 - alphaChange;
			objLastMenuAd.style.MozOpacity = 1 - alphaChange;
			objLastMenuAd.style.filter = 'alpha(opacity=' + ((1 - alphaChange) * 100) + ')';
			objCurrentMenuAd.style.opacity = alphaChange;
			objCurrentMenuAd.style.MozOpacity = alphaChange;
			objCurrentMenuAd.style.filter = 'alpha(opacity=' + (alphaChange * 100) + ')';
		}
	}
	
	function registerAdView(menuAd) {
		var link = menuAd.getElementsByTagName('a');
		if (link && link.length > 0 && link[0].id) {
			var objAdId = objAdNames[link[0].id.replace(/adid/g,'')];
			if (!objAdId.viewed) {
				objAdId.viewed = true;
				onEventTrack('Ads', 'AdView - '+objAdId.name, location.pathname);
			}
		}
	}
	
	function onMenuAdMouseOver(e) {
		if (animMenuAdChange) {
			clearInterval(animMenuAdChange);
		}
	}
	
	function onMenuAdMouseOut() {
		animMenuAdChange = setInterval(animateMenuAdChange, 7000);  // animate every 7 seconds
	}
	
	function onPageLoad() {
		changeRenderTo();
		normalizeHash();
		
		objHost = location.protocol+'//'+location.host;
		
		var objSocialMediaList = document.getElementById('socialmedialistid');
		if (objSocialMediaList) {
			objSocialMediaItems = objSocialMediaList.getElementsByTagName('li');
			for(var i = 0; i < objSocialMediaItems.length; i++) {
				var shareSpan = objSocialMediaItems[i].getElementsByTagName('span');
				if (shareSpan.length == 1) {
					if (!objShareLookup) {
						objShareLookup = new Object();
					}
					var socialshareid = 'socialshareid' + i;
					objShareLookup[socialshareid] = shareSpan[0].innerHTML;
					objSocialMediaItems[i].getElementsByTagName('a')[0].id = socialshareid
					objSocialMediaItems[i].getElementsByTagName('a')[0].onclick = onSocialMediaClick;
				}
				if (!isTouchOnlyDevice) {
					var img = objSocialMediaItems[i].getElementsByTagName('img');
					var elem = document.createElement('img');
					elem.className = 'socialmediacoloricon';
					elem.src = img[0].src.replace('-stencil.png','-icon.png');
					elem.alt = img[0].alt;
					objSocialMediaItems[i].getElementsByTagName('a')[0].appendChild(elem);
					objSocialMediaItems[i].onmouseover = onSocialMediaMouseOver;
					objSocialMediaItems[i].onmouseout = onSocialMediaMouseOut;
				}
			}
		}
		
		objSearchList = document.getElementById('searchlistid');
		if (objSearchList) {
			objSearchItemFooter = objSearchList.getElementsByTagName('a')[0];
			var objSearchBox = document.getElementById('searchboxid');
			if (objSearchBox && objSearchItemFooter) {
				objSearchWatermark = document.getElementById('searchboxwatermarkid');
				objSearchInput = document.getElementById('searchboxtextid');
				objSearchIcon = document.getElementById('searchboxiconid');
				if (objSearchInput && objSearchWatermark && objSearchIcon) {
					objSearchInput.onkeydown = onSearchInputSpecialKey;
					objSearchInput.onkeypress = onSearchInputChange;
					objSearchInput.onblur = onSearchInputLostFocus;
					objSearchInput.onfocus = onSearchInputFocus;
					objSearchInput.blur();
					objSearchInput.value = '';
					objSearchIcon.onclick = onSearchClick;
					objSearchItemFooter.onclick = onSearchClick;
				}
			}
		}
		
		checkMenuAd();
		
		var links = document.getElementsByTagName('a');
		var thissite=location.protocol+'//'+location.hostname;
		if (links) {
			for (var i=0;i<links.length;i++) {
				var linkhref=links[i].href.replace(thissite,'');
				if (linkhref && !(links[i].onclick) && (linkhref.substr(0,4)=='http' || linkhref.substr(0,5)=='/pdf/' || (links[i].id && links[i].id.match(/adid\d*/)))) {
					links[i].onclick = doNavigateToLink;
				}
			}
		}
	}
	
	return {
		automaticOnLoad : function() {
			var origOnLoad = window.onload;
			if (typeof origOnLoad != 'function') {
				window.onload = function() { onPageLoad(); };
			} else {
				window.onload = function() { origOnLoad(); onPageLoad(); };
			}
		},
		getIsMenuHidden : function() {
			return (isMenuHidden == true);
		},
		setIsMenuHidden : function(isHidden) {
			isMenuHidden = (isHidden == true);
		},
		getIsTouchOnlyDevice : function() {
			return isTouchOnlyDevice;
		},
		getT5CookieValue : function (name) {
			return doGetT5CookieValue(name);
		},
		setT5CookieValue : function (name, value) {
			doSetT5CookieValue(name, value);
		},
		navigateToLink : function (link) {
			return doNavigateToLink(link);
		},
		setAdName : function (adId, adName) {
			if (!objAdNames) {
				objAdNames = new Object();
			}
			var objAdId = new Object();
			objAdId.name = adName;
			objAdNames[adId] = objAdId;
		}
	}
}();
t5sitebase.automaticOnLoad();

