user = 'my';

function setup() {
	pickerLog('Program loaded');
	ge('name').focus();
}

function pickerLog(msg) {
	var log = ge('log');
	if (typeof(logcount) == 'undefined') {
		logcount = 1;
	} else {
		logcount++;
	}
	log.innerHTML = '\n			<li>'+logcount+'. '+msg+'</li>' + log.innerHTML; // Replaces the following (log size no longer limited).
}

function updateListAdd(response) {updateList('add',name);pickerLog(response)}
function updateListUpdate(response) {pickerLog(response)}
function updateListRm(response) {pickerLog(response)}

function add() {
	name = ge('name').value.substring(0,1).toUpperCase() + ge('name').value.substring(1,99);
	var rating = ge('rating').options[ge('rating').selectedIndex].value;
	ajax('?update='+name+'&rating='+rating,updateListAdd);
	return false;
}

function up(name) {
	var mrating = parseInt(ge(name+'-my-rating').className.substring(1,2));
	var trating = parseInt(ge(name+'-their-rating').className.substring(1,2));
	var rating;
	if (user == 'my') {
		mrating = mrating == 5 ? mrating : mrating+1;
		rating = mrating;
	} else {
		trating = trating == 5 ? trating : trating+1;
		rating = trating;
	}
	ajax('?update='+name+'&rating='+rating+'&dir=up',updateListUpdate);
	updateList('update',name,mrating,trating);
}

function dn(name) {
	name = name; // globalize
	var mrating = parseInt(ge(name+'-my-rating').className.substring(1,2));
	var trating = parseInt(ge(name+'-their-rating').className.substring(1,2));
	var rating;
	if (user == 'my') {
		mrating = mrating == 1 ? mrating : mrating-1;
		rating = mrating;
	} else {
		trating = trating == 1 ? trating : trating-1;
		rating = trating;
	}
	ajax('?update='+name+'&rating='+rating+'&dir=down',updateListUpdate);
	updateList('update',name,mrating,trating);
}

function rm(name) {
	name = name; // globalize
	var mrating = ge(name+'-my-rating').className.substring(1,2);
	var trating = ge(name+'-their-rating').className.substring(1,2);
	if (user == 'my') {
		mrating = 0;
	} else {
		trating = 0;
	}
	if (mrating == 0 && trating == 0) {
		ajax('?rm='+name,updateListRm);
		updateList('rm',name);
	} else {
		ajax('?update='+name+'&rating=0',updateListRm);
		updateList('update',name,mrating,trating);
	}
}

