/**
* (c) InfoProjects bv. - www.infoprojects.nl
*
* $Revision: 1.193 $
* $Date: 2011/08/23 07:49:00 $
*/


var formDirty = false;         // minstens 1 field dirty
var formValid = false;         // all required fields
var originals = new Object();  // initiele formwaarden
var requiredFields = new Array();   // formelements
var requiredLabels = new Object();  // formelements, labels
var inputMaskFields = new Array();   // input mask fields
var inputMaskValues = new Object();  // input masks
var inputMaskCleaners = new Object();  // input mask cleaners
var enableElements = new Object();  // elements to enable when form is valid
var disableSaveOnNotDirty = false;
var pageElements = new Array();
var xmlData = new Object();
var reqMessaging = false;
/*
var xmlData        = new ActiveXObject("Microsoft.XMLDOM");
xmlData.setProperty("SelectionLanguage", "XPath");
*/
var currentEditorName = "";

var reqString = "";
var confirmTimer;
var confirmStyle;

var maxTrfReached = "";
var trfAlreadyChosen = "";

/**
*
* Create new form element with specified attributes in specified Form
*
* @param Form    Form to create element in
* @param Doc    document to create element in
* @param elName   Name of created element
* @param elType   Type of created element
* @param elValue  Value of created element
* @param elProps  Array of special attributes for element
*
*/

function addFormElement(elName, elType, elValue, elProps, Form, Doc) {
  var theForm = Form ? Form : document.forms[0];
  var theDoc = Doc ? Doc : document;
  if (elType == "textarea") {
    var newEl = theDoc.createElement("TEXTAREA");

    elCols = elProps ? elProps[0] : "20";
    elRows = elProps ? elProps[1] : "10";

    newEl.setAttribute("name", elName);
    newEl.setAttribute("id", elName);
    newEl.setAttribute("cols", elCols);
    newEl.setAttribute("rows", elRows);
    newEl.setAttribute("value", elValue);
    theForm.appendChild(newEl);
  }
  else if (elType == "text" || elType == "password" || elType == "hidden") {
    var newEl = theDoc.createElement("INPUT");
    newEl.setAttribute("name", elName);
    newEl.setAttribute("id", elName);
    newEl.setAttribute("type", elType);
    newEl.setAttribute("value", elValue);
    if (elProps) {
      newEl.setAttribute("cluster", elProps);
      newEl.setAttribute("dirty", "true");
    }
    theForm.appendChild(newEl);
  }
  else if (elType == "checkbox" || elType == "radio") {
    var newEl = theDoc.createElement("INPUT");

    elChecked = elProps ? true : false;

    newEl.setAttribute("name", elName);
    newEl.setAttribute("id", elName);
    newEl.setAttribute("type", elType);
    newEl.setAttribute("value", elValue);
    newEl.setAttribute("checked", elChecked);
    theForm.appendChild(newEl);
  }
}

function makeFormElement(elName, elType, elValue, elProps, Form, Doc) {
  var theForm = Form ? Form : document.forms[0];
  var theDoc = Doc ? Doc : document;

  if (!theForm.elements[elName]) {
    addFormElement(elName, elType, elValue, elProps, Form, Doc);
  }
  else {
    var theEl = theForm.elements[elName];
    if (elType == "checkbox" || elType == "radio") {
      elChecked = elProps ? true : false;
      theEl.checked = elChecked;
    }
    else {
      if (elProps) {
        if (theEl.setAttribute) {
          theEl.setAttribute('dirty', 'true');
        } else {
          theEl.dirty = "true";
        }
      }
      theEl.value = elValue;
    }
  }
}

function removeFormElement(elName, Form, Doc) {
  theForm = Form ? Form : document.forms[0];
  theDoc = Doc ? Doc : document;
  theEl = theForm.elements[elName];

  var myParent = theEl.parentNode;
  myParent.removeChild(theEl);
}

function restoreOriginalValues(form, doc) {
  var theDoc = doc || document;
  var theForm = form || theDoc.forms[0];
  for (var name in originals) {
    var theEls = theForm.elements[name];
    var obj = theEls ? theEls.length ? theEls[0] : theEls : null;
    if (!obj) {
      continue;
    }
    else if (obj.type == "text" || obj.type == "textarea" || obj.type == "password" || obj.type == "select-one") {
      obj.value = originals[name];
    }
    else if (obj.type == "checkbox") {
      obj.checked = (originals[name] == obj.value);
    }
    else if (obj.type == "radio") {
      for (var j = 0; j < theEls.length; j++) {
        theEls[j].checked = theEls[j].value == originals[name];
      }
    }
  }
}

function clearFormElements(theForm, elId) {
  var formEltNum = theForm.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = theForm.elements[i];
    if (obj.id == elId && obj.type != "checkbox") obj.value = "";
    else if (obj.id == elId && obj.type == "checkbox") obj.checked = false;
  }
}

function clearClusterElements(theForm, clusterId) {
  var formEltNum = theForm.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = theForm.elements[i];
    if (obj.getAttribute("cluster") && obj.getAttribute("cluster") == clusterId && obj.type != "checkbox") obj.value = "";
    else if (obj.getAttribute("cluster") && obj.getAttribute("cluster") == clusterId && obj.type == "checkbox") obj.checked = false;
  }
}

function checkClusterDirty(form) {
  var clusterDirty = new Object();
  var formEltNum = form.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    // evaluate all form elements on dirtyness
    var obj = form.elements[i];

    if ((obj.name != "" && obj.type != "hidden" && obj.getAttribute("cluster")) || obj.getAttribute('dirty') + "" == "true") {
      if (isDirty(obj)) {
        clusterDirty[obj.getAttribute("cluster")] = true;
      }
    }
  }
  return clusterDirty;
}

