// <script>

function isblank(s)
{
  for(var i=0; i<s.length; i++)
  {
    var c = s.charAt(i);
    if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
  }
  return true;
}

function hasValue(value)
{
   if ( (value == null) || (value == "") || isblank(value) )
      return false ;
   else
      return true ;
}


function verifyRequired (e)
{
   if ((e.type == "text") || (e.type == "textarea") || (e.type == "password"))
   {
      //make sure there's a value, and not all blanks
      if ( !hasValue(e.value) )
      {
         return false
      }
   }
   else
      return false

   return true ;
}

function verifyNumeric(e)
{
   if (!hasValue(e.value) )
      return false ;
   var v = parseFloat(e.value);
   var min, max;
   min = e.getAttribute("min");
   max = e.getAttribute("max");
   if (isNaN(v) ||
      ((min != null) && (v < min)) ||
      ((max != null) && (v > max)))
   {
      return false ;
   }
   return true ;
}

function verifyExclude (e)
{
   if (! hasValue(e.value) )
      return true ;

   var exclude = e.getAttribute("exclude");
   for (var j = 0 ; j < exclude.length; j++ )
   {
      if (e.value.indexOf(exclude.substring(j,j+1)) != -1 )
      {
         return false ;
      }
   }

   return true ;
}

function excludeChars (str, exstr)
{
   if (! hasValue(str) )
      return true ;

   for (var j=0 ; j< exstr.length; j++ )
   {
      if (str.indexOf (exstr.substring(j,j+1)) != -1 )
      {
         return false ;
      }
   }

   return true ;
}


