var engine_core_process = "webcpms/proc_core.php";
var ajaxLoginUser,
    ajaxSaveSystemSettings,
    ajaxLoadStaticPage = new Array(),
    ajaxSaveStaticPage = new Array(),
    ajaxChangePassword,
    ajaxCreateLoadUser,
    ajaxDeleteUser,
    ajaxModifyUser,
    ajaxSetUserData,
    ajaxUserHint,
    ajaxListDir,
//    ajaxLoadFileList = new Array(),
    ajaxLoadFileList,
    ajaxGetFileProperties,
    ajaxLoadModuleInfo,
//    ajaxLoadService,
    ajaxSaveService,
//    ajaxLoadCompanyType,
    ajaxSaveCompanyType;

var data_types = new Array();



function Person(id, username, firstname, lastname, phone, email) {
   this.id = id;
   this.username = username == null ? "" : username;
   this.firstname = firstname == null ? "" : firstname;
   this.lastname = lastname == null ? "" : lastname;
   this.phone = phone == null ? "" : phone;
   this.email = email == null ? "" : email;

   this.getName = function (formatting) {
      return formatName(this.firstname, this.lastname, formatting);
   }

   this.toString = function () {
      return this.id + " [" + this.firstname + "," + this.lastname + "," + this.phone + "," + this.email + "]";
   }
}


function parsePersonXML(persons, persons_arr, no_force) {
   if (persons_arr == null) persons_arr = new Array();
   var j;
   for (j = 0; j < persons.length; j++) {

      var persons_j = sortElem(persons[j]);

      var user_id = getElemAttributeValue(persons[j], "id");
      if (no_force == true && user_id == 0) continue;
      var firstname = getTagByName(persons_j, "firstname");
      var lastname = getTagByName(persons_j, "lastname");
      var phone = getTagByName(persons_j, "phone");
      var email = getTagByName(persons_j, "email");
      var username = getTagByName(persons_j, "username");

      persons_arr[persons_arr.length] = new Person(user_id, username, firstname, lastname, phone, email);
   }
   return persons_arr;
}



function loginUser() {
   if (getCookie("SessionID").length > 0) {
      return;
   }
   var cmd = "cmd=cmdLoginUser&UserName=" + document.getElementById('UserName').value + "&Password=" + document.getElementById('Password').value;
   toggle('LoginUser', false);
   toggle('LoginUserError', false);
   toggle('LoginUserIndicator', true);
   startIndicator("LoginUserIndicator", "Logging in");
   load(ajaxLoginUser = GetXmlHttpObject(), engine_core_process, cmd, updateLoginUser);
}


function updateLoginUser() {
   if (ajaxLoginUser.readyState == 4 || ajaxLoginUser.readyState == "complete") {
      var res = ajaxLoginUser.responseText;
      if (getProperty("Res", res) == "OK") {
         setCookie("SessionID", getProperty("sid", res));
         if (document.getElementById('page').value == "logout") {
            loadPage(getWebAddress() + "/" + getPageBase());
         } else {
            window.location.reload();
         }
      } else {
         var msg = getProperty("Msg", res);
         toggle('LoginUser', true);
         toggle('LoginUserIndicator', false);
         toggle('LoginUserError', true);
         document.getElementById('LoginUserError').innerHTML = msg;
      }
   }
}





function saveSystemSettings(settings_arr, reload, indicator, global) {
   var cmd = "cmd=cmdSaveSystemSettings&sid=" + document.getElementById('SessionID').value + "&reload=" + (reload == null ? "false" : (reload ? "true" : "false")) + (indicator == null ? "" : "&indicator=" + indicator) + (global ? "&global=true" : "");

   cmd += "&stg_" + settings_arr.join("&stg_");

   startIndicator(indicator, "Saving");
   load(ajaxSaveSystemSettings = GetXmlHttpObject(), engine_core_process, cmd, systemSettingsSaved);
}


function systemSettingsSaved() {
   if (ajaxSaveSystemSettings.readyState == 4 || ajaxSaveSystemSettings.readyState == "complete") {
      var res = ajaxSaveSystemSettings.responseText;
      var indicator = getProperty("Indicator", res);
      var info = document.getElementById(indicator);
      if (getProperty("Res", res) == "OK") {
         if (getProperty("Reload", res) == "true") {
            location.reload();
         } else {
            if (indicator != "") stopIndicator(indicator);
            if (info) {
               info.innerHTML = "Saved";
               info.style.color = "green";
               window.setTimeout("fadeObject('" + indicator + "', -1);", 5000);
            }
         }
      } else {
         if (indicator != "") stopIndicator(indicator);
         if (!info) {
            return;
         } else {
            info.innerHTML = "Not saved";
            info.style.color = "red";
         }
      }
   }
}


function saveOptimizerCode(name, page, type, conversion_page) {
   var code = document.getElementById('OptimizerCode' + name + '_' + type).value;
   var cmd = "cmd=cmdSaveOptimizerCode&sid=" + document.getElementById('SessionID').value + "&name=" + name + "&lang=" + document.getElementById('lang').value + "&page=" + page + "&type=" + type + "&cp=" + (conversion_page == null ? "" : conversion_page) + "&code=" + encodeURIComponent(code);
   startIndicator("Save" + name + "OptimizerCodeIndicator_" + type, "Saving");
   load(ajaxSaveOptimizerCode = GetXmlHttpObject(), engine_core_process, cmd, optimizerCodeSaved);
}

function optimizerCodeSaved() {
   if (ajaxSaveOptimizerCode.readyState == 4 || ajaxSaveOptimizerCode.readyState == "complete") {
      var res = ajaxSaveOptimizerCode.responseText;
      stopIndicator("Save" + getProperty("Name", res) + "OptimizerCodeIndicator_" + getProperty("Type", res), "Saving");
   }
}



function evaluateParamCmd(prefix, param, cmd, loadparam_arr) {
   var res = null;

      if (param.indexOf("loadparam") == 0) {
         var lp = "loadparam";
         var param_id = param.substr(lp.length);
         if (loadparam_arr) {
            res = loadparam_arr[param_id - 1];
         }
      } else {
//         if (cmd == "inc") {
//            res = document.getElementById(prefix + "_" + param).value * 1 + 1;
//         }
      }

   return res;
}



function evaluateVariables(text, prefix, loadparam_arr, errors, delete_unevaluated) {

   var i, chr;
   var inside = false, inside_param = false; inside_param_cmd = false;
   var variable = "", param = "", param_cmd = "";
   var res = "";
   if (delete_unevaluated == null) delete_unevaluated = false;

   for (i = 0; i < text.length; i++) {

      chr = text.charAt(i);

      if (chr == "%") {
         if (i < text.length - 1) {
            var c = text.charAt(i + 1);
            if (c == "%") {
               res += c;
               i++;
               continue;
            }
         }
         inside = !inside;

         if (!inside) {
            var s = variable.indexOf(" "), r = variable.indexOf("\r"), n = variable.indexOf("\n"), t = variable.indexOf("\t"), lt = variable.indexOf("<");
            if (s == -1 && r == -1 && n == -1 && t == -1 && lt == -1) {
               if (param.length > 0) {
                  var pval = evaluateParamCmd(prefix, param, param_cmd, loadparam_arr);
                  if (document.getElementById(prefix + variable + "_" + pval)) {
                     res += decodeURIComponent(document.getElementById(prefix + variable + "_" + pval).value);
                  } else {
                     var v = "%" + variable + "_" + pval + "%";
                     if (!delete_unevaluated) res += v;
                     if (errors) errors[errors.length] = v;
                  }
               } else {
                  if (document.getElementById(prefix + variable)) {
                     res += decodeURIComponent(document.getElementById(prefix + variable).value);
                  } else {
                     var v = "%" + variable + "%";
                     if (!delete_unevaluated) res += v;
                     if (errors) errors[errors.length] = v;
                  }
               }
            } else {
               res += "%" + variable + "%";
            }
            variable = "";
            param = "";
            inside_param = false;
            inside_param_cmd = false;
         } else {
            continue;
         }
      } else if (!inside) {
         res += chr;
      }

      if (inside) {

         if (chr == "?") {
            inside_param = true;
            continue;
         } else if (inside_param) {
            if (chr == ":") {
               inside_param_cmd = true;
               continue;
            }
         }

         if (inside_param) {
            if (inside_param_cmd) {
               param_cmd += chr;
            } else {
               param += chr;
            }
         } else {
            variable += chr;
         }

      }

   }

   return res;

}