function addFormToArray(form, returnObject, clusterDirty, returnArray, multiCluster) {
  var form = form ? form : document.forms[0];
  var returnObject = returnObject ? returnObject : new Object();
  var clusterDirty = clusterDirty ? clusterDirty : checkClusterDirty(form);
  var returnArray = returnArray ? returnArray : new Array();

  var formEltNum = form.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    // create definitive return array
    var obj = form.elements[i];
    var n = obj.name;

    applyMaxLength(obj);

    if (obj.type == "checkbox") v = (obj.checked ? obj.value : (obj.value == "1" ? "0" : ""));
    else if (obj.type == "select-one" && obj.selectedIndex > -1) v = obj.options[obj.selectedIndex].value;
    else v = obj.value;
    if (n && obj.getAttribute("cluster") && !returnObject[n]) {
      if (clusterDirty[obj.getAttribute("cluster")] && (obj.type == "text" || obj.type == "password")) {
        if (v == "" && form.elements[obj.getAttribute("cluster") + ".$action"] && (form.elements[obj.getAttribute("cluster") + ".$action"].value == "edit" || form.elements[obj.getAttribute("cluster") + ".$action"].value == "make")) {
          v = "";
        }
        if (v != null) {
          returnArray[returnArray.length] = n;
          returnArray[returnArray.length] = v;
        }
      }
      else if (clusterDirty[obj.getAttribute("cluster")] && obj.type == "select-one") {
        if (v == "" && form.elements[obj.getAttribute("cluster") + ".$action"] && (form.elements[obj.getAttribute("cluster") + ".$action"].value == "edit" || form.elements[obj.getAttribute("cluster") + ".$action"].value == "make")) {
          v = "";
        }
        if (v != null) {
          returnArray[returnArray.length] = n;
          returnArray[returnArray.length] = v;
        }
      }
      else if (clusterDirty[obj.getAttribute("cluster")] && obj.type == "radio") {
        if (obj.checked) {
          returnArray[returnArray.length] = n;
          returnArray[returnArray.length] = v;
        }
      }
      else if (clusterDirty[obj.getAttribute("cluster")] && obj.type == "checkbox") {
        if (form.elements[obj.name].length && form.elements[obj.name][1].type == "text") obj.disabled = true;
        else if (form.elements[obj.name].length && obj.checked && form.elements[obj.name][1].type != "text") {
          var inMultiCheckbox = false;
          for (var j = 0; j < returnArray.length - 1; j += 2) {
            if (returnArray[j] == n) {
              returnArray[j + 1] += "," + v;
              inMultiCheckbox = true;
            }
          }
          if (!inMultiCheckbox) {
            returnArray[returnArray.length] = n;
            returnArray[returnArray.length] = v;
          }
        }
        else if (obj.checked) {
          returnArray[returnArray.length] = n;
          returnArray[returnArray.length] = v;
        }
      }
      else if (clusterDirty[obj.getAttribute("cluster")] && obj.type != "textarea" && v != "") {
        returnArray[returnArray.length] = n;
        returnArray[returnArray.length] = v;
      }
      else if (clusterDirty[obj.getAttribute("cluster")] && obj.type == "textarea") {
        disableFieldIfEmpty = true;
        if (obj.name.indexOf(".Def") != -1 && (!obj.value || (/^\s*null\s*$/i).test(obj.value))) {
          v = '';
          disableFieldIfEmpty = false;
        }
        else if (obj.className == "imgCode") {
          v = stripRoot(v);
          if (v.indexOf('">') == v.length - 2) {
            v = v.replace('">', '"/>');
          }
          v = "<span>" + v + "</span>";
        }
        if (!(/\bggvtyp-21\b/).test(obj.className || "")) {
          if (obj.name.indexOf(".Def") != -1) {
            v = v ? ensureRoot(fixPaths(v, ""), "div") : "";
          }
          else {
            v = v ? ensureRoot(fixPaths(v, "")) : "";
          }
        }
        obj.disabled = (disableFieldIfEmpty && v == "");
        if (!obj.disabled) {
          returnArray[returnArray.length] = n;
          returnArray[returnArray.length] = v;
        }
      }
    }
    else if (n && !returnObject[n]) {
      if (v && v.charAt(0) == '<' && v.charAt(v.length - 1) == '>' && n.substring(n.length - 4) == ".Txt") {
        v = ensureRoot(v);
      }
      returnArray[returnArray.length] = n;
      returnArray[returnArray.length] = v;
    }
  }
  return returnArray;
}

/**
*
* Call from dialog to pass dialog Form elements to Form elements and submit it
*
* @param returnArray  Array of name-value pairs for elements
*
*/

function returnDialogResults(returnArray, blockSubmit, isSilent, target, form, doc) {
  var submitArray = new Array();
  var curDoc = doc ? doc : document;
  var curForm = form ? form : curDoc.forms[0];
  curForm.method = "post";

  top.closeDialog(top.currentDialogID);

  if (isSilent || target != "self") {
    target = (target != "self" && target) ? target : "SilentFrame";
    for (var i = 0; i < returnArray.length - 1; i += 2) {
      addFormElement(returnArray[i], "hidden", returnArray[i + 1], false, getFrameDocument(target).forms[0], getFrameDocument(target));
    }
    getFrameDocument(target).forms[0].submit();
  }
  else {
    for (var i = 0; i < returnArray.length - 1; i += 2) {
      var n = returnArray[i];
      var v = returnArray[i + 1];
      var element = curForm.elements[n];
      if (element && n != "submit") {
        element.value = v;
        if (element.setAttribute) {
          element.setAttribute('dirty', 'true');
        } else {
          element.dirty = "true";
        }
        try {
          if (element.getAttribute && element.getAttribute('onchange') || !element.getAttribute && element.onchange) {
            element.onchange();
          }
        } catch (e) {
          alert(e);
        }
        if (element.type == "button") element.style.backgroundColor = "#ffcc00";
        if (element.type == "checkbox") element.checked = true;
      }
      else if (n != "submit") {
        addFormElement(n, "hidden", v, null, curForm, curDoc);
      }

      if (n.indexOf(".$action") != -1) {
        submitArray[submitArray.length] = n;
        submitArray[submitArray.length] = v;
      }
    }
    if (!blockSubmit) {
      submitForm(submitArray);
    }
    else {
      if (top.parentDialogWin && top.parentDialogWin.checkForm) {
        try {
          (top.parentDialogWin).checkForm();
        } catch (e) {
          checkForm();
        }
      } else {
        checkForm();
      }
    }
  }
}

/**
*
* Submit the form after Form has been updated with elements
*
* @param arguments Name-value pairs for elements
*
*/

var submitBusy = false;
function submitForm() {
  submitBusy = true;
  submitArray = (submitForm.arguments.length && typeof (submitForm.arguments[0]) == "object") ? submitForm.arguments[0] : submitForm.arguments;
  setTrafficStatus(true);

  var clusterDirty = checkClusterDirty(document.forms[0]);

  for (var i = 0; i < submitArray.length - 1; i += 2) {
    if (document.forms[0].elements[submitArray[i]]) {
      document.forms[0].elements[submitArray[i]].value = submitArray[i + 1];
    }
    else {
      addFormElement(submitArray[i], "hidden", submitArray[i + 1]);
    }
    if (submitArray[i].indexOf(".$action") != -1) {
      clusterDirty[submitArray[i].substring(0, submitArray[i].indexOf(".$action"))] = true;
    }
  }

  tagsAllowed = new Array(".*"); attributesAllowed = new Array(".*:.*");

  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];

    applyMaxLength(obj);

    if (obj.name == "") obj.disabled = true;
    else if (obj.getAttribute("cluster")) {
      obj.disabled = false;
      if (!clusterDirty[obj.getAttribute("cluster")]) obj.disabled = true;
      else if (obj.type == "select-multiple") {
        v = new Array();
        for (var j = 0; j < obj.options.length; j++) {
          v[v.length] = obj.options[j].value;
        }
        addFormElement(obj.name, "hidden", v.join(","));
        obj.disabled = true;
      }
      else if (obj.type == "radio" && document.forms[0].elements[obj.name].length) {
        v = new Array();
        var oneRadioChecked = false;
        for (var j = 0; j < document.forms[0].elements[obj.name].length && !oneRadioChecked; j++) {
          if (document.forms[0].elements[obj.name][j].checked && document.forms[0].elements[obj.name][j].value != '') oneRadioChecked = true;
        }
        if (!oneRadioChecked) obj.disabled = true;
      }
      else if (obj.type == "checkbox") {
        if (getAllElts(obj.name).length) obj.disabled = true;
      }
      else if (obj.type == "textarea" && (obj.className == "htmlCode" || obj.className == "imgCode" || obj.name.indexOf(".Def") != -1)) {
        if (obj.className == "imgCode" || obj.name.indexOf(".Def") != -1) {
          var htmlValue = fixPaths(obj.value, "");
          obj.value = htmlValue != "<span></span>" ? htmlValue : "";
          obj.disabled = obj.value == "";
        }
        else {
          var htmlValue = fixPaths(obj.value, "");
          obj.value = htmlValue;
        }
      }
      else if ((obj.type == "text" || obj.type == "password") && !getAllElts(obj.name).length) {
        if (obj.value == "" && document.forms[0].elements[obj.getAttribute("cluster") + ".$action"] && document.forms[0].elements[obj.getAttribute("cluster") + ".$action"].value == "edit" && isDirty(obj)) {
          obj.value = "";
        }

        if (obj.value == "" && document.forms[0].elements[obj.getAttribute("cluster") + ".$action"] && document.forms[0].elements[obj.getAttribute("cluster") + ".$action"].value == "delete" && isDirty(obj)) {
          obj.value = "";
          obj.disabled = true;
        }
        else if (obj.value == "" && !isDirty(obj)) obj.disabled = true;
      }
    }
  }
  window.setTimeout('doSubmit()', 100);
}

