// %W% %E%
// System            : asaf
// Method            : asaf_javascript.js
//
// Modification History:
// Who          Date            Mod     Reason
// ********************************************************
// sm           02-Mar-2004             Initial development
// mbates	April-2008		Extensive Revision
// ********************************************************
//

var formPath = 'window.document.forms[0].';

function submitForm() {
//    selectAllInList("current_dept_selected");
//    selectAllInList("old_dept_selected");

    if (typeof checkFields != 'undefined') {
        if (checkFields()) {
            document.forms[0].submit();
        } else {
            return false;
        }
    };
    document.forms[0].submit();
    return true;
};

function reset_list_if_empty(p_listname,p_selected_listname) {
    // if the selected list is empty then reset the available
    // department list to the first record  "Please select ...."
    var strList = formPath + p_listname;
    var destList = eval(strList);
    var len = destList.options.length;
    var selctedstrList = formPath + p_selected_listname;
    var selcteddestList = eval(selctedstrList);
    var selectedlen = selcteddestList.options.length;
    if (selectedlen == 0) {
        destList.options[0].selected = true;
    };
};

function popup_help_window(tag) {
//	var new_window;
	var name = "Responsibility_Definitions"; // can't put SPACE in "name" b/c it BREAKS I/E
	var url = "/asf/cgi-bin/help.pl?tag="+tag;
	var props = 'scrollbars=yes,resizable=yes,toolbar=no,menubar=no,location=no,directories=no,width=800,height=400'; 

	window.open(url, name, props);
}

function popup_help(p_module_id,p_module_name,p_version,p_system_name) {
    var l_new_window; 
    var l_window_name = p_module_name+" Help";
    var l_url = "/asf/cgi-bin/form_help.pl?module_id="+p_module_id+"&module_name="+p_module_name+"&version="+p_version+"&system_name="+p_system_name;
    var props = 'scrollbars=yes,resizable=yes,toolbar=no,menubar=no,'+
      'location=no,directories=no,width=600,height=400'; 

    l_new_window = window.open(l_url,'l_window_name',props);
}

function validate_dept() {
    var curr_depts = eval(formPath + 'current_dept_selected');

    if (typeof curr_depts == 'undefined') {
            alert("Please select a department");
	    return false;
    }
    return true;
};

/*
function validate_dept() {
    var l_current_dept_selected = eval(formPath + 'current_dept_selected');
    var l_current_dept = eval(formPath + 'current_dept');
    var l_old_dept = eval(formPath + 'old_dept_selected');
    var l_current_len = l_current_dept_selected.options.length;
    var l_old_len = l_old_dept.options.length;

    if (l_current_len == 0 ) {
        alert("Please select a department");
        l_current_dept.focus();
        return false;
    };
    return true;
};
*/

function default_start_date(l_module_id) {
    // set the default start date to today's date
    var month = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
    var nowDate = new Date();
    nowDate = nowDate.getDate() + "-" + month[nowDate.getMonth()] + "-" + nowDate.getFullYear();
    var l_start_date = eval(formPath + "zzzstartdate_" + l_module_id);
    var l_access     = eval(formPath + "zzzaccess_" + l_module_id);

    if (l_start_date.value == "" && l_access.value != -1) {
        l_start_date.value = nowDate;
    };
};

function validate_access() {
	var rlist = eval(formPath+'rlist'); 
	var rrlist = new Array();
	if (typeof rlist == 'undefined') {
		alert('Please select at least one system responsibility');
		return false;
	}
//	HACK to handle different browsers:
//	if rlist.nodeType == 1 then this is just the single item
//	else it is a list
//
// IN IE, RLIST is only of type "Object". HTMLInputElement is undefined!

	if (rlist.nodeType == 1) {
		rrlist[0] = rlist.value;
		// special check to see if this item was actually deleted
		var field = eval(formPath + "zzzaccess_" + rrlist[0] + "_responsibility");
//		alert(field+' = '+field.value);
		if (field.value == "deleted") {
			alert('Please select at least one system responsibility.');
			return false;
		}
	} else {
		var i;
		if (rlist.length == 1) {
		}
		for(i = 0; i < rlist.length; i ++) {
			rrlist[i] = rlist[i].value;
		}
	}
	
	// each entry has a number of fields. will look like:
	// zzzaccess_{rrlist_value}_{fieldname}
	var i;
	for(i = 0; i < rrlist.length; i ++) {
		var prefix = formPath + "zzzaccess_" + rrlist[i] + "_";
		var suffix = "zzzaccess_" + rrlist[i] + "_";
		var name;
		var startdate;
		var enddate;
//		var name_f;
		var startdate_f;
		var enddate_f;

//		name_f = eval(prefix + "responsibility");
		startdate_f = eval(prefix + "startdate");
		enddate_f = eval(prefix + "enddate");

		if (!check_field(suffix + "startdate", "Please enter a start date"))	{ return false; }
		if (startdate_f.value != "") {
			if (!validate_date(startdate_f, "Start Date")) { return false; }
		}
		if (enddate_f.value != "") {
			if (!validate_date(enddate_f, "End Date")) { return false; }
		}
		if (startdate_f.value != "" && enddate_f.value != "") {
			if (!check_overlap(startdate_f, enddate_f, "Start Date", "End Date")) { return false; }
		}
		enddate_f.style.background = '#FFFCD9';
	}
	return true;

};

