/*** CAMP REGISTRATION FORM JS ***/
var currentLayer = 'page1'; // Starting Page
function showLayer(lyr){ // Changes the visible pages 
	hideLayer(currentLayer);
	document.getElementById(lyr).style.visibility = 'visible';
	currentLayer = lyr;
	if (document.getElementById('Regcode').value != "Press Select Button"){
		document.getElementById('Select').disabled = true;
		document.getElementById('submit').disabled = false;
	}
}

function hideLayer(lyr){ // Hides the old page
	document.getElementById(lyr).style.visibility = 'hidden';
}

function showLine(line){ // Shows a needed line
	document.getElementById(line).style.backgroundColor = '#EFEFEF';
	document.getElementById(line+'a').style.visibility = 'visible';
	document.getElementById(line+'b').style.visibility = 'visible';
	document.getElementById(line+'c').style.visibility = 'visible';
}

function hideLine(line){ // Hides an ineligible line
	document.getElementById(line).style.backgroundColor = '#FFFFFF';
	document.getElementById(line+'a').style.visibility = 'hidden';
	document.getElementById(line+'b').style.visibility = 'hidden';
	document.getElementById(line+'c').style.visibility = 'hidden';
}

function formJSyes(){ // Makes form only accessible with JS on & within specified dates.
	
	var d=new Date();
	var str = new Array("yesyr","noyr","Name","Surname","dobM","dobD","dobY","Member","Gender","Regcode","submit","reset");
			// getDate() -> "Returns the day of the month from a Date object (from 1-31)"
			// getMonth() -> "Returns the month from a Date object (from 0-11)" Jan=0, Feb=1, Mar=2, Apr=3, May=4, Jun=5
	if(((d.getMonth()==5) && (d.getDate()<=15)) || ((d.getMonth()<5) && (d.getMonth()>=2))){ // statement about which dates are allowed
	//								June 1st - June 15th                March 1st - May 31st							  			
		var i = 0;
		do
			{
				document.getElementById(str[i]).disabled = false;
				i++;
			}
		while (str[i-1] != "reset");
		document.getElementById("subHeadOpCl").firstChild.nodeValue = "Accepting Applications for: Summer "+d.getFullYear();
		if(((d.getMonth()==5) && (d.getDate()<=15)) || ((d.getMonth()<5) && (d.getMonth()>=2))){ // statement about which dates are allowed
		//										1								*** Add "=" to check things ***
			document.getElementById("redClose1").style.color = '#FF0000';
			document.getElementById("redClose1").firstChild.nodeValue = "*** Open Registration Dates:";
			document.getElementById("redClose2").style.color = '#FF0000';
		}
	}else{
		var i = 0;
		do
			{
				document.getElementById(str[i]).disabled = true;
				i++;
			}
		while (str[i-1] != "reset");
		document.getElementById("Member").disabled = true;
		document.getElementById("closedimg").style.visibility = 'visible';
		document.getElementById("subHeadOpCl").firstChild.nodeValue = "*** Registration Closed for: Summer "+d.getFullYear()+" ***";
		document.getElementById("subHeadOpCl").style.color = '#FF0000';
		document.getElementById("redClose1").style.color = '#FF0000';
		document.getElementById("redClose1").firstChild.nodeValue = "*** Open Registration Dates:";
		document.getElementById("redClose2").style.color = '#FF0000';
		document.getElementById("redClose3").style.color = '#FF0000';
		document.getElementById("redClose3").firstChild.nodeValue = "*** Late Registration Dates:";
		document.getElementById("redClose4").style.color = '#FF0000';

	}
}

function closeAlert(){ // Alerts that no openings for Registration
	var answer = confirm("There currently aren\'t any openings at Camp for this age and gender.\n\n\nIf you\'d like to continue the Registration and be placed on the waiting list according to Registration time, click \"Ok\".\n\nOtherwise, if you'd like to cancel Registration, click \"Cancel\".");
	if (!answer) window.close();
}

function joinDOB(c) { // Joins the MM, DD & YYYY values into one value for the dB.
	var ctrl;
	ctrl = document.getElementById('DOB');
	ctrl.value = document.getElementById('dobM').value + "-" + document.getElementById('dobD').value + "-" + document.getElementById('dobY').value;
	document.getElementById('inf_DOB').firstChild.nodeValue = "->  " + ctrl.value;
	document.getElementById('inf_DOB').className = "reset";
	if ((document.getElementById('dobM').value!="MM")&&(document.getElementById('dobD').value!="DD")&&(document.getElementById('dobY').value!="YYYY")&&(c!=document.getElementById('submit'))) {
		setMember();
	}
}

