/* ****** browser detection ****** */

var detect = navigator.userAgent.toLowerCase();
var OS, browser, total, theString, place;
var version = 0;

if(checkIt('konqueror')) {
	browser = "Konqueror";
	OS = "Linux";
}
else if(checkIt('safari')) { browser = "Safari"; }
else if(checkIt('omniweb')) { browser = "OmniWeb"; }
else if(checkIt('opera')) { browser = "Opera"; }
else if(checkIt('webtv')) { browser = "WebTV"; }
else if(checkIt('icab')) { browser = "iCab"; }
else if(checkIt('msie')) {
	browser = "Internet Explorer";
	createBrowserCookie("browser", "ie");
}
else if(navigator.userAgent.indexOf("Firefox") != -1) { browser = "Firefox"; }
else if(!checkIt('compatible')) {
	browser = "Netscape Navigator";
	version = detect.charAt(8);
}
else { browser = "An unknown browser"; }

if(!version) { version = detect.charAt(place + theString.length); }

if(!OS) {
	if(checkIt('linux')) { OS = "Linux"; }
	else if(checkIt('x11')) { OS = "Unix"; }
	else if(checkIt('mac')) { OS = "Mac"; }
	else if(checkIt('win')) { OS = "Windows"; }
	else { OS = "an unknown operating system"; }
}

function checkIt(string) {
	place = detect.indexOf(string) + 1;
	theString = string;
	return place;
}

/* detect screen resolution */

var resWidth = screen.width;
var resFinal = null;

if(resWidth.toString() == "800") {
	resFinal = "lowRes";
}
else if(resWidth.toString() == "1024") {
	resFinal = "standard";
}
else if(resWidth.toString() == "1152") {
	resFinal = "medRes";
}
else if(resWidth.toString() == "1280") {
	resFinal = "highRes";
}

/* read cookie to determine preferences */
function setPrefs() {
	
	var prefs = readCookie("prefs");
	var pElement = document.getElementById ("content");
	var pLeft = getCSSProp (pElement, "fontSize");

	// set preferential font size
	if (prefs) {
		pElement.style.fontSize = prefs + "px";
	}
	
}

/* ****** remove title balloons from all document links (popup version) ****** */

function removeTitle() {
	if(document.getElementsByTagName) {
		var a = document.getElementsByTagName("a");
		for(var i = 0; i < a.length; i++) {
			a[i].removeAttribute("title");
		}
	}
}

window.onload = removeTitle;

/* globals */

var dualState = false;
var instState = false;

/* ****** hide print icon unless results page is displayed ****** */
//function hidePrintIcon() {
	//document.getElementById("printIcon").style.display = "none";
//}

/* ****** initialize "prefs saved" msg to hidden ****** */
function hidePrefMsg() {
	document.getElementById("prefMsg").style.visibility = "hidden";	
}

/* ****** show "prefs saved" msg when prefs change ****** */
function showPrefMsg() {
	document.getElementById("prefMsg").style.visibility = "visible";

	setTimeout("hidePrefMsg()", 600);	
}

/* ****** disable courseNum select box initially ****** */
function disableCourseNum() {
	document.getElementById("courseNum").disabled = true;	
}

/* ****** show/remove questions on front page if link is clicked ****** */
createQuestionsCookie("ques", "on");

function toggleQues() {
	var quesState = readCookie("ques");
	
	if (quesState == "off") {
		document.getElementById("quesFront").style.display = "block";
		createQuestionsCookie("ques", "on");
		document.getElementById("tQues").innerHTML = "Hide Evaluation Questions";
	} else if (quesState == "on") {
		document.getElementById("quesFront").style.display = "none";
		createQuestionsCookie("ques", "off");
		document.getElementById("tQues").innerHTML = "Show Evaluation Questions";
	}
}

/* ****** use ajax to retrieve selected query info ****** */
var XHR;

function showCustomer () {
	var fvSubject = document.getElementById("subj").value;
	var fvCourseNum = document.getElementById("courseNum").value;
	var fvInstructor = document.getElementById("instructor").value;

	if (dualState == true && instState == false) {
		var lurl = "getCourseEvalsInfo.php?ida=" + fvSubject + "&idb=" + fvCourseNum;
	} else if (dualState == false && instState == true) {
		var lurl = "getCourseEvalsInfo.php?ida=" + fvInstructor + "&idb=none";
	}
	
	createXHR();
	
	document.getElementById("instInfo").style.display = "block";

	XHR.open("GET", lurl, true);
	XHR.onreadystatechange = callback;
	XHR.send(null);
	
	document.getElementById("searchFields").style.display = "none";

	// fix ie margin/padding bug			
	/* if (browser == "Internet Explorer") {
		var ieElement = document.getElementById ("courseEvals");
		ieElement.style.marginTop = -120 + "px";
	} */
}

function createXHR() {

	if ( window.ActiveXObject ) {
		XHR = new ActiveXObject ( "Microsoft.XMLHTTP" );	
	} else {
		XHR = new XMLHttpRequest();
	}

}

function callback() {

	if ( XHR.readyState == 4 && XHR.status == 200 )
		document.getElementById("instInfo").innerHTML = XHR.responseText;

}

/* ****** use ajax to retrieve course num's that pertain to subject ****** */
var XHR2;

function showCustomer2 (str2) {
	var lurl2 = "getCourseEvalsInfo.php?ida=" + str2 + "&idb=two";
	
	createXHR2();
	
	XHR2.open("GET", lurl2, true);
	XHR2.onreadystatechange = callback2;
	XHR2.send(null);
	
}

function createXHR2() {

	if ( window.ActiveXObject ) {
		XHR2 = new ActiveXObject ( "Microsoft.XMLHTTP" );	
	} else {
		XHR2 = new XMLHttpRequest();
	}

}

