
var engine_locations_process = "webcpms/proc_locations.php";


/*************
   LOCATIONS
*************/

var ajaxlocAdd,
    ajaxLoadLocationList,
    ajaxLocLoadProps,
    ajaxLocLoadInfo,
    ajaxLocSetDefault,
    ajaxLocSaveProps,
    ajaxLocDelete;



function saveLocationsSettings() {
   var settings = new Array();

   if (document.getElementById('LocPanelOperationLocations') &&
       document.getElementById('LocPanelOperationOpenHours') &&
       document.getElementById('LocPanelOperationPosStaff')) {
      settings[0] = "loc_locations=" + (document.getElementById('LocPanelOperationLocations').checked ? "true" : "false");
      settings[1] = "loc_openhours=" + (document.getElementById('LocPanelOperationOpenHours').checked ? "true" : "false");
      settings[2] = "loc_posstaff=" + (document.getElementById('LocPanelOperationPosStaff').checked ? "true" : "false");
   }

   saveSystemSettings(settings, true, "SystemSettingsIndicator");
}


var locationListeners = new Array();

function locationSorter(a, b) {
   return a > b ? 1 : (a < b ? -1 : 0);
}

function LocationPeer(host_id, sel_id, callback) {
   this.host_id = host_id;
   this.sel_id = sel_id;
   this.callback = callback;

   this.notify = function(xml_text, selected) {
      var xml_doc = createXmlDoc(xml_text);
      var locs = xml_doc.getElementsByTagName("location");
      var i;
      var loc_sel = "";
      if (locs.length > 1) {
         var l = [];
         for (i = 0; i < locs.length; i++) {
            var loc_id = getElemAttributeValue(locs[i], "id");
            var elem_name = findTagByName(locs[i], "name");
            var is_def = getElemAttributeValue(elem_name, "def");
            var sel = selected == null ? (is_def == 1 ? " selected='selected'" : "") : (selected == loc_id ? " selected='selected'" : "");
            l.push([elem_name.childNodes[0].nodeValue, "<option value='" + loc_id + "'" + sel + ">" + elem_name.childNodes[0].nodeValue + "</option>"]);
         }
         l.sort(locationSorter);
         loc_sel += "<select id='" + this.sel_id + "' name='" + this.sel_id + "'>";
         loc_sel += l.join();
         loc_sel += "</select>";
      } else if (locs.length == 1) {
         var loc_id = locs[0].attributes[0].value;
         loc_sel += "<input type='hidden' id='" + this.sel_id + "' name='" + this.sel_id + "' value='" + loc_id + "' />";
         var elem_name = findTagByName(locs[0], "name");
         loc_sel += "<input type='hidden' id='" + this.sel_id + "_" + loc_id + "' name='" + this.sel_id + "_" + loc_id + "' value='" + elem_name.childNodes[0].nodeValue + "' />";
         loc_sel += elem_name.childNodes[0].nodeValue;
      }
      host = document.getElementById(this.host_id);
      host.innerHTML = loc_sel;
      loc_sel = document.getElementById(this.sel_id);
      if (loc_sel && this.callback) {
         loc_sel.onchange = this.callback;
         this.callback(sel_id);
      }
   }
}


function getLocationName(loc_sel_id) {
   var loc_sel = document.getElementById(loc_sel_id);
   return loc_sel.options ? loc_sel.options[loc_sel.selectedIndex].text : document.getElementById(loc_sel.id + "_" + loc_sel.value).value;
}


function createLocationListener(host_id, sel_id, callback) {
   locationListeners[locationListeners.length] = new LocationPeer(host_id, sel_id, callback);
}



function addLocation() {
   var name = document.getElementById("LocNew").value;
   if (name == "") {
      alert("Please specify the name of the new location!");
      return;
   }
   startIndicator("LocPropIndicator", "Loading");
   var cmd = "cmd=cmdAddLocation&sid=" + document.getElementById('SessionID').value + "&name=" + encodeURIComponent(name);
   load(ajaxlocAdd = GetXmlHttpObject(), engine_locations_process, cmd, addedLocation);
}

function addedLocation() {
   if (ajaxlocAdd.readyState == 4 || ajaxlocAdd.readyState == "complete") {
      loadLocationList("LocPropIndicator");
   }
}




function loadLocationList(indicator_id, stop_when_loaded, selected_location) {
   var indicators = indicator_id.split(",");
   var i;
   for (i = 0; i < indicators.length; i++) {
      startIndicator(indicators[i], "Loading locations");
   }
   var cmd = "cmd=cmdLoadLocationList&sid=" + document.getElementById('SessionID').value + (stop_when_loaded == true ? "&IndicatorID=" + indicator_id : "") + (selected_location > 0 ? "&SelectedLocation=" + selected_location : "");
   load(ajaxLoadLocationList = GetXmlHttpObject(), engine_locations_process, cmd, updateLocationList);
}



function updateLocationList() {
   if (ajaxLoadLocationList.readyState == 4 || ajaxLoadLocationList.readyState == "complete") {
      var loc_sel;
      var host;
      var i;

      var xml_doc = createXmlDoc(ajaxLoadLocationList.responseText);
      var indicator_ids = xml_doc.getElementsByTagName("indicator");
      if (indicator_ids.length > 0) {
         var indicators = indicator_ids[0].childNodes[0].nodeValue.split(",");
         for (i = 0; i < indicators.length; i++) {
            stopIndicator(indicators[i]);
         }
      }
      var selected = null;
      var selecteds = xml_doc.getElementsByTagName("selected");
      if (selecteds.length > 0) {
         selected = selecteds[0].childNodes[0].nodeValue * 1;
      }

      for (i = 0; i < locationListeners.length; i++) {
         locationListeners[i].notify(ajaxLoadLocationList.responseText, selected);
      }

      setButtonVisualStuff();
   }
}


function loadLocProps() {
   startIndicator("LocPropIndicator", "Loading properties");
   var loc_id = document.getElementById("Prop_LocationList").value;
   var cmd = "cmd=cmdLoadLocProps&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
   load(ajaxLocLoadProps = GetXmlHttpObject(), engine_locations_process, cmd, updateLocProps);
}


function updateLocProps() {
   if (ajaxLocLoadProps.readyState == 4 || ajaxLocLoadProps.readyState == "complete") {
      stopIndicator("LocPropIndicator");
      var xml_doc = createXmlDoc(ajaxLocLoadProps.responseText);
      var locations = xml_doc.getElementsByTagName("location");
      var i;
      for (i = 0; i < locations.length; i++) {
         var id = getElemAttributeValue(locations[i], "id");
         var is_default = getElemAttributeValue(locations[i], "default") == "true" ? true : false;
         var name = findTagByName(locations[i], "name");
         var phone = findTagByName(locations[i], "phone");
         var address = findTagByName(locations[i], "address");
         var fax = findTagByName(locations[i], "fax");
         var email = findTagByName(locations[i], "email");
         var map = findTagByName(locations[i], "map");
         var pageurl_loc = findTagByName(locations[i], "pageurl_loc");
         var pageurl_openpos = findTagByName(locations[i], "pageurl_openpos");
         var oh = collectTagsByAttribute(locations[i], "oh", "wday");
         document.getElementById("LocID").value = id;
         document.getElementById("LocTitle_" + languages[0].descr).value = name ? name.childNodes[0].nodeValue : "";
         resetPageTitleEditor("Loc");
         resetPageTitleEditor("OpenPosition");
         if (pageurl_loc) {
            if (pageurl_loc.childNodes[0].nodeValue.length) {
               document.getElementById('LocPermalink_' + languages[0].descr).innerHTML = getWebAddress() + "/" + unSafeString(pageurl_loc.childNodes[0].nodeValue);
               checkPageTitle("Loc", languages[0].descr);
            }
            if (pageurl_openpos.childNodes[0].nodeValue.length) {
               document.getElementById('OpenPositionPermalink_' + languages[0].descr).innerHTML = getWebAddress() + "/" + unSafeString(pageurl_openpos.childNodes[0].nodeValue);
               checkPageTitle("OpenPosition", languages[0].descr);
            }
         }
         if (phone) {
            var p = phone.childNodes[0].nodeValue.split("-");
            document.getElementById("LocPhoneArea").value = p[0];
            document.getElementById("LocPhoneFirst").value = p[1];
            document.getElementById("LocPhoneSecond").value = p[2];
         } else {
            document.getElementById("LocPhoneArea").value = "";
            document.getElementById("LocPhoneFirst").value = "";
            document.getElementById("LocPhoneSecond").value = "";
         }
         document.getElementById("LocAddress").value = address ? address.childNodes[0].nodeValue : "";
         if (fax) {
            var f = fax.childNodes[0].nodeValue.split("-");
            document.getElementById("LocFaxArea").value = f[0];
            document.getElementById("LocFaxFirst").value = f[1];
            document.getElementById("LocFaxSecond").value = f[2];
         } else {
            document.getElementById("LocFaxArea").value = "";
            document.getElementById("LocFaxFirst").value = "";
            document.getElementById("LocFaxSecond").value = "";
         }
         document.getElementById("LocEMail").value = email ? mailto(email.childNodes[0].nodeValue) : "";
         document.getElementById("LocMap").value = map ? map.childNodes[0].nodeValue : "";
         document.getElementById("LocDefault").checked = is_default;
         document.getElementById("LocIsDefault").value = is_default ? 1 : 0;
      }
   }
}


function saveLocProps() {
   startIndicator("LocPropIndicator", "Saving");
   var loc_id = document.getElementById("Prop_LocationList").value;
   var cmd = "cmd=cmdSaveLocProps&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
   cmd += "&LocName=" + encodeURIComponent(document.getElementById("LocTitle_" + languages[0].descr).value);
   cmd += "&LocPhoneArea=" + encodeURIComponent(document.getElementById("LocPhoneArea").value);
   cmd += "&LocPhoneFirst=" + encodeURIComponent(document.getElementById("LocPhoneFirst").value);
   cmd += "&LocPhoneSecond=" + encodeURIComponent(document.getElementById("LocPhoneSecond").value);
   cmd += "&LocAddress=" + encodeURIComponent(document.getElementById("LocAddress").value);
   cmd += "&LocFaxArea=" + encodeURIComponent(document.getElementById("LocFaxArea").value);
   cmd += "&LocFaxFirst=" + encodeURIComponent(document.getElementById("LocFaxFirst").value);
   cmd += "&LocFaxSecond=" + encodeURIComponent(document.getElementById("LocFaxSecond").value);
   cmd += "&LocEMail=" + encodeURIComponent(document.getElementById("LocEMail").value);
   cmd += "&LocMap=" + encodeURIComponent(document.getElementById("LocMap").value);
   cmd += "&LocDefault=" + document.getElementById("LocDefault").checked;

   var pts_loc = getPageTitles("Loc", true);
   var pts_openpos = getPageTitles("OpenPosition", true);

   cmd += pts_loc + pts_openpos;

   load(ajaxLocSaveProps = GetXmlHttpObject(), engine_locations_process, cmd, savedLocProps);
}