function loadStaticPage(page, editor, indicator, prefix, loadparams) {
   startIndicator(indicator, "Loading");
   var lp = "";
   if (loadparams != null) {
      var i;
      for (i = 0; i < loadparams.length; i++) {
         lp += "&loadparam_" + (i * 1 + 1) + "=" + loadparams[i];
      }
   }
   var cmd = "cmd=cmdLoadStaticPage&sid=" + document.getElementById('SessionID').value + "&page=" + page + "&indicator=" + indicator + "&editor=" + editor + (prefix == null ? "" : "&prefix=" + prefix) + lp;
   load(GetXmlHttpObject(ajaxLoadStaticPage, editor), engine_core_process, cmd, loadedStaticPage);
}


function loadedStaticPage() {
   var i, j, k;
   var prefix = null, loadparam = null;
   var loadparam_arr = new Array();

   var staticpage = getXmlHttpResponse(ajaxLoadStaticPage, "staticpage", "editor");

   if (staticpage) {

      var editor = findTagByName(staticpage, "editor");

      var contents = staticpage.getElementsByTagName("content");
      prefix = getElemAttributeValue(staticpage, "prefix");
      var loadparams = staticpage.getElementsByTagName("loadparam");
      for (i = 0; i < loadparams.length; i++) {
         loadparam_arr[loadparam_arr.length] = loadparams[i].childNodes[0].nodeValue;
      }
      for (j = 0; j < contents.length; j++) {
         if (contents[j].childNodes[0] && editor.childNodes[0]) {
            var lang = getElemAttributeValue(contents[j], "lang");
            var pages = contents[j].getElementsByTagName("page");
            var titles = contents[j].getElementsByTagName("pagetitle");
            var urls = contents[j].getElementsByTagName("pageurl");
            var descrs = contents[j].getElementsByTagName("pagedescr");
            var tags = contents[j].getElementsByTagName("tags");
            var e = eval("wre" + editor.childNodes[0].nodeValue);
            if (e.style & WRES_STANDALONE) {
               var page_arr = new Array();
               for (k = 0; k < pages.length; k++) {
                  var p = decodeURIComponent(pages[k].childNodes[0].nodeValue);
                  if (prefix) {
                     p = evaluateVariables(p, prefix, loadparam_arr);
                  }
                  page_arr[page_arr.length] = p;
               }
               var title_arr = new Array();
               for (k = 0; k < titles.length; k++) {
                  title_arr[title_arr.length] = titles[k].childNodes[0].nodeValue;
               }
               var url_arr = new Array();
               for (k = 0; k < urls.length; k++) {
                  url_arr[url_arr.length] = urls[k].childNodes[0].nodeValue;
               }
               var descr_arr = new Array();
               for (k = 0; k < descrs.length; k++) {
                  descr_arr[descr_arr.length] = descrs[k].childNodes[0].nodeValue;
               }
               var tags_arr = new Array();
               for (k = 0; k < tags.length; k++) {
                  tags_arr[tags_arr.length] = tags[k].childNodes[0].nodeValue;
               }
               e.setDocument(lang, page_arr, title_arr, url_arr, descr_arr, tags_arr);
               if (document.getElementById('lang').value == lang) {
                  e.setText(page_arr[0]);
               }
            } else {
               var page = decodeURIComponent(pages[0].childNodes[0].nodeValue);
               if (prefix) {
                  page = evaluateVariables(page, prefix, loadparam_arr);
               }
               e.setDocument(lang, page);
               if (document.getElementById('lang').value == lang) {
                  e.setText(page);
               }
            }
         }
      }
      var indicator = findTagByName(staticpage, "indicator");
      if (indicator.childNodes[0]) stopIndicator(indicator.childNodes[0].nodeValue);
   }

   flushAjaxResponses(ajaxLoadStaticPage);
}

function saveStaticPage(page, editor, indicator) {
   toggle(editor + 'Info', false);
   var havedescr = new Array();
   var title = "", url = "", descr = "", tags = "";
   var content = "";
   var hascontent = false;
   var i, j;
   for (i = 0; i < languages.length; i++) {
      var e = eval("wre" + editor);
      var pages = e.getText(false, languages[i].descr);
      if (pages instanceof Array) {
         for (j = 0; j < pages.length; j++) {
            hascontent |= pages[j] == "" || pages[j] == "<br />" ? false : true;
            content += "&content_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(pages[j]);
         }
         var titles = e.getTitle(languages[i].descr);
         for (j = 0; j < titles.length; j++) {
            title += "&title_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(titles[j]);
         }
         var urls = e.getURL(languages[i].descr);
         for (j = 0; j < urls.length; j++) {
            url += "&url_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(urls[j]);
         }
         var descrs = e.getDescr(languages[i].descr);
         for (j = 0; j < descrs.length; j++) {
            descr += "&descr_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(descrs[j]);
         }
         var tag_list = e.getTags(languages[i].descr);
         for (j = 0; j < tag_list.length; j++) {
            tags += "&tags_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(tag_list[j]);
         }
      } else {
         hascontent |= pages == "" || pages == "<br />" ? false : true;
         content += "&content_" + languages[i].descr + "=" + encodeURIComponent(pages);
      }
   }
   if (!hascontent) {
      if (!confirm("Page is empty for all languages.\nContinue?")) {
         return;
      }
   }
   startIndicator(indicator, "Saving");
   var cmd = "cmd=cmdSaveStaticPage&sid=" + document.getElementById('SessionID').value + "&page=" + page + "&indicator=" + indicator + "&editor=" + editor + content + title + url + descr + tags;
   load(GetXmlHttpObject(ajaxSaveStaticPage, editor), engine_core_process, cmd, savedStaticPage);
}

function savedStaticPage() {
   var staticpage = getXmlHttpResponse(ajaxSaveStaticPage, "staticpage", "editor");

   if (staticpage) {
      var res = getElemAttributeValue(staticpage, "res");
      var editor = findTagByName(staticpage, "editor").childNodes[0].nodeValue;
      toggle(editor + 'Info', true, "inline");
      var info = document.getElementById(editor + 'Info');
      if (res == "Err") {
         info.innerHTML = "Not saved";
         info.style.color = "red";
      } else {
         info.innerHTML = "Saved";
         info.style.color = "green";
         window.setTimeout("fadeObject('" + editor + "Info', -1);", 5000);
      }
      var indicator = findTagByName(staticpage, "indicator");
      if (indicator) stopIndicator(indicator.childNodes[0].nodeValue);
   }

   flushAjaxResponses(ajaxSaveStaticPage);
}



function saveMultipageDisplayRule(name) {
   var rule = "all";
   if (document.getElementById(name + 'MultipageDisplayLinks').checked) {
      rule = "links";
      if (document.getElementById(name + 'MultipageDisplayLinksNav').checked) {
         rule += ",nav";
      }
      if (document.getElementById(name + 'MultipageDisplayLinksTOC').checked) {
         rule += ",toc";
      }
   } else if (document.getElementById(name + 'MultipageDisplaySlideshow').checked) {
      rule = "slideshow";
   }
   var s = new Array();
   s[0] = name + "_DisplayRule=" + encodeURIComponent(rule);
   saveSystemSettings(s, false, name + "DisplayIndicator");
}



function changePassword(sessionID, reg_nextstep) {
   var pwCur = document.getElementById('PasswordCurrent').value;
   var pwNew = document.getElementById('PasswordNew').value;
   var pwAgain = document.getElementById('PasswordNewAgain').value;

   if (pwCur == "") {
      alert("Please enter your current password into the 'Current password' field.");
      return;
   } else if (pwNew == "" || pwAgain == "") {
      alert("Please enter the same new password into both fields.");
      return;
   } else if (pwNew != pwAgain) {
      alert("Passwords do not match.\nPlease enter the same password into both fields.");
      return;
   }

   var cmd = "cmd=cmdChangePassword&sessionID=" + sessionID;
   cmd += "&PasswordCurrent=" + encodeURI(pwCur);
   cmd += "&PasswordNew=" + encodeURI(pwNew);
   cmd += "&PasswordNewAgain=" + encodeURI(pwAgain);
   if (reg_nextstep) {
      cmd += "&RegNextStep=" + encodeURIComponent(reg_nextstep);
   }
   startIndicator("ChangePasswordIndicator", "Updating password");
   load(ajaxChangePassword = GetXmlHttpObject(), engine_core_process, cmd, reg_nextstep ? changedRegPassword : changedPassword);
}