// validate email syntax
function validate_email(str) {
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
//  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
//  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)\$");

  var r1 = new RegExp("(@.*@)|(\\\\.\\\\.)|(@\\\\.)|(^\\\\.)");
  var r2 = new RegExp("^.+\\\\@(\\\\[?)[a-zA-Z0-9\\\\-\\\\.]+\\\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\\\]?)\$");
  return (!r1.test(str) && r2.test(str));
}

function check_overlap(from, to,NameFrom,NameTo) {
  var date_from = from.value;
  var date_to   = to.value;
  date_from = date_from.replace(/-/g," ");
  date_to   = date_to.replace(/-/g," ");
  //alert(date_from+' '+date_to);
  if (Date.parse(date_from) < Date.parse(date_to)) {
    return true;
  } else {
      to.style.background = 'red';
      to.focus();
      alert('The '+NameTo+' must occur after the '+NameFrom);
      return false;
  };
      to.style.background = '#FFFCD9';
  return true;
};

function validate_date(objName,FieldName) {
  datefield = objName;
  if (chkdate(objName) == false) {
    datefield.select();
	datefield.style.background = 'red';
        datefield.focus();
    alert("Unrecognised date format. Should be DD-MMM-YYYY");
//    alert("The date "+FieldName+" is invalid. Please try again.\\n"+
//      "The following date formats are accepted:\\n"+
//      "dd-mm-yyyy, dd/mm/yyyy, dd.mm.yyyy, dd mm yyyy,\\n"+
//      "dd mmm yyyy, ddmmyyyy, d-m-yyyy, d/m/yyyy, d.m.yyyy,\\n"+ 
//      "d m yyyy, d mmm yyyy, d-m-yy, d/m/yy, d.m.yy, d m yy,\\n"+ 
//      "d mmm yy (yy is 20yy)\\n"
//	  );
    return false;
  } else {
	datefield.style.background = '#FFFCD9';
    return true;
  };
};

function chkdate(objName) {
  //var strDatestyle = "US"; //United States date style
  var strDatestyle = "EU";  //European date style
  var strDate;
  var strDateArray;
  var strDfromay;
  var strMonth;
  var strYear;
  var intday;
  var intMonth;
  var intYear;
  var booFound = false;
  var datefield = objName;
  var strSeparatorArray = new Array("-"," ","/",".");
  var intElementsubmitFormNr;
  var err = 0;
  var strMonthArray = new Array(12);
  strMonthArray[0] = "Jan";
  strMonthArray[1] = "Feb";
  strMonthArray[2] = "Mar";
  strMonthArray[3] = "Apr";
  strMonthArray[4] = "May";
  strMonthArray[5] = "Jun";
  strMonthArray[6] = "Jul";
  strMonthArray[7] = "Aug";
  strMonthArray[8] = "Sep";
  strMonthArray[9] = "Oct";
  strMonthArray[10] = "Nov";
  strMonthArray[11] = "Dec";
  strDayArray = new Array("01","02","03","04","05","06","07","08","09","10",
			  "11","12","13","14","15","16","17","18","19","20",
			  "21","22","23","24","25","26","27","28","29","30",
			  "31");
  strDate = datefield.value;
  if (strDate.length < 1) {
    return true;
  }
  for (intElementNr = 0; intElementNr < strSeparatorArray.length; 
       intElementNr++) {
    if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
      strDateArray = strDate.split(strSeparatorArray[intElementNr]);
      if (strDateArray.length != 3) {
	err = 1;
	return false;
      } else {
	strDay = strDateArray[0];
	strMonth = strDateArray[1];
	strYear = strDateArray[2];
      }
      booFound = true;
    }
  }
  if (booFound == false) {
    if (strDate.length>5) {
      strDay = strDate.substr(0, 2);
      strMonth = strDate.substr(2, 2);
      strYear = strDate.substr(4);
    } else {
      return false;
    }
  }
  if (strYear.length == 2) {
    strYear = '20' + strYear;
  }
  // US style
  if (strDatestyle == "US") {
    strTemp = strDay;
    strDay = strMonth;
    strMonth = strTemp;
  }
  intday = parseInt(strDay, 10);
  if (isNaN(intday)) {
    err = 2;
    return false;
  }
  intMonth = parseInt(strMonth, 10);
  if (isNaN(intMonth)) {
    for (i = 0;i<12;i++) {
      if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
	intMonth = i+1;
	strMonth = strMonthArray[i];
	i = 12;
      }
    }
    if (isNaN(intMonth)) {
      err = 3;
      return false;
    }
  }
  intYear = parseInt(strYear, 10);
  if (isNaN(intYear)) {
    err = 4;
    return false;
  }
  if (intMonth>12 || intMonth<1) {
    err = 5;
    return false;
  }
  if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || 
       intMonth == 7 || intMonth == 8 || intMonth == 10 || 
       intMonth == 12) && (intday > 31 || intday < 1)) {
    err = 6;
    return false;
  }
  if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || 
       intMonth == 11) && (intday > 30 || intday < 1)) {
    err = 7;
    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;
      }
    }
  }
  if (strDatestyle == "US") {
    datefield.value = strMonthArray[intMonth-1] + "-" + strDayArray[intday-1] +
      "-" + strYear;
  } else {
    datefield.value = strDayArray[intday-1] + "-" + strMonthArray[intMonth-1] +
      "-" + strYear;
  }
  return true;
}

