// Mortar Board 2007-2008 Website
// JavaScript Functions

var submit = true; // Used for form submission

/*
 * Preload images
 */
if (document.images) {
	loadingImg = new Image(91, 19); 
	loadingImg.src = 'images/loading.gif';
	
	sendingImg = new Image(91, 19); 
	sendingImg.src = 'images/sending.gif';
}

/*
 * ajaxRead(str file, FunctionPtr dispFunc)
 * Fetches "file" and calls "dispFunc" to render the file's content
 */
function ajaxRead(file, dispFunc)
{
	if (file == '' || dispFunc == '') {
		alert("ajaxRead: Invalid parameters\n");
		return;
	}
	
	var xmlObj = null;

	if (window.XMLHttpRequest) {
		xmlObj = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
	}

	xmlObj.onreadystatechange = function() {
		if (ajaxCheckReadyState(xmlObj)) {
			dispFunc(xmlObj.responseXML);
		}
	}

	xmlObj.open('GET', file, true);
	xmlObj.send('');
}

/*
 * ajaxSend(str file, str str)
 * Sends "str" to "file" as posted form data.  Returns responseXML
 * as a parameter to submitComplete().
 */
function ajaxSend(file, str)
{
	if (file == '' || str == '') {
		alert("ajaxSend: Invalid parameters\n");
		return;
	}
	
	var xmlObj = null;

	if (window.XMLHttpRequest) {
		xmlObj = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
	}

	xmlObj.onreadystatechange = function() {
		if (ajaxCheckReadyState(xmlObj)) {
			submitComplete(xmlObj.responseXML);
		}
	}

	xmlObj.open('POST', file, true);
	xmlObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
	xmlObj.send(str);
}

/*
 * ajaxCheckReadyState(XMLHttpRequest obj)
 * Returns true if request is "complete" and "OK"
 * Else, returns false
 */
function ajaxCheckReadyState(obj)
{
	if (obj.readyState == 4) {
		if (obj.status == 200) {
			return true;
		}
	}
	
	return false;
}

/*
 * members_changeClass()
 * Displays "Loading..." image. Calls ajaxRead to load appropriate
 * member's file
 */
function members_changeClass()
{
	var insertData = '<p align="center"><img src="images/loading.gif" alt="Loading..." width="91" height="19" /><p>';
	document.getElementById('members').innerHTML = insertData;
	
	var mbdClass = document.getElementById('mbd_class');
	ajaxRead('members/' + mbdClass.options[mbdClass.selectedIndex].value + '.xml', members_processXML);
}

/* 
 * members_processXML(XMLHttpRequest.responseXML obj)
 * Display function to render "obj"
 */
function members_processXML(obj)
{
	// Get members
	var dataArray = obj.getElementsByTagName('member');
	var dataArrayLen = dataArray.length;
	var insertData = '<h2>Class Members</h2>';
	
	if (dataArrayLen > 0) {
		insertData += '<table class="members">';
		
		for (var i = 0; i < Math.ceil(dataArrayLen / 2) * 2; i++) {
			if (i % 2 == 0) {
				insertData += '<tr>';
			}
			
			if (i < dataArrayLen) {
				insertData += '<td>' + dataArray[i].firstChild.data + '</td>';
			} else {
				insertData += '<td>&nbsp;</td>';
			}
			
			if ((i + 1) % 2 == 0) {
				insertData += '</tr>';
			}
		}
		
		insertData += '</table>';
	} else {
		insertData += '<p>There are no members to display.</p>';
	}
	
	// Get advisors
	dataArray = obj.getElementsByTagName('advisor');
	dataArrayLen = dataArray.length;
	insertData += '<br /><h2>Class Advisors</h2>';
	
	if (dataArrayLen > 0) {
		insertData += '<table class="members">';
		
		for (var i = 0; i < Math.ceil(dataArrayLen / 2) * 2; i++) {
			if (i % 2 == 0) {
				insertData += '<tr>';
			}
			
			if (i < dataArrayLen) {
				insertData += '<td>' + dataArray[i].firstChild.data + '</td>';
			} else {
				insertData += '<td>&nbsp;</td>';
			}
			
			if ((i + 1) % 2 == 0) {
				insertData += '</tr>';
			}
		}
		
		insertData += '</table>';
	} else {
		insertData += '<p>There are no advisors to display.</p>';
	}
	
	document.getElementById('members').innerHTML = insertData;
}