function applyMaxLength(obj) {
  if (obj.maxLength && parseInt(obj.maxLength, 10) > 0) {
    var cur_val = obj.value;
    if (cur_val.length > parseInt(obj.maxLength, 10)) {
      obj.value = cur_val.substring(0, parseInt(obj.maxLength, 10));
      if (obj.setAttribute) {
        obj.setAttribute('dirty', 'true');
      } else {
        obj.dirty = "true";
      }
    }
  }
}

var liveTimer;
var togTimer;
var mnuTimer;
var msgTimer;

function doSubmit() {
  if (liveTimer) clearTimeout(liveTimer);
  if (togTimer) clearTimeout(togTimer);
  if (mnuTimer) clearTimeout(mnuTimer);
  if (msgTimer) clearTimeout(msgTimer);

  document.forms[0].submit();
}


/**
*
* Submit only elements
*
* @param arguments Name-value pairs for elements
*
*/

function submitNew() {
  submitBusy = true;
  submitArray = submitNew.arguments;

  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    document.forms[0].elements[i].disabled = true;
  }

  for (var i = 0; i < submitArray.length - 1; i += 2) {
    if (document.forms[0].elements[submitArray[i]]) {
      document.forms[0].elements[submitArray[i]].disabled = false;
      document.forms[0].elements[submitArray[i]].value = submitArray[i + 1];
    }
    else {
      addFormElement(submitArray[i], "hidden", submitArray[i + 1]);
    }
  }
  document.forms[0].submit();
}


function disableAHrefsAndEmptyLangBlocks(xHTML) {
  xmlData = loadXML("<span>" + xHTML + "</span>");
  var aHrefs = SelectNodes(xmlData, "//a[@href]");
  for (var i = 0; i < aHrefs.length; i++) {
    theLink = aHrefs[i];
    theLink.setAttribute("onclick", "return false;");
  }
  var emptyLangBlocks = SelectNodes(xmlData, "//*[not(@lang) and @class='langBlock']");
  for (var i = 0; i < emptyLangBlocks.length; i++) {
    theBlk = emptyLangBlocks[i];
    theBlk.removeAttribute("class");
  }
  return stripRoot(getXML(xmlData), "span");
}


/**
*
* strips path to filename and prefixes it with specified path
*
* @param xHTML      XHTML code
*        prefixPath path to put before filename
*
* @return string fixed path
*/

var formUrlPrefixes = new Array("http://", "https://", "file://", "ftp://", "mailto:", "mms://");
function fixPaths(xHTML, prefixPath) {
  xmlData = loadXML("<span>" + xHTML + "</span>");
  var imgs = SelectNodes(xmlData, "//img");
  for (var i = 0; i < imgs.length; i++) {
    theImg = imgs[i];
    theType = theImg.getAttribute("type") ? theImg.getAttribute("type") : "pages";
    theId = theImg.getAttribute("id") ? theImg.getAttribute("id") : pagIdt;
    theSrc = theImg.getAttribute("src");
    theSrc = theSrc.substring(theSrc.lastIndexOf('\\') + 1, theSrc.length);
    theSrc = theSrc.substring(theSrc.lastIndexOf('/') + 1, theSrc.length);
    theSrc = theSrc.toLowerCase();
    fixedPath = (prefixPath != "") ? (prefixPath + theType + "/" + theId + "/" + theSrc) : theSrc;
    theImg.setAttribute("type", theType);
    theImg.setAttribute("id", theId);
    theImg.setAttribute("src", fixedPath);
    if (theImg.getAttribute("style") && theImg.getAttribute("marginTop")) {
      theImg.removeAttribute("style");
    }
  }
  var emptyLangBlocks = SelectNodes(xmlData, "//span[not(@lang) and @class='langBlock']");
  for (var i = 0; i < emptyLangBlocks.length; i++) {
    theBlk = emptyLangBlocks[i];
    theBlk.removeAttribute("class");
  }
  var links = SelectNodes(xmlData, "//a[@href and @class='flashMovie']");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theType = theLink.getAttribute("type") ? theLink.getAttribute("type") : "pages";
    theId = theLink.getAttribute("id") ? theLink.getAttribute("id") : pagIdt;
    theHref = theLink.getAttribute("href");
    theHref = theHref.substring(theHref.lastIndexOf('\\') + 1, theHref.length);
    theHref = theHref.substring(theHref.lastIndexOf('/') + 1, theHref.length);
    theHref = theHref.toLowerCase();
    fixedPath = (prefixPath != "") ? (prefixPath + theType + "/" + theId + "/" + theHref) : theHref;
    theLink.setAttribute("type", theType);
    theLink.setAttribute("id", theId);
    theLink.setAttribute("href", fixedPath);
  }
  var links = SelectNodes(xmlData, "//a[@href and @class='importLink']");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theType = theLink.getAttribute("type") ? theLink.getAttribute("type") : "pages";
    theId = theLink.getAttribute("id") ? theLink.getAttribute("id") : pagIdt;
    theHref = theLink.getAttribute("href");
    theHref = theHref.substring(theHref.lastIndexOf('\\') + 1, theHref.length);
    theHref = theHref.substring(theHref.lastIndexOf('/') + 1, theHref.length);
    theHref = theHref.toLowerCase();
    fixedPath = (prefixPath != "") ? (prefixPath + theType + "/" + theId + "/" + theHref) : theHref;
    theLink.setAttribute("type", theType);
    theLink.setAttribute("id", theId);
    theLink.setAttribute("href", fixedPath);
  }
  var links = SelectNodes(xmlData, "//a[@href and @class='siteLink']");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theHref = theLink.getAttribute("href");
    theHref = theHref.substring(theHref.lastIndexOf('\\') + 1, theHref.length);
    theHref = theHref.substring(theHref.lastIndexOf('/') + 1, theHref.length);
    theLink.setAttribute("href", theHref);
  }
  var links = SelectNodes(xmlData, "//a[@href and @class='internLink']");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theHref = theLink.getAttribute("href");
    theHref = theHref.substring(theHref.lastIndexOf('#'), theHref.length);
    theLink.setAttribute("href", theHref);
  }
  var links = SelectNodes(xmlData, "//a[@href and @class='externLink']");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theHref = theLink.getAttribute("href");
    var theHrefArgs = "";
    for (var fixInd = 0; fixInd < formUrlPrefixes.length; fixInd++) {
      var prefix = formUrlPrefixes[fixInd];

      if (theHref.indexOf("?") != -1) {
        theHrefArgs = theHref.substring(theHref.indexOf("?"), theHref.length);
        theHref = theHref.substring(0, theHref.indexOf("?"));
      }
      var loc = theHref.lastIndexOf(prefix);
      if (loc > 0) {
        theHref = theHref.substring(loc);
      }
    }
    theLink.setAttribute("href", theHref + theHrefArgs);
  }
  var links = SelectNodes(xmlData, "//a[not(@class) and @href]");
  for (var i = 0; i < links.length; i++) {
    theLink = links[i];
    theType = theLink.getAttribute("type") ? theLink.getAttribute("type") : "pages";
    theId = theLink.getAttribute("id") ? theLink.getAttribute("id") : pagIdt;
    theHref = theLink.getAttribute("href");
    var linkDirty = false;
    for (var fixInd = 0; fixInd < formUrlPrefixes.length; fixInd++) {
      var prefix = formUrlPrefixes[fixInd];
      var loc = theHref.lastIndexOf(prefix);
      if (loc > 0) {
        theHref = theHref.substring(loc);
        linkDirty = true;
      }
    }
    if (theHref.indexOf("Form") != -1 && theHref.indexOf("#") != -1) {
      theHref = theHref.substring(theHref.lastIndexOf('#'), theHref.length);
      theLink.setAttribute("class", "internLink");
      theLink.setAttribute("href", theHref);
    }
    else if (linkDirty) {
      theLink.setAttribute("class", "externLink");
      theLink.setAttribute("type", theType);
      theLink.setAttribute("id", theId);
      theLink.setAttribute("href", theHref);
    }
  }
  var plugs = SelectNodes(xmlData, "//a[@class and @href]");
  for (var i = 0; i < plugs.length; i++) {
    theLink = plugs[i];
    theHref = theLink.getAttribute("href");
    if (theHref.indexOf("#;") != -1) {
      for (var fixInd = 0; fixInd < formUrlPrefixes.length; fixInd++) {
        var prefix = formUrlPrefixes[fixInd];
        var loc = theHref.lastIndexOf(prefix);
        if (loc > 0) {
          theHref = theHref.substring(loc);
        }
      }
      theHref = theHref.substring(theHref.lastIndexOf('#;'), theHref.length);
      theLink.setAttribute("href", theHref);
    }
  }
  var blws = SelectNodes(xmlData, "//a[not(@class) and @name]");
  for (var i = 0; i < blws.length; i++) {
    theBlw = blws[i];
    theBlw.setAttribute("class", "bladWijzer");
  }

  return stripRoot(getXML(xmlData), "span");
}