function savedLocProps() {
   if (ajaxLocSaveProps.readyState == 4 || ajaxLocSaveProps.readyState == "complete") {
      loadLocationList("LocPropIndicator");
   }
}


function deleteLoc() {
   var def_val = document.getElementById("LocIsDefault").value * 1;
   if (def_val == 1) {
      alert("Default location cannot be deleted.\nSet another location as default first then delete this location.");
   } else {
      var loc_id = document.getElementById("Prop_LocationList").value;
      if (confirm("Do you really want to delete this location?\n   " + document.getElementById("LocTitle_" + languages[0].descr).value + "\nWARNING! This cannot be undone!")) {
         var cmd = "cmd=cmdDeleteLoc&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
         load(ajaxLocSaveProps = GetXmlHttpObject(), engine_locations_process, cmd, savedLocProps);
      }
   }
}



function checkDefault() {
   var def_chk = document.getElementById("LocDefault");
   var def_val = document.getElementById("LocIsDefault").value;

   if (def_val == 1) def_chk.checked = true;
}



function loadLocInfo() {
   startIndicator("LocationInfoIndicator", "Loading properties");
   var loc_id = document.getElementById("LocationInfo_LocationList").value;
   var cmd = "cmd=cmdLoadLocInfo&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById("lang").value + "&loc_id=" + loc_id + "&flags=" + document.getElementById('LocationInfoFlags').value;
   load(ajaxLocLoadInfo = GetXmlHttpObject(), engine_locations_process, cmd, updateLocInfo);
}


function updateLocInfo() {
   if (ajaxLocLoadInfo.readyState == 4 || ajaxLocLoadInfo.readyState == "complete") {
      stopIndicator("LocationInfoIndicator");
      document.getElementById('LocationInfoHost').innerHTML = ajaxLocLoadInfo.responseText;
   }
}



/***************
   OPEN HOURS
***************/
var ajaxOHLoad,
    ajaxOHUpdate;


function setOHSelectors(wday, postfix) {
   s_postfix = postfix == "" ? "" : "_" + postfix;
   var close_sel = document.getElementById("OH_" + wday + s_postfix);
   var closed = close_sel.options[close_sel.selectedIndex].value == "closed" ? true : false;
   if (closed) {
      setTimeValue("OH_" + wday + s_postfix + "_from_h", "OH_" + wday + s_postfix + "_from_m", 0, 0);
      setTimeValue("OH_" + wday + s_postfix + "_to_h", "OH_" + wday + s_postfix + "_to_m", 0, 0);
   }
   document.getElementById("Input_OH_" + wday + s_postfix + "_from_h").disabled = closed;
   document.getElementById("Input_OH_" + wday + s_postfix + "_to_h").disabled = closed;
}



function loadOpenHours() {
   startIndicator("LocOHIndicator", "Loading open hours");
   var loc_id = document.getElementById("OH_LocationList").value;
   var cmd = "cmd=cmdLoadOH&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id;
   load(ajaxOHLoad = GetXmlHttpObject(), engine_locations_process, cmd, updateOH);
}



function parseOpenHours(wdays) {
   var oh = new Array();
   var i;
   for (i = 0; i < wdays.length; i++) {
      var wday = getElemAttributeValue(wdays[i], "id") - 1;
      var openings = findTagByName(wdays[i], "opening");
      var closings = findTagByName(wdays[i], "closing");
      var t_from = openings.childNodes[0].nodeValue.split(":");
      var t_to = closings.childNodes[0].nodeValue.split(":");
      oh[wday] = new Array(t_from[0] * 60 + t_from[1] * 1, t_to[0] * 60 + t_to[1] * 1);
   }
   return oh;
}


function updateOH() {
   if (ajaxOHLoad.readyState == 4 || ajaxOHLoad.readyState == "complete") {
      stopIndicator("LocOHIndicator");
      var xml_doc = createXmlDoc(ajaxOHLoad.responseText);
      var wdays = xml_doc.getElementsByTagName("wday");
      var oh = parseOpenHours(wdays);
      var i;
      for (i = 0; i < oh.length; i++) {
         var f_h = Math.floor(oh[i][0] / 60);
         var f_m = oh[i][0] % 60;
         var t_h = Math.floor(oh[i][1] / 60);
         var f_m = oh[i][1] % 60;
         setTimeValue("OH_" + i + "_from_h", "OH_" + i + "_from_m", f_h, f_m);
         setTimeValue("OH_" + i + "_to_h", "OH_" + i + "_to_m", t_h, f_m);
         var closed_sel = document.getElementById("OH_" + i);
         if (f_h == 0 && f_m == 0 && t_h == 0 && f_m == 0) {
            closed_sel.options[1].selected = "selected";
         } else {
            closed_sel.options[0].selected = "selected";
         }
         setOHSelectors(i, "");
      }
      setButtonVisualStuff();
   }
}




function saveOpenHours() {
   var loc_id = document.getElementById("OH_LocationList").value;
   var cmd = "cmd=cmdSaveOH&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id;

   var i;
   var oh_ok = true;
   for (i = 0; i < 7 && oh_ok; i++) {
      var from_h = document.getElementById("OH_" + i + "_from_h").value;
      var from_m = document.getElementById("OH_" + i + "_from_m").value;
      var to_h = document.getElementById("OH_" + i + "_to_h").value;
      var to_m = document.getElementById("OH_" + i + "_to_m").value;
      var state = document.getElementById("OH_" + i).value;
      if (state == "open") {
         var from = from_h * 60 + from_m * 1;
         var to = to_h * 60 + to_m * 1;
         if (from >= to) to_h = to_h * 1 + 24;
      }
      cmd += "&FromH_" + i + "=" + from_h + "&FromM_" + i + "=" + from_m + "&ToH_" + i + "=" + to_h + "&ToM_" + i + "=" + to_m;
   }

   startIndicator("LocOHIndicator", "Saving open hours");
   load(ajaxOHUpdate = GetXmlHttpObject(), engine_locations_process, cmd, savedOH);
}



function savedOH() {
   if (ajaxOHUpdate.readyState == 4 || ajaxOHUpdate.readyState == "complete") {
      stopIndicator("LocOHIndicator");
      setButtonVisualStuff();
   }
}




/*********************
   POSITIONS, STAFF
*********************/

var ajaxPosLoad,
    ajaxPosSave,
    ajaxPosDelete,
    ajaxStaffLoad,
    ajaxStaffSave,
    ajaxCheckNewStaffUser,
    ajaxEmployeeAdd,
    ajaxEmployeeDelete,
    ajaxEmployeeModify,
    ajaxPosLoadRights,
    ajaxLoadPositionRights,
    ajaxSavePositionRights;

var positions = new Array();
var employees = new Array();
var pos_selectors = new Array();

var positions_rights = new Array();

var wreStaffPosDescr, wreStaffPosVacancyDescr;

function Position(id, names, descrs, pageurls, vacancy, vacancy_descrs) {
   this.id = id;
   this.names = names;
   this.descrs = descrs;
   this.pageurls = pageurls;
   this.vacancy = vacancy;
   this.vacancy_descrs = vacancy_descrs;

   this.name = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.names.length && this.names[i][0] != lang) i++;
      return (i < this.names.length ? this.names[i][1] : "");
   }

   this.descr = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.descrs.length && this.descrs[i][0] != lang) i++;
      return (i < this.descrs.length ? this.descrs[i][1] : "");
   }

   this.pageurl = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.pageurls.length && this.pageurls[i][0] != lang) i++;
      return (i < this.pageurls.length ? this.pageurls[i][1] : "");
   }

   this.vacancy_descr = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.vacancy_descrs.length && this.vacancy_descrs[i][0] != lang) i++;
      return (i < this.vacancy_descrs.length ? this.vacancy_descrs[i][1] : "");
   }
}


function getPosition(id, positions_arr) {
   if (positions_arr == null) positions_arr = positions;
   var i = 0;
   while (i < positions_arr.length && positions_arr[i].id * 1 != id * 1) i++;
   if (i < positions_arr.length) return positions_arr[i];
   return null;
}


function createPositionSelector(positions_arr, id, onchange, pos_id) {
   pos_selectors[pos_selectors.length] = id;
   var i;
   var pos_sel = "<select id='" + id + "'" + (onchange.length > 0 ? " onchange='" + onchange + "(this);" : "") + "'>\r\n";
   pos_sel += "\t<option value='0'>- Select a position -</option>\r\n";
   for (i = 0; i < positions_arr.length; i++) {
      var sel = positions_arr[i].id == pos_id ? " selected='selected'" : "";
      pos_sel += "\t<option value='" + positions_arr[i].id + "'" + sel + ">" + positions_arr[i].name() + "</option>\r\n";
   }
   pos_sel += "</select>\r\n";
   return pos_sel;
}


function deletePositionSelector(id) {
   var i = 0;
   while (i < pos_selectors.length && pos_selectors[i] != id) i++;
   if (i < pos_selectors.length) {
      pos_selectors.splice(i, 1);
   }
}


function refreshPositionSelectors() {
   var i, j;
   for (i = 0; i < pos_selectors.length; i++) {
      var pos_sel = document.getElementById(pos_selectors[i]);
      var text = pos_sel.options[pos_sel.selectedIndex].text;
      j = 0;
      while (pos_sel.options.length > 0) pos_sel.remove(0);
      addOption(pos_selectors[i], 0, "- Select a position -");
      for (j = 0; j < positions.length; j++) {
         addOption(pos_selectors[i], positions[j].id, positions[j].name());
      }
      j = 0;
      while (j < pos_sel.options.length && pos_sel.options[j].text != text) j++;
      pos_sel.selectedIndex = j < pos_sel.options.length ? j : 0;
   }
   createPosition();
}




function loadPositions() {
   startIndicator("LocPosIndicator", "Loading positions and staff");
   startIndicator("LocStaffIndicator", "Loading positions and staff");
   var loc_id = document.getElementById("Pos_LocationList").value;

   var cmd = "cmd=cmdLoadPositions&sid=" + document.getElementById('SessionID').value + "&page=careers&lang=" + document.getElementById('lang').value + "&loc_id=" + loc_id;
   load(ajaxPosLoad = GetXmlHttpObject(), engine_locations_process, cmd, updatePositions);
}