function contact_submit(fobj)
{
	clearForm(fobj, 0);
	
	if (fobj.subject.value == '') {
		fobj.subject.text = '[No Subject]';
		fobj.subject.value = '[No Subject]';
	}

	var file = 'sendmail.php';
	var str = 'submit=true&' + getFormValues(fobj, validate);

	if (submit) {
		document.getElementById('sending').innerHTML = '<img src="images/sending.gif" alt="Sending..." width="91" height="19" />';
		ajaxSend(file, str);
	}
}

function submitComplete(obj)
{
	var dataArray = obj.getElementsByTagName('error');
	var dataArrayLen = dataArray.length;
	var insertData;
	
	if (dataArrayLen != 0) {
		insertData = '<span class="error">ERROR:</span> The following error(s) occurred during submission:<ul>';
		for (var i = 0; i < dataArrayLen; i++) {
			insertData += '<li>' + dataArray[i].firstChild.data + '</li>';
		}
		insertData += '</ul>';
	}
		
	dataArray = obj.getElementsByTagName('success');
	dataArrayLen = dataArray.length;

	if (dataArrayLen != 0) {
		insertData = '<b>SUCCESS:</b> ' + dataArray[0].firstChild.data;
	}

	document.getElementById('msg').innerHTML = insertData;		
	document.getElementById('sending').innerHTML = '';
}

function getFormValues(fobj, valFunc)
{
	var str = '';
	
	for (var i = 0; i < fobj.elements.length; i++) {
		switch (fobj.elements[i].type) {
			case 'text':
				if (valFunc != null) {
					if (fobj.elements[i].name == 'email') {
						submit = valFunc(fobj.elements[i].name, fobj.elements[i].value, 'isEmail');
					} else {
						submit = valFunc(fobj.elements[i].name, fobj.elements[i].value, 'nEmpty');
					}
				}
				str += fobj.elements[i].name + '=' + escape(fobj.elements[i].value) + '&';
				break;
			case 'textarea':
				if (valFunc != null) {
					submit = valFunc(fobj.elements[i].name, fobj.elements[i].value, 'nEmpty');
				}
				str += fobj.elements[i].name + '=' + escape(fobj.elements[i].value) + '&';
				break;
		}
	}
	
	str = str.substr(0, (str.length - 1));
	
	return str;
}

function validate(name, val, type)
{
	var valid = true;
	var cmd = '';
	
	switch(type) {
		case 'nEmpty':
			if (val == '') valid = false;
			break;
		case 'isEmail':
			if (val.indexOf('@') == '-1' ||
				val.indexOf('.') == '-1' ||
				val == '') valid = false;
			break;
	}
	
	if (!valid) {
		cmd = "document.getElementById('" + name + "_td').className = 'error'";
		eval(cmd);
		return false;
	}

	return true;
}

function clearForm(fobj, clearValues)
{
	var cmd = '';
	
	document.getElementById('msg').innerHTML = '';
	document.getElementById('sending').innerHTML = '';
	
	for (var i = 0; i < fobj.elements.length; i++) {
		switch (fobj.elements[i].type) {
			case 'text':
				if (clearValues) {
					fobj.elements[i].text = '';
					fobj.elements[i].value = '';
				}
				cmd = "document.getElementById('" + fobj.elements[i].name + "_td').className = ''";
				eval(cmd);
				break;
			case 'textarea':
				if (clearValues) {
					fobj.elements[i].text = '';
					fobj.elements[i].value = '';
				}
				cmd = "document.getElementById('" + fobj.elements[i].name + "_td').className = ''";
				eval(cmd);
				break;
		}
	}
}

