/***************************************************************************
*   edwiki 3.0
*   (C) 2002-2009 Daniel Wrana
*   http://www.tools.selbstlernarchitekturen.info
*   Distributed under the terms of the GNU General Public License v3 or later
****************************************************************************/

emptyFunction = function () {};

// datStor
function getDatStor(varKey, storKey) {
  if (typeof(datStor[storKey])=="undefined") return "";
  if (typeof(datStor[storKey][varKey])=="undefined") return "";
  return datStor[storKey][varKey];
}

function getDatStorBaseLink(storKey) {
  datStorBaseLink = getDatStor("baseLink", storKey);
  if (!datStorBaseLink) datStorBaseLink = baseLink;
  return datStorBaseLink;
}

function removeHTMLComments(html) {
  return html.replace(/<!(?:--[\s\S]*?--\s*)?>\s*/g,'');
}

function locationReload() {
  location.reload();
}

function gotoLocation(tempNewLocation, addBaseLink) {
  newLocation = (typeof(tempNewLocation)=="undefined" || typeof(tempNewLocation)=="object" || tempNewLocation==true) ? newLocation : tempNewLocation;
  if (typeof(addBaseLink)!="undefined" && addBaseLink==true) {
    location.href = addAttributes(baseLink, newLocation);
  } else {
    location.href = newLocation;
  }
}

function gotoWikiPage(wikiPage, addAttrib, addAnchor) {
  if (typeof(addAttrib)=="undefined") addAttrib = "";
  if (typeof(addAnchor)=="undefined") addAnchor = "";
  gotoLocation(addAttributes("wiki.php?wiki=" + wikiPage, addAttrib) + (addAnchor ? "#" + addAnchor : ""));
}

function gotoElement(table, id, actionTmp, datStorKey) {
  var actionCommand = (typeof(actionTmp)!="undefined") ? "&" + getDatStor("actionBase", datStorKey) + "Action=" + actionTmp : "";
  gotoLocation(actionCommand + "&table=" + encodeURIComponent(table) + "&id=" + id, true);
}

function gotoTableId() {
  gotoElement(getDatStor("table", datStorKey), getDatStor("id", datStorKey));
}

function closeAndLink(transLink) {
  gotoLocation(encodeURIComponent(transLink));
}

function addAttributes(base, attributes) {
  attributes = attributes.replace(/^\&/, '');
  if (base.match(/\&$/) || base.match(/\?$/)) {
    return base + attributes;
  } else if (!base.match(/\?/)) {
    return base + "?" + attributes;
  } else {
    return base + "&" + attributes;
  }
}

function getHtml(ajaxHtml) {
  splits = ajaxHtml.split("<script type='text/javascript'>");
  return splits[0];
}

function nodeContent(node, tagName) {
  return node.getElementsByTagName(tagName)[0].childNodes[0].nodeValue;
}

// use of window functions

var alertWindowId = 1;

function openFile(fileNameTmp, pathTmp) {
  fileName = fileNameTmp;
  path = (typeof(pathTmp)!="undefined") ? pathTmp : filePath ;
  openFileAjax = new ajax();
  openFileAjax.successCallback = openFileResponse;
  var data = "ajaxAction=testFileExistence&path=" + encodeURIComponent(path) + "&fileName=" + encodeURIComponent(fileName);
  openFileAjax.request(data);
}

function openFileResponse() {
  result = openFileAjax.getSimpleResponse();
  if (result == "OK") {
    if (browser=="MSIE") {
      alertModal(emptyFunction, getLang("filedownloadmsie7"), 200);
    }
    gotoLocation("create_files.php?path=" + path + "&fileName=" + fileName);
  } else {
    alertModal(emptyFunction, result, 200);
    return false;
  }
}

function uploadAttachment(toolName, path) {
  openPopupWindow('uploadAttachment', 'uploadAttachment', 'toolName=' + toolName + '&path=' + path);
}

function helpWindow(content, top, left, width, height) {
  helpTop = top; helpLeft = left; helpWidth = width; helpHeight = height;
  openPopupWindow('help' + encodeURIComponent(content), 'help', 
        'content=' + encodeURIComponent(content) + '&top=' + helpTop + '&left='
        + helpLeft + '&width=' + helpWidth + '&height=' + helpHeight);
}

function helpLink(content) {
  var divCollection = document.getElementsByTagName("div");
  for (count in divCollection) {
    try {
      var div = divCollection[count];
      if (div.id.match(/^help/)) div.parentNode.removeChild(div);
    } catch (e) {}
  }
  openPopupWindow('help' + encodeURIComponent(content), 'help', 'content=' + encodeURIComponent(content)
                   + '&top='+ helpTop + '&left=' + helpLeft + '&width=' + helpWidth + '&height=' + helpHeight);
}

if (typeof(top.windowTopIndex)=="undefined") top.windowTopIndex = 4000;
var windowOpeningFlag = false;

function rearrangeWindow(id) {
  var top = document.getElementById(id).style.top;
  // todo: get the cursor position and set the window to an adequate position
}

function openPopupWindow(id, action, addArguments) {
  if (typeof(id)!="undefined") winId = id;
  if (typeof(action)!="undefined") winAction = action;
  if (typeof(addArguments)=="undefined") addArguments = "dummy=dummy";
  if (windowOpeningFlag == true) {
    windowOpenWaiter = window.setInterval("openPopupWindow();", 200);
    return false;
  } else {
    windowOpeningFlag = true;
    if (typeof(windowOpenWaiter)!="undefined") clearInterval(windowOpenWaiter);
  }
  winNode = top.document.getElementById(winId + "_main");
  iframeNode = top.document.getElementById(winId + "_iframe");
  if (winNode) winNode.parentNode.removeChild(winNode);
  if (iframeNode) iframeNode.parentNode.removeChild(iframeNode);
  top.windowTopIndex = top.windowTopIndex + 10;
  windowAjax = new ajax();
  windowAjax.successCallback = writePopup;
  var data = "ajaxAction=" + winAction + "&winId=" + winId + "&" + addArguments 
              + "&zindex=" + top.windowTopIndex + "&scrollTop=" + getScrollPosY();
  windowAjax.requestWindow(data);
}

function writePopup() {
  ajaxHtml = windowAjax.getTextResponse();
  if (ajaxHtml=="noAccess") pleaseLogin();
  var newWindow = document.createElement("div");
  newWindow.innerHTML = getHtml(ajaxHtml);
  topopo = top.document.getElementsByTagName('body')[0];
  try {
    topopo.appendChild(newWindow);
  } catch (e) {}
  setJavascript(ajaxHtml);
  setCss(ajaxHtml);
  windowOpeningFlag = false;
}

function setCss(ajaxHtml) {
  splits = ajaxHtml.split("<style type='text/css'>");
  if (!splits[1]) return;
  splits = splits[1].split("</style>");
  cssScript = document.createElement("style");
  cssScript.setAttribute('type', 'text/css');
  cssScript.text = splits[0];
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(cssScript);
}

function setJavascript(ajaxHtml) {
  splits = ajaxHtml.split("<script type='text/javascript'>");
  if (!splits[1]) return;
  splits = splits[1].split("</script>");
  javoScript = document.createElement("script");
  javoScript.setAttribute('type', 'text/javascript');
  javoScript.text = splits[0];
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(javoScript);
}

var loadedFiles = new Array();

function loadJavascriptFile(url) {
  for (i = 0; i < loadedFiles.length; i++) if (loadedFiles[i] == url) return;
  var head = document.getElementsByTagName("head")[0];
  var el = document.createElement("script");
  el.src = url;
  el.type="text/javascript";
  head.appendChild(el);
  loadedFiles[loadedFiles.length] = url;
}

function loadStylesheetFile(url) {
  for (i = 0; i < loadedFiles.length; i++) if (loadedFiles[i] == url) return;
  var head = document.getElementsByTagName("head")[0];
  var el = document.createElement("link");
  el.href = url;
  el.rel  = "stylesheet";
  el.type = "text/css";
  head.appendChild(el);
  loadedFiles[loadedFiles.length] = url;
}

function getFileType(filetype) {
  gotoLocation("create_images.php?filetype=" + filetype);
}

// formular functions

function toggle(keyRang, mode, targetValue) { 
  // first arg is the number of the split of the id
  var imgCollection = document.getElementsByTagName("img");
  for (count in imgCollection) {
    var image = imgCollection[count];
    if (typeof(image.id)=="undefined" || image.id == "") continue;
    imgIdArray = image.id.split("_");
    if (imgIdArray[keyRang] != currIdArray[keyRang]) continue;
    var val = typeof(image.parentNode.val)=="undefined" ? image.parentNode.value 
                                                        : image.parentNode.val;
    if (val==targetValue) {
      image.src = urlIcons + (mode=="boxes" ? "box" : "round") + "_checked.gif";
    } else {
      image.src = urlIcons + (mode=="boxes" ? "box" : "round")+ "_unchecked.gif";
    }
  }
}

function ajaxSelectChange(elTemp, newEntryText, languageTmp, fieldTemp, targetIdTemp, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  el = elTemp; language = languageTmp, fieldName = fieldTemp; targetId = targetIdTemp;
  if (typeof(newEntryText)=="undefined") newEntryText = getLang('setNewEntry');
  if (el.value=="pleaseselect") {
    return false;
  } else if (el.value=="newEntry") {
    promptModal(addSelectEntry, newEntryText, '');
  } else {
    selectChangeOption = el.value;
    ajaxFormChange(el, "select", language, fieldName, targetId, datStorKey);
  }
}

function addSelectEntry(valueTemp) {
  if (valueTemp == null || valueTemp == "") return false;
  addSelectOption(el.id, valueTemp, valueTemp);
  selectChangeOption = valueTemp;
  ajaxFormChange(el, "select", language, fieldName, targetId, datStorKey);
}

function ajaxFormChange(elTemp, mode, languageTmp, fieldName, targetId, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  el = elTemp;
  formLanguage = (typeof(languageTmp)=="undefined") ? "" : languageTmp;
  formAjax = new ajax();
  if (mode=='radio') {
    formAjax.successCallback = processResponseRadio;
    field = el.name;
    specOption = storeValue = el.id.split("_")[1];
  } else if (mode=='check') {
    formAjax.successCallback = processResponseCheck;
    fieldSplit = el.name.match(/\[(.*)\]$/);
    specOption = field = (fieldSplit==null) ? el.name : fieldSplit[1];
    if (typeof(el.val)!="undefined") {
      storeValue = el.val = (el.val=='TRUE' ? 'FALSE' : 'TRUE');
    } else {
      storeValue = el.value = (el.value=='TRUE' ? 'FALSE' : 'TRUE');
    }
  } else if (mode=='checklist') {
    formAjax.successCallback = processResponseCheckList;
    valueArray = el.name.match(/\[(.*)\]$/);
    specOption = storeValue = (valueArray==null) ? el.name : valueArray[1];
    if (typeof(el.val)!="undefined") {
      el.val = (el.val=='TRUE' ? 'FALSE' : 'TRUE');
    } else {
      el.value = (el.value=='TRUE' ? 'FALSE' : 'TRUE');
    }
  } else if (mode=='select') {
    formAjax.successCallback = processResponseSelect;
    fieldSplit = el.name.match(/\[(.*)\]$/);
    field = (fieldSplit==null) ? el.name : fieldSplit[1];
    if (typeof(selectChangeOption)!="undefined") {
      storeValue = specOption = selectChangeOption;
    } else {
      storeValue = specOption = el.value;
    }
  } else {
    formAjax.successCallback = processResponse;
    fieldSplit= el.name.match(/\[(.*)\]$/);
    field = (fieldSplit==null) ? el.name : fieldSplit[1];
    if (field=='passKlar') {
      var passKlar = document.getElementById('pass').value;
      storeValue = (passKlar=='') ? '' : MD5(passKlar);
      field = 'pass';
    } else {
      storeValue = el.value;
      el.value = 'Updating...';
    }
  }
  field = (typeof(fieldName)=="undefined" || fieldName=="") ? field : fieldName;
  id = (typeof(targetId)=="undefined" || targetId=="") ? getDatStor("id", datStorKey) : targetId;
  var data = "ajaxAction=" + getDatStor("ajaxAction", datStorKey) + "&mode=" + mode
            + "&table=" + getDatStor("table", datStorKey) + "&id=" + id + "&field=" + field 
            + "&storeValue=" + encodeURIComponent(storeValue) + "&language=" + formLanguage
            + "&refObj=" + getDatStor("refObj", datStorKey);
  formAjax.request(data);
}

