function dynamicSelect(id1, id2) {
	// Feature test to see if there is enough W3C DOM support
	if (document.getElementById && document.getElementsByTagName) {
		// Obtain references to both select boxes
		var sel1 = document.getElementById(id1);
		var sel2 = document.getElementById(id2);
		var p1 = document.getElementById("preference1");
		var p2 = document.getElementById("preference2");
		var p3 = document.getElementById("preference3");
		var p4 = document.getElementById("allOptions");						
		// Clone the dynamic select box
		var clone = sel2.cloneNode(true);
		// Obtain references to all cloned options 
		var clonedOptions = clone.getElementsByTagName("option");
		// Onload init: call a generic function to display the related options in the dynamic select box
		refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
		// Onchange of the main select box: call a generic function to display the related options in the dynamic select box
		sel1.onchange = function() {
			if(sel1.value != "")
			sel2.className = "";
			else
			sel2.className = "hidden";
			if(p1.value == p2.value){
			var p2test = document.getElementById("pref2level");
			p2test.className = "hidden";}
			if(p1.value == p3.value){
			var p3test = document.getElementById("pref3level");
			p3test.className = "hidden";}			
			refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
			dynamicOption(p1, p2, p3, p4);			
		};
	}
}
function refreshDynamicSelectOptions(sel1, sel2, clonedOptions) {
	// Delete all options of the dynamic select box
	while (sel2.options.length) {
		sel2.remove(0);
	}
	// Create regular expression objects for "select" and the value of the selected option of the main select box as class names
	var pattern1 = /( |^)(select)( |$)/;
	var pattern2 = new RegExp("( |^)(" + sel1.options[sel1.selectedIndex].value + ")( |$)");
	var pattern3 = /( |^)(sel)( |$)/;
	var type1;
	var type2;
	var j = 0;
	// Iterate through all cloned options
	for (var i = 0; i < clonedOptions.length; i++) {
		type1 = Mid(clonedOptions[i].className, 3, 20);
		type2 = Left(clonedOptions[i].className, 3);
		// If the classname of a cloned option either equals "select" or equals the value of the selected option of the main select box
		if (type1.match(pattern1) || type1.match(pattern2)) {
			// Clone the option from the hidden option pool and append it to the dynamic select box
			sel2.appendChild(clonedOptions[i].cloneNode(true));
			if (type2.match(pattern3)) {
			sel2.selectedIndex = j;}
			j++;
		}
	}
	if(sel2.options.length == 1){
	sel2.className = "hidden";}
	
}
function removeAllOptions (selectbox)
{
    var count;
    for (count = 1 ; count < selectbox.options.length ; count++){
    selectbox.remove (count);
    }
}

function dynamicOption(pref1 , pref2 , pref3 , AllOptions) {

        var index1 = 0;
        var index2 = 0;
        var count;
        var val1 = pref1.value;
        var val2 = pref2.value;
        var val3 = pref3.value;

        removeAllOptions(pref2);
        removeAllOptions(pref3);

        for(count = 0 ; count < AllOptions.options.length; count++){
            var optn = document.createElement("OPTION");
            optn.text = AllOptions[count].text;
            optn.value = AllOptions[count].value;
			optn.className =AllOptions[count].className;
            pref2.options[count] = optn;
        }

        for(count = 0 ; count < AllOptions.options.length; count++){
            var optn1 = document.createElement("OPTION");
            optn1.text = AllOptions[count].text;
            optn1.value = AllOptions[count].value;
			optn1.className = AllOptions[count].className;			
            pref3.options[count] = optn1;
        }

 //remove from pref2
        if(val1 != ""){
            for(index1 = 0 ; index1 < AllOptions.options.length; index1++){
                if(AllOptions[index1].value == val1){
                    pref2.remove(index1);
                    break;
                }
            }
        }

            if(val3 != ""){
                for(index2 = 0 ; index2 < AllOptions.options.length; index2++){
                    if(AllOptions[index2].value == val3){
                        if(index1 < index2 && index1 > 0)
                            pref2.remove(index2-1);							
                        else
                            pref2.remove(index2);
                    }
                }
            }

//for pref3
            if(val2 != ""){
                for(index1 = 0 ; index1 < AllOptions.options.length; index1++){
                    if(AllOptions[index1].value == val2){
                        pref3.remove(index1);
                        break;
                    }
                }
            }

            if(val1 != ""){
                for(index2 = 0 ; index2 < AllOptions.options.length; index2++){
                    if(AllOptions[index2].value == val1){
                        if(index1 < index2 && index1 > 0)
                            pref3.remove(index2-1);
                        else
                            pref3.remove(index2);
                    }
                }
            }

            for(index1 = 0 ; index1 < pref2.options.length; index1++){
                if(pref2[index1].value == val2){
                    pref2.options[index1].selected = true;
                    break;
                }
            }

            for(index2 = 0 ; index2 < pref3.options.length; index2++){
                if(pref3[index2].value == val3){
                    pref3.options[index2].selected = true;
                    break;
            }
            }
}
function Left(str, n)
/***
		IN: str - the string we are LEFTing
			n - the number of characters we want to return

		RETVAL: n characters from the left side of the string
***/
{
		if (n <= 0)     // Invalid bound, return blank string
				return "";
		else if (n > String(str).length)   // Invalid bound, return
				return str;                // entire string
		else // Valid bound, return appropriate substring
				return String(str).substring(0,n);
}