function changedPassword() {
   if (ajaxChangePassword.readyState == 4 || ajaxChangePassword.readyState == "complete") {
      stopIndicator("ChangePasswordIndicator");
      document.getElementById("ChPwMsg").innerHTML = ajaxChangePassword.responseText;
   }
}




function changedRegPassword() {
   if (ajaxChangePassword.readyState == 4 || ajaxChangePassword.readyState == "complete") {
      loadPage(decodeURIComponent(ajaxChangePassword.responseText));
   }
}





var USER_CREATE   = 1;
var USER_LOAD     = 2;
var USER_RIGHTS   = 4;


function createLoadUser(newuser, prefix) {
   var name = document.getElementById(prefix + "UserName").value;
   if (name == "") return;
   var create = (newuser & USER_CREATE) > 0 ? true : false;
   startIndicator("CreateLoadUserIndicator", create ? "Creating user" : "Loading user");
   var cmd = "cmd=" + (create ? "cmdCreateUser" : "cmdLoadUser") + "&sid=" + document.getElementById('SessionID').value;
   cmd += "&username=" + name + "&prefix=" + prefix + "&rights=" + (newuser & USER_RIGHTS ? "true" : "false");
   load(ajaxCreateLoadUser = GetXmlHttpObject(), engine_core_process, cmd, create ? createdUser : loadedUser);
}


function createdUser() {
   if (ajaxCreateLoadUser.readyState == 4 || ajaxCreateLoadUser.readyState == "complete") {
      stopIndicator("CreateLoadUserIndicator");
      var err = ajaxCreateLoadUser.responseText.split("|");
      if (err[0] == "ERROR") {
         alert("User " + err[1] + " already exists. Specify another user name!");
      } else {
         createLoadUser(USER_LOAD | USER_RIGHTS, ajaxCreateLoadUser.responseText);
      }
   }
}



function loadedUser() {
   if (ajaxCreateLoadUser.readyState == 4 || ajaxCreateLoadUser.readyState == "complete") {
      stopIndicator("CreateLoadUserIndicator");
      var err = ajaxCreateLoadUser.responseText.split("|");
      if (err[0] == "ERROR") {
         alert("User " + err[1] + " does not exist");
         if (document.getElementById(err[2] + 'EMail')) {
            if (validateEMail(err[1])) {
               document.getElementById(err[2] + 'EMail').value = err[1];
            }
         }
      } else {
         var list = "";
         var i;
         var xml_doc = createXmlDoc(ajaxCreateLoadUser.responseText);
         var users = xml_doc.getElementsByTagName("user");
         for (i = 0; i < users.length; i++) {
            var id = getElemAttributeValue(users[i], "id");
            var prefix = getElemAttributeValue(users[i], "prefix");
            var name = findTagByName(users[i], "name").childNodes[0].nodeValue;
            var firstname = findTagByName(users[i], "firstname").childNodes[0].nodeValue;
            var lastname = findTagByName(users[i], "lastname").childNodes[0].nodeValue;
            var phone = findTagByName(users[i], "phone").childNodes[0] ? findTagByName(users[i], "phone").childNodes[0].nodeValue : "";
            var email = findTagByName(users[i], "email").childNodes[0] ? findTagByName(users[i], "email").childNodes[0].nodeValue : "";
            if (document.getElementById("ModifyUserName")) {
               document.getElementById("ModifyUserName").innerHTML = name;
            }
            setInputPersonal(prefix, firstname, lastname, phone, email, id);
            var address1 = findTagByName(users[i], "address1") ? findTagByName(users[i], "address1").childNodes[0].nodeValue : "";
            var address2 = findTagByName(users[i], "address2") ? findTagByName(users[i], "address2").childNodes[0].nodeValue : "";
            var city = findTagByName(users[i], "city") ? findTagByName(users[i], "city").childNodes[0].nodeValue : "";
            var state = findTagByName(users[i], "state").childNodes[0] ? findTagByName(users[i], "state").childNodes[0].nodeValue : "";
            var zip = findTagByName(users[i], "zip").childNodes[0] ? findTagByName(users[i], "zip").childNodes[0].nodeValue : "";
            setInputAddress(prefix, address1, address2, city, state, zip);
         }
         var userrights = xml_doc.getElementsByTagName("userright");
         if (userrights.length > 0) {
            for (i = 0; i < userrights.length; i++) {
               var assigned = getElemAttributeValue(userrights[i], "assigned") == "yes" ? true : false;
               var descr = findTagByName(userrights[i], "descr").childNodes[0].nodeValue;
               var shortname = findTagByName(userrights[i], "short").childNodes[0].nodeValue;
               list += "<input type='hidden' id='UserRight_" + i + "' name='UserRight_" + i + "' value='" + shortname + "' />\r\n<input type='checkbox' id='" + shortname + "' name='" + shortname + "'" + (assigned ? "checked=true" : "") + " /><label for='" + shortname + "'>" + descr + "</label><br />\r\n";
            }
            document.getElementById("NewPassword").value = "";
            document.getElementById("NewPasswordAgain").value = "";
            document.getElementById("UserRightList").innerHTML = "-";
            checkPasswordStrength(document.getElementById('NewPassword').value, 'ChangeNewPasswordStrength');
            checkPasswordMatch(document.getElementById('NewPassword').value, document.getElementById('NewPasswordAgain').value, 'CheckNewPasswordMatch', 'Passwords match', 'Passwords do not match');
            var host = document.getElementById("UserRightList");
            host.innerHTML = list;
            document.getElementById("NewPassword").focus();
         }
      }
   }
}



function deleteUser() {
   var name = document.getElementById("UserUserName").value;
   if (name == "") return;
   if (!confirm("Do you really want to delete user " + name + "?")) return;
   startIndicator("CreateLoadUserIndicator", "Deleting user");
   var cmd = "cmd=cmdDeleteUser&UserName=" + name + "&sid=" + document.getElementById('SessionID').value;
   load(ajaxDeleteUser = GetXmlHttpObject(), engine_core_process, cmd, deletedUser);
}


function deletedUser() {
   if (ajaxDeleteUser.readyState == 4 || ajaxDeleteUser.readyState == "complete") {
      stopIndicator("CreateLoadUserIndicator");
      if (ajaxDeleteUser.responseText == "ERROR") {
         alert("User " + document.getElementById("UserUserName").value + " does not exist");
      } else {
         var name = document.getElementById("UserUserName").value;
         document.getElementById("UserID").value = "";
         document.getElementById("UserUserName").value = "";
         document.getElementById("NewPassword").value = "";
         document.getElementById("NewPasswordAgain").value = "";
         document.getElementById("UserRightList").innerHTML = "-";
         checkPasswordStrength(document.getElementById('NewPassword').value, 'ChangeNewPasswordStrength');
         checkPasswordMatch(document.getElementById('NewPassword').value, document.getElementById('NewPasswordAgain').value, 'CheckNewPasswordMatch', 'Passwords match', 'Passwords do not match');
         alert("User " + name + " deleted");
      }
   }
}




function modifyUser() {
   var name = document.getElementById("UserUserName").value;
   if (name == "") return;
   startIndicator("ModifyUserIndicator", "Saving user");
   var cmd = "cmd=cmdModifyUser&UserName=" + name + "&sid=" + document.getElementById('SessionID').value;
   cmd += "&UserID=" + document.getElementById("UserID").value;
   cmd += "&NewPassword=" + document.getElementById("NewPassword").value;
   cmd += "&NewPasswordAgain=" + document.getElementById("NewPasswordAgain").value;
   var i = 0;
   while ( (userright = document.getElementById("UserRight_" + i)) != null ) {
      cmd += "&" + userright.value + "=" + (document.getElementById(userright.value).checked ? "on" : "");
      i++;
   }
   if (document.getElementById('SendUserInvitation').checked) {
      cmd += "&post_email=true";
   }
   load(ajaxModifyUser = GetXmlHttpObject(), engine_core_process, cmd, modifiedUser);
}


function modifiedUser() {
   if (ajaxModifyUser.readyState == 4 || ajaxModifyUser.readyState == "complete") {
      stopIndicator("ModifyUserIndicator");
      alert(ajaxModifyUser.responseText);
   }
}