function setMember() { // Determines Age from joinDOB and then runs populateSelect function

	document.getElementById("Member").disabled = false; // Removing disable from Member Select box to prevent use prior to age being obtained

	var Age;
	var start = new Array();
		start[2008]="12";start[2009]="11";start[2010]="10";start[2011]="9";start[2012]="14";start[2013]="13";start[2014]="12";start[2015]="11";start[2016]="9";start[2017]="8";
		start[2018]="14";start[2019]="13";start[2020]="11";
	var d=new Date();

	$cmp_month="07";$cmp_day=start[d.getFullYear()];$cmp_year=d.getFullYear();
	$dob_month=document.getElementById('dobM').value;$dob_day=document.getElementById('dobD').value;$dob_year=document.getElementById('dobY').value;

	if($cmp_month>$dob_month || ($dob_month==$cmp_month && $cmp_day>=$dob_day))Age = $cmp_year-$dob_year; else Age = $cmp_year-$dob_year-1;
	document.getElementById('inf_Member').firstChild.nodeValue = "->  " + Age;
	document.getElementById('inf_Member').className = "reset";

	// create optgroups & default "Please Select"
	var selecting = document.createElement("option"); selecting.value = ""; selecting.appendChild(document.createTextNode("\u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 Please Select "));
	var memb = document.createElement("optgroup"); memb.label = "Currently a Member of...";
	var dash1 = document.createElement("optgroup"); dash1.label = "Current Member of Both...";
	var joiN = document.createElement("optgroup"); joiN.label = "Wish to join IOGT at Camp...";
	var dash2 = document.createElement("optgroup"); dash2.label = "Wish to join Both at Camp...";
	var camp = document.createElement("optgroup"); camp.label = "Camp only please...";
	var mnon = document.createElement("option"); mnon.value = "MEMB-NON"; mnon.appendChild(document.createTextNode("~ Attend Camp Only")); camp.appendChild(mnon);

	// create options and attach to optgroups
	if (Age <=12){  
		var mth5 = document.createElement("option"); mth5.value = "MEMB-TH5"; mth5.appendChild(document.createTextNode("= Templars Hope")); memb.appendChild(mth5);
		if (Age <12){var blnk1 = document.createElement("option"); blnk1.disabled = true; blnk1.appendChild(document.createTextNode("")); memb.appendChild(blnk1);}
		var jth5 = document.createElement("option"); jth5.value = "JOIN-TH5"; jth5.appendChild(document.createTextNode("+ Templars Hope")); joiN.appendChild(jth5);
		if (Age <12){var blnk2 = document.createElement("option"); blnk2.disabled = true; blnk2.appendChild(document.createTextNode("")); joiN.appendChild(blnk2);}
	} if(Age>=12){
		var mafa = document.createElement("option"); mafa.value = "MEMB-AFA"; mafa.appendChild(document.createTextNode("= American Fellowship of Abstainers")); memb.appendChild(mafa);
		var mfsc = document.createElement("option"); mfsc.value = "MEMB-FSC"; mfsc.appendChild(document.createTextNode("= Freedom Steppers")); memb.appendChild(mfsc);
		var mu34 = document.createElement("option"); mu34.value = "MEMB-U34"; mu34.appendChild(document.createTextNode("= Uranus #34")); memb.appendChild(mu34);
		var mtcyg = document.createElement("option"); mtcyg.value = "MEMB-TCYG"; mtcyg.appendChild(document.createTextNode("= Twin Cities Youth Group")); memb.appendChild(mtcyg);
		if (Age==12){var mth5t = document.createElement("option"); mth5t.value = "MEMB-TH5+TCYG"; mth5t.appendChild(document.createTextNode("= Templars Hope & TCYG")); dash1.appendChild(mth5t);}
		var mafat = document.createElement("option"); mafat.value = "MEMB-AFA+TCYG"; mafat.appendChild(document.createTextNode("= American Fellowship & TCYG")); dash1.appendChild(mafat);
		var mfsct = document.createElement("option"); mfsct.value = "MEMB-FSC+TCYG"; mfsct.appendChild(document.createTextNode("= Freedom Steppers & TCYG")); dash1.appendChild(mfsct);
		var mu34t = document.createElement("option"); mu34t.value = "MEMB-U34+TCYG"; mu34t.appendChild(document.createTextNode("= Uranus #34 & TCYG")); dash1.appendChild(mu34t);
		var blnk1 = document.createElement("option"); blnk1.disabled = true; blnk1.appendChild(document.createTextNode("")); dash1.appendChild(blnk1);
		var jafa = document.createElement("option"); jafa.value = "JOIN-AFA"; jafa.appendChild(document.createTextNode("+ American Fellowship of Abstainers")); joiN.appendChild(jafa);
		var jfsc = document.createElement("option"); jfsc.value = "JOIN-FSC"; jfsc.appendChild(document.createTextNode("+ Freedom Steppers")); joiN.appendChild(jfsc);
		var ju34 = document.createElement("option"); ju34.value = "JOIN-U34"; ju34.appendChild(document.createTextNode("+ Uranus #34")); joiN.appendChild(ju34);
		var jtcyg = document.createElement("option"); jtcyg.value = "JOIN-TCYG"; jtcyg.appendChild(document.createTextNode("+ Twin Cities Youth Group")); joiN.appendChild(jtcyg);
		if (Age==12){var jth5t = document.createElement("option"); jth5t.value = "JOIN-TH5+TCYG"; jth5t.appendChild(document.createTextNode("+ Templars Hope & TCYG")); dash1.appendChild(jth5t);}
		var jafat = document.createElement("option"); jafat.value = "JOIN-AFA+TCYG"; jafat.appendChild(document.createTextNode("+ American Fellowship & TCYG")); dash2.appendChild(jafat);
		var jfsct = document.createElement("option"); jfsct.value = "JOIN-FSC+TCYG"; jfsct.appendChild(document.createTextNode("+ Freedom Steppers & TCYG")); dash2.appendChild(jfsct);
		var ju34t = document.createElement("option"); ju34t.value = "JOIN-U34+TCYG"; ju34t.appendChild(document.createTextNode("+ Uranus #34 & TCYG")); dash2.appendChild(ju34t);
		var blnk2 = document.createElement("option"); blnk2.disabled = true; blnk2.appendChild(document.createTextNode("")); dash2.appendChild(blnk2);
	}

	// set "selecting" as the default
	selecting.selected = true;

	// clear select menu and append optgroups
	var selectMenu = document.getElementById("Member");
	while (selectMenu.hasChildNodes()) {
		selectMenu.removeChild(selectMenu.firstChild);
	}
	selectMenu.appendChild(selecting);
	if (memb.hasChildNodes()) { selectMenu.appendChild(memb); }
	if (dash1.hasChildNodes()) { selectMenu.appendChild(dash1); }
	if (joiN.hasChildNodes()) { selectMenu.appendChild(joiN); }
	if (dash2.hasChildNodes()) { selectMenu.appendChild(dash2); }
	if (camp.hasChildNodes()) { selectMenu.appendChild(camp); }
}

function initialReset(){ // Resets the Info Fields when resetting the initial form.
 var str = new Array("inf_Name","inf_Surname","inf_DOB","inf_Member","inf_Gender","inf_regyr","checkvis1c");
 var i = 0;
  do
  	{
		var ctrl;
		ctrl = document.getElementById(str[i]);
		if (str[i] == "inf_Name") ctrl.firstChild.nodeValue = '* Legal Name Please';
		else ctrl.firstChild.nodeValue = '*';
		ctrl.className = "reset";
		i++;
	}
  while (str[i-1] != "checkvis1c");
  document.getElementById('DOB').value = "00-00-0000";
  document.getElementById("Member").disabled = true;


	var selectMenu = document.getElementById("Member");
	while (selectMenu.hasChildNodes()) {
		selectMenu.removeChild(selectMenu.firstChild);
	}

}


//===========================================================
// 
// The functions below all relate to Focusing on Fields
//
//===========================================================

var mseOvr = 0;
function firstFocus(x){ // focusing on first field when mouseOver Form
	if(mseOvr == 0){
	   document.getElementById(x).focus();
	   mseOvr = 1;
	}
}

function fieldFocus(x){ // focusing on first field when changing pages
	document.getElementById(x).focus();
}

function colorDefault(){ // Colors default value in input fields to #CCCCCC
  var el = new Array("Nick","occ","List","diseases","other1","other2");
  var i = 0;
  do
    {
      if ((document.getElementById(el[i]).defaultValue=="i.e. Sue/Susan, Tom/Thomas")||
		  (document.getElementById(el[i]).defaultValue=="None.")||
		  (document.getElementById(el[i]).defaultValue=="Immunization")){
		  document.getElementById(el[i]).style.color = '#AAAAAA';
	  }
	i++;
	}
  while (el[i-1] != "other2");
}

function clearDefault(el){ // Clears default value in input fields
  if ((el.defaultValue=="None.")||(el.defaultValue=="Immunization")||(el.defaultValue=="i.e. Sue/Susan, Tom/Thomas")){
	  el.value = "";
	  el.style.color = '#000000';
  }
}

function enterDefault(el){ // Enters default value in input fields
  if (el.value == ""){
	  el.value=el.defaultValue;
	  el.style.color = '#AAAAAA';
  }
}

function changePass(){ // Changes Regcode to password onBlur
	document.getElementById('Regcode').setAttribute("type","password");
}

function changeText(){ // Changes Regcode to text onFocus
	document.getElementById('Regcode').setAttribute("type","text");
}