function parsePositions(positions_elem, arr_positions) {
   var poss = positions_elem[0].getElementsByTagName("pos");

   var i;
   for (i = 0; i < poss.length; i++) {
      var id = getElemAttributeValue(poss[i], "id");
      var names = collectTagsByAttribute(poss[i], "name", "lang");
      var descrs = collectTagsByAttribute(poss[i], "descr", "lang");
      var pageurls = collectTagsByAttribute(poss[i], "pageurl", "lang");
      var vacancy = findTagByName(poss[i], "vacancy").childNodes[0].nodeValue == 1 ? true : false;
      var vacancy_descrs = collectTagsByAttribute(poss[i], "vacancy_descr", "lang");
      arr_positions[arr_positions.length] = new Position(id, names, descrs, pageurls, vacancy, vacancy_descrs);
   }
}

function updatePositions() {
   if (ajaxPosLoad.readyState == 4 || ajaxPosLoad.readyState == "complete") {

      var xml_doc = createXmlDoc(ajaxPosLoad.responseText);

      var positions_elem = xml_doc.getElementsByTagName("positions");

      pos_selectors = new Array();

      positions = new Array();
      parsePositions(positions_elem, positions);

      var loc_name = getLocationName("Pos_LocationList");

      var pos_sel = "Position: " + createPositionSelector(positions, "StaffPosSelector", "loadSelPosition");
      pos_sel += " or <input type='button' class='button' value='Create new' onClick='createPosition();' />\r\n";
      pos_sel += "<input type='hidden' id='TopicPositions' name='TopicPositions' value='1' />\r\n";
      pos_sel += "<input type='hidden' id='TopicLocation' name='TopicLocation' value='1' />\r\n";
      pos_sel += "<table>";
      var print_lang_name = languages.length > 1 ? true : false;
      var i;
      for (i = 0; i < languages.length; i++) {
         pos_sel += "<tr><td class='label'>Position name" + (print_lang_name ? ", " + languages[i].english_name : "") + ":</td><td>";
         pos_sel += "<input type='hidden' id='PositionsTopicTitle_1_" + languages[i].descr + "' name='PositionsTopicTitle_1_" + languages[i].descr + "' value='Open Positions' />\r\n";
         pos_sel += "<input type='hidden' id='LocationTopicTitle_1_" + languages[i].descr + "' name='LocationTopicTitle_1_" + languages[i].descr + "' value='" + loc_name + "' />\r\n";
         pos_sel += getInputPageTitle("StaffPos", languages[i].descr, 50, "Positions,Location");
         pos_sel += "</td></tr>\r\n";

      }
      pos_sel += "<tr><td class='label'>Description:</td><td valign=top><div id='StaffPosDescrEditorHost'></div></td></tr>\r\n";
      pos_sel += "<tr><td class='label'>Vacancy:</td><td valign=top><input type='checkbox' id='StaffPosVacancy' name='StaffPosVacancy' onclick=\"toggle('StaffPosVacancyDescrHost', this.checked);\" /><label for='StaffPosVacancy'>Site visitors can apply for this position</label></td></tr>\r\n";
      pos_sel += "<tr><td class='label'>&nbsp;</td><td valign=top><div id='StaffPosVacancyDescrHost' style='display: none;'><div id='StaffPosVacancyDescrEditorHost'></div></div></td></tr>\r\n";
      pos_sel += "<tr><td class='label'>&nbsp;</td><td><input type='button' class='button' value='Save' onClick='savePosition();' />&nbsp;<input type='button' class='button' value='Delete' onClick='deletePosition();' /></td></tr>\r\n";
      pos_sel += "</table>\r\n";
      var PositionsHost = document.getElementById("PositionsHost");
      PositionsHost.innerHTML = pos_sel;

      wreStaffPosDescr = new WebCPMSRichEdit('StaffPosDescr');
      wreStaffPosDescr.setSize(400, 100);
      wreStaffPosDescr.setStyle(WRES_TEXTPAD | WRES_HYPERLINK | WRES_MULTILANGUAGE);
      wreStaffPosDescr.start('StaffPosDescrEditorHost');

      wreStaffPosVacancyDescr = new WebCPMSRichEdit('StaffPosVacancyDescr');
      wreStaffPosVacancyDescr.setSize(400, 300);
      wreStaffPosVacancyDescr.setStyle(WRES_OFFICE | (isModuleInstalled("gallery") ? WRES_IMAGE : 0) | WRES_HYPERLINK | WRES_MULTILANGUAGE);
      wreStaffPosVacancyDescr.start('StaffPosVacancyDescrEditorHost');
      if (isModuleInstalled("gallery")) wreStaffPosVacancyDescr.setUploadDir();

      var host = document.getElementById("Staff_LocationHost");
      var loc_sel = document.getElementById("Pos_LocationList");
      host.innerHTML = getLocationName("Pos_LocationList");

      var loc_id = document.getElementById("Pos_LocationList").value;

      var cmd = "cmd=cmdLoadStaff&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id;
      load(ajaxStaffLoad = GetXmlHttpObject(), engine_locations_process, cmd, updateStaff);

      setButtonVisualStuff();
   }
}





function resetPositionEditor() {
   var def_vacancy_descr = "<p class='em'>Overview</p><p class='text'>Short overview here...</p> <p class='em'>Responsibilities</p><p class='text'>Specify here...</p> <p class='em'>Qualifications</p><p class='text'>Specify here...</p> <p class='em'>Compensation</p><p class='text'>Specify here...</p> <p class='em'>More details</p><p class='text'>Specify here id necessary...</p>";
   var loc_name = getLocationName("Pos_LocationList");
   var i;
   for (i = 0; i < languages.length; i++) {
      document.getElementById('StaffPosTitle_' + languages[i].descr).value = "";
      document.getElementById('LocationTopicTitle_1_' + languages[i].descr).value = loc_name;
      wreStaffPosVacancyDescr.setDocument(document.getElementById('lang').value);
      wreStaffPosDescr.setDocument(document.getElementById('lang').value);
   }
   wreStaffPosDescr.setText();
   resetPageTitleEditor("StaffPos");
   wreStaffPosVacancyDescr.setDocument(document.getElementById('lang').value, def_vacancy_descr);
   wreStaffPosVacancyDescr.setText(def_vacancy_descr);
   document.getElementById('StaffPosVacancy').checked = false;
   toggle('StaffPosVacancyDescrHost', false);
}


function deletePosition() {
   var pos_sel = document.getElementById("StaffPosSelector");
   var pos_id = pos_sel.options[pos_sel.selectedIndex].value;
   var pos_name = pos_sel.options[pos_sel.selectedIndex].text;

   if (pos_id == 0) {
      alert("Select the position to be deleted");
      return;
   }

   var i;
   var affected = new Array();
   for (i = 0; i < employees.length; i++) {
      if (employees[i].pos_id == pos_id) {
         affected[affected.length] = employees[i].name;
      }
   }
   var names = "This will affect ";
   if (affected.length > 5) {
      names += affected[0] + ", " + affected[1] + ", " + affected[2] + " and " + (affected.length - 3) + " more...";
   } else if (affected.length <= 5 && affected.length > 2) {
      for (i = 0; i < affected.length - 2; i++) {
         names += affected[i] + ", ";
      }
      names += affected[affected.length - 2] + " and " + affected[affected.length - 1];
   } else if (affected.length == 2) {
      names += affected[0] + " and " + affected[1];
   } else if (affected.length == 1) {
      names += affected[0];
   }

   if (confirm("Do you really want to delete position '" + pos_name + "'?\n" + (affected.length > 0 ? names + "\n\n" : "\n") + "WARNING! THIS CANNOT BE UNDONE!")) {
      startIndicator("LocPosIndicator", "Deleting poition");
      var loc_id = document.getElementById("Pos_LocationList").value;
      var cmd = "cmd=cmdDeletePosition&sid=" + document.getElementById('SessionID').value + "&page=careers&lang=" + document.getElementById("lang").value + "&loc_id=" + loc_id + "&PosID=" + pos_id;
      load(ajaxPosDelete = GetXmlHttpObject(), engine_locations_process, cmd, deletedPosition);
   }

}


function deletedPosition() {
   if (ajaxPosDelete.readyState == 4 || ajaxPosDelete.readyState == "complete") {
      stopIndicator("LocPosIndicator");
      var xml_doc = createXmlDoc(ajaxPosDelete.responseText);
      var positions_elem = xml_doc.getElementsByTagName("positions");
      positions = new Array();
      parsePositions(positions_elem, positions);
      refreshPositionSelectors();
      resetPositionEditor();
      setButtonVisualStuff();
   }
}



function loadSelPosition() {
   var pos_id = document.getElementById("StaffPosSelector").value;

   var pos = getPosition(pos_id, positions);
   if (pos != null) {
      var loc_name = getLocationName("Pos_LocationList");
      resetPageTitleEditor("StaffPos");
      toggle('StaffPosVacancyDescrHost', pos.vacancy);
      var i;
      for (i = 0; i < languages.length; i++) {
         document.getElementById("StaffPosTitle_" + languages[i].descr).value = pos.name(languages[i].descr);
         wreStaffPosDescr.setDocument(languages[i].descr, pos.descr(languages[i].descr));
         wreStaffPosVacancyDescr.setDocument(languages[i].descr, pos.vacancy_descr(languages[i].descr));
         var url = pos.pageurl(languages[i].descr);
         if (url.length > 0) {
            document.getElementById('StaffPosPermalink_' + languages[i].descr).innerHTML = getWebAddress() + "/" + url;
            checkPageTitle("StaffPos", languages[i].descr);
         }
         document.getElementById('LocationTopicTitle_1_' + languages[i].descr).value = loc_name;
      }
      wreStaffPosDescr.setText(pos.descr(document.getElementById('lang').value));
      wreStaffPosVacancyDescr.setText(pos.descr(document.getElementById('lang').value));
      document.getElementById('StaffPosVacancy').checked = pos.vacancy;
   } else {
      resetPositionEditor();
   }
}



function createPosition() {
   var pos_sel = document.getElementById("StaffPosSelector");
   pos_sel.options[0].selected = "selected";
   resetPositionEditor();
}




