




// Customize
var minimumKeywordLength = 3;		// characters required for a word to be considered important enough to search for
var minimumNumberOfResults = -1;		// for a page to be considered important enough to show as a result
									// input a negative 1 (-1) to take the average keywords/page as mimimum


var normal_context_show = "showfirsttwo";	//  normal context show
var context_before_keyword_amount = 2;		// how many words to include before a keyword in context
var context_after_keyword_amount = 2;		// how many words to include after a keyword in context
var total_context = context_after_keyword_amount+context_before_keyword_amount;	// totals the previous 2 variables
var context_height = -1;	// px height of the keyword in context

var all_members = new Array("seitz","radebaugh","fierens","hunkele","jaconski","miller","arnold","li","efkeman","kepner","metzler","miller2","watts","lechowicz","mathews","efstathiou","sosso","kuzniewski","brethauer");
var all_technology = new Array("techroom","darkroom","tvproduction","metalroom","woodshop","autotech");



keywordbgcolors	= 	new Array('99FF99','FFFF00','FF0000','6600CC','336699','FFFFFF','FFCC66','FF33CC','00FFFF','CC99FF','FFFFCC','99FFCC','00CCFF','FF9933','00FF00','0000FF','666600','990066','006666','00FFCC');	// background colors for keywords when being highlighted
keywordcolors	= 	new Array('000000','000000','FFFFFF','FFFFFF','FFFFFF','000000','000000','000000','000000','000000','000000','000000','000000','000000','000000','FFFFFF','FFFFFF','FFFFFF','FFFFFF','000000');	// text colors for keywords when being highlighted

maxkeywords = keywordbgcolors.length;









var resulttext = new Array();
var results = new Array();
var resulttextcount = 0 ;
var searchvarsset = 0;
var filetext = new Array();
var thisresultscount=0;
//var alllinks = new Array();

var alllinks=new Array("About","Applications","Index","Links","Members","Midatlantic","Overview","Projects","Technology","Timeline");

for (var l=0;l<alllinks.length;l++)
	filetext[l] = includefile(alllinks[l].toLowerCase()+'.txt').replace(/(<([^>]+)>)/ig,"");

// Sets the variables for the search


// searches for keywords
function search(){
	var totalpages = 0;
	resultscount=0;
	var results_text=new Array();
	me=document.getElementById('searcher');

	showkeywords=me.value.replace(/(\W+)/ig," ");
	keywords=me.value.toLowerCase().replace(/(\W+)/ig," ");
	keywordstohighlight=keywords.replace(" ","+");

document.getElementById('searcher').style.left=0;
document.getElementById('searcher').style.width=390;
document.getElementById('search').style.visibility="visible";
document.getElementById('search').innerHTML="<font style='font-family:arial;font-weight:bold;color:#ffcc99'>Searching for...<\/font> <font size='-1'>"+showkeywords+"</font><br><span id='countresults' style='font-size:10px'><\/span><span id='results' style='line-height:.5cm'><\/span>";








	var theStart = new Date().getTime();
	// searches in a loop
	for (var l=0;l<alllinks.length;l++){
		results[l]=actuallysearch(filetext[l]);
		if (results[l]>0){
			results_text[l]={numberofresults:results[l],filename:alllinks[l],resulttextoutput:resulttext};
			totalpages++;
		}
		resulttext=[];
	}
	var theVal = (new Date().getTime() - theStart)/1000;
	//alert(theVal+" seconds.");

	// sort all the results of the search
	results_text.sort(sortbyresults);

	// and record the number of results
	document.getElementById('countresults').innerHTML=resultscount+" Results on "+totalpages+" Pages<br>";

	// display the results and things about them
	holder=document.getElementById('results');
	if (minimumNumberOfResults<0)
		new_minimumNumberOfResults=Math.ceil(resultscount/totalpages);
	else
		new_minimumNumberOfResults=minimumNumberOfResults;
	for (var c=0;c<5;c++){
		if (c<results_text.length){
			if (results_text[c].numberofresults>=new_minimumNumberOfResults||c<1){
			var thename = results_text[c].filename;
			thename = thename.replace(new RegExp("[_-]","ig")," ");
				// outputs the results in a pretty way
				thisresult="";
				for (var o=0;o<results_text[c].resulttextoutput.length;o++){
					thisresult+="<font style='padding-left:20px;' size='-1'>"
					+"<b>+<\/b>"	// bold + list
					+" \""+results_text[c].resulttextoutput[o]+"\"<\/font><br>";
				}
				holder.innerHTML+=(c+1)+") "
				+"<a style='color:#FFFFFF' href='"+results_text[c].filename.toLowerCase()+".html?keys="+keywordstohighlight+"'>"+thename+"<\/a>"
				+" - "+results_text[c].numberofresults+" results "
				+"<font onclick=\"toggle('"+results_text[c].filename+"');\" style='cursor:pointer' size='-2'>(Show Me)<\/font>"
				+"<br>";
				var display_text = "";
				switch (normal_context_show){
					case "hidden":
						display_text="display:none;";
						break;
					case "shown":
						display_text="";
						break;
					case "showfirst":
						if (c==0)
							display_text="";
						else
							display_text="display:none;";
						break;
					case "hidefirst":
						if (c>0)
							display_text="display:none;";
						else
							display_text="";
						break;
					case "showfirsttwo":
						if (c<=1)
							display_text="";
						else
							display_text="display:none;";
						break;
					case "hidefirsttwo":
						if (c>1)
							display_text="display:none;";
						else
							display_text="";
						break;
					case "showfirstthree":
						if (c<=2)
							display_text="";
						else
							display_text="display:none;";
						break;
					case "hidefirstthree":
						if (c>2)
							display_text="display:none;";
						else
							display_text="";
						break;
				}
				if (context_height>0)
					var heightthing="height:"+context_height+"px;";
				else
					var heightthing="";
					
				holder.innerHTML+="<div style='"+display_text+"border:1px solid #ffcc99;border-right:7px solid #ffcc99;padding:3px;"+heightthing+"overflow:auto' id='"+results_text[c].filename+"'>"+thisresult
				+"<br><\/div>";
			}
		}
	}
}