function randomString(){ // Creates the RegCode
	var chars = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghkmnopqrstuvwxyz";
	var string_length = 8;
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	document.getElementById('Regcode').value = randomstring;
	document.getElementById('Select').disabled = true;
	document.getElementById('submit').disabled = false;
}

function showValues(form){ // Old function to check form values
	var values = '';
	var len = form.length - 1; //Leave off Submit Button
	for(i=0; i<len; i++){
		if(form[i].id.indexOf("C")!=-1||form[i].id.indexOf("B")!=-1)//Skip Continue and Back Buttons
			continue;
		if((form[i].value != '')&&(form[i].value != 'Select')){
			values += form[i].id;
			values += ': ';
			values += form[i].value;
			values += '\n';
		}
	}
	alert(values);
}
    
function pEntr (field, event){ // Checks to see if key pressed is "Enter"
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			var i;
			for (i = 0; i < field.form.elements.length; i++)
				if (field == field.form.elements[i])
					break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		} 
		else
		return true;
	}      

function enableBtns(){ // Enables the buttons on the payment page
  document.getElementById('null').disabled = false;
  document.getElementById('goback').disabled = false;
  document.getElementById('ppadd').disabled = false;
}

function openForm(formURL){ // Opens the "Contact Webmaster" form
 window.open(formURL,"","resizable=1,screenX=30,left=30,screenY=30,top=30,width=400,height=470");
}

//===========================================================
// 
// The functions below all relate to Future Contacts section.
//
//===========================================================

function fillFC(f) {	// Fills appropriate Future Contact fields if Relationship = "Self" or "Parent"; f = this.form
  if(f.FCrel.value == "Self") {
	f.FCname.value = f.Name.value + " " + f.Surname.value;
		subAster("inf_FCname");
		fieldFocus('C1Rel')}
  else if((f.FCrel.value == "Mother" || f.FCrel.value == "Father")&&(f.FCname.value == f.Name.value + " " + f.Surname.value)){
	f.FCname.value = '';
		addAster("inf_FCname");}
  if(f.FCrel.value == "Self" || f.FCrel.value == "Mother" || f.FCrel.value == "Father") {
    f.FCstreet.value = f.Street.value;	
		subAster("inf_FCstreet");
	f.FCcity.value = f.City.value;		
		subAster("inf_FCcity");
	f.FCstate.value = f.State.value;	
		subAster("inf_FCstate");
	f.FCzip.value = f.ZIP.value;		
		subAster("inf_FCzip");
	f.FCphone.value = f.Hphone.value;	
		subAster("inf_FCphone");
	if (f.Age.value >= 15) {
	f.FCemail.value = f.Email.value;	
		subAster("inf_FCemail");}
  }else{
    if (f.FCname.value == f.Name.value + " " + f.Surname.value){
		f.FCname.value = '';
		addAster("inf_FCname");}
    if (f.FCstreet.value == f.Street.value){
		f.FCstreet.value = '';
		addAster("inf_FCstreet");}
    if (f.FCcity.value == f.City.value){
		f.FCcity.value = '';
		addAster("inf_FCcity");}
    if (f.FCstate.value == f.State.value){
		f.FCstate.value = '';
		addAster("inf_FCstate");}
    if (f.FCzip.value == f.ZIP.value){
		f.FCzip.value = '';
		addAster("inf_FCzip");}
    if (f.FCphone.value == f.Hphone.value){
		f.FCphone.value = '';
		addAster("inf_FCphone");}
	if (f.Age.value >= 15) {
      if (f.FCemail.value == f.Email.value){
		  f.FCemail.value = '';
		  addAster("inf_FCemail");}
	}
  }
}

// Fills Contact fields if Relationship = "Mother" or "Father" for both "Future Contact" & "Emergency Contact #1" fields; 
function fillCn(f) {	// f = this.form
  if(((f.C1Rel.value == "Mother")&&(f.FCrel.value == "Mother"))||((f.C1Rel.value == "Father")&&(f.FCrel.value == "Father"))) {
	f.Contact1.value = f.FCname.value;
		subAster("inf_Contact1");
	f.C1phone1.value = f.FCphone.value;	
		subAster("inf_C1phone1");
  }else{	
    if (f.Contact1.value == f.FCname.value){
		f.Contact1.value = '';
		addAster("inf_Contact1");}
    if (f.C1phone1.value == f.FCphone.value){
		f.C1phone1.value = '';
		addAster("inf_C1phone1");}
  }
}
		
function addAster(fld){
	var elem = document.getElementById(fld);
  	elem.firstChild.nodeValue = '*';
}

function subAster(fld){
	var elem = document.getElementById(fld);
	elem.firstChild.nodeValue = '';
}

//===========================================================
// 
// The functions below all relate to the Preferences section.
//
//===========================================================

// Function to have Skip to Payment button enabled
function skipToPay(){
	if (document.getElementById('Member').value != ""){
		document.getElementById('skip').disabled = false;
		document.getElementById('skip').href="formreg.php?submit=Submit&Surname="+document.getElementById('Surname').value+"&Name="+document.getElementById('Name').value+"&Member="+document.getElementById('Member').value;
	}
}
























// Function to throw alert if "Parent/Family" is chosen for Adult in Charge
function famAinC(){
	if (document.getElementById('AinC').value == "Family"){
		alert('* A relative in charge of a Camper, must register and be at Camp for the Camper\'s entire stay.\r\n\r\n* Campers aged 5-7 are required to have a relative as their \"Adult in Charge\".');
		return false;
	}	
}

// Function to throw alert if "Email" method is chosen for paperwork delivery method
function emailMeth(){
	if (document.getElementById('Method').value == "EMAIL"){
		alert('Please make sure that the email address \"webmaster@iogt.us\" is prevented from going to your junk email box.');
		return false;
	}	
}

// Function to throw alert if "Size" value is Opt Out of Camp Shirt -> Shirt needed for waterslide
function campShirt(){
	if ((document.getElementById('Size').value == "T-S")||(document.getElementById('Size').value == "T-M")||(document.getElementById('Size').value == "T-L")||(document.getElementById('Size').value == "T-XL")||(document.getElementById('Size').value == "T-XXL")||(document.getElementById('Size').value == "NONE")){
		alert('Please note that the IOGT Camp Shirt is required for attending Wild Mountain Waterslide.');
		return false;
	}	
}

// Functions to give value to radiobutton checks and eliminate closed positions
function mkATC(){ // Making Camper an Adult TC position
	if (document.getElementById('open').value == "NT"){
		var answer = confirm("There currently aren\'t any openings at Camp for TCs of this gender.\n\n\nIf you\'d like to continue registration as an Adult, click \"Ok\".\n\nOtherwise, if you'd like to cancel Registration, click \"Cancel\".");
		if (answer){
			document.getElementById('TcAc').value = "Adult";
			document.getElementById('Adult').checked = true;
		}else{
			window.close();
		}
	}else{
		document.getElementById('TcAc').value = "ATC";
	}
}
function mkAd(){ // Making Camper an Adult position
	if (document.getElementById('open').value == "NA"){
		var answer = confirm("There currently aren\'t any openings at Camp for Adults of this gender.\n\n\nIf you\'d like to continue registration as a TC, click \"Ok\".\n\nOtherwise, if you'd like to cancel Registration, click \"Cancel\".");
		if (answer){
			document.getElementById('TcAc').value = "ATC";
			document.getElementById('Teen').checked = true;
		}else{
			window.close();
		}
	}else{
		document.getElementById('TcAc').value = "Adult";
	}
}