var SPD_SET_ADDRESS     = 1;
var SPD_POST_EMAIL      = 2;
var SPD_CHECK_CAPTCHA   = 4;

function setPersonalData(prefix, indicator, reload, flags) {
   if (flags == null) flags = 0;
   var personal = validateInputPersonal(prefix);
   if (personal == null) {
      return;
   }
   var cmd = "cmd=cmdSetUserData&sid=" + document.getElementById('SessionID').value +
      "&id=" + personal[6] +
      "&firstname=" + personal[0] +
      "&lastname=" + personal[1] +
      "&phone_area=" + personal[2] +
      "&phone_first=" + personal[3] +
      "&phone_second=" + personal[4] +
      "&email=" + personal[5];
   if (flags & SPD_SET_ADDRESS) {
      var address = validateInputAddress(prefix);
      if (!address) return;
      cmd += "&address1=" + address[0] +
      "&address2=" + address[1] +
      "&city=" + address[2] +
      "&state=" + address[3] +
      "&zip=" + address[4] +
      "&set_address=true";
   }
   if (flags & SPD_POST_EMAIL) {
      cmd += "&post_email=true";
   }
   if (flags & SPD_CHECK_CAPTCHA) {
      cmd += "&captcha=" + document.getElementById(prefix + 'CaptchaCode').value;
   }

   cmd += "&prefix=" + prefix + "&indicator=" + (indicator? encodeURIComponent(indicator) : "") + "&reload=" + (reload ? (typeof(reload) == "string" ? encodeURIComponent(reload) : "true") : "false");
   startIndicator(indicator, "Saving user data");
   load(ajaxSetUserData = GetXmlHttpObject(), engine_core_process, cmd, personalDataSet);
}




function personalDataSet() {
   if (ajaxSetUserData.readyState == 4 || ajaxSetUserData.readyState == "complete") {
      stopIndicator(getProperty("Indicator", ajaxSetUserData.responseText));
      var res = getProperty("Res", ajaxSetUserData.responseText);
      var msg = getProperty("Msg", ajaxSetUserData.responseText);
      if ("OK" == res) {
         var reload = getProperty("Reload", ajaxSetUserData.responseText);
         if (reload == "true") {
            location.reload();
         } else if (reload.length > 0 && reload != "false") {
            location.href = decodeURIComponent(reload);
         }
      } else {
         if ("captcha" == msg) {
            reloadCaptcha(getProperty("Prefix", ajaxSetUserData.responseText));
            alert("An error has occured: the letter combination\nand the entered code do not match.\nPlease read the image carefully\nand enter the code into the check field.");
         } else if ("user_exists" == msg) {
            alert("A user already exists. Please specify another e-mail address\nor use your user name and password to log in");
         }
      }
   }
}



function checkUser(prefix) {
   document.getElementById(prefix + 'UserInfo').innerHTML = "";
   var username = document.getElementById(prefix + 'UserName').value;
   var pw = document.getElementById(prefix + 'Password').value;
   if (username == "") {
      alert("Please specify user name");
      return;
   }
   if (pw == "") {
      alert("Please specify password");
      return;
   }
   var cmd = "cmd=cmdCheckUser&UserName=" + username + "&Password=" + pw + "&prefix=" + prefix;
   startIndicator("CreateLoadUserIndicator", "Checking");
   load(ajaxCheckUser = GetXmlHttpObject(), engine_core_process, cmd, userChecked);
}



function userChecked() {
   if (ajaxCheckUser.readyState == 4 || ajaxCheckUser.readyState == "complete") {
      var res = ajaxCheckUser.responseText.split("|");
      if (res[0] == "ERROR") {
         document.getElementById(res[1] + 'UserInfo').innerHTML = "No such account";
         stopIndicator("CreateLoadUserIndicator");
         if (document.getElementById(res[1] + 'EMail') && document.getElementById(res[1] + 'UserName')) {
            document.getElementById(res[1] + 'EMail').value = document.getElementById(res[1] + 'UserName').value;
         }
      } else if (res[0] == "OK") {
         createLoadUser(USER_LOAD, res[1]);
      }
   }
}




function checkUserTyping(prefix, fixed, callback) {
   if (fixed == null) fixed = false;
   var user = safeFileName(document.getElementById(prefix + "UserName").value, "-+").toLowerCase();
   document.getElementById(prefix + "UserName").value = user;
   var prev_term = document.getElementById(prefix + "PrevTerm").value;
   if (user.length < 3 || user == prev_term) {
      document.getElementById(prefix + 'PrevNum').value = 1;
      hideUserHint(prefix, fixed);
      return;
   }
   var prev_num = document.getElementById(prefix + 'PrevNum').value * 1;
   if (prev_num > 0) {
      var cmd = "cmd=cmdLoadUserHint&sid=" + document.getElementById("SessionID").value + "&prefix=" + prefix + "&user=" + user + "&fixed=" + (fixed ? "true" : "false");
      startIndicator("CreateLoadUserIndicator", "Loading hint");
      load(ajaxUserHint = GetXmlHttpObject(), engine_core_process, cmd, showUserHint);
   }
}

function markUserHint(val, term) {
   var phone = val.replace(/-/g, "");
   var i;
   if (!isNaN(phone)) {
      var t = "";
      for (i = 0; i < term.length; i++) {
         var n = term.charAt(i);
         if (!isNaN(n) && n != " ") t += n;
      }
      var b = phone.indexOf(t);
      var e = b + t.length;
      if (b > -1) {
         var ws = new Array();
         i = 0;
         while (1) {
            var p = val.indexOf("-", i);
            if (p == -1) {
               break;
            }
            ws[ws.length] = p;
            i += p + 1;
         }
         var pn = "";
         for (i = 0; i < phone.length; i++) {
            var j = 0;
            while (j < ws.length && i != ws[j]) j++;
            if (j < ws.length) {
               pn += "-";
            }
            var c = phone.charAt(i);
            if (i >= b && i < e) {
               pn += "<b>" + c + "</b>";
            } else {
               pn += c;
            }
         }
         return pn;
      }
   }

   var lval = val.toLowerCase();
   var lterm = term.toLowerCase();

   var b = lval.indexOf(lterm);
   if (b > -1) {
      var e = b + lterm.length;
      return val.substr(0, b - 1) + "<b>" + val.substr(b, term.length) + "</b>" + val.substr(e);
   }
   return val;
}

