// GLOBAL FORM FUNCTIONS
//********************************************************************************************************
// Created: June 12, 2008
// By: Keith Valley
// Purpose: To create one document that can be included in all form pages to for java form verification 
//
//********************************************************************************************************
// 		TOC
/*
1. isBlank (inString)															
2. isWithinRange (inString, rangeMin, rangeMax)
3. trim (string)
6. advance(str)
7. isNumberString(inString)
8. isLetter(c)
9. isEmail(str)
7. cent(amount)
8. round(number)
9. isNumeric(str)
10. isLetter (c)


*/

// whitespace characters
var whitespace = " \t\n\r";

/*
 * Function: isBlank (inString)
 * Purpose: Is the String Blank or empty
 * Arguments: String
 * Returns: boolean
 **/
function isBlank (inString) {
	if (inString == null || inString.length == 0) {
		return true;
	} else {
		return false;
	}
}
//********************************************************************************
//Function: isWithinRange (inString, rangeMin, rangeMax)
//Purpose: Is the String within the range
//Arguments: String, integer, integer
//Returns: boolean
//********************************************************************************
function isWithinRange (inString, rangeMin, rangeMax)  {
	if ((inString == null) || (inString == "")) { 
		return (false);
	}
	if((inString >= rangeMin) && (inString <= rangeMax)) {
		return true;
	} else {
		return false;
	}
}

//********************************************************************************
//Function: trim (string)
//Purpose: Removes the white space at the edges
//Arguments: String
//Returns: String
//********************************************************************************
function trim(sString) 
{ 
  while (sString.substring(0,1) == ' ') 
  { 
    sString = sString.substring(1, sString.length); 
  } 
  while (sString.substring(sString.length-1, sString.length) == ' ') 
  { 
    sString = sString.substring(0,sString.length-1); 
  } 
return sString; 
} 
//*************************************************
// If textbox reaches 2 in length go to next
//*************************************************
function advance(currentField,nextField) {
    if (currentField.value.length == 3)
        document.regForm[nextField].focus();
}

//****************************************************
// returns the amount in the .99 format
//****************************************************
function cent(amount) {
  amount -= 0;
  return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
}

//**********************************************************
// returns a number rounded to 2 decimal places
//**********************************************************
function round(number) {
  var X
  X = (!X ? 2 : X);
  return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}


//********************************************************************************
// Function: isNumeric(str)
// Purpose: is string a numeric (integer or float)
// Arguments: String
// Returns: boolean
//********************************************************************************
function isNumeric(str) {
  var num;

  /* matches 99.999 */
  if (str.indexOf(".") > 0) {
    num = str.split(".");
    if (num.length == 2) {
      for (var i = 0; i < num.length; i++) {
        if (!isNumberString(num[i])) {
	  return false;
	}
      }
      return true;
    } else if (num.length > 2) {
      return false;
    }
    /* matches .999 */
    } else if (str.indexOf(".") == 0) {
      var temp = str.substring(1, str.length);
      if (isNumberString(temp)) {
        return true;
      } else {
	false;
      }
      
    /* matches 999 */
    } else if (isNumberString(str)) {
      return true;
    } else {
    return false;
  }
}
//*******************************************************************************
// Function: isNumberString(inString)
// Purpose: is the String a number (Integer)
// Arguments: String
// Returns: boolean
//*******************************************************************************
function isNumberString(inString)  {
  if (inString.length == 0) { 
    return false;
  }
  var refString = "1234567890";
  for (var count=0; count < inString.length; count++)  {
    var tempChar = inString.substring (count, count + 1);
    if (refString.indexOf(tempChar, 0) == -1) {  
      return false;
    }
  }
  return true;
}


//********************************************************************************
// Function: isLetter(c)
// Purpose: to verify that a character is a letter
// Arguments: a single Character
// Returns: true if character c is an English letter (A .. Z, a..z).
//********************************************************************************
function isLetter (c)
{   
  if (c == "-")
  {
    return true;
    //alert("got here");
  }
  else
  {
   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
  }
}


//***************************************************************************
// Verify if the field is empty or not.
// If it is return false and tell the user that is is a required field
// Written By: Keith Valley  - Sept 14, 2001
//**************************************************************************
function isEmpty(val, name, title)
{
  //val = stripWhitespace(val)
  
  if (val == "")
  {
    var s
    s = "You have not entered your "+ title +". Please enter before submitting your registration"
    return warnInvalid(name, s);
  }
  return true;
}


//****************************************************************************
// Notify user that contents of field theField are invalid.
// String s describes expected contents of theField.value.
// Put select theField, put focus in it, and return false.
//****************************************************************************
function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}