function savePosition() {
   var pos_id = document.getElementById("StaffPosSelector").value;

   var td = checkTitleDescr("StaffPos");

   if (td.length == 0) {
      return;
   }

   var pts = getPageTitles("StaffPos");

   var vacancy_descr = document.getElementById('StaffPosVacancy').checked ? wreStaffPosVacancyDescr.getText(false, document.getElementById('lang').value) : "";

   startIndicator("LocPosIndicator", "Saving positions");
   var loc_id = document.getElementById("Pos_LocationList").value;
   var cmd = "cmd=cmdSavePosition&sid=" + document.getElementById('SessionID').value + "&page=careers&lang=" + document.getElementById('lang').value + "&loc_id=" + loc_id + "&pos_id=" + pos_id + td + pts + "&pos_vacancy=" + (document.getElementById('StaffPosVacancy').checked ? "true" : "false") + "&vacancy_descr_" + document.getElementById('lang').value + "=" + encodeURIComponent(vacancy_descr);
   load(ajaxPosSave = GetXmlHttpObject(), engine_locations_process, cmd, savedPosition);
}


function savedPosition() {
   if (ajaxPosSave.readyState == 4 || ajaxPosSave.readyState == "complete") {
      stopIndicator("LocPosIndicator");
      var xml_doc = createXmlDoc(ajaxPosSave.responseText);
      var positions_elem = xml_doc.getElementsByTagName("positions");
      positions = new Array();
      parsePositions(positions_elem, positions);
      refreshPositionSelectors();
      resetPositionEditor();
      setButtonVisualStuff();
   }
}




function Employee(id, pos_id, name, user_id, username, phone, email) {
   this.id = id;
   this.pos_id = pos_id;
   this.name = name;
   this.user_id = user_id;
   this.username = username;
   this.phone = phone;
   this.email = email;
}


function refreshStaff(xml_text) {
   var xml_doc = createXmlDoc(xml_text);
   var emps = xml_doc.getElementsByTagName("employee");

   var host = document.getElementById("StaffHost");

   employees = new Array();

   deletePositionSelector("StaffPosSelector_New");

   var list = "<p>[&nbsp;<span class='menuitem' onclick=\"toggle('StaffEmployeeTypeHost', true);toggle('StaffEmployeePersonalDataHost', false);toggle('StaffEmployeePositionHost', false);document.getElementById('StaffUserName').value='';setInputPersonal('Staff');setInputAddress('Staff');document.getElementById('StaffName_New').value='';document.getElementById('StaffPosSelector_New').value='0';\">New employee</span>]</p>\r\n";
   list += "<div id='StaffEmployeeTypeHost' class='editorpanel' style='display: none;'>";
   list += "<p><input type='radio' id='StaffEmployeeTypeRegistered' name='StaffEmployeeType' checked='checked' /><label for='StaffEmployeeTypeRegistered'>Registered user - Employee will have access to this Information System</label><p>";
   list += "<p class='small_note'>New employee is going to receive a user name and a password. He/she will be able to log in to the System and perform some operations, modifications etc.</p>";
   list += "<p><input type='radio' id='StaffEmployeeTypePlain' name='StaffEmployeeType' /><label for='StaffEmployeeTypePlain'>Contributor - Employee should not access the System</label></p>";
   list += "<p class='small_note'>New employee will not have access to the System at all. Recommended if you do not want this person to make any modifications in the System.</p>";
   list += "<div><span class='menuitem' style='font-weight: bold;' onclick=\"toggle('StaffEmployeeTypeHost', false);\">&lt;&lt; Back</span>&nbsp;<span class='menuitem' style='font-weight: bold; padding-left: 20px;' onclick=\"toggle('StaffEmployeeTypeHost', false);toggle(document.getElementById('StaffEmployeeTypeRegistered').checked?'StaffEmployeePersonalDataHost':'StaffEmployeePositionHost', true);toggle('StaffEmployeePersonalInfoButtonHost', false);toggle('StaffEmployeePersonalInfoWizardHost', document.getElementById('StaffEmployeeTypeRegistered').checked?true:false);\">Next &gt;&gt;</span></div>";
   list += "</div>";
   list += "<div id='StaffEmployeePersonalDataHost' class='editorpanel' style='display: none;'>";
   list += getLoginOrCreateUser("Staff", false, false, "User name should be in form of <span style='font-family: monospace;'>firstname.lastname</span>");
   list += "<div id='StaffEmployeePersonalInfoButtonHost' style='display: none;'>";
   list += "<span class='menuitem' style='font-weight: bold;' onclick=\"toggle('StaffEmployeePersonalDataHost', false);\">&lt;&lt; Back</span>&nbsp;<span style='padding-left: 20px;'><input type='button' class='button_small' value='Set personal data' onclick=\"setPersonalData('Staff', 'StaffSetPersonalDataIndicator', false);\" />&nbsp;<span id='StaffSetPersonalDataIndicator'></span></span>";
   list += "</div><div id='StaffEmployeePersonalInfoWizardHost' style='display: block;'><span class='menuitem' style='font-weight: bold;' onclick=\"toggle('StaffEmployeeTypeHost', true);toggle('StaffEmployeePersonalDataHost', false);\">&lt;&lt; Back</span>&nbsp;<span class='menuitem' style='font-weight: bold; padding-left: 20px;' onclick=\"if (checkNewEmployeePersonalInfo()) {toggle('StaffEmployeeTypeHost', false);toggle('StaffEmployeePersonalDataHost', false);toggle('StaffEmployeePositionHost', true);document.getElementById('StaffName_New').value=join(new Array(document.getElementById('StaffFirstName').value, document.getElementById('StaffLastName').value), ' ');}\">Next &gt;&gt;</span></div></div>";
   list += "<div id='StaffEmployeePositionHost' class='editorpanel' style='display: none;'><table cellpadding=0 cellspacing=0 class='panel'>";
   list += "<tr><td class='label_normal'>Employee name:</td><td class='item'><input type='text' id='StaffName_New' name='StaffName_New' size=20 value='' /></td></tr>";
   list += "<tr><td class='label_normal'>Position:</td><td class='item'>" + createPositionSelector(positions, "StaffPosSelector_New", "") + "</td></tr>\r\n";
   list += "</table><div><span class='menuitem' style='font-weight: bold;' onclick=\"toggle('StaffEmployeePositionHost', false);toggle(document.getElementById('StaffEmployeeTypeRegistered').checked?'StaffEmployeePersonalDataHost':'StaffEmployeeTypeHost', true);toggle('StaffEmployeePersonalInfoButtonHost', false);toggle('StaffEmployeePersonalInfoWizardHost', document.getElementById('StaffEmployeeTypeRegistered').checked?true:false);\">&lt;&lt; Back</span>&nbsp;<span style='padding-left: 20px;'><input type='button' class='button' value='Add employee' onClick='addEmployee();' /></span></div></div>\r\n";

   var elist = "";
   var inac = "";
   var i;
   if (emps.length > 0) {
      var inactive = false;
      for (i = 0; i < emps.length; i++) {
         var id = getElemAttributeValue(emps[i], "id");
         var pos_id = findTagByName(emps[i], "pos").childNodes[0].nodeValue;
         deletePositionSelector("StaffPosSelector_" + id);
         var name = findTagByName(emps[i], "name").childNodes[0] ? findTagByName(emps[i], "name").childNodes[0].nodeValue : "";
         var user_id = findTagByName(emps[i], "user_id") ? findTagByName(emps[i], "user_id").childNodes[0].nodeValue : "";
         var username = findTagByName(emps[i], "username") ? findTagByName(emps[i], "username").childNodes[0].nodeValue : "";
         var phone = findTagByName(emps[i], "phone") ? (findTagByName(emps[i], "phone").childNodes[0] ? findTagByName(emps[i], "phone").childNodes[0].nodeValue : "") : "";
         var email = findTagByName(emps[i], "email") ? (findTagByName(emps[i], "email").childNodes[0] ? findTagByName(emps[i], "email").childNodes[0].nodeValue : "") : "";
         var status = findTagByName(emps[i], "status") ? (findTagByName(emps[i], "status").childNodes[0] ? findTagByName(emps[i], "status").childNodes[0].nodeValue : "") : "";
         var user = getElemAttributeValue(emps[i], "user") == "true" ? true : false;
         var status_code = 1;
         if (user) {
            status_code = getElemAttributeValue(emps[i], "status") * 1;
            inactive |= (status_code < 1 ? true : false);
         }
         employees[employees.length] = new Employee(id, pos_id, name, user_id, username, phone, email);
         elist += "<tr><td class='item' id='StaffUserNameHost_" + id + "'><span class='menuitem' title='Click to edit personal data' onclick=\"document.getElementById('StaffUserName').value='" + username + "';toggle('StaffEmployeePersonalDataHost', true);toggle('StaffEmployeePersonalInfoButtonHost', true);toggle('StaffEmployeePersonalInfoWizardHost', false);toggle('StaffEmployeeTypeHost', false);toggle('StaffEmployeePositionHost', false);createLoadUser(USER_LOAD, 'Staff');\">" + username + (status_code < 1 ? " (<span style='color: red'>*</span>)" : "") + "</span></td><td class='item' id='StaffNameHost_" + id + "'><input type='text' id='StaffName_" + id + "' name='StaffName_" + id + "' size=20 value='" + name + "' /></td>";
         elist += "<td class='item' id='StaffPositionHost_" + id + "'>" + createPositionSelector(positions, "StaffPosSelector_" + id, "", pos_id) + "</td><td id='StaffMsgHost_" + id + "' align='center'><input type='hidden' id='StaffList_" + user_id + "RegUserName' value='" + username + "' /><input type='hidden' id='StaffList_" + user_id + "FirstName' value='" + name + "' /><input type='hidden' id='StaffList_" + user_id + "LastName' value='' /><input type='hidden' id='StaffList_" + user_id + "Phone' value='" + phone + "' /><input type='hidden' id='StaffList_" + user_id + "EMail' value='" + email + "' />" + (email.length > 0 ? "<img src='webcpms/icons/icon_email_big.gif' title='Message to " + name + "' class='rte_dropdn' onclick=\"toggle('StaffListPanel', false);toggle('StaffListMessagePanel', true);printStaffListMessagePanel(" + user_id + ", '" + username + "', '" + name + "', '" + phone + "', '" + email + "');\" /><img id='StaffListMsgIcon_" + user_id + "' src='webcpms/icons/expand_dbl.gif' class='rte_dropdn' onmouseover=\"this.src=getExpandCollapseIcon(" + user_id + ", true);\" onmouseout=\"this.src=getExpandCollapseIcon(" + user_id + ", false);\" onclick=\"toggle('StaffList_" + user_id + "ListMessagesHost');this.src=toggleStaffListMessagesPanel(" + id + ", " + user_id + ", true);loadMessagesPosted('StaffList_" + user_id + "', 'StaffList_" + user_id + "ListMessagesHost', false, 'from=" + user_id + "|to=" + user_id + "');\" title='Messages of " + name + "' />" : "") + "</td><td id='StaffSelHost_" + id + "' align='center'><input type='checkbox' id='StaffChk_" + id + "' name='StaffChk_" + id + "' onClick='enableEmployeeActions();' /></td></tr>\r\n";
//         elist += "<td class='item' id='StaffPositionHost_" + id + "'>" + createPositionSelector(positions, "StaffPosSelector_" + id, "", pos_id) + "</td><td id='StaffMsgHost_" + id + "' align='center'>" + (email.length > 0 ? "<img src='webcpms/icons/icon_email_big.gif' title='Message to " + name + "' class='rte_dropdn' onclick=\"toggle('StaffListPanel', false);toggle('StaffListMessagePanel', true);printStaffListMessagePanel(" + user_id + ", '" + username + "', '" + name + "', '" + phone + "', '" + email + "');\" /><img id='StaffListMsgIcon_" + user_id + "' src='webcpms/icons/expand_dbl.gif' class='rte_dropdn' onmouseover=\"this.src=getExpandCollapseIcon(" + user_id + ", true);\" onmouseout=\"this.src=getExpandCollapseIcon(" + user_id + ", false);\" onclick=\"toggle('StaffList_" + user_id + "ListMessagesHost');this.src=toggleStaffListMessagesPanel(" + id + ", " + user_id + ", true);loadMessagesPosted('StaffList_" + user_id + "', 'StaffList_" + user_id + "ListMessagesHost', false, 'from=" + user_id + "|to=" + user_id + "');\" title='Messages of " + name + "' />" : "") + "</td><td id='StaffSelHost_" + id + "' align='center'><input type='checkbox' id='StaffChk_" + id + "' name='StaffChk_" + id + "' onClick='enableEmployeeActions();' /></td></tr>\r\n";
         elist += "<tr><td colspan='5'>";
         elist += getEMailMessageList('StaffList_' + user_id);
         elist += "</td></tr>";
      }
      if (inactive) {
         inac += "<div class='note'><span style='color: red'>*</span> Employee not yet activated [&nbsp;<span class='menuitem' onclick=\"toggle('UserActivationInfo');\">Help</span>&nbsp;]</div><div id='UserActivationInfo' style='display: none;' class='small_note'>When a new employee added, he/she receives an e-mail with a link. Following that link, the new employee can activate his/her registration. It is likely that the new employee forgot to open the activation link.</div>\r\n";
      }
   }
//   host.innerHTML = list + "<div id='StaffListPanel' style='display: block;'><table cellpadding=0 cellspacing=0 class='panel width100'><tr><td class='itemtitle'>Username</td><td class='itemtitle'>Name</td><td class='itemtitle'>Position</td><td class='itemtitle_center'>Msg</td><td class='itemtitle_center'>Sel</td></tr>\r\n" + elist + "</td></tr>\r\n</table>\r\n" + inac + "<div><input type='button' class='button' value='Update' onclick='saveStaff();' />&nbsp;<input type='button' class='button' value='Delete' id='EmployeeDelete' onClick='deleteEmployee();' disabled='true' /><span id='EmployeeMoveCopyHost' style='display: none;'>&nbsp;|&nbsp;<select id='EmployeeMoveCopySelector'><option value='move'>Move</option><option value='copy'>Copy</option></select>&nbsp;to&nbsp;<span id='EmployeeMoveCopy_LocationSelectorHost'></span>&nbsp;<span class='menuitem' onclick=\"modifyEmployee();\">Apply</span>&nbsp;|&nbsp;</span><span class='menuitem' id='EmployeeSendMessage' onclick=\"toggle('StaffListMessagePanel');printStaffListMessagePanel();\" style='display: none; font-weight: bold;'>Send Message &gt;&gt;</span></div></div><div id='StaffListMessagePanel' style='display: none;'>" + getEMailMessagePanel("StaffList", "StaffListPanel", "StaffListMessagePanel", "updateStaffListMessages", "stafflist_email_categories") + "</div><div id='StaffListDeletePanel' class='editorpanel' style='display: none;'></div>\r\n";
   host.innerHTML = list + "<div id='StaffListPanel' style='display: block;'><table cellpadding=0 cellspacing=0 class='panel width100'><tr><td class='itemtitle'>Username</td><td class='itemtitle'>Name</td><td class='itemtitle'>Position</td><td class='itemtitle_center'>Msg</td><td class='itemtitle_center'>Sel</td></tr>\r\n" + elist + "</td></tr>\r\n</table>\r\n" + inac + "<div><input type='button' class='button' value='Update' onclick='saveStaff();' />&nbsp;<input type='button' class='button' value='Delete' id='EmployeeDelete' onClick='deleteEmployee();' disabled='true' /><span id='EmployeeMoveCopyHost' style='display: none;'>&nbsp;|&nbsp;Move&nbsp;to&nbsp;<span id='EmployeeMoveCopy_LocationSelectorHost'></span>&nbsp;<span class='menuitem' onclick=\"modifyEmployee();\">Apply</span>&nbsp;|&nbsp;</span><span class='menuitem' id='EmployeeSendMessage' onclick=\"toggle('StaffListMessagePanel');printStaffListMessagePanel();\" style='display: none; font-weight: bold;'>Send Message &gt;&gt;</span></div></div><div id='StaffListMessagePanel' style='display: none;'>" + getEMailMessagePanel("StaffList", "StaffListPanel", "StaffListMessagePanel", "updateStaffListMessages", "stafflist_email_categories") + "</div><div id='StaffListDeletePanel' class='editorpanel' style='display: none;'></div>\r\n";

   wreStaffListText = new WebCPMSRichEdit('StaffListText');
   wreStaffListText.setSize(500, 300);
   wreStaffListText.setStyle(WRES_TEXTPAD | WRES_HYPERLINK | (isModuleInstalled("gallery") ? WRES_IMAGE : 0) | WRES_MACRO);
   wreStaffListText.start('StaffListTextEditorHost');
   wreStaffListText.addPlugIn(getMessageScrollerRTEPlugIn('StaffList'));
   wreStaffListText.setCallback("saveMessageScrollerText('StaffList');");
   wreStaffListText.setEvaluator("StaffList", evaluateMessageScrollerVariables, setEMailMessageInfo);

   createLocationListener('EmployeeMoveCopy_LocationSelectorHost', 'EmployeeMoveCopy_LocationList');

   i = 0;
   while (i < locationListeners.length && locationListeners[i].host_id != 'EmployeeMoveCopy_LocationSelectorHost') i++;
   if (i < locationListeners.length) {
      locationListeners[i].notify(ajaxLoadLocationList.responseText);
   }
}