function cxBx(chbx) { // This gives the chronic conditions a value... (And now the OTC MEds too)
	if (document.getElementById(chbx).checked == true) {
		document.getElementById(chbx).value = 'X';
	}else{
		document.getElementById(chbx).value = '';
	}
}

function valuImm() { // x = selected prefix of id, y = hidden field accepting results
// First give value to the joined fields
var destj = new Array("dtp2m","dtp4m","dtp6m","dtp15m","pol2","pol4","pol6","pol15","mmrm","hep02","hep24","hepb","vari1");
var origj = new Array("_dtp1","_dtp2","_dtp3","_dtp4","_pol1","_pol2","_pol3","_pol4","_mmr1","_hep1","_hep2","_hep3","_vari1");
// Giving value to transfer values next
var destv = new Array("dtp4y","dt","mmry","vari2","inf","smpx","pneu","other1s","other2s");
var origv = new Array("_dtp5","_dtp6","_mmr2","_vari2","_inf1","_smpx1","_pneu1","_other1s","_other2s");

var i = 0;
	do
		{
			if ((document.getElementById(origj[i]+'a').value != "")&&(document.getElementById(origj[i]+'b').value != "")) { // Eliminating empty fields
				document.getElementById(destj[i]).value = document.getElementById(origj[i]+'a').value + "/" + document.getElementById(origj[i]+'b').value;
			}
			i++;
		}
	while (destj[i-1] != "vari1");
	
var i = 0;
	do
		{
			if (document.getElementById(origv[i]).value != "") { // Eliminating empty fields
				document.getElementById(destv[i]).value = document.getElementById(origv[i]).value;
			}
			i++;
		}
	while (destv[i-1] != "other2s");
}

function disableImmune() { // Turns on the correct immunizations per age
  if (document.getElementById('Age').value >= 18) {
	document.getElementById('_dtp6').disabled = false;
	return true;
	}
  document.getElementById('_dtp1a').disabled = false;   document.getElementById('_dtp1b').disabled = false;
  document.getElementById('_dtp2a').disabled = false;   document.getElementById('_dtp2b').disabled = false;
  document.getElementById('_dtp3a').disabled = false;   document.getElementById('_dtp3b').disabled = false;
  document.getElementById('_dtp4a').disabled = false;   document.getElementById('_dtp4b').disabled = false;
  document.getElementById('_dtp5').disabled = false;
  if (document.getElementById('Age').value >= 11) {
	document.getElementById('_dtp6').disabled = false;
  	}
  document.getElementById('_pol1a').disabled = false;   document.getElementById('_pol1b').disabled = false;
  document.getElementById('_pol2a').disabled = false;   document.getElementById('_pol2b').disabled = false;
  document.getElementById('_pol3a').disabled = false;   document.getElementById('_pol3b').disabled = false;
  document.getElementById('_pol4a').disabled = false;   document.getElementById('_pol4b').disabled = false;
  document.getElementById('_mmr1a').disabled = false;   document.getElementById('_mmr1b').disabled = false;
  document.getElementById('_mmr2').disabled = false;
 
}

function disableCat() {  // Names for all Prefs -> AsCo, CoHe, CrHe, EdHe, GrLe, LeSo, SePr, SwAi, TeGa, WaDi, (NoPr)
  if (document.getElementById('TcAc').value == "Teen") {	// disable all Non-Teen Help Prefs (TC <= 17)
    document.getElementById('AsCo').disabled = true;			// TC != AsCo, CrHe, EdHe, SePr
    document.getElementById('av_AsCo').className = 'unavail';	// TC == *CoHe, GrLe, LeSo, SwAi, TeGa, *WaDi, *(NoPr)
	document.getElementById('CrHe').disabled = true;		
    document.getElementById('av_CrHe').className = 'unavail';
	document.getElementById('EdHe').disabled = true;
    document.getElementById('av_EdHe').className = 'unavail';
	document.getElementById('SePr').disabled = true;
    document.getElementById('av_SePr').className = 'unavail';
	
	document.getElementById('CoHe').disabled = false;
	document.getElementById('av_CoHe').className = 'avail';
	document.getElementById('GrLe').disabled = false;	// enable all Teen Help Prefs (TC <= 17)
    document.getElementById('av_GrLe').className = 'avail';
	document.getElementById('LeSo').disabled = false;
    document.getElementById('av_LeSo').className = 'avail';
	document.getElementById('SwAi').disabled = false;
    document.getElementById('av_SwAi').className = 'avail';
	document.getElementById('TeGa').disabled = false;
    document.getElementById('av_TeGa').className = 'avail';
	document.getElementById('WaDi').disabled = false;
    document.getElementById('av_WaDi').className = 'avail';
	document.getElementById('NoPr').disabled = false;
    document.getElementById('av_NoPr').className = 'avail';
	}
			// Choosing to be an AdultTC (18 - 25)  // Names for all Prefs -> AsCo, CoHe, CrHe, EdHe, GrLe, LeSo, SePr, SwAi, TeGa, WaDi, (NoPr)
  else if(document.getElementById('TcAc').value == "ATC") {	
    document.getElementById('AsCo').disabled = true;			// disable all Non-AdultTC Help Prefs (Adult TC >= 18, Choosing TC)
    document.getElementById('av_AsCo').className = 'unavail';	// ATC != AsCo, SePr
    document.getElementById('SePr').disabled = true;			// ATC == *CoHe, CrHe, EdHe, GrLe, LeSo, SwAi, TeGa, *WaDi, *(NoPr)
    document.getElementById('av_SePr').className = 'unavail';
	
	document.getElementById('CoHe').disabled = false;
	document.getElementById('av_CoHe').className = 'avail';
	document.getElementById('CrHe').disabled = false;			// enable all AdultTC Help Prefs (Acult TC >= 18, Choosing TC)
    document.getElementById('av_CrHe').className = 'avail';
	document.getElementById('EdHe').disabled = false;
    document.getElementById('av_EdHe').className = 'avail';
	document.getElementById('GrLe').disabled = false;
    document.getElementById('av_GrLe').className = 'avail';
	document.getElementById('LeSo').disabled = false;
    document.getElementById('av_LeSo').className = 'avail';
	document.getElementById('SwAi').disabled = false;
    document.getElementById('av_SwAi').className = 'avail';
	document.getElementById('TeGa').disabled = false;
    document.getElementById('av_TeGa').className = 'avail';
	document.getElementById('WaDi').disabled = false;
    document.getElementById('av_WaDi').className = 'avail';
	document.getElementById('NoPr').disabled = false;
    document.getElementById('av_NoPr').className = 'avail';
  	}
		// They are an Adult >25  // Names for all Prefs -> AsCo, CoHe, CrHe, EdHe, GrLe, LeSo, SePr, SwAi, TeGa, WaDi, (NoPr)
  else if(document.getElementById('TcAc').value == "Adult") {				// disable all Non-Adult Help Prefs (Adult >= 18, choose/are Adult)
	document.getElementById('GrLe').disabled = true;			// Adult != GrLe, LeSo, SwAi, TeGa
    document.getElementById('av_GrLe').className = 'unavail';	// Adult == AsCo, *CoHe, CrHe, EdHe, SePr, *WaDi, *(NoPr)
	document.getElementById('LeSo').disabled = true;		
    document.getElementById('av_LeSo').className = 'unavail';
	document.getElementById('SwAi').disabled = true;
    document.getElementById('av_SwAi').className = 'unavail';
	document.getElementById('TeGa').disabled = true;
    document.getElementById('av_TeGa').className = 'unavail';

	document.getElementById('AsCo').disabled = false;			// <form name="formreg">
    document.getElementById('av_AsCo').className = 'avail';		// <input type="text" name="TcAc" value="(Teen/AdultTC/Adult)" OnBlur="disabledCat();">
	document.getElementById('CoHe').disabled = false;
	document.getElementById('av_CoHe').className = 'avail';
	document.getElementById('CrHe').disabled = false;			// <input type="text" name="(8 different Prefs names)" disabled>
    document.getElementById('av_CrHe').className = 'avail';		// </form>
	document.getElementById('EdHe').disabled = false;	
    document.getElementById('av_EdHe').className = 'avail';
	document.getElementById('SePr').disabled = false;	
    document.getElementById('av_SePr').className = 'avail';
	document.getElementById('WaDi').disabled = false;
    document.getElementById('av_WaDi').className = 'avail';
	document.getElementById('NoPr').disabled = false;
    document.getElementById('av_NoPr').className = 'avail';
  	}
		// Just in case...  // Names for all Prefs -> AsCo, CoHe, CrHe, EdHe, GrLe, LeSo, SePr, SwAi, TeGa, WaDi, (NoPr)
  else {
	document.getElementById('AsCo').disabled = true;			// Making everything unavailable -> JIC
    document.getElementById('av_AsCo').className = 'unavail';
	document.getElementById('CoHe').disabled = true;
	document.getElementById('av_CoHe').className = 'unavail';
	document.getElementById('CrHe').disabled = true;			
    document.getElementById('av_CrHe').className = 'unavail';		
	document.getElementById('EdHe').disabled = true;	
    document.getElementById('av_EdHe').className = 'unavail';
	document.getElementById('GrLe').disabled = true;	
    document.getElementById('av_GrLe').className = 'unavail';
	document.getElementById('LeSo').disabled = true;
    document.getElementById('av_LeSo').className = 'unavail';
	document.getElementById('SePr').disabled = true;
    document.getElementById('av_SePr').className = 'unavail';
	document.getElementById('SwAi').disabled = true;
    document.getElementById('av_SwAi').className = 'unavail';
	document.getElementById('TeGa').disabled = true;
    document.getElementById('av_TeGa').className = 'unavail';
	document.getElementById('WaDi').disabled = true;
	document.getElementById('av_WaDi').className = 'unavail';
	document.getElementById('NoPr').disabled = true;
	document.getElementById('av_NoPr').className = 'unavail';
  }
}