//********************************************************************************
//
//********************************************************************************
function isAlphabetic (s, name, title) {   
  var i;
  var send
  send = "The Field '" + title +"' is not in a Valid format.  Please include only Letters (A-Z or a-z) in this field."
  
  for (i = 0; i < s.length; i++)
  {   
        // Check that current character is letter.
        var c = s.charAt(i);
        
        if (!isLetter(c))
        return warnInvalid(name, send);
  }
    // All characters are letters.
    return true;
}



//********************************************************************************
// Removes all characters which appear in string bag from string s.
//********************************************************************************
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++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
//********************************************************************************
// Removes all whitespace characters from s.
// Global variable whitespace (see above)
// defines which characters are considered whitespace.
//********************************************************************************
function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}


//***************************************************************
// Show or hide Diet information
//***************************************************************
function showDiet() {
  if (document.regForm.diet[1].checked)
  {
    showdiv('diet_display');
  } else {
    document.regForm.diet_specify.value="";
    //document.regForm.pnametag.value="";
    hidediv('diet_display');
  }
}




<!-- hide the script from old browsers
//*****************************************************************
// Hide block of HTML code within div tag
//*****************************************************************
function hidediv(id) {

  //safe function to hide an element with a specified id
  if (document.getElementById) { // DOM3 = IE5, NS6
    document.getElementById(id).style.display = 'none';
    
  } else {
    
    if (document.layers) { // Netscape 4
      document.id.display = 'none';
    } else { // IE 4
      document.all.id.style.display = 'none';
    }
  }
}

//*****************************************************************
// show block of HTML code within div tag
//*****************************************************************
function showdiv(id) {

  //safe function to show an element with a specified id
  if (document.getElementById) { // DOM3 = IE5, NS6
    document.getElementById(id).style.display = 'block';
  
  } else {
  
    if (document.layers) { // Netscape 4
      document.id.display = 'block';
    } else { // IE 4
      document.all.id.style.display = 'block';
    }
  }
}