// for switching whether keyword in context is shown or not
function toggle(where){
	var what=document.getElementById(where);
	what.style.display=(what.style.display!='none'?'none':'');
}


alls = new Array(all_technology,all_members);

function toggle_andoff(page,where){
	switch(page){
		case "labs":
			var all_to_turn_off = alls[0];
			break;
		case "members":
			var all_to_turn_off = alls[1];
			break;
		default:
			var all_to_turn_off = new Array("");
			break;
	}
	for (var jar=0;jar<all_to_turn_off.length;jar++)
		document.getElementById(all_to_turn_off[jar]).style.display='none';
	toggle(where);
}

function change_all(page,on){
	switch(page){
		case "labs":
			var all_to_turn_off = alls[0];
			break;
		case "members":
			var all_to_turn_off = alls[1];
			break;
		default:
			var all_to_turn_off = new Array("");
			break;
	}
	for (var jar=0;jar<all_to_turn_off.length;jar++)
		if (on==1)
			document.getElementById(all_to_turn_off[jar]).style.display='';
		else
			document.getElementById(all_to_turn_off[jar]).style.display='none';
}

// for sorting the results with the most results first
function sortbyresults(a,b){
	var x=a.numberofresults;
	var y=b.numberofresults;
	return ((x>y)?-1:((x<y)?1:0));
}