function showUserHint(prefix) {
   if (ajaxUserHint.readyState == 4 || ajaxUserHint.readyState == "complete") {
      var res = ajaxUserHint.responseText;

      var prefix = getProperty("Prefix", res);

      var fixed = getProperty("Fixed", res) == "true" ? true : false;

      stopIndicator("CreateLoadUserIndicator");

      var num = getProperty("Num", res) * 1;
      document.getElementById(prefix + 'PrevNum').value = num;

      if (num == 0) {
         hideUserHint(prefix, fixed);
         return;
      }

      var host = document.getElementById(prefix + "UserHintHost");
      var input = document.getElementById(prefix + "UserName");

      var x = getElementLeft(input);
      var y = getElementTop(input);

      var term = getProperty("Term", res);
      document.getElementById(prefix + "PrevTerm").value = term;
      var b_term = "<b>" + term + "</b>";

      var t = "<input type='hidden' id='" + prefix + "UserHintNum' value='" + num + "' />";
      t += "<table><tr><td class='itemtitle'>Name</td><td class='itemtitle'>Phone</td><td class='itemtitle'>E-Mail</td>";
      var i;
      for (i = 0; i < num; i++) {
         var fname = markUserHint(getProperty("Firstname" + i, res), term);
         var lname = markUserHint(getProperty("Lastname" + i, res), term);
         var uname = getProperty("User" + i, res);
         var user = markUserHint(uname, term);
         var phone = markUserHint(getProperty("Phone" + i, res), term);
         var email = markUserHint(getProperty("EMail" + i, res), term);
         var status = getProperty("Status" + i, res);
         t += "<tr><td class='list_left' id='" + prefix + "Name" + i + "' onmouseover=\"userHintOver('" + prefix + "', " + i + ");\" onmouseout=\"userHintOut('" + prefix + "')\" onclick=\"document.getElementById('" + prefix + "UserName').value='" + uname + "';hideUserHint('" + prefix + "', " + (fixed ? "true" : "false") + ");createLoadUser(USER_LOAD, '" + prefix + "');\">" + formatName(fname, lname, NAMEFORMAT_FULL) + status + " (" + user + ")</td><td class='list_mid' id='" + prefix + "Phone" + i + "' onmouseover=\"userHintOver('" + prefix + "', " + i + ");\" onmouseout=\"userHintOut('" + prefix + "')\" onclick=\"document.getElementById('" + prefix + "UserName').value='" + uname + "';hideUserHint('" + prefix + "', " + (fixed ? "true" : "false") + ");createLoadUser(USER_LOAD, '" + prefix + "');\">" + phone + "</td><td class='list_right' id='" + prefix + "EMail" + i + "' onmouseover=\"userHintOver('" + prefix + "', " + i + ");\" onmouseout=\"userHintOut('" + prefix + "')\" onclick=\"document.getElementById('" + prefix + "UserName').value='" + uname + "';hideUserHint('" + prefix + "', " + (fixed ? "true" : "false") + ");createLoadUser(USER_LOAD, '" + prefix + "');\">" + email + "</td></tr>";
      }
      if (!fixed) {
         t += "</td></tr><tr><td class='button' colspan=3 onclick=\"hideUserHint('" + prefix + "', " + (fixed ? "true" : "false") + ");\">Close</td></tr>";
      }
      t += "</table>";

      host.innerHTML = t;

      if (fixed) {
         host.style.display = "block";
         host.style.height = "70px";
         host.style.overflow = "auto";
      } else {
         host.className = "popupwnd";
         host.style.position = "absolute";
         host.style.left = x + "px";
         host.style.top = (input.offsetHeight * 1 + y * 1) + "px";
         host.style.width = "auto";
         host.style.height = "auto";
         host.style.display = "block";
         host.style.fontSize = "8pt";
         host.style.textAlign = "center";

         showBackground(prefix, host);
      }
   }
}


function userHintOver(prefix, idx) {
   userHintOut(prefix);
   document.getElementById(prefix + "Name" + idx).className = "list_left_hover";
   document.getElementById(prefix + "Phone" + idx).className = "list_mid_hover";
   document.getElementById(prefix + "EMail" + idx).className = "list_right_hover";
}


function userHintOut(prefix) {
   var num = document.getElementById(prefix + "UserHintNum").value * 1;
   var i;
   for (i = 0; i < num; i++) {
      document.getElementById(prefix + "Name" + i).className = "list_left";
      document.getElementById(prefix + "Phone" + i).className = "list_mid";
      document.getElementById(prefix + "EMail" + i).className = "list_right";
   }
}


function hideUserHint(prefix, fixed) {
   var host = document.getElementById(prefix + "UserHintHost");
   host.innerHTML = "";
   if (fixed) {
      host.style.height = "0px";
   } else {
      host.style.display = "none";
      hideBackground(prefix);
   }
}




function listDir() {
   var dir = document.getElementById('FileManagerCurDir').value;
   var sortby = document.getElementById('FileManagerSortBy').value;
   var sortdir = document.getElementById('FileManagerSortDir').value;
   var cmd = "cmd=cmdListDir&dir=" + encodeURI(dir) + "&sortby=" + sortby + "&sortdir=" + sortdir;
   startIndicator("FileManagerIndicator", "Getting directory contents");
   load(ajaxListDir = GetXmlHttpObject(), engine_core_process, cmd, updateDir);
}

function updateDir() {
   if (ajaxListDir.readyState == 4 || ajaxListDir.readyState == "complete") {
      stopIndicator("FileManagerIndicator");
      var host = document.getElementById('FileListHost');
      host.innerHTML = ajaxListDir.responseText;
      host = document.getElementById('FileListCurDir');
      host.innerHTML = document.getElementById('FileManagerCurDir').value;
   }
}


function setSorting(sortby) {
   document.getElementById('FileManagerSortBy').value = sortby;
   var sortdir = document.getElementById('FileManagerSortDir').value;
   document.getElementById('FileManagerSortDir').value = sortdir == "asc" ? "desc" : "asc";
   listDir();
}

function setCurDir(newdir) {
   document.getElementById('FileManagerCurDir').value = newdir;
   listDir();
}

function fileMgrOver(td_id) {
   var num = td_id.substr(td_id.indexOf("_") + 1);
   document.getElementById('FileListChk_' + num).style.background = '#efefef';
   document.getElementById('FileListName_' + num).style.background = '#efefef';
   document.getElementById('FileListTime_' + num).style.background = '#efefef';
   document.getElementById('FileListSize_' + num).style.background = '#efefef';
}

function fileMgrOut(td_id) {
   var num = td_id.substr(td_id.indexOf("_") + 1);
   document.getElementById('FileListChk_' + num).style.background = 'white';
   document.getElementById('FileListName_' + num).style.background = 'white';
   document.getElementById('FileListTime_' + num).style.background = 'white';
   document.getElementById('FileListSize_' + num).style.background = 'white';
}



function loadFileList(name, callback, root_dir, filters) {
//   startIndicator((name + "Indicator", "Loading", "Host_" + name);
//   var lp = "";
//   if (loadparams != null) {
//      var i;
//      for (i = 0; i < loadparams.length; i++) {
//         lp += "&loadparam_" + (i * 1 + 1) + "=" + loadparams[i];
//      }
//   }
//   var cmd = "cmd=cmdLoadFileList&sid=" + document.getElementById('SessionID').value + "&root=" + encodeURIComponent(root_dir) + "&filters=" + filters + "&name=" + name + "&callback=" + callback;
//   ajaxLoadFileList[ajaxLoadFileList.length] = new Array(editor, null);
//   load(ajaxLoadFileList[ajaxLoadFileList.length - 1][1] = GetXmlHttpObject(), engine_core_process, cmd, loadedFileList);
   startIndicator(name + "FileListIndicator", "Loading", "Host_" + name);
   var cmd = "cmd=cmdLoadFileList&sid=" + document.getElementById('SessionID').value + "&root=" + encodeURIComponent(root_dir) + "&filters=" + filters + "&name=" + name + "&callback=" + callback;
   load(ajaxLoadFileList = GetXmlHttpObject(), engine_core_process, cmd, loadedFileList);
}