function selectStaffListRow(id, sel) {
   var bg = sel ? "#DEDCF5" : "transparent";
   var brd = sel ? "solid 1px #a5acb2" : "none";

   document.getElementById('StaffUserNameHost_' + id).style.borderLeft = brd;
   document.getElementById('StaffUserNameHost_' + id).style.borderTop = brd;
   document.getElementById('StaffNameHost_' + id).style.borderTop = brd;
   document.getElementById('StaffPositionHost_' + id).style.borderTop = brd;
   document.getElementById('StaffMsgHost_' + id).style.borderTop = brd;
   document.getElementById('StaffSelHost_' + id).style.borderTop = brd;
   document.getElementById('StaffSelHost_' + id).style.borderRight = brd;

   document.getElementById('StaffUserNameHost_' + id).style.background = bg;
   document.getElementById('StaffNameHost_' + id).style.background = bg;
   document.getElementById('StaffPositionHost_' + id).style.background = bg;
   document.getElementById('StaffMsgHost_' + id).style.background = bg;
   document.getElementById('StaffSelHost_' + id).style.background = bg;
}


function getExpandCollapseIcon(user_id, over) {
   var expand = document.getElementById("StaffList_" + user_id + "ListMessagesHost") ? (document.getElementById("StaffList_" + user_id + "ListMessagesHost").style.display == "none" ? true : false) : true;

   return "webcpms/icons/" + (expand ? "expand" : "collapse") + "_dbl" + (over ? "_on" : "") + ".gif";
}


function toggleStaffListMessagesPanel(id, user_id, over) {
   var img = document.getElementById('StaffListMsgIcon_' + user_id);
   img.src = getExpandCollapseIcon(user_id, over);

   var expand = document.getElementById("StaffList_" + user_id + "ListMessagesHost") ? (document.getElementById("StaffList_" + user_id + "ListMessagesHost").style.display == "none" ? true : false) : true;

   img.src = "webcpms/icons/" + (expand ? "expand" : "collapse") + "_dbl" + (over ? "_on" : "") + ".gif";

   selectStaffListRow(id, !expand);
}




var stafflist_email_categories;





function printStaffListMessagePanel(id, username, name, phone, email) {

   var tos = new Array();

   if (id == null && name == null && email == null) {
      var i;
      for (i = 0; i < employees.length; i++) {
         if (document.getElementById('StaffChk_' + employees[i].id).checked) {
            tos[tos.length] = new Person(employees[i].user_id, document.getElementById('StaffList_' + employees[i].user_id + 'RegUserName').value, document.getElementById('StaffList_' + employees[i].user_id + 'FirstName').value, document.getElementById('StaffList_' + employees[i].user_id + 'LastName').value, document.getElementById('StaffList_' + employees[i].user_id + 'Phone').value, document.getElementById('StaffList_' + employees[i].user_id + 'EMail').value);
         }
      }
      printMessagePanel('StaffList', "", tos);

   } else {

      printMessagePanel('StaffList', "", new Person(id, username, name, "", phone, email));
   }

   if (!loadEMailTemplates('StaffList', loadedStaffListEMailTemplates)) {
      setStaffListMsgTemplate();
   }
}





function loadedStaffListEMailTemplates() {
   if (ajaxLoadEMailTemplates.readyState == 4 || ajaxLoadEMailTemplates.readyState == "complete") {
      stopIndicator("StaffListTemplateIndicator");

      var sel_category = 0, sel_template = 0;

      stafflist_email_categories = new Array();

      parseEMailTemplates(ajaxLoadEMailTemplates.responseText, stafflist_email_categories);

      printEMailTemplateSelector("StaffList", stafflist_email_categories, "setStaffListMsgTemplate();", sel_category, sel_template);
      setStaffListMsgTemplate();
   }
}


