function $(id) {
	return document.getElementById(id);
}

function adderr(id, txt) {
	$('l_' + id).style.color = 'red';
	$('error').innerHTML = $('error').innerHTML + txt + '<br />';
	valid = false;
}

function validate() {
	valid = true;
	reg_email = new RegExp('.+@.+\..+');
	reg_email2 = new RegExp('[^a-zA-Z0-9.@_-]');
	reg_name = new RegExp('[^a-zA-Z ()"]');
	reg_plain = new RegExp('[<>]');
	reg_url = new RegExp('[^a-zA-Z0-9/_.?&+-]');
	$('error').innerHTML = '';
	$('error').style.color = 'red';

	if ($('school').value == '')
		adderr('school', 'You did not select your school.')
	else $('l_school').style.color = 'black';
	if ($('email').value == '')
		adderr('email', 'You did not enter your email.')
	else if (!reg_email.test($('email').value))
		adderr('email', 'You did not enter a valid email.')
	else if (reg_email2.test($('email').value))
		adderr('email', 'Your email contains illegal characters.')
	else $('l_email').style.color = 'black';
	if ($('name').value == '')
		adderr('name', 'You did not enter your name.')
	else if (reg_name.test($('name').value))
		adderr('name', 'Name contains illegal characters.')
	else $('l_name').style.color = 'black';
	if ($('gender').value=='')
		adderr('gender', 'You did not select your gender.')
	else $('l_gender').style.color = 'black';
	if ($('attend_from').value == '')
		adderr('attend_from', 'You did not select starting year.')
	else if ($('attend_from').value > $('attend_to').value)
		adderr('attend_from', 'Attended range is incorrect.')
	else $('l_attend_from').style.color = 'black';
	if ($('attend_to').value == '')
		adderr('attend_from', 'You did not select ending year.')
	else $('l_attend_from').style.color = 'black';
	if ($('college').value == '')
		adderr('college', 'You did not enter your college.')
	else if (reg_plain.test($('college').value))
		adderr('college', 'College contains illegal characters.')
	else $('l_college').style.color = 'black';
	if ($('company').value == '')
		adderr('company', 'You did not enter your company.')
	else if (reg_plain.test($('company').value))
		adderr('company', 'Company contains illegal characters.')
	else $('l_company').style.color = 'black';
	if ($('occupation').value == '')
		adderr('occupation', 'You did not enter your occupation.')
	else if (reg_plain.test($('occupation').value))
		adderr('occupation', 'Occupation contains illegal characters.')
	else $('l_occupation').style.color = 'black';
	if (reg_url.test($('website').value) && $('website').value != '')
		adderr('website', 'Website contains illegal characters.')
	else $('l_website').style.color = 'black';
	if (reg_plain.test($('comment').value) && $('comment').value != '')
		adderr('comment', 'Comment contains illegal characters.')
	else $('l_comment').style.color = 'black';

	if (valid) profile_add();

}

function profile_add(){
	var http_request = false;
	school = $('school').value;
	email = $('email').value;
	name = $('name').value;
	gender = $('gender').value;
	attend_from = $('attend_from').value;
	attend_to = $('attend_to').value;
	college = $('college').value;
	company = $('company').value;
	occupation = $('occupation').value;
	website = $('website').value;
	comment = $('comment').value;
	notify_update = $('notify_update').checked ? 1 : 0;
	notify_news = $('notify_news').checked ? 1 : 0;

	$('error').style.color = 'green';
	$('error').innerHTML = 'Processing request.';

	if (window.XMLHttpRequest) {
		http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) {
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

    if (!http_request) {
		$('error').style.color = 'red';
		$('error').innerHTML = 'Giving up :( Cannot create an XMLHTTP instance';
		return false;
	}

	http_request.onreadystatechange = function() { write_result(http_request); };
	http_request.open('POST', 'http://alumni.ookamikun.com/alumni_add.php', true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.send('school=' + school + '&email=' + email + '&name=' + name + '&gender=' + gender + '&attend_from=' + attend_from + '&attend_to=' + attend_to + '&college=' + college + '&company=' + company + '&occupation=' + occupation + '&website=' + website + '&comment=' + comment + '&notify_update=' + notify_update + '&notify_news=' + notify_news);
}

function write_result(http_request) {

	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			if (xmldoc.getElementsByTagName('success')[0].firstChild.data == 1) {
				document.getElementById('error').style.color = 'green';
				document.getElementById('error').innerHTML = xmldoc.getElementsByTagName('message')[0].firstChild.data;
				$('email').value = '';
				$('name').value = '';
				$('college').value = '';
				$('company').value = '';
				$('occupation').value = '';
				$('website').value = '';
				$('comment').value = '';
				$('notify_update').checked = false;
				$('notify_news').checked = false;
			}
			else 
				document.getElementById('error').style.color = 'red';
				document.getElementById('error').innerHTML = xmldoc.getElementsByTagName('message')[0].firstChild.data;
		} else {
			document.getElementById('error').style.color = 'red';
			document.getElementById('error').innerHTML = 'There was a problem with the request.';
		}
	}

}