function loadedFileList() {
//   var n = 0;
//   var i, j, k;
//   var found = false;
//
//   while (n < ajaxLoadFileList.length) {
//      if (ajaxLoadFileList[n][1].readyState == 4 || ajaxLoadFileList[n][1].readyState == "complete") {
//         var xml_doc = createXmlDoc(ajaxLoadFileList[n][1].responseText);
//         staticpages = xml_doc.getElementsByTagName("staticpage");
//         editor = findTagByName(staticpages[0], "editor");
//         if (editor.childNodes[0].nodeValue == ajaxLoadFileList[n][0]) {
//            ajaxLoadFileList[n][0] = null;
//            found = true;
//            break;
//         }
//      }
//      n++;
//   }
//   if (found) {
//      var contents = staticpages[0].getElementsByTagName("content");
//      onpageloaded = getElemAttributeValue(staticpages[0], "onpageloaded");
//      var loadparams = staticpages[0].getElementsByTagName("loadparam");
//      for (i = 0; i < loadparams.length; i++) {
//         loadparam_arr[loadparam_arr.length] = loadparams[i].childNodes[0].nodeValue;
//      }
//      for (j = 0; j < contents.length; j++) {
//         var lang = getElemAttributeValue(contents[j], "lang");
//         var pages = contents[j].getElementsByTagName("page");
//         var titles = contents[j].getElementsByTagName("pagetitle");
//         var page_arr = new Array();
//         for (k = 0; k < pages.length; k++) {
//            var txt = pages[k].childNodes[0].nodeValue;
//            page_arr[page_arr.length] = txt;
//         }
//         var title_arr = new Array();
//         for (k = 0; k < titles.length; k++) {
//            title_arr[title_arr.length] = titles[k].childNodes[0].nodeValue;
//         }
//         if (contents[j].childNodes[0] && editor.childNodes[0]) {
//            if (onpageloaded != null) {
//               eval(onpageloaded + "(page_arr, loadparam_arr)");
//            }
//            var e = eval("wre" + editor.childNodes[0].nodeValue);
//            e.setDocument(lang, page_arr, title_arr);
//            if (document.getElementById('lang').value == lang) {
//               e.setText(page_arr[0]);
//            }
//         }
//      }
//      var indicator = findTagByName(staticpages[0], "indicator");
//      if (indicator.childNodes[0]) stopIndicator(indicator.childNodes[0].nodeValue);
//   }
//   n = 0;
//   var cnt = 0;
//   while (n < ajaxLoadStaticPage.length) {
//      if ((ajaxLoadStaticPage[n][1].readyState == 4 || ajaxLoadStaticPage[n][1].readyState == "complete") && ajaxLoadStaticPage[n][0] == null) {
//         cnt++;
//      }
//      n++;
//   }
//   if (cnt == n) { // all editors loaded, flush ajax array
//      ajaxLoadStaticPage = new Array();
//   }
   if (ajaxLoadFileList.readyState == 4 || ajaxLoadFileList.readyState == "complete") {
      var xml_doc = createXmlDoc(ajaxLoadFileList.responseText);
      var names = xml_doc.getElementsByTagName("name");
      var name = names[0].childNodes[0].nodeValue;
      var root_dirs = xml_doc.getElementsByTagName("root");
      var root_dir = root_dirs[0].childNodes[0] ? root_dirs[0].childNodes[0].nodeValue : "";
      var filterss = xml_doc.getElementsByTagName("filters");
      var filters = filterss[0].childNodes[0] ? filterss[0].childNodes[0].nodeValue : "";
      var callbacks = xml_doc.getElementsByTagName("callback");
      var callback = callbacks[0].childNodes[0] ? callbacks[0].childNodes[0].nodeValue : "";
      stopIndicator(name + "FileListIndicator");
      var i;
      var filenames = new Array(),
          filesizes = new Array(),
          filedates = new Array(),
          fileexts = new Array();
      var files = xml_doc.getElementsByTagName("file");
      for (i = 0; i < files.length; i++) {
         filesizes[filesizes.length] = getElemAttributeValue(files[i], "size");
         filedates[filedates.length] = getElemAttributeValue(files[i], "fdate");
         fileexts[filenames.length] = files[i].childNodes[0].nodeValue;
         filenames[filenames.length] = files[i].childNodes[0].nodeValue;
      }
      eval(callback + "('" + name + "', '" + root_dir + "', '" + filters + "', filenames, filesizes, filedates, fileexts);");
   }
}





function loadFileProperties(filename, callback, host, indicator, referrer) {
   if (indicator) {
      startIndicator(indicator, "Loading", referrer);
   }
   var cmd = "cmd=cmdGetFileProperties&sid=" + document.getElementById('SessionID').value + "&file=" + filename + "&callback=" + callback + "&host=" + host + (indicator == null ? "" : "," + indicator);
   load(ajaxGetFileProperties = GetXmlHttpObject(), engine_core_process, cmd, loadedFileProperties);
}


function loadedFileProperties() {
   if (ajaxGetFileProperties.readyState == 4 || ajaxGetFileProperties.readyState == "complete") {
      var proplist = ajaxGetFileProperties.responseText;
//      var props = proplist.split("|");

      var host = "";
      var indicator = "";

      var hi = getProperty("Host", proplist);
      var h = hi.split(",");
      host = h[0];
      indicator = h[1];
      stopIndicator(indicator);

      var cb = getProperty("Callback", proplist);
      eval(cb + "(host, proplist)");

//      var hb = "Host";
//      var i = 0;
//      var p;
//      while (i < props.length) {
//         p = props[i].split("=");
//         if (p[0] == hb) break;
//      }
//      if (i < props.length) {
//         var h = p[1].split(",");
//         host = h[0];
//         indicator = h[1];
//         stopIndicator(indicator);
//      }
//
//      var cb = "Callback";
//      var i = 0;
//      var p;
//      while (i < props.length) {
//         p = props[i].split("=");
//         if (p[0] == cb) break;
//      }
//      if (i < props.length) {
//         eval(decodeURIComponent(p[1]) + "(host, props)");
//      }

//      var i = 0;
//      var cb = "Callback=";
//      while (i < props.length && props[i].indexOf(cb) != -1) i++;
//      if (i < props.length) {
//         eval(decodeURIComponent(props[i]).substr(cb.length) + "(props)");
//      }
//      stopIndicator();
   }
}




function printModuleInfo(module) {
   startIndicator("ModuleInfoPanel", "Loading module info");
   var cmd = "cmd=cmdLoadModuleInfo&module=" + module + "&sid=" + document.getElementById('SessionID').value;
   load(ajaxLoadModuleInfo = GetXmlHttpObject(), engine_core_process, cmd, updateModuleInfo);
}

function updateModuleInfo() {
   stopIndicator("ModuleInfoPanel");
   if (ajaxLoadModuleInfo.readyState == 4 || ajaxLoadModuleInfo.readyState == "complete") {
      document.getElementById('ModuleInfoPanel').innerHTML = ajaxLoadModuleInfo.responseText;
   }
}



function printAssignedModules() {
   var modules = document.getElementById('NewServiceModules').value.split(",");
   var modlist = "";
   for (i = 0; i < modules.length - 1; i++) {
      modlist += "<span class='menuitem' id='NewServiceModule" + modules[i] + "' onclick=\"removeModule('" + modules[i] + "')\">" + modules[i] + "</span>, ";
   }
   modlist += "<span class='menuitem' id='NewServiceModule" + modules[modules.length - 1] + "' onclick=\"removeModule('" + modules[modules.length - 1] + "')\">" + modules[modules.length - 1] + "</span>";
   document.getElementById('NewServiceAssignedModules').innerHTML = modlist;
}

function addModule() {
   var sel = document.getElementById('NewServiceModuleSelector').value;
   if (sel != "none") {
      if (document.getElementById('NewServiceModules').value == "") {
         document.getElementById('NewServiceModules').value = sel;
      } else {
         document.getElementById('NewServiceModules').value += "," + sel;
      }
   }
   printAssignedModules();
}

function removeModule(module) {
   var modules = document.getElementById('NewServiceModules').value.split(",");
   if (modules.length == 1) {
      document.getElementById('NewServiceModules').value = "";
   } else {
      var cnt = 0;
      for (i = 0; i < modules.length; i++) {
         if (modules[i] != module) {
            if (cnt == 0) {
               document.getElementById('NewServiceModules').value = modules[i];
            } else {
               document.getElementById('NewServiceModules').value += "," + modules[i];
            }
            cnt++;
         }
      }
   }
   printAssignedModules();
}

function saveService() {
   startIndicator("ServiceIndicator", "Saving service");
   var modify = document.getElementById('NewServiceModify').value;
   var cmd = "cmd=cmdSaveService&modify=" + modify + "&name=" + document.getElementById('NewServiceName').value + "&sid=" + document.getElementById('SessionID').value;
   for (i = 0; i < languages.length; i++) {
      cmd += "&descr_" + languages[i].descr + "=" + document.getElementById('NewServiceDescr_' + languages[i].descr).value;
   }
   var modules = document.getElementById('NewServiceModules').value.split(",");
   for (i = 0; i < modules.length; i++) {
      cmd += "&module_" + i + "=" + modules[i];
   }
   load(ajaxSaveService = GetXmlHttpObject(), engine_core_process, cmd, updateServices);
}

function updateServices() {
   stopIndicator("ServiceIndicator");
   if (ajaxSaveService.readyState == 4 || ajaxSaveService.readyState == "complete") {
      location.reload();
//      document.getElementById('ModuleInfoPanel').innerHTML = ajaxSaveService.responseText;
   }
}



function printAssignedServices() {
   var services = document.getElementById('NewCompanyTypeServices').value.split(",");
   var servlist = "";
   for (i = 0; i < services.length - 1; i++) {
      servlist += "<span class='menuitem' id='NewCompanyTypeService" + services[i] + "' onclick=\"removeService('" + services[i] + "')\">" + services[i] + "</span>, ";
   }
   servlist += "<span class='menuitem' id='NewCompanyTypeService" + services[services.length - 1] + "' onclick=\"removeService('" + services[services.length - 1] + "')\">" + services[services.length - 1] + "</span>";
   document.getElementById('NewCompanyTypeAssignedServices').innerHTML = servlist;
}