function callback2() {

	if ( XHR2.readyState == 4 && XHR2.status == 200 ) {
		var b = XHR2.responseText;
		var temp = new Array();
		temp = b.split('; ');
		
		document.getElementById("courseNum").options.length = 0;
		document.getElementById("courseNum").disabled = false;
		
		// strip all characters (other than numerals) from the first returned line
		temp[0] = temp[0].replace(/[\[\]\/\;(\)\.\<\>\:\(a-z)\(A-Z)\=\"\'\-\ ]/g, '');
		
		// strip all characters (other than numerals) from the last returned line
		temp[(temp.length - 1)] = temp[(temp.length - 1)].replace(/[\[\]\/\;(\)\.\<\>\:\(a-z)\(A-Z)\=\"\'\-\ ]/g, '');
		
		document.getElementById("courseNum").options[0] = new Option("select course #", "null");
		
		for (i = 0; i < (temp.length - 1); i++) {	// the "temp.length - 1" is used to strip the last entry which is always an invalid "40"
			document.getElementById("courseNum").options[(i + 1)] = new Option(temp[i], temp[i]);
		}
		
		document.getElementById("courseNum").focus();
	}

}

/* ****** cookies (all varieties) ****** */

function createPrefCookie(cookName, cPref) {		// store user prefs
	var value = cPref;
	var expDate = new Date();
	expDate.setTime(expDate.getTime() + (365*24*3600*1000));

	document.cookie = cookName + "=" + value + "; path=/" + "; expires=" + expDate;
}

function createBrowserCookie(cookName, cBrowser) {		// determines if IE is being used
	var value = cBrowser;

	document.cookie = cookName + "=" + value + "; path=/";
}

function createQuestionsCookie(cookName, cQues) {		// holds state of questions on front page
	var value = cQues;

	document.cookie = cookName + "=" + value + "; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	
	for(var i = 0; i < ca.length; i++) {
		var c = ca[i];
		
		while(c.charAt(0) == ' ') {
			c = c.substring(1,c.length);
		}

		if(c.indexOf(nameEQ) == 0) {
			return c.substring(nameEQ.length,c.length);
		}
	}
	
	return null;
}

/* ****** determine selection status and disable appropriate fields ****** */

function selectStatus (box, elName) {
	if (elName == "instructor") {
		document.getElementById("formContainerOne").style.display = "none";
		document.getElementById("or").style.display = "none";
		instState = true;
		dualState = false;
	} else {
		document.getElementById("formContainerTwo").style.display = "none";
		document.getElementById("or").style.display = "none";
		instState = false;
		dualState = true;
	}
}

/* ****** reset all fields (used because default "reset" doesn't handle disabled fields) ****** */

function resetForm() {
	var foSubject = document.getElementById("subj");
	var foCourseNum = document.getElementById("courseNum");
	var foInstructor = document.getElementById("instructor");
	
	if(browser == "Opera" && OS == "Windows") {
		window.location.href = 'index.php';	
	} else {
		document.getElementById("formContainerOne").style.display = "block";
		document.getElementById("or").style.display = "block";
		document.getElementById("formContainerTwo").style.display = "block";
	
		foSubject.options[0].selected = true;
		foSubject.disabled = false;
		foCourseNum.options[0].selected = true;
		foCourseNum.disabled = true;
		foInstructor.options[0].selected = true;
		foInstructor.disabled = false;
	
		document.getElementById("instInfo").style.display = "none";
	}
}

/* ****** change text size ****** */

function textSize(dir) {
	var element = document.getElementById ("content");
	var left = getCSSProp (element, "fontSize");
	
	var result = left.slice(0, 2);
	
	if(dir == "dec" && parseInt(result) == 10) {
		alert('The smallest allowable font is currently active.');	
	}
	else if(dir == "inc" && parseInt(result) == 15) {
		alert('The largest allowable font is currently active.');	
	}
	else {
		switch(dir) {
			case 'inc':
				element.style.fontSize = (parseInt(result) + 1) + "px";
				createPrefCookie("prefs", (parseInt(result) + 1));
				showPrefMsg();
				break;
			case 'dec':
				element.style.fontSize = (parseInt(result) - 1) + "px";
				createPrefCookie("prefs", (parseInt(result) - 1));
				showPrefMsg();
				break;
			default:
				break;
		}	
	}
}

function getCSSProp (element, prop) {	
	if(element.style[prop]) {
    		// inline style property
    		return element.style[prop];
  	}
  	else if (element.currentStyle) {
    		// external stylesheet for Explorer
    		return element.currentStyle[prop];
  	}
  	else if (document.defaultView && document.defaultView.getComputedStyle) {
    		// external stylesheet for Mozilla and Safari 1.3+
    		prop = prop.replace(/([A-Z])/g,"-$1");
    		prop = prop.toLowerCase();
    		return document.defaultView.getComputedStyle(element,"").getPropertyValue(prop);
  	}
  	else {
    		// Safari 1.2
    		return null;
  	}
}

/* ****** open new window ****** */

// globals to detemine appropriate size window
var newWin = null;

if(resFinal == "lowRes") {
	var width = 780;
	var height = 580;
}
else if(resFinal == "standard") {
	var width = 900;
	var height = 700;
}
else if(resFinal == "medRes") {
	var width = 900;
	var height = 820;
}
else if(resFinal == "highRes") {
	var width = 900;
	var height = 960;
}

function openWin(whatPage) {
	var leftPos = (screen.width) ? (screen.width - width) / 2 : 0;

	settings = 'width=' + width + ',height=' + height + ',top=0,left=' + leftPos + ',scrollbars=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,status=yes';

	newWin = window.open(whatPage, 'win', settings);
}