// 7/31/2008: M. KEENAN, FERAL EYE
// Added references to Alumni Navigation.
//
// Assign Global Variables

var urlhash = location.href;
var initializeaccordion = true;
var img_low;
var img_high;
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";
	},
	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.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"
		},
		{	// 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"
		}
	]

};
BrowserDetect.init();

// Toggle features // Featured content on a page (Areas of Interest)
function toggleFeature(feature) {
	$S('.features .feature').each(function(element){
		element.className = element.className.replace('show','');
		$('toggle_'+element.id).className = $('toggle_'+element.id).className.replace('selected','');
	});
	$('feature'+feature).className += ' show';
	$('toggle_feature'+feature).className += ' selected';
}

// Clear text field default value
// Original script: http://www.scriptygoddess.com/archives/2005/11/15/clear-default-text-onclick-restore-if-nothing-entered/
function clickclear(thisfield, defaulttext) {
		if (thisfield.value == defaulttext) {
		thisfield.value = "";
	}
}


// Recall text field default value
// Original script: http://www.scriptygoddess.com/archives/2005/11/15/clear-default-text-onclick-restore-if-nothing-entered/
function clickrecall(thisfield, defaulttext) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
	}
}

// Define Menu Effects using Scriptaculous
function openMainMenu() {
	if ((BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 7) || (BrowserDetect.browser == "Opera")) {
		$('breadcrumbs').style.display = 'none';
		$('mainmenu').style.display = 'block';
	} else {
		Effect.Fade('breadcrumbs', {duration: 1});
		Effect.BlindDown('mainmenu', {duration: 1});
		Effect.Appear('mainmenu', {duration: 1});
	}
	rvwPingElement();
}

function closeMainMenu() {
	if ((BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 7) || (BrowserDetect.browser == "Opera")) {
		$('mainmenu').style.display = 'none';
		$('breadcrumbs').style.display = 'block';
	} else {
		Effect.Appear('breadcrumbs', {duration: 1});
		Effect.Fade('mainmenu', {duration: 1});
		Effect.BlindUp('mainmenu', {duration: 1});
	}
	rvwPingElement();
}

// Alumni Navigation Bar
function openAlumniMenu() {
        if ((BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 7) || (BrowserDetect.browser == "Opera")) {
                $('alumcrumbs').style.display = 'none';
                $('alumnimenu').style.display = 'block';
        } else {
                Effect.Fade('alumcrumbs', {duration: 1});
                Effect.BlindDown('alumnimenu', {duration: 1});
                Effect.Appear('alumnimenu', {duration: 1});
        }
        rvwPingElement();
}
function closeAlumniMenu() {
        if ((BrowserDetect.browser == "Explorer" && BrowserDetect.version <= 7) || (BrowserDetect.browser == "Opera")) {
                $('alumnimenu').style.display = 'none';
                $('alumcrumbs').style.display = 'block';
        } else {
                Effect.Appear('alumcrumbs', {duration: 1});
                Effect.Fade('alumnimenu', {duration: 1});
                Effect.BlindUp('alumnimenu', {duration: 1});
        }
        rvwPingElement();
}



// Find Next & Previous Siblings in the DOM (avoiding whitespace text nodes)
function realPreviousSibling(element){
	if (element.previousSibling) {
		var node=element.previousSibling;
		while(node.nodeType!=1 && node!=''){
				node=node.previousSibling;
				//alert(node);
				if (!node) {
					node = '';
					//return false;
				}
		}
	} else {
		node = '';
	}
	return node;
}

function realNextSibling(element){
	if (element.nextSibling) {
		var node=element.nextSibling;
		while(node.nodeType!=1 && node!=''){
				node=node.nextSibling;
				//alert(node);
				if (!node) {
					node = '';
					//return false;
				}
		}
	} else {
		node = '';
	}
	return node;
}


