function setFocus (id) {
	if (id == "staff") {
		var u = document.getElementById('user'); // Login form field #1
		var r = document.getElementById('name'); // Register form field #1
		if (u != null) {
			u.focus(); // Login form gets precedence.
		}
	}
	//alert('JS is working.');
}

function clearField (field) {
	if (field.value == field.defaultValue) {
		field.value='';
	}
}

function resetField (field) {
	if (field.id == "pass" && field.value == field.defaultValue) {
		field.type='password';
		field.value='';
	}
	if (field.id.match(/reset-[a-z]+/) != null) {
		var id = field.id.replace("reset","edit");
		var def = document.getElementById(id).defaultValue;
		document.getElementById(id).value = def;
		if (field.id == "reset-pubdate" || field.id == "time-reset") {
			document.getElementById("time-reset").checked = 'checked';
		}
		if (field.id == "reset-title") {
			var def = document.getElementById('title').defaultValue;
			if (def == null || def == "" || def == undefined || def == "untitled" || def == "Untitled") {
				document.getElementById("notitle").checked = 'checked';
				document.getElementById("title").disabled = 'disabled';
			}
		}
	}
}

function validEmail (check) {
	var exp = /[a-zA-Z0-9_\-\.]+@(\[?)[a-zA-Z0-9-]+\.([a-z]{2,4})(\]?)$/;
	var match = exp.exec(check);
	var evil = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;

	if (match != null && match[0] == check && !evil.test(check)) {
		var ret = true;
	} else {
		var ret = false;
	}

	return ret;
}