// for actually searching the files for the keywords
function actuallysearch(file){
	for (var red=0;red<2;red++){
		if (red==0)
			time="display";
		if (red==1)
			time="count";

		thisresultscount=0;
		resulttextcount=0;

	//	/*
		var newkeywords=keywords;
		var otherkeywords=newkeywords.split(' ');
		var otherkeywordslength = otherkeywords.length;


		var previewfile=file.split(' ');

		var previewfilelength = previewfile.length;


		// the searching part///////////////////////////////////////////////////////////////////////////
		for (var j=0;j<otherkeywordslength;j++){
			thiskeyword=otherkeywords[j];
			if (thiskeyword.length>=minimumKeywordLength){
				for (var l=0;l<previewfilelength;l++){
					if (thiskeyword!=""&&thiskeyword!=" "&&previewfile[l].match(new RegExp(thiskeyword,"ig"))&&resulttextcount<3){
						dontcountthis=false;
						if (time=="display"){	// if the function has been called to display
	
						//	/*
							if (l==0){
								twobefore="";
								twoafter=previewfile[1]+" "+previewfile[2]+" "+previewfile[3]+" "+previewfile[4];
	
	
									previewfile[1]='';
									previewfile[2]='';
									previewfile[3]='';
									previewfile[4]='';
	
							}
							else if (l==1){
								twobefore=previewfile[0]+" ";
								twoafter=previewfile[2]+" "+previewfile[3]+" "+previewfile[4];
	
	
									previewfile[0]='';
									previewfile[2]='';
									previewfile[3]='';
									previewfile[4]='';
	
							}
							else {
								twobefore=previewfile[(l-2)]+" "+previewfile[(l-1)]+" ";
								if (l<(previewfilelength-1))
									twoafter=previewfile[(l+1)];
								if (l<(previewfilelength-2))
									twoafter += " "+previewfile[(l+2)];
	
	
									previewfile[(l-2)]='';
									previewfile[(l-1)]='';
									previewfile[(l+1)]='';
									previewfile[(l+2)]='';
	
							}
						//	*/
	
	
	
							tempvar=previewfile[l];
	
							allthekeywords = document.getElementById('searcher').value.replace(/(\W+)/ig," ");
							now_allthekeywords = allthekeywords.split(" ");
							for (var w=0;w<now_allthekeywords.length&&w<maxkeywords;w++){
								if (now_allthekeywords[w].length>=minimumKeywordLength){
									re = new RegExp(now_allthekeywords[w],"ig");
	
									if (!twobefore.match(re)&&!twoafter.match(re)&&!tempvar.match(re)){
										// oh no!
										dontcountthis=true;
									}
	
									twobefore = twobefore.replace(re,"<font style='color:#"+keywordcolors[w]+";background-color:#"+keywordbgcolors[w]+"'>"+now_allthekeywords[w].toUpperCase()+"</font>");
									tempvar = tempvar.replace(re,"<font style='color:#"+keywordcolors[w]+";background-color:#"+keywordbgcolors[w]+"'>"+now_allthekeywords[w].toUpperCase()+"</font>");
									twoafter = twoafter.replace(re,"<font style='color:#"+keywordcolors[w]+";background-color:#"+keywordbgcolors[w]+"'>"+now_allthekeywords[w].toUpperCase()+"</font>");
	
								}
							}
	
							//if (!dontcountthis){
								// add the result in context to the array of results in context
								resulttext[resulttextcount] = twobefore;
								resulttext[resulttextcount] += tempvar+" ";
								resulttext[resulttextcount] += twoafter;
							// increment loop variables
							resulttextcount++;
							//}
						}
	
	
						if (time=="count"){ // if the function has been called to count
	
								// makes sure all the keywords are in the page
								allthekeywords = document.getElementById('searcher').value.replace(/(\W+)/ig," ");
								now_allthekeywords = allthekeywords.split(" ");
								for (var w=0;w<now_allthekeywords.length&&w<maxkeywords;w++){
									if (now_allthekeywords[w].length>=minimumKeywordLength){
										re = new RegExp(now_allthekeywords[w],"ig");
	
										if (!file.match(re)){
											// oh no!
											dontcountthis=true;
										}
	
									}
								}
							if (!dontcountthis)
								thisresultscount++;
						}
					}
				}
			}
		}
	//	*/

		// update the total results
		resultscount += thisresultscount;

	}
	// return the number of results for this particular file
	return thisresultscount;
}




function actuallysearch2(file){



	resultscount+=thisresultscount;
	return thisresultscount;
}





















// sets the page as it was before the search occured
function unsearch(){
	document.getElementById('search').innerHTML="";
	document.getElementById('search').style.visibility="hidden";
	document.getElementById('searcher').value='Search This Site...';
	document.getElementById('searcher').style.left=150;
	document.getElementById('searcher').style.width=240;
}










// highlights the keywords from a previous search (as designated in the url)
function highlightkeywords(){
	url=window.location.href;
	url2=url.split("?keys=");
	url3=url2[1].split("#");
	keywordstring=url3[0];
	keywords=keywordstring.split("+");
	replacewhere=document.getElementById('content');

	document.getElementById('highlightalert').innerHTML="The following <b>search terms<\/b> have been <b>highlighted<\/b> on this page:<br><font style='padding-left:20px'>";
	for (var i=0;i<keywords.length&&i<maxkeywords;i++){
		thiskeyword=keywords[i];
		if (thiskeyword.length>=minimumKeywordLength){
			document.getElementById('highlightalert').innerHTML+="<font style='color:#"+keywordcolors[i]+";background-color:#"+keywordbgcolors[i]+"'>"+thiskeyword+"</font> ";
		}
	}
	document.getElementById('highlightalert').innerHTML+="</font><hr>";

	for (var i=0;i<keywords.length&&i<maxkeywords;i++){
		where=replacewhere.innerHTML;
		thiskeyword=keywords[i];
		if (thiskeyword.length>=minimumKeywordLength){
			// the replacement regular expression
			//re=new RegExp(thiskeyword+"(?!.+[\"\'].+>)(?=.+<\/)","ig");
			re=new RegExp(thiskeyword+"(?!.+[\"\'].+>)","ig");

			// replace the keywords with a highlighted version
			replacewhere.innerHTML=where.replace(re,"<font style='color:#"+keywordcolors[i]+";background-color:#"+keywordbgcolors[i]+"'>"+thiskeyword.toUpperCase()+"</font>");
		}
	}
}




function includefile(url){
	var page_request=false;
	if (window.XMLHttpRequest)
		page_request=new XMLHttpRequest();
	else
		return false;
	page_request.open('GET', url, false);
	page_request.send(null);
	return page_request.responseText;
}