//*********************************************************************
// Enable the specify options if other is selected
//*********************************************************************
function showConference(theElement) {



if (document.regForm.conference[1].checked)
  {    
	document.regForm.ConfFee2.value = "" + cent(720.00);  
	document.regForm.ConfFee1.value = "" + cent(0.00); 	
	document.regForm.ConfFee3.value = "" + cent(0.00); 	
	document.regForm.ConfFee4.value = "" + cent(0.00); 
	document.regForm.day1[0].checked=false;
	document.regForm.day1[1].checked=false;
	document.regForm.day1[2].checked=false;
	document.regForm.day1[3].checked=false;

	document.regForm.day2full[0].checked=false;
	document.regForm.day2full[1].checked=false;
	document.regForm.day2full[2].checked=false;
	document.regForm.day2full[3].disabled=false;
	document.regForm.day2full[4].disabled=false;
	

	showdiv('courses_display');

  } else {
	document.regForm.ConfFee2.value = "" + cent(0.00);  
	hidediv('courses_display');
	TotalCost();  
  }

if (document.regForm.conference[4].checked)
  {    
	document.regForm.ConfFee1.value = "" + cent(0.00); 	
	document.regForm.ConfFee2.value = "" + cent(0.00);  
	document.regForm.ConfFee3.value = "" + cent(0.00); 	
	document.regForm.ConfFee4.value = "" + cent(0.00); 
	document.regForm.ConfFee5.value = "" + cent(425.00); 	
	document.regForm.day1[0].checked=false;
	document.regForm.day1[1].checked=false;
	document.regForm.day1[2].checked=false;
	document.regForm.day1[3].checked=false;

	document.regForm.day2full[0].checked=false;
	document.regForm.day2full[1].checked=false;
	document.regForm.day2full[2].checked=false;
	document.regForm.day2full[3].checked=false;
	document.regForm.day2full[4].checked=false;

  } else {
	document.regForm.ConfFee5.value = "" + cent(0.00);  
	TotalCost();  
  }


if (document.regForm.conference[0].checked || document.regForm.conference[2].checked || document.regForm.conference[3].checked)
{
	showdiv('conference_display');
	document.regForm.course[0].checked=false;
	document.regForm.course[1].checked=false;
	document.regForm.course[2].checked=false;
	if (document.regForm.conference[0].checked)
	  {    
		document.regForm.ConfFee1.value = "" + cent(425.00); 	
		document.regForm.ConfFee2.value = "" + cent(0.00); 	
		document.regForm.ConfFee3.value = "" + cent(0.00); 	
		document.regForm.ConfFee4.value = "" + cent(0.00); 	
		
		TotalCost();  

		document.regForm.day1[0].disabled=false;
		document.regForm.day1[1].disabled=false;
		document.regForm.day1[2].disabled=false;
		document.regForm.day1[3].disabled=true;	
		
		document.regForm.day2full[0].disabled=false;
		document.regForm.day2full[1].disabled=false;
		document.regForm.day2full[2].disabled=false;
		document.regForm.day2full[3].disabled=true;
		document.regForm.day2full[4].disabled=false;

		}

	if (document.regForm.conference[2].checked)
	  {    
		document.regForm.ConfFee3.value = "" + cent(250.00);  
		document.regForm.ConfFee1.value = "" + cent(0.00); 	
		document.regForm.ConfFee2.value = "" + cent(0.00); 	
		document.regForm.ConfFee4.value = "" + cent(0.00); 		
		
		TotalCost();  

		document.regForm.day1[0].disabled=false;
		document.regForm.day1[1].disabled=false;
		document.regForm.day1[2].disabled=false;
		document.regForm.day1[3].disabled=true;		
	
		document.regForm.day2full[0].checked=false;
		document.regForm.day2full[1].checked=false;
		document.regForm.day2full[2].checked=false;
		document.regForm.day2full[3].disabled=true;
		document.regForm.day2full[4].disabled=false;

		document.regForm.day2full[0].disabled=true;
		document.regForm.day2full[1].disabled=true;
		document.regForm.day2full[2].disabled=true;
		document.regForm.day2full[3].disabled=true;
		document.regForm.day2full[4].disabled=true;
			
		//HalfDay();
	  }
	if (document.regForm.conference[3].checked)
	  {    
		document.regForm.ConfFee4.value = "" + cent(250.00);  
		document.regForm.ConfFee1.value = "" + cent(0.00); 	
		document.regForm.ConfFee2.value = "" + cent(0.00); 	
		document.regForm.ConfFee3.value = "" + cent(0.00); 	

		TotalCost();  
		
		document.regForm.day1[0].checked=false;
		document.regForm.day1[1].checked=false;
		document.regForm.day1[2].checked=false;
		document.regForm.day1[3].checked=false;
		
		document.regForm.day1[0].disabled=true;
		document.regForm.day1[1].disabled=true;
		document.regForm.day1[2].disabled=true;
		document.regForm.day1[3].disabled=true;	
		
		document.regForm.day2full[0].disabled=false;
		document.regForm.day2full[1].disabled=false;
		document.regForm.day2full[2].disabled=false;
		document.regForm.day2full[3].disabled=true;
		document.regForm.day2full[4].disabled=false;

		}	

} else {
		document.regForm.ConfFee1.value = "" + cent(0.00);    
		document.regForm.ConfFee3.value = "" + cent(0.00);    
		document.regForm.ConfFee4.value = "" + cent(0.00);    
		hidediv('conference_display');
		TotalCost();  
	  }
  

//When morning half day session is selected (Day 1), they are able to click the afternoon half day session.
/*
if (document.regForm.day1[1].checked || document.regForm.day1[2].checked || document.regForm.day1[3].checked || document.regFrom.conference[3].checked)
	{
	//alert("got here");
	document.regForm.day1.checked=false;
	document.regForm.day1.disabled=true;
  	} else {
	document.regForm.day1.disabled=false;
}
*/


TotalCost();  
}

//*************************************************
// If textbox reaches 2 in length go to next
//*************************************************
function advance(currentField,nextField) {
    if (currentField.value.length == 3)
        document.regForm[nextField].focus();
}

//*****************************************
// Cost variables
//*****************************************
var tax_day
var today
var gst

gst = 5.00
  
//****************************************************
// returns the amount in the .99 format
//****************************************************
function cent(amount) {
  amount -= 0;
  return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
}

//**********************************************************
// returns a number rounded to 2 decimal places
//**********************************************************
function round(number) {
  var X
  X = (!X ? 2 : X);
  return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}



function formatCurrency(num) {
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + num + '.' + cents);
}