function toggleAllSelect(obj, name) {
  obj.checked ? selectAll(name) : deSelectAll(name);
}

function toggleAllDeSelect(obj, name) {
  obj.checked ? deSelectAll(name) : selectAll(name);
}

function fixAllSelectStatus(obj, allName, groupName, rangeName) {
  var all = getAllElts(allName);
  if (all) {
    all.checked = obj.checked ? all.checked : false;
  }
  allSelected[groupName] = obj.checked ? allSelected[groupName] : false;
  if (rangeName) {
    document.forms[0].elements[rangeName].checked = obj.checked ? document.forms[0].elements[rangeName].checked : false;
    rangeSelected[rangeName] = obj.checked ? rangeSelected[rangeName] : false;
  }
  checkForm();
}

var allSelected = new Object();
function selectAll(name, forced) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];
    if (obj.id == name && obj.type == "checkbox" && !obj.disabled) {
      var oldValue = obj.checked;
      obj.checked = forced ? forced : !allSelected[name];
      if (obj.checked != oldValue && obj.onchange) {
        obj.onchange();
      }
    }
  }
  allSelected[name] = !allSelected[name];
  checkForm();
}

function isCheckboxSelected(name) {
  var formEltNum = document.forms[0].elements.length;
  var selected = false;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];
    if (obj.id == name && obj.type == "checkbox" && !obj.disabled && obj.checked) {
      selected = true;
    }
  }
  return selected;
}

var allSelected = new Object();
function deSelectAll(name) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];
    if (obj.id == name && obj.type == "checkbox" && !obj.disabled) {
      var oldValue = obj.checked;
      obj.checked = false;
      if (obj.checked != oldValue && obj.onchange) {
        obj.onchange();
      }
    }
  }
  allSelected[name] = false;
  checkForm();
}

function toggleRangeSelect(obj, name) {
  obj.checked ? selectRange(name) : deSelectRange(name);
}

var rangeSelected = new Object();
function selectRange(name) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];
    if (obj.getAttribute("refid") == name && obj.type == "checkbox" && !obj.disabled) obj.checked = true;
  }
  rangeSelected[name] = true;
  checkForm();
}

function deSelectRange(name) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = document.forms[0].elements[i];
    if (obj.getAttribute("refid") == name && obj.type == "checkbox" && !obj.disabled) obj.checked = false;
  }
  rangeSelected[name] = false;
  checkForm();
}

function selectSet(name, key, secundary, group, groupid, id, ids, checked) {
  if (checked && !document.forms[0].elements[name + "." + id + ".$action"]) {
    addFormElement(name + "." + id + ".$action", "hidden", "replace");
    addFormElement(name + "." + id + ".$key", "hidden", key);
    addFormElement(name + "." + id + ".$id", "hidden", id);
    if (group && groupid) {
      addFormElement(name + "." + id + ".$group", "hidden", group);
      addFormElement(name + "." + id + "." + group, "hidden", groupid);
    }
    for (var i = 0; i < ids.length; i++) addFormElement(name + "." + id + "." + ids[i] + "." + secundary, "hidden", ids[i]);
  }
  else if (checked && document.forms[0].elements[name + "." + id + ".$action"]) {
    document.forms[0].elements[name + "." + id + ".$action"].value = "replace";
  }
  else if (!checked && document.forms[0].elements[name + "." + id + ".$action"]) {
    document.forms[0].elements[name + "." + id + ".$action"].value = "";
  }
  checkForm();
}

function addKeywordCheckBox(obj, TrfIdt, Trf, fieldname) {
  if (fieldname && TrfIdt && Trf) trfObj["trf_" + TrfIdt] = Trf;
  if (trfCount >= trfMax) {
    top.alert(maxTrfReached);
    return false;
  }
  else if (indexOfArray(notTheseTrfs, TrfIdt) != -1) {
    top.alert(trfAlreadyChosen);
    return false;
  }
  else {
    trfCount++;
    var rowClass = ((trfCount / 2 != Math.round(trfCount / 2)) ? "rowEven" : "rowOdd");

    var trfFldNam = "TrfIdt";
    if (trfMode == "TrfRelVan") trfFldNam = "NarTrfIdt";
    else if (trfMode == "TrfRelNar") trfFldNam = "VanTrfIdt";

    var trfTabPrefix = trfMode;
    if (trfMode == "TrfRelVan" || trfMode == "TrfRelNar") trfTabPrefix = "TrfRel";

    var onclickMethod = fieldname ? ("return toggleKeyword(this,'" + fieldname + "','" + TrfIdt + "');") : "checkForm();";
    var addHtml = '<tr class="' + rowClass + '"><td class="label">' + Trf + '</td><td class="checkbox"><input type="checkbox" class="checkbox" id="' + trfTabPrefix + 'Tab" cluster="' + trfTabPrefix + 'Tab" onclick="' + onclickMethod + '" checked name="' + trfTabPrefix + 'Tab.' + TrfIdt + '.' + trfFldNam + '" value="' + TrfIdt + '"/></td></tr>';
    var oldHtml = getOuterHTML(getElt("KeywordList"));

    var newHtml = (oldHtml.indexOf("</TBODY>") > -1) ? oldHtml.substring(0, oldHtml.indexOf("</TBODY>")) + addHtml + '</tbody></table>' : oldHtml.substring(0, oldHtml.indexOf("</table>")) + addHtml + '</table>';

    setOuterHTML(getElt("KeywordList"), createDOM(newHtml));
    setEltHeight(getElt("KeywordList").parentNode, 150);
    notTheseTrfs[notTheseTrfs.length] = TrfIdt;
    if (fieldname) {
      var SrcElt = document.forms[0].elements[fieldname + ".Src"];
      var WrdElt = document.forms[0].elements[fieldname + ".Wrd"];
      SrcElt.value = (SrcElt.value == '' || SrcElt.value == 'null') ? TrfIdt : (SrcElt.value + "," + TrfIdt);
      updateWrdEltVal(SrcElt, WrdElt);
    }
    resizeDialog();
    checkForm();
    return false;
  }
}

function changeChosenZone(obj, id) {
  if (obj.value) {
    if (obj.options[obj.selectedIndex].id) {
      $('#ZoneDimension_' + id).val(obj.options[obj.selectedIndex].id.substring(1));
    }
    else {
      $('#ZoneDimension_' + id).val('');
    }
  }
  $(obj).attr('dirty', 'true');
  checkForm();
}