function Mid(str, start, len)
/***
		IN: str - the string we are LEFTing
			start - our string's starting position (0 based!!)
			len - how many characters from start we want to get

		RETVAL: The substring from start to start+len
***/
{
		// Make sure start and len are within proper bounds
		if (start < 0 || len < 0) return "";

		var iEnd, iLen = String(str).length;
		if (start + len > iLen)
				iEnd = iLen;
		else
				iEnd = start + len;

		return String(str).substring(start,iEnd);
}

<!-- Begin
function validate()
// make sure fields we wish to check are not blank and e-mail is valid
{
	var elements = document.forms["frmRegister"].elements;
	var emailPattern = /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/;
	var urlPattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	
	for (var i = 0; i < elements.length; i++)
	{
		if (/(^| )checkfield( |$)/.test(elements[i].className) && elements[i].value == "")
		{
			elements[i].focus();
			alert("Please fill out this field");
			return false;
		}
		if (/(^| )checkemail( |$)/.test(elements[i].className) && !emailPattern.test(elements[i].value))
		{
			elements[i].focus();
			alert("Please fill in a valid e-mail address");
			return false;
		}
		if (/(^| )checkurl( |$)/.test(elements[i].className) && !urlPattern.test(elements[i].value) && elements[i].value != "")
		{
			elements[i].focus();
			alert("Please fill in a valid url beginning with http:// or https:// or leave this field blank");
			return false;
		}		
		if (/(^| )checkcbo( |$)/.test(elements[i].className) && elements[i].value == 0)
		{
			elements[i].focus();
			alert("Please select a value from this field");
			return false;
		}		
	}
	document.forms["frmRegister"]["frmActionStep"].value = "Reg1";
	return true;
}
function validate2()
// make sure fields we wish to check are not blank and e-mail is valid
{
	var elements = document.forms["frmRegister"].elements;
	var emailPattern = /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/;
	var urlPattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;	
	
	for (var i = 0; i < elements.length; i++)
	{
		if (/(^| )checkfield( |$)/.test(elements[i].className) && elements[i].value == "")
		{
			elements[i].focus();
			alert("Please fill out this field");
			return false;
		}
		if (/(^| )checkemail( |$)/.test(elements[i].className) && !emailPattern.test(elements[i].value))
		{
			elements[i].focus();
			alert("Please fill in a valid e-mail address");
			return false;
		}
		if (/(^| )checkurl( |$)/.test(elements[i].className) && !urlPattern.test(elements[i].value) && elements[i].value != "")
		{
			elements[i].focus();
			alert("Please fill in a valid url beginning with http:// or https:// or leave this field blank");
			return false;
		}		
		if (/(^| )checkcbo( |$)/.test(elements[i].className) && elements[i].value == 0)
		{
			elements[i].focus();
			alert("Please select a value from this field");
			return false;
		}		
	}
	document.forms["frmRegister"]["frmActionStep"].value = "EPD1";
	return true;
}
function validate3()
// make sure fields we wish to check are not blank and e-mail is valid
{
	var elements = document.forms["frmEditMembers"].elements;
	var emailPattern = /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/;
	var urlPattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;	
	
	for (var i = 0; i < elements.length; i++)
	{
		if (/(^| )checkfield( |$)/.test(elements[i].className) && elements[i].value == "")
		{
			elements[i].focus();
			alert("Please fill out this field");
			return false;
		}
		if (/(^| )checkemail( |$)/.test(elements[i].className) && !emailPattern.test(elements[i].value))
		{
			elements[i].focus();
			alert("Please fill in a valid e-mail address");
			return false;
		}
		if (/(^| )checkurl( |$)/.test(elements[i].className) && !urlPattern.test(elements[i].value) && elements[i].value != "")
		{
			elements[i].focus();
			alert("Please fill in a valid url beginning with http:// or https:// or leave this field blank");
			return false;
		}		
		if (/(^| )checkcbo( |$)/.test(elements[i].className) && elements[i].value == 0)
		{
			elements[i].focus();
			alert("Please select a value from this field");
			return false;
		}		
	}
	document.forms["frmEditMembers"]["frmActionStep"].value = "AdminPD1";
	return true;
}
function validate4(frmName,frmAction)
// make sure fields we wish to check are not blank and e-mail is valid
{
	var elements = document.forms[frmName].elements;
	var emailPattern = /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/;
	
	for (var i = 0; i < elements.length; i++)
	{
		if (/(^| )checkfield( |$)/.test(elements[i].className) && elements[i].value == "")
		{
			elements[i].focus();
			alert("Please fill out this field");
			return false;
		}
		if (/(^| )checkemail( |$)/.test(elements[i].className) && !emailPattern.test(elements[i].value))
		{
			elements[i].focus();
			alert("Please fill in a valid e-mail address");
			return false;
		}
		if (/(^| )checkcbo( |$)/.test(elements[i].className) && elements[i].value == 0)
		{
			elements[i].focus();
			alert("Please select a value from this field");
			return false;
		}		
	}
	document.forms[frmName]["frmActionStep"].value = frmAction;
	return true;
}
function submit2()
{
	document.forms["frmRegister"]["frmActionStep"].value = "Reg2";
	return true;
}
function submit3()
{
	document.forms["frmRegister"]["frmActionStep"].value = "Reg3";
	return true;
}
function submit4()
{
	document.forms["frmRegister"]["frmActionStep"].value = "Reg4";
	return true;
}
function submit5()
{
	document.forms["frmRegister"]["frmActionStep"].value = "EKI1";
	return true;
}
function submit6()
{
	document.forms["frmRegister"]["frmActionStep"].value = "EOI1";
	return true;
}
function submit7()
{
	document.forms["frmEditMembers"]["frmActionStep"].value = "AdminKI1";
	return true;
}
function submit8()
{
	document.forms["frmEditMembers"]["frmActionStep"].value = "AdminOI1";
	return true;
}
function submitADM1()
{
	document.forms["MIDSearch"]["frmActionStep"].value = "AdminSearch1";
	return true;
}
function submitADM2()
{
	document.forms["MEmailSearch"]["frmActionStep"].value = "AdminSearch2";
	return true;
}
function submitNAdmin1()
{
	document.forms["frmNewsAdmin"]["frmActionStep"].value = "AddNLContent1";
	document.forms["frmNewsAdmin"].submit();
}
function submitNAdmin2(NLID)
{
	parent.location = "submit_live.asp?ID=SNLEmail&N=" + NLID;
}
function submitENAdmin1()
{
	document.forms["frmEventNewsAdmin"]["frmActionStep"].value = "ENL1";
	document.forms["frmEventNewsAdmin"].submit();
}
function submitENAdmin2()
{
	document.forms["frmEventNewsAdmin2"]["frmActionStep"].value = "ENL2";
	document.forms["frmEventNewsAdmin2"].submit();
}
function submitENAdmin3()
{
	parent.location = "submit_live.asp?ID=SendENLEmail";
}