function lbFormVerify(f)
{
   var msg;
   var errors = "";
   var first_error = null;

	var t;
	if (f.length < 50) {
		t = f.length
	}
	else {
		t = 50;
	}

   var customName, customError;
   var required, noQuote, noSpace, exclude, validEmail, validDate, validCCNumber;
   var numeric, min, max;

   for (var i=0; i< t; i++)
   {
      var e = f.elements[i];

	  /* The way some custom attributes are handled is slightly different across browsers.
	   * In case of attributes such as 'required', which may not have a value, IE5+ and NS7 report NULL if
	   * the attribute is not specified or a blank value if it is. Unfortunately, NS6.2 returns a blank
	   * in both cases irrespective of whether it is specified or not.
	   * The solution is to use another DOM function getNamedItem() which correctly returns NULL
	   * in the absence of the custom variable. However, this is not supported by IE5 and hence
	   * these attributes are retrieved differently between IE and NS.
	   */
	  if (navigator.appName == "Netscape") {
		  required = e.attributes.getNamedItem("required");
		  customName = e.attributes.getNamedItem("lbname");
		  customError = e.attributes.getNamedItem("errmsg");
		  noQuote = e.attributes.getNamedItem("noquote");
		  numeric = e.attributes.getNamedItem("numeric");
		  exclude = e.attributes.getNamedItem("exclude");
		  validEmail = e.attributes.getNamedItem("validLBemail");
		  validDate = e.attributes.getNamedItem("validDate");
		  validCCNumber = e.attributes.getNamedItem("validCCNumber");
		  noSpace = e.attributes.getNamedItem("nospace");
		  min = e.attributes.getNamedItem("min");
		  max = e.attributes.getNamedItem("max");

		  if (customName) {
			  customName = customName.value;	
		  }
		  if (customError) {
			  customError = customError.value;	
		  }
		  if (exclude) {
			  exclude = exclude.value;	
		  }
		  if (min) {
			  min = min.value;	
		  }
		  if (max) {
			  max = max.value;	
		  }
	  }
	  else {
		  required = e.getAttribute("required");
		  customName = e.getAttribute("lbname");
		  customError = e.getAttribute("errmsg");
		  noQuote = e.getAttribute("noquote");
		  numeric = e.getAttribute("numeric");
		  exclude = e.getAttribute("exclude");
		  validEmail = e.getAttribute("validLBemail");
		  validDate = e.getAttribute("validDate");
		  validCCNumber = e.getAttribute("validCCNumber");
		  noSpace = e.getAttribute("nospace");
		  min = e.getAttribute("min");
		  max = e.getAttribute("max");
	  }

      if (customName != null) {
         lbname = customName;
	  }
      else {
         lbname = e.name;
      }

      if ((e.type == "text") || (e.type == "textarea") || (e.type == "password"))
      {
         if (required != null )
         {
            if ((required != "no" ) && (!verifyRequired(e)))
            {
               if (hasValue(customError))
               {
                  errors += lbname + ": " + customError +"\n";
               }
               else
               {
                  errors += lbname + " is a required field \n";
               }
               if ( first_error == null ) first_error = e;
            }
         }
       if (!hasValue(e.value))
       {
           // if it's not required and it has no value,
           // then don't worry about it.
           // if it is required but null, then we've already passed this point
         continue ;
       }
         if ((numeric !=null) && (!verifyNumeric(e)))
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               errors += "-  The field "+lbname+" must be a number";
               if (min != null)
                 errors += " that is greater than " + min
               if (min != null && max != null)
                 errors += " and less than " + max
               else if (max != null)
                 errors += " that is less than " + max
               errors += ".\n";
            }
            if ( first_error == null ) first_error = e;
         }

         if ((exclude != null) && (!verifyExclude(e)))
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               errors += "-  The field "+lbname+" must not contain any" ;
               errors += " of the following characters: " + exclude + "\n" ;
            }
            if ( first_error == null ) first_error = e;
         }

         if ((validEmail != null) && (!verifyEmail(e.value)))
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               errors += "-  You entered an invalid e-mail address, please verify.\n" ;
            }
            if ( first_error == null ) first_error = e;
         }

         if (validCCNumber != null) 
	 {
	    if (!validateCardNumber(e.value))
            {	
            	if (hasValue(customError))
            	{
               		errors += lbname + ": " + customError + "\n";
            	}
            	else
            	{
               		errors += "-  You entered an invalid credit card number, please verify.\n" ;
            	}
            	if ( first_error == null ) first_error = e;
	    }

	    // If we need to validate card type do it now
	    if ((f.ccType != null) && (!validateCardType(f.ccType.value, e.value)))
	    {
	   	if (hasValue(customError))
	  	{
			errors += lbname + ": " + customError + "\n";
	   	}
	   	else
	   	{
			errors += "-  Credit Card number does not match the Credit Card type, please verify.\n";
	   	}
	   	if ( first_error == null ) first_error = e;
	    }	
         }

         if ((noQuote != null) && (!verifyNoQuote(e.value)))
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               errors += "-  The field "+lbname+" must not contain single quotes\n" ;
            }
            if ( first_error == null ) first_error = e;
         }

         if ((noSpace != null) && (!verifyNoSpace(e.value)))
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               errors += "-  The field "+lbname+" must not contain spaces\n" ;
            }
            if ( first_error == null ) first_error = e;
         }

      }

      if (validDate != null)
      {
         errcode = 0 ;
         errcode = lbCheckDate (e) ;
         if (errcode != 0 )
         {
            if (hasValue(customError))
            {
               errors += lbname + ": " + customError + "\n";
            }
            else
            {
               switch (errcode)
               {
                  case -1:
                     errors += lbname + " must be later than " + min + ".\n" ;
                     break;
                  case -2:
                     errors += lbname + " must be before " + max + ".\n" ;
                     break;
                  case 1:
                     errors += lbname+" cannot contain letters.\n" ;
                     break;
                  case 2:
                     errors += lbname+" contains an invalid date entry.\n" ;
                     break;
               }
            }
            if ( first_error == null ) first_error = e;
         }
      }
   }
   if (!errors) return true;

   msg = "____________________________________________________________\n";
   msg+="\n";
   msg+= "The form was not submitted because of the following error(s).\n";
   msg+= "Please correct these error(s) and re-submit.\n";
   msg+= "____________________________________________________________\n";

   msg+="\n";
   msg += errors;
   msg+= "____________________________________________________________\n";
   alert(msg);
   first_error.focus() ;
   return false;
}

function verifyNoQuote(e)
{
      if (e.indexOf ("'") != -1 )
      {
         return false ;
      }
      return true ;
}

function verifyNoSpace(e)
{
      if (e.indexOf (" ") != -1 )
      {
         return false ;
      }
      return true ;
}

function checkEmail (e)
{
   if ( ! verifyEmail(e.value) )
   {
		msg = "____________________________________________________________\n";
		msg+="\n";
		msg+= "The form was not submitted because of the following error(s).\n";
		msg+= "Please correct these error(s) and re-submit.\n";
		msg+= "____________________________________________________________\n";

		msg+="\n";
		msg+="You must enter a valid email address\n";
		msg+= "____________________________________________________________\n";
		alert(msg)
		e.focus();
		return false;
   }
	return true ;
}

function verifyEmail(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(email)) {
		return true;
	}
	else {
		return false;
	}
}