function LeapYear(intYear) {
  if (intYear % 100 == 0) {
    if (intYear % 400 == 0) { return true; }
  } else {
    if ((intYear % 4) == 0) { return true; }
  }
  return false;
}

function check_field(title, text) {
	var el = eval(formPath + title);
	if (el.value == "") {
		el.style.background = 'red';
		el.focus();
		alert(text);
		return false;
	}
	el.style.background = '#FFFCD9';
	return true;
}

function checkFields() {

	if (!check_field("title", "Please enter your title"))			  { return false; }
	if (!check_field("family_name", "Please enter your family name"))	  { return false; }
	if (!check_field("employee_number", "Please enter your employee number")) { return false; }
	// additional checks on employee_number
	var el = eval(formPath + 'employee_number');
	if (el.value.length != 6 || isNaN(el.value)) {
		el.style.background = 'red';
		el.focus();
		alert("Employee number must be 6 digits");
		return false;
	} else {
		el.style.background = '#FFFCD9';
	}
	if (!check_field("position_title", "Please enter your position title"))	{ return false; }
	if (!check_field("contact_number", "Please enter your phone number"))	{ return false; }

	// email address --- only need to enter email address when username is entered
	var username_el = eval(formPath + 'username');
	var email_el = eval(formPath + 'email_address');

	if ((username_el.value != "") && (email_el.value == "")) {
		email_el.style.background = 'red';
		email_el.focus();
		alert('Since you have entered a username, please also enter an email address');
		return false;
	} else {
		email_el.style.background = '#FFFCD9';
	}

	if (!validate_dept()) { return false; };
	// addition by mbates, 5/12/2008 only need to check access if an access level box has not
	// been checked!
	var ral_el = eval(formPath + 'required_access_level');
	var i;
	var at_least_one_checked = 0;
	for (i = 0; i < ral_el.length; i ++) {
		// alert(ral_el[i]+ " - " + ral_el[i].value + " - " + ral_el[i].checked);
		if (ral_el[i].checked) {
			at_least_one_checked = 1;
			break;
		}
	}
	if (!at_least_one_checked && !validate_access()) { return false; };

	if (!check_field("authoriser_name", "Please enter approver's name"))		{ return false; }
	if (!check_field("authoriser_position", "Please enter approver's position"))	{ return false; }

	return true;
};

function selectAllInList(listname) {
  var strList = formPath + listname;
  var destList = eval(strList);
  var len = destList.options.length;
    for(var count = 0; count < len; count++) {
      if(destList.options[count] != null) {
        destList.options[count].selected = true;
        }
      }
    return true;
};

function deleteAllFromLists() {
    deleteAllFromList("current_dept", "current_dept_selected");
    deleteAllFromList("old_dept", "old_dept_selected");
};

// Delete selected row from the list.
function deleteAllFromList(n1, n2) {
  var strList = formPath + n2;
  var destList = eval(strList);
  var len = destList.options.length;
  for (var i = (len-1); i >= 0; i--) {
    destList.options[i] = null;
  }
  reset_list_if_empty(n1, n2);
}

// Delete default rows from list(s)
function deleteFromLists() {
    deleteFromList("current_dept_selected");
    deleteFromList("old_dept_selected");
};

// Delete selected row from the list.
function deleteFromList(listname) {
  var strList = formPath + listname;
  var destList = eval(strList);
  var len = destList.options.length;
  for (var i = (len-1); i >= 0; i--) {
    if ((destList.options[i] != null) && 
	(destList.options[i].selected == true)) {
      destList.options[i] = null;
    }
  }
}

function addToDest(listName,fromName) {
  var strList = formPath + listName;
  var destList = eval(strList);
  var strList = formPath + fromName;
  var fromList = eval(strList);
  index = fromList.selectedIndex; 
  var len = destList.options.length;

  if (fromList.options[index].value == -1) {
      return;
  };

  //Check if this value already exist in the destList or not
  //if not then add it otherwise do not add it.
  var found = false;
  for(var count = 0; count < len; count++) {
    if (destList.options[count] != null) {
      if (fromList.options[index].value == destList.options[count].value) {
        found = true;
        break;
      }
    }
  };
 if (found != true) {
    destList.options[len] = new Option();
    destList.options[len].text     = unescape(fromList.options[index].text);
    destList.options[len].value    = fromList.options[index].value;
    destList.options[len].selected = false;
  }
};