function setStaffListMsgTemplate() {
   resetEMailMessageInfo("StaffList");

   var tc = document.getElementById('StaffListTemplateSelector').value.split(".");

   var category_id = tc[0];
   var template_id = tc[1];

   var template = getEMailTemplate(category_id, template_id, stafflist_email_categories);
   var lang = document.getElementById('lang').value;

   var errors = new Array();

   var body = "";
   if (template) {

      document.getElementById('StaffListSubject').value = template.subject();

      body = evaluateVariables(template.body(), 'StaffList', null, errors);
   } else {

      document.getElementById('StaffListSubject').value = document.getElementById('StaffListSubjectOrig').value;

      body = evaluateVariables("Dear %FirstName%,<br /><br /><br />The Staff", 'StaffList', null, errors);
   }

   if (errors.length > 0) {
      document.getElementById('StaffListMessageInfo');
   }

   wreStaffListText.setDocument(lang, body);
   wreStaffListText.setText(body);

   setEMailMessageInfo("StaffList", errors, false);

   var p = wreStaffListText.getPlugIn("StaffListMessageScroller");
   if (p) p.invalidate(stafflist_email_categories, "Dear %FirstName%,<br /><br /><br />The Staff");
}


function updateStaffListMessages(stafflist_id_list) {
   var stafflist_ids = stafflist_id_list.split(",");

   var i;
   for (i = 0; i < stafflist_ids.length; i++) {
      if (document.getElementById('StaffList_' + stafflist_ids[i] + 'ListMessagesHost').style.display == "none") {
         document.getElementById('StaffList_' + stafflist_ids[i] + 'MessagesPostedUpdated').value = 0;
      } else {
         loadMessagesPosted('StaffList_' + stafflist_ids[i], 'StaffList_' + stafflist_ids[i] + 'ListMessagesHost', true, 'from=' + stafflist_ids[i] + '|to=' + stafflist_ids[i]);
      }
   }

}



function updateStaff() {
   if (ajaxStaffLoad.readyState == 4 || ajaxStaffLoad.readyState == "complete") {
      stopIndicator("LocPosIndicator");
      stopIndicator("LocStaffIndicator");
      refreshStaff(ajaxStaffLoad.responseText);
      setButtonVisualStuff();
   }
}



function saveStaff() {

   var i = 0;
   var found = false;
   
   while (i < employees.length) {
      var pos_sel = document.getElementById("StaffPosSelector_" + employees[i].id);
      var pos_id = pos_sel.options[pos_sel.selectedIndex].value;
      if (pos_id == 0) {
         found = true;
         break;
      }
      i++;
   }
   if (i < employees.length) {
      alert("Please select a position for all employees!");
      return;
   }


   startIndicator("LocStaffIndicator", "Saving staff");

   var loc_id = document.getElementById("Pos_LocationList").value;
   var cmd = "cmd=cmdSaveStaff&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id;
   for (i = 0; i < employees.length; i++) {
      cmd += "&Employee_" + i + "=" + employees[i].id;
      var pos_sel = document.getElementById("StaffPosSelector_" + employees[i].id);
      var pos_id = pos_sel.options[pos_sel.selectedIndex].value;
      var name = encodeURIComponent(document.getElementById("StaffName_" + employees[i].id).value);
      cmd += "&Emplyoee_" + i + "_PosID=" + pos_id;
      cmd += "&Employee_" + i + "_Name=" + name;
   }
   load(ajaxStaffSave = GetXmlHttpObject(), engine_locations_process, cmd, savedStaff);

}


function savedStaff() {
   if (ajaxStaffSave.readyState == 4 || ajaxStaffSave.readyState == "complete") {
      stopIndicator("LocStaffIndicator");
      refreshStaff(ajaxStaffSave.responseText);
      setButtonVisualStuff();
   }
}


function enableEmployeeActions() {
   var i = 0;
   while (i < employees.length && document.getElementById("StaffChk_" + employees[i].id).checked == false) i++;
   var dis = i < employees.length ? false : true;
   document.getElementById("EmployeeDelete").disabled = dis;
   toggle("EmployeeSendMessage", !dis, "inline");
   toggle("EmployeeMoveCopyHost", !dis, "inline");
}


function deleteEmployee() {

   var del = "";

   del += "<h2><span style=\"float: right; font-size: 8pt; font-weight: normal; font-family: 'Tahoma', sans-serif;\">[&nbsp;<span class='menuitem' onclick=\"toggle('DeleteEmployeeHints');\">Toggle hints</span>&nbsp;]</span>Delete employees</h2>";

   del += "<div id='DeleteEmployeeHints' style='display: none;'>";
   del += "<div class='em'>Delete employee status only</div>";
   del += "<div class='small_note'>Remove employee from the staff list only. This person will have full access to the system and he/she is going to receive notification messages and newsletters.</div>";
   del += "<div class='em'>Delete employee status and user rights</div>";
   del += "<div class='small_note'>From now on this person will have basic access to the system as any other registered users. Personal information will remain in the system so you can contact him/her any time though he/she will no longer receive automatic notification messages.</div>";
   del += "<div class='em'>Completely remove user</div>";
   del += "<div class='small_note'>Completely remove user account. Remove all personal information from the system related to this employee. This person will no longer have access to the system and you will not be able to contact him/her.</div>";
   del += "</div>";

   var cnt = 0;
   var i;
   for (i = 0; i < employees.length; i++) {
      if (document.getElementById("StaffChk_" + employees[i].id).checked) {
         var pos = getPosition(employees[i].pos_id, positions);
         del += "<input type='hidden' id='DeleteEmployee_" + cnt + "' value='" + employees[i].id + "' /><input type='hidden' id='DeleteEmployeeUser_" + cnt + "' value='" + employees[i].user_id + "' /><div class='em'>" + employees[i].name + (pos == null ? "" : " (" + pos.name() + ")") + "</div>";
         del += "<div style='padding-bottom: 10px; padding-left: 10px;'>";
         del += "<input type='radio' id='DelEmployeeOnly_" + cnt + "' name='DelEmployee_" + cnt + "'" + (employees[i].user_id ? "" : " checked='checked'") + " /><label for='DelEmployeeOnly_" + cnt + "'>Delete employee status only</label><br />";
         if (employees[i].user_id) {
            del += "<input type='radio' id='DelEmployeeRights_" + cnt + "' name='DelEmployee_" + cnt + "'" + (employees[i].user_id ? " checked='checked'" : "") + " /><label for='DelEmployeeRights_" + cnt + "'>Delete employee status and user rights</label><br />";
            del += "<input type='radio' id='DelEmployeeUser_" + cnt + "' name='DelEmployee_" + cnt + "' /><label for='DelEmployeeUser_" + cnt + "'>Completely remove user</label>";
         }
         del += "</div>";
         cnt++;
      }
   }

   del += "<p class='em' style='color: red;'>Warning! This operation cannot be undone!</p>";
   del += "<div><span class='menuitem' style='font-weight: bold;' onclick=\"toggle('StaffListPanel', true);toggle('StaffListDeletePanel', false);\">&lt;&lt; Back</span>&nbsp;<input type='button' class='button' value='Delete' onclick=\"deleteSelectedEmployees();\" /></div>";

   toggle("StaffListPanel", false);
   toggle("StaffListDeletePanel", true);

   document.getElementById("StaffListDeletePanel").innerHTML = del;

   setButtonVisualStuff();
}


function deleteSelectedEmployees() {
   var loc_id = document.getElementById("Pos_LocationList").value;
   var cmd = "cmd=cmdDeleteEmployee&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id;
   var i = 0;
   var emp = null;
   while ( (emp = document.getElementById("DeleteEmployee_" + i)) != null ) {
      cmd += "&employee_" + i + "=" + emp.value;
      cmd += "&employee_user_" + i + "=" + document.getElementById("DeleteEmployeeUser_" + i).value;
      cmd += "&employee_del_" + i + "=" + (document.getElementById('DelEmployeeOnly_' + i).checked ? "employee" : (document.getElementById('DelEmployeeRights_' + i).checked ? "rights" : "complete"));
      i++;
   }
   startIndicator("LocStaffIndicator", "Deleting employee");
   load(ajaxEmployeeDelete = GetXmlHttpObject(), engine_locations_process, cmd, deletedEmployee);
}


function deletedEmployee() {
   if (ajaxEmployeeDelete.readyState == 4 || ajaxEmployeeDelete.readyState == "complete") {
      stopIndicator("LocStaffIndicator");
      toggle("StaffListPanel", true);
      toggle("StaffListDeletePanel", false);
      refreshStaff(ajaxEmployeeDelete.responseText);
      setButtonVisualStuff();
   }
}


function checkNewEmployeePersonalInfo() {
   var username = document.getElementById("StaffUserName").value;
   if (username.length == 0) {
      alert("Please specify the new employee's user name");
      return false;
   }
   var v = validateInputPersonal("Staff");
   if (v == null) {
      alert("Please specify personal information about new employee");
      return false;
   }
   return true;
}

function addEmployee() {
   var pos_id = document.getElementById("StaffPosSelector_New").value;
   if (pos_id == 0) {
      alert("Please select a position for the new employee!");
      return;
   }
   var name = document.getElementById("StaffName_New").value;
   if (name == "") {
      alert("Please enter the name of the new employee");
      return;
   }
   var user = "";
   if (document.getElementById('StaffEmployeeTypeRegistered').checked) {
      var username = document.getElementById("StaffUserName").value;
      if (username.length > 0) {
         var v = validateInputPersonal("Staff");
         if (v == null) {
            alert("Please specify personal information about new employee");
            return;
         } else {
            user += "&EmployeeUserName=" + encodeURIComponent(username);
            user += "&EmployeeUserID=" + v[6];
            user += "&EmployeeFirstName=" + encodeURIComponent(v[0]);
            user += "&EmployeeLastName=" + encodeURIComponent(v[1]);
            user += "&EmployeePhoneArea=" + encodeURIComponent(v[2]);
            user += "&EmployeePhoneFirst=" + encodeURIComponent(v[3]);
            user += "&EmployeePhoneSecond=" + encodeURIComponent(v[4]);
            user += "&EmployeeEMail=" + encodeURIComponent(v[5]);
         }
      }
   }
   startIndicator("LocStaffIndicator", "Creating employee");
   var loc_id = document.getElementById("Pos_LocationList").value;
   var cmd = "cmd=cmdAddEmployee&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id + "&EmployeeName=" + encodeURIComponent(name) + "&EmployeePosID=" + pos_id + user;
   load(ajaxEmployeeAdd = GetXmlHttpObject(), engine_locations_process, cmd, addedEmployee);
}