function processResponse() {
  result = formAjax.getSimpleResponse();
  addData = formAjax.getComplexResponse();
  if (!result && result != "") return;
  if (result=='doubleEntry') {
    alertModal(emptyFunction, getLang("doubleentry"));
    el.value = "";
  } else if (result=='doubleTitle') {
    prevId = nodeContent(addData, 'id');
    confirmModal(doubleTitleProcess, nodeContent(addData, 'message') + "<br><br>" + nodeContent(addData, 'biblio'));
  } else if (result=='notallowedValue') {
    alertModal(emptyFunction, getLang("notallowedvalue"));
    el.value = "";
  } else if (field!='passKlar') {
    el.value = (result || result == "") ? result : storeValue;
  } else {
    el.value = storeValue;
  }
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
  if (typeof formChangePlugin != "undefined") formChangePlugin();
}

function doubleTitleProcess(value) {
  if (value==false) {
    el.value = storeValue;
  } else {
    delId = id;
    id = prevId;
    doubTitAjax = new ajax();
    doubTitAjax.successCallback = toolShowId;
    var data = "ajaxAction=deleteElement&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + delId + "&refObj=rhizomObj";
    doubTitAjax.request(data);
  }
}

function toolShowId() {
  gotoLocation(getDatStor("actionBase", datStorKey) + "Action=show&id=" + id, true);
}

function processResponseSelect() {
  if (!(result = formAjax.getSimpleResponse())) return;
  setPreSelection(el.id, result);
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
  if (typeof formChangePlugin != "undefined") formChangePlugin();
}

function processResponseCheckList() {
  currIdArray = el.id.split("_");
  toggle(1, 'boxes', "TRUE");
  if (typeof formChangePlugin != "undefined") formChangePlugin();
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
}

function processResponseCheck() {
  currIdArray = el.id.split("_");
  document.getElementById(currIdArray[0] + "_hiddenValue").value = storeValue;
  toggle(0, 'boxes', "TRUE"); 
  if (typeof formChangePlugin != "undefined") formChangePlugin();
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
}

function processResponseRadio() {
  currIdArray = el.id.split("_");
  document.getElementById(currIdArray[0] + "_hiddenValue").value = currIdArray[1];
  toggle(0, 'rounds', currIdArray[1]); 
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
  if (typeof formChangePlugin != "undefined") formChangePlugin();
}

function changeFieldFile(formularName) {
  document.getElementById(formularName + 'Action').value = "edit";
  document.getElementById(formularName).submit();
}

// functions to operate on itemlists

function itemlistChange(el, idTmp, fieldTmp, allModeTmp, searchLinkModeTmp, datStorKeyTmp, translateTmp, noSaveTmp) {
  itemlistAddEl = el; id = idTmp; field = fieldTmp; allMode = allModeTmp; 
  searchLinkMode = searchLinkModeTmp; datStorKey = datStorKeyTmp; translate = translateTmp; noSave = noSaveTmp;
  if (itemlistAddEl.value == "newlistitem") {
    promptModal(responseItemList, getLang('setNewListitem'), '');
  } else if (itemlistAddEl.value == "pleaseselect") {
    return;
  } else {
    processListItemAction("addListItem", itemlistAddEl.value, id, field);
  }
}