function submitform(frmName,frmAction)
{
	document.forms[frmName]["frmActionStep"].value = frmAction;
	return true;
}
function numeric(field)
{
	var element = document.getElementById('checknumeric');
	if(isNaN(new Number(element.value)))
			element.value = element.value.substring(0, element.value.length - 1) 
}
function gotoLink(form) {
   var OptionIndex=form.ListBoxURL.selectedIndex;
  parent.location = form.ListBoxURL.options[OptionIndex].value;}
function gotoLink2(form) {
   var OptionIndex=form.ListBoxURL.selectedIndex;
  parent.location = form.ListBoxURL.options[OptionIndex].value;}  

function ConfirmDelete(dname,type,message) {
	var answer = confirm(message + dname + "! Do you wish to continue?");
	if (answer){
		return true;}
		alert ("Deletion cancelled.");
		return false;
}

function displaymessage(message) {
alert (message);
return true;
}

function deleteRow(){
var deleteBtn =  document.getElementById("deleteBtn");
var isTable =  document.getElementById("dynTable");
nRow = isTable.rows.length-1;
if (nRow > 0){isTable.deleteRow(nRow)} 
if (nRow == 1){deleteBtn.className = "hidden"}
}

function insertRow(){
var deleteBtn =  document.getElementById("deleteBtn");
var isTable =  document.getElementById("dynTable");
deleteBtn.className = "button";
index = isTable.rows.length;
nextRow = isTable.insertRow(index);
txtArea = nextRow.insertCell(0);
index++;
index = index.toString();
nameStr = "item"+index;
txtStr = "Item "+index;
txtArea.innerHTML = "<textarea name="+nameStr+" rows=3 cols=80>";
var textareas = document.getElementsByTagName('textarea');
for (var i = 1; i < textareas.length; i++)
{
textareas[i].focus();
}
}