function addService() {
   var sel = document.getElementById('NewCompanyTypeServiceSelector').value;
   if (sel != "none") {
      if (document.getElementById('NewCompanyTypeServices').value == "") {
         document.getElementById('NewCompanyTypeServices').value = sel;
      } else {
         document.getElementById('NewCompanyTypeServices').value += "," + sel;
      }
   }
   printAssignedServices();
}

function removeService(service) {
   var services = document.getElementById('NewCompanyTypeServices').value.split(",");
   if (services.length == 1) {
      document.getElementById('NewCompanyTypeServices').value = "";
   } else {
      var cnt = 0;
      for (i = 0; i < services.length; i++) {
         if (services[i] != service) {
            if (cnt == 0) {
               document.getElementById('NewCompanyTypeServices').value = services[i];
            } else {
               document.getElementById('NewCompanyTypeServices').value += "," + services[i];
            }
            cnt++;
         }
      }
   }
   printAssignedServices();
}

function saveCompanyType() {
   startIndicator("CompanyTypeIndicator", "Saving company type");
   var modify = document.getElementById('NewServiceModify').value;
   var cmd = "cmd=cmdSaveCompanyType&modify=" + modify + "&type=" + document.getElementById('NewCompanyType').value + "&sid=" + document.getElementById('SessionID').value;
   for (i = 0; i < languages.length; i++) {
      cmd += "&descr_" + languages[i].descr + "=" + document.getElementById('NewCompanyTypeDescr_' + languages[i].descr).value;
   }
   var services = document.getElementById('NewCompanyTypeServices').value.split(",");
   for (i = 0; i < services.length; i++) {
      cmd += "&service_" + i + "=" + services[i];
   }
   load(ajaxSaveCompanyType = GetXmlHttpObject(), engine_core_process, cmd, updateCompanyType);
}

function updateCompanyType() {
   stopIndicator("CompanyTypeIndicator");
   if (ajaxSaveCompanyType.readyState == 4 || ajaxSaveCompanyType.readyState == "complete") {
      location.reload();
   }
}


//function editCompanyType(companytype_id) {
//   startIndicator("CompanyTypeIndicator", "Saving company type");
//   var cmd = "cmd=cmdLoadCompanyType&modify=" + modify + "&type=" + document.getElementById('NewCompanyType').value;
//   load(ajaxLoadCompanyType = GetXmlHttpObject(), engine_core_process, cmd, updateCompanyType);
//}
//
//function editService(service_id) {
//}


function updateDefaultLanguageSelector() {
   var i = 0;
   var lang;
   var def = document.getElementById('DefaultLanguage').value;
   var selector = "<select id='DefaultLanguageSelector' name='DefaultLanguageSelector'>\r\n";
   while ( (lang = document.getElementById('Lang_' + i)) != null ) {
      if (lang.checked) {
         var lang_code = document.getElementById('LangCode_' + i).value;
         var sel = lang_code == def ? " selected='selected'" : "";
         selector += "\t<option value='" + lang_code + "'" + sel + ">" + document.getElementById('LangName_' + i).value + "</option>\r\n";
      }
      i++;
   }
   selector += "</select>\r\n";

   document.getElementById('DefaultLanguageSelectorHost').innerHTML = selector;
}


function saveLanguages(is_demo) {
   var def_lang = document.getElementById('DefaultLanguageSelector').value;
   var list = "&lang_0=" + def_lang;
   var i = 0, cnt = 1;
   var lang;
   while ( (lang = document.getElementById('Lang_' + i)) != null ) {
      if (lang.checked) {
         var lang_code = document.getElementById('LangCode_' + i).value;
         if (lang_code != def_lang) {
            list += "&lang_" + cnt + "=" + lang_code;
            cnt++;
         }
      }
      i++;
   }
   var demo = is_demo ? "&demo=demo" : ""
   var cmd = "cmd=cmdSaveLanguages" + demo + "&sid=" + document.getElementById('SessionID').value + list;
   startIndicator("LanguageIndicator", "Saving");
   load(ajaxSaveLanguage = GetXmlHttpObject(), engine_core_process, cmd, savedLanguages);
}

function savedLanguages() {
   if (ajaxSaveLanguage.readyState == 4 || ajaxSaveLanguage.readyState == "complete") {
      stopIndicator("LanguageIndicator");
   }
}



function reloadCaptcha(prefix) {
   startIndicator(prefix + 'CaptchaIndicator', 'Loading', prefix + 'Captcha');
   document.getElementById(prefix + 'Captcha').src = 'webcpms/imaging.php?cmd=captcha&r=' + randCode();
}






function resetStatQueryEditor() {
   document.getElementById('StatQueryID').value = '';
   document.getElementById('StatQueryName').value = '';

   document.getElementById('StatQueryRulesType').value = 'count';
   toggle("StatQueryTypeSumProductHost", false);
   document.getElementById('StatQueryTypeSumProductWith').value = '';
   document.getElementById('StatQueryRulesTable').value = '';
   document.getElementById('StatQueryRulesTableName').value = '';
   document.getElementById('StatQueryRulesColumn').value = '';
   document.getElementById('StatQueryRulesColumnName').value = '';
   var i = 0;
   while ( document.getElementById('StatQueryRulesColumns_' + i) ) {
      document.getElementById('StatQueryRulesColumns_' + i).value = '';
      document.getElementById('StatQueryRulesColumnsName_' + i).value = '';
      i++;
   }
   document.getElementById('StatQueryRulesJoin').value = '';
   document.getElementById('StatQueryRulesWhere').value = '';
   document.getElementById('StatQueryRulesOrdering').value = '';
   document.getElementById('StatQueryRulesOrderingDir').value = '';
   document.getElementById('StatQueryRulesLimit').value = '';
   setStatQueryRulesType();

   document.getElementById('StatQueryDisplayType').value = 'table';
   setStatQueryDisplayType();
   document.getElementById('StatQueryDisplayTypeTableParamsSumProduct').checked = false;
   document.getElementById('StatQueryDisplayTypeTableParamsTotal').checked = false;
   document.getElementById('StatQueryDisplayTypeTableParamsAvg').checked = false;
   document.getElementById('StatQueryDisplayTypeCoefColumns').value = '';
   document.getElementById('StatQueryDisplayTypeVBarsXAxis').value = '';
   document.getElementById('StatQueryDisplayTypeVBarsYAxis').value = '';
   document.getElementById('StatQueryDisplayTypeVBarsHeight').value = '';
   document.getElementById('StatQueryDisplayTypeHBarsXAxis').value = '';
   document.getElementById('StatQueryDisplayTypeHBarsYAxis').value = '';
   document.getElementById('StatQueryDisplayTypeHBarsWidth').value = '';
}