function addedEmployee() {
   if (ajaxEmployeeAdd.readyState == 4 || ajaxEmployeeAdd.readyState == "complete") {
      stopIndicator("LocStaffIndicator");
      refreshStaff(ajaxEmployeeAdd.responseText);
      setButtonVisualStuff();
   }
}



function modifyEmployee() {
//   var action = document.getElementById('EmployeeMoveCopySelector').value;
   var action = "move";

   var loc_id = document.getElementById("Pos_LocationList").value;
   var target_loc_id = document.getElementById("EmployeeMoveCopy_LocationList").value;

   var i;
   var emps = new Array();

   for (i = 0; i < employees.length; i++) {
      if (document.getElementById("StaffChk_" + employees[i].id).checked) {
         emps[emps.length] = employees[i].id;
      }
   }

   startIndicator("LocStaffIndicator", "Modifying employee");

   var cmd = "cmd=cmdModifyEmployee&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&action=" + action + "&loc_id=" + loc_id + "&target_loc_id=" + target_loc_id + "&employees=" + emps.join(",");
   load(ajaxEmployeeModify = GetXmlHttpObject(), engine_locations_process, cmd, modifiedEmployee);
}


function modifiedEmployee() {
   if (ajaxEmployeeModify.readyState == 4 || ajaxEmployeeModify.readyState == "complete") {
      stopIndicator("LocStaffIndicator");
      refreshStaff(ajaxEmployeeModify.responseText);
      setButtonVisualStuff();
   }
}




/*******************************************************/


var ajaxStaffFilterPosLoad,
    ajaxStaffFilterStaffLoad;
var staff_filter_positions,
    staff_filter_employees;

function loadStaffFilterPositions(loc_sel, prefix, onapply, oncancel) {
   var loc_id = document.getElementById(loc_sel).value;
   var cmd = "cmd=cmdLoadPositionsStaffFilter&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById("lang").value + "&loc_id=" + loc_id + "&prefix=" + prefix + (onapply ? "&onapply=" + onapply : "") + (oncancel ? "&oncancel=" + oncancel : "") + "&loc_sel=" + loc_sel;
   load(ajaxStaffFilterPosLoad = GetXmlHttpObject(), engine_locations_process, cmd, updateStaffFilterPositions);
}


function updateStaffFilterPositions() {
   if (ajaxStaffFilterPosLoad.readyState == 4 || ajaxStaffFilterPosLoad.readyState == "complete") {
      staff_filter_positions = new Array();
      var xml_doc = createXmlDoc(ajaxStaffFilterPosLoad.responseText);

      var positions_elem = xml_doc.getElementsByTagName("positions");

      parsePositions(positions_elem, staff_filter_positions);

      var prefix = xml_doc.getElementsByTagName("prefix");
      var loc_sel = xml_doc.getElementsByTagName("loc_sel");

      var callback = xml_doc.getElementsByTagName("callback");

      var cb = callback[0].childNodes[0].nodeValue.split("|");
      var onapply = cb[0].length == 0 ? null : cb[0];
      var oncancel = cb[1].length == 0 ? null : cb[1];

      printStaffFilter(prefix[0].childNodes[0].nodeValue, loc_sel[0].childNodes[0].nodeValue, onapply, oncancel);
   }
}



function showStaffFilter(prefix, loc_sel) {
   var refobj = document.getElementById(prefix + 'StaffFilterSelector');
   if (refobj == null) return;
   var x = getElementLeft(refobj);
   var y = getElementTop(refobj);

//   var p = alignWnd('MainPage');

   var host = document.getElementById(prefix + 'StaffFilter');
   host.style.position = "absolute";
   host.style.left = x + "px";
   host.style.top = (y * 1 + refobj.offsetHeight * 1) + "px";
   host.style.display = "block";

   var pos_host = document.getElementById(prefix + 'PositionListHost');
   if (staff_filter_positions.length > 8) {
      var h = document.getElementById(prefix + "PositionFilter_0").offsetHeight * 6;
      pos_host.style.height = h + "px";
      pos_host.style.overflow = "auto";
   } else {
      pos_host.style.height = "";
      pos_host.style.overflow = "";
   }

//   showBackground(prefix + 'StaffFilter', host, p);
   showBackground(prefix + 'StaffFilter', host);

   if (document.getElementById(prefix + 'StaffListValid')) {
      if (document.getElementById(prefix + 'StaffListValid').value == 0) {
         loadStaffFilterStaff(prefix, loc_sel);
      }
   } else {
      loadStaffFilterStaff(prefix, loc_sel);
   }

}



function hideStaffFilter(prefix, cmd, callback) {
   var host = document.getElementById(prefix + 'StaffFilter');
   host.style.display = "none";
   if (cmd == 'apply') {
      var i = 0, chk;
      while ( (chk = document.getElementById(prefix + "PositionFilter_" + i)) != null ) {
         document.getElementById(prefix + "PositionFilterOrig_" + i).value = chk.checked ? "true" : "false";
         i++;
      }
   } else if (cmd == 'cancel') {
      var i = 0, chk;
      while ( (chk = document.getElementById(prefix + "PositionFilter_" + i)) != null ) {
         chk.checked = document.getElementById(prefix + "PositionFilterOrig_" + i).value == "true" ? true : false;
         i++;
      }
      document.getElementById(prefix + 'StaffFilterStaffHost').innerHTML = "";
      document.getElementById(prefix + 'StaffListValid').value = 0;
   }
   hideBackground(prefix + "StaffFilter");
   if (callback != null && callback != "") eval(callback);
}


function printStaffFilter(prefix, loc_sel, callback_apply, callback_cancel) {
   var staffilter_host = document.getElementById(prefix + 'StaffFilter');
   if (staffilter_host) {
      var i, cnt = 0;
      var list = "<table><tr><td colspan=2>";
      list += "<div class='h2'>Positions</div><div class='small_note'>[&nbsp;<span class='menuitem' onclick=\"positionFilterSelectAll('" + prefix + "');\">Select&nbsp;all</span>&nbsp;|&nbsp;<span class='menuitem' onclick=\"positionFilterSelectNone('" + prefix + "');\">Select&nbsp;none</span>&nbsp;]</div><div id='" + prefix + "PositionListHost'>";
      for (i = 0; i < staff_filter_positions.length; i++) {
         list += "<input type='hidden' id='" + prefix + "PositionID_" + cnt + "' value='" + staff_filter_positions[i].id + "' /><input type='hidden' id='" + prefix + "PositionFilterOrig_" + cnt + "' name='" + prefix + "PositionFilterOrig_" + cnt + "' value='false' /><input type='checkbox' id='" + prefix + "PositionFilter_" + cnt + "' onclick=\"document.getElementById('" + prefix + "StaffListValid').value = 0;\" /><label for='" + prefix + "PositionFilter_" + cnt + "'>" + staff_filter_positions[i].name() + "</label><br />";
         cnt++;
      }
      list += "</div><input type='hidden' id='" + prefix + "StaffListValid' value='0' /><input type='hidden' id='" + prefix + "StaffListNum' value='" + cnt + "' />";
      list += "<div class='h2'>Staff</div><div class='small_note'>[&nbsp;<span class='menuitem' onclick=\"staffFilterSelectAll('" + prefix + "');\">Select&nbsp;all</span>&nbsp;|&nbsp;<span class='menuitem' onclick=\"staffFilterSelectNone('" + prefix + "');\">Select&nbsp;none</span>&nbsp;|&nbsp;<span class='menuitem'  onclick=\"loadStaffFilterStaff('" + prefix + "', '" + loc_sel + "')\">Refresh&nbsp;list</span>&nbsp;]</div><div id='" + prefix + "StaffFilterStaffHost'>&nbsp;</div><span id='" + prefix + "StaffFilterStaffIndicator'></span>";
      list += "</td></tr><tr><td class='button' width='50%' onclick=\"hideStaffFilter('" + prefix + "', 'apply', " + (callback_apply == null ? "null" : "'" + callback_apply + "'") + ")\">Apply</td><td class='button' width='50%' onclick=\"hideStaffFilter('" + prefix + "', 'cancel', " + (callback_cancel == null ? "null" : "'" + callback_cancel + "'") + ")\">Cancel</td></tr></table>";
      staffilter_host.innerHTML = list;
      loadStaffFilterStaff(prefix, loc_sel);
   }
}



function loadStaffFilterStaff(prefix, loc_sel) {
   startIndicator(prefix + "StaffFilterStaffIndicator", "Loading", prefix + "StaffFilterStaffHost");
   var loc_id = document.getElementById(loc_sel).value;
   var cmd = "cmd=cmdLoadStaffFilter&sid=" + document.getElementById('SessionID').value + "&loc_id=" + loc_id + "&prefix=" + prefix;
   load(ajaxStaffFilterStaffLoad = GetXmlHttpObject(), engine_locations_process, cmd, updateStaffFilterStaff);
}


function updateStaffFilterStaff() {
   if (ajaxStaffFilterStaffLoad.readyState == 4 || ajaxStaffFilterStaffLoad.readyState == "complete") {
      staff_filter_employees = new Array();


      var xml_doc = createXmlDoc(ajaxStaffFilterStaffLoad.responseText);

      var prefixes = xml_doc.getElementsByTagName("prefix");
      var prefix = prefixes[0].childNodes[0].nodeValue;

      stopIndicator(prefix + "StaffFilterStaffIndicator");
      var emps = xml_doc.getElementsByTagName("employee");

      var i, cnt = 0;

      var sl = "";

      for (i = 0; i < emps.length; i++) {
 
         var pos_id = findTagByName(emps[i], "pos").childNodes[0].nodeValue;

         var j = 0;
         var posid, found = false;
         while ( (posid = document.getElementById(prefix + "PositionID_" + j)) != null && !found ) {
            if (posid.value * 1 == pos_id * 1) found = true;
            j++;
         }

         if (found && document.getElementById(prefix + "PositionFilter_" + (j - 1)).checked) {
            var id = getElemAttributeValue(emps[i], "id");
            var name = findTagByName(emps[i], "name").childNodes[0] ? findTagByName(emps[i], "name").childNodes[0].nodeValue : "";
            var user_id = findTagByName(emps[i], "user_id") ? findTagByName(emps[i], "user_id").childNodes[0].nodeValue : "";
            var username = findTagByName(emps[i], "username") ? findTagByName(emps[i], "username").childNodes[0].nodeValue : "";
            staff_filter_employees[staff_filter_employees.length] = new Employee(id, pos_id, name, user_id, username);
            sl += "<input type='hidden' id='" + prefix + "StaffID_" + cnt + "' value='" + id + "' /><input type='checkbox' id='" + prefix + "StaffFilter_" + cnt + "' /><label for='" + prefix + "StaffFilter_" + cnt + "'>" + name + " (" + getPosition(pos_id, staff_filter_positions).name() + ")</label><br />";
            cnt++;
         }

      }
      var stafflist_host = document.getElementById(prefix + 'StaffFilterStaffHost');
      stafflist_host.innerHTML = sl;

      if (cnt > 8) {
         var h = document.getElementById(prefix + "StaffFilter_0").offsetHeight * 6;
         stafflist_host.style.height = h + "px";
         stafflist_host.style.overflow = "auto";
      } else {
         stafflist_host.style.height = "";
         stafflist_host.style.overflow = "";
      }

      document.getElementById(prefix + 'StaffListValid').value = 1;

      var host = document.getElementById(prefix + 'StaffFilter');
      showBackground(prefix + 'StaffFilter', host);

   }
}



