var listed_people_in_year_and_sem = new Array ();
var lists_loaded = 0;

function _load_lists () {
	if (lists_loaded)
		return;
	var markers = document.getElementsByTagName ('list_marker');
	var i;
	
	for (i = 0; i < markers.length; i++) {
		var elem = markers.item(i);
		var list_id   = elem.getAttribute ('list_id');
		var list_name = elem.getAttribute ('list_name');
		var inputs = document.getElementsByTagName ('input');
		var j;

		for (j = 0; j < inputs.length; j++) {
			var inp = inputs.item (j);
			if (inp.getAttribute ('type') == 'hidden')
			if (inp.getAttribute ('name').split ('[')[0] == list_name) {
				addListedPersonToListById (inp.getAttribute ('value'), list_id);
			}
		}
	}
	lists_loaded = 1;
}

function addListedPersonToList (pers, list) {
	list[pers] = true;
}

function _safe_get_listed_people (node) {
	if ('undefined' == typeof (node.listed_people)) {
		node.listed_people = new Array ();
	}
	return node.listed_people;
}

function isPersonInListByListId (pers, list_id) {
	_load_lists ();
	var node = document.getElementById (list_id);
	var list = _safe_get_listed_people (node);
	return true == list[pers];
}

function addListedPersonToListById (pers, list_id) {
	var node = document.getElementById (list_id);
	var list = _safe_get_listed_people (node);
	list[pers] = true;
}

function setListedPersonInSemesterAndYearTo (pers, sem, year, val) {
	listed_people_in_year_and_sem [year+'|'+sem+'|'+pers] = val;
}

function addListedPersonInSemesterAndYear (pers, sem, year) {
	incPageDirty ();
	setListedPersonInSemesterAndYearTo (pers, sem, year, true);
}

function removeListedPersonInSemesterAndYear (pers, sem, year) {
	incPageDirty ();
	setListedPersonInSemesterAndYearTo (pers, sem, year, false);
}

function checkPersonInSemesterAndYear (pers,sem,year) {
	return true == listed_people_in_year_and_sem [year+'|'+sem+'|'+pers];
}

function addNewCoordinatorFrom (node, list_elem_id, list_elem_name) {
	var list_elem = document.getElementById (list_elem_id);
	var list = _safe_get_listed_people (list_elem);
	if (!isPersonInListByListId (node.value, list_elem_id)) {
		incPageDirty ();
		addListedPersonToListById  (node.value, list_elem_id);
		addToList (list_elem, mutateSelector (node, 'new_' + list_elem_name));
		node.selectedIndex = 0;
	} else {
		node.selectedIndex = 0;
		alert ("That faculty member is already in the list");
	}
}

function addNewInstructorFrom (node, year, sem) {
		var list = document.getElementById ('instructor_list_'+year+'_'+sem);
		if ('other' == node.value) {
			addToList (list, other_mutateSelector (node, year, sem));
		} else {
			if (checkPersonInSemesterAndYear (node.value, sem, year) != true) {	
				addListedPersonInSemesterAndYear (node.value, sem, year);
				addToList (list, inst_mutateSelector (node, year, sem));
			} else {
				node.selectedIndex = 0;
				alert ("That faculty member is already in the list");
			}
		}
		node.selectedIndex = 0;
}

function addToList (list, node) {
	var li = document.createElement ('li');
	li.appendChild (node);
	list.appendChild (li);
}

var counter = 0;

function other_deselect (id) {
	var inp = document.getElementById ('input_for_' + id);
	var del = document.getElementById ('delete_for_' + id);
	common_deselect (id, inp, inp, del, 'other_reselect');
}

function deselect (id) {
	incPageDirty ();
	var inp = document.getElementById ('input_for_' + id);
	var text= document.getElementById ('text_for_' + id);
	var del = document.getElementById ('delete_for_' + id);
	common_deselect (id, inp, text, del, 'reselect');
}

function common_deselect (id, inp, text, del, resel) {
	inp.oldvalue = inp.value;
	inp.value    = 'remove';
		
	text.setAttribute ('class', text.getAttribute ('class') + ' struck');
	del.setAttribute  ('onclick', resel + " ('"+id+"');");
	del.setAttribute  ('value', 'Re-Add');
}

function other_reselect (id) {
	var inp = document.getElementById ('input_for_' + id);
	var text= inp;
	var del = document.getElementById ('delete_for_' + id);

	inp.value = inp.oldvalue;
	text.setAttribute ('class', text.getAttribute ('class').replace (/struck/, ''));
	del.setAttribute ('onclick', "other_deselect ('"+id+"')");
	del.setAttribute  ('value', 'Remove');
}