// OTC Med Choose All Function
function cxAll() {
	if (document.getElementById('all').checked == true) {		// This runs if box is being checked...
	document.getElementById('apap').checked = true;
	document.getElementById('apap').value = 'X';
	document.getElementById('motrin').checked = true;
	document.getElementById('motrin').value = 'X';
	document.getElementById('abx').checked = true;
	document.getElementById('abx').value = 'X';
	document.getElementById('benadryl').checked = true;
	document.getElementById('benadryl').value = 'X';
	document.getElementById('pepto').checked = true;
	document.getElementById('pepto').value = 'X';
}else{
	document.getElementById('apap').checked = false;
	document.getElementById('apap').value = '';
	document.getElementById('motrin').checked = false;
	document.getElementById('motrin').value = '';
	document.getElementById('abx').checked = false;
	document.getElementById('abx').value = '';
	document.getElementById('benadryl').checked = false;
	document.getElementById('benadryl').value = '';
	document.getElementById('pepto').checked = false;
	document.getElementById('pepto').value = '';
}}

// Names for all Prefs -> AsCo, CoHe, CrHe, EdHe, GrLe, LeSo, SePr, SwAi, TeGa, WaDi, (NoPr)

function noPrefs() { // Unchecks all the Prefs boxes when "No Preferences" is checked.
	document.getElementById('AsCo').checked = false;
	document.getElementById('CoHe').checked = false;
	document.getElementById('CrHe').checked = false;
	document.getElementById('EdHe').checked = false;
	document.getElementById('GrLe').checked = false;
	document.getElementById('LeSo').checked = false; 
	document.getElementById('SePr').checked = false;
	document.getElementById('SwAi').checked = false;
	document.getElementById('TeGa').checked = false;
	document.getElementById('WaDi').checked = false;
	
	document.getElementById('Pref1').value = 'NoPr'; // Clears Pref values and sets Pref1 to 'NoPr'.
	document.getElementById('Pref2').value = '';
	document.getElementById('Pref3').value = '';	
}

function only3(chbx) { // Only allows 3 options to be checked at any given time.
	if (document.getElementById(chbx).checked == true) {		// This runs if box is being checked...
		if (document.getElementById('Pref1').value == "NoPr") {		// If currently set to "No Preferences" then do this...
			document.getElementById('NoPr').checked = false; 		// Clears the "No Preferences" checkbox
			document.getElementById('Pref1').value = chbx;			// Sets Pref1 to chbx
			return true;											// Skips rest of function
		}
		if (document.getElementById('Pref3').value != "") { 
			unchk = document.getElementById('Pref3').value;
			document.getElementById(unchk).checked = false;
		}
		if (document.getElementById('Pref2').value != "") {
			document.getElementById('Pref3').value = document.getElementById('Pref2').value;
		}
		if (document.getElementById('Pref1').value != "") {
			document.getElementById('Pref2').value = document.getElementById('Pref1').value;
		}
		document.getElementById('Pref1').value = chbx;
	} else {
		if (chbx == document.getElementById('Pref1').value) {
			document.getElementById('Pref1').value = document.getElementById('Pref2').value;
			document.getElementById('Pref2').value = document.getElementById('Pref3').value;
			document.getElementById('Pref3').value = "";
		}
		if (chbx == document.getElementById('Pref2').value) {
			document.getElementById('Pref2').value = document.getElementById('Pref3').value;
			document.getElementById('Pref3').value = "";
		}
		if (chbx == document.getElementById('Pref3').value) {
			document.getElementById('Pref3').value = "";
		}
	}
}