//****************************************************************************
// Calculates the total of all conference fees
// Then call the necessary functions to calculate the total cost!
//****************************************************************************
function TotalCost() {
 
  var SubTotal
  var tax
  var Total
  document.regForm.TotalConfFee.value = cent((document.regForm.ConfFee1.value - 0) + (document.regForm.ConfFee2.value - 0) + (document.regForm.ConfFee3.value - 0) + (document.regForm.ConfFee4.value - 0) + (document.regForm.ConfFee5.value - 0))
  document.regForm.TotalPartA.value = cent(document.regForm.TotalConfFee.value - 0);
  document.regForm.SubTotal.value =  cent(document.regForm.TotalConfFee.value - 0);
  SubTotal = (document.regForm.TotalPartA.value - 0);

  if (document.regForm.exempt.checked)
  {
    document.regForm.gst.value = "0.00";
    tax = ("0.00" - 0)
  } else {
 
    // figure out the tax
    tax = SubTotal / 100 * gst;
    tax = Math.floor(tax * 1000)/1000;
    document.regForm.gst.value = "" + cent(round(tax));
  }

Total = (cent(round(tax))-0) + SubTotal
document.regForm.Total.value = "" + cent(Total - 0);
}


/* Validates the document. Returns true if valid                  */
/* else Opens a window with an error message(s) and returns false */
function isValidDocument() {

    //alert("got here");

	var errorMessages = "";
	var valid = true;
    var phone = trim(document.regForm.phone1.value) +"-"+ trim(document.regForm.phone2.value) +"-"+ trim(document.regForm.phone3.value)

	/* find data entry errors */
	/* If an error occured, data input element is highlighted */
	with (document.regForm) {

		/* FIELD NAME = firstname -- Required */
		firstname.value = trim(firstname.value);
		if (isBlank(firstname.value) || firstname.value == "") {
			errorMessages += "Please Enter a First Name.\n";
			valid = false;
			firstname.className  = "DisplayFieldError";
		} else {
			firstname.className  = "DisplayFieldData";
		}

		/* FIELD NAME = lastname -- Required */
		lastname.value = trim(lastname.value);
		if (isBlank(lastname.value) || lastname.value == "") {
			errorMessages += "Please Enter a Last Name.\n";
			valid = false;
			lastname.className  = "DisplayFieldError";
		} else {
			lastname.className  = "DisplayFieldData";
		}
		
		/* FIELD NAME = address -- Required */
		address.value = trim(address.value);
		if (isBlank(address.value) || address.value == "") {
			errorMessages += "Please Enter an Address.\n";
			valid = false;
			address.className  = "DisplayFieldError";
		} else {
			address.className  = "DisplayFieldData";
		}
		
		/* FIELD NAME = city -- Required */
		city.value = trim(city.value);
		if (isBlank(city.value) || city.value == "") {
			errorMessages += "Please Enter a City.\n";
			valid = false;
			city.className  = "DisplayFieldError";
		} else {
			city.className  = "DisplayFieldData";
		}
		
		/* FIELD NAME = pcode  -- Required */
		pcode.value = trim(pcode.value);
		if (isBlank(pcode.value) || pcode.value == "") {
			errorMessages += "Please Enter a Postal Code.\n";
			valid = false;
			pcode.className  = "DisplayFieldError";
		} else {
			pcode.className  = "DisplayFieldData";
		}

		/* FIELD NAME = phone  -- Required */
		if (isBlank(phone1.value) || isBlank(phone2.value) || isBlank(phone3.value) ) {
			errorMessages += "Please Enter a Phone Number.\n";
			valid = false;
			phone1.className  = "DisplayFieldError";
			phone2.className  = "DisplayFieldError";
			phone3.className  = "DisplayFieldError";
		} else {
			phone1.className  = "DisplayFieldData";
			phone2.className  = "DisplayFieldData";
			phone3.className  = "DisplayFieldData";
		}
		
		/* FIELD NAME = email  -- Required */
		email.value = trim(email.value);
		if (isBlank(email.value) || email.value == "") {
			errorMessages += "Please Enter an Email.\n";
			valid = false;
			email.className  = "DisplayFieldError";
		} else {
			email.className  = "DisplayFieldData";
		}
		
		/* FIELD NAME = email  -- Required */
		if (diet[1].checked) {
			if (isBlank(diet_specify.value) || diet_specify.value == "") {
				errorMessages += "Please Enter Specific Dietary Needs.\n";
				valid = false;
				diet_specify.className  = "DisplayFieldError";
			} else {
				diet_specify.className  = "DisplayFieldData";
			}	
		}
		
		/*Make sure that the changes radio button is selected */
		/* FIELD NAME = Changes  -- Required */
		
		//if (conference[0].checked || conference[1].checked || conference[2].checked)

		if (conference[0].checked || conference[1].checked || conference[2].checked || conference[3].checked || conference[4].checked)
		{
		conference[0].classname = "DisplayFieldData";
		conference[1].classname = "DisplayFieldData";
		conference[2].classname = "DisplayFieldData";
		conference[3].classname = "DisplayFieldData";
		conference[4].classname = "DisplayFieldData";
		
		} else {
		  errorMessages += "You have not filled out the conference fees section.\n";
		  valid = false;
		  conference[0].classname = "DisplayFieldError";
		  conference[1].classname = "DisplayFieldError";
		  conference[2].classname = "DisplayFieldError";		  
		  conference[3].classname = "DisplayFieldError";
		  conference[4].classname = "DisplayFieldError";		  
		}
		
		if ((course[0].checked || course[1].checked || course[2].checked) && (conference[1].checked))
		//if ((course[0].checked || course[1].checked) && (conference[1].checked))
		{
		course[0].classname = "DisplayFieldData";
		course[1].classname = "DisplayFieldData";
		course[2].classname = "DisplayFieldData";			
		} else if (conference[1].checked)
		{
		  errorMessages += "You have not filled out the certification course section.\n";
		  valid = false;
		  course[0].classname = "DisplayFieldError";
		  course[1].classname = "DisplayFieldError";
		  course[2].classname = "DisplayFieldError";		  
		}
		
		//if ((day1[0].checked || day1[1].checked || day1[2].checked || day1[3].checked || day1[4].checked || day1[5].checked ||day1.checked || day2full[0].checked ||day2full[1].checked || day2full[2].checked || day2full[3].checked || day3full.checked) && (conference[0].checked))

		if (conference[0].checked)
		{
			if	(day1[0].checked || day1[1].checked || day1[2].checked || day1[3].checked || day2full[0].checked ||day2full[1].checked || day2full[2].checked || day2full[3].checked || day2full[4].checked || day2full[5].checked)
			{
			day1[0].classname = "DisplayFieldData";
			day1[1].classname = "DisplayFieldData";
			day1[2].classname = "DisplayFieldData";			
			day1[3].classname = "DisplayFieldData";			
			day2full[0].classname = "DisplayFieldData";
			day2full[1].classname = "DisplayFieldData";
			day2full[2].classname = "DisplayFieldData";		
			day2full[3].classname = "DisplayFieldData";
			day2full[4].classname = "DisplayFieldData";	
			day2full[5].classname = "DisplayFieldData";				

			} else if (conference[0].checked)
			{
			  errorMessages += "You have not filled out the conference sessions section.\n";
			  valid = false;
			  course[0].classname = "DisplayFieldError";
			  day1[0].classname = "DisplayFieldError";
			  day1[1].classname = "DisplayFieldError";
			  day1[2].classname = "DisplayFieldError";			
			  day1[3].classname = "DisplayFieldError";			
			  day2full[0].classname = "DisplayFieldError";
			  day2full[1].classname = "DisplayFieldError";
			  day2full[2].classname = "DisplayFieldError";		
			  day2full[3].classname = "DisplayFieldError";
			  day2full[4].classname = "DisplayFieldError";
			  day2full[5].classname = "DisplayFieldError";		
	
			}		
		}
		
		if ((day1[0].checked || day1[1].checked || day1[2].checked || day1[3].checked) && (conference[2].checked))
		{
		day1[0].classname = "DisplayFieldData";
		day1[1].classname = "DisplayFieldData";
		day1[2].classname = "DisplayFieldData";			
		day1[3].classname = "DisplayFieldData";			
		
		} else if (conference[2].checked)
		{
		  errorMessages += "You have not filled out the conference sessions section.\n";
		  valid = false;
		  day1[0].classname = "DisplayFieldError";
		  day1[1].classname = "DisplayFieldError";
		  day1[2].classname = "DisplayFieldError";			
		  day1[3].classname = "DisplayFieldError";			
		}	
		
		if ((day2full[0].checked ||day2full[1].checked || day2full[2].checked || day2full[3].checked || day2full[4].checked) && (conference[3].checked))
		{
		day2full[0].classname = "DisplayFieldData";
		day2full[1].classname = "DisplayFieldData";
		day2full[2].classname = "DisplayFieldData";	
		day2full[3].classname = "DisplayFieldData";	
		day2full[4].classname = "DisplayFieldData";	
		
		} else if (conference[3].checked)
		{
		  errorMessages += "You have not filled out the conference sessions section.\n";
		  valid = false;
		  day2full[0].classname = "DisplayFieldError";
		  day2full[1].classname = "DisplayFieldError";
		  day2full[2].classname = "DisplayFieldError";	
		  day2full[3].classname = "DisplayFieldError";
		  day2full[4].classname = "DisplayFieldError";	
		}	

	}

	if (valid) {
		return true;
	} else {
    alert("" + errorMessages);
		return false;
	}
}


// End of script hiding -->