function replaceQuotes(s)
{
   t = s.replace(/'/g,"''") ;
   return t ;
}

function lbCheckPW(p1,p2)
{
   var errors="";
   // if the password fields are empty, catch through 'required' attribute
   if (p1.value.length == 0 && p2.value.length == 0 ) return true;
   
   if (p1.value != p2.value)
   {
      errors += "Passwords must match!\n" ;
   }
   if (p1.value.length <6)
   {
      errors += "Password must be at least 6 characters long."
   }
   var passsub = p1.value.substr(0,8) ;
   var pattern = new RegExp("\\d{1}") ;
   var pattern1 = new RegExp("\\(") ;
   var pattern2 = new RegExp("\\)") ;
   var pattern3 = new RegExp("\\-") ;
   var pattern4 = new RegExp("\\$") ;
   var pattern5 = new RegExp("\\=") ;
   var pattern6 = new RegExp("\\#") ;
   var pattern7 = new RegExp("\\@") ;
   var pattern8 = new RegExp("\\&") ;
   var pattern9 = new RegExp("\\:") ;
   var pattern10 = new RegExp("\\*") ;
   var result ;
   if (pattern.test(passsub)==false && pattern1.test(passsub)==false && pattern2.test(passsub)==false && pattern3.test(passsub)==false && pattern4.test(passsub)==false && pattern5.test(passsub)==false && pattern6.test(passsub)==false && pattern7.test(passsub)==false && pattern8.test(passsub)==false && pattern9.test(passsub)==false && pattern10.test(passsub)==false)
   {
      errors += "\nYour password must contain a number (0-9) or one of the following punctuation marks (-$=#@&/:*)"
      errors += "\nin the first eight characters"
   }
   if (errors == "")
      return true ;
   else
   {
      alert (errors) ;
      return false;
   }
}

function lbCheckDate(dt)
{
   // return value 0=success, <>0 error

   if ( !hasValue(dt.value))
   {
      return 2 ;
   }

   var pattern = new RegExp("[a-zA-Z]{1}") ;
   if (pattern.test(dt.value)==true )
   {
      return 1 ;
   }

	 ckdate = new String(dt.value)
	 ckdate = ckdate.replace(/\//gi,"-")
	 datepart = ckdate.split("-")
	 if (datepart.length == 2) // this year
			datepart[2] = "2000";
	 if (datepart.length != 3)
			return 2;
			
	 y=parseInt(datepart[2],10);
	 if (y < 100)   // 2 digit year
	 {
			if ( y < 50 )
			    datepart[2] = "20" + datepart[2]
			else
			    datepart[2] = "19" + datepart[2]

		 y=parseInt(datepart[2],10);
	}
	m=parseInt(datepart[0],10)
	d=parseInt(datepart[1],10)		
	
  lbdate = new Date (datepart[0] + "/" + datepart[1] + "/" + datepart[2]) ;
   if (lbdate == null)
   {
      return 2 ;
   }
   if (lbdate.getDate() != d ||
       lbdate.getMonth() != (m - 1) || 
       lbdate.getFullYear() != y )
			return 2;
			
   if (!hasValue(dt.max) )
		dt.max = "12/31/2038";
   if (dt.max=="today")
   {
      compareDate = new Date() ;
   }
   else
   {
      compareDate = new Date(dt.max) ;
   }
   if (lbdate > compareDate)
   {
      return -2 ;
   }
   
   if (!hasValue(dt.min) )
		dt.min = "01/01/1970";
		
   if (dt.min=="today")
   {
      compareDate = new Date() ;
   }
   else
   {
      compareDate = new Date(dt.min) ;
   }
   if (lbdate < compareDate)
   {
      return -1 ;
   }
   dt.value = datepart[0] + "/" + datepart[1] + "/" + datepart[2]
   return 0 ;
}

function validateCardNumber(cardNumber)
{  
   // Modulus 10 Validation Method
	var tmpCardNumber = new Array(cardNumber.length);	
	var wValue = new Array(cardNumber.length);	
	var result = 0;
	var j;	

	if ((cardNumber.length % 2) == 0)
	   j = 2;
	else
	   j = 1;

	for (var i=0; i<cardNumber.length; i++) {
	   tmpCardNumber[i] = cardNumber.charAt(i);	
	   wValue[i] = j;	
	   if (j == 2) 
	      j = 1;
	   else 
	      j = 2;
	}

	for (var i=0; i<cardNumber.length; i++) {
		if ((tmpCardNumber[i] * wValue[i]) < 10)
			result = result + (tmpCardNumber[i] * wValue[i]);
		else
			result = result + ((tmpCardNumber[i] * wValue[i]) - 10) + 1;
	}

	if ((result % 10) == 0)
		return true;
	else
		return false;
}

function validateCardType(ccType, cardNumber)
{
	if ((ccType.toUpperCase()=="V") && (cardNumber.charAt(0) != 4))	return false;
	if ((ccType.toUpperCase()=="M") && (cardNumber.charAt(0) != 5)) return false;
	if ((ccType.toUpperCase()=="D") && (cardNumber.charAt(0) != 6)) return false;
	if ((ccType.toUpperCase()=="A") && (cardNumber.charAt(0) != 3)) return false;

	return true;
}