function toggleKeyword(obj, fieldname, TrfIdt, allTrfs) {
  var SrcElt = document.forms[0].elements[fieldname + ".Src"];
  var WrdElt = document.forms[0].elements[fieldname + ".Wrd"];
  var valStr = "," + SrcElt.value + ",";
  var trfStr = "," + TrfIdt + ",";
  var trfPos = valStr.indexOf(trfStr);
  if (obj.checked && trfCount == trfMax) {
    return false;
  }
  else if (obj.checked) {
    //  add
    trfCount++;
    if (trfPos == -1) {
      SrcElt.value = (SrcElt.value == '' || SrcElt.value == 'null') ? TrfIdt : (SrcElt.value + "," + TrfIdt);
    }
  }
  else if (!obj.checked) {
    // remove
    trfCount--;
    if (trfPos != -1) {
      var newVal = valStr.substring(0, trfPos + 1) + valStr.substring(trfPos + trfStr.length, valStr.length);
      while (newVal.substring(0, 1) == ",") {
        newVal = newVal.substring(1, newVal.length);
      }
      while (newVal.substring(newVal.length - 1, newVal.length) == ",") {
        newVal = newVal.substring(0, newVal.length - 1);
      }
      SrcElt.value = newVal;
    }
  }
  if (SrcElt.value == '') {
    SrcElt.value = '';
    WrdElt.value = '';
  }
  else {
    updateWrdEltVal(SrcElt, WrdElt);
  }
  checkForm();
  return true;
}

function updateWrdEltVal(SrcElt, WrdElt) {
  var SrcEltVals = SrcElt.value.split(",");
  var WrdEltVals = "";
  for (var trfC = 0; trfC < SrcEltVals.length; trfC++) {
    var curTrf = trfObj["trf_" + SrcEltVals[trfC]];
    WrdEltVals = (WrdEltVals == '') ? curTrf : (WrdEltVals + "," + curTrf);
  }
  WrdElt.value = WrdEltVals;
}

function addPageCheckBox(obj, PagIdt, Ico, Lbl) {
  if (indexOfArray(notThesePags, PagIdt) == -1) {
    pagCount++;
    var rowClass = ((pagCount / 2 != Math.round(pagCount / 2)) ? "rowEven" : "rowOdd");
    var addHtml = '<tr class="' + rowClass + '"><td class="label">';
    addHtml += Ico == '' ? '<div class="Status"></div>' : ('<div class="Status"><img src="' + Ico + '" width="16" height="16" border="0" hspace="0" vspace="0"></div>');
    addHtml += '<div class="nodeTxtShared">' + Lbl + '</div>';
    addHtml += '</td><td class="checkbox"><input type="checkbox" class="checkbox" id="PagTrfTab" cluster="PagTrfTab" onclick="checkForm()" checked name="PagTrfTab.' + PagIdt + '.PagIdt" value="' + PagIdt + '"/></td></tr>';
    var oldHtml = getOuterHTML(getElt("PageList"));

    var newHtml = (oldHtml.indexOf("</TBODY>") > -1) ? oldHtml.substring(0, oldHtml.indexOf("</TBODY>")) + addHtml + '</tbody></table>' : oldHtml.substring(0, oldHtml.indexOf("</table>")) + addHtml + '</table>';

    setOuterHTML(getElt("PageList"), createDOM(newHtml));
    setEltHeight(getElt("PageList").parentNode, 150);
    notThesePags[notThesePags.length] = PagIdt;
    resizeDialog();
    checkForm();
    return true;
  }
  else return false;
}

function storeOrgValues(form) {
  form = form ? form : document.forms[0];
  if (!form) return;
  else formDirty = false;
  var formEltNum = form.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = form.elements[i];

    applyMaxLength(obj);

    if (obj.name && !originals[obj.name]) {
      if (obj.type == "file" || obj.type == "text" || obj.type == "select-one" || obj.type == "password" || obj.type == "textarea") {
        originals[obj.name] = ("" + obj.getAttribute('dirty') == "true") ? "" : obj.value;
      }
      else if (obj.type == "radio" && !originals[obj.name]) {
        v = "";
        for (var j = 0; j < form.elements[obj.name].length; j++) {
          if (form.elements[obj.name][j].checked) {
            v = form.elements[obj.name][j].value;
            break;
          }
        }
        originals[obj.name] = v;
      }
      else if (obj.type == "checkbox") {
        originals[obj.name] = obj.checked ? "1" : "0";
      }
    }
  }
}

function startForm() {
  var resizeList = new Array();
  for (var f = 0; f < document.forms.length; f++) {
    var form = document.forms[f];
    for (var e = form.elements.length; e--; ) {
      var elm = form.elements[e];
      if (elm.className && elm.className.indexOf("text") >= 0 && elm.parentNode.className.indexOf("text") < 0) {
        var div = document.createElement("div");
        div.className = elm.className;
        if (getEltWidth(elm) > getEltWidth(document.body)) {
          // vage fix voor inputs die breder zijn dan het scherm (alleen in IE)
          // misschien kan het beter, alleen even geen idee hoe???
          setEltWidth(elm, getEltWidth(document.body) - 200);
        }
        if (getEltWidth(elm) > 0 && inDialog) {
          // neem breedte over van input-element
          resizeList[resizeList.length] = { box: div, width: getEltWidth(elm) };
        }
        elm.parentNode.replaceChild(div, elm);
        div.appendChild(elm);
      }
    }
  }

  for (var i = 0; i < resizeList.length; i++) {
    var item = resizeList[i];
    setEltWidth(item.box, item.width);
  }
  createOverlays();
}

createOverlays = function() {
  var curEnableElements = enableElements;
  if (top.requiredDialogStack && top.requiredDialogStack['Dialog_' + top.currentDialogID]) {
    enableElements = null;
    curEnableElements = top.requiredDialogStack['Dialog_' + top.currentDialogID][2];
  }

  if (curEnableElements == null) {
    curEnableElements = new Array();
  }

  for (var i = 0; i < curEnableElements.length && !is.ie; i++) {
    $(".buttonOverlay").remove();
    $("#" + curEnableElements[i]).each(function() {
      var $self = $(this)
      // get it's parent label element
        , $parent = $self.closest("td")
      // create an overlay
        , $overlay = $("<div/>");

      var t = parseInt($parent.position().top, 10) + parseInt($self.css('marginTop'), 10) + parseInt($parent.css('paddingTop'), 10);
      var l = parseInt($parent.position().left, 10) + parseInt($self.css('marginLeft'), 10) + parseInt($parent.css('paddingLeft'), 10);
      var w = $self.width() + parseInt($self.css('paddingLeft'), 10) + parseInt($self.css('paddingRight'), 10);
      var h = $self.height() + parseInt($self.css('paddingTop'), 10) + parseInt($self.css('paddingBottom'), 10);

      // style the overlay
      $overlay.css({
        // position the overlay in the same real estate as the original parent element
        position: "absolute"
        , top: t
        , left: l
        , width: w
        , height: h
        , zIndex: 2
        , cursor: 'pointer'
        // IE needs a color in order for the layer to respond to mouse events
        , backgroundColor: "#fff"
        // set the opacity to 0, so the element is transparent
        , opacity: 0
      })
      .addClass("buttonOverlay")
      // attach the click behavior
      .click(function() {
        // trigger the original event handler
        return clickDisabledElt($self);
      })
      .mouseover(function() {
        // trigger the original event handler
        return overDisabledElt($self);
      });

      // add the overlay to the page
      $parent.append($overlay);
    });
  }
};

overDisabledElt = function(obj) {
  if ($(obj).is(':disabled')) {
    checkForm();
  }
  return false;
};

clickDisabledElt = function(obj) {
  if ($(obj).is(':disabled')) {
    checkForm();
  }
  else {
    $(obj).trigger("click");
  }
  return false;
};