// Find First Sibling Element
function rvwFirstElement(selector) {
	$S(selector).action ({
		initialize: function(){
			if (!realPreviousSibling(this)) this.className += 'first';
		}
	});
}


// "Dirify" - Replace spaces with "_", make everything lowercase and remove certain characters
// Author: Joshua Rudd, joshua@rearviewWindow.com
function rvwDirify(string) {
	var tstring = "";
	// make the string lowercase
	string = '' + string.toLowerCase();
	splitstring = string.split(" ");
	for(i = 0; i < splitstring.length; i++) tstring += splitstring[i]+"_";
	// remove first "_" from string
	tstring = tstring.substring(0,tstring.length-1);
	tstring = tstring.replace('&amp;_',"");
	tstring = tstring.replace('/',"-");
	tstring = tstring.replace('\'',"");
	return tstring;
}


// Add related class to cetain link types
// Author: Joshua Rudd, joshua@rearviewWindow.com
function rvwAddEmailClass() {
	$S('.col1 a','.col_directory a').each(function(element){
		//pdfurl = element.getAttribute("href");
		//if (pdfurl && pdfurl.substring(pdfurl.length-3) == "pdf") element.className += " pdf";
		hrefvalue = element.getAttribute("href");
		if (hrefvalue && hrefvalue.substring(0,7) == "mailto:") element.className += " email";
		// If link points to another website, open it in a new window
		//if (hrefvalue && hrefvalue.substring(0,4) == 'http') {
		//	var popup = true;
		//	if (hrefvalue.substring(0,23) == 'http://law.stanford.edu') popup = false;
		//	if (hrefvalue.substring(0,27) == 'http://www.law.stanford.edu') popup = false;
		//	if (hrefvalue.substring(0,29) == 'http://law-stage.stanford.edu') popup = false;
		//	if (hrefvalue.substring(0,26) == 'https://juris.stanford.edu') popup = false;
		//	if (popup) element.target = '_blank';
		//}
	});
}


// Add word-break after '@' so long email addresses won't break the layout
function rvwWrapEmail() {
	$S('.col1 .email','.col_directory .email').each(function(element){
		value = element.innerHTML;
		element.innerHTML = value.replace('@','@<wbr />');
	});
}


// Add lock icon to password-protected links
function rvwAddLock() {
	$S('body.white span.locked').each(function(element){
		element.innerHTML = '<img src="/assets/img/lock_ffffff.gif" alt="Locked" />';
	});
	$S('body.light span.locked').each(function(element){
		element.innerHTML = '<img src="/assets/img/lock_e5e5e5.gif" alt="Locked" />';
	});
	$S('body.dark span.locked').each(function(element){
		element.innerHTML = '<img src="/assets/img/lock_1a1a1a.gif" alt="Locked" />';
	});
}


// Change Accordion toggle trigger color when toggle links are clicked
// Author: Joshua Rudd, joshua@rearviewWindow.com
function rvwToggleColor() {
	$S('.toggle_accordion a').each(function(element){
		element.onclick = function(){
			// Add the new hash value to the address bar, but don't return anything (keeping the history from adding the hash to its log)
			window.location.replace(element.href);
			$S('.toggle_accordion a').each(function(element){
				element.className = '';
			});
			element.className = 'selected';
			return false;
		}
	});
}