function responseItemList(storeValue) {
  if (storeValue == null || storeValue == "") return false;
  if (storeValue.match(/[\|\;\,\:\#\'\"\}\{\&\%\$\~\<\>\=\\\/]/)) {
    alertModal(emptyFunction, getLang('please_nospecial'));
  } else {
    processListItemAction("addListItem", storeValue, id, field);
  }
  itemlistAddEl.value = "pleaseselect";
}

function listitemDelete(delValue, id, field, allModeTmp, searchLinkModeTmp, datStorKeyTmp, translateTmp, noSaveTmp) {
  allMode = allModeTmp; searchLinkMode = searchLinkModeTmp; 
  datStorKey = datStorKeyTmp; translate = translateTmp; noSave = noSaveTmp;
  processListItemAction("deleteListItem", delValue, id, field);
}

function processListItemAction(listItemAction, storeValue, id, field) {
  formAjax = new ajax();
  formAjax.successCallback = processResponseItemlist;
  itemlistSpanEl = document.getElementById("span" + field);
  var data = "ajaxAction=" + listItemAction
      + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) 
      + "&id=" + ((id!="" && id!=0) ? id : getDatStor("id", datStorKey))
      + "&field=" + encodeURIComponent(field) 
      + "&storeValue=" + encodeURIComponent(storeValue)
      + "&allMode=" + allMode + "&searchLinkMode=" + encodeURIComponent(searchLinkMode)
      + "&datStorKey=" + encodeURIComponent(datStorKey)
      + "&translate=" + encodeURIComponent(translate)
      + "&noSave=" + encodeURIComponent(noSave)
      + "&oldItemList=" + encodeURIComponent(itemlistSpanEl.innerHTML)
      + "&refObj=" + getDatStor("refObj", datStorKey);
   formAjax.request(data);
}

function processResponseItemlist() {
  itemlistSpanEl.innerHTML = formAjax.getSimpleResponse();
  if (typeof ajaxAfterChange != "undefined") ajaxAfterChange();
}

function formChange(elTemp, mode) {
  el = elTemp;
  if (mode=='radio') {
    if (typeof(el.val)!="undefined") {
      specOption = storeValue = el.val;
    } else {
      specOption = storeValue = el.value;
    }
    currIdArray = el.id.split("_");
    document.getElementById(currIdArray[0] + "_hiddenValue").value = storeValue;
    toggle(0, 'rounds', currIdArray[1]); 
  } else if (mode=='check') {
    if (typeof(el.val)!="undefined") {
      specOption = storeValue = el.val = (el.val=='TRUE' ? 'FALSE' : 'TRUE');
    } else {
      specOption = storeValue = el.value = (el.value=='TRUE' ? 'FALSE' : 'TRUE');
    }
    currIdArray = el.id.split("_");
    document.getElementById(currIdArray[0] + "_hiddenValue").value = storeValue;
    toggle(0, 'boxes', storeValue); 
  }
}

function doSubmitForm(el, crypt) {
  inputs = document.getElementsByTagName('input');
  for(var i = 0; i < inputs.length; i++) {
    if (inputs[i].type=='password') {
      var passKlar = inputs[i].value;
      document.getElementById(inputs[i].id + 'Crypt').value = (crypt && crypt=="md5") ? MD5(passKlar) : passKlar;
      inputs[i].value = '';
    }
    if (inputs[i].type=='hidden' && inputs[i].id.match(/^(.*)ItemList$/)) {
      var itemListName = inputs[i].id.match(/^(.*)ItemList$/);
      inputs[i].value = document.getElementById('span' + itemListName[1]).innerHTML;
    }
  }
  var value = (typeof el.val == 'undefined') ? el.value : el.val;
  document.getElementById(el.form.name + "Action").value = value;
  document.getElementById(el.form.name).submit();
}

function check4Return(formEl, evt) {
  var obj = evt.target || evt.srcElement;
  if (obj.type == "submit") return true;
  if (obj.type != "textarea" && obj.type != "button" && evt.keyCode == 13 ) {
    if (evt.preventDefault) evt.preventDefault()
    else evt.returnValue = false;
    var myElements = formEl.elements,
    newIndex = 0;
    for (var i = 0; i < myElements.length; i++ ) {
      if ( myElements[ i ] != obj ) continue;
      for (var j = i + 1; j < myElements.length; j++ ) {
        if ("input,textarea,submit,button".indexOf( myElements[ j ].type ) != -1 ) {
          newIndex = j;
          break;
        }
      }
      try { myElements[newIndex].focus(); } catch (e) {}
    }
  };
  return true;
}

function simpleChangeSelect(el, addAttr) {
  gotoLocation(addAttr + el.value, true);
}

function simpleButtonInput(inputId, addAttr) {
  var inputValue = document.getElementById(inputId).value;
  gotoLocation(addAttr + inputValue, true);
}

function markChecks(mode) {
  var rowsChecks = document.getElementsByName("markArray[]");
  for (var i = 0; i < rowsChecks.length; i++) {
    if (mode=="all") {
      rowsChecks[i].checked = true;
    } else {
      rowsChecks[i].checked = (rowsChecks[i].checked==true) ? false : true;
    }
  }
}

function focusElement(id) {
  try {
    document.getElementById(id).focus();
  } catch (e) {}
}

function toggleInsertPolicy() {
  val = (typeof(el.val)!="undefined") ? el.val : el.value;
  if (val=="FALSE" && specOption=="page") {
    setDisplayMode("none", "toolinsertfieldset", "", "noParent");
  } else if (val=="TRUE" && specOption=="page") {
    setDisplayMode("block", "toolinsertfieldset", "", "noParent");
  }
} 

// functions for searching and selecting

function ajaxSearch(actionTmp, datStorKeyTmp, tableTmp, fieldNameTmp, searchTermTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  searchAction = (typeof(actionTmp)!="undefined") ? actionTmp : "simpleSearch";
  if (typeof(tableTmp)!="undefined" && tableTmp!="") {
    searchTable = tableTmp;
  } else {
    try { searchTable = document.getElementById(searchAction + 'Table').value;
    } catch (e) { 
      try { searchTable = document.getElementById('searchTable').value;
      } catch (e) { searchTable = getDatStor("table", datStorKey);  }
    }
  }
  if (typeof(fieldNameTmp)!="undefined" && fieldNameTmp!="") {
    searchField = fieldNameTmp;
  } else {
    try { searchField = document.getElementById(searchAction + 'Field').value;
    } catch (e) { 
      try { searchField = document.getElementById('searchField').value;
      } catch (e) { searchField = "all" }
    }
  }
  if (typeof(searchTermTmp)!="undefined" && searchTermTmp!="") {
    searchTerm = searchTermTmp;
  } else {
    try { searchTerm = document.getElementById(searchAction + 'Term').value;
    } catch (e) {
      try { searchTerm = document.getElementById('searchTerm').value;
      } catch (e) { searchTerm = "" }
    }
  }
  searchAjax = new ajax();
  searchAjax.successCallback = searchResponse;
  var data = "ajaxAction=" + searchAction 
               + "&searchTable=" + encodeURIComponent(searchTable)
               + "&searchField=" + encodeURIComponent(searchField)
               + "&searchTerm=" + encodeURIComponent(searchTerm)
               + "&refObj=" + getDatStor("refObj",  datStorKey);
  searchAjax.request(data);
}

function searchResponse() {
  result = searchAjax.getSimpleResponse();
  if (result=="syntaxerror") {
    alertModal(emptyFunction, getLang("sqlsyntaxerror"));
  } else if (result=="unknownColumn") {
    alertModal(emptyFunction, getLang("sqlunknowncolumn"));
  } else {
    datStorBaseLink = getDatStorBaseLink(datStorKey);
    actionBase = getDatStor("actionBase", datStorKey);
    if (!actionBase) actionBase = "search";
    data = addAttributes(datStorBaseLink, actionBase + "Action=") + searchAction
            + "&searchTable=" + encodeURIComponent(searchTable)
            + "&searchField=" + encodeURIComponent(searchField)
            + "&searchTerm=" + encodeURIComponent(searchTerm);
    gotoLocation(data);
  }
}

function ajaxChangeSearchField(el, searchUrlTmp, actionBaseTmp) {
  searchUrl = (typeof(searchUrlTmp) == "undefined") ? "wiki.php" : searchUrlTmp;
  searchActionBase = (typeof(actionBaseTmp) == "undefined") ? "searchAction=" : actionBaseTmp;
  data = addAttributes(searchUrl, searchActionBase) + "simpleSearch&searchField=" + encodeURIComponent(el.value);
  gotoLocation(data);
}

// functions to set the ranked element of a collection

function setRank(actionTmp, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  elAction = (typeof(actionTmp) == "undefined") ? "" : actionTmp;
  if (elAction=='selectRank') {
    promptModal(setRankProcess, getLang('setNewRank'), '');
  } else {
    setRankProcess();
  }
}

function setRankProcess(rank) {
  var rank = (typeof(rank) == "undefined") ? "" : rank;
  if (rank.match(/[a-z\|\;\,\.\:\#\'\"\*\+\}\]\[\{\&\%\$\§\!\~\<\>\=\?\\\/]/)) {
    alertModal(emptyFunction, getLang('please_nospecial'));
  } else {
    setRankAjax = new ajax();
    setRankAjax.successCallback = setRankResponse;
    var data = "ajaxAction=setElement&action=" + elAction + "&refObj=" + getDatStor("refObj",  datStorKey) 
             + "&rank=" + rank + "&datStorKey=" +  datStorKey + "&table=" + getDatStor("table",  datStorKey);
    setRankAjax.request(data);
  }
}

function setRankResponse() {
  var result = setRankAjax.getComplexResponse();
  var nextTable = nodeContent(result, 'table');
  if (nextTable!="none") {
    addAttr = "&table=" + encodeURIComponent(nextTable) + "&id=" + nodeContent(result, 'id');
  }
  gotoLocation(addAttr, true);
}

// interface functions

function setSrc(imgEl, imageName) {
  if (document.all) {
    imgEl.src = "js/blank.gif";
    imgEl.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader("
                + "src='" + urlIcons + imageName + "',sizingMethod='image')";
  } else {
    imgEl.src = urlIcons + imageName;
  }
}

function getScrollPosX() {
   var h = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
   return h ? h : 0;
}

function getScrollPosY() {
   var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
   return h ? h : 0;
}

function getCursorPosX(event) {
  return (!document.all) ? event.clientX : window.event.clientX;
}

function getCursorPosY(event) {
  return (!document.all) ? event.clientY : window.event.clientY;
}

var clickEventY = 300;
var clickEventX = 300;

addEvent(document, "mousedown", setPosition);

function setPosition(event)  {
  clickEventX = getCursorPosX(event);
  clickEventY = getCursorPosY(event);
}

function addEvent(el, evname, func) {
  if (el.addEventListener) el.addEventListener(evname, func, false);
  else                     el.attachEvent("on" + evname, func);
}

function removeEvent(el, evname, func) {
  if (el.removeEventListener) el.removeEventListener(evname, func, false);
  else                        el.detachEvent("on" + evname, func);
}

function stopEvent(event) {
  if (event.preventDefault) {
    event.preventDefault();
  } else {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
}

function addClass(el, className) {
  try {
    removeClass(el, className);
    el.className += " " + className;
  } catch (e) {}
}

function removeClass(el, className) {
  if (!(el && el.className)) return;
  var cls = el.className.split(" ");
  var ar = new Array();
  for (var i = cls.length; i > 0;) {
    if (cls[--i] != className) {
      ar[ar.length] = cls[i];
    }
  }
  el.className = ar.join(" ");
}

function setDisplayMode(mode, idString, base, noParent) {
  if (typeof(base)=="undefined") base = "";
  if (typeof(noParent)=="undefined") noParent = "";
  if (idString=="") return;
  idCollection = idString.split(",");
  for (count in idCollection) {
    id = base + idCollection[count];
    var el = document.getElementById(id);
    try {
      if (el.tagName!="DIV" && noParent=="") {
        if (el.parentNode.tagName=="SPAN") {
            el.parentNode.parentNode.parentNode.style.display = mode;
        } else {
          el.parentNode.style.display = mode;
        }
      } else {
        el.style.display = mode;
      }
   } catch (e) { alert("Element not Found: " + id); }
  }
}

function toggleDisplayMode(base, state1, ids1, state2, ids2, state3, ids3, state4, ids4) {
  if (typeof(state2)=="undefined") state2 = "";
  if (typeof(state3)=="undefined") state3 = "";
  if (typeof(state4)=="undefined") state4 = "";
  setDisplayMode("none", ids1, base);
  if (state2) setDisplayMode("none", ids2, base);
  if (state3) setDisplayMode("none", ids3, base)
  if (state4) setDisplayMode("none", ids4, base)
  if (specOption==state1) {
    setDisplayMode("block", ids1, base);
  } else if (state2 && specOption==state2) {
    setDisplayMode("block", ids2, base);
  } else if (state3 && specOption==state3) {
    setDisplayMode("block", ids3, base);
  } else if (state4 && specOption==state4) {
    setDisplayMode("block", ids4, base);
  }
}

function activateCard(el, showValue, navName) {
  setDisplayMode ("none", navName, "stdTab_", "parent");
  if (el.value==showValue) setDisplayMode ("inline", navName, "stdTab_", "parent");
}

function changeTab(idBase, activeTab, activeTabClass, datStorKeyTmp) {
  datStorKey = datStorKeyTmp;
  var linkCollection = document.getElementsByTagName("a");
  for (count in linkCollection) {
    var linkEl = linkCollection[count];
    if (typeof(linkEl.id) != "undefined" && linkEl.id.indexOf(idBase + "Tab")!="-1") {
      removeClass(linkEl, activeTabClass);
    }
  }
  var divCollection = document.getElementsByTagName("div");
  for (count in divCollection) {
    var divEl = divCollection[count];
    if (typeof(divEl.id) != "undefined" && divEl.id.indexOf(idBase + "Card")!="-1") {
      divEl.style.display = 'none';
    }
  }
  document.getElementById(idBase + "Card_" + activeTab).style.display = 'block';
  addClass(document.getElementById(idBase + "Tab_" + activeTab), activeTabClass);
  activeLangCard = activeTab;
  changeCardAjax = new ajax();
  changeCardAjax.successCallback = emptyFunction;
  var data = "ajaxAction=changeCard&datStorKey=" + datStorKey + "&tab=" + activeTab;
  changeCardAjax.request(data);
  if (typeof(changeCardPlugin) != "undefined") changeCardPlugin(activeTab);
}

// grid - functions

function doAction(addAttribsTmp, confirmText) {
  newLocation = addAttributes(baseLink, addAttribsTmp);
  if (!confirmText) {
    actionProcess();
  } else {
    confirmModal(actionProcess, confirmText, 200);
  }
}

function actionProcess(result) {
  if (result==false) return false;
  gotoLocation();
}

function gridConfig(gridName, configAction) {
  newLocation = addAttributes(baseLink, getDatStor("actionBase", gridName) + "Action=showList");
  attributes = "gridName=" + gridName + "&configAction=" + configAction;
  openPopupWindow('gridConfig', 'gridConfig', attributes);
}

function gridProcess() {
  try {
    newLocation += "&gridOrder=" + document.getElementById('gridOrder').value;
  } catch (e) {}
  try {
    newLocation += "&rowLimit=" + document.getElementById('rowLimit').value;
  } catch (e) {}
  try {
    newLocation += "&activeColumns=" + document.getElementById('activeColumns').value;
  } catch (e) {}
  gotoLocation();
}

function gridImageDelete(pathTmp, fileNameTmp) {
  fileName = fileNameTmp; path = pathTmp;
  confirmModal(gridFileDeleteConfirmed, getLang('confirmimagedelete'), 160);
}

function gridFileDelete(obj, col, fileNameTmp) {
  fileName = fileNameTmp;
  path = document.getElementById('path').value;
  confirmModal(gridFileDeleteConfirmed, getLang('confirmfiledelete'), 160);
}

function gridFileDeleteConfirmed(result) {
  if (result==false) return false;
  fileDelete(fileName, path);
}

function fileDelete(fileName, pathTmp) {
  newLocation = location.search;
  path = (typeof(pathTmp)!="undefined") ? pathTmp : filePath ;
  filedeleteAjax = new ajax();
  filedeleteAjax.successCallback = gotoLocation;
  var data = "ajaxAction=deleteFile&path=" + encodeURIComponent(path) + "&fileName=" + encodeURIComponent(fileName);
  filedeleteAjax.request(data);
}

function gridFileShow(el, col, fileName) {
  var path = document.getElementById('path').value;
  openFile(fileName, path);
}

function gridDisplayImage(el, col, fileName) {
  var path = document.getElementById('path').value;
  openPopupWindow("displayImage", "displayImage", "path=" + path + "&fileName=" + fileName);
}

// functions to manage batchActions

function doBatchAction(datStorKeyTmp) {
  datStorKey = datStorKeyTmp;
  batchactionAjax = new ajax();
  batchactionAjax.successCallback = batchactionResponse;
  currAction = document.getElementById("batchAction").value;
  rowsChecks = document.getElementsByName("markArray[]");
  marks = "";
  for (var i = 0; i < rowsChecks.length; i++) {
    if (rowsChecks[i].checked==true) marks += "&markArray[" + i + "]=" + rowsChecks[i].value;
  }
  if (currAction.match("Set") || currAction.match("Delete")) {
    promptModal(batchtaggingProcess, getLang("pleaseinserttag"), '');
  } else if (currAction.match("selection")) {
    var data = "ajaxAction=batchAction&batchAction=" + encodeURIComponent(currAction) + marks
             + "&refObj=" + getDatStor("refObj", datStorKey);
    batchactionAjax.request(data);
  } else if (currAction == "deleteFromDatabase") {
    confirmModal(batchActionConfirmed, getLang("confirmdelete"), 160);
  } else {
    batchActionConfirmed(true);
  }
}

function batchtaggingProcess(storeValue) {
  if (storeValue == null || storeValue == "") return false;
  data = "ajaxAction=batchTagging&batchAction=" + encodeURIComponent(currAction) + marks
       + "&tagWord=" + encodeURIComponent(storeValue)
       + "&refObj=" + getDatStor("refObj", datStorKey);
  batchactionAjax.request(data);
}

function batchActionConfirmed(confirmation) {
  if (confirmation==false) return;
  var data = "ajaxAction=batchAction&batchAction=" + currAction + marks
           + "&refObj=" + getDatStor("refObj", datStorKey);
  batchactionAjax.request(data);
}

function batchactionResponse() {
  var result = batchactionAjax.getSimpleResponse();
  if (result=="ok") {
    gotoLocation(getDatStor("actionBase", datStorKey) + "Action=showList", true);
  } else {
    alertModal(emptyFunction, result, 200);
  }
}

function setasSelection(marks, datStorKeyTmp) {
  datStorKey = datStorKeyTmp;
  batchactionAjax = new ajax();
  batchactionAjax.successCallback = setAsSelectionResponse;
  var data = "ajaxAction=batchAction&batchAction=selectionSnew" + marks + "&refObj=" + getDatStor("refObj", datStorKey);
  batchactionAjax.request(data);
}

function setAsSelectionResponse() {
  gotoLocation(getDatStor("actionBase", datStorKey) + "Action=showList", true);
}

function setListFormat(value, datStorKey) {
  gotoLocation(getDatStor("actionBase", datStorKey) + "Action=showList&format=" + value, true);
}

function typeSearch(searchType, searchTerm) {
  gotoLocation("searchType=" + searchType + "&searchTerm=" + encodeURIComponent(searchTerm), true);
}

// private functions for the modal window

top.modalCallback = emptyFunction;

function createModalText(modalText) {
  var el = top.document.getElementById('modalDiv');
  newDiv = top.document.createElement("div");
  newDiv.id = 'modalText';
  newDiv.innerHTML = modalText;
  el.appendChild(newDiv);
}

function createModalInputfield(standardValue) {
  var el = top.document.getElementById('modalDiv');
  newInput = top.document.createElement("input");
  newInput.id = 'modalResponse';
  newInput.value= standardValue;
  addClass(newInput, 'sfInput');
  addEvent(newInput, 'click', modalKeypress);
  el.appendChild(newInput);
}

function createModalSelectfield(options) {
  var el = top.document.getElementById('modalDiv');
  newSelect = top.document.createElement("select");
  newSelect.id = 'modalResponse';
  populateSelect(newSelect, options.split(","));
  addClass(newSelect, 'sfSelect');
  addEvent(newSelect, 'click', modalKeypress);
  el.appendChild(newSelect);
}

function createModalButton(buttonId, buttonText, buttonJavascript) {
  var el = top.document.getElementById('modalDiv');
  buttonPanel = top.document.getElementById('modalButtons');
  if (typeof(buttonPanel)=="undefined" || buttonPanel == null) {
    buttonPanel = top.document.createElement("div");
    buttonPanel.id = 'modalButtons';
    addClass(buttonPanel, 'modalButtons');
    el.appendChild(buttonPanel);
  }
  var newButton = top.document.createElement("button");
  newButton.id = buttonId;
  newButton.innerHTML = buttonText;
  addClass(newButton, 'sfButton');
  newButton.style.display = 'inline';
  addEvent(newButton, 'click', buttonJavascript);
  buttonPanel.appendChild(newButton);
}

function setModalSize(modalWidth, modalHeight, modalPadding) {
  try {
    top.document.getElementById('modalIframe').style.width = modalWidth;
    top.document.getElementById('modalIframe').style.minHeight = modalHeight;
    top.document.getElementById('modalIframe').style.padding = modalPadding;
  } catch (e) {};
  top.document.getElementById('modalDiv').style.width = modalWidth;
  top.document.getElementById('modalDiv').style.minHeight = modalHeight;
  top.document.getElementById('modalDiv').style.padding = modalPadding;
}

function initiateModal(callback) {
  top.modalCallback = callback;
  try {
    top.document.getElementById('modalIframeFrame').style.display = 'block';
  } catch (e) {};
  top.document.getElementById('modalFrame').style.display = 'block';
  top.document.getElementById('modalDiv').style.display = 'block';
  top.document.getElementById('modalDiv').innerHTML = '';
}

function closeModal() {
  try {
    top.document.getElementById('modalIframeFrame').style.display = 'none';
  } catch (e) {};
  top.document.getElementById('modalFrame').style.display = 'none';
  top.document.getElementById('modalDiv').style.display = 'none';
}

function modalKeypress(e) {
  if ((e.keyCode==10) || (e.keyCode==13)) modalClick();
  if (e.keyCode==27) modalCancel();
}

function modalClick() {
  top.closeModal();
  if (top.document.getElementById('modalResponse')) {
    top.modalCallback(document.getElementById('modalResponse').value);
  } else {
    top.modalCallback(true);
  }
}

function modalCancel() {
  top.closeModal();
  top.modalCallback(false);
}

// This is replace alert function it saves function callback and sets up dialog with an ok button
function alertModal(callback, modalText, height, width) {
  if (typeof(width)=="undefined") width = 300;
  if (typeof(height)=="undefined") height = 150;
  initiateModal(callback);
  setModalSize(width + 'px', height +  'px', '20px');
  createModalText(modalText);
  createModalButton ('okModalBut', getLang('ok'), modalClick);
  top.document.getElementById('okModalBut').focus();
}

// This is replace prompt function it saves function callback and sets up dialog with ok/cancel buttons
function promptModal(callback, modalText, standardValue) {
  if (typeof(standardValue)=="undefined") standardValue = "";
  initiateModal(callback);
  setModalSize('300px', '100px', '20px');
  createModalText(modalText);
  createModalInputfield(standardValue);
  createModalButton('okModalBut', getLang('ok'), modalClick);
  createModalButton('cancelModalBut', getLang('cancel'), modalCancel);
  top.document.getElementById('modalResponse').focus();
  top.document.getElementById('modalResponse').select();
}

// This is replace select function it saves function callback and sets up dialog with ok/cancel buttons
function selectModal(callback, modalText, options) {
  initiateModal(callback);
  setModalSize('300px', '100px', '20px');
  createModalText(modalText);
  createModalSelectfield(options);
  createModalButton('okModalBut', getLang('ok'), modalClick);
  createModalButton('cancelModalBut', getLang('cancel'), modalCancel);
  top.document.getElementById('modalResponse').focus();
}

// This is replace confirm function it saves function callback and sets up dialog with yes/no buttons
function confirmModal(callback, modalText, height) {
  initiateModal(callback);
  setModalSize('300px', '100px', '20px');
  createModalText(modalText);
  createModalButton('yesModalBut', getLang("yes"), modalClick);
  createModalButton('noModalBut', getLang("no"), modalCancel);
  top.document.getElementById('yesModalBut').focus();
}

// functions for select widgets

function populateSelect(selectObj, valuesArray, formatPageName) {
  selectObj.options.length = 0;
  for (var i = 0; i < valuesArray.length; i++ ) {
    var code = valuesArray[ i ];
    var codeText = code.replace(/&#039;/, "\'");
    if (typeof(formatPageName)!="undefined") codeText = formatPageNameNS(codeText);
    var opt = new Option(codeText, code);
    try {
      selectObj.add(opt, null); // standards compliant; doesn't work in IE
    } catch(ex) {
      selectObj.add(opt); // IE only
    }
  }
}

function addSelectOption(id, text, value) {
  var selection = document.getElementById(id);
  if (selection == null) return false;
  selection.options[selection.length] = new Option(text, value);
}

function setPreSelection(id, preselectValue) {
  var selection = document.getElementById(id);
  if (selection == null) return false;
  for(var i = 0; i < selection.length; i++) {
    if (selection.options[i].value == preselectValue) {
      selection.selectedIndex = i;
      break;
    }
  }
}

function changeSelectionContent(ajaxFunction, targetObjId, addArguments) {
  targetObj = document.getElementById(targetObjId);
  selectContentAjax = new ajax();
  selectContentAjax.successCallback = changeSelectionContentProcess;
  var data = "ajaxAction=" + ajaxFunction + addArguments;
  selectContentAjax.request(data);
}

function changeSelectionContentProcess() {
  options = selectContentAjax.getSimpleResponse();
  populateSelect(targetObj, options.split(","), true);
}

// tooltip functions

function buttonTooltip(buttonEl, tooltipText, tooltipAlign, tooltipWidth, tooltipAddClass) {
  if (tooltipText=="") return;
  tooltipDiv = document.createElement("div");
  tooltipDiv.name = "tooltipDiv";
  addClass(tooltipDiv, 'tooltip');
  if (typeof tooltipAddClass != "undefined") addClass(tooltipDiv, tooltipAddClass);
  if (typeof tooltipWidth != "undefined") tooltipDiv.style.width = tooltipWidth + "px";
  if (tooltipAlign == "right") {
    tooltipDiv.style.marginLeft = browser=="MSIE" ? "-210px" : "-160px";
  } else {
    tooltipDiv.style.marginLeft = browser=="MSIE" ? "-40px" : "4px";
  }
  tooltipDiv.innerHTML = tooltipText;
  buttonEl.appendChild(tooltipDiv);
}

function previewTooltip(el, table, id) {
  linkEl = el;
  previewTooltipAjax = new ajax();
  previewTooltipAjax.successCallback = previewTooltipResponse;
  var data = "ajaxAction=getPreviewTooltip&table=" + encodeURIComponent(table) + "&id=" + id + "&refObj=rhizomObj";
  previewTooltipAjax.request(data);
}

function previewTooltipResponse() {
  result = previewTooltipAjax.getSimpleResponse();
  if (result=="") return;
  var tooltipDiv = document.createElement("div");
  tooltipDiv.name = "tooltipDiv";
  addClass(tooltipDiv, 'tooltip');
  tooltipDiv.style.marginLeft = browser=="MSIE" ? "-40px" : "4px";
  tooltipDiv.style.width = "400px";
  tooltipDiv.innerHTML = result;
  linkEl.appendChild(tooltipDiv);
}

function removeTooltip(buttonEl) {
  var divs = document.getElementsByTagName('div');
  for (var i = 0; i < divs.length; i++) {
    try {
      if (divs[i].name.match(/tooltipDiv/)) divs[i].style.display = "none";
    } catch (e) {}
  }
}

// language related

langStrings = new Array();

function addToLang(langPre, ar) {
  for (var key in ar) {
     if (typeof(ar[key]) == 'function') continue;
     langStrings[key] = ar[key];
  }
}

function getLang(name, default_value) {
  return (typeof(langStrings[name]) == "undefined") ? default_value : langStrings[name];
}

function chooseLanguage(language, langnavareas) {
  if (location.href.match(/index\.php/) || !location.href.match(/\.php/)) {
    gotoLocation("index.php?lang=" + language);
  } else if (location.href.match(/install\.php/)) {
    gotoLocation("install.php?lang=" + language);
  } else if (location.href.match(/registration\.php/)) {
    gotoLocation("registration.php?lang=" + language);
  } else {
    if (langnavareas) {
      setLanguageAjax = new ajax();
      setLanguageAjax.successCallback = setLanguageHomepageResponse;
      var data = "ajaxAction=getLangHomepage&language=" + language;
    } else {
      setLanguageAjax = new ajax();
      setLanguageAjax.successCallback = locationReload;
      var data = "ajaxAction=setLanguage&language=" + language;
    }
    setLanguageAjax.request(data);
  }
}

function startWithLanguage(language) {
  setLanguageAjax = new ajax();
  setLanguageAjax.successCallback = setLanguageHomepageResponse;
  var data = "ajaxAction=getLangHomepage&language=" + language;
  setLanguageAjax.request(data);
}

function setLanguageHomepageResponse() {
  if (!(result = setLanguageAjax.getComplexResponse())) return;
  try {
    pageName = result.getElementsByTagName('pageName')[0].childNodes[0].nodeValue;
  } catch (e) { pageName = ""; }
  try {
    startURL = result.getElementsByTagName('startURL')[0].childNodes[0].nodeValue;
  } catch (e) { startURL = ""; }
  gotoLocation(startURL + "wiki.php?wiki=" + pageName);
}

// close and open editors

mceCancelCallback = function (value) { cancelEditor(); };
mceSaveCallback = function () {};

function openDivEditor(idTemp, datStorKeyTmp, languageTemp, buttonModeTemp, heightTemp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  editorLanguage = (typeof(languageTemp) != "undefined") ? languageTemp : "";
  top.alertContentSaveMode = "divContent";
  mceSaveCallback = function (value) { saveElementContent(value); };
  mceCancelCallback = function (value) { gotoTableId(); };
  editorId = idTemp;
  editorHeight = heightTemp;
  editorButtonMode = buttonModeTemp;
  getContentAjax = new ajax();
  getContentAjax.successCallback = openDivEditorResponse;
  var data = "ajaxAction=getFieldContent&language=" + editorLanguage + "&field=content"
               + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey)
               + "&refObj=" + getDatStor("refObj", datStorKey);
  getContentAjax.request(data);
}

function openDivEditorResponse() {
  var result = getContentAjax.getTextResponse();
  document.getElementById(editorId).innerHTML = result;
  openEditor(editorId, editorButtonMode, editorHeight);
  document.getElementById(editorId + "_nonedittoolbar").style.display = 'none';
}

function openEditor(editorId, buttonMode, editorHeight) {
  if (tinyMCE.get(editorId) == null) {
    setupEditor(buttonMode, editorHeight);
    ed = new tinymce.Editor(editorId, tinyMCE.settings);
    ed.render();
  }
  editorSetFocus(editorId);
}

function editorSetFocus(editorId) {
  setTimeout(function () {
    ed = (editorId=="current") ? tinyMCE.activeEditor : tinyMCE.get(editorId);
    try {
      ed.getWin().focus();
    } catch (e) {}
  }, 500);
}

function setupEditor(buttonMode, editorHeight) {
  if (buttonMode=="fullButtons") {
    var buttons1 = buttonsFull1;
    var buttons2 = buttonsFull2;
  } else if (buttonMode=="rhizomButtons") {
    var buttons1 = buttonsFull1b;
    var buttons2 = buttonsFull2;
  } else {
    var buttons1 = buttonsShort;
    var buttons2 = '';
  }
  tinyMCE.init({
    mode : 'none',
    height : editorHeight,
    language : language,
    content_css : urlTheme + 'css/' + styleName + '.css',
    css_file : urlTheme + 'css/' + styleName + '.css',
    theme : 'advanced',
    cleanup_callback : 'mceCustomCleanup',
    onchange_callback : 'mceChangeHandler',
    handle_event_callback : 'mceEventHandler',
    cleanup_on_startup : true,
    convert_urls : 'false',
    table_inline_editing : true,
    gecko_spellcheck : true,
    use_native_selects : true,
    font_size_style_values : '8,10,12,14,16,18',
    plugins : 'inlinepopups,paste',
    extended_valid_elements : 'img[src|alt|name|id|class|style|height|width|title|map|onmouseover|onmouseout],form[name|method|class|action|onsubmit]',
    wikistamp_format : '%y-%m-%d',
    wikistamp_user : userName,
    wikistamp_initials : userInitials,
    stylesheets : stylesheets,
    buttons1 : buttons1,
    buttons2 : buttons2
  });
}

function cancelEditor() {
  top.alertContentSaveFlag = false;
  wikiIdLink(top.pageId);
}

function getContentFromEditors() {
  var divCollection = document.getElementsByTagName("div");
  var contentData = "";
  for (count in divCollection) {
    try {
      var div = divCollection[count];
      if (div.id.match(/^contenteditor/)) {
        saveNeedle = div.id.match(/^contenteditor_(.*)$/);
        content = "";
        try {
          content = tinyMCE.get(div.id).getContent();
        } catch (e) {
          try {
            content = div.innerHTML;
          } catch (e) {}
        }
        contentData += "&storeValue[" + saveNeedle[1] + "]=" +  encodeURIComponent(content);
      }
    } catch (e) {}
  }
  return contentData;
}

// save functions

top.alertContentSaveFlag = true;
top.alertContentSaveMode = "pageContent";

function alertContentSave() {
  if (top.alertContentSaveFlag==false) return false;
  contentSaveAjax = new ajax();
  contentSaveAjax.successCallback = emptyFunction;
  contentSaveAjax.failureCallback = emptyFunction;
  if (top.alertContentSaveMode=="pageContent") {
    var contentData = getContentFromEditors();
    var data = "ajaxAction=savePageContentAlert&pageId=" + top.pageId + contentData;
  } else {
    var ed = tinyMCE.get(editorId);
    storeValue = ed.getContent();
    var data = "ajaxAction=editField&field=content&storeValue=" + encodeURIComponent(storeValue)
               + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey)
               + "&refObj=" + getDatStor("refObj", datStorKey);
  }
  contentSaveAjax.request(data);
}

function saveElementContent(value) {
  top.alertContentSaveFlag = false;
  contentSaveAjax = new ajax();
  contentSaveAjax.successCallback = gotoTableId;
  var data = "ajaxAction=editField&field=content&storeValue=" + encodeURIComponent(value)
               + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey)
               + "&refObj=" + getDatStor("refObj", datStorKey);
  contentSaveAjax.request(data);
}

function saveAllCards() {
  top.alertContentSaveFlag = false;
  var contentData = getContentFromEditors();
  contentSaveAjax = new ajax();
  contentSaveAjax.successCallback = cardSaveResponse;
  var data = "ajaxAction=savePageContent&pageId=" + top.pageId + contentData;
  contentSaveAjax.request(data);
}

function cardSaveResponse() {
  if (!(pageName = contentSaveAjax.getSimpleResponse())) return;
  gotoWikiPage(pageName);
}

// routines for editor

var lastEvent = "";
function mceEventHandler(e) {
  lastEvent = e;
  return true;
}

function mceChangeHandler(inst) {
  string = "";
  try {
    var charCode = lastEvent.charCode ? lastEvent.charCode : lastEvent.keyCode;
    if (charCode == 13) {
      if (tinyMCE.selectedElement != null 
        && tinyMCE.selectedElement.nodeName.toLowerCase() == "p") {
          pPart = tinyMCE.selectedElement;
          pPart.className = "p";
      }
    }
    lastEvent = "";
  } catch (e) {}
}

function mceCustomCleanup(type, value) {
  //alert(type + " Value HTML string: |" + value + "|");
  switch (type) {
    case "get_from_editor":
//      value = value.replace(/\„/g, "&laquo;");
//      value = value.replace(/\“/g, "&raquo;");
//      value = value.replace(/(\>|\s|\(|\[)\"/g, "&laquo;");
//      value = value.replace(/\"(\s|\<|\n|\t|\.|\?|\:|\;|\,|\!|\)|\])/g, "&raquo;");
    break;
    case "insert_to_editor":
      if (value=="") value='<p class="p">&nbsp;</p>';
    break;
    case "get_from_editor_dom":
      //value = value.replace(/<img(S)>/g,"<img$1 />");
    break;
    case "insert_to_editor_dom":
      // Do custom cleanup code here
    break;
  }
  return value;
}

// login functions

function loginWindow() {
  openPopupWindow('login', 'login');
}

function authLogin(crypt) {
  user = document.getElementById('loginpuser').value;
  pass = document.getElementById('ppass').value;
  if (crypt && crypt=="md5") pass = MD5(pass);
  loginAjax = new ajax();
  loginAjax.successCallback = responseLoginPopup;
  var data = "ajaxAction=loginAuth" + "&user=" + user + "&pass=" + pass;
  loginAjax.request(data);
}

function responseLoginPopup() {
  if (!(result = loginAjax.getSimpleResponse())) return;
  if (result=="OK") {
    gotoLocation("wiki.php" + location.search);
  } else {
    try {
      loginError = document.getElementById('loginErrorPopup');
      loginError.innerHTML = result;
    } catch (e) {
      alert(result);
    }
  }
}

function pleaseLogin() {
  initiateModal(emptyFunction);
  setModalSize ('300px', '100px', '13px');
  modalText  = getLang("noaccesstextlogin");
  modalText += (authProfile != 'adminReg' ? " " + getLang("noaccesstextregister") : "");
  createModalText(modalText);
  createModalButton ('loginModalBut', getLang("login"), pleaseLoginLogin);
  if (authProfile != 'adminReg') {
    createModalButton ('registerModalBut', getLang("register"), pleaseLoginRegister);
  }
  createModalButton ('cancelModalBut', getLang("cancel"), modalCancel);
  top.document.getElementById('loginModalBut').focus();
}

function pleaseLoginLogin() {
  closeModal();
  loginWindow();
}

function pleaseLoginRegister() {
  closeModal();
  gotoLocation("registration.php");
}

function deleteAccount(userName) {
  alert(userName);
}

// set user password

function setUserPassword(id) {
  openPopupWindow('setuserpass', 'setuserpass', 'id=' + id);
}

function saveUserPassword(id) {
  userId = id;
  try {
    oldPass = document.getElementById('oldpassword').value;
  } catch (e) { oldPass = false; }
  newPass = document.getElementById('newpassword').value;
  newPassW = document.getElementById('retypepassword').value;
  if (newPass!=newPassW) {
    alertModal(emptyFunction, getLang("wrongpassdouble"));
    return false;
  } else if (newPass.length < 6) {
    alertModal(emptyFunction, getLang("passtooshort"));
    return false;
  }
  setpassAjax = new ajax();
  setpassAjax.successCallback = responseSetUserPass;
  var data = "ajaxAction=userAdmin&id=" + userId
               + "&oldpass=" + (oldPass ? MD5(oldPass) : "")
               + "&field=pass&storeValue=" + MD5(newPass);
  setpassAjax.request(data);
}

function responseSetUserPass() {
  if (!(result = setpassAjax.getSimpleResponse())) return;
  if (result == "wrongoldpass") {
    alertModal(emptyFunction, getLang('nopassentry'));
  } else if (oldPass) {
    alertModal(lastPassword, getLang('loginwithnewpass'));
  } else {
    gotoLocation("admin.php?userAction=edit&id=" + userId);
  }
}

function lastPassword() {
  gotoLocation("index.php");
}

// smtp-password setting

function setSMTPPassword() {
  openPopupWindow('setsmtppass', 'setsmtppass');
}

function saveSMTPPassword() {
  newPass = document.getElementById('newpassword').value;
  newPassW = document.getElementById('retypepassword').value;
  if (newPass!=newPassW) {
    alertModal(emptyFunction, getLang('wrongpassdouble'));
    return false;
  }
  newLocation = "admin.php?action=editMail";
  setpassAjax = new ajax();
  setpassAjax.successCallback = gotoLocation;
  var data = "ajaxAction=adminConf&field=smtpPass&storeValue=" + newPass + "&refObj=contentObj";
  setpassAjax.request(data);
}

// create user wizard

function openCreateUserWizard() {
  openPopupWindow('createuser', 'createuser');
}

function createNewUser() {
  var userName = document.getElementById('username').value;
  try {
    var preName = document.getElementById('userpreName').value;
  } catch (e) { var preName = ""; }
  var surName = document.getElementById('usersurName').value;
  var niveau = document.getElementById('userniveau').value;
  var language= document.getElementById('userlanguage').value;
  createUserAjax = new ajax();
  createUserAjax.successCallback = responseCreateNewUser;
  var data = "ajaxAction=createUser&userName=" + userName
                                + "&preName=" + preName + "&surName=" + surName
                                + "&niveau=" + niveau + "&language=" + language;
  createUserAjax.request(data);
}

function responseCreateNewUser() {
  if (!(result = createUserAjax.getSimpleResponse())) return;
  if (result.match(/^[0-9]*$/)) {
    gotoLocation("admin.php?userAction=edit&id=" + result);
  } else {
    alertModal(emptyFunction, result, 200);
    return false;
  }
}

// group functions

function createGroup() {
  promptModal(createGroupProcess, getLang('insertgroupname'), '');
}

function createGroupProcess(groupName) {
  if (groupName==null || groupName=="") return false;
  creategroupAjax = new ajax();
  creategroupAjax.successCallback = createGroupResponse;
  var data = "ajaxAction=groupAdmin&mode=create&storeValue=" + encodeURIComponent(groupName);
  creategroupAjax.request(data);
}

function createGroupResponse() {
  if (!(result = creategroupAjax.getSimpleResponse())) return;
  newLocation = 'owndata.php?userAction=groupsareas';
  if (result=='doubleEntry') {
    alertModal(gotoLocation, getLang("doubleentry"));
  } else if (result=='notallowedValue') {
    alertModal(gotoLocation, getLang("notallowedvalue"));
  } else {
    alertModal(gotoLocation, getLang("groupcreated"));
  }
}

// routines for datePicker

function pickDate(id, datStorKeyTmp) {
  top.dateDatStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  top.dateFieldEl = document.getElementById(id);
  pickDateAjax = new ajax();
  pickDateAjax.successCallback = pickDateResponse;
  var data = "ajaxAction=pickDate&date=" + top.dateFieldEl.value;
  pickDateAjax.request(data);
}

function changeMonth(year, month) {
  pickDateAjax = new ajax();
  pickDateAjax.successCallback = pickDateResponse;
  var data = "ajaxAction=pickDate&yearID=" + year + "&monthID=" + month;
  pickDateAjax.request(data);
}

function pickDateResponse() {
  var modalText = pickDateAjax.getTextResponse();
  initiateModal(emptyFunction);
  setModalSize('160px', '170px', '4px');
  createModalText(modalText);
  createModalButton('cancelModalBut', getLang("cancel"), modalCancel);
}

function selectDate(year, month, day) {
  var date = year + "-" + month + "-" + day;
  closeModal();
  top.dateFieldEl.value = date;
  ajaxAction = getDatStor("ajaxAction", top.dateDatStorKey);
  if (ajaxAction) ajaxFormChange(top.dateFieldEl, '', '', '', '', top.dateDatStorKey);
}

// routines for colorPicker

function pickColor(id, datStorKeyTmp) {
  top.colorDatStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  top.colorInputEl = document.getElementById(id);
  top.colorFieldEl = document.getElementById(id + '_colorField');
  pickColorAjax = new ajax();
  pickColorAjax.successCallback = pickColorResponse;
  var data = "ajaxAction=pickColor";
  pickColorAjax.request(data);
}

function pickColorResponse() {
  var modalText = pickColorAjax.getTextResponse();
  initiateModal(emptyFunction);
  setModalSize('350px', '250px', '6px');
  createModalText(modalText);
  updateLight(top.colorInputEl.value);
  changeFinalColor(top.colorInputEl.value);
}

function changeFinalColor(color) {
  if (color.indexOf('#') == -1) color = convertRGBToHex(color);
  try {
    top.document.getElementById("colorPreview").style.backgroundColor = color;
    top.document.getElementById("colorValue").value = color;
  } catch (e) {
    document.getElementById("colorPreview").style.backgroundColor = color;
    document.getElementById("colorValue").value = color;
  }
}

function selectColor() {
  var color = top.document.getElementById("colorValue").value;
  closeModal();
  top.colorInputEl.value = color;
  top.colorFieldEl.style.backgroundColor = color;
  ajaxAction = getDatStor("ajaxAction", top.colorDatStorKey);
  if (ajaxAction) ajaxFormChange(top.colorInputEl, '', '', '', '', top.colorDatStorKey);
}

function mouseMoverOver1(event) {
  if (isMouseDown && isMouseOver) computeColor(event); return false;
}

function mouseMoverOver2(el) {
  if (isMouseDown && isMouseOver) changeFinalColor(el.style.backgroundColor); return false;
}

// color functions

function convertRGBToHex(col) {
  if (!col) return false;
  var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
  var rgb = col.replace(re, "$1,$2,$3").split(',');
  if (rgb.length == 3) {
    r = parseInt(rgb[0]).toString(16);
    g = parseInt(rgb[1]).toString(16);
    b = parseInt(rgb[2]).toString(16);
    r = r.length == 1 ? '0' + r : r;
    g = g.length == 1 ? '0' + g : g;
    b = b.length == 1 ? '0' + b : b;
    return "#" + r + g + b;
  }
  return col;
}

function convertHexToRGB(col) {
  if (col.indexOf('#') != -1) {
    col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
    r = parseInt(col.substring(0, 2), 16);
    g = parseInt(col.substring(2, 4), 16);
    b = parseInt(col.substring(4, 6), 16);
    return {r : r, g : g, b : b};
  }
  return null;
}

var colorLightDetail = 50;
var i, isMouseDown = false, isMouseOver = false;

function dechex(n) {
  var strhex = "0123456789abcdef";
  return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
}

function computeColor(el, e) {
  var x, y, partWidth, partDetail, imHeight, r, g, b;

  x = (e.offsetX ? e.offsetX : e.layerX) - 15;
  y = (e.offsetY ? e.offsetY : e.layerY) - 15;

  partWidth = document.getElementById('colorImage').width / 6;
  partDetail = 25;
  imHeight = document.getElementById('colorImage').height;

  r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
  g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255  + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
  b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);


  coef = (imHeight - y) / imHeight;

  r = 128 + (r - 128) * coef;
  g = 128 + (g - 128) * coef;
  b = 128 + (b - 128) * coef;

  changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
  updateLight('#' + dechex(r) + dechex(g) + dechex(b));
}

function updateLight(inputColor) {
  col = convertHexToRGB(inputColor);
  var i, partDetail = 25, finalCoef, finalR, finalG, finalB, color;
  for (i=0; i< 50; i++) {
    if ((i>=0) && (i<partDetail)) {
      finalCoef = i / partDetail;
      finalR = dechex(255 - (255 - col.r) * finalCoef);
      finalG = dechex(255 - (255 - col.g) * finalCoef);
      finalB = dechex(255 - (255 - col.b) * finalCoef);
    } else {
      finalCoef = 2 - i / partDetail;
      finalR = dechex(col.r * finalCoef);
      finalG = dechex(col.g * finalCoef);
      finalB = dechex(col.b * finalCoef);
    }
    color = '#' + finalR + finalG + finalB;
    document.getElementById('gs' + i).style.backgroundColor = color;
  }
}

// date functions

function addZeros(value, len) {
  value = "" + value;
  if (value.length < len) {
    for (var i=0; i<(len-value.length); i++) value = "0" + value;
  }
  return value;
}

function getDateTime(d, fmt) {
  var ed = this.editor;

  var fullYear = "" + d.getFullYear();
  var shortYear = fullYear.substr(2, 2);
  fmt = fmt.replace("%D", "%m/%d/%y");
  fmt = fmt.replace("%r", "%I:%M:%S %p");
  fmt = fmt.replace("%Y", fullYear);
  fmt = fmt.replace("%y", shortYear);
  fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
  fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
  fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
  fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
  fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
  fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
  fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
  fmt = fmt.replace("%b", "" + getLang("datetime_months")[d.getMonth()]);
  fmt = fmt.replace("%a", "" + getLang("datetime_days")[d.getDay()]);
  fmt = fmt.replace("%%", "%");
  return fmt;
}

// different base and helper functions

function getElVal(id) {
  return document.getElementById(id).value;
}

function waitMilliSec(milliSec) {
  var sDate = new Date();
  var sMsec = sDate.getTime();
  do {
    eDate = new Date();
    eMsec = eDate.getTime();
  } while ((eMsec-sMsec)<milliSec);
}

function toolConfig(toolName, pageName, windowHeight) {
  newLocation = baseLink;
  data = "toolName=" + toolName + "&pageName=" + pageName + "&windowHeight=" + windowHeight;
  openPopupWindow("toolConfig", "toolConfig", data);
}

function showElementFromTrash(el, action, id) {
  alertModal(emptyFunction, "showElementFromTrash" + "text" + id);
}

function rename(target, text, oldName) {
  newLocation = target + "&newName=" + encodeURIComponent(newName);
  promptModal(renameProcess, text, oldName);
}

function renameProcess(newName) {
  if (newName) gotoLocation();
}

function onCancel() {
  self.close();
  return false;
};

// functions to create entries

function createNewEntry(table, actionTypeTmp, valueTmp, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  newValue = (typeof(valueTmp)!="undefined") ? valueTmp : "";
  actionType = (typeof(actionTypeTmp)!="undefined") ? actionTypeTmp : "";
  refObj = getDatStor("refObj", datStorKey);
  createEntryAjax = new ajax();
  createEntryAjax.successCallback = createEntryResponse;
  var data = "ajaxAction=newEntry&table=" + table + "&datStorKey=" + datStorKey + "&refObj=" + refObj;
  if (refObj=="rhizomObj") {
    data += "&actionType=" + actionType + "&value=" + encodeURIComponent(newValue);
  }
  createEntryAjax.request(data);
}

function createEntryResponse() {
  result = createEntryAjax.getComplexResponse();
  if (actionType=="newSuborganisation" || actionType=="newLeader" || actionType=="newMember") {
    rhizomatOldEntryLink(getDatStor("id", datStorKey), nodeContent(result, "id"), actionType);
  } else {
    gotoNewElement();
  }
}

function rhizomatOldEntryLink(oldId, newId, type) {
  elementLinkAjax = new ajax();
  elementLinkAjax.successCallback = gotoNewElement;
  var data = "ajaxAction=rhizomatElementLink&id=" + oldId + "&type=" + type + "&addId=" + newId + "&refObj=rhizomObj";
  elementLinkAjax.request(data);
}

function gotoNewElement() {
  addAttr = "table=" + encodeURIComponent(nodeContent(result, "table")) + "&id=" + nodeContent(result, "id")
            + "&" + getDatStor("actionBase", datStorKey) + "Action=edit";
  gotoLocation(addAttr, true);
}

function rhizomatElementLinkDelete(obj, col, linkId, attributes, datStorKey) {
  newLocation = addAttributes(baseLink, "");
  id = 
  gridBodyLinkDeleteAjax = new ajax();
  gridBodyLinkDeleteAjax.successCallback = gotoLocation;
  var data = "ajaxAction=rhizomatElementLink&id=" + getDatStor("id", datStorKey)
                + attributes + "&delId=" + linkId + "&refObj=rhizomObj";
  gridBodyLinkDeleteAjax.request(data);
}

// delete functions

function deleteElement(elTmp, datStorKeyTmp, doConfirm) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  if (typeof(doConfirm)!="undefined" && doConfirm == true) {
    confirmModal(deleteElementConfirmed, getLang("confirmdelete"), 160);
  } else {
    deleteElementConfirmed();
  }
}

function deleteElementConfirmed(confirmation) {
  if (confirmation==false) return;
  deleteElementAjax = new ajax();
  deleteElementAjax.successCallback = deleteElementResponse;
  var data = "ajaxAction=deleteElement&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey) 
                     + "&refObj=" + getDatStor("refObj", datStorKey);
  deleteElementAjax.request(data);
}

function deleteElementResponse() {
  var result = deleteElementAjax.getComplexResponse();
  var selType = result.getElementsByTagName('type')[0].childNodes[0].nodeValue;
  if (selType=="emptyselection") {
    gotoLocation(baseLink + "&" + getDatStor("actionBase", datStorKey) + "Action=showList");
  } else {
    nextId    = result.getElementsByTagName('id')[0].childNodes[0].nodeValue;
    nextTable = result.getElementsByTagName('table')[0].childNodes[0].nodeValue;
    addAttrib = "&table=" + encodeURIComponent(nextTable) + "&id=" + nextId;
    gotoLocation(baseLink + addAttrib + "&" + getDatStor("actionBase", datStorKey) + "Action=show");
  }
}

function PageQuery(q) {
  if (q.length > 1) this.q = q.substring(1, q.length);
  else this.q = null;
  this.keyValuePairs = new Array();
  if (q) {
    for(var i=0; i < this.q.split("&").length; i++) {
      this.keyValuePairs[i] = this.q.split("&")[i];
    }
  }
  this.getKeyValuePairs = function() { return this.keyValuePairs; }
  this.getValue = function(s) {
    for (var j=0; j < this.keyValuePairs.length; j++) {
      if (this.keyValuePairs[j].split("=")[0] == s)
      return this.keyValuePairs[j].split("=")[1];
    }
    return false;
  }
  this.getParameters = function() {
    var a = new Array(this.getLength());
    for(var j=0; j < this.keyValuePairs.length; j++) {
      a[j] = this.keyValuePairs[j].split("=")[0];
    }
    return a;
  }
  this.getLength = function() { return this.keyValuePairs.length; }
}

function queryString(key) {
  var page = new PageQuery(window.location.search);
  return unescape(page.getValue(key));
}

function setAnchor() {
  hashValue = queryString("anchor");
  if (hashValue != "false") location.hash = hashValue;
}

function getSelectedText() {
  if (window.getSelection) {
    selectedText = window.getSelection();
  } else if (document.selection) { // should come last; Opera!
    var textRange = document.selection.createRange();
    selectedText = textRange.text;
  }
  return selectedText;
}

function fillDiv(id, value) {
  var el = document.getElementById(id);
  if (value!="") {
    el.style.display = "block";
    el.innerHTML = value;
  } else {
    el.style.display = "none";
  }
}

function stripHTML(string) {
  string = string.replace(new RegExp('<object.*?>(.*?)<\/object>', 'gi'), '');
  string = string.replace(new RegExp('<style.*?>(.*?)<\/style>', 'gi'), '');
  string = string.replace(new RegExp('<script.*?>(.*?)<\/script>', 'gi'), '');
  string = string.replace(new RegExp('<p.*?>(.*?)<\/p>', 'gi'), '{p}$1{/p}');
  string = string.replace(new RegExp('<br.*?>', 'gi'), '{br/}');
  var tmp = string.replace(/(<.*['"])([^'"]*)(['"]>)/g, function(x, p1, p2, p3) { return  p1 + p3;});
  string = tmp.replace(/<\/?[^>]+>/gi, '');   // now remove the tags
  string = string.replace(new RegExp('{p.*?}(.*?){\/p}', 'gi'), '<p>$1</p>');
  string = string.replace(new RegExp('{br\/}', 'gi'), '<br/>');
  return trim(string);
}

function trim(content) {
  return content.replace(/[\n\r]/g, '').replace(/ +/g, ' ').replace(/^\s+/g, '').replace(/\s+$/g, '');
}

// filelistfunctions

function updateFileList(table, id) {
  fileListAjax = new ajax();
  fileListAjax.successCallback = fileListResponse;
  var data = "ajaxAction=fileList&table=" + encodeURIComponent(table) + "&id=" + id + "&refObj=rhizomObj";
  fileListAjax.request(data);
}

function fileListResponse() {
  var result = fileListAjax.getTextResponse();
  document.getElementById('fileList').innerHTML = result;
}

function showCitation(biblio) {
  alertModal(emptyFunction, biblio);
}

// general functions to manage applets

function createAppletHead(appletName) {
  return "<span class='appletHead' onclick=\"hideApplet('" + appletName + "')\">X</span>";
}

function appletDirectPosition(listEl, listWidth) {
  listEl.style.top = getScrollPosY() + clickEventY + "px";
  x = getScrollPosX() + clickEventX - (listWidth/2);
  listEl.style.left = x + "px";
  listEl.style.width = listWidth + "px";
  listEl.style.display = "block";
}

function appletCursorPosition(listEl, listWidth, shiftLeft) {
  if (typeof(shiftLeft)=="undefined") shiftLeft = 0;
  listEl.style.top = String(Number(clickEventY) + 2) + "px";
  listEl.style.left = String(Number(clickEventX) + 6 + shiftLeft) + "px";
  listEl.style.width = listWidth;
  listEl.style.display = "block";
}

function appletPosition(fireEl, listEl, listWidth) {
  elTop = fireEl.style.top.replace(/px/, '');
  listEl.style.top = String(Number(elTop) + 2) + "px";
  elLeft = fireEl.style.left.replace(/px/, '');
  listEl.style.left = String(Number(elLeft) + 6) + "px";
  listEl.style.width = listWidth;
  listEl.style.display = "block";
}

function hideApplet(appletId) {
  document.getElementById(appletId).style.display = "none";
}

// orderList applet functions

function showOrderList(el, table, id, value) {
  orderListFireEl = el;
  orderListAjax = new ajax();
  orderListAjax.successCallback = orderListResponse;
  var data = "ajaxAction=orderList&table=" + encodeURIComponent(table) + "&refObj=rhizomObj"
            + ((typeof(value)!="undefined") ? "&value=" + encodeURIComponent(value) : "&id=" + id);
  orderListAjax.request(data);
}

function orderListResponse() {
  if (!(result = orderListAjax.getSimpleResponse())) return;
  orderList = document.getElementById('orderList');
  orderList.innerHTML = result;
  appletPosition(orderListFireEl, orderList, "200px");
}

function openBibLink(bibLink) {
  countWin = (typeof countWin == "undefined") ? 0 : countWin + 1;
  bibLinkWindow = window.open(bibLink, 'bibWin' + countWin,
         'left=120,top=120,width=1040,height=600,toolbar=1,resizable=1, dependent=1, scrollbars=1, location=1');
  orderList.style.display = "none";
}

// manage the applet for choosing archives

function showArchiveList(el) {
  archiveListFireEl = el;
  archiveListAjax = new ajax();
  archiveListAjax.successCallback = archiveListResponse;
  var data = "ajaxAction=archiveList";
  archiveListAjax.request(data);
}

function archiveListResponse() {
  archiveList = document.getElementById('archiveList');
  archiveList.innerHTML = archiveListAjax.getSimpleResponse();
  appletPosition(archiveListFireEl, archiveList, "160px");
}

function setArchive(archive) {
  setArchiveAjax = new ajax();
  setArchiveAjax.successCallback = locationReload;
  var data = "ajaxAction=userAdmin&field=archive&id=current&storeValue=" + encodeURIComponent(archive);
  setArchiveAjax.request(data);
}

// manage the applet for choosing selection 

function showSelectionList(el) {
  selectionList = document.getElementById('selectionList');
  appletPosition(el, selectionList, "150px;");
}

function setSelectionFromList(sel, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  setSelectionAjax = new ajax();
  setSelectionAjax.successCallback = setSelectionResponse;
  var data = "ajaxAction=setSelection&selection=" + sel + "&refObj=" + getDatStor("refObj", datStorKey);
  setSelectionAjax.request(data);
}

function setSelectionResponse() {
  var result = setSelectionAjax.getComplexResponse();
  nextId    = result.getElementsByTagName('id')[0].childNodes[0].nodeValue;
  nextTable = result.getElementsByTagName('table')[0].childNodes[0].nodeValue;
  if (nextTable=="emptyselection") {
    gotoLocation(baseLink + "&" + getDatStor("actionBase", datStorKey) + "Action=emptyselection");
  } else {
    gotoElement(nextTable, nextId);
  }
}

// manage the applet for translations

function showTranslatorList(el) {
  translatorList = document.getElementById('translatorList');
  appletCursorPosition(translatorList, "150px;", -50);
}

function setTranslatorFromList(state) {
  setTranslatorAjax = new ajax();
  setTranslatorAjax.successCallback = setTranslatorResponse;
  var data = "ajaxAction=setTranslator&translationState=" + state;
  setTranslatorAjax.request(data);
}

function setTranslatorResponse() {
  locationReload();
}

// manage the applet for tagClouds

function createAppletEntry(command, value, transCommand) {
  if (typeof(transCommand)=="undefined") transCommand = getLang(command);
  return "<div class='appletListEntry' "
       + " onclick=\"tagCloudMenuEntry('" + command + "', '" + value + "'); \">"
       + "<span class='appletListText'>" + transCommand + "</span></div>";
}

function tagCloudMenu(fieldTemp, tableTemp, selectedTag, datStorKeyTmp) {
  datStorKey = datStorKeyTmp;
  tagTable = tableTemp; tagField = fieldTemp;
  html = createAppletHead("tagCloudMenu");
  html += createAppletEntry("goto", selectedTag, getLang("gotoWord"));
  html += createAppletEntry("rename", selectedTag, getLang("renameWord"));
  html += createAppletEntry("merge", selectedTag, getLang("mergeWord"));
  html += createAppletEntry("delete", selectedTag, getLang("deleteWord"));
  appletFrame = document.getElementById('tagCloudMenu');
  appletFrame.innerHTML = html;
  appletDirectPosition(appletFrame, 100);
}

function tagCloudMenuEntry(action, oldTagTemp) {
  hideApplet('tagCloudMenu');
  oldTag = oldTagTemp;
  if (action=="merge") {
    tagCloudMergeAjax = new ajax();
    tagCloudMergeAjax.successCallback = tagCloudMergeResponse;
    var data = "ajaxAction=getTagsFromField&table=" + encodeURIComponent(tagTable) + "&field=" + encodeURIComponent(tagField)
               + "&refObj=" + getDatStor("refObj", datStorKey);
    tagCloudMergeAjax.request(data);
  } else if (action=="goto") {
    ajaxSearch("tagSearch", datStorKey, tagTable, tagField, oldTagTemp);
  } else if (action=="delete") {
    confirmModal(renameAllTag, getLang("deleteAsk"));
  } else if (action=="rename") {
    promptModal(renameAllTag, getLang("renameAsk"), oldTag);
  }
}

function tagCloudMergeResponse() {
  if (!(result = tagCloudMergeAjax.getSimpleResponse())) return;
  selectModal(renameAllTag, getLang("mergeAsk"), result);
}

function renameAllTag(newTag) {
  if (newTag==false) return;
  if (newTag==true) newTag = "";
  newLocation = addAttributes(baseLink, "field=" + encodeURIComponent(tagField));
  renameAllTagAjax = new ajax();
  renameAllTagAjax.successCallback = gotoLocation;
  var data = "ajaxAction=renameAllTag"
              + "&table=" + encodeURIComponent(tagTable) + "&field=" + encodeURIComponent(tagField)
              + "&newTag=" + encodeURIComponent(newTag) + "&oldTag=" + encodeURIComponent(oldTag)
              + "&refObj=" + getDatStor("refObj", datStorKey);
  renameAllTagAjax.request(data);
}

// area functions

function openCreateAreaWizard() {
  openPopupWindow('createarea', 'createarea');
}

function createNewArea() {
  var areaName = document.getElementById('areasareaname').value;
  var startPage = document.getElementById('areasstartPage').value;
  var presetArea = document.getElementById('areasareapreset').value;
  createareaAjax = new ajax();
  createareaAjax.successCallback = responseCreateNewArea;
  var data = "ajaxAction=createArea&storeValue=" + areaName + "&startPage=" + startPage + "&presetArea=" + presetArea;
  createareaAjax.request(data);
}

function responseCreateNewArea() {
  if (!(result = createareaAjax.getSimpleResponse())) return;
  if (result.match(/^[0-9]*$/)) {
    gotoLocation("admin.php?areaAction=edit&id=" + result);
  } else {
    alertModal(emptyFunction, result, 200);
    return false;
  }
}

function deleteArea(el, nameTmp, idTmp, addAttribsDummy) {
  areaId = idTmp;
  deleteAreaAjax = new ajax();
  deleteAreaAjax.successCallback = deleteAreaResponse;
  var data = "ajaxAction=getAreaNames&withoutAreaId=" + areaId;
  deleteAreaAjax.request(data);
}

function deleteAreaResponse() {
  if (!(result = deleteAreaAjax.getSimpleResponse())) return;
  selectModal(deleteAreaProcess, getLang("areaReplace"), result);
}

function deleteAreaProcess(replaceArea) {
  gotoLocation("areaAction=delete&id=" + areaId + "&replaceArea=" + replaceArea, true);
}

function choosen() {
  document.getElementById('spanGroup');
  document.getElementById('span' + itemListName[1]).innerHTML
}

// wiki helper functions

function validWikiPageName(pageName) {
  if (pageName == "") {
    alertModal(emptyFunction, getLang('please_notempty_pagename'));
    return false;
  } else if (pageName.length > 100) {
    alertModal(emptyFunction, getLang('please_toolong_pagename'));
    return false;
  } else if (pageName.match(/[\|\;\,\.\:\#\'\"\*\+\(\)\{\}\[\]\&\%\$\§\!\~\<\>\=\?\\\/]/)) {
    alertModal(emptyFunction, getLang('please_nospecial'));
    return false;
  }
  return true;
}

function changeWikiName(elTemp, pageArea, datStorKeyTmp) {
  datStorKey = (typeof(datStorKeyTmp) != "undefined") ? datStorKeyTmp : "";
  el = elTemp;
  valid = validWikiPageName(el.value);
  if (valid==false) {
    return false;
  } else {
    renamePageAjax = new ajax();
    renamePageAjax.successCallback = renamePageResponse;
    var data = "ajaxAction=testPageExistence&name=" + encodeURIComponent(el.value) 
                                         + "&pageArea=" + encodeURIComponent(pageArea);
    renamePageAjax.request(data);
  }
}

function renamePageResponse() {
  if (!(result = renamePageAjax.getSimpleResponse())) return;
  if (result == "OK") {
    ajaxFormChange(el, "input", el.lang, '', '', datStorKey);
  } else {
    alertModal(emptyFunction, result, 200);
    return false;
  }
}

// open and save pages

function editPage(pageNameNSTemp) {
  pageNameNS = pageNameNSTemp;
//  editPageAjax = new ajax();
//  editPageAjax.successCallback = responseEditPage;
  gotoWikiPage(pageNameNS, "&action=edit");
}

function responseEditPage() {
  if (!(result = editPageAjax.getSimpleResponse())) return;
  if (result=='TRUE') {
    alertModal(emptyFunction, getLang("isBlocked", 200));
  } else {
    gotoWikiPage(pageNameNS, "&action=edit");
  }
}

// delete pages

function setPageCurrent(pageId, versionId) {
  setcurrentPageAjax = new ajax();
  setcurrentPageAjax.successCallback = responseSetcurrentPage;
  var data = "ajaxAction=setPageCurrent&pageId="+ pageId + "&versionId=" + versionId;
  setcurrentPageAjax.request(data);
}

function responseSetcurrentPage() {
  if (!(pageName = setcurrentPageAjax.getSimpleResponse())) return;
  gotoWikiPage(pageName);
}

function deletePage(text, pageIdTemp, versionIdTemp) {
  pageId = pageIdTemp;
  versionId = (typeof(versionIdTemp) != "undefined") ? versionIdTemp : "";
  confirmModal(deletePageConfirmed, text);
}

function deletePageConfirmed(result) {
  if (result==false) return false;
  deletePageAjax = new ajax();
  deletePageAjax.successCallback = responseDeletePage;
  var data = "ajaxAction=deletePage&pageId=" + pageId + "&versionId=" + versionId;
  deletePageAjax.request(data);
}

function responseDeletePage() {
  if (!(pageName = deletePageAjax.getSimpleResponse())) return;
  gotoWikiPage(pageName);
}

// wiki page name funktions

function pageNamesSelection() {
  var area = document.getElementById('selectLinkArea').value;
  var category = document.getElementById('selectLinkCategory').value;
  if (category=="group" || category=="user") {
    area = "standardArea";
    setPreSelection("selectLinkArea", "standardArea");
  }
  if (area=="thisarea") {
    area = document.getElementById('basePageArea').value;
  }
  changeSelectionContent("getPageNames", "selectLink", "&area=" + area + "&category=" + category);
}

function splitPageNameNS(pageNameNS) {
  matches = pageNameNS.match(/^([^\:\:]*?)\:\:(.*)$/);
  return (matches) ? matches : false;
}

function formatPageNameNS(pageNameNS) {
  if (matches = splitPageNameNS(pageNameNS)) {
    return matches[2] + " (" + matches[1] + ")";
  } else {
    return pageNameNS;
  }
}

// page buttons functions

function printVersion(pageName) {
  printWindow = window.open("wiki.php?wiki=" + encodeURIComponent(pageName) + "&action=print", "print", "top=20,left=20,width=900,height=600,menubar=yes,scrollbars=yes");
  printWindow.focus();
}

function openPageOptions(pageId) {
  openPopupWindow("pageOptions2", "pageOptions", "pageId=" + pageId);
}

function openPageVersions(pageId) {
  openPopupWindow("pageVersions", "pageVersions", "pageId=" + pageId);
}

function openRelatedPages(pageId) {
  openPopupWindow("relatedPages", "relatedPages", "pageId=" + pageId);
}

// process bookmarks

function bookmark(pageName) {
  bookmarkAjax = new ajax();
  bookmarkAjax.successCallback = responseBookmark;
  var data = "ajaxAction=bookmark&page=" + encodeURIComponent(pageName);
  bookmarkAjax.request(data);
}

function responseBookmark() {
  if (!(result = bookmarkAjax.getSimpleResponse())) return;
  var iconButton = document.getElementById("bookmarkIconButton");
  var textButton = document.getElementById("bookmarkTextButton");
  if (result=="added") {
    if (iconButton) {
      iconButton.firstChild.src = urlIcons + "bookmark_add.png";
    } else if (textButton) {
      var bookmarkHint = document.createElement("img");
      bookmarkHint.id = "bookmarkHint";
      addClass(bookmarkHint, 'bookmarkHint');
      setSrc(bookmarkHint, "bookmark-set.png");
      textButton.appendChild(bookmarkHint);
    }
  } else {
    if (iconButton) {
      setSrc(iconButton.firstChild, "bookmark.png");
    } else {
      var eleme = document.getElementById("bookmarkHint");
      eleme.parentNode.removeChild(eleme);
    }
  }
}

// process commments

function writeComment(pageId) {
  openPopupWindow('writeComment', 'writeComment', 'pageId=' + pageId);
}

function saveComment() {
  top.alertContentSaveFlag = false;
  var ed = tinyMCE.get('comment');
  commentSaveAjax = new ajax();
  commentSaveAjax.successCallback = commentSaveResponse;
  var data = "ajaxAction=addComment&pageId=" + encodeURIComponent(top.pageId) + "&storeValue=" +  encodeURIComponent(ed.getContent());
  commentSaveAjax.request(data);
}

function commentSaveResponse() {
  var  result = commentSaveAjax.getComplexResponse();
  try {
    var pageName = nodeContent(result, 'pageName');
  } catch (e) { pageName = ""; };
  try {
    var commentId = nodeContent(result, 'commentId');
  } catch (e) { commentId = ""; };
    gotoWikiPage(pageName, "&showComments=true&anchor=" + commentId);
}

function deleteComment(pageId, commentId) {
  deleteCommentAjax = new ajax();
  deleteCommentAjax.successCallback = responseDeleteComment;
  var data = "ajaxAction=deleteComment&pageId=" + pageId + "&commentId=" + commentId;
  deleteCommentAjax.request(data);
}

function responseDeleteComment() {
  if (!(pageName = deleteCommentAjax.getSimpleResponse())) return;
  gotoWikiPage(pageName);
}

// other wiki functions

function wikiLink(pageName, addArguments) {
  var pageName = pageName.replace(/&#039;/, "\'");
  if (typeof(addArguments)=="undefined") addArguments = "";
  gotoWikiPage(pageName, addArguments);
}

function wikiIdLink(pageId, addArgumentsTemp, addAnchorTemp) {
  addArguments = (typeof(addArgumentsTmp)=="undefined") ? "" : addArgumentsTemp;
  addAnchor = (typeof(addAnchorTmp)=="undefined") ? "" : addAnchorTemp ;
  namefromIdAjax = new ajax();
  namefromIdAjax.successCallback = responseNamefromId;
  var data = "ajaxAction=getNameFromId&pageId=" + pageId;
  namefromIdAjax.request(data);
}

function responseNamefromId() {
  if (!(pageName = namefromIdAjax.getSimpleResponse())) return;
  gotoWikiPage(pageName, addArguments, addAnchor);
}

function createPage(pageName, refPageIdTmp, categoryTmp, areaTmp) {
  refPageId = (typeof(refPageIdTmp)=="undefined") ? "" : refPageIdTmp
  category = (typeof(categoryTmp)=="undefined") ? "" : categoryTmp;
  area = (typeof(areaTmp)=="undefined") ? "" : areaTmp;
  newPageName = pageName;
  newpageAjax = new ajax();
  newpageAjax.successCallback = createPageResponse;
  var data = "ajaxAction=createPage&storeValue=" + encodeURIComponent(newPageName)
           + "&category=" + category + "&refPageId=" + refPageId + "&area=" + area;
  newpageAjax.request(data);
}

function createPageResponse() {
  if (!(response = newpageAjax.getSimpleResponse())) return;
  if (!isNaN(response)) {
    wikiIdLink(response);
  } else {
    alertModal(emptyFunction, response, 200);
  }
}

// load later functions

function loadTags(field, id, datStorKey) {
  fillTagsId = id;
  fillTagsAjax = new ajax();
  fillTagsAjax.successCallback = loadTagsResponse;
  var data = "ajaxAction=loadTags&field=" + field + "&refObj=" + getDatStor("refObj", datStorKey);
  fillTagsAjax.request(data);
}

function loadTagsResponse() {
  fillTagsEl = document.getElementById(fillTagsId);
  filled = fillTagsAjax.getTextResponse();
  fillTagsEl.innerHTML = filled;
}

function verifyEmail(string) {
  var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
  return (string.search(emailRegEx) == -1) ? false : true;
}

// rhizom functions

function rhizomatFormChange() {
  if (document.getElementById('browseEl')!=null) {
    updateBiblioAjax = new ajax();
    updateBiblioAjax.successCallback = updateBiblioAjaxResponse;
    var data = "ajaxAction=updateBiblio&refObj=" + getDatStor("refObj", datStorKey) + "&datStorKey=" + datStorKey
             + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey);
    updateBiblioAjax.request(data);
  }
  if (document.getElementById('stampEl')!=null) {
    updateDataAjax = new ajax();
    updateDataAjax.successCallback = updateDataAjaxResponse;
    var data = "ajaxAction=updateData&refObj=" + getDatStor("refObj", datStorKey) 
             + "&table=" + encodeURIComponent(getDatStor("table", datStorKey)) + "&id=" + getDatStor("id", datStorKey);
    updateDataAjax.request(data);
  }
}

function updateDataAjaxResponse() {
  var  result = updateDataAjax.getComplexResponse();
  try {
    document.getElementById('stampEl').innerHTML = nodeContent(result, 'stamp');
  } catch (e) {};
}

function updateBiblioAjaxResponse() {
  var  result = updateBiblioAjax.getComplexResponse();
  try {
    document.getElementById('browseEl').innerHTML = nodeContent(result, 'biblio');
  } catch (e) {};
  try {
    document.getElementById('labelEl').innerHTML = nodeContent(result, 'label');
  } catch (e) {};
  try {
    document.getElementById('placeholderEl').innerHTML = nodeContent(result, 'placeholder');
  } catch (e) {};
}

function rhizomatElementLink(el, id, type) {
  elementLinkAjax = new ajax();
  elementLinkAjax.successCallback = elementLinkAjaxResponse;
  var data = "ajaxAction=rhizomatElementLink&id=" + id + "&type=" + type + "&addId=" + el.value + "&refObj=rhizomObj";
  elementLinkAjax.request(data);
}

function elementLinkAjaxResponse() {
  locationReload();
}

function updateField() {
  field = updateFieldField;
  updateFieldEl = document.getElementById(datStorKey + field)
  updateFieldAjax = new ajax();
  updateFieldAjax.successCallback = updateFieldAjaxResponse;
  var data = "ajaxAction=updateField&refObj=" + getDatStor("refObj", datStorKey) + "&datStorKey=" + datStorKey
             + "&table=literature&field=" + field + "&id=" + getDatStor("id", datStorKey);
  updateFieldAjax.request(data);
}

function updateFieldAjaxResponse() {
  var result = updateFieldAjax.getSimpleResponse();
  updateFieldEl.value = result;
}

function validateLitEntry(idTmp, trueBaseTmp, falseBaseTmp, datStorKeyTmp) {
  datStorKey = datStorKeyTmp;
  trueBase = trueBaseTmp; falseBase = falseBaseTmp; id = idTmp;
  validateLitAjax = new ajax();
  validateLitAjax.successCallback = validateLitEntryResponse;
  var data = "ajaxAction=validateLit&id=" + id + "&refObj=rhizomObj";
  validateLitAjax.request(data);
}

function validateLitEntryResponse() {
  var result = validateLitAjax.getSimpleResponse();
  if (result=="OK") {
    toolShowId();
  } else {
    var addData = validateLitAjax.getComplexResponse();
    confirmModal(validateLitProcess, nodeContent(addData, 'message'));
  }
}

function validateLitProcess(value) {
  if (value==false) {
    toolShowId();
  }
}

// babylon functions

function gotoBabylonKey(datStorKeyTmp, language) {
  datStorKey = datStorKeyTmp;
  langKey = document.getElementById(datStorKey + 'key').value;
  context = document.getElementById(datStorKey + 'context').value;
  babylonKeyAjax = new ajax();
  babylonKeyAjax.successCallback = gotoBabylonKeyResponse;
  var data = "ajaxAction=babylonLoadKey&key=" + langKey + "&language=" + language
                                    + "&context=" + context + "&refObj=langModObj";
  babylonKeyAjax.request(data);
}

function gotoBabylonKeyResponse() {
  id = babylonKeyAjax.getSimpleResponse();
  gotoLocation(getDatStor("actionBase", datStorKey) + "Action=edit&id=" + id, true);
}


// message and email functions

function sendaTestmail() {
  openPopupWindow('sendTestmail', 'sendTestmail');
}

function changeMailMode() {
  mailMode = document.getElementById('adminOptMailmailMode').value;
  setDisplayMode("none", "sendmailPath,smtpHost,smtpPort,smtpUser,smtpSecure", "adminOptMail");
  setDisplayMode("none", "smtpPass");
  if (mailMode=="sendmail") {
    setDisplayMode("block", "sendmailPath", "adminOptMail");
  } else {
    setDisplayMode("block", "smtpHost,smtpPort,smtpUser,smtpSecure", "adminOptMail");
    setDisplayMode("inline", "smtpPass");
  }
}

function messageForm(name, table, elementId, addArguments, path) {
  if (typeof(addArguments)=="undefined") addArguments = "";
  openPopupWindow('messageForm', 'messageForm', '&table=' + table + '&id=' + elementId + '&path=' + path + addArguments);
}

function sendMessageForm(targetTmp, pathTmp) {
  path = (typeof(pathTmp)!="undefined") ? pathTmp : "";
  newLocation = (typeof(targetTmp)!="undefined") ? targetTmp : "";
  sendMessageFormAjax = new ajax();
  sendMessageFormAjax.successCallback = sendMessageResponse;
  messageId = document.getElementById("messageId").value;
  var data = "ajaxAction=editField&table=messages&field=messageBody&id=" + messageId
                       + "&storeValue=" + encodeURIComponent(document.getElementById("messageBody").value);
  sendMessageFormAjax.request(data);
}

function sendMessageResponse() {
  messageReport(messageId, newLocation);
}

function messageReport(idTmp, targetTmp, pathTmp, targetAddTmp) {
  path = (typeof(pathTmp)!="undefined") ? pathTmp : path;
  newLocation = (typeof(targetTmp)!="undefined") ? targetTmp : "";
  targetAdd = (typeof(targetAddTmp)!="undefined") ? targetAddTmp : "";
  try {
    closeWin('messageForm');
  } catch(e) {}
  openPopupWindow("messageReport", "messageReport", "id=" + idTmp + "&target=" + encodeURIComponent(newLocation) + "&path=" + encodeURIComponent(path) + "&targetAdd=" + encodeURIComponent(targetAdd));
}

// embed media functions

function writeFlash(p) {
  writeEmbed(
    'D27CDB6E-AE6D-11cf-96B8-444553540000',
    'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
    'application/x-shockwave-flash',
  p
  );
}

function writeEmbed(cls, cb, mt, p) {
  var h = '', n;

  h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
  h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
  h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
  h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
  h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
  h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
  h += '>';
  for (n in p) h += '<param name="' + n + '" value="' + p[n] + '">';
  h += '<embed type="' + mt + '"';
  for (n in p) h += n + '="' + p[n] + '" ';
  h += '></embed></object>';
  document.write(h);
}

function monitorSendmailRefresh(maxTime) {
  var sendmailMonitor = document.getElementById('sendmailMonitor');
  sendmailMonitor.contentWindow.location.reload(true);
}