function validLink (check) {
	var exp = /[a-zA-Z0-9\-]+\.([a-z]{2,4})$/;
	var exp2 = /[a-zA-Z0-9\-]+\.([a-z]{2,4})\/{1}/;
	var match = exp.exec(check);
	var match2 = exp2.exec(check);
	var evil = /(\.\.)|([^:]\/\/)|(^\.)|(\.$)|[#\?\\]/;

	if ((match != null || match2 != null) && (match[0] == check || match2[0] == check) && !evil.test(check)) {
		var ret = true;
	} else {
		var ret = false;
	}

	return ret;
}

function validFile () {
	var valid = false;
	var name = prompt("Please enter a filename for the new feed. Names must be alphanumeric, and three or more letters. (But try to keep them short.) I'll add the extension for you. For example, the DaydreamersRealm feed is 'ddr'. The pisa online feed is 'updates'.","");

	while (name == null || name == "") {
		name = prompt("You do need to give me a name. If you don't want to add a new feed, just hit 'Cancel'.","");
	}

	var alpha = /^[a-zA-Z0-9]{3,}$/;
	var match = alpha.test(name);
	if (match === true) {
		document.getElementById('newfilename').value = name;
		valid = true;
	} else {
		alpha = /^[a-zA-Z0-9]{1,}$/;
		var amatch = alpha.test(name);
		var num = /^.{3,}$/;
		var nmatch = num.test(name);
		var str = "What part of ";
		if (amatch === false) { str += "alphanumeric"; }
		if (amatch === false && nmatch === false) { str += " and "; }
		if (nmatch === false) { str += "three or more letters/numbers"; }
		str += " was so hard?";

		name = prompt(str,"");
		while (name == null || name == "") {
			name = prompt("You do need to give me a name. If you don't want to add a new feed, just hit 'Cancel'.","");
			if (name == false) { break; }
		}

		var alpha = /^[a-zA-Z0-9]{3,}$/;
		var match = alpha.test(name);
		if (match === true) {
			document.getElementById('newfilename').value = name;
			valid = true;
		} else {
			alert("Stop wasting my time. I put effort into this stuff, you're just trying to break it.");
			valid = false;
		}
		valid = false;
	}

	var count = document.getElementById('feeds').value;
	var i=0;
	for (i = 0; i < count; i++) {
		if (name+".xml" == document.getElementById('feed'+i).value) {
			alert("That name is already taken. Please try again.");
			valid = false;
			validFile();
			break;
		}
	}

	return valid;
}

function checkForm (form) {
	var valid = true;

	for (i = 0; i < (form.length - 1); i++) {
		var id = form.elements[i].id;
		var val = form.elements[i].value;
		if (val.length < 3) {
			valid = false;
			document.getElementById(id).value = "";
			document.getElementById(id).focus();
			break;
		}
	}
	return valid;
}

function checkPost (form) {
	var valid = true;

	if (document.getElementById('action').value != "new") {
		for (i = 0; i < (form.length - 1); i++) {
			var id = form.elements[i].id;
			var val = form.elements[i].value;
			if (id == "edit-guid" && val == "") {
				valid = false;
				document.getElementById(id).focus();
				break;
			} else if (id == "edit-pubdate") {
				if (val == "") {
					valid = false;
					document.getElementById(id).focus();
					break;
				} else if (val.search(/^(It is now: )/) != -1) {
					valid = false;
					document.getElementById(id).focus();
					break;
				}
				var d3 = /^Sun$|^Mon$|^Tue$|^Wed$|^Thu$|^Fri$|^Sat$/;
				var m3 = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/;
				var days = /^Sunday$|^Monday$|^Tuesday$|^Wednesday$|^Thursday$|^Friday$|^Saturday$/;
				var months = /^January$|^February$|^March$|^April$|^May$|^June$|^July$|^August$|^September$|^October$|^November$|^December$/;
				var num = /^[0-9]{2}$|^[0][1-9]{1}$|^(^00)$/;
				var year = /^20[0-9]{2}$|^19[0-9]{2}$/;
				var time = /^[0-9]{1,2}:[0-9]{2}(:[0-9]{2})/;
				var adds = /AM|PM|am|pm|EST|PST|EDT|PDT|UTC|GMT/;
				var okay = /[,\.\/-]{1}/;
				var array = val.split(" ");
				var index = 0;
				while (valid) {
					var match = false;
					if (array[index].search(okay) != -1) {
						array[index] = array[index].replace(okay,"");
					}
					if (match == false) {
						if (array[index].search(d3) != -1) {
							match = true;
						} else if (array[index].search(m3) != -1) {
							match = true;
							month = true;
						} else if (array[index].search(months) != -1) {
							match = true;
							month = true;
						} else if (array[index].search(days) != -1) {
							match = true;
						} else if (array[index].search(year) != -1) {
							match = true;
							year = true;
						} else if (array[index].search(num) != -1) {
							match = true;
							date = true;
						} else if (array[index].search(time) != -1) {
							match = true;
							time = true;
						} else if (array[index].search(adds) != -1) {
							match = true;
						}
					}
					if (match == true) {
						index++;
					} else {
						valid = confirm("I don't recognize '"+array[index]+"'. If I should and I'm just an idiot, go ahead and click OK. If this is an error, click 'Cancel' to go back and change it.");
						index++;
						if (valid == false) {
							document.getElementById(id).focus();
							break;
						}
					}
					if (month == true && year == true && date == true && time == true) {
						valid = confirm("I need day, month, year (and I'd like a time) to process this update. If you've given everything you want to (or I'm processing this wrong) hit OK. 'Cancel' will go back.");
						if (valid == false) {
							document.getElementById(id).focus();
							break;
						}
					}
				}
			} else if (id == "edit-link" && !validLink(val) && val != "") {
				valid = false;
				document.getElementById(id).focus();
				break;
			} else if (id == "edit-post" && (val.length == 0 || val == null || val == "")) {
				valid = false;
				document.getElementById(id).focus();
				break;
			} else if (id == "feed-title" && val == "") {
				valid = false;
				document.getElementById(id).focus();
				break;
			} else if (id == "feed-desc" && val == "") {
				valid = false;
				document.getElementById(id).focus();
				break;
			}
		}
	}
	return valid;
}

function fixDates (dates,fmt) {
	if (dates == "") {
		dates = document.getElementsByName('date');
	}

	var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var days = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

	if (fmt == undefined) {
		for (i = 0; i < dates.length; i++) {
			var str = dates[i].innerHTML;
			var date = new Date(str);
			var fin;

			fin = date.getDate();
			fin += " ";
			fin += months[date.getMonth()];

			dates[i].innerHTML = fin;
		}
	} else {
		var i = 0;
		for (i = 0; i < dates.length; i++) {
			var curr = dates[i].innerHTML;
			var letters = new Array();
			var values = new Array();
			var date = new Date(curr);
			var fin = "";

			letters[0] = 'D';

			values[0] = (days[date.getDay()]).substr(0,3);

			letters[1] ='l';
			values[1] = days[date.getDay()];

			letters[2] = 'j';
			values[2] = date.getDate();

			letters[3] = 'F';
			values[3] = months[date.getMonth()];

			letters[4] = 'M';
			values[4] = months[date.getMonth()].substr(0,3);

			letters[5] = 'n';
			values[5] = date.getMonth();

			letters[6] = 'Y';
			values[6] = date.getFullYear();

			letters[7] = 'G';
			values[7] = date.getHours();

			letters[8] = 'H';
			if (date.getHours() < 10) { values[8] = "0" + date.getHours(); }
			else { values[8] = date.getHours(); }

			if (date.getHours() > 12) {
				letters[9] = 'g';
				values[9] = date.getHours() - 12;
				letters[10] = 'h';
				values[10] = date.getHours() - 12;
				if (values[10] < 10) { values[10] = "0" + values[10]; }
				letters[11] = 'a';
				values[11] = "pm";
				letters[12] = 'A';
				values[12] = "PM";
			} else {
				letters[9] = 'g';
				if (date.getHours() == 0) { values[9] = "12"; }
				else { values[9] = date.getHours(); }
				letters[10] = 'h';
				if (date.getHours() == 0) { values[10] = "12"; }
				else { values[10] = date.getHours(); }
				if (values[10] < 10) { values[10] = "0" + values[10]; }
				letters[11] = 'a';
				values[11] = "am";
				letters[12] = 'A';
				values[12] = "AM";
			}

			letters[13] = 'i';
			values[13] = ""+date.getMinutes();
			if (values[13] < 10) { values[13] = "0" + values[13]; }

			letters[14] = 's';
			values[14] = date.getSeconds();
			if (values[14] < 10) { values[14] = "0" + values[14]; }

			letters[15] = 'T';
			values[15] = date.toString();
			values[15] = values[15].substr(values[15].indexOf("(")+1);
			values[15] = values[15].substr(0,values[15].length-1);

			letters[16] = 'r';
			values[16] = date.toString();

			letters[17] = 'd';
			if (date.getDate() < 10) { values[17] = "0"+date.getDate(); }
			else { values[17] = date.getDate(); }

			letters[18] = 'S';
			if (date.getDate() >= 20) {
				extra = ""+date.getDate();
				extra = extra.substr(extra.length-1);
			} else {
				extra = date.getDate();
			}
			if (extra == 1) { values[18] = "st"; }
			else if (extra == 2) { values[18] = "nd"; }
			else if (extra == 3) { values[18] = "rd"; }
			else { values[18] = "th"; }

			var temp = fmt.split("");
			var j = 0;
			for (j = 0; j < fmt.length; j++) {
				var letter = temp[j];
				var found = false;
				var k = 0;
				for (k = 0; k < letters.length; k++) {
					if (letter == letters[k]) {
						fin += values[k];
						found = true;
						break;
					} else {
						continue;
					}
				}
				if (found == false) {
					if (letter.match(/[^a-zA-Z]/) != null) { // It's not a letter...
						fin += ""+letter;
					} else {
						alert("Error: Format response for character '"+letter+"' not found. Please check your format, and alert Marie if there's a function she hasn't implemented.");
					}
				}
			}
			dates[i].innerHTML = fin;
		}
	}
}

/*
function sendBox (id) {
	var send = document.getElementById(id+'-current');
	if (send == "undefined" || send == "null") { alert("Can't find the current-box field."); }
	var box = document.getElementById(id+'-box');
	if (box == "undefined" || box == "null") { alert("Can't find the box itself."); }
	document.getElementById(id+'-current').value = box.innerHTML;
	return true;
}
*/

function updateBox (field,id) {
	if (field.type == "text") {
		if (field.name == "title") {
			document.getElementById(id+'-'+field.name).innerHTML = field.value;
		}
		/*else if (field.name == "id") { // special case for changing the name of a section

		}*/
		else { // it's from a table cell - hard to specify by name
			/*
			Tables render as 'table-row-cell'
				<td><div id='t-r1-c1'></div><div id='t-r1-c2'></div></td>
				- Some tables are just one row of another table: 'row2-r1-c1'
				- Some can have headings, like a calendar. 't-Mon-c1', 't-Mon-c2'
			Cell inputs are named the same as the div #ids. 'table-row-cell'
				- Some cells can have headings... 't-Monday-opentime', 't-Monday-closetime'
			*/
			document.getElementById(field.name).innerHTML = field.value;
		}
	}
	else if (field.type == "radio" || field.type == "checkbox") {
		if ((field.name == "edit" || field.name == "login") && field.value == "yes") {
			document.getElementById(id+'-'+field.name).style.display = 'inline';
		}
		else if ((field.name == "edit" || field.name == "login") && field.value == "no") {
			document.getElementById(id+'-'+field.name).style.display = 'none';
		}
		else { // row type buttons - hard to specify by name
			var bname = field.name;
			bname = bname.replace(/-type/,"");
			var text = document.getElementsByName(bname+'-cdata');
			text = text[0].value;
			if (field.value == "paragraph") {
				text = text.replace(/\n/g,"</p>\n<p>");
				document.getElementById(id+'-'+bname).innerHTML = '<p>'+text+'</p>';
			} else if (field.value == "plain") {
				text = text.replace(/\n/g,"<br />\n");
				document.getElementById(id+'-'+bname).innerHTML = text;
			}
		}
	}
	else if (field.type == "textarea") {
		var aname = field.name;
		aname = aname.replace(/-cdata/,"");
		var types = document.getElementsByName(aname+'-type');
		var i = 0;
		var type;
		for (i = 0; i < types.length; i++) {
			if (types[i].checked) { type = types[i].value; }
		}
		var text = field.value;
		if (type == "paragraph") {
			text = text.replace(/\n/g,"</p>\n<p>");
			document.getElementById(id+'-'+aname).innerHTML = '<p>'+text+'</p>';
		} else {
			text = text.replace(/\n/g,"<br />\n");
			document.getElementById(id+'-'+aname).innerHTML = text;
		}
	}
}

function exportData (button) {
	if (button.type == "radio" && button.checked) {
		document.getElementById(button.name).value = button.value;
	} else if (button.type == "checkbox") {
		var bid = button.id;
		bid = bid.replace(/display-/,"");
		var checked;
		var val;
		if (button.checked) {
			checked = "";
			val = "yes";
		} else {
			checked = "not ";
			val = "no";
		}
		document.getElementById(button.name).value = val;
	}
}

function showHide(id) {
	var action = id.substring(0,id.indexOf('-'));
	var what = id.substring(id.indexOf('-')+1);
	var pieces = document.getElementsByName(what);
	var p;
	if (action == "show") {
		for (p = 0; p < pieces.length; p++) {
			pieces[p].style.display='';
		}
		document.getElementById('show-'+what).style.display='none';
		document.getElementById('hide-'+what).style.display='';
		if (what == "markup") {
			var sects = document.getElementsByName('sectbox');
			var s;
			for (s = 0; s < sects.length; s++) {
				sects[s].style.border='1px solid black';
			}
		}
	} else if (action == "hide") {
		for (p = 0; p < pieces.length; p++) {
			pieces[p].style.display='none';
		}
		document.getElementById('show-'+what).style.display='';
		document.getElementById('hide-'+what).style.display='none';
		if (what == "markup") {
			var sects = document.getElementsByName('sectbox');
			var s;
			for (s = 0; s < sects.length; s++) {
				sects[s].style.border='0px';
			}
		}
	}
}