// Accordion Effect (uses MOO.FX EFFECTS)
function toggleAccordion(){
	
	// Build list of Accordion Toggle Links
	var counter = 0;
	var togglelist = "<ul>\n";
	var hashvalue;
	var hashselect = document.location.hash;
	$S('.block h2').each(function(element){
		// First <h2> elements are used to create toggle list
		if (!realPreviousSibling(element)) {
			element.className = 'accordion_section';
			//element.id = hashvalue;
			hashvalue = rvwDirify(element.innerHTML);
			togglelist=togglelist+'<li title="'+hashvalue+'" class="toggle_accordion"><a href="#'+hashvalue+'"';
			// keep track of how many content sections there are
			if (hashselect == '#'+hashvalue) togglelist=togglelist+' class="selected"';
			if ((!hashselect) && (counter < 1)) togglelist=togglelist+' class="selected"';
			togglelist=togglelist+'>'+element.innerHTML+'</a></li>\n';
			counter = counter+1;
		}
	});
	togglelist=togglelist+"</ul>";
	// If more than one accordion content section exists, display the toggle menu, otherwise don't even trigger the effect
	if (counter > 1) {
		document.getElementById("accordionlinks").innerHTML = togglelist;
		
		//Element.cleanWhitespace('localnav');
		
		if (realNextSibling(document.getElementById("accordionlinks"))) {
			//alert(realNextSibling(document.getElementById("accordionlinks")));
			document.getElementById("accordionlinks").className += "accordiondivider";
		}
		
		var stretchers = document.getElementsByClassName('block'); //div that stretches
		var toggles = document.getElementsByClassName('toggle_accordion'); //links that toggle
		//accordion effect
		var myAccordion = new fx.Accordion(
			toggles, stretchers, {opacity: true, duration: 500, onComplete: function() {
				rvwPingElement();
			}}
		);
	
		//hash function
		function checkHash(){
			var found = false;
			toggles.each(function(li, i){
				if (window.location.href.indexOf(li.title) > 0) {
					myAccordion.showThisHideOpen(stretchers[i]);
					found = true;
				}
			});
			return found;
		}
	
		if (!checkHash()) myAccordion.showThisHideOpen(stretchers[0]);
		rvwToggleColor();
		urlhash = window.location.hash;
	} else {
		$S('.block').action({
			initialize: function(){
				this.className = '';
				// Go a little further for IE7's sake...
				this.style.overflow = 'visible';
				this.style.visibility = 'visible';
			}
		});
	}
}


// Check to see if the URL hash has changed (doesn't seem to work in IE)
function rvwPingHash() {
	currenthash = location.href;
	//alert(currenthash);
	//if (currenthash != urlhash) {
		alert(location.href);
		//setInterval('',5000);
		//toggleAccordion();
		urlhash = currenthash;
	//}
}


// Currently Safari needs a little help redrawing some elements when JS effects are used
function rvwPingElement() {
	if ((BrowserDetect.browser == "Safari") || (BrowserDetect.browser == "Netscape")) {
		document.getElementById('footer').style.margin = '1px 0 0 0';
		setTimeout("document.getElementById('footer').style.margin = '0';",1000);
		if ($('main')) {
			$('main').style.clear = 'right';
			setTimeout("$('main').style.clear = 'none';",1000);
		}
		//alert('ping');
	}
}


// Insert Flash Object to a specific element
function rvwInsertFlash() {
	if(img_low != undefined){
		if (BrowserDetect.browser == "Explorer") {
			//alert(document.body.clientHeight);
			if(document.body.clientHeight < 700){
				var flashheight = "100";
			} else {
				var flashheight = "130";
			}

		}else{
			//alert(window.innerHeight);
			if(window.innerHeight < 700){
				var flashheight = "100";
			} else {
				var flashheight = "130";
			}

		}
	}
	
	function rvwWriteSFWObject(element) {
		//var flashheight;
		var so = new SWFObject("/assets/swf/quote_module.swf", "sotester", "780", flashheight, "6", "#B30000");
		so.addVariable("xmlpath","/prospective/why/qa_flash.xml");
		if (BrowserDetect.browser != "Safari") {
			so.addParam("wmode", "transparent");
		}
		so.write(element);
		return document.getElementById(element).innerHTML;
	}

	// If flashbanner div is present, insert Flash movie
		var so = rvwWriteSFWObject('flashbanner');
		var soreplace = '<div style="height: '+flashheight+'px;"></div>';
	
		// Safari has trouble hovering over Flash elements, so automajically hide/show the flash banner when necessary
		if (BrowserDetect.browser == "Safari") {
			var watchthis = document.getElementById('portalnav');
			var headerthingy = document.getElementById('flashbanner');
			watchthis.onmouseover = function() {
				if (document.getElementById('flashbanner').innerHTML != soreplace) document.getElementById('flashbanner').innerHTML = soreplace;
			}
			headerthingy.onmouseover = function() {
				if (document.getElementById('flashbanner').innerHTML != so) document.getElementById('flashbanner').innerHTML = so;
			}
			headerthingy.onmouseout = function() {
				if (document.getElementById('flashbanner').innerHTML != so) document.getElementById('flashbanner').innerHTML = so;
			}
		}

}