function updateList(action,name,mrating,trating) {
	if (action == 'add') {
		if (ge('no-names-message')) {
			var nnm = ge('no-names-message')
			var p = nnm.parentNode;
			de(nnm);
			p.innerHTML += '<td class="'+let[0]+'-names"><ul id="my-names"></ul></td><td class="'+let[1]+'-names"><ul id="their-names"></ul></td><td class="both-names"><ul id="both-names"></ul></td><td class="favorite-names"><ul id="favorite-names"></ul></td>';
		}
		var rating = ge('rating').options[ge('rating').selectedIndex].value;
		var mrating = user == 'my' ? rating : '0';
		var trating = user == 'their' ? rating : '0';
		var prev = ge(name);
		if (prev) {
			mrating = ge(name+'-my-rating').className.substring(1,2);
			trating = ge(name+'-their-rating').className.substring(1,2);
			if (user == 'my') {
				mrating = rating;
			} else {
				trating = rating;
			}
			var list = '';
			if (mrating > 0 && trating == 0) {
				list = ge('myNames');
			} else if (mrating > 0 && trating > 0 && (trating < 5 || mrating < 5)) {
				list = ge('mytheirNames');
			} else if (trating > 0 && mrating == 0) {
				list = ge('theirNames');
			} else if (trating == 5 && mrating == 5) {
				list = ge('BothNames');
			}
			if (prev.parentNode.id == list.id && prev.className == 'r'+rating) {
				// TODO: do nothing here, clean this up.
				alert('doin nuttin');
			} else if (prev.parentNode.id == list.id) {
				pickerLog('Updated your rating of '+name);
				updateRow(prev,rating,mrating,trating);
			} else {
				if (prev.className == 'r0') {
					pickerLog('Added your rating of '+name);
				} else {
					pickerLog('Updated your rating of '+name);
				}
				prev.parentNode.removeChild(prev);
				list.innerHTML = list.innerHTML+'					<li class="r'+rating+'" id="'+name+'"><small onmousedown="return false"><b><a class="rm" onclick="rm(\''+name+'\')"></a><a class="dn" onclick="dn(\''+name+'\')"></a><a class="up" onclick="up(\''+name+'\')"></a></b><i id="'+name+'-my-rating" class="r'+mrating+'"><img src="/i/blank.gif" alt="" class="'+let[0]+'"/></i> <i id="'+name+'-their-rating" class="r'+trating+'"><img src="/i/blank.gif" alt="" class="'+let[1]+'"/></i></small>'+name+'</li>\n';
			}
		} else {
			var list = ge(user+'-names');
			list.innerHTML = list.innerHTML + '					<li class="r'+rating+'" id="'+name+'"><small onmousedown="return false"><b><a class="rm" onclick="rm(\''+name+'\')"></a><a class="dn" onclick="dn(\''+name+'\')"></a><a class="up" onclick="up(\''+name+'\')"></a></b><i id="'+name+'-my-rating" class="r'+mrating+'"><img src="/i/blank.gif" alt="" class="'+let[0]+'"/></i> <i id="'+name+'-their-rating" class="r'+trating+'"><img src="/i/blank.gif" alt="" class="'+let[1]+'"/></i></small>'+name+'</li>\n';
		}
		ge('name').value = '';
		ge('name').focus();
	} else if (action == 'rm') {
		de(ge(name));
		tr = ge('list'); // TODO FIXME: var this
		tr = tr.childNodes[1].childNodes[2];
		if (tr.childNodes[4] && !tr.childNodes[7] && tr.childNodes[1].childNodes[0].innerHTML == false && tr.childNodes[2].childNodes[0].innerHTML == false && tr.childNodes[3].childNodes[0].innerHTML == false && tr.childNodes[4].childNodes[0].innerHTML == false) {
			tr.innerHTML = '<td id="no-names-message" colspan="4" style="color:#bbb;font-family:Georgia,\'Times New Roman\',Times,serif;letter-spacing:2px;padding:5px;text-align:center"><em>No names in this list.</em></td>';
		} else if (tr.childNodes[7] && tr.childNodes[1].childNodes[1].innerHTML == false && tr.childNodes[3].childNodes[1].innerHTML == false && tr.childNodes[5].childNodes[1].innerHTML == false && tr.childNodes[7].childNodes[1].innerHTML == false) {
			tr.innerHTML = '<td id="no-names-message" colspan="4" style="color:#bbb;font-family:Georgia,\'Times New Roman\',Times,serif;letter-spacing:2px;padding:5px;text-align:center"><em>No names in this list.</em></td>';
		}
//		if (ge('no-names-message')) {
//			var nnm = ge('no-names-message')
//			var p = nnm.parentNode;
//			de(nnm);
//			p.innerHTML += '<td class="'+let[0]+'-names"><ul id="my-names"></ul></td><td class="'+let[1]+'-names"><ul id="their-names"></ul></td><td class="both-names"><ul id="both-names"></ul></td><td class="favorite-names"><ul id="favorite-names"></ul></td>';
//		}
	} else if (action == 'update') {
		if (user == 'my') {
			rating = mrating;
		} else {
			rating = trating;
		}
		var nameNode = ge(name);
		var list = '';
		if (mrating > 0 && trating == 0) {
			list = ge('my-names');
		} else if (trating > 0 && mrating == 0) {
			list = ge('their-names');
		} else if (mrating > 0 && trating > 0 && (trating < 5 || mrating < 5)) {
			list = ge('both-names');
		} else if (trating == 5 && mrating == 5) {
			list = ge('favorite-names');
		}
		if (nameNode.parentNode.id == list.id) {
			updateRow(nameNode,rating,mrating,trating);
		} else {
			nameNode.parentNode.removeChild(nameNode);
			list.innerHTML = list.innerHTML+'					<li class="r'+rating+'" id="'+name+'"><small onmousedown="return false"><b><a class="rm" onclick="rm(\''+name+'\')"></a><a class="dn" onclick="dn(\''+name+'\')"></a><a class="up" onclick="up(\''+name+'\')"></a></b><i id="'+name+'-my-rating" class="r'+mrating+'"><img src="/i/blank.gif" alt="" class="'+let[0]+'"/></i> <i id="'+name+'-their-rating" class="r'+trating+'"><img src="/i/blank.gif" alt="" class="'+let[1]+'"/></i></small>'+name+'</li>\n';
		}
	}
}

function updateRow (nameNode,rating,mrating,trating) {
	nameNode.className = 'r'+rating;
	ge(nameNode.id+'-my-rating').className = 'r'+mrating;
	ge(nameNode.id+'-their-rating').className = 'r'+trating;
}

function pickerRename(t) {
	dialogue('Rename List','Rename list "<b>'+t.parentNode.parentNode.childNodes[0].childNodes[0].innerHTML+'</b>" to: <input type="text" id="rename-list-to" maxlength="64"/>','renameList(\''+t.parentNode.parentNode.childNodes[0].childNodes[0].id+'\')');
	ge('rename-list-to').focus();
}

function renameList(id) {
	id = id.replace('list','');
	var renameto = ge('rename-list-to').value;
	ajax('?rename='+id+'&newname='+renameto,renameListResult);
}

function renameListResult(r) {
	if (r.match('Renamed list ')) {
		r = r.replace('Renamed list ','');
		r = r.split(' to ');
		ge('list'+r[0]).innerHTML = r[1];
	} else {
		dialogue('Rename Failed',r);
	}
}

function pickerDelete(t) {
	var listid = t.parentNode.parentNode.childNodes[0].childNodes[0].id.replace('list','');
	dialogue('Delete List','Are you sure you want to delete list "<b>'+t.parentNode.parentNode.childNodes[0].childNodes[0].innerHTML+'</b>"?','deleteList(\''+listid+'\')');
}

function deleteList(id) {
	ajax('?delete='+id,deleteListResult);
}

function deleteListResult(r) {
	if (r.match('Deleted list ')) {
		r = r.replace('Deleted list ','');
		de(ge('list'+r).parentNode.parentNode);
	} else {
		dialogue('Delete Failed',r);
	}
}

function pickerCheckUser() {
	var u = ge('new-with').value;
	if (u == '') {
		ge('new-with-result').innerHTML = '';
	} else {
		ajax('?checkuser='+u,pickerCheckUserResult);
	}
	/*
	} else if (u.match(/^\d+$/)) {
		ge('new-with-result').innerHTML = u +' appears to be a user id';
	} else { // username
		ge('new-with-result').innerHTML = u +' appears to be a user name';
	}
	*/
}

function pickerCheckUserResult(r) {
	ge('new-with-result').innerHTML = r;
}