function reselect (id) {
	var inp = document.getElementById ('input_for_' + id);
	var text= document.getElementById ('text_for_' + id);
	var del = document.getElementById ('delete_for_' + id);

	inp.value = inp.oldvalue;
	text.setAttribute ('class', text.getAttribute ('class').replace (/struck/, ''));
	del.setAttribute ('onclick', "deselect ('"+id+"')");
	del.setAttribute  ('value', 'Remove');
}

function mutateSelector (selector, name) {
	counter++;
	var id  = 'input_for_' + counter;
	var tid = 'text_for_' + counter;
	var df  = document.createDocumentFragment ();
	var inp = document.createElement ('input');
	inp.setAttribute ('type', 'hidden');
	inp.setAttribute ('value', selector.value);
	inp.setAttribute ('name', name + '[]');
	inp.setAttribute ('id', id);
	var text = document.createElement ('span');
	text.appendChild (
		document.createTextNode (selector.options[selector.selectedIndex].text));
	text.setAttribute ('id', tid);
	text.setAttribute ('class', 'distinctive_person_name');
	var del  = document.createElement ('input');
	del.setAttribute ('type', 'button');
	del.setAttribute ('onclick', "deselect ('"+counter+"')");
	del.setAttribute ('value', 'Remove')
	del.setAttribute ('id', 'delete_for_' + counter);
	df.appendChild (inp);
	df.appendChild (del);
	df.appendChild (text);
	return df;
}

function inst_mutateSelector (selector, year, sem) {
	counter++;
	var id  = 'input_for_' + year + '_' + sem + '_' + counter;
	var tid = 'text_for_' + year + '_' + sem + '_' + counter;
	var df  = document.createDocumentFragment ();
	var inp = document.createElement ('input');
	inp.setAttribute ('type', 'hidden');
	inp.setAttribute ('value', selector.value);
	inp.setAttribute ('name', 'new_instructors['+year+']['+sem+'][]');
	inp.setAttribute ('id', id);
	var text = document.createElement ('span');
	text.appendChild (
		document.createTextNode (selector.options[selector.selectedIndex].text));
	text.setAttribute ('id', tid);
	text.setAttribute ('class', 'distinctive_person_name');
	var del  = document.createElement ('input');
	del.setAttribute ('type', 'button');
	del.setAttribute ('onclick', "deselect ('"+year+'_'+sem+'_'+counter+"')");
	del.setAttribute ('value', 'Remove')
	del.setAttribute ('id', 'delete_for_' + year + '_' + sem + '_' + counter);
	var uri  = document.createElement ('input');
	uri.setAttribute ('type', 'text');
	uri.setAttribute ('value', '');
	uri.setAttribute ('id', 'url_input_' + (++counter));
	uri.setAttribute ('name', 'new_url['+year+']['+sem+'][]');
	var lab  = document.createElement ('label');
	lab.setAttribute ('for', uri.getAttribute ('id'));
	lab.appendChild  (document.createTextNode ('Class webpage url: '));
	df.appendChild (inp);
	df.appendChild (del);
	df.appendChild (text);
	df.appendChild (lab);
	df.appendChild (uri);
	return df;
}

function other_mutateSelector (selector, year, sem) {
	counter++;
	var id  = 'input_for_' + year + '_' + sem + '_' + counter;
	var tid = 'text_for_' + year + '_' + sem + '_' + counter;
	var df  = document.createDocumentFragment ();
	var inp = document.createElement ('input');
	inp.setAttribute ('type', 'text');
	inp.setAttribute ('value', 'Fill In Name Here');
	inp.setAttribute ('name', 'new_instructors['+year+']['+sem+'][]');
	inp.setAttribute ('class', 'distinctive_person_name');
	inp.setAttribute ('id', id);
	inp.prior_value = selector.value;
	//inp.setAttribute ('onchange', 'removeListedPersonInSemesterAndYear (this.prior_value, "' + sem + '", "' + year + '"); this.prior_value = this.value; addListedPersonInSemesterAndYear (this.value, "' + sem + '", "' + year + '");');
	var del  = document.createElement ('input');
	del.setAttribute ('type', 'button');
	del.setAttribute ('onclick', "other_deselect ('"+year+'_'+sem+'_'+counter+"')");
	del.setAttribute ('value', 'Remove')
	del.setAttribute ('id', 'delete_for_' + year + '_' + sem + '_' + counter);
	var uri  = document.createElement ('input');
	uri.setAttribute ('type', 'text');
	uri.setAttribute ('value', '');
	uri.setAttribute ('id', 'url_input_' + (++counter));
	uri.setAttribute ('name', 'new_url['+year+']['+sem+'][]');
	var lab  = document.createElement ('label');
	lab.setAttribute ('for', uri.getAttribute ('id'));
	lab.appendChild  (document.createTextNode ('Class webpage url: '));
	df.appendChild (del);
	df.appendChild (inp);
	df.appendChild (lab);
	df.appendChild (uri);
	return df;
}
