var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
		//Flag dusty browsers...
		if( ((this.browser == 'Explorer') & (this.version < '7')) ) {
			//workaround for IE7 incorrectly identifying itself as IE6
			if(!window["XMLHttpRequest"]) if(!ManageCookies.Get('esd_browser_alert')) BrowserDetect.ShowAlert();
		} else if( (this.browser == 'Netscape') || (this.browser == 'Mozilla') ) {
			if(!ManageCookies.Get('esd_browser_alert')) BrowserDetect.ShowAlert();
		}
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{	// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 	// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	],
	ShowAlert: function() {
		//Set Browser and Version
		var browserOffender = 'You are using ' + BrowserDetect.browser + ' ' + BrowserDetect.version;
		$('browser_alert_offender').update(browserOffender);
		$('browser_alert_close').observe('click',BrowserDetect.HideAlert);
		Effect.BlindDown('browser_alert');
	},
	HideAlert: function() {
		ManageCookies.Set('esd_browser_alert','ignored','','/','','');
		Effect.Puff('browser_alert');
		return false;
	}
};

var ManageCookies = {
	Set: function(name,value,expires,path,domain,secure) {
		// set time, it's in milliseconds
		var today = new Date();
		today.setTime( today.getTime() );
		
		/*
		if the expires variable is set, make the correct 
		expires time, the current script below will set 
		it for x number of days, to make it for hours, 
		delete * 24, for minutes, delete * 60 * 24
		*/
		if ( expires )
		{
		expires = expires * 1000 * 60 * 60 * 24;
		}
		var expires_date = new Date( today.getTime() + (expires) );
		
		document.cookie = name + "=" +escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
		( ( path ) ? ";path=" + path : "" ) + 
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
	},
	Get: function(check_name) {
		// first we'll split this cookie up into name/value pairs
		// note: document.cookie only returns name=value, not the other components
		var a_all_cookies = document.cookie.split( ';' );
		var a_temp_cookie = '';
		var cookie_name = '';
		var cookie_value = '';
		var b_cookie_found = false; // set boolean t/f default f
		
		for ( i = 0; i < a_all_cookies.length; i++ )
		{
			// now we'll split apart each name=value pair
			a_temp_cookie = a_all_cookies[i].split( '=' );
			
			
			// and trim left/right whitespace while we're at it
			cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
		
			// if the extracted name matches passed check_name
			if ( cookie_name == check_name )
			{
				b_cookie_found = true;
				// we need to handle case where cookie has no value but exists (no = sign, that is):
				if ( a_temp_cookie.length > 1 )
				{
					cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
				}
				// note that in cases where cookie is initialized but no value, null is returned
				return cookie_value;
				break;
			}
			a_temp_cookie = null;
			cookie_name = '';
		}
		if (!b_cookie_found) {
			return null;
		}
	}
}

var homepageIntro = {
	Timer: '',
	init: function(){
		if ($('tpl_intro')) {
			// add event listener's to tabs
			var introTabs = $('tpl_intro_tabs').getElementsBySelector('a');
			for (var i=0;i<introTabs.length;i++) {
				Event.observe(introTabs[i],'mouseover',homepageIntro.revealTab);
			}
			// add event listener's to headlines
			var introItems = $$('li.tpl_intro_item');
			for (var i=0;i<introItems.length;i++) {
				Event.observe(introItems[i],'mouseover',homepageIntro.reveal);
				if(i==0) {
					introItems[i].addClassName('active');
					introItems[i].down(1).appear();
				}
			}
			// start auto timer
			homepageIntro.Timer = setTimeout("homepageIntro.revealTimer()",5000);
		}
	},
	reveal: function(introItem) {
		// set target
		if(this.className) var revealTarget = this;
		else var revealTarget = introItem;
		// halt existing timer
		clearTimeout(homepageIntro.Timer);
		// intro items
		var introItems = $$('li.tpl_intro_item');
		// hide all
		for (var i=0;i<introItems.length;i++) {
			if(revealTarget!=introItems[i]) {
				introItems[i].down(1).hide();
				introItems[i].removeClassName('active');
			}
		}
		// show target
		if(!revealTarget.hasClassName('active')) {
			revealTarget.addClassName('active');
			revealTarget.down(1).appear();
		}
		// start auto timer again if not a manual rollover
		if(!this.className) homepageIntro.Timer = setTimeout("homepageIntro.revealTimer()",5000);
	},
	revealTimer: function() {
		var introItems = $$('li.tpl_intro_item');
		for (var i=0;i<introItems.length;i++) {
			if(introItems[i].hasClassName('active')) {
				if(i != (introItems.length - 1)) var newTarget = introItems[i+1];
				else var newTarget = introItems[0];
			}
		}
		//reveal next
		homepageIntro.reveal(newTarget);
	},
	revealTab: function(introItem) {
		// set target
		//if(this.className) var revealTarget = this;
		//else var revealTarget = introItem;
		var revealTarget = this;
		// skip logic if tab is already active
		if(!this.hasClassName('active')) {
			// halt existing timer
			clearTimeout(homepageIntro.Timer);
			// normalize all tabs
			var introTabs = $('tpl_intro_tabs').getElementsBySelector('a');
			for (var i=0;i<introTabs.length;i++) {
				introTabs[i].removeClassName('active');
			}
			//get target name
			var revealTargetItemName = this.className.replace(/tpl_intro_tab_/,'tpl_intro_item_');
			// highlight target tab
			revealTarget.addClassName('active');
			// all target level items
			var targetItems = $('tpl_intro_items_wrapper').immediateDescendants();
			// hide all target level items
			for (var i=0;i<targetItems.length;i++) targetItems[i].hide();
			// reveal target content
			$(revealTargetItemName).appear();
			// restart news item timer if necessary
			if(revealTargetItemName == 'tpl_intro_item_lne') homepageIntro.Timer = setTimeout("homepageIntro.revealTimer()",5000);
		}
	}
}

var staffRoster = {
	loader: '<img src="http://esd.lbl.gov/templates/site/img/ajax-loader.gif" width="100" height="100" alt="Please wait... the content is loading." style="margin: 0 auto;" />',
	filters: '',
	init: function() {
		// only initialize where needed
		if($('tpl_staffRoster')) {
			staffRoster.filters = $('tpl_staffRoster').down(0).title;
			staffRoster.loadData();
		}
	},
	loadData: function() {
		new Ajax.Request('http://esd.lbl.gov/templates/site/ajax/controllers/staffRoster.php', {
			method:'post',
			parameters:staffRoster.filters,
			onSuccess: function(t){
				//var json = t.responseText.evalJSON(true);
				$('tpl_staffRoster').update(t.responseText);
				//alert(transport.responseText);
			 }
		});
	},
	filterData: function() {
		staffRoster.filters = $('tpl_staffRoster_filterMenu').serialize(true);
		$('tpl_staffRoster').update(staffRoster.loader);
		staffRoster.loadData();
	}
}

document.observe('dom:loaded', function () {
	BrowserDetect.init();
	homepageIntro.init();
	staffRoster.init();
	if($('gMap')) { 
		gMapsXtend.init();
		document.observe('dom:unloaded', function () {
			GUnload();
		});
	}
});