/*
	Designed and Written by Lucas Fienberg, JULY 2008
*/


//Do not Change
var theData = "";

//Change path variable to reflect path to FAQ data file
var path = "faq.csv";

function changeFn() {
	var required = document.getElementById("requirebox").checked;
	var rankedArray = new Array();
	var keywords = document.getElementById("keywords").value;
	var numofkeywords = 0;
	var numofentries = theData.length -1;
	var buf = "<b>Keywords: </b>";
	var warned = false;
	if(keywords.length >=3) {
		var keywordsSplit = keywords.split(' ');
		keywords = new Array();
		for(i=0;i<keywordsSplit.length;i++) {
			if(keywordsSplit[i].substring(keywordsSplit[i].length-1)=="s") {
				keywordsSplit[i] = keywordsSplit[i].substring(0,keywordsSplit[i].length-1);
			}else if(keywordsSplit[i].substring(keywordsSplit[i].length-3)=="ing") {
				keywordsSplit[i] = keywordsSplit[i].substring(0,keywordsSplit[i].length-3);
			}	
			if(keywordsSplit[i].length >2) {
				keywords[numofkeywords] = keywordsSplit[i].toLowerCase();
				numofkeywords++;
				if(numofkeywords!=1) {
					buf+= " & ";
				}
				buf+= (keywords[numofkeywords-1]);
			} else if(keywordsSplit[i].length>0) {
				if(!warned) {
					buf = "One or more keywords is <a onclick='return showAll();'href='#FAQ Help'>too short</a><br>" + buf;
					warned = true;
				}
			}
		}
		
		for(q=1;q<numofentries;q++) {
			var score = 0;
			if(required)
				score = 50;
			var qhits;
			var ahits;
			for(i=0;i<keywords.length;i++) {
				qhits = theData[q][0].toLowerCase().split(keywords[i]).length-1;
				ahits = theData[q][1].toLowerCase().split(keywords[i]).length-1;
				if(required) {
					if(qhits>0) {
						score = score * (2*Math.pow(qhits,0.5));
					}
					if(ahits>0) {
						score = score * (Math.pow(ahits,0.5));
					}
					else if(qhits==0) {
						score = 0;
					}
				} else {
					score += 2*Math.pow(qhits,0.5);
					score += Math.pow(ahits,0.5);
				}
			}
			if(score>0) {
				rankedArray[rankedArray.length] = theData[q];
				rankedArray[(rankedArray.length-1)][3] = score;
			}
		}
		rankedArray.sort(function sorter(a,b) {return (b[3]-a[3])});
		for(q=0;q<rankedArray.length;q++) {
			buf = writesearchentry(rankedArray[q][0],rankedArray[q][1],q,buf);
		}
	} else if(keywords.length >0){
		buf = "One or more keywords is  <a onclick='return showAll();'href='#FAQ Help'>too short</a><br>";
	} else {
		buf = "Enter keywords above to get search results here";
	}
	if(buf != "") {
		if(rankedArray.length==0 && keywords.length !=0) {
			buf+= "<br>No entries found";
		}
		document.getElementById("faqsearch").innerHTML = buf;
	}
}
function writeentry(question,answer,id,string) {
	string = string.concat("<li><a href='#' onclick='return !toggleObject(\"fil"+id+"\");'>"+question+"</a>");
	string = string.concat("<div class='answerbox' style='padding-left: 5px; display: none;' id='fil"+id+"'><div class='answerfield'>"+answer+"</div></div>");
	string = string.concat("</li>");
	return string;
}
function writesearchentry(question,answer,id,string) {
	string = string.concat("<div style='padding-left: 5px;' class='questionbox'>");
	string = string.concat("<a href='#' onclick='return !toggleObject(\"sea"+id+"\");'>"+question+"</a><br>");
	string = string.concat("<div class='answerbox' style='padding-left: 5px; display: none;' id='sea"+id+"'><div class='answerfield'>"+answer+"<br></div></div>");
	string = string.concat("</div>");
	return string;
}
function showAll() {
	var x = 0;
	while(showObject("fil" + x++)) {
	}
}
function hideAll() {
	var x = 0;
	while(hideObject("fil" + x++)) {
	}
}
function getObject(id) {
    var obj = null;

    if(document.getElementById)
        obj = document.getElementById(id);
    else if(document.all)
        obj = document.all[id];
    else if(document.layers)
        obj = document.layers[id];

    return obj;
}
function showObject(id) {
	var obj = getObject(id);
	
	if(!obj)
		return false;
		
	if(obj.style.display == 'none') 
    {
        var state = 1;
        obj.style.display = '';
    }
    return true;
}
function hideObject(id) {
    var obj = getObject(id);

    if(!obj)
        return false;

    var state = 0;
    obj.style.display = 'none';

    return true;
}
function toggleObject(id){
    var obj = getObject(id);

    if(!obj)
        return false;

    if(obj.style.display == 'none'){
        var state = 1;
        obj.style.display = '';
    }

    else{
        var state = 0;
        obj.style.display = 'none';
    }

    return true;
}
function load() {
	var http;
	try {  
		http = new ActiveXObject('Msxml2.XMLHTTP');
	}
    catch (e) {
        try {   
			http = new ActiveXObject('Microsoft.XMLHTTP');
		}
        catch (e2) {
			try {  
				http = new XMLHttpRequest();
			}
			catch (e3) {
				http = false;
			}
        }
    }
	http.open("GET",path,true);
	http.onreadystatechange = function() {
		if(http.readyState==4) {
			var arrayData = parseData(http.responseText);
			if(arrayData != false) {
				displayList(arrayData);
			}
			else {
				document.getElementById("zone").innerHTML = "Corrupted Load, please refresh.  If problem persists please contact ltfienberg[at]uchicago.edu";
			}
		}
	}
	http.send(null);
}
function toggle(a) {
	if(a==true) {
		a=false;
	}else {
		a=true;
	}
	return a
}
function parseData(serverString) {
	var data = new Array();
	var quoted = false;
	var currentEntry = 0;
	var currentColumn = 0;
	
	var y = 0;
	var lasty = -1;
	var limit = serverString.length;
	
	data[0] = new Array(3);
	//loop over character
	for(y=0;y<serverString.length;y++) {
		//Do the Parsing
		if(serverString.charAt(y) == "\"") {
			quoted = toggle(quoted);
		}
		else if(serverString.charAt(y) == ',') {
			if(!quoted) {
				data[currentEntry][currentColumn] = serverString.substring((lasty+1),y);
				if(data[currentEntry][currentColumn].charAt(0)=='"') {
					data[currentEntry][currentColumn] = data[currentEntry][currentColumn].substring(1,data[currentEntry][currentColumn].length-1);
				}
				lasty = y;
				currentColumn++;
			}
		}
		else if(serverString.charAt(y) =="\n") {
			if(!quoted) {
				data[currentEntry][currentColumn] = serverString.substring((lasty+1),y);
				if(data[currentEntry][currentColumn].charAt(0)=='"') {
					data[currentEntry][currentColumn] = data[currentEntry][currentColumn].substring(1,data[currentEntry][currentColumn].length-1);
				}
				lasty = y;
				currentEntry++;
				currentColumn=0;
				data[currentEntry] = new Array(3);
			}
		}
	}
	theData = data;
	return data;
}
function displayList(data) {

	//var textToAdd = "<table border='0' width='100%'><tr><td width='78%'><b>Questions by Topic (click to expand/collapse)</b></td><td width='22%'><a href='#' onclick='return showAll();'>show all </a> / <a href='#' onclick='return hideAll();'>hide all</a></td></tr></table>"; 
	//var textToAdd = "<h3>Questions by Topic (<a href='#' onclick='return showAll();'>show all</a> / <a href='#' onclick='return hideAll();'>hide all</a>)</h3>";
	var textToAdd = "<h5><a href='#' onclick='return showAll();'>SHOW all</a> / <a href='#' onclick='return hideAll();'>HIDE all</a></h5>";
	var topic_number = 0;
	var entry_number = 0;
	
	var x;
	for(x = 1; x< data.length;x++) {
		if((data[x][0])) {
			if((data[x][2]) != (data[(x-1)][2])) {

				if(x != 1) {
					textToAdd = textToAdd.concat("</ul></div>");
				}
				textToAdd = textToAdd.concat("<h4><a name='"+data[x][2]+"'></a>"+data[x][2]+"</h4><ul>");
				topic_number++;
			}
			textToAdd = writeentry(data[x][0],data[x][1],entry_number,textToAdd);
			entry_number++;
		}
	}
	textToAdd = textToAdd.concat("</div></div>");
	document.getElementById("zone").innerHTML = textToAdd;
}
		
		