function checkForm(fieldname) {
  formValidInput = !checkInputMask();
  formValid = !checkRequired() && formValidInput;
  formDirty = formDirty || checkDirty();
  updateWcagMessages();

  var enableBt = (formValid && (formDirty || !disableSaveOnNotDirty));

  var curEnableElements = enableElements;
  if (top.requiredDialogStack && top.requiredDialogStack['Dialog_' + top.currentDialogID]) {
    enableElements = null;
    curEnableElements = top.requiredDialogStack['Dialog_' + top.currentDialogID][2];
  }

  if (curEnableElements == null) {
    curEnableElements = new Array();
  }

  for (var i = 0; i < curEnableElements.length; i++) {
    var curEnaElt = curEnableElements[i];
    if (getAllElts(curEnaElt)) {
      if (!getAllElts(curEnaElt).length) {
        getAllElts(curEnaElt).disabled = !enableBt;
        if (getAllElts(curEnaElt).className.indexOf("ok_button") != -1) {
          getAllElts(curEnaElt).className = getAllElts(curEnaElt).disabled ? "disabled ok_button" : "button ok_button";
        }
        else if (getAllElts(curEnaElt).className.indexOf("cancel_button") != -1) {
          getAllElts(curEnaElt).className = getAllElts(curEnaElt).disabled ? "disabled cancel_button" : "button cancel_button";
        }
        else getAllElts(curEnaElt).className = getAllElts(curEnaElt).disabled ? "disabled" : "button";
      }
      else if (getAllElts(curEnaElt).length) {
        for (var j = 0; j < getAllElts(curEnaElt).length; j++) {
          getAllElts(curEnaElt)[j].disabled = !enableBt;
          if (getAllElts(curEnaElt)[j].className.indexOf("ok_button") != -1) {
            getAllElts(curEnaElt)[j].className = getAllElts(curEnaElt)[j].disabled ? "disabled ok_button" : "button ok_button";
          }
          else if (getAllElts(curEnaElt)[j].className.indexOf("cancel_button") != -1) {
            getAllElts(curEnaElt)[j].className = getAllElts(curEnaElt)[j].disabled ? "disabled cancel_button" : "button cancel_button";
          }
          else getAllElts(curEnaElt)[j].className = getAllElts(curEnaElt)[j].disabled ? "disabled" : "button";
        }
      }
    }
  }

  if (fieldname && formValid && formDirty) {
    try { handleField(fieldname); } catch (e) { }
  }
}

function encodeUrl(value) {
  if (!value || value.indexOf("://") < 0) {
    return value;
  }

  var protocol = value.substring(0, value.indexOf("://") + 3);
  var rest = value.substring(value.indexOf("://") + 3);
  if (rest.indexOf("/") < 0) {
    return value;
  }

  var host = rest.substring(0, rest.indexOf("/"));
  rest = rest.substring(rest.indexOf("/"));

  var qm = rest.indexOf("?");
  var bm = rest.indexOf("#");
  var path = rest;
  var qs = "";
  var id = "";
  if (qm > 0 && qm < bm) {
    path = path.substring(0, qm);
    qs = rest.substring(qm + 1);
    qs = qs.substring(0, qs.indexOf("#"));
    id = rest.substring(bm + 1);
  }
  else if (bm > 0) {
    path = path.substring(0, bm);
    qm = -1;
    id = rest.substring(bm + 1);
  }
  else if (qm > 0) {
    path = path.substring(0, qm);
    qs = rest.substring(qm + 1);
  }

  path = pathEscape(path);
  var result = protocol + host + path;
  if (qm > 0) {
    var parts = qs.split("&");
    for (var i = 0; i < parts.length; i++) {
      var eq = parts[i].indexOf("=");
      var arg = argEscape(parts[i].substring(eq + 1));
      if (eq < 0) {
        parts[i] = arg;
      }
      else {
        var pre = argEscape(parts[i].substring(0, eq));
        parts[i] = pre + "=" + arg;
      }
    }
    result += "?" + parts.join("&");
  }
  if (bm > 0) {
    result += "#" + argEscape(id);
  }
  return result;
}

function pathEscape(path) {
  return escape(path).replace(/%25/g, "%").replace("@", "%40");
}

function argEscape(arg) {
  return pathEscape(arg).replace(".", "%2E").replace("/", "%2F");
}

function checkInputMask() {
  var valid = true;
  var curInputMaskFields = inputMaskFields;
  var curInputMaskValues = inputMaskValues;
  var curInputMaskCleaners = inputMaskCleaners;

  if (curInputMaskFields == null) {
    curInputMaskFields = new Array();
  }

  if (curInputMaskValues == null) {
    curInputMaskValues = new Object();
  }

  if (curInputMaskCleaners == null) {
    curInputMaskCleaners = new Object();
  }

  for (var i = 0; i < curInputMaskFields.length; i++) {
    var field = false;
    var obj = document.forms[0].elements[curInputMaskFields[i]];

    if (obj && obj.type == "text") {
      var curCleaner = curInputMaskCleaners[obj.name];
      if (curCleaner) {
        obj.value = curCleaner(obj.value);
      }

      var curRegEx = curInputMaskValues[obj.name];

      if (obj.value != "" && !curRegEx.test(obj.value)) {
        var maskMessage = inputMaskErrorMsg + ' ' + document.getElementById(obj.id + "_mask").title;
        obj.parentNode.style.borderColor = '#dd0000';
        obj.title = maskMessage;
      }
      else {
        field = true;
        obj.parentNode.style.borderColor = '#a3a3a3';
        obj.title = '';
      }
    }
    else {
      field = true;
    }

    valid &= field;
  }

  return valid ? false : true;
}