function positionFilterSelectAll(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "PositionFilter_" + i++)) != null ) chk.checked = true;
}

function positionFilterSelectNone(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "PositionFilter_" + i++)) != null ) chk.checked = false;
}



function staffFilterSelectAll(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "StaffFilter_" + i++)) != null ) chk.checked = true;
}

function staffFilterSelectNone(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "StaffFilter_" + i++)) != null ) chk.checked = false;
}



function getStaffIDList(prefix) {
   var i = 0;
   var chk;
   var staff_ids = new Array();
   while ( (chk = document.getElementById(prefix + "StaffFilter_" + i)) != null ) {
      if (chk.checked) {
         staff_ids[staff_ids.length] = document.getElementById(prefix + 'StaffID_' + i).value;
      }
      i++;
   }
   return staff_ids;
}




/***********************************/





function loadedStaffEMailTemplates() {
   if (ajaxLoadEMailTemplates.readyState == 4 || ajaxLoadEMailTemplates.readyState == "complete") {
      stopIndicator("StaffTemplateIndicator");

      var sel_category = 0, sel_template = document.getElementById('EMailNewEmployee').value;

      var staff_email_categories = new Array();

      parseEMailTemplates(ajaxLoadEMailTemplates.responseText, staff_email_categories);

      printEMailTemplateSelector("Staff", staff_email_categories, "", sel_category, sel_template, true);
   }
}


function saveStaffSettings() {
   var settings = new Array();

   var pc = document.getElementById("PasswordCurrent").value;
   var pw = document.getElementById("PasswordNew").value;
   var pwa = document.getElementById("PasswordNewAgain").value;

   var set_pw = false;
   var s = checkPasswordStrength(pw);
   if ((pw.length > 0 || pwa.length > 0) && s > 0) {
      if (checkPasswordMatch(pw, pwa)) {
         set_pw = true;
      } else {
         alert("Entered and repeated passwords do not match.\nPlease type in the same password into both fields!");
         return;
      }
   } else if (pc.length == 0) {
      alert("Please enter and confirm a password for the new employee!");
      return;
   }

   settings[0] = "email_NewEmployee=" + document.getElementById('StaffTemplateSelector').value + "|New employee Welcome e-mail";
   if (set_pw) settings[1] = "staff_newemployee_password=" + pw;

   saveSystemSettings(settings, false, "StaffSettingsIndicator");
}



/***********************************/






function createNewEmployeeUserRightRule() {
   var host = document.getElementById('EmployeeUserRightHost');

   var num = document.getElementById('EmployeeUserRightNumRules').value * 1;

   var div = document.createElement("div");
   div.setAttribute("id", "EmployeeUserRightRule_" + num);
   var t = "<table class='panel'><tr><td valign='top'>" + createPositionSelector(positions_rights, "EmployeePosUserRight_" + num, "checkUserRightPosition");
   t += "</td><td valign='top'>";
   var i = 0;
   var descr;
   while ( (descr = document.getElementById('EmployeeUserRightDescr_' + i)) != null ) {
      t += "<input type='hidden' id='EmployeeRightID_" + num + "_" + i + "' value='" + document.getElementById('EmployeeUserRightID_' + i).value + "' /><input type='checkbox' id='EmployeeUserRight_" + num + "_" + i + "' /><label for='EmployeeUserRight_" + num + "_" + i + "'>" + descr.value + "</label><br />";
      i++;
   }
   t += "</td><td class='item' valign='top'>[&nbsp;<span class='menuitem' onclick=\"deleteNewEmployeeUserRightRule(" + num + ")\">Delete this rule</span>&nbsp;]</td>";
   t += "</tr></table>";
   div.innerHTML = t;

   var save_host = document.getElementById('EmployeeUserRightSaveRules');
   if (save_host) {
      host.insertBefore(div, save_host);
   } else {
      host.appendChild(div);
      host.innerHTML += "<div id='EmployeeUserRightSaveRules'><p><input type='button' class='button' value='Save' onclick=\"saveNewEmployeeUserRightRules();\" /><span id='EmployeeUserRightSaveRulesIndicator'></span></p></div>";
      setButtonVisualStuff();
   }

   document.getElementById('EmployeeUserRightNumRules').value = num + 1;

   return num;
}



function checkUserRightPosition(selector, no_show_alert) {
   if (no_show_alert == null) no_show_alert = false;
   var pos_id = selector.value;

   var num = document.getElementById('EmployeeUserRightNumRules').value * 1;

   var found = false;
   var i;
   var sel = null;
   for (i = 0; i < num && !found; i++) {
      if (document.getElementById('EmployeeUserRightRule_' + i)) {
         sel = document.getElementById('EmployeePosUserRight_' + i);
         if (sel.id != selector.id) {
            var pos = sel.value;
            if (pos == pos_id) found = true;
         }
      }
   }

   if (found) {
      if (!no_show_alert) alert("There is already a rule for position " + sel.options[sel.selectedIndex].text);
      return false;
   }

   return true;
}



function deleteNewEmployeeUserRightRule(idx) {
   if (document.getElementById('EmployeeUserRightRule_' + idx) && confirm("Do you really want to delete this rule?")) {
      j = 0;
      var chk;
      while ( (chk = document.getElementById('EmployeeUserRight_' + idx + '_' + j)) != null ) {
         chk.checked = false;
         j++;
      }
      saveNewEmployeeUserRightRules(idx);

      document.getElementById('EmployeeUserRightHost').removeChild(document.getElementById('EmployeeUserRightRule_' + idx));
      var num = document.getElementById('EmployeeUserRightNumRules').value * 1;
      var i;
      var found = false;
      for (i = 0; i < num && !found; i++) {
         if (document.getElementById('EmployeeUserRightRule_' + i)) found = true;
      }
      if (!found) {
         document.getElementById('EmployeeUserRightHost').removeChild(document.getElementById('EmployeeUserRightSaveRules'));
      }
   }
}



function saveNewEmployeeUserRightRules() {
   var cmd = "cmd=cmdSavePositionRights&sid=" + document.getElementById('SessionID').value;
   var num = document.getElementById('EmployeeUserRightNumRules').value * 1;
   var i, j, cnt = 0;
   for (i = 0; i < num; i++) {
      if (document.getElementById('EmployeeUserRightRule_' + i)) {
         cmd += "&pos_id_" + cnt + "=" + document.getElementById('EmployeePosUserRight_' + i).value;
         j = 0;
         var chk;
         var rights = new Array();
         while ( (chk = document.getElementById('EmployeeUserRight_' + i + '_' + j)) != null ) {
            if (chk.checked) {
               rights[rights.length] = document.getElementById('EmployeeRightID_' + i + '_' + j).value;
            }
            j++;
         }
         cmd += "&rights_" + cnt + "=" + rights.join(",");
         cnt++;
      }
   }
   startIndicator("EmployeeUserRightSaveRulesIndicator", "Saving");
   load(ajaxSavePositionRights = GetXmlHttpObject(), engine_locations_process, cmd, savedNewEmployeeUserRightRules);
}


function savedNewEmployeeUserRightRules() {
   if (ajaxSavePositionRights.readyState == 4 || ajaxSavePositionRights.readyState == "complete") {
      stopIndicator("EmployeeUserRightSaveRulesIndicator");
   }
}




function loadNewEmployeeUserRightRules() {
   var num = document.getElementById('EmployeeUserRightNumRules').value * 1;
   var i;
   for (i = 0; i <= num; i++) {
      deletePositionSelector("EmployeePosUserRight_" + num);
   }
   document.getElementById('EmployeeUserRightNumRules').value = 0;
   startIndicator("EmployeeUserRightLoadRulesIndicator", "Loading positions");
   var cmd = "cmd=cmdLoadPositions&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&loc_id=" + document.getElementById('PosRights_LocationList').value;
   load(ajaxPosLoadRights = GetXmlHttpObject(), engine_locations_process, cmd, loadedNewEmployeeUserRightPositions);
}


function loadedNewEmployeeUserRightPositions() {
   if (ajaxPosLoadRights.readyState == 4 || ajaxPosLoadRights.readyState == "complete") {
      startIndicator("EmployeeUserRightLoadRulesIndicator", "Loading rules");

      var xml_doc = createXmlDoc(ajaxPosLoadRights.responseText);

      var positions_elem = xml_doc.getElementsByTagName("positions");

      positions_rights = new Array();
      parsePositions(positions_elem, positions_rights);

      var cmd = "cmd=cmdLoadPositionRights&sid=" + document.getElementById('SessionID').value + "&loc_id=" + document.getElementById('PosRights_LocationList').value;
      load(ajaxLoadPositionRights = GetXmlHttpObject(), engine_locations_process, cmd, loadedNewEmployeeUserRightRules);
   }
}


function loadedNewEmployeeUserRightRules() {
   if (ajaxLoadPositionRights.readyState == 4 || ajaxLoadPositionRights.readyState == "complete") {
      stopIndicator("EmployeeUserRightLoadRulesIndicator");
      document.getElementById('EmployeeUserRightHost').innerHTML = "";
      var res = ajaxLoadPositionRights.responseText;
      var i = 0, j;
      var pos_id;
      while ( (pos_id = getProperty("Pos_" + i, res)) != "") {
         var id = createNewEmployeeUserRightRule();
         document.getElementById('EmployeePosUserRight_' + id).value = pos_id;
         var rights = getProperty("Rights_" + i, res).split(",");
         for (j = 0; j < rights.length; j++) {
            var k = 0;
            var right_id;
            while ( (right_id = document.getElementById('EmployeeUserRightID_' + k)) != null ) {
               if (right_id.value == rights[j]) {
                  document.getElementById('EmployeeUserRight_' + id + '_' + k).checked = true;
               }
               k++;
            }
         }
         i++;
      }
   }
}