// Replace Text with Flash Movie
function rvwSIFR() {
	if(typeof sIFR == "function"){
		// If the browser is Safari, don't use Flash transparency for sIFR because it caused pixelations in Safari w/Accordion
		var transparencysetting = 'transparent';
		if (BrowserDetect.browser == "Safari") transparencysetting='';
		// Red Title Text (#title h1)
		sIFR.replaceElement(named({sSelector:"#title h1", sWmode:transparencysetting, sFlashSrc:"/assets/swf/baskerville_mt.swf", sColor:"#ffffff", sLinkColor:"#ffffff", sBgColor:"#b30000", sHoverColor:"#ffffff", nPaddingTop:0, nPaddingBottom:0, sFlashVars:""}));
		// Subtitles (#subtitle h1)
		sIFR.replaceElement(named({sSelector:"body.white #subtitle h1", sWmode:transparencysetting, sFlashSrc:"/assets/swf/baskerville_mt.swf", sColor:"#000000", sLinkColor:"#9A9C9A", sBgColor:"#ffffff", sHoverColor:"#B30000", nPaddingTop:0, nPaddingBottom:0, sFlashVars:""}));
		sIFR.replaceElement(named({sSelector:"body.light #subtitle h1", sWmode:transparencysetting, sFlashSrc:"/assets/swf/baskerville_mt.swf", sColor:"#000000", sLinkColor:"#9A9C9A", sBgColor:"#e5e5e5", sHoverColor:"#B30000", nPaddingTop:0, nPaddingBottom:0, sFlashVars:""}));
		sIFR.replaceElement(named({sSelector:"body.dark #subtitle h1", sWmode:transparencysetting, sFlashSrc:"/assets/swf/baskerville_mt.swf", sColor:"#FFFFFF", sLinkColor:"#9A9C9A", sBgColor:"#1a1a1a", sHoverColor:"#B30000", nPaddingTop:0, nPaddingBottom:0, sFlashVars:""}));
	};
	
}


// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------

// This is the main SLS script that calls other scripts when the page is loaded
function rvwInit() {
	if (!$('noparse')) {
		//rvwAddEmailClass();
		rvwFirstElement('.node h3');
	}
	if ($('filter')) rvwFirstElement('#main .col3 dl.vevent');
	rvwWrapEmail();
	rvwFirstElement('#main .col1 h2');
	
	if (BrowserDetect.browser == "Safari") {
		if ($('title')) {
			$('portalnav').onmouseover = function() {
				$('title').className = 'hide';
			}
			$('main').onmouseover = function() {
				if ($('title').className == 'hide') $('title').className = '';
			}
			$('portalnav').onmouseout = function() {
				if ($('title').className == 'hide') $('title').className = '';
			}
			$('globalnav').onmouseover = function() {
				if ($('title').className == 'hide') $('title').className = '';
			}
                        // Alumni Navigation Bar
                        $('alumniglobalnav').onmouseover = function() {
                                if ($('title').className == 'hide') $('title').className = '';
                        }
		}
		if ($('subtitle')) {
			$('portalnav').onmouseover = function() {
				$('subtitle').className = 'hide';
			}
			$('portalnav').onmouseout = function() {
				if ($('subtitle').className == 'hide') $('subtitle').className = '';
			}
			if ($('globalnav')) {
				$('globalnav').onmouseout = function() {
					if ($('subtitle').className == 'hide') $('subtitle').className = '';
				}
			}
                        // Alumni Navigation Bar
                        if ($('alumniglobalnav')) {
                                $('alumniglobalnav').onmouseout = function() {
                                        if ($('subtitle').className == 'hide') $('subtitle').className = '';
                                }
                        }
			$('main').onmouseover = function() {
				if ($('subtitle').className == 'hide') $('subtitle').className = '';
			}
		}
	}
	if(img_low != undefined){
		if (BrowserDetect.browser == "Explorer") {
			//alert(document.body.clientHeight);
			if(document.body.clientHeight < 700){
				toggleLowQuality();
			} else {
				toggleHighQuality();
			}
		}else{
			//alert(window.innerHeight);
			if(window.innerHeight < 700){
				toggleLowQuality();
			} else {
				toggleHighQuality();
			}
		
		}
	}
	
}