function checkRequired() {
  var valid = true;
  var reqString = typeof (reqFieldsMsg) != 'undefined' ? (reqFieldsMsg + ' : ') : '';
  var curRequiredFields = requiredFields;
  var curRequiredLabels = requiredLabels;

  if (top.requiredDialogStack && top.requiredDialogStack['Dialog_' + top.currentDialogID]) {
    requiredFields = null;
    requiredLabels = null;
    curRequiredFields = top.requiredDialogStack['Dialog_' + top.currentDialogID][0];
    curRequiredLabels = top.requiredDialogStack['Dialog_' + top.currentDialogID][1];
  }

  if (curRequiredFields == null) {
    curRequiredFields = new Array();
  }

  if (curRequiredLabels == null) {
    curRequiredLabels = new Object();
  }

  for (var i = 0; i < curRequiredFields.length; i++) {
    var field = false;
    obj = document.forms[0].elements[curRequiredFields[i]];
    if (obj && obj.disabled) {
      field = true;
    }
    else if (obj && (obj.type == "text" || obj.type == "password")) {
      if (obj.value == "" || regExTest(obj.value, "^\\s*$")) {
        if (curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
        else reqString += "'" + obj.name + "', ";
      }
      else {
        field = true;
      }
    }
    else if (obj && obj.type == "textarea") {
      if (obj.value == "") {
        if (curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
        else reqString += "'" + obj.name + "', ";
      }
      else {
        field = true;
      }
    }
    else if (obj && obj.type == "select-one" && obj.selectedIndex != -1) {
      if (obj.options[obj.selectedIndex].value == "" ||
          obj.options[obj.selectedIndex].value == "null") {
        if (curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
        else reqString += "'" + obj.name + "', ";
      }
      else {
        field = true;
      }
    }
    else if (obj && obj.type == "select-multiple") {
      if (!obj.options || obj.options.length == 0) {
        if (curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
        else reqString += "'" + obj.name + "', ";
      }
      else {
        field = true;
      }
    }
    else if (obj && obj.type == "password") {
      if (obj.value == "") {
        if (curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
        else reqString += "'" + obj.name + "', ";
      }
      else {
        field = true;
      }
    }
    else {
      if (obj && obj.name && curRequiredLabels[obj.name]) reqString += "'" + curRequiredLabels[obj.name] + "', ";
      else if (obj && obj.name) reqString += "'" + obj.name + "', ";
    }
    valid &= field;
  }

  noteMsg = valid ? "" : reqString.substring(0, reqString.length - 2);

  if (reqMessaging && reqFieldsMsg) {
    if (reqString.length > reqFieldsMsg.length + 3) {
      displayMessage("SystemNote_req", "", noteMsg, reqFieldsTit);
    }
    else {
      hideMessage("SystemNote_req");
    }
  }

  return valid ? false : noteMsg;
}

function hideMessage(id) {
  $('#SystemNote #' + id).remove();
}


function displayMessage(id, cls, msg, tit) {
  if (msg && msg != '') {
    var noteHtml = '<div class="NoteMessage ' + cls + '" id="' + id + '">';
    if (tit) {
      noteHtml += '<div class="NoteTitle">';
      noteHtml += tit;
      noteHtml += '</div>';
    }
    noteHtml += msg;
    noteHtml += '</div>';
  }
  $('#SystemNote #' + id).remove();
  if (msg && msg != '') {
    $('#SystemNote').append(noteHtml);
  }
}

function updateWcagMessage(id, cls, msg, tit) {
  msg = enableWcagLink(msg);
  displayMessage(id, cls, msg, tit);
}

function updateWcagMessages() {
  var wcagMsg = "";
  $('.htmlView .wcag').each(function() {
    var curWcagMsg = $(this).attr('title');
    if (wcagMsg.indexOf(curWcagMsg) == -1) {
      curWcagMsg = enableWcagLink(curWcagMsg);
      wcagMsg += '<li>' + curWcagMsg + '</li>';
    }
  });
  if (wcagMsg.length > 3) {
    wcagMsg = '<ul>' + wcagMsg + '</ul>';
    $("div.seltab").addClass("wcagtab");
  }
  else {
    $("div.seltab").removeClass("wcagtab");
  }
  displayMessage("SystemNote_wcag", "wcag", wcagMsg, typeof (wcagTit) != 'undefined' ? wcagTit : null);
}

function enableWcagLink(msg) {
  if (msg && msg.indexOf('R-pd') > -1) {
    var rpd = msg.substring(msg.indexOf('(R-pd'));
    var msg_after = rpd.substring(rpd.indexOf(':') + 1);
    rpd = rpd.substring(1, rpd.indexOf(':'));
    var msg_before = msg.substring(0, msg.indexOf(rpd) - 1);
    msg = msg_before + '<br/>(<a target="_blank" href="http://www.webrichtlijnen.nl/richtlijnen/webrichtlijnen-1/' + rpd.replace(/\./gi, '-') + '">' + rpd + '</a>' + msg_after;
  }
  return msg;
}

function checkDirty(form) {
  form = form ? form : document.forms[0];
  if (!form) return;
  var formEltNum = form.elements.length;
  for (var i = 0; i < formEltNum; i++) {
    obj = form.elements[i];
    if (obj.type != "hidden" && obj.name && obj.name.indexOf(".") > 0) {
      if (isDirty(obj)) {
        return true;
      }
    }
  }
  return false;
}

function isDirty(obj) {
  elDirty = false;
  if (obj.type == 'select-multiple' && (obj.getAttribute('dirty') == 'true' || obj.dirty)) elDirty = true;
  else if (originals[obj.name] == null && obj.value == "" && (!obj.getAttribute('dirty') || !obj.dirty)) elDirty = false;
  else if (originals[obj.name] == null) elDirty = true;
  else if (obj.getAttribute('dirty') + "" == "true") elDirty = true;
  else if (obj.dirty == true) elDirty = true;
  else if (obj.type == "text" || obj.type == "textarea" || obj.type == "password") {
    if (obj.value != originals[obj.name]) elDirty = true;
  }
  else if (obj.type == "select-one" && obj.selectedIndex != -1) {
    if (obj.options[obj.selectedIndex].value != originals[obj.name]) elDirty = true;
  }
  else if (obj.type == "checkbox") {
    if ((obj.checked ? "1" : "0") != originals[obj.name]) elDirty = true;
  }
  else if (obj.type == "radio") {
    for (var j = 0; j < document.forms[0].elements[obj.name].length; j++) {
      if (document.forms[0].elements[obj.name][j].checked) {
        if (originals[obj.name] != document.forms[0].elements[obj.name][j].value) elDirty = true;
        break;
      }
    }
  }
  return elDirty;
}

var allEditorsDisabled = false;

function disableAllEditors() {
  allEditorsDisabled = true;
}

function enableAllEditors() {
  allEditorsDisabled = false;
}

function disableFormButtons(except) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    var formElement = document.forms[0].elements[i];
    var identifier = elementIdentifier(formElement);
    if (formElement.type != "button" || formElement.id == except) continue;
    if (formElement.disabled && identifier != "") {
      disabledBefore[identifier] = true;
    }
    else {
      formElement.disabled = true;
      if (formElement.className.indexOf("enabled") != -1) formElement.className = regExReplace(formElement.className, "enabled", "disabled");
    }
  }
}

function enableFormButtons() {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    var formElement = document.forms[0].elements[i];
    var identifier = elementIdentifier(formElement);
    if (formElement.type != "button") continue;
    if (identifier != "" && disabledBefore[identifier]) {
      disabledBefore[identifier] = false;
    }
    else {
      formElement.disabled = false;
      if (formElement.className.indexOf("disabled") != -1) formElement.className = regExReplace(formElement.className, "disabled", "enabled");
    }
  }
}

function enablePageElements() {
  var pageEltNum = pageElements.length;
  for (var i = 0; i < pageEltNum; i++) {
    var formElement = document.forms[0].elements[pageElements[i]];
    if (formElement.length) formElement = formElement[0];
    var identifier = elementIdentifier(formElement);
    if (!disabledBefore[identifier]) {
      formElement.disabled = false;
      if (formElement.className.indexOf("disabled") != -1) formElement.className = regExReplace(formElement.className, "disabled", "enabled");
    }
  }
}

function disableFieldsInCluster(PagClsIdt) {
  var formEltNum = document.forms[0].elements.length;
  for (var i = 0; i < formEltNum; i++) {
    var formElementName = document.forms[0].elements[i].name;
    var formElementValue = document.forms[0].elements[i].value;
    if (formElementName.indexOf(".PagClsIdt") != -1 && formElementValue == PagClsIdt) {
      var fPrefix = formElementName.substring(0, formElementName.indexOf(".PagClsIdt"));
      if (document.forms[0].elements[fPrefix + ".$action"]) {
        document.forms[0].elements[fPrefix + ".$action"].value = "none";
      }
    }
  }
}

var disabledElements = new Object();
var disabledBefore = new Object();
var dontDisable = new Object();

function disableFormElements(specific, forceClass) {
  if (specific && disabledElements[specific]) return false;
  else if (specific) disabledElements[specific] = true;

  if (!specific) {
    var formEltNum = document.forms[0].elements.length;
    for (var i = 0; i < formEltNum; i++) {
      var formElement = document.forms[0].elements[i];
      var identifier = elementIdentifier(formElement);

      if (!dontDisable[identifier]) {
        if (formElement.disabled && identifier != "") {
          disabledBefore[identifier] = true;
        }
        else {
          if (formElement.type != "textarea" && formElement.type != "hidden") formElement.disabled = true;
          if (formElement.className.indexOf("enabled") != -1 || forceClass) formElement.className = regExReplace(formElement.className, "enabled", "disabled");
        }
      }
    }
  }
  else if (getAllElts(specific) && getAllElts(specific).length) {
    for (var i = 0; i < getAllElts(specific).length; i++) {
      getAllElts(specific)[i].disabled = true;
      if (getAllElts(specific)[i].className.indexOf("enabled") != -1 || forceClass) getAllElts(specific)[i].className = regExReplace(getAllElts(specific)[i].className, "enabled", "disabled");
    }
  }
  else if (getAllElts(specific)) {
    getAllElts(specific).disabled = true;
    if (getAllElts(specific).className.indexOf("enabled") != -1 || forceClass) getAllElts(specific).className = regExReplace(getAllElts(specific).className, "enabled", "disabled");
  }
  else if (document.forms[0].elements[specific]) {
    document.forms[0].elements[specific].disabled = true;
  }
}

function enableFormElements(specific) {
  if (disabledElements[specific]) {
    disabledElements[specific] = false;
  }
  if (!specific) {
    var formEltNum = document.forms[0].elements.length;
    for (var i = 0; i < formEltNum; i++) {
      var formElement = document.forms[0].elements[i];
      var identifier = elementIdentifier(formElement);
      if (identifier.indexOf('Addcluster_') > -1 && getElt(identifier.replace('Add', '')).value == '') {
        // do nothing because no clustertype is specified for cluster-add-action
      }
      else if (identifier != "" && disabledBefore[identifier]) {
        disabledBefore[identifier] = false;
      }
      else {
        formElement.disabled = false;
        if (formElement.className.indexOf("disabled") != -1) formElement.className = regExReplace(formElement.className, "disabled", "enabled");
      }
    }
  }
  else if (getAllElts(specific) && getAllElts(specific).length) {
    for (var i = 0; i < getAllElts(specific).length; i++) {
      getAllElts(specific)[i].disabled = false;
      if (getAllElts(specific)[i].className.indexOf("disabled") != -1) getAllElts(specific)[i].className = regExReplace(getAllElts(specific)[i].className, "disabled", "enabled");
    }
  }
  else if (getAllElts(specific)) {
    getAllElts(specific).disabled = false;
    if (getAllElts(specific).className.indexOf("disabled") != -1) {
      getAllElts(specific).className = getAllElts(specific).className.replace("disabled", "enabled");
      // TODO: EVEN CHECKEN OF 'T GOED WERKT???
      // was : getAllElts(specific).className = regExReplace(getAllElts(specific).className,"disabled","enabled");
    }
  }
  else if (document.forms[0].elements[specific]) {
    document.forms[0].elements[specific].disabled = false;
  }
}

function elementIdentifier(obj) {
  var identifier = "";
  if (obj.name && obj.name != "") identifier = obj.name;
  else if (obj.id && obj.id != "") identifier = obj.id;
  else if (obj.type == "button" && obj.value != "") identifier = obj.value;
  else if (obj.type == "select-one" && obj.options) identifier = "select_" + obj.options.length;
  return identifier;
}

function confirmClick(btnName, reset) {
  if (reset) {
    clearTimeout(confirmTimer);
    getAllElts(btnName)[1].style.display = "none";
    getAllElts(btnName)[0].style.display = confirmStyle;
  }
  else {
    confirmStyle = (getAllElts(btnName)[0].style.display == "block") ? "block" : "inline";
    getAllElts(btnName)[0].style.display = "none";
    getAllElts(btnName)[1].style.display = confirmStyle;
    enableFormElements(btnName);
    confirmTimer = window.setTimeout("confirmClick('" + btnName + "',true)", 2000);
  }
}

function confirmAction(message, params) {
  var msg = message;
  if (params && params.length) {
    msg = msg.format(params);
  }
  if (msg) {
    return confirm(msg);
  } else if (defaultConfirmMsg) {
    return confirm(defaultConfirmMsg);
  } else if (top.defaultConfirmMsg) {
    return confirm(top.defaultConfirmMsg);
  } else {
    return confirm('Really?');
  }
}

function selectThis() {
  if (window.event && window.event.srcElement.tagName != "INPUT" && window.event.srcElement.tagName != "TEXTAREA") return false;
  else return true;
}

var curGebIdt = null;
var curDtm = null;
var curTyd = null;
var curGebNam = null;

function checkCurGeb(txt_unknown_user, txt_started, txt_continue,
                     userGebIdt, today, now, ItmIdt, SitIdt) {
  var resultXML = synchronousGet(iprox_get + "?AppIdt=00002015&ItmIdt=" + ItmIdt + "&SitIdt=" + SitIdt + "&stamp=" + encodeURIComponent((new Date()).getTime()));
  if (resultXML.getElementsByTagName("item")[0]) {
    var item = resultXML.getElementsByTagName("item")[0];
    curGebIdt = (item.getAttribute("CurGebIdt")) ? item.getAttribute("CurGebIdt") : null;
    curDtm = (item.getAttribute("CurDtm")) ? item.getAttribute("CurDtm") : null;
    curTyd = (item.getAttribute("CurTyd")) ? item.getAttribute("CurTyd") : null;
    var curGeb = item.getElementsByTagName("CurGebNam")[0];
    curGebNam = curGeb ? curGeb.textContent ? curGeb.textContent : curGeb.text : null;
  } else {
    curGebIdt = null;
    curDtm = null;
    curTyd = null;
    curGebNam = null;
  }

  if (!curGebIdt || !curDtm || !curTyd) {
    return true;
  }

  var timeDiff =
        (parseInt(now.substring(0, 2), 10) * 60 + parseInt(now.substring(2), 10)) -
        (parseInt(curTyd.substring(0, 2), 10) * 60 + parseInt(curTyd.substring(2), 10));
  if (userGebIdt == curGebIdt || today != curDtm || timeDiff > 30) {
    return true;
  }
  var msg = (curGebNam ? curGebNam : txt_unknown_user) +
          txt_started + curTyd.substring(0, 2) + ":" + curTyd.substring(2)
          + "\r\n\r\n" +
          txt_continue;
  return top.confirm(msg);
}

function setCurrentUser(result) {
  requestBusy = true;
  if (result.status == Http.Status.OK) {
    responseTree = result.responseXML;
  }
}

function synchronousGet(url) {
  var sjax = null;
  if (window.XMLHttpRequest) {
    sjax = new XMLHttpRequest();
  } else {
    sjax = new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (sjax) {
    sjax.open("GET", url, false);
    sjax.send(null);
    return sjax.responseXML;
  } else {
    return false;
  }
}

function periodicalAjax(ajaxArgs, timeout, success, error) {
  var doit = function() {
    $.ajax(ajaxArgs);
  };
  var schedule = function() {
    window.setTimeout(doit, timeout);
  };
  ajaxArgs.success = function(data, status, xhr) {
    if (success && success(data, status, xhr)) {
      schedule();
    }
  };
  ajaxArgs.error = function(xhr, status, errorThrown) {
    if (!error || error(xhr, status, errorThrown)) {
      schedule();
    }
  };
  schedule();
}

startProgressBar = function(id) {
  periodicalAjax({
    url: iprox_read,
    type: "post",
    data: {
      AppIdt: '00006001',
      upload_id: id
    }
  },
    1000,
    function(data) {
      $('#progress').html(data);
      return $('#progress').text().indexOf("100%") < 0;
    }
  );
};

function changeBookmark(obj) {
  var selectedItem = obj.options[obj.selectedIndex];
  var cluster = obj.name.substring(0, obj.name.length - 3);
  var link = cluster.replace("PagVldTab", "ItmRelTab");
  if (selectedItem.value) {
    obj.form.elements[cluster + "Wrd"].value = getInnerText(selectedItem);
    var id = selectedItem.value.substring(selectedItem.value.indexOf(":") + 1);
    if (selectedItem.value.substring(0, 7) == "Element") {
      obj.form[link + "Int"].value = "#" + id;
      obj.form[link + "NarPagClsIdt"].value = "";
    }
    else {
      obj.form[link + "Int"].value = "";
      obj.form[link + "NarPagClsIdt"].value = id;
    }
    enableAction(obj.form.elements[cluster + "$action"]);
  }
  else {
    obj.form.elements[cluster + "Wrd"].value = "";
    disableAction(obj.form.elements[cluster + "$action"]);
  }
}

function enableAction(obj) {
  switch (obj.value) {
    case "none":
      obj.value = "add";
      break;
    case "delete":
      obj.value = "edit";
      break;
  }
}

function disableAction(obj) {
  switch (obj.value) {
    case "add":
      obj.value = "none";
      break;
    case "edit":
      obj.value = "delete";
      break;
  }
}

function resizeLayout() {
  $(".selectLayout").each(function() {
    $(this).width(290);
    var padding = parseInt($(this).attr("offsetLeft"), 10);
    if (padding > 0) {
      $(this).width($(this).parent().width() - 2 * padding);
    }
    else {
      $(this).width("100%");
    }
  });
}
$(resizeLayout);
$(window).resize(resizeLayout);