//===========================================================
// 
// All "full page" validations are below.
//
//===========================================================
function validatePage0(formURL) {  // THIS IS THE INITIAL PAGE
    var elem;
    var errs=0;
    // execute all element validations in reverse order, so focus gets
    // set to the first one in error.
	// true if required, false if not
	// validatePresent function doesn't require T/F
    if (document.forms.initreg.yesyr.checked == true){
		if (!validatePresent(document.forms.initreg.Regcode,'checkvis1c'))	errs += 1; 
		}
    if (!validateRadioCkd(document.forms.initreg.yesyr, document.forms.initreg.noyr, 'inf_regyr')) 	errs += 1; 
    if (!validatePresent(document.forms.initreg.Gender, 'inf_Gender')) 	errs += 1; 
  	if (!validatePresent(document.forms.initreg.Member, 'inf_Member')) 	errs += 1;
    if (!validateDate(document.forms.initreg.DOB,   	'inf_DOB')) 	errs += 1; 
    if (!validateName(document.forms.initreg.Surname,'inf_Surname')) errs += 1; 
    if (!validateName(document.forms.initreg.Name, 	'inf_Name')) 	errs += 1; 
		
    if (errs>1) { alert('There are fields which need correction before continuing');
					return false;}
    else if (errs==1) { alert('There is a field which needs correction before continuing');
					return false;}

    else {
//		features = 'left=40,top=40,width=620,height=640,toolbar=1,location=1,directories=1,menubar=1,status=1,scrollbars=1,copyhistory=no,resizable=no'; // Testing Window
		features = 'left=40,top=40,width=620,height=640,toolbar=0,location=0,directories=0,menubar=0,scrollbars=1,copyhistory=no,resizable=no'; // Non-Test Window
		pop = window.open('',formURL,features);
		if(pop.focus){ pop.focus(); }
		return true;}
}

function validatePage1() {  // THIS IS PAGE ONE
    var elem;
    var errs=0;
	var Age = document.forms.formreg.Age.value;
    // execute all element validations in reverse order, so focus gets
    // set to the first one in error.
	// true if required, false if not
	// validatePresent function doesn't require T/F

// "Testing" escape
if (document.forms.formreg.Name.value == "Testing"){
	showLayer('page2'); scroll(0,0); fieldFocus('FCrel');
}else{
	if (Age >= 13)
	if (!validatePresent(document.forms.formreg.Pref1, 'inf_Prefs')) 	errs += 1;
    if (Age >= 15)
	if (!validatePresent(document.forms.formreg.PrePost, 'inf_PrePost')) errs += 1;
    if (Age >= 16) 
	if (!validatePresent(document.forms.formreg.Car, 'inf_Car')) 		errs += 1;
	if ((Age >= 5) && (Age <= 12)) 
	if (!validatePresent(document.forms.formreg.AinC, 'inf_AinC'))		errs += 1;
	if (!validatePresent(document.forms.formreg.Member, 'inf_Member')) 	errs += 1;
    if ((document.forms.formreg.Age.value >= 18)&&(document.forms.formreg.Age.value <= 25)) 
	if (!validateRadioCkd(document.forms.formreg.Teen, document.forms.formreg.Adult, 'inf_TcAc')) 	errs += 1;
	if (!validatePresent(document.forms.formreg.Size, 	'inf_Size')) 	errs += 1; 
	if (Age >= 15) 
	if (!validateEmail(document.forms.formreg.Email, 'inf_Email', true)) 	errs += 1; 
	if (!validateTelnr(document.forms.formreg.Hphone, 'inf_Hphone', true)) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.ZIP, 	'inf_ZIP')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.State, 	'inf_State')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.City, 	'inf_City')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.Street, 'inf_Street')) 	errs += 1; 
		
    if (errs>1) { alert('There are fields which need correction before continuing');
					return false;}
    else if (errs==1) { alert('There is a field which needs correction before continuing');
					return false;}

    else  {showLayer('page2'); scroll(0,0); fieldFocus('FCrel')}
}}

function validatePage2() {  // THIS IS PAGE TWO
    var elem;
    var errs=0;
    // execute all element validations in reverse order, so focus gets
    // set to the first one in error.
	// true if required, false if not
	// validatePresent function doesn't require T/F
// "Testing" escape
if (document.forms.formreg.Name.value == "Testing"){
	showLayer('page3'); scroll(0,0); fieldFocus('Doctor');
}else{
    if (!validateTelnr(document.forms.formreg.C3phone3, 'inf_C3phone3'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C3phone2, 'inf_C3phone2'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C3phone1, 'inf_C3phone1', true))errs += 1; 
    if (!validatePresent(document.forms.formreg.Contact3,'inf_Contact3'))errs += 1; 
    if (!validatePresent(document.forms.formreg.C3Rel,	'inf_C3Rel')) 	errs += 1; 

    if (!validateTelnr(document.forms.formreg.C2phone3, 'inf_C2phone3'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C2phone2, 'inf_C2phone2'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C2phone1, 'inf_C2phone1', true))errs += 1; 
    if (!validatePresent(document.forms.formreg.Contact2,'inf_Contact2'))errs += 1; 
    if (!validatePresent(document.forms.formreg.C2Rel,	'inf_C2Rel')) 	errs += 1; 
	
    if (!validateTelnr(document.forms.formreg.C1phone3, 'inf_C1phone3'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C1phone2, 'inf_C1phone2'))errs += 1; 
    if (!validateTelnr(document.forms.formreg.C1phone1, 'inf_C1phone1', true))errs += 1; 
    if (!validatePresent(document.forms.formreg.Contact1,'inf_Contact1'))errs += 1; 
    if (!validatePresent(document.forms.formreg.C1Rel,	'inf_C1Rel')) 	errs += 1; 
	
	if (!validatePresent(document.forms.formreg.Method, 'inf_Method'))	errs += 1;
	if (!validateEmail(document.forms.formreg.FCemail,'inf_FCemail', true))	errs += 1; 
	if (!validateTelnr(document.forms.formreg.FCphone,'inf_FCphone', true))	errs += 1; 
	if (!validatePresent(document.forms.formreg.FCzip, 	'inf_FCzip')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.FCstate,'inf_FCstate')) errs += 1; 
	if (!validatePresent(document.forms.formreg.FCcity, 'inf_FCcity')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.FCstreet,'inf_FCstreet'))errs += 1; 
	if (!validatePresent(document.forms.formreg.FCname, 'inf_FCname')) 	errs += 1; 
	if (!validatePresent(document.forms.formreg.FCrel, 	'inf_FCrel')) 	errs += 1; 
		
    if (errs>1) { alert('There are fields which need correction before continuing');
					return false;}
    else if (errs==1) { alert('There is a field which needs correction before continuing');
					return false;}

    else  {showLayer('page3'); scroll(0,0); fieldFocus('Doctor')}
}}