function toggleLowQuality(){
	//replace innerHTML of stuff with random image file
	$('homepagebannerwrapper').innerHTML = '<img src="/assets/img/homepage/low/' + img_low + '" alt="Stanford Law School" />';
	//resize the flash
	$('sotester').style.height = "100px";
	//remove dash
}

function toggleHighQuality(){
	$('homepagebannerwrapper').innerHTML = '<div id="homepagebannercontainer"><div id="homepagebanner"><img src="/assets/img/homepage/high/' + img_high + '" alt="Stanford Law School" /></div></div>';
	$('sotester').style.height = "130px";
}

function slsJavascript() {
//alert("rvwInit");
	
	rvwSIFR();
	
	//if (BrowserDetect.browser) document.body.className += " "+rvwDirify(BrowserDetect.browser);
	
	if (document.getElementById('flashbanner')) rvwInsertFlash();
	
	toggleAccordion();
	
	// NEED TO PUT THE FOLLOWING BACK INTO SOME SORT OF ONLOAD EVENT
	Event.observe(window, 'load', rvwInit);
}

var JSTarget = { 
init: function(att,val,warning) { 
if (document.getElementById && document.createElement && document.appendChild) { 
var strAtt = ((typeof att == 'undefined') || (att == null)) ? 'class' : att; 
var strVal = ((typeof val == 'undefined') || (val == null)) ? 'non-html' : val; 
var strWarning = ((typeof warning == 'undefined') || (warning == null)) ? ' (opens in a new window)' : warning; 
var oWarning; 
var arrLinks = document.getElementsByTagName('a'); 
var oLink; 
var oRegExp = new RegExp("(^|\\s)" + strVal + "(\\s|$)"); 
for (var i = 0; i < arrLinks.length; i++) { 
oLink = arrLinks[i]; 
if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))) { 
oWarning = document.createElement("em"); 
oWarning.appendChild( document.createTextNode(strWarning) ); 
oLink.appendChild(oWarning); 
oLink.onclick = JSTarget.openWin; 
} 
oWarning = null; 
} 
} 
}, 
openWin: function(e) { 
var event = (!e) ? window.event : e; 
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return true; 
else { 
var oWin = window.open(this.getAttribute('href'), '_blank'); 
if (oWin) { 
if (oWin.focus) oWin.focus(); 
return false; 
} 
oWin = null; 
return true; 
} 
}, 
addEvent: function(obj, type, fn) { 
if (obj.addEventListener) 
obj.addEventListener(type, fn, false); 
else if (obj.attachEvent) { 
obj["e"+type+fn] = fn; 
obj[type+fn] = function() {obj["e"+type+fn]( window.event );} 
obj.attachEvent("on"+type, obj[type+fn]); 
} 
} 
}; 
JSTarget.addEvent(window, 'load', function(){JSTarget.init("rel","external"," ");});

