﻿// JScript File

// hold employees screen evalues for comparison
// if changes were made, ask user if they want
// save.
  var gToday = new Date();
  var cur_emp = 0;
  var skip_test = 0; 
  var error_msg = new Array ("Employee Name Required","Address Required", "City Required", "State Required",
  "Zip Code Required", "Valid Social Security Number Required" );
  
  var errors = new Array ();
  var eids = new Array('EmpName','Address', 'City', 'State', 'ZipCode','Ssn',
  'Ssn2','Ssn3', 'SortName', 'HD', 'TD', 'BD', 'Ph1', 'Ph2', 'Ph3', 'EmpStatus',
  'MaritalStatus', 'Ddp', 'FedExs');
  var evalues = new Array();
  var st_count = 0;
  var st_vals = new Array ();
  var zipCheck = "0123456789-";
  
  var alphaNumMatch = /^[0-9a-zA-Z -#]+$/;
  var alphaMatch = /^[a-zA-Z -]+$/;
  // save a copy of the employees data when they are loaded
  // on the screen. 
  // onload="setTimeout('warnuser()',10000);" 
  
  var esort = new Array ();
  var esort_replace = new Array ();
  
  // popup window
  var gWorkedInState;
  
  function sortEmps ()
  {
   var index = document.getElementById ("SortEmps");
   if (index) {
      var elem = document.getElementById ("EmpList");
      {
        if (elem) {
          for (var i = 0; i < elem.length; i++)
          {
           var val = elem.options [i].value;
           var temp = new Array ();
           temp = val.split (':');
		   if (index.selectedIndex == 0)
			esort [i] = Number (temp [0]);
		   else 
			esort [i] = temp [1];
		  }
		  if (esort.length > 0) {
			  esort.sort ();
			  if (index.selectedIndex == 0)
				 sortbyNumber ();
			  else 
				 sortbyName ();
			  replaceOrder ();
		  }
		}
	  }
   }
  }
  function replaceOrder ()
  {
      var elem = document.getElementById ("EmpList");
      {
          for (var e = 0; e < esort_replace.length; e++)
          {
			 var optn = document.createElement("OPTION");
			 optn.text = esort_replace [e];
			 optn.value = esort_replace [e];
			 elem.options.add(optn);
          }
      }

  }
  function sortbyNumber ()
  {
  
  }
  function sortbyName ()
  {
	for (var i=0; i < esort.length; i++) 
	{
	  var val = esort [i];
      var elem = document.getElementById ("EmpList");
      {
          for (var e = 0; e < elem.length; e++)
          {
			var temp = new Array ();
			var emp = elem.options [e].value;
			temp = emp.split (':');
			if (val == temp [1]) {
			   esort_replace [i] = elem.options [e].value;
			   elem.options [e] = null;
			   break;
			}
		  }
      }
	}
  }
  function setTermDate ()
  {
  	var vNowDay = gToday.getDate();
  	vNowDay = (vNowDay.toString().length < 2) ? "0" + vNowDay : vNowDay;
	var vNowMonth = gToday.getMonth() + 1;
  	vNowMonth = (vNowMonth.toString().length < 2) ? "0" + vNowMonth : vNowMonth;
	var vNowYear = gToday.getFullYear();

	  var elem = document.getElementById("EmpStatus");
	  if (elem) {
	       var tdelem = document.getElementById("TD");
	       if (tdelem) {
  			   if (elem.selectedIndex == 1) {
  				  tdelem.value = vNowMonth + "\/" + vNowDay + "\/" + vNowYear;
  			   } else {
  			      tdelem.value = "00/00/0000";
  			   }
  		   }
	  }
  }
  
  function zipCode(obj, evt, len, next_field)
  {
	if (evt.keyCode == 9 || evt.keyCode == 13 || evt.keyCode == 8)
		return;
		
	var vallen = obj.value;
	var retval = 0;
	for (var i = 0; i < vallen.length; i++) {
		var fval = obj.value.substr (i,1);	
		if (! (zipCheck.indexOf(fval) >= 0)) {
			if (i == 0) {
				obj.value = "";
				obj.focus ();
				obj.select ();
				break;
			}
			else {
				obj.value = retval;
				obj.focus ();
				break;
			}
		} else { 
		    if (i == 0)
				retval = fval;
			else
				retval += fval;
		}
	}

	if (obj.value.length == 5) {
		obj.value += "-";
		return;
	}
/*	if (evt.type == "keydown") {
		field_length=obj.value.length;
	}*/
	if (evt.type == "keyup") {
		if (obj.value.length == len) {
			if (next_field.value.length == next_field.getAttribute ("MaxLength"))
				next_field.select ();
			else
				next_field.focus();
		}
	} 
  }
	function indexchange (id) {
		var elem1 = document.getElementById (id);
		if (elem1) {
			var elem2 = document.getElementById ("GridViewEst_ctl02_stadd"+elem1.attributes ("index").value);
			if (elem2) {
			 if (elem1.selectedIndex > 0)
				 elem2.disabled = false;
			 else
				 elem2.disabled = true;
			}
		}
	}
  // if any errors are found, display them
  function showErrors ()
  {
	var er = document.getElementById ("navul");
	for (var e = 0; e < errors.length; e++) {
	   var  el = document.createElement("li");
	   el.appendChild(document.createTextNode(errors [e]));
	   er.appendChild(el);
	}
  }
  // clean up old errors prior to testing for new ones
  function emptyOldErrors (er)
  {
   if (er.childNodes.length > 0) {
      for (var i = er.childNodes.length - 1; i >= 0; i--) {
		var node = er.childNodes [i];
		er.removeChild (node);
		delete node;
	  }
   }
  }
  // make sure that required fields are filled in
  function empValidate ()
  {
	var error_count = 0;
	errors = []; // empty old messages
    for (var i = 0; i < 8; i++) {
      var field = document.getElementById (eids [i]);
      if (field && field.value.length == 0) {
          // along with other required fields, we are testing 
          // three separate ssn fields but we dont want to
          // display the error 3 times. After we find one ssn er,
          // break out, since ssn fields are the last ones we test
          if (i >= 5) {
             errors [error_count++] = error_msg [5];
             break;
          }
		  errors [error_count++] = error_msg [i];
	  }
	}
	var elem_alpha = document.getElementById ("EmpName");
	if (elem_alpha.value.length > 0 && ! elem_alpha.value.match (alphaMatch)) {
		  errors [error_count++] = "Employee Name must contain letters only.";
	}
	elem_alpha = document.getElementById ("City");
	if (elem_alpha.value.length > 0 && ! elem_alpha.value.match (alphaMatch)) {
		  errors [error_count++] = "City must contain letters only.";
	}
	elem_alpha = document.getElementById ("SortName");
	if (elem_alpha.value.length > 0 && ! elem_alpha.value.match (alphaMatch)) {
		  errors [error_count++] = "Sort Name must contain letters only.";
	}
	elem_alpha = document.getElementById ("Address");
	if (elem_alpha.value.length > 0 && ! elem_alpha.value.match (alphaNumMatch)) {
		  errors [error_count++] = "Address can only contain lettes and numbers";
	}

	var td_elem = document.getElementById ("TD");
	if (td_elem) {
		if (dateInvalid (td_elem)) 
			errors [error_count++] = "Termination Date format invalid: mm/dd/yyyy";
	}
	var hd_elem = document.getElementById ("HD");
	if (hd_elem) {
		if (dateInvalid (hd_elem)) 
			errors [error_count++] = "Hire Date format invalid: mm/dd/yyyy";
	}
	var bd_elem = document.getElementById ("BD");
	if (bd_elem) {
		if (dateInvalid (bd_elem)) 
			errors [error_count++] = "Birth Date format invalid: mm/dd/yyyy";
	}
	
    var st_elem = document.getElementById ("GridViewEst");
    if (st_elem) {
		for (var s = 1; s <= st_elem.rows.length; s++) {
			var gridrow = st_elem.rows[s];
			if (gridrow != null) {
				var gridcell = gridrow.cells[0];
				var st_calc = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_stcalc" + (s-1));
				if (st_calc.selectedIndex > 0) {
					var st_add = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_stadd" + (s-1));
					 if (Number (st_add.value) <= 0) {
					    var msg = gridcell.innerText + ": Percent must be greater than zero";
						errors [error_count++] = msg;
					 }
				}
			}
		}
	} else {
		var missingst_msg = "Employee must have at least one state in State Withholding Tax Setup.";
		errors [error_count++] = missingst_msg;
		missingst_msg = "If they are exempt, add the state and check the exempt box";
		errors [error_count++] = missingst_msg;
	}
	
/*	var nhelem = document.getElementById ("NewHire");
	if (nhelem) {
		if (nhelem.checked) {
			var nhdt_elem = document.getElemById ("HD");
			if (nhdt_elem.value.length == 0 || mhdt.value == "00/00/000")
				var hd_msg = "Hire Date must be valid and within 
		
		}
	}*/
    if (error_count > 0)
		return false;
	else
		return true;
  } 
  
  function dateInvalid (obj)
  {
     if (obj.value.length == 0) {
         obj.value = "00/00/0000";
         return false;
     }
     if (obj.value == "00/00/0000")
         return false;
     if (obj.value.length != 10)
         return true;
         
     return ! validateDate (obj.value);   
  }
  
  function finderrorsEmp ()
  {
	var er = document.getElementById ("navul");
	emptyOldErrors (er); // if any
    if (! empValidate ()) {
        showErrors ();
		return true;
	}
	return false;
  }
  
  function compareEmp ()
  {
	for (var i = 0; i < eids.length; i++)
	{
	  var elem = document.getElementById(eids[i]);
	  if (elem) {
		if (elem.type == 'checkbox' || elem.type == 'radio') {
			var tcheck = "0";
			if (elem.checked)
				tcheck = "1";
			if(tcheck != elem.parentNode.attributes ["oldval"].value)
				return false; 
		}
		else if (elem.type == 'select-one') {
		   if (String (elem.selectedIndex) != elem.attributes ["oldval"].value)
		      return false;
		}
		else {
			if (!(elem.type == 'checkbox' || elem.type == 'select-one') &&
				elem.value.toUpperCase () != elem.attributes ["oldval"].value)
				return false;
		}
	  }
	} 
    var saved_st = document.getElementById ("EicStatus");
	var st_elem = document.getElementById ("GridViewEst");
	if (st_elem) {
	    // this means at least one state added
		if (saved_st.getAttribute ("st0") == null)
			return false;
	} else {
	    // this means at least one state removed
	    if (saved_st.getAttribute ("st0") != null)
	        return false;
	}

 	var bchanged = 0;

	bchanged = estchanged (); 

	if (bchanged == 1)
	  return false; 

	return true;
  }
  
  function empSave ()
  {
   var changed = 0;
/*   if (skip_test == 1) {
       skip_test = 0;
       return true;
   } */
   
	if (finderrorsEmp ())
		return false; 
   if (! compareEmp ()) 
      return true;
      
   return false;
  }
  function estchanged ()
  {
    var bchanged = 0;
    var index = 0;
    var estate = document.getElementById ("EicStatus");
    var st_elem = document.getElementById ("GridViewEst");
    if (st_elem) {
		for (var s = 1; s <= st_elem.rows.length; s++) {
			var gridrow = st_elem.rows[s];
			if (gridrow != null) {
			    if (estate.getAttribute ("st"+index) == null) {
			        // means state was added
			        bchanged = 1;
			        break;
			    }
			    
				var gridcell = gridrow.cells[0];
				if (estate.attributes ["st"+index++].value != gridcell.firstChild.data) {
				   bchanged = 1;
				   break;
				}
				var st_ex = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_stex" + (s-1));
				var trfalse = "0";
				if (st_ex.checked)
				    trfalse = "1";
				if (estate.attributes ["st"+index++].value != trfalse) {
				   bchanged = 1;
				   break;
				}
				var st_exs = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_sttbexs" + (s-1));
				if (estate.attributes ["st"+index++].value != String (st_exs.value)) {
				   bchanged = 1;
				   break;
				}
				var st_calc = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_stcalc" + (s-1));
				if (estate.attributes ["st"+index++].value != String (st_calc.selectedIndex)) {
				   bchanged = 1;
				   break;
				}
				var st_add = document.getElementById ("GridViewEst_ctl0" + (s+1) + "_stadd" + (s-1));
				if (estate.attributes ["st"+index++].value != String (st_add.value)) {
				   bchanged = 1;
				   break;
				}
			} else {
			  // means a state was removed
			  if (estate.getAttribute ("st"+index) != null) {
			     bchanged = 1;
			     break;
			  }
			}
		} 
	} 
	return bchanged;
  }
  
  function empScreenSwitch ()
  {
//	if (finderrorsEmp ())
//		return false; 
		
	var bchanged = 0;
	// find changes, prompt for save action
	if (compareEmp () == false)
		bchanged = 1;
	if (bchanged == 1)
		bchanged = confirm ("Would you like to save your changes?");
	if (bchanged == 1) {
		skip_test = 1;
		if (finderrorsEmp ())
			return false;
		document.getElementById ("Save").click ();
		skip_test = 0;
	}
	// allow screen change
	return true;
  }

	function validCreate ()
	{
		var workinst_elem = document.getElementById ("WrkSt");
		if (workinst_elem) {
		   if (workinst_elem.selectedIndex == 0) {
			  alert ("Before creating an employee, you must select a worked-in-state.");
			  return false;
		   } else
			  return true;
		}
		return true;
	}  
function validateDate(objName) {
	var test_obj = "00/00/0000";
	// zero dates ok for some fields
	if (objName == test_obj)
		return true;
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	// var err = 0;
	//strDate = datefield.value;
	strDate = objName;
	if (strDate.length < 1) {
		return true;
	}

	if (strDate.indexOf(strSeparatorArray[2]) != -1) {
		strDateArray = strDate.split(strSeparatorArray[2]);
		var len = strDateArray.length;
		if (strDateArray.length != 3) 
			return false;
		else {
			strDay = strDateArray[0];
			strMonth = strDateArray[1];
			strYear = strDateArray[2];
		}
	}

//Adjustment for short years entered

	strTemp = strDay;
	strDay = strMonth;
	strMonth = strTemp;
	intday = parseInt(strDay, 10);

	intMonth = parseInt(strMonth, 10);

	intYear = parseInt(strYear, 10);

	if (intMonth>12 || intMonth<1) 
		return false;

	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) 
		return false;

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) 
		return false;

	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
		   }
		}
	}
	else {
		if (intday > 28) {
			err = 10;
			return false;
		}
	}
	
	return true;
}
function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}