function validatePage3() {  // THIS IS PAGE THREE
    var elem;
    var errs=0;
	var Age = document.forms.formreg.Age.value;
    // execute all element validations in reverse order, so focus gets
    // set to the first one in error.
	//true if required, false if not
	// validatePresent function doesn't require T/F
// "Testing" escape
if (document.forms.formreg.Name.value == "Testing"){
	return true;
}else if (Age >= 18){
    if (!validatePresent(document.forms.formreg.dt,		'inf_dtp')) 	errs += 1; 
}else{
    if (Age >= 6)
	if (!validatePresent(document.forms.formreg.mmry, 	'inf_mmr')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.mmrm,   'inf_mmr')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.pol6, 	'inf_pol')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.pol4, 	'inf_pol')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.pol2,   'inf_pol')) 	errs += 1; 
    if (Age >= 12)
	if (!validatePresent(document.forms.formreg.dt,		'inf_dtp')) 	errs += 1; 
    if (Age >= 6)
	if (!validatePresent(document.forms.formreg.dtp4y, 	'inf_dtp')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.dtp15m, 'inf_dtp')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.dtp6m,  'inf_dtp')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.dtp4m,	'inf_dtp')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.dtp2m, 	'inf_dtp')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.InsureNum, 'inf_InsureNum')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.Insure, 'inf_Insure')) 	errs += 1; 
    if (!validateTelnr(document.forms.formreg.DrPhone, 	'inf_DrPhone')) errs += 1; 
    if (!validatePresent(document.forms.formreg.Clinic, 'inf_Clinic')) 	errs += 1; 
    if (!validatePresent(document.forms.formreg.Doctor,	'inf_Doctor')) 	errs += 1; 
}		
    if (errs>1) { alert('There are fields which need correction before continuing');
					return false;}
    else if (errs==1) { alert('There is a field which needs correction before continuing');
					return false;}

    else return (errs==0);
}

// ----------------------------------------------------------------------
// Javascript form validation routines.
// Author: Stephen Poley
//
// Simple routines to quickly pick up obvious typos.
// All validation routines return true if executed by an older browser:
// in this case validation must be left to the server.
//
// Update Jun 2005: discovered that reason IE wasn't setting focus was
// due to an IE timing bug. Added 0.1 sec delay to fix.
//
// Update Oct 2005: minor tidy-up: unused parameter removed
//
// Update Jun 2006: minor improvements to variable names and layout
// ----------------------------------------------------------------------

var nbsp = 160;		// non-breaking space char
var node_text = 3;	// DOM text node-type
var emptyString = /^\s*$/ ;
var global_valfield;	// retain valfield for timer thread

// --------------------------------------------
//                  trim
// Trim leading/trailing whitespace off string
// --------------------------------------------

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}


// --------------------------------------------
//                  setfocus
// Delayed focus setting to get around IE bug
// --------------------------------------------

function setFocusDelayed()
{
  global_valfield.focus();
}

function setfocus(valfield)
{
  // save valfield in global variable so value retained when routine exits
  global_valfield = valfield;
  setTimeout( 'setFocusDelayed()', 100 );
}


// --------------------------------------------
//                  msg
// Display warn/error message in HTML element.
// commonCheck routine must have previously been called
// --------------------------------------------

function msg(fld,     // id of element to display message in
             msgtype, // class to give element ("warn" or "error")
             message) // string to display
{
  // setting an empty string can give problems if later set to a 
  // non-empty string, so ensure a space present. (For Mozilla and Opera one could 
  // simply use a space, but IE demands something more, like a non-breaking space.)
  var dispmessage;
  if (emptyString.test(message)) 
    dispmessage = String.fromCharCode(nbsp);    
  else  
    dispmessage = message;

  var elem = document.getElementById(fld);
  elem.firstChild.nodeValue = dispmessage;  
  
  elem.className = msgtype;   // set the CSS class to adjust appearance of message
}

// --------------------------------------------
//            commonCheck
// Common code for all validation routines to:
// (a) check for older / less-equipped browsers
// (b) check if empty fields are required
// Returns true (validation passed), 
//         false (validation failed) or 
//         proceed (don't know yet)
// --------------------------------------------

var proceed = 2;  

function commonCheck    (valfield,   // element to be validated
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(infofield);
  if (!elem.firstChild) return true;  // not available on this browser 
  if (elem.firstChild.nodeType != node_text) return true;  // infofield is wrong type of node  

  if (emptyString.test(valfield.value)) {
    if (required) {
      msg (infofield, "error", "ERROR: Required");  
      setfocus(valfield);
      return false;
    }
    else {
      msg (infofield, "warn", "");   // OK
      return true;  
    }
  }
  return proceed;
}

// --------------------------------------------
//            validatePresent
// Validate if something has been entered
// Returns true if so 
// --------------------------------------------

function validatePresent(valfield,   // element to be validated
                         infofield ) // id of element to receive info/error msg
{
  var stat = commonCheck (valfield, infofield, true);
  if (stat != proceed) return stat;

  msg (infofield, "warn", "");  
  return true;
}

// --------------------------------------------
//            validateRadioCkd **
// Validate if one radio in pair is checked
// Returns true if so 
// --------------------------------------------

function validateRadioCkd(valfield1,   	// element #1 to be validated
						  valfield2,	// element #2 to be validated
                         infofield ) 	// id of element to receive info/error msg
{
	if ((valfield1.checked == false) && (valfield2.checked == false)){
      msg (infofield, "error", "ERROR: Required");  
      setfocus(valfield1);
      return false;
	}
	else{
	  msg (infofield, "warn", "");  
  	  return true;
	}
}

// --------------------------------------------
//            validateName ** Working
// Validate if alphabetical and then Caps 1st / lower rest of string
// Returns true if so 
// --------------------------------------------

function validateName	(valfield,   // element to be validated
                         infofield ) // id of element to receive info/error msg
{
  var stat = commonCheck (valfield, infofield, true);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var name = /[^a-zA-Z -]/	; // added space and dash - 3/22/08 -> working?
  if (name.test(tfld)) {
    msg (infofield, "error", "ERROR: not a valid name");
	setfocus(valfield);
	return false;
  }
  if ((tfld.length <= 2)||(tfld.length >= 25)){
    msg (infofield, "warn", "Unusual name length");
	setfocus(valfield);
  }
  else{
    msg (infofield, "warn", "");
    valfield.value = tfld.charAt(0).toUpperCase()+tfld.substr(1).toLowerCase(); // Capitalizes first letter
  }
  return true;
}

// --------------------------------------------
//            validateZIP ** Working
// Validate if 5 or 9 digit ZIP code
// Returns true if so 
// --------------------------------------------

function validateZIP	(valfield,   // element to be validated
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  var stat = commonCheck (valfield, infofield, required);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var valid = "0123456789-";
  var hyphencount = 0;

  if (tfld.length!=5 && tfld.length!=10) {
    msg (infofield, "error", "ERROR: not a 5 or 9 digit ZIP");
	setfocus(valfield);
	return false;
  }

  for (var i=0; i < tfld.length; i++) {
	temp = ""+tfld.substring(i, i+1);
	if (temp == "-") hyphencount++;
	if (valid.indexOf(temp) == "-1") {
      msg (infofield, "warn", "Invalid characters in ZIP");
	setfocus(valfield);
	  return false;
	}
	if ((hyphencount > 1) || ((tfld.length==10) && (""+tfld.charAt(5)!="-"))) {
      msg (infofield, "warn", "Not a properly formatted ZIP");
	setfocus(valfield);
	  return false;
	}
  }
msg (infofield, "warn", "");
return true;
}  
  