function initDynTable(){
var deleteBtn =  document.getElementById("deleteBtn");
var isTable =  document.getElementById("dynTable");
if(!deleteBtn){return;};
var rowno = isTable.rows.length;
if (rowno > 1) {deleteBtn.className = "button";}
}

//<< Beginning of Calendar
//set todays date
Now = new Date();
NowDay = Now.getDate();
NowMonth = Now.getMonth();
NowYear = Now.getYear();
if (NowYear < 2000) NowYear += 1900; //for Netscape

//function for returning how many days there are in a month including leap years
function DaysInMonth(WhichMonth, WhichYear)
{
  var DaysInMonth = 31;
  if (WhichMonth == "Apr" || WhichMonth == "Jun" || WhichMonth == "Sep" || WhichMonth == "Nov") DaysInMonth = 30;
  if (WhichMonth == "Feb" && (WhichYear/4) != Math.floor(WhichYear/4))	DaysInMonth = 28;
  if (WhichMonth == "Feb" && (WhichYear/4) == Math.floor(WhichYear/4))	DaysInMonth = 29;
  return DaysInMonth;
}

//function to change the available days in a months
function ChangeOptionDays(Which)
{
  DaysObject = eval("document.frmEvents." + Which + "Day");
  MonthObject = eval("document.frmEvents." + Which + "Month");
  YearObject = eval("document.frmEvents." + Which + "Year");

  Month = MonthObject[MonthObject.selectedIndex].text;
  Year = YearObject[YearObject.selectedIndex].text;

  DaysForThisSelection = DaysInMonth(Month, Year);
  CurrentDaysInSelection = DaysObject.length;
  if (CurrentDaysInSelection > DaysForThisSelection)
  {
    for (i=0; i<(CurrentDaysInSelection-DaysForThisSelection); i++)
    {
      DaysObject.options[DaysObject.options.length - 1] = null
    }
  }
  if (DaysForThisSelection > CurrentDaysInSelection)
  {
    for (i=0; i<(DaysForThisSelection-CurrentDaysInSelection); i++)
    {
      NewOption = new Option(DaysObject.options.length + 1);
      DaysObject.add(NewOption);
    }
  }
    if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;
}

//function to set options to today
function SetToToday(Which)
{
  DaysObject = eval("document.frmEvents." + Which + "Day");
  MonthObject = eval("document.frmEvents." + Which + "Month");
  YearObject = eval("document.frmEvents." + Which + "Year");

  YearObject[0].selected = true;
  MonthObject[NowMonth].selected = true;

  ChangeOptionDays(Which);

  DaysObject[NowDay-1].selected = true;
}

//function to write option years plus x
function WriteYearOptions(YearsAhead)
{
  line = "";
  for (i=0; i<YearsAhead; i++)
  {
    line += "<option>";
    line += NowYear + i;
  }
  return line;
}
// End of Calendar>>