﻿// JScript File for client-side forms validation
    var oldPhone="";
    var oldOldPhone="";
    var oldSsn="";
		window.onload = function() {
			setFieldValidationEventHandlers();
		}

		function setFieldValidationEventHandlers() {
			// check all input fields
			var inputs = document.getElementsByTagName("input");
			for (var i = 0, n = inputs.length; i < n; i++) {
				var input = inputs[i];
				// assign event handlers based on className
				if (input.className.match(/\bdate\b/i)) { // word-break + "date" + word-break
					input.onblur = validateDate;
				}
				else if (input.className.match(/\bssn\b/i)) { // word-break + "ssn" + word-break
					input.onblur = validateSSN;
				}
				else if (input.className.match(/\btty\b/i)) { // word-break + "tty" + word-break
				  input.onblur = validateTTY;
				}
				else if (input.className.match(/\bphone\b/i)) { // word-break + "phone" + word-break
					input.onblur = validatePhone;
				}
				else if (input.className.match(/\brequired\b/i)) { // word-break + "required" + word-break
				  input.onblur = validateRequired;
				}
				// prevent enter key from submitting form
				if (input.type.match(/text/i) || input.className.match(/\btextbox\b/i)) {
					input.onkeydown = supressEnterKeySubmit;
				}
			}
		}

		function validateDate() {
			var errorMessage = "needs to be in date format, such as 1/31/2001.";

			if (this.value != "") {
				// try parsing as date using JavaScript Date constructor
				var dateValue = new Date(this.value.replace(/-/g, "/"));
				if (isFinite(dateValue)) {
					// if two-digit year, guess at correct century
					if (this.value.match(/\D\d{1,2}$/) && dateValue.getFullYear() < (new Date().getFullYear() - 96)) {
						dateValue.setFullYear(dateValue.getFullYear() + 100);
					}
					// format as mm/dd/yyyy
					this.value = (dateValue.getMonth() + 1) + "/" + dateValue.getDate() + "/" + dateValue.getFullYear();
				}
				else {
					showError(this, errorMessage);
				}
			}
		}
		
		function validateRequired() {
		  var errorMessage = "is missing.";
		  if(this.value.match(/^\s*$/)) {
		    showError(this,errorMessage);
		  }
		}
				
		function validateRequired2(object) {
		  var errorMessage = "is missing.";
		  if(object.value.match(/^\s*$/)) {
		    showError(object, errorMessage);
		  }
		}

		function validatePhone() {
		  if(this.value != oldPhone && this.value != oldOldPhone) {
		    oldPhone=this.value;
		    var phoneErrorMessage = document.getElementById("ctl00_MainContent_ctl00_phoneErrorMessage");
		    if(phoneErrorMessage == null) {
		      phoneErrorMessage = document.getElementById("ctl00_MainContent_ctl01_phoneErrorMessage");
		    }
  		  var errorMessage = phoneErrorMessage.innerHTML;
			  if (this.className.match(/\brequired\b/i)) { // word-break + "required" + word-break
			    validateRequired2(this);
  			}			
	  		if (this.value != "") {
		  		// replace all non-digit characters, then match string starting with 2-9 (US phone numbers can't start with 0 or 1) followed by 2 digits, 3 digits, 4 digits
			  	if (this.value.replace(/\D/g, "").match(/(\d{3})(\d{3})(\d{4})/)) {
				  	// use sub-matches captured above to format as ###-###-####
					  this.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
  				}
	  			else {
	  			  oldOldPhone=this.value;
		  			showError(this, errorMessage);
			  	}
  			}
	  	}
	  }
	  
	  function validateTTY2(object) {
	    if(object.value != oldPhone && object.value != oldOldPhone) {
  	    oldPhone = object.value;
  	    var errorMessage = "TTY needs to be \"711\" or in format ###-###-####.";
	    	if (object.value.replace(/\D/g, "").match(/(\d{3})(\d{3})(\d{4})/)) {
	    	  object.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
	  	  } else {
  	  	  oldOldPhone = object.value;
	    	  showError(object, errorMessage);
	    	}
	    }
	  }

	  
	  function validateTTY() {
	    if(this.className.match(/\brequired\b/i)) {
	      validateRequired2(this);
	    }
	    if(this.value != "") {
	      if(this.value != "711") {
	        validateTTY2(this);
	      }
	    }
	  }

		function validateSSN() {
		  if(this.value != oldSsn) {
		    oldSsn = this.value;
  		  var phoneErrorMessage = document.getElementById("ctl00_MainContent_ctl00_ssnErrorMessage");
	  	  var errorMessage = phoneErrorMessage.innerHTML;
			  //var errorMessage = "needs to be a nine-digit number, \nsuch as 123-45-6789.";
  			if (this.className.match(/\brequired\b/i)) { // word-break + "required" + word-break
	  		  validateRequired2(this);
		  	}
			  if (this.value != "") {
				  // replace all non-digit characters, then match 3 digits, 2 digits, 4 digits
  				if (this.value.replace(/\D/g, "").match(/(\d{3})(\d{2})(\d{4})/)) {
	  				// use sub-matches captured above to format as ###-##-####
		  			this.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
			  	}
				  else {
					  showError(this, errorMessage);
  				}
	  		}
		  }
		}

		function showError(element, errorMessage) {
			alert(getLabelText(element) + " " + errorMessage);
			// focus & select element with error (Mozilla, Safari & Chrome require brief delay before moving focus)
			setTimeout(function() { element.focus(); element.select(); }, 1);
		}

		function supressEnterKeySubmit(event) {
			// prevent enter key from submitting form
			var event = event || window.event;
			if (event.keyCode == 13) {
				return false;
			}
		}

		function getLabelText(element) {
			// return text of associated label element or title attribute
			var labelText = "";
			var labels = document.getElementsByTagName("label");
			for (var i = 0, n = labels.length; i < n; i++) {
				var label = labels[i];
				if (label.htmlFor && label.htmlFor == element.id) {
					// remove html tags and trailing colon
					labelText += label.innerHTML.replace(/<[^>]*>/g, "").replace(/:$/, "");
				}
			}
			return labelText || element.title || "";
		}

	//