function clearTable() {
	table = $('tblAlumni');
	rowCount = table.rows.length;
	for (i = rowCount - 1; i > 0; i--)
		table.deleteRow(i);
}

var sortBy = 'updated';
var sortDir = 'DESC';

function sort(col) {
	switch (col) {
		case 'name':
			sortDir = (sortBy == 'name' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'name';
			break;
		case 'email':
			sortDir = (sortBy == 'email' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'email';
			break;
		case 'attended':
			sortDir = (sortBy == 'attend_from' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'attend_from';
			break;
		case 'college':
			sortDir = (sortBy == 'college' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'college';
			break;
		case 'company':
			sortDir = (sortBy == 'company' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'company';
			break;
		case 'occupation':
			sortDir = (sortBy == 'occupation' && sortDir == 'ASC') ? 'DESC' : 'ASC';
			sortBy = 'occupation';
			break;
		case 'updated':
			sortDir = (sortBy == 'updated' && sortDir == 'DESC') ? 'ASC' : 'DESC';
			sortBy = 'updated';
			break;
		default:
			sortBy = 'updated';
			sortDir = 'DESC';
	}

	getProfiles();
}

function getProfiles() {
	if (window.XMLHttpRequest) {
		http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) {
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

    if (!http_request) {
		$('error').style.color = 'red';
		$('error').innerHTML = 'Giving up :( Cannot create an XMLHTTP instance';
		return false;
	}

	var school = $('fschool').value;
	var gender = $('fgender').value;
	var from = $('fattend_from').value;
	var to = $('fattend_to').value;
	var search = $('search').value;
	http_request.onreadystatechange = function() { fillTable(http_request); };
	http_request.open('GET', 'http://alumni.ookamikun.com/alumni_get.php?school=' + school + '&gender=' + gender + '&from=' + from + '&to=' + to + '&search=' + search + '&sortby=' + sortBy + '&sortdir=' + sortDir, true);
	http_request.send(null);
}

function fillTable(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML;
			var table = $('tblAlumni');
			if (xmldoc.getElementsByTagName('success')[0].firstChild.data == 1) {
				clearTable();
				rows = xmldoc.getElementsByTagName('profile').length;
				rownum = 1;
				for (i=0; i<rows; i++) {
					row = table.insertRow(rownum);
					if (!(i % 2))
						row.className = 'odd';

					cell = row.insertCell(0);
					cell.innerHTML = xmldoc.getElementsByTagName('name')[i].firstChild.data;

					cell = row.insertCell(1);
					cell.innerHTML = xmldoc.getElementsByTagName('email')[i].firstChild.data;

					cell = row.insertCell(2);
					cell.innerHTML = xmldoc.getElementsByTagName('attended')[i].firstChild.data;
					
					cell = row.insertCell(3);
					cell.innerHTML = xmldoc.getElementsByTagName('college')[i].firstChild.data;

					cell = row.insertCell(4);
					cell.innerHTML = xmldoc.getElementsByTagName('company')[i].firstChild.data;

					cell = row.insertCell(5);
					cell.innerHTML = xmldoc.getElementsByTagName('updated')[i].firstChild.data;

					rownum++;

					row = table.insertRow(rownum);
					if (!(i % 2))
						row.className = 'odd';

					row.insertCell(0);

					cell = row.insertCell(1);
					cell.colSpan = 3;
					cell.innerHTML = '<b>Website:</b> ';
					if (xmldoc.getElementsByTagName('website')[i].firstChild)
						cell.innerHTML = cell.innerHTML + '<a href="http://' + 
							xmldoc.getElementsByTagName('website')[i].firstChild.data + 
							'">' + xmldoc.getElementsByTagName('website')[i].firstChild.data + '</a>';
					cell = row.insertCell(2);
					cell.colSpan = 2;
					cell.innerHTML = '<b>Occupation</b>: ' + xmldoc.getElementsByTagName('occupation')[i].firstChild.data;



					rownum++;

					row = table.insertRow(rownum);
					if (!(i % 2))
						row.className = 'odd';

					row.insertCell(0);

					cell = row.insertCell(1);
					cell.colSpan = 6;
					if (xmldoc.getElementsByTagName('comment')[i].firstChild)
						cell.innerHTML = xmldoc.getElementsByTagName('comment')[i].firstChild.data;

					rownum++;
				}
			}
			else {
				clearTable();
				row = table.insertRow(1);
				row.className = 'odd';
				cell = row.insertCell(0);
				cell.colSpan = 7;
				cell.innerHTML = xmldoc.getElementsByTagName('message')[0].firstChild.data;
			}
		} else {
			$('error').style.color = 'red';
			$('error').innerHTML = 'There was a problem with the request.';
		}
	}

}

