function checkURLFormat(field) {

	if ( field == null || typeof( field.value ) == "undefined" || field.value.length == 0 ) return;

	var urlfield_val = field.value;

	field.value = urlfield_val.replace( /http:\/\/http:\/\//, "http://" );
}

function showDB() {
	var dblist = document.getElementById("dblistdiv");
	dblist.style.display="block";
}

function replaceDB(fieldid) {

	var copyfromfield = document.getElementById("dbsel_" + fieldid);
	var val = copyfromfield.options[copyfromfield.selectedIndex].value;	

	var copytofield = document.getElementById("thisid_" + fieldid);
	copytofield.value = val;
}

function checkDB(field, name) {

	if ( field == null || typeof( field.value ) == "undefined") return;

	var dbfield = field.value;
	var dbfield_val = dbfield.toLowerCase();
	var dbtxt = document.getElementById("thisid_" + name + "_error");
	var dbtr = document.getElementById("thisid_" + name + "_block");

	if (dbfield_val == "ebsco" || dbfield_val == "proquest" || dbfield_val == "gale" || dbfield_val == "thomson gale" ||
	    dbfield_val == "gale group" || dbfield_val == "abc-clio" || dbfield_val == "ad fontes" || dbfield_val == "alexander street press" ||
	    dbfield_val == "bridges transitions" || dbfield_val == "columbia" || dbfield_val == "columbia up" || dbfield_val == "columbia university press" ||
	    dbfield_val == "countrywatch" || dbfield_val == "cq press" || dbfield_val == "cq" || dbfield_val == "facts on file" ||
	    dbfield_val == "facts on file news services" || dbfield_val == "greenwood" || dbfield_val == "highbeam" || dbfield_val == "highbeam research" ||
	    dbfield_val == "h.w. wilson" || dbfield_val == "hw wilson" || dbfield_val == "wilson" || dbfield_val == "johns hopkins" ||
	    dbfield_val == "johns hopkins up" || dbfield_val == "johns hopkins university press" || dbfield_val == "lexisnexis" || dbfield_val == "lexis nexis" ||
	    dbfield_val == "mcgraw-hill" || dbfield_val == "mcgraw hill" || dbfield_val == "newsbank" || dbfield_val == "oclc" ||
	    dbfield_val == "oxford up" || dbfield_val == "oxford university press" || dbfield_val == "oxford" || dbfield_val == "proquest information and learning" ||
	    dbfield_val == "scholastic" || dbfield_val == "scholastic lib." || dbfield_val == "scholastic library" || dbfield_val == "world book" ||
	    dbfield_val == "accuweather" || dbfield_val == "congressional digest" || dbfield_val == "anaca" || dbfield_val == "anaca technologies" ||
	    dbfield_val == "world book" || dbfield_val == "questia media america" || dbfield_val == "discovery" || dbfield_val == "discovery education" ||
	    dbfield_val == "rosen" || dbfield_val == "credo reference" || dbfield_val == "credo" || dbfield_val == "mary ann liebert" ||
	    dbfield_val == "countryreports.org" || dbfield_val == "marshall cavendish" || dbfield_val == "marshall cavendish digital" || dbfield_val == "ap" ||
	    dbfield_val == "cobblestone" || dbfield_val == "weekly reader" || dbfield_val == "journey online")
	{
		dbtxt.innerHTML = dbfield + " is the name of a vendor. Identify the specific database you are using.";
		dbtr.style.display="block";
	} else if (dbfield_val == "ebscohost" || dbfield_val == "searchasaurus" || dbfield_val == "student research center" ||
		   dbfield_val == "firstsearch" || dbfield_val == "wilsonweb" || dbfield_val == "wilson web" || dbfield_val == "first search") {
		dbtxt.innerHTML = dbfield + " is the name of a <a href=\"http://www.noodletools.com/helpdesk/index.php?action=kb&article=44\" target=\"_blank\">search interface</a>. Instead, identify the specific database you are using.";
		dbtr.style.display="block";
	} else if (dbfield_val == "history database center" || dbfield_val == "facts.com reference suite" || dbfield_val == "cq electronic library") {
		dbtxt.innerHTML = dbfield + " is the name of a <a href=\"http://www.noodletools.com/helpdesk/index.php?action=kb&article=44\" target=\"_blank\">portal or collection of databases</a>. Instead, identify the specific database you are using.";
		dbtr.style.display="block";
	} else {
		dbtxt.innerHTML = "";
		dbtr.style.display="none";
	}
}

function highlightrow(id, turnon) {
	var hlrow = document.getElementById(id);

	if (turnon) {
		hlrow.style.backgroundColor = "#fff9e5";
	} else {
		hlrow.style.backgroundColor = "transparent";
	}
}

function highlightrows(ids, turnon) {

	var hlrow;

	for(var i=0;i < ids.length;i++) {
		hlrow = document.getElementById(ids[i]);
		if (hlrow) {
			if (turnon) {
				hlrow.style.backgroundColor = "#fff9e5";
			} else {
				hlrow.style.backgroundColor = "transparent";
			}
		}
	}
}

function testIsValidObject(objToTest) {
	if (null == objToTest) {
		return false;
	}
	if ("undefined" == typeof(objToTest) ) {
		return false;
	}
	return true;
}

function checkemail(field)
{
    var s_email = field.value;

    if (s_email.length==0)
    {
        return true;
    }

    if ((s_email.length < 6) ||
       (s_email.indexOf('@',0) < 1) ||
       (s_email.lastIndexOf('@') != s_email.indexOf('@',0)) ||
       (s_email.lastIndexOf('@') > (s_email.length - 5)) ||
       (s_email.lastIndexOf('.') > (s_email.length - 3)) ||
       (s_email.lastIndexOf('.') < (s_email.length - 4)) ||
       (s_email.indexOf('..',0) > -1) ||
       (s_email.indexOf('@.',0) > -1) ||
       (s_email.indexOf('.@',0) > -1) ||
       (s_email.indexOf(',',0) > -1))
    {
        alert("Please enter a valid e-mail address (format: name@domain.com).");
	  field.focus();
        return false;
    }
    return true;
}

function checkphone4(field)
{
    var s_phone4 = field.value;

    if (s_phone4.length==0)
    {
        return true;
    }

    var regexp = /^(\d{4})$/;
    if (!regexp.test(s_phone4))
    {
        alert("Please enter the last four digits of your phone number (format: ####).");
	field.focus();
        return false;
    }
    return true;
}

function openPopupHelpPage(page) {
	window.open("/noodlebib/popupHelp.php?page=" + page, "popupHelp", "height=400,width=500,menubar=no,titlebar=no,toolbar=yes,location=no,scrollbars=yes,resizable=yes");
}

function openPopupEntryHelpPage(page) {
	window.open("/noodlebib/popupEntryHelp.php?page=" + page, "popupEntryHelp", "height=500,width=600,menubar=no,titlebar=no,toolbar=yes,location=no,scrollbars=yes,resizable=yes");
}

function popupWin(page) {
	window.open(page, "popupWin", "height=475,width=440,menubar=no,titlebar=no,toolbar=yes,location=no,scrollbars=yes,resizable=yes");
}

function popupSizedWin(page, height, width) {
	window.open(page, "popupWin", "height=" + height + ",width=" + width + ",menubar=no,titlebar=no,toolbar=yes,location=no,scrollbars=yes,resizable=yes");
}

function doOnLoad() {
	window.location.replace("/noodlebib/mybib.php");
}

function loadPage(page) {
	window.location.replace(page);
}

function selectBibHeader(form) {
	var bibHeader = form.bibHeaderSelect.options[form.bibHeaderSelect.selectedIndex].value;
	window.location.replace("/noodlebib/mybib.php?setheader=" + bibHeader);
}

function ltrim ( s ) {
	return s.replace( /^\s*/, "" )
}

function rtrim ( s ) {
	return s.replace( /\s*$/, "" );
}

function trim ( s ) {
	return rtrim(ltrim(s));
}

function sortBy(form) {
	var sortby = form.sortby.options[form.sortby.selectedIndex].value;

	if (sortby == "pst") {
		form.tgid.value = 2;
	} else if (sortby == "date") {
		form.tgid.value = "";
		form.tagaction.value = "sortbydate";
	} else if (sortby == "media") {
		form.tgid.value = "";
		form.tagaction.value = "sortbymedia";
	} else { // alpha
		form.tgid.value = "";
		form.tagaction.value = "default";
	}

	form.action = "mybib.php";
	form.submit();
	return true;
}

function sortByCol(col) {

	if (col == "description") { // primary, secondary, tertiary
		document.bibForm.tgid.value = 2;
	} else if (col == "media") { // specific media type
		document.bibForm.tgid.value = "";
		document.bibForm.tagaction.value = "sortbymedia";
	} else { // alpha
		document.bibForm.tgid.value = "";
		document.bibForm.tagaction.value = "default";
	}

	document.bibForm.action = "mybib.php";
	document.bibForm.submit();
	return true;
}

function doUpdateViewableName() {

	var myviewablename = document.shareForm.myviewablename.value;

	if (myviewablename == "") { 
		alert("Please enter your viewable name (the name by which your students refer to you)."); 
		document.shareForm.myviewablename.focus();
		return false; 
	}

	document.shareForm.updatenameonly.value = "1";
	document.shareForm.ACTION.value = "";
	document.shareForm.submit();
	return true;
}

function handleShareSubmit() {

	var nickname = document.shareForm.nickname.value;

	if (nickname == "") { 
		alert("Please enter a class name."); 
		document.shareForm.nickname.focus();
		return false; 
	}

	document.shareForm.submit();
	return true;
}

function handleDoRenameSubmit() {

	var listdesc = document.dorenameForm.listdesc.value;

	if (listdesc == "") { 
		alert("Please enter a new description for this source list."); 
		document.dorenameForm.listdesc.focus();
		return false; 
	}

	document.dorenameForm.submit();
	return true;
}

function handleDoUndeleteSubmit() {

	document.doundeleteForm.submit();
	return true;
}

function handleDoRenameTagSubmit() {

	var newname = document.dorenameForm.newname.value;

	if (newname == "") { 
		alert("Please enter a new name for this tag."); 
		document.dorenameForm.newname.focus();
		return false; 
	}

	document.dorenameForm.submit();
	return true;
}

function handleDoShareSubmit() {

	var nickname = document.doshareForm.nickname.value;
	var myviewablename = document.doshareForm.myviewablename.value;

	if (myviewablename == "") { 
		alert("Please enter your name so that your teacher can identify you (they may not know your username)."); 
		document.doshareForm.myviewablename.focus();
		return false; 
	}

	if (nickname == "") { 
		alert("Please enter the class name you wish to share your selected lists with, then click Share Lists."); 
		document.doshareForm.nickname.focus();
		return false; 
	}

	document.doshareForm.submit();
	return true;
}

function handleDoMergeSubmit() {
	var desc = document.domergeForm.listdesc.value;
	if (desc == "") { 
		alert("Please enter a description for the merged list. You will use this description to identify the list in your personal folder, so try to make it brief but accurate."); 
		document.domergeForm.listdesc.focus();
		return false; 
	}

	document.domergeForm.submit();
	return true;
}

function handleDoCopySubmit() {
	var desc = document.docopyForm.listdesc.value;
	var copytoother = document.docopyForm.copyto[1].checked;
	var copytoname = document.docopyForm.copytoname.value;

	if (copytoother && copytoname == "") { 
		alert("Please indicate the user to whom you wish to transfer this list (enter the personal ID)."); 
		document.docopyForm.copytoname.focus();
		return false; 
	}

	if (desc == "") { 
		alert("Please enter a description for the new list. This description should be brief, unique and accurate."); 
		document.docopyForm.listdesc.focus();
		return false; 
	}

	document.docopyForm.submit();
	return true;
}

function handleDoCopySubmit2() {
	var form = document.docopyForm;

	var desc = form.listdesc.value;
	var overrideval = form.elements['override_copytouid'].options[form.elements['override_copytouid'].selectedIndex].value;

	if (overrideval == "") { 
		alert("Please select the subscription or account type that this user is associated with from the dropdown list."); 
		form.override_copytouid.focus();
		return false; 
	}

	if (desc == "") { 
		alert("Please enter a description for the new list. This description should be brief, unique and accurate."); 
		form.listdesc.focus();
		return false; 
	}

	document.docopyForm.submit();
	return true;
}

function handleNewbibSubmit() {
	var desc = document.newbibForm.listdesc.value;
	var styles = document.newbibForm.liststyle;

	if (styles.type != "hidden") {
		if (!styles[0].checked && !styles[1].checked && !styles[2].checked && !styles[3].checked) {
			alert("Please select a list style (MLA Starter, MLA Advanced, APA Advanced, or Chicago/Turabian Advanced)."); 
			return false; 
		}
	}

	if (desc == "") { 
		alert("Please enter a description for this list. You will use this description to identify the list in your personal folder, so try to make it brief but accurate."); 
		document.newbibForm.listdesc.focus();
		return false; 
	}

	document.newbibForm.submit();
	return true;
}

function handleConvertSubmit() {

	var convertoption = document.convertbibForm.convertoption;

	if (convertoption.type != "hidden") {
		if (!convertoption[0].checked && !convertoption[1].checked) {
			alert("Please select an option to continue."); 
			return false; 
		} else if (convertoption[1].checked) {
			if (!confirm("This will permanently convert your list to the new MLA 7th edition formatting requirements. Are you sure you want to continue?")) {
				return;
			}

			document.convertbibForm.ACTION.value = "convert";
			document.convertbibForm.action = "/noodlebib/mybib.php";
		} else if (convertoption[0].checked) {
			document.convertbibForm.ACTION.value = "exportRTF";
			document.convertbibForm.action = "/noodlebib/mla6to7.php";
		}
	}

	document.convertbibForm.submit();
	return true;
}

function handleConvertAPA5to6Submit() {

	var convertoption = document.convertbibForm.convertoption;

	if (convertoption.type != "hidden") {
		if (!convertoption[0].checked && !convertoption[1].checked) {
			alert("Please select an option to continue."); 
			return false; 
		} else if (convertoption[1].checked) {
			if (!confirm("This will permanently convert your list to the new APA 6th edition formatting requirements. Are you sure you want to continue?")) {
				return;
			}

			document.convertbibForm.ACTION.value = "convertapa";
			document.convertbibForm.action = "/noodlebib/mybib.php";
		} else if (convertoption[0].checked) {
			document.convertbibForm.ACTION.value = "exportRTF";
			document.convertbibForm.action = "/noodlebib/apa5to6.php";
		}
	}

	document.convertbibForm.submit();
	return true;
}

function doentriesaction(type) {
	var form = document.bibForm;
	var numElements = form.elements.length;
	var nIndex;
	var entryids = "";
	var firstID = 1;
	var numselected = 0;
	var allchecked = 1;

	for (nIndex = 0; nIndex < numElements; nIndex++) {
		var str = form.elements[nIndex].name;

		var idx = "";
		var id = "";
		var shared = 0;

		var uIndex = str.indexOf("_");
		if (uIndex != -1) {
			result0 = str.substring(0,uIndex);
			result1 = str.substring(uIndex+1, str.length);

			if (result0 == "entrysel") {
				if (form.elements[nIndex].checked == true) {
					idx = result1;
					id = form.elements[nIndex].value;					
				} else {
					allchecked = 0;
				}
			}
		}

		if (idx != "") {
			if (firstID == 0) {
				entryids = entryids + ",";
			}
			entryids = entryids + id;
			firstID = 0;
			numselected++;
		}
	}

	form.elements['allselected'].value = allchecked;
	form.elements['selentryids'].value = entryids;	

	if (type == "copy") {
		form.action = "/noodlebib/copyEntry.php";
		if (numselected < 1) {
			alert("Please select one or more entries to copy by checking the boxes above.");
			return;
		}
	} else if (type == "delete") {
		form.action = "/noodlebib/deleteEntry.php";
		if (numselected < 1) {
			alert("Please select at least one entry to delete by checking one or more boxes above.");
			return;
		}
		
		if (numselected == 1) {
			if (!confirm("Are you sure you wish to delete the entry selected above?")) {
				return;
			}
		} else if (numselected > 1) {
			if (!confirm("Are you sure you wish to delete all of the entries that are selected above?")) {
				return;
			}
		}
	} else if (type == "tag") {
		form.action = "/noodlebib/tagEntry.php";
		if (numselected < 1) {
			alert("Please select at least one entry to label by checking one or more boxes above.");
			return;
		}

		var atval = form.elements['applytag'].options[form.elements['applytag'].selectedIndex].value;

		if (atval == "") {
			alert("Please select the label to apply to the marked entries.");
			return;
		}	
		if (atval.substring(0,3) == "tg_") {
			alert("Please select a label (not a label category) to apply to the marked entries.");
			return;
		}

		if (atval == "[[REMOVE]]") {
			if (!confirm("Are you sure you wish to remove the labels from all marked entries?")) {
				return;
			}
		}
	} else if (type == "deletetag") {
		form.action = "/noodlebib/deleteTag.php";
		var atval = form.elements['applytag'].options[form.elements['applytag'].selectedIndex].value;
		if (atval == "" || atval == "[[REMOVE]]" || atval == "[[NEW]]") {
			alert("Please select the label or category to delete.");
			return;
		} else {
			isgroup = (atval.substring(0,3) == "tg_");

			if (isgroup && (atval.substring(3) == "1" || atval.substring(3) == "2")) {
				alert("This predefined category cannot be deleted.");
				return;
			}

			if (!isgroup) {
				var tid = atval.substring(atval.lastIndexOf("|") + 1);
				if (tid <= 6) {
					alert("This predefined label cannot be deleted.");
					return;
				}
			}

			if (isgroup) {
				if (!confirm("Are you sure you wish to delete this category and all labels within the category?\n\nNote: The labels will also be removed from any citations they are currently associated with.")) {
					return;
				}
			} else {
				if (!confirm("Are you sure you wish to delete this label?\n\nNote: The label will also be removed from any citations it is currently associated with.")) {
					return;
				}
			}
		}
	}

	form.submit();
}

function doaction(type, bibID) {
	var form = document.mainForm;
	var numElements = form.elements.length;
	var nIndex;
	var bibids = "";
	var ubrids = "";
	var firstID = 1;
	var firstSharedID = 1;
	var numselected = 0;
	var numsharedselected = 0;

	if (bibID == null) {

        	for (nIndex = 0; nIndex < numElements; nIndex++) {
        		var str = form.elements[nIndex].name;
        
        		var idx = "";
        		var id = "";
        		var shared = 0;
        
        		var uIndex = str.indexOf("_");
        		if (uIndex != -1) {
        			result0 = str.substring(0,uIndex);
        			result1 = str.substring(uIndex+1, str.length);
        
        			if (result0 == "sel" || result0 == "sharedsel") {
        				if (form.elements[nIndex].checked == true) {
        					idx = result1;
        					id = form.elements[nIndex].value;					
        				}
        				if (result0 == "sharedsel") {
        					shared = 1;
        				} else {
        					shared = 0;
        				}
        			}
        		}
        
        		if (idx != "") {
        			if (shared == 1) {
        				if (firstSharedID == 0) {
        					ubrids = ubrids + ",";
        				}
        				ubrids = ubrids + id;
        				firstSharedID = 0;
        				numsharedselected++;			
        			} else {
        				if (firstID == 0) {
        					bibids = bibids + ",";
        				}
        				bibids = bibids + id;
        				firstID = 0;
        				numselected++;
        			}
        		}
        	}
        
        	form.elements['selids'].value = bibids;
        	form.elements['selsharedids'].value = ubrids;	
	} else {
		// just one specific bibID

		if (type == "unshare") {
	        	form.elements['selsharedids'].value = bibID;
			numsharedselected = 1;
		} else {
	        	form.elements['selids'].value = bibID;
			numselected = 1;
		}
	}

	if (type == "share") {
		form.action = "/noodlebib/doshare.php";
		form.ACTION.value = "";
		if (numselected < 1) {
			alert("Please select at least one list to share by checking one or more boxes above.");
			return;
		}
	} else if (type == "rename") {
		form.action = "/noodlebib/dorename.php";
		form.ACTION.value = "";
		if (numselected < 1) {
			alert("Please select a list to rename by checking one of the boxes above.");
			return;
		} else if (numselected > 1) {
			alert("Only one list may be renamed at a time. Please check a single box above, then click Rename again.");
			return;
		}
	} else if (type == "copy") {
		form.action = "/noodlebib/docopylist.php";
		form.ACTION.value = "";
		if (numselected < 1) {
			alert("Please select a list to copy by checking one of the boxes above.");
			return;
		} else if (numselected > 1) {
			alert("Only one list may be copied at a time. Please check a single box above, then click Copy again.");
			return;
		}
	} else if (type == "merge") {
		form.action = "/noodlebib/domerge.php";
		form.ACTION.value = "";
		if (numselected < 2) {
			alert("Please select at least two lists to merge by checking two or more boxes above.");
			return;
		}
	} else if (type == "delete") {
		form.action = "/noodlebib/dodelete.php";
		form.ACTION.value = "";
		if (numselected < 1) {
			alert("Please select at least one list to delete by checking one or more boxes above.");
			return;
		}
		
		if (numselected == 1) {
			if (!confirm("Are you sure you wish to delete this list?")) {
				return;
			}
		} else if (numselected > 1) {
			if (!confirm("Are you sure you wish to delete the lists selected above?")) {
				return;
			}
		}
	} else if (type == "unshare") {
		form.action = "/noodlebib/dounshare.php";
		form.ACTION.value = "";
		if (numsharedselected < 1) {
			alert("Please select at least one list to remove by checking one or more boxes above.");
			return;
		}
		
		if (numsharedselected == 1) {
			if (!confirm("Are you sure you wish to unshare this list? You will be unable to view the list unless the author shares it with you again.")) {
				return;
			}
		} else if (numsharedselected > 1) {
			if (!confirm("Are you sure you wish to unshare the lists selected above? You will be unable to view them unless the authors share them with you again.")) {
				return;
			}
		}
	} else if (type == "undelete") {
		form.action = "/noodlebib/doundelete.php";
		form.ACTION.value = "";
	}

	form.submit();
}

function dotagaction(tagid, type) {
	var form = document.mainForm;

	form.elements['tagid'].value = tagid;

	if (type == "rename") {
		form.action = "/noodlebib/note_dotagrename.php";
		form.ACTION.value = "";		
	} else if (type == "delete") {
		form.action = "/noodlebib/note_dotagdelete.php";
		form.ACTION.value = "";
		
		if (!confirm("Are you sure you wish to delete this tag?")) {
			return;
		}
	}

	form.submit();
}

function doshareaction(type) {
	var form = document.shareForm;
	var numElements = form.elements.length;
	var nIndex;
	var shareids = "";
	var firstID = 1;
	var numselected = 0;
	var listsshared = 0;

	for (nIndex = 0; nIndex < numElements; nIndex++) {
		var str = form.elements[nIndex].name;

		var idx = "";
		var shareid = "";

		var uIndex = str.indexOf("_");
		if (uIndex != -1) {
			result0 = str.substring(0,uIndex);
			result1 = str.substring(uIndex+1, str.length);

			if (result0 == "sel") {
				if (form.elements[nIndex].checked == true) {
					idx = result1;
					shareid = form.elements[nIndex].value;

					eval("var numshared = form.elements['numshared_" + idx + "'].value;");
					if (numshared > 0) {
						listsshared = 1;
					}
				}
			}
		}

		if (idx != "") {
			if (firstID == 0) {
				shareids = shareids + ",";
			}
			shareids = shareids + shareid;
			firstID = 0;
			numselected++;
		}
	}

	form.elements['selids'].value = shareids;

	if (type == "remove") {
		form.action = "/noodlebib/share.php";
		form.ACTION.value = "removegroup";
		if (numselected < 1) {
			alert("Please select at least one class name to remove by checking the boxes above.");
			return;
		}
	}

	if (type == "add") {
		form.action = "/noodlebib/share.php";
		form.ACTION.value = "startaddgroup";
	}

	if (type == "remove" && listsshared == 1) {
		var confirmmsg = "There are lists shared with you via this class name.  By removing it, you will no longer be able to view lists that were shared with you through this class name. Are you sure you want to continue?";
		if (numselected > 1)
			confirmmsg = "There are lists shared with you via these class names.  By removing them, you will no longer be able to view lists that were shared with you through those class names. Are you sure you want to continue?";
			
		if (confirm(confirmmsg)) {
			form.submit();
		} else {
			return;
		}
	}

	form.submit();
}

function verifyWizard(form, formaction) {
	var numElements = form.elements.length;
	var nIndex;

	var page = "";
	var dbSelection = "";
	var URL2 = "";
	var ismanual = "";
	var searchTerms = "";

	for (nIndex = 0; nIndex < numElements; nIndex++) {
		var str = form.elements[nIndex].name;
		if (str == "page") {
			page = form.elements[nIndex].value;
		} else if (str == "dbSelection") {
			var elementType = form.elements[nIndex].type;

			if (elementType == "radio") {
				if (form.elements[nIndex].checked == true)
					dbSelection = form.elements[nIndex].value;
			} else {
				dbSelection = form.elements[nIndex].value;
			}
		//} else if (str == "URL2" || str == "URL") {
		//	var urlVal = form.elements[nIndex].value;
		//	if (urlVal != "") {
		//		colonPos = urlVal.indexOf(":");
		//		if (colonPos == -1 || urlVal.substr(colonPos, 3) != "://") {
		//			alert("Invalid URL. Be sure to prepend 'http://' to the URL. For example, http://infotrac.galegroup.com/.");
		//			form.elements[nIndex].focus();
		//			return 0;
		//		}
		//	}
		} else if (str == "ismanual") {
			ismanual = form.elements[nIndex].value;
		} else if (str == "searchTerms") {
			searchTerms = form.elements[nIndex].value;
		}
	}

	if (page == "showMatches") { // check that they've entered search terms
		if (trim(searchTerms) == "") {
			alert("Please enter one or more search terms to find the subscription database you are using.");
			return 0;
		}		
	} else if (page == "url") { // make sure they selected a db from the search results
		if (ismanual != 1 && dbSelection == "") {
			alert("Please select a database from the list, or click the link provided to enter the database information manually.");
			return 0;
		}
	}

	form.action = formaction;
	form.submit();
}

function isEmptyVal(val) {
	if (val == "" || val == "nostateselected") return true;
	return false;
}

function verifyForm(form) {
	var numElements = form.elements.length;
	var nIndex;

	var SourceType = "";
	var EntryType = "";

	var misc21val = "";

	var checkforonlinefields = false;
	var oneonlinechecked = false;
	myRegExpOnlineField = /online\d/

	myRegExpWasInPrintField = /inprint\d/
	var checkforwasinprintfields = false;
	var onewasinprintchecked = false;

	for (nIndex = 0; nIndex < numElements; nIndex++) {
		var str = form.elements[nIndex].name;
		var ilastname = str.indexOf('lastname');
		var ifirstname = str.indexOf('firstname');
		var iSN = str.indexOf('SN');

		if (str.indexOf("[]") > 0)
		{
			setAllOptions(form.elements[nIndex], true);
		}

		//else if (str == "URL" || str == "req_URL" || str == "URL2" || str == "req_URL2") {
		//	var urlVal = form.elements[nIndex].value;
		//	if (urlVal != "") {
		//		colonPos = urlVal.indexOf(":");
		//		if (colonPos == -1 || urlVal.substr(colonPos, 3) != "://") {
		//			alert("Invalid URL. Make sure you prepend 'http://', 'telnet://', 'ftp://', etc. to the URL. For example, 'http://www.noodletools.com/'.");
		//			form.elements[nIndex].focus();
		//			return 0;
		//		}
		//	}
		//}

		else if (ilastname > 0 && iSN < 0 && form.elements[nIndex].value != "")
		{
			var thisname = str.substring(0, ilastname);
			addName(form, thisname, thisname, 8);
		}

		else if (ifirstname > 0 && iSN < 0 && form.elements[nIndex].value != "")
		{
			var thisname = str.substring(0, ifirstname);
			addName(form, thisname, thisname, 8);
		}

		else if (str == "SourceType") {
			var elementType = form.elements[nIndex].type;

			if (elementType == "radio") {
				if (form.elements[nIndex].checked == true)
					SourceType = form.elements[nIndex].value;
			} else {
				SourceType = form.elements[nIndex].value;
			}
			continue;
		}

		else if (str == "EntryType") {
			EntryType = form.elements[nIndex].value;
		}

		var type = form.elements[nIndex].type;
		if (type == "text") {
			var val = form.elements[nIndex].value;
			if (val.indexOf("<") != -1 || val.indexOf(">") != -1) {
				alert("Sorry, '< and >' are reserved characters and cannot be used in NoodleBib forms.");
				form.elements[nIndex].focus();
				return 0;
			}
			if (val.indexOf("|") != -1 && str != "URL" && str != "req_URL" && str != "URL2" && str != "req_URL2") {
				alert("Sorry, '|' is a reserved character and cannot be used in NoodleBib forms.");
				form.elements[nIndex].focus();
				return 0;
			}
		}

		var uIndex = str.indexOf("_");
		if (uIndex != -1) {
			result0 = str.substring(0,uIndex);
			result1 = str.substring(uIndex+1, str.length);

			if (result0 == "Misc21" && result1 != "") {
				var val21 = "";
				var eType = form.elements[nIndex].type;

				if (eType == "radio") {
					var theval = form.elements[nIndex].value;
					if (myRegExpOnlineField.test(theval) == true || theval == "chidb" || theval == "chinotdb") { 
						checkforonlinefields = true;
						if (form.elements[nIndex].checked == true) {
							oneonlinechecked = true;
						}
					}					
					if (myRegExpWasInPrintField.test(theval) == true || theval == "isrefdb" || theval == "isrefbook") { 
						checkforwasinprintfields = true;
						if (form.elements[nIndex].checked == true) {
							onewasinprintchecked = true;
						}
					}
					if (form.elements[nIndex].checked == true)
						val21 = theval;
				} else {
					val21 = form.elements[nIndex].value;
				}
				
				if (val21 != "") {
					if (misc21val != "") misc21val += "|";
					misc21val += val21;
				}
			}

			if ((result0 == "req" || (result0 == "onlinereq" && SourceType == "online")) && (form.elements[nIndex].value == "http://" || form.elements[nIndex].value == "ftp://")) {
				alert("Please fill in all required fields (those marked with a *).");
				form.elements[nIndex].focus();
				return 0;
			}

			if (((result0 == "req" || result0 == "reqyear") && isEmptyVal(form.elements[nIndex].value)) ||
			    (((result0 == "onlinereq" || result0 == "onlinereqyear") && (SourceType == "online") && isEmptyVal(form.elements[nIndex].value))) ||
			    (((result0 == "printreq" || result0 == "printreqyear") && (SourceType == "print") && isEmptyVal(form.elements[nIndex].value))) ||
			    (((result0 == "microreq" || result0 == "microreqyear") && (SourceType == "microfiche") && isEmptyVal(form.elements[nIndex].value))) ||
			    (((result0 == "lleafreq" || result0 == "lleafreqyear") && (SourceType == "looseleaf") && isEmptyVal(form.elements[nIndex].value))) ||
			    (((result0 == "dfilereq" || result0 == "dfilereqyear") && (SourceType == "digitalfile") && isEmptyVal(form.elements[nIndex].value))) ||
			    (((result0 == "emediareq" || result0 == "emediareqyear") && (SourceType == "CD-ROM" || SourceType == "Disk" || SourceType == "emedia") && isEmptyVal(form.elements[nIndex].value)))) 
			{
				// HANDLE SINGLE NAME FIELDS LATER
				if (result1 != "AuthorID" && result1 != "Author2ID" && result1 != "EditorID" && result1 != "Editor2ID") {
					alert("Please fill in all required fields (those marked with a *).");
					form.elements[nIndex].focus();
					return 0;
				}
			}
			else if (result0 == "reqyear" || result0 == "onlinereqyear" || result0 == "printreqyear" || 
                                 result0 == "microreqyear" || result0 == "lleafreqyear" || result0 == "dfilereqyear" ||
			         result0 == "emediareqyear" || result0 == "year") 
			{
				var strYear = form.elements[nIndex].value;				
				var strLower = strYear.toLowerCase();

				// allow AD, BC, etc.
				//myRegExpDateField = /(AD|BC|BCE|CE|A\.D\.|B\.C\.|B\.C\.E\.|C\.E\.)/i
				//if (myRegExpDateField.test(strYear) == false) { 
/*
					// allow year + letter, as in 2003b
					var addletter = "";
					var letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
					if (strYear.length == 5 && letters.indexOf(strYear.substring(4,5))>=0) { 
						addletter = strYear.substring(4,5).toLowerCase();
						strYear = strYear.substring(0,4); 
					}

					if (strYear != "" && strLower != "none" && strLower != "in press" &&
					    (!(strYear.length > 5 && strYear.length < 10 && strYear.substring(4,5) == "-")) && 
					    (!(strYear.substring(0,1) == "[" && strYear.substring(strYear.length-1,strYear.length) == "]"))) {
	
 						if (isNaN(parseInt(strYear)) || strYear.length != 4 || parseInt(strYear) < 1000 || parseInt(strYear) > 2050 ) 
						{
							alert("Please provide a valid 4-digit year or range of years for this field.\n\nFor example:\n2001\n1959-1963\n1934-50");
							form.elements[nIndex].focus();
							return 0;
						} else {
							form.elements[nIndex].value = parseInt(strYear) + "" + addletter;
						}
					}
*/
				//}
			}
		}
	}

	if (SourceType == "") {
		alert("Please select the publication medium (print, online, etc.) for your source.");
		return 0;
	}

	if (checkforwasinprintfields && !onewasinprintchecked) {
		alert("Please indicate whether or not specific information about an original print version is provided.");
		return 0;
	}

	if (checkforonlinefields && !oneonlinechecked) {
		alert("Please select the option that best describes how a reader could locate this online source again.");
		return 0;
	}

	// post-processing for single name fields and misc
	var oneNameField;
	var snf = ""; var snm = ""; var snl = ""; var sns = "";
	var singlenamerequired = 0;
	var currentNameField = "";
	var lastNameField = "";

	var titleField = "";
	var alternatetitleField = "";
	var articletitleField = "";

	var Title = "";
	var AlternateTitle = "";
	var ArticleTitle = "";
	var Misc21 = "";

	var doAddName = "";

	for (nIndex = 0; nIndex < numElements; nIndex++) {
		var str = form.elements[nIndex].name;
		var val = form.elements[nIndex].value;

		if (str == "AuthorID" || str == "Author2ID" || str == "req_AuthorID" || str == "req_Author2ID" ||
		    str == "EditorID" || str == "req_EditorID" || str == "Editor2ID" || str == "req_Editor2ID" ||
		    str == "onlinereq_AuthorID" || str == "onlinereq_Author2ID" || str == "onlinereq_EditorID" || str == "onlinereq_Editor2ID" ||
		    str == "printreq_AuthorID" || str == "printreq_Author2ID" || str == "printreq_EditorID" || str == "printreq_Editor2ID" ||
		    str == "emediareq_AuthorID" || str == "emediareq_Author2ID" || str == "emediareq_EditorID" || str == "emediareq_Editor2ID") 
		{

			if ((str == "req_AuthorID" || str == "req_Author2ID" || str == "req_EditorID" || str == "req_Editor2ID") ||
			    ((str == "onlinereq_AuthorID" || str == "onlinereq_Author2ID" || str == "onlinereq_EditorID" || str == "onlinereq_Editor2ID") && (SourceType == "online")) ||
			    ((str == "printreq_AuthorID" || str == "printreq_Author2ID" || str == "printreq_EditorID" || str == "printreq_Editor2ID") && (SourceType == "print")) ||
			    ((str == "emediareq_AuthorID" || str == "emediareq_Author2ID" || str == "emediareq_EditorID" || str == "emediareq_Editor2ID") && ($SourceType == "CD-ROM" || $SourceType == "Disk")))
			{
				singlenamerequired = 1;
			}
			oneNameField = form.elements[nIndex];
			if (currentNameField != "" && currentNameField != oneNameField) {
				if (snl != "") {
					currentNameField.value = snl + "%" + snf + "%" + snm + "%" + sns;
				} else if (snl == "" && snm == "" && snf != "") {
					snl = snf;
					snf = "";
					currentNameField.value = snl + "%" + snf + "%" + snm + "%" + sns;
				}

				if (singlenamerequired == 1 && snl == "") {
					alert("Please fill in all required fields (those marked with a *).");
					if (lastNameField) lastNameField.focus();
					return 0;
				}
			}	
			currentNameField = oneNameField;		
		} else if (str.indexOf("SNfirstname") >= 0) {
			snf = val;
		} else if (str.indexOf("SNmiddlename") >= 0) {
			snm = val;
		} else if (str.indexOf("SNlastname") >= 0) {
			snl = val;
			lastNameField = form.elements[nIndex];

			if (snl == "" && snm == "" && snf != "") {
				snl = snf;
				snf = "";
			}

			if (singlenamerequired == 1 && snl == "") {
				alert("Please fill in all required fields (those marked with a *).");
				if (lastNameField) lastNameField.focus();
				return 0;
			}

			singlenamerequired = 0;

		} else if (str.indexOf("SNsuffix") >= 0) {
			sns = val;
		} else if (str.indexOf("ArticleTitle") >= 0) {
			ArticleTitle = val;
			articletitleField = form.elements[nIndex];
		} else if (str.indexOf("AlternateTitle") >= 0) {
			AlternateTitle = val;
			alternatetitleField = form.elements[nIndex];
		} else if (str.indexOf("Title") >= 0) {
			Title = val;
			titleField = form.elements[nIndex];
		} else if (str.indexOf("Misc21") >= 0) {
			Misc21 = val;
		}
	}

	if (snl != "") {
		currentNameField.value = snl + "%" + snf + "%" + snm + "%" + sns;
	}

	if (misc21val != "") {
		form.Misc21.value = misc21val;
	}

	if (EntryType == "Web Site") {
		if (Title != "" && Title.substr(Title.indexOf(":"), 3) == "://") {
			alert("The title of the Web page should not be a URL.\n\nIf a URL is displayed in the title bar of the browser, check for a title at the top of the Web page itself. If you do not find a title there either, leave the \"Title\" field blank and provide an alternate description like \"Damon's home page\" in the field below it.");
			if (titleField) titleField.focus();
			return 0;
		}
	}

	return 1;
}

function doVerify(form, skipVerify, checkForErrors, formaction) {
	if (skipVerify == 2) {
		form.action = formaction;
		form.submit();
	} else if (skipVerify == 1 || verifyForm(form) == 1) {
		if (skipVerify) form.entryID.value="CANCEL";
		
		if (checkForErrors == "MLA") {
			form.checkForErrors.value = "MLA";
		} else if (checkForErrors == "APA") {
			form.checkForErrors.value = "APA";
		} else if (checkForErrors == "CHI") {
			form.checkForErrors.value = "CHI";
		} else if (checkForErrors == "online1") {
			form.checkForErrors.value = "online1";
		} else if (checkForErrors == "online2") {
			form.checkForErrors.value = "online2";
		} else if (checkForErrors == "online3") {
			form.checkForErrors.value = "online3";
		} else if (checkForErrors == "online5") {
			form.checkForErrors.value = "online5";
		}
			
		form.action = formaction;
		form.submit();
	} else {
		return;
	}
}

function doBack(form, formaction, screennum) {

	if (screennum == 1) {
		if (form.page.value == "show") { 
			form.page.value = "showMatches"; 
		}
		else if (form.page.value == "url") { 
			form.page.value = ""; 
		}
		else if (form.page.value == "showMatches") { 
			if (form.usedDetails.value == 1) { 		// went through details screen - return to it
				form.SourceTypeDetailPage.value = "1";
			} else if (form.usedSourceType.value == 1) { 	// went through sourcetype screen - return to it
				form.SourceType.value = "";
				form.SourceTypeDetailPage.value = "";
			} else {					// otherwise, back to validation screen
				form.SourceType.value = "";
				form.SourceTypeDetailPage.value = "";
				form.extrainfo.value = "";
			} 
		}
	} else if (screennum == 2) { // sourcetype screen (return to validation screen)
		form.SourceType.value = "";
		form.SourceTypeDetailPage.value = "";
		form.extrainfo.value = "";

		// special cases
		if (form.ADD.value == "Letter or Memo, Unpublished or Personal") {
			form.ADD.value = "Letter or Memo";
		} else if (form.ADD.value == "Letter, Published in a Collection") {
			form.ADD.value = "Letter or Memo";
		} else if (form.ADD.value == "Manuscript or Typescript") {
			form.ADD.value = "Manuscript, Essay, Notes, or Other Unpublished Work";
		} else if (form.ADD.value == "Essay or Working Paper, Unpublished") {
			form.ADD.value = "Manuscript, Essay, Notes, or Other Unpublished Work";
		}

	} else if (screennum == 3) { // details screen
		if (form.usedSourceType.value == 1) { 		// went through sourcetype screen - return to it
			form.SourceType.value = "";
			form.SourceTypeDetailPage.value = "";
		} else {					// otherwise, back to validation screen
			form.SourceType.value = "";
			form.SourceTypeDetailPage.value = "";
			form.extrainfo.value = "";
		}
	} else if (screennum == 4) { // form

		if (!confirm("Are you sure you wish to return to the previous screen? You will lose any data you have already entered in this form. Click OK to continue or Cancel to stop.")) { return false; }

		if (form.usedDetails.value == 1) { 	// went through details screen - return to it
			form.SourceTypeDetailPage.value = "1";
		} else if (form.usedSourceType.value == 1) { 	// went through sourcetype screen - return to it
			form.SourceType.value = "";
			form.SourceTypeDetailPage.value = "";
		} else {					// otherwise, back to validation screen
			form.SourceType.value = "";
			form.SourceTypeDetailPage.value = "";
			form.extrainfo.value = "";

			// special cases
			if (form.ADD.value == "Interview, Conducted By Me") {
				form.ADD.value = "Interview";
			} else if (form.ADD.value == "Software, Downloaded") {
				form.ADD.value = "Software";
			} else if (form.ADD.value == "Advertisement, Online") {
				form.ADD.value = "Advertisement or Commercial";
			} else if (form.ADD.value == "Letter or Memo, Unpublished or Personal") {
				form.ADD.value = "Letter or Memo";
			} else if (form.ADD.value == "Letter, Published in a Collection") {
				form.ADD.value = "Letter or Memo";
			} else if (form.ADD.value == "Manuscript or Typescript") {
				form.ADD.value = "Manuscript, Essay, Notes, or Other Unpublished Work";
			} else if (form.ADD.value == "Essay or Working Paper, Unpublished") {
				form.ADD.value = "Manuscript, Essay, Notes, or Other Unpublished Work";
			}
		}
	}

	form.action = formaction;
	form.submit();
}

function addName(form, fieldname, fullfieldname, numnames) {

	var nameselector;

	if (testIsValidObject(form.elements[fullfieldname + "[]"])) {
		nameselector = form.elements[fullfieldname + "[]"];
	} else if (testIsValidObject(form.elements["req_" + fullfieldname + "[]"])) {
		nameselector = form.elements["req_" + fullfieldname + "[]"];
	} else if (testIsValidObject(form.elements["printreq_" + fullfieldname + "[]"])) {
		nameselector = form.elements["printreq_" + fullfieldname + "[]"];
	} else if (testIsValidObject(form.elements["onlinereq_" + fullfieldname + "[]"])) {
		nameselector = form.elements["onlinereq_" + fullfieldname + "[]"];
	} else if (testIsValidObject(form.elements["emediareq_" + fullfieldname + "[]"])) {
		nameselector = form.elements["emediareq_" + fullfieldname + "[]"];
	} else {
		return;
	}

	var lastname = form.elements[fieldname + "lastname"];
	var firstname = form.elements[fieldname + "firstname"];
	var middlename = form.elements[fieldname + "middlename"];

	var suffix = form.elements[fieldname + "suffix"];

	if (lastname.value == "" && middlename.value == "" && firstname.value != "") {
		lastname = form.elements[fieldname + "firstname"];
		firstname = form.elements[fieldname + "lastname"];
	}

	if (lastname.value == "") {
		alert("The 'Last Name or Group/Corporation' field must be specified.");
		return;
	}

	var length = nameselector.length;

	if (length == 1 && nameselector.options[0].value == "")
	{
		length = 0;
		nameselector.options[0] = null;
	}

	if (numnames == length) {
		if (numnames == 1)
			alert("Only one name should be specified for this field.");
		else
			alert("Only " + numnames + " names are allowed in this list.");
		return;
	}

	if (lastname.value.indexOf("%") != -1 || 
	    firstname.value.indexOf("%") != -1 ||
	    middlename.value.indexOf("%") != -1 ||
	    suffix.value.indexOf("%") != -1) {

		alert("'%' characters are not allowed in this field.");
		return;
	}

	var name = trim(lastname.value) + "%" + trim(firstname.value) + "%" + trim(middlename.value) + "%" + trim(suffix.value);
	var value = "";
	if (lastname.value != "") {
		value += trim(lastname.value);
		if (firstname.value != "") {
			value += ", " + trim(firstname.value);
			if (middlename.value != "") {
				value += " " + trim(middlename.value);
			}
		}
		if (suffix.value != "") {
			value += ", " + trim(suffix.value);
		}

		nameselector.options[length] = new Option(value, name);
		setAllOptions(nameselector, false);
		nameselector.options[length].selected = true;
		firstname.value = "";
		middlename.value = "";
		lastname.value = "";
		suffix.value = "";
	} 

	var newlength = nameselector.length;
	if (newlength == 0) {
		nameselector.options[0] = new Option("(No names have been added to this list)", "");
	}
}

function removeName(form, fullfieldname) {
	var nameselector = form.elements[fullfieldname + "[]"];
	var length = nameselector.length;
	var oneremoved = false;

	var starti = length-1;

	for (var i=starti; i >= 0; i--) {
		if (nameselector.options[i].selected) {
			oneremoved = true;
			nameselector.options[i] = null;
		}
	}
	
	var newlength = nameselector.length;

	if (newlength == 0) {
		nameselector.options[0] = new Option("(No names have been added to this list)", "");
	} else if (oneremoved == false) {
		alert("Select one or more names from the list to remove.");
	}
}


function isOneSelected(nameselector) {
	var length = nameselector.length;
	var numsel = 0;

	retval = -1;

	for (var i=0; i < length; i++) {
		if (nameselector.options[i].selected) {
			numsel++;
			retval = i;
		}
	}

	if (numsel != 1) {
		alert("Please select only one name to move up or down in the list.");
		return -1;
	}

	return retval;
}

function setAllOptions(nameselector, bSet) {
	var length = nameselector.length;
	
	for (var i=0; i < length; i++)
		nameselector.options[i].selected = bSet;
}

function moveUp(form, fullfieldname) {
	var nameselector = form.elements[fullfieldname + "[]"];
	var index = isOneSelected(nameselector);

	if (index != -1) {
		if (index == 0) { return; }
		else {
			tmpText = nameselector.options[index-1].text;
			tmpVal = nameselector.options[index-1].value;

			nameselector.options[index-1].value = nameselector.options[index].value;
			nameselector.options[index-1].text = nameselector.options[index].text;
			nameselector.options[index].value = tmpVal;
			nameselector.options[index].text = tmpText;
		}

		setAllOptions(nameselector, false);
		nameselector.options[index-1].selected = true;
	}
}

function moveDown(form, fullfieldname) {
	var nameselector = form.elements[fullfieldname + "[]"];
	var index = isOneSelected(nameselector);
	var length = nameselector.length;

	if (index != -1) {
		if (index == length-1) { return; }
		else {
			tmpText = nameselector.options[index+1].text;
			tmpVal = nameselector.options[index+1].value;

			nameselector.options[index+1].value = nameselector.options[index].value;
			nameselector.options[index+1].text = nameselector.options[index].text;
			nameselector.options[index].value = tmpVal;
			nameselector.options[index].text = tmpText;
		}
		setAllOptions(nameselector, false);
		nameselector.options[index+1].selected = true;
	}
}