// --------------------------------------------
//               validateEmail
// Validate if e-mail address
// Returns true if so (and also if could not be executed because of old browser)
// --------------------------------------------

function validateEmail  (valfield,   // element to be validated
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  var stat = commonCheck (valfield, infofield, required);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
  if (!email.test(tfld)) {
    msg (infofield, "error", "ERROR: not a valid e-mail address");
    setfocus(valfield);
    return false;
  }

  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
  if (!email2.test(tfld)) 
    msg (infofield, "warn", "Unusual - Check if correct");
  else
    msg (infofield, "warn", "");
  return true;
}


// --------------------------------------------
//            validateTelnr
// Validate telephone number
// Returns true if so (and also if could not be executed because of old browser)
// Permits spaces, hyphens, brackets and leading +
// --------------------------------------------

function validateTelnr  (valfield,   // element to be validated
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  var stat = commonCheck (valfield, infofield, required);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var telnr = /^[1-9]{1}[0-9]{2}-[0-9]{3}-[0-9]{4}$/  ;
  
  if (!telnr.test(tfld)) {
    msg (infofield, "error", "ERROR: not a valid phone #");
    setfocus(valfield);
    return false;
  }

  var numdigits = 0;
  for (var j=0; j<tfld.length; j++)
    if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;

  if (numdigits<6) {
    msg (infofield, "error", "ERROR: " + numdigits + " digits - too short");
    setfocus(valfield);
    return false;
  }

  if (numdigits>14)
    msg (infofield, "warn", numdigits + " digits - check if correct");
  else { 
    if (numdigits<10)
      msg (infofield, "warn", "Only " + numdigits + " digits - check if correct");
    else
      msg (infofield, "warn", "");
  }
  return true;
}

// --------------------------------------------
//             validateAge
// Validate person's age
// Returns true if OK 
// --------------------------------------------

function validateAge    (valfield,   // element to be validated
                         infofield,  // id of element to receive info/error msg
                         required)   // true if required
{
  var stat = commonCheck (valfield, infofield, required);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);
  var ageRE = /^[0-9]{1,3}$/
  if (!ageRE.test(tfld)) {
    msg (infofield, "error", "ERROR: not a valid age");
    setfocus(valfield);
    return false;
  }

  if (tfld>=200) {
    msg (infofield, "error", "ERROR: not a valid age");
    setfocus(valfield);
    return false;
  }

  if (tfld>110) msg (infofield, "warn", "Older than 110: check correct");
  else {
    if (tfld<7) msg (infofield, "warn", "Bit young for this, aren't you?");
    else        msg (infofield, "warn", "");
  }
  return true;
}

// --------------------------------------------
//             validateDate ** Working
// Validate a date
// Returns true if OK 
// --------------------------------------------

// Declaring valid date character, minimum year and maximum year
var dtCh= "-";
var minYear=1900;
var maxYear=2010;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}
//	Date Reg Exp	/^(\d{1,2})[./-](\d{1,2})[./-](\d{4})$/

function validateDate  (valfield,   // element to be validated
                         infofield)  // id of element to receive info/error msg
{
	var stat = commonCheck (valfield, infofield, true);
  	if (stat != proceed) return stat;

	var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
	var date = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/  ;


	var daysInMonth = DaysArray(12)
	var pos1=tfld.indexOf(dtCh)
	var pos2=tfld.indexOf(dtCh,pos1+1)
	var strMonth=tfld.substring(0,pos1)
	var strDay=tfld.substring(pos1+1,pos2)
	var strYear=tfld.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (tfld.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(tfld, dtCh))==false){
    	msg (infofield, "error", "ERROR: Required");
		setfocus(valfield);
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
    msg (infofield, "warn", "Enter a Month");
		setfocus(valfield);
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
    msg (infofield, "warn", "Enter a valid day");
		setfocus(valfield);
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
    msg (infofield, "warn", "Enter a Year");
		setfocus(valfield);
		return false;
	}
msg (infofield, "warn", "");
return true;
}

// ----------------------------------------------------------------------
// Javascript form validation routines.
// Author: Stephen Poley
//
// File 2: checkboxes
// Uses the msg routine from formval.js
// ----------------------------------------------------------------------


// -----------------------------------------
//            commonCheck2
// Common code for checkbox validation routines to
// check for older / less-equipped browsers
// Returns true (validation passed) or
//         proceed (don't know yet)
// -----------------------------------------

var proceed = 2;  

function commonCheck2   (vfld,   // element to be validated
                         ifld)   // id of element to receive info/error msg
{
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(ifld);
  if (!elem.firstChild)
    return true;  // not available on this browser 
  if (elem.firstChild.nodeType != node_text)
    return true;  // ifld is wrong type of node  

  msg (ifld, "warn", "");  // clear any previous error message
  return proceed;
}



// -----------------------------------------
//            validateCheckbox
// Validate that the correct number of checkboxes has been checked.
// Returns true if valid (and also if could not be executed because 
// of old browser)
// -----------------------------------------

function validateCheckbox  (vfld,   // checkboxes to be validated
                            ifld,   // id of element to receive info/error msg
                            nr,     // number of checkboxes to be checked. >=2
                            cond)   // condition: -1 = less than or equal to nr
                                    //             0 = equal to nr (default)
                                    //             1 = greater than or equal to nr
{
  if (!nr || nr<2) {
    alert('Programming error in validateCheckbox: nr<2'); 
       // for nr=1 use radio buttons or validateConfirm
    return true;
  }
  if (!cond) cond = 0;

  var stat = commonCheck2(vfld, ifld);
  if (stat != proceed) return stat;

  // count how many boxes have been checked by the reader
  var count = 0;
  for (var j=0; j<vfld.length; j++)
     if (vfld[j].checked) count++;

  if (count==nr) return true;
  if (count<nr && cond==-1) return true;
  if (count>nr && cond==1)  return true;

  // if we get here then the validation has failed

  var suffix='';
  if (count>1) suffix='es';

  var errorMsg;

  if (count<nr) errorMsg = 'Only ' + count + ' box' + suffix + ' checked: ' + nr + ' required';
  if (count>nr) errorMsg = '' + count + ' boxes checked: maximum ' + nr + ' allowed';
  if (count==0) errorMsg = 'No boxes checked: ' + nr + ' required';

  msg (ifld, "error", errorMsg);
  return false;
}


// -----------------------------------------
//            validateConfirm 
// Usually one doesn't want to validate if 1 checkbox of a set has been
// checked, because in this case one would use radio buttons instead.
// But sometimes one wants a reader to check a single box to confirm that 
// he or she agrees to something. That is covered by this routine.
//
// Returns true if valid (and also if could not be executed because 
// of old browser)
// -----------------------------------------

function validateConfirm   (vfld,   // checkbox to be validated
                            ifld)   // id of element to receive info/error msg
{
  var stat = commonCheck2(vfld, ifld);
  if (stat != proceed) return stat;

  if (vfld.checked) return true;

  // if we get here then the validation has failed

  var errorMsg = 'Please read the above message and confirm you agree to it';

  msg (ifld, "error", errorMsg);
  return false;
}