function editStatQuery(id) {
   resetStatQueryEditor();

   document.getElementById('StatQueryID').value = id;
   document.getElementById('StatQueryName').value = document.getElementById('StoredQueryName_' + id).value;

   var rules = document.getElementById('StoredQueryRules_' + id).value;
   var type = getProperty("type", rules).split(",");
   document.getElementById('StatQueryRulesType').value = type[0];
   if (type == "sumproduct" && type.length > 1) {
      toggle("StatQueryTypeSumProductHost", true, "inline");
      document.getElementById('StatQueryTypeSumProductWith').value = type.splice(0, 1).join(",");
   } else {
      toggle("StatQueryTypeSumProductHost", false);
   }
   var table = getProperty("table", rules).split(",");
   if (table.length > 1) {
      document.getElementById('StatQueryRulesTable').value = table[0];
      document.getElementById('StatQueryRulesTableName').value = table[1];
   }
   var column = getProperty("column", rules, false).split(",");
   if (column.length >= 1) {
      document.getElementById('StatQueryRulesColumn').value = decodeURIComponent(column[0]);
      if (column.length > 1) document.getElementById('StatQueryRulesColumnName').value = decodeURIComponent(column[1]);
   }
   var columns = getProperty("columns", rules, false).split(",");
   if (columns.length > 1) {
      var i, j = 0;
      for (i = 0; i < columns.length; i += 2) {
         document.getElementById('StatQueryRulesColumns_' + j).value = decodeURIComponent(columns[i]);
         document.getElementById('StatQueryRulesColumnsName_' + j).value = decodeURIComponent(columns[i + 1]);
         j++;
      }
   }
   document.getElementById('StatQueryRulesJoin').value = getProperty("join", rules);
   document.getElementById('StatQueryRulesWhere').value = getProperty("where", rules);
   document.getElementById('StatQueryRulesOrdering').value = getProperty("ordering", rules);
   var ordering_dir = getProperty("ordering_dir", rules);
   document.getElementById('StatQueryRulesOrderingDir').value = ordering_dir == "" ? "DESC" : ordering_dir;
   document.getElementById('StatQueryRulesLimit').value = getProperty("limit", rules);

   var display = document.getElementById('StoredQueryDisplay_' + id).value;
   if (display == "") {
      document.getElementById('StatQueryDisplayType').value = "none";
   } else {
      var type = getProperty("type", display);
      document.getElementById('StatQueryDisplayType').value = type;
      setStatQueryDisplayType();
      if (type == "table") {
         var method = getProperty("method", display);
         var coefs = getProperty("coefs", display);
         if (method.indexOf("hide") > -1) {
            document.getElementById('StatQueryDisplayTypeTableParamsHide').checked = true;
         }
         if (method.indexOf("sumproduct") > -1) {
            document.getElementById('StatQueryDisplayTypeTableParamsSumProduct').checked = true;
         }
         if (method.indexOf("total") > -1) {
            document.getElementById('StatQueryDisplayTypeTableParamsTotal').checked = true;
         }
         if (method.indexOf("avg") > -1) {
            document.getElementById('StatQueryDisplayTypeTableParamsAvg').checked = true;
         }
         document.getElementById('StatQueryDisplayTypeCoefColumns').value = coefs;
      } else if (type == "vbars") {
         document.getElementById('StatQueryDisplayTypeVBarsXAxis').value = getProperty("x", display);
         document.getElementById('StatQueryDisplayTypeVBarsYAxis').value = getProperty("y", display);
         document.getElementById('StatQueryDisplayTypeVBarsHeight').value = getProperty("height", display);
      } else if (type == "hbars") {
         document.getElementById('StatQueryDisplayTypeHBarsXAxis').value = getProperty("x", display);
         document.getElementById('StatQueryDisplayTypeHBarsYAxis').value = getProperty("y", display);
         document.getElementById('StatQueryDisplayTypeHBarsWidth').value = getProperty("width", display);
      }
   }
}


function setStatQueryDisplayType() {
   var type = document.getElementById('StatQueryDisplayType').value;
   toggle('StatDisplayTypeTableHost', false);
   toggle('StatQueryDisplayTypeVBarsHost', false);
   toggle('StatQueryDisplayTypeHBarsHost', false);
   if (type == "table") {
      toggle('StatDisplayTypeTableHost', true);
   } else if (type == "vbars") {
      toggle('StatQueryDisplayTypeVBarsHost', true);
   } else if (type == "hbars") {
      toggle('StatQueryDisplayTypeHBarsHost', true);
   }
}


function setStatQueryRulesType() {
   var type = document.getElementById('StatQueryRulesType').value;
   toggle("StatQueryTypeSumProductHost", type == "sumproduct" ? true : false, type == "sumproduct" ? "inline" : "");
   if (type == "count" || type == "sumproduct") {
      document.getElementById('StatQueryRulesOrderingDir').disabled = false;
      document.getElementById('StatQueryRulesLimit').disabled = false;
   } else {
      document.getElementById('StatQueryRulesOrderingDir').value = type == "max" ? "DESC" : "ASC";
      document.getElementById('StatQueryRulesOrderingDir').disabled = true;
      document.getElementById('StatQueryRulesLimit').value = 1;
      document.getElementById('StatQueryRulesLimit').disabled = true;
   }
}



function saveStatQuery() {

   var id = document.getElementById('StatQueryID').value;
   if (id == "") {
      id = document.getElementById('StatQueryNum').value++;
   }

   var stg = "Name=" + document.getElementById('StatQueryName').value;

   var type = document.getElementById('StatQueryDisplayType').value;
   if (type != "none") {
      var d = "type=" + type;
      if (type == "table") {
         var m = new Array();
         if (document.getElementById('StatQueryDisplayTypeTableParamsHide').checked) {
            m[m.length] = "hide";
         }
         if (document.getElementById('StatQueryDisplayTypeTableParamsSumProduct').checked) {
            m[m.length] = "sumproduct";
         }
         if (document.getElementById('StatQueryDisplayTypeTableParamsTotal').checked) {
            m[m.length] = "total";
         }
         if (document.getElementById('StatQueryDisplayTypeTableParamsAvg').checked) {
            m[m.length] = "avg";
         }
         if (m.length > 0) {
            d += "|method=" + m.join(",") + "|coefs=" + document.getElementById('StatQueryDisplayTypeCoefColumns').value;
         }
      } else if (type == "vbars") {
         d += "|x=" + document.getElementById('StatQueryDisplayTypeVBarsXAxis').value + "|y=" + document.getElementById('StatQueryDisplayTypeVBarsYAxis').value + "|height=" + document.getElementById('StatQueryDisplayTypeVBarsHeight').value;
      } else if (type == "hbars") {
         d += "|x=" + document.getElementById('StatQueryDisplayTypeHBarsXAxis').value + "|y=" + document.getElementById('StatQueryDisplayTypeHBarsYAxis').value + "|width=" + document.getElementById('StatQueryDisplayTypeHBarsWidth').value;
      }
      stg += "|Display=" + encodeURIComponent(d);
   }

   var type = document.getElementById('StatQueryRulesType').value;
   var q = "type=" + type;
   if (type == "sumproduct") {
      q += "," + document.getElementById('StatQueryTypeSumProductWith').value;
   }
   q += "|table=" + document.getElementById('StatQueryRulesTable').value + "," + document.getElementById('StatQueryRulesTableName').value + "|column=" + encodeURIComponent(document.getElementById('StatQueryRulesColumn').value) + (document.getElementById('StatQueryRulesColumnName').value.length > 0 ? "," + encodeURIComponent(document.getElementById('StatQueryRulesColumnName').value) : "");
   var i = 0;
   var c = new Array();
   while ( document.getElementById('StatQueryRulesColumns_' + i) ) {
      if (document.getElementById('StatQueryRulesColumns_' + i).value.length > 0) {
         c[c.length] = encodeURIComponent(document.getElementById('StatQueryRulesColumns_' + i).value)  + "," + encodeURIComponent(document.getElementById('StatQueryRulesColumnsName_' + i).value);
      }
      i++;
   }
   if (c.length > 0) {
      q += "|columns=" + c.join(",");
   }
   if (document.getElementById('StatQueryRulesJoin').value.length > 0) q += "|join=" + encodeURIComponent(document.getElementById('StatQueryRulesJoin').value);
   if (document.getElementById('StatQueryRulesWhere').value.length > 0) q += "|where=" + encodeURIComponent(document.getElementById('StatQueryRulesWhere').value);
   if (document.getElementById('StatQueryRulesOrdering').value.length > 0) {
      q += "|ordering=" + encodeURIComponent(document.getElementById('StatQueryRulesOrdering').value) + "|ordering_dir=" + encodeURIComponent(document.getElementById('StatQueryRulesOrderingDir').value);
   }
   if (document.getElementById('StatQueryRulesLimit').value.length > 0) q += "|limit=" + encodeURIComponent(document.getElementById('StatQueryRulesLimit').value);
   stg += "|Query=" + encodeURIComponent(q);


   var settings = [];

   settings[0] = "storedquery_" + id + "=" + encodeURIComponent(stg);

   saveSystemSettings(settings, true, "StatQueryIndicator");

}




function addPageTrackers() {
   var as = document.getElementsByTagName("a");
   for (i = 0; i < as.length; i++) {
      as[i].onclick = function () { setCookie("tracker", "ref=" + encodeURIComponent(location.href) + (this.id ? "|id=" + this.id : "")) }
   }
}


function savePageTrackers() {
   var i = 0, j = 0;

   var chk = null;

   var pages = [];

   while ( chk = document.getElementById('PageTracker_' + i + '_' + j) ) {
      while ( chk = document.getElementById('PageTracker_' + i + '_' + j) ) {
         if (chk.checked) {
            pages.push(encodeURIComponent(document.getElementById('PageTrackerURL_' + i + '_' + j).value));
         }
         j++;
      }
      i++;
      j = 0;
   }

   var settings = [];

   settings[0] = "tracked_pages=" + pages.join("|");

   saveSystemSettings(settings, false, "PageTrackerIndicator", true);
}

