var apos = "'";
function popupPrompt(title, msg1, msg2, prompt, type, path, admin)
{
  var actionUrl = admin;
  if (admin == null || admin == '') {
    actionUrl = 'admin';
  }
  strAttr = "status:no;dialogWidth:400px;dialogHeight:300px;help:no;scrollbar:no;";
  strAction = actionUrl + "?action=popup&popupTitle="+title
    + "&popupMsg1=" + msg1
    + "&popupMsg2=" + msg2
    + "&popupPrompt=" + prompt
    + "&popupType=" + type
    + "&path=" + path;
  return showModalDialog(strAction, document, strAttr);
  //return window.open(url, 'modal', params);
}




function displayPopupOLD(path, params, ptt, tu)
{
  var url = path;
  if (tu == "") {
    url = "staging" + path;
  }
  else {
    url = ptt + path;
  }
  return showModalDialog(url, document, params);
}

function displayPopup(path, params, o) {
  xShowDialog('staging'+path, o, params);
}

function getMultiValue(sel, req)
{
  var result = "";
  for (var i=0; i<sel.length; i++) {
    if (sel[i].selected && sel[i].value != '') {
      result += sel[i].value + " | ";
    }
  }
  return result;
}

function getMultiValueCheckbox(element)
{
  return getMultiValueCheckboxWithForm(element.form, element.name);
}

function getMultiValueCheckboxWithForm(f,name)
{
  var result = "";
  for (var i=0; i<f.elements.length; i++) {
    if (f.elements[i].name == name && f.elements[i].checked) {
      result += f.elements[i].value + " | ";
    }
  }
  return result;
}

function updateParentOrNew(url)
{
  if (window.opener != null) {
    window.opener.location = url;
  }
  else {
    open(url,'_blank');
  }
}

function validFilename(path)
{
  if (path == null ||
      path == ''   ||
      path.indexOf('"') != -1 ||
      path.indexOf("'") != -1 ||
      path.indexOf('<') != -1 ||
      path.indexOf('>') != -1 ||
      path.indexOf(':') != -1 ||
      path.indexOf('#') != -1 ||
      path.indexOf('&') != -1 )  {
    alert("The supplied filename is invalid, it cannot contain the following characters: & ' < > # \" : ");
    return false;
  }
  return true;
}

function validDirectoryName(path)
{
  if (path == null ||
      path == ''   ||
      path.indexOf('"') != -1 ||
      path.indexOf("'") != -1 ||
      path.indexOf('<') != -1 ||
      path.indexOf('>') != -1 ||
      path.indexOf('#') != -1 ||
      path.indexOf('&') != -1 ||
      path.indexOf('[') != -1 ||
      path.indexOf(']') != -1 ||
      path.indexOf('/') != -1 ||
      path.indexOf('\\') != -1 ||
      path.indexOf('(') != -1 ||
      path.indexOf(')') != -1 ||
      path.indexOf('%') != -1 ||
      path.indexOf(' ') != -1 ||
      path.indexOf('|') != -1 
      )  {
    alert("The supplied filename is invalid. Please remove any special characters and try again.");
    return false;
  }
  else {
    return true;
  }
}

var currentPane = null;
var currentItem = null;
var currentInfo = null;
function updatePane(id, path)
{
  updatePane2(id, path, 'admin?action=view&tag=HEAD&path=', '&ieFriendly=true');
}
function updatePane2(id, url, urlPrefix, urlSuffix)
{
  if (currentPane != null) {
    currentPane.style.display = 'none';
  }
  currentPane = document.getElementById('pph' + id);
  currentPane.style.display = '';
  updateIFrame('contentPreview',urlPrefix + url + urlSuffix);
  if (currentItem != null) {
    currentItem.style.backgroundColor = '';
    currentItem.style.color = '';
  }
  currentItem = document.getElementById('item' + id);
  currentItem.style.backgroundColor = '#3c8ac4';
  currentItem.style.color = '#ffffff';
  if (currentInfo != null) {
    currentInfo.style.display = 'none';
    currentInfo.style.visibility = 'hidden';
  }
  currentInfo = document.getElementById('docInfo' + id);
  currentInfo.style.display = '';
  currentInfo.style.visibility = 'visible';
}

// Menu functions 
var menuWidth = 130;
var menuActive = new Array();
function cmsShowMenu(elem, dpyMode,name)
{ //window.status='cmsShowMenu';
  if (currentMenu != '') {
    cmsCheckMenu(currentMenu, dpyMode);
    cmsHideContextMenu();
  }
  //var menu = elem.childNodes[1];  
  //menu.style.visibility = 'visible';
  //menu.style.display = '';
  
  //PW new  
  var menu = xGetElementById('item_Submenu'+name);
  xShow(menu);
  xDisplay(menu, '');

 // xSlideTo(menu, xPageX(elem), xPageY(elem) + xHeight(elem), 500);

  menu.style.width = menuWidth + 'px';
  //menu.scrollIntoView();
  currentMenu = name;
  var highlighted = elem.id + 'high';
  if (document.getElementById(highlighted)) {
    document.getElementById(highlighted).className='cmscontentitem-'+cmsMenuType+'-up';
    //window.status='className=cmscontentitem-'+cmsMenuType+'-up';
  }
}
function cmsHideMenu(elem, dpyMode, child)
{
  //var menu = elem.childNodes[1];
  //menu.style.visibility = 'hidden';
  //menu.style.display = 'none';
  
  //PW new  
  var menu = xGetElementById('item_Submenu'+elem);

  //xMoveTo(child, xPageX(elem), xPageY(elem));
 // xSlideTo(child, -600, -600, 500);
    xHide(child);
    xDisplay(child, 'none')  
  
  
  var highlighted = elem.id + 'high';
  if (document.getElementById(highlighted)) {    
    document.getElementById(highlighted).className='cmscontentitem-'+cmsMenuType;
  }
}

function cmsPosMenu(btn, dpyMode, name)
{ 
 // var menu = btn.parentNode.childNodes[1];
 var menu = xGetElementById('item_Submenu'+name);
 
  if (dpyMode == 'icon') {
    if (xMoz) {
      var x = xPageX(btn) - menuWidth;
      var y = xPageY(btn);
      xMoveTo(menu, x, y);
      
    } else {
      var x = event.x - menuWidth + 5;
      var y = event.y - 5;
      x += document.body.scrollLeft;
      y += document.body.scrollTop;

      xMoveTo(menu, x, y);
    }
    
    //window.status='x = '+x+' y = '+y+' ';

  }
}
function cmsCheckMenu(name, dpyMode)
{//alert('cmsCheckMenu');
  //window.status='cmsCheckMenu('+name+')';
  if (!menuActive[name]) {
    var elem = document.getElementById('item_menu'+name);
    var child =  xGetElementById('item_Submenu'+name);
    var button =  xGetElementById('item_SubmenuContnr'+name);
    cmsHideMenu(elem, dpyMode, child);
    button.className='cmsmenubutton';
  }
  if (currentMenu == name && !currentMenuActive) {
    cmsHideContextMenu();
  }
}

function cmsShowSubmenu(elem)
{//alert('cmsShowSubmenu');
   var submenu =  xGetElementById('flyout_'+elem.id);
   if(submenu.style && xDef(submenu) && elem.childNodes[0]) {
    xShow(submenu);
    xDisplay(submenu, '')
    submenu.style.width = menuWidth + 'px';
    var menuOffset = '-' + menuWidth + 'px';
    submenu.style.left = menuOffset;
  }

}
function cmsHideSubmenu(elem)
{//alert('cmsHideSubmenu');
  var submenu = xGetElementById('flyout_'+elem.id);  
  //var submenu = elem.childNodes[0];  
  if(submenu.style && xDef(submenu) && elem.childNodes[0]) {
    xHide(submenu);
    xDisplay(submenu, 'none')
  }
}



// Old Menu functions 

function showmenu(elmnt)/* (for useradmin, search results) */
{//alert('showmenu');
  var highlighted = (elmnt)+"high";
  var button = (elmnt)+"button";
  document.getElementById(elmnt).style.visibility="visible";
  document.getElementById(elmnt).style.display="";
  document.getElementById(button).className='cmsmenubuttonup';
  if (document.getElementById(highlighted)) {
    document.getElementById(highlighted).className='cmsitemup';
  }
}

function hidemenu(elmnt)/* (for useradmin, search results) */
{//alert('hidemenu');
  var highlighted = (elmnt)+"high";
  var button = (elmnt)+"button";
  document.getElementById(elmnt).style.visibility="hidden";
  document.getElementById(elmnt).style.display="none";
  document.getElementById(button).className='cmsmenubutton';
  if (document.getElementById(highlighted)) {
    document.getElementById(highlighted).className='cmsitem';
  }
}

function showsubmenu(elmnt)
{
  document.getElementById(elmnt).style.pixelLeft = - 100;
  document.getElementById(elmnt).style.visibility="visible";
}
function hidesubmenu(elmnt)
{
  document.getElementById(elmnt).style.visibility="hidden";
}



var jsfilenameList = new Array();
function addToFilenameList(name)
{
  jsfilenameList[name] = 'y';
}
function filenameAvailable(name)
{
  return (jsfilenameList[name] == null || jsfilenameList[name] == '');
}
function showElement(elmnt)
{
  document.getElementById(elmnt).style.visibility="visible";
  document.getElementById(elmnt).style.display="";
}
function hideElement(elmnt)
{
  document.getElementById(elmnt).style.visibility="hidden";
  document.getElementById(elmnt).style.display="none";
}


// Doc Listing

var draggedDocumentPath = '';
var draggedDocumentName = '';
var draggedDocumentType = '';

function docListingDumpOrder(nla)
{
  var result = "";
  for (i=1; i<nla.length; i++) {
    result += i + ":" + nla[i] + "|";
  }
  return result;
}

// PW: don't like this causing error in Mozilla so commenting out, let's see what breaks! var oPopup = window.createPopup();
var currentMenu = '';
var currentMenuActive = false;
var showingMessage = false;


function cmsShowContextMenu(menuId)
{
  
  if(!(xGetElementById('item_menu' + menuId))) return null;
  
  if (!showingMessage && !xMoz) {/* NOT Moz compliant right now (for right click menus) */
    cmsHideContextMenu();
    var menuDiv = document.getElementById('cmsContextMenuDiv');
    var menuContent = document.getElementById('item_menu' + menuId);
    
   // var menuContentDiv = menuContent.childNodes[1];
   var menuContentDiv = xGetElementById('item_Submenu'+menuId);
   //  alert(menuContentDiv.id);
    menuDiv.innerHTML = menuContentDiv.innerHTML;

    //if (document.body.clientWidth < 120 + event.clientX) {

    if (document.body.clientWidth < 120 + xPageX(this)) { 
      menuDiv.style.left = document.body.clientWidth - 120;
    } else if (event.clientX < 120) {
      menuDiv.style.left=120; 
    } else {
      menuDiv.style.left = event.clientX + document.body.scrollLeft - 5;
    }

    menuDiv.style.top = event.clientY + document.body.scrollTop - 5;
    menuDiv.style.display='block';
    menuDiv.style.visibility = 'visible';
    var highlighted = 'item_menu' + menuId + 'high';
    if (document.getElementById(highlighted)) {
      document.getElementById(highlighted).className='cmscontentitem-'+cmsMenuType+'-up';
    }
    currentMenu = menuId;
    currentMenuActive = true;
    event.cancelBubble = true;
  }
}

function cmsHideContextMenu()
{//alert('cmsHideContextMenu');
  if (!showingMessage) {
    var menuDiv = document.getElementById('cmsContextMenuDiv');
    menuDiv.style.display='none';
    menuDiv.style.visibility = 'hidden';
    menuDiv.innerHTML = '';
    if (currentMenu != '') {
      var highlighted = 'item_menu' + currentMenu + 'high';
      if (document.getElementById(highlighted)) {
        document.getElementById(highlighted).className='cmscontentitem-'+cmsMenuType;
      }
    }
    currentMenu = '';
    currentMenuActive = false;
    currentContentItem = new Array();
    //window.status='cmsHideContextMenu()';
  }
}



function cmsShowCustomContextMenu(html,centre,triggerId) // used  for messages when you perform actions, ie lock/unlock.
{ 
// NOT USED
  if (xIE4Up)
  {    
    // do original code 
    cmsHideContextMenu();
    var menuDiv = document.getElementById('cmsContextMenuDiv');
    menuDiv.innerHTML = html;
    if (centre) {
      menuDiv.style.left = (document.body.clientWidth - 100) / 2 + document.body.scrollLeft;
      menuDiv.style.top = (document.body.clientHeight - 50) / 2 + document.body.scrollTop;
    }
    else {
      if (document.body.clientWidth < 120 + event.clientX) {
        menuDiv.style.left = document.body.clientWidth - 120;
      } else if (event.clientX < 120) {
        menuDiv.style.left=120;
      } else {
        menuDiv.style.left = event.clientX + document.body.scrollLeft - 5;
      }
    }
    menuDiv.style.top = event.clientY + document.body.scrollTop - 5;
    menuDiv.style.display='block';
    menuDiv.style.visibility = 'visible';
    event.cancelBubble = true;
    //window.status='cmsShowCustomContextMenu()';
    
  } 
  
    else {       
     /*  Just do nothing for now. */
  }
  
}

function cmsShowContextMessage(html,centre)
{
  cmsShowCustomContextMenu('<div class="cmsContextMessage">' + html + '</div>',true);
  showingMessage = true;
}


function cmsHideContextMessage() {
  showingMessage = false;
  cmsHideContextMenu();
}


function cmsAbsPosMenu(menu)/* This is not tested yet because I don't know where it's being used. */
{
  //menu.style.top = event.y + document.body.scrollTop;
  //menu.style.left = event.x + document.body.scrollLeft; 
    
  x = xPageX(this) + document.body.scrollLeft;
  y = xPageY(this) + document.body.scrollTop;  
  xMoveTo(menu, x, y);
  //window.status='cmsAbsPosMenu()';

}

var currentContentItem = new Array();

function cmsContentItemEnter(elem) {
  if (!currentMenuActive && cmsMenuType == 'context') { 
    if (currentContentItem.length > 0) {
      myparent = currentContentItem[currentContentItem.length - 1];
      myparent.className='cmscontentitem-'+cmsMenuType ;
    }
    elem.className='cmscontentitem-'+cmsMenuType + '-over';
    currentContentItem.push(elem);
  }
}

function cmsContentItemLeave(elem) {
  if (!currentMenuActive && cmsMenuType == 'context') { 
    elem.className='cmscontentitem-'+cmsMenuType ;
    currentContentItem.pop();
    if (currentContentItem.length > 0) {
      current = currentContentItem[currentContentItem.length - 1];
      current.className='cmscontentitem-'+cmsMenuType + '-over';
    }
  }
}


/* XP Style Menu Box */
function toggleMenuBox(elem) {
  var chevron = elem.parentNode.childNodes[0].childNodes[2];
  var content = elem.parentNode.childNodes[1];
  if (chevron.className == 'menuBoxRight') {
    chevron.className='menuBoxRightHidden';
    content.style.display='none';
    content.style.visibility='hidden';
  }
  else {
    chevron.className='menuBoxRight';
    content.style.display='';
    content.style.visibility='visible';
  }
}


function cmsPerformAction(msg, loc) {
  cmsShowContextMessage(msg, true);
  window.location = loc;
}


function toggleDisplay(elem, class1, class2) {
  if (elem.className == class1) {
    elem.className=class2;
  }
  else {
    elem.className=class1;
  }
}




/*
  Notes:
    1. edge & help attributes do not work.
    2. "height" & "width" must be entered before "center"
    3. if you should choose to set "center=yes" do not put in "left" and "top"
    4. Minimize button not hidden, but when clicked the window will not disappear
    5. Aside from the aforementioned, all features should react the same *fingers crossed*
    6. Still in the works, so don't expect miracles. Any problems/queries/complaints please don't hesitate.
  Email:
    [email]x_goose_x@hotmail.com[/email]
*/

dFeatures = 'dialogHeight: 450px; dialogWidth: 1049px; dialogTop: 646px; dialogLeft: 4px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: Yes;';//default features

modalWin = "";
function xShowDialog( sURL, vArguments, sFeatures, wName)
    {
    if (wName==null)   
    {
        var wName = 'defaultwin';
    }      
    if (sURL==null||sURL=='')
    {
        alert ("Invalid URL input.");
        return false;
    }
    if (vArguments==null||vArguments=='')
    {
        vArguments='';
    }
    if (sFeatures==null||sFeatures=='')
    {
        sFeatures=dFeatures;
    }
//    if (window.navigator.appVersion.indexOf("MSIE")!=-1)
//    {
//        window.showModalDialog ( sURL, vArguments, sFeatures );
//        return false;
//    }
    sFeatures = sFeatures.replace(/ /gi,'');
    aFeatures = sFeatures.split(";");
    sWinFeat = "directories=0,menubar=0,titlebar=0,toolbar=0,";
    for ( var x = 0; x < aFeatures.length; x++ )
    {
        aTmp = aFeatures[x].split(":");
        sKey = aTmp[0].toLowerCase();
        sVal = aTmp[1];
        switch (sKey)
        {
            case "dialogheight":
                sWinFeat += "height="+sVal+",";
                pHeight = sVal;
                break;
            case "dialogwidth":
                sWinFeat += "width="+sVal+",";
                pWidth = sVal;
                break;
            case "dialogtop":
                sWinFeat += "screenY="+sVal+",";
                break;
            case "dialogleft":
                sWinFeat += "screenX="+sVal+",";
                break;
            case "resizable":
                sWinFeat += "resizable="+sVal+",";
                break;
            case "status":
                sWinFeat += "status="+sVal+",";
                break;
            case "scrollbar":
                sWinFeat += "scrollbars="+sVal+",";
                break;
            case "center":
                if ( sVal.toLowerCase() == "yes" )
                {
                    sWinFeat += "screenY="+((screen.availHeight-pHeight)/2)+",";
                    sWinFeat += "screenX="+((screen.availWidth-pWidth)/2)+",";
                }
                break;
        }
    }
    modalWin=window.open(String(sURL),wName,sWinFeat);
    if (vArguments!=null&&vArguments!='')
    {
      modalWin.dialogArguments = vArguments;
    }
}

function checkFocus()
    {
    if (window.navigator.appVersion.indexOf("MSIE")==-1)
        {
        if (modalWin!=null && !modalWin.closed)
        {
            self.blur();
            modalWin.focus();
        }
    }
}




function updateIFrame(id,href) {
  o = document.getElementById(id);
  if (o.src) { 
    o.src = href;
  }
  else
    o.location = href;
}



/* xMenu1A Object Prototype 

  Parameters:
    triggerId   - id string of trigger element.
    menuId      - id string of menu.
    mouseMargin - integer margin around menu;
                  when mouse is outside this margin the menu is hid.
    slideTime   - integer time for menu slide (in milliseconds).
    openEvent   - string name of event on which to open menu ('click', 'mouseover', etc).
*/


/* PW: This is a copy of function in x_menus.js 
(might not need copy if other version made core,
 but also might want to customize this one for tool) */
function cmsxMenu1A(triggerId, menuId, mouseMargin, slideTime, openEvent) {

  var isOpen = false;
  var trg = xGetElementById(triggerId);
  var mnu = xGetElementById(menuId);
  if (trg && mnu) {
    xHide(mnu);
    xAddEventListener(trg, openEvent, onOpen, false);
  }
  function onOpen()
  {
    if (!isOpen) {
      xMoveTo(mnu, xPageX(trg), xPageY(trg));
      xShow(mnu);
      xSlideTo(mnu, xPageX(trg), xPageY(trg) + xHeight(trg), slideTime);
      xAddEventListener(document, 'mousemove', onMousemove, false);
      isOpen = true;
    }
  }
  function onMousemove(ev)
  {
    var e = new xEvent(ev);
    if (!xHasPoint(mnu, e.pageX, e.pageY, -mouseMargin) &&
        !xHasPoint(trg, e.pageX, e.pageY, -mouseMargin))
    {
      xRemoveEventListener(document, 'mousemove', onMousemove, false);
      xSlideTo(mnu, xPageX(trg), xPageY(trg), slideTime);
      setTimeout("xHide('" + menuId + "')", slideTime);
      isOpen = false;
    }
  }
} // end xMenu1A


function cmsSwapClass(e,newClass,rClass) {
  if (!xGetElementById) return '';
  if(!(e=xGetElementById(e))) return '';
  if(e.className) {
    if(xStr(newClass)) {
      e.className=newClass;
    }
  }
  // Fix for Mozilla.
  if(xStr(rClass) && xMoz) {
    for (i=3; i<arguments.length; i++) {      
      if(arguments[i]=xGetElementById(arguments[i])) arguments[i].className=rClass;
    }
  }
}
  



// New editor specific functions

      var validators = new Array();

      function cmsEditorFixList(current) {

        if (current.getAttribute &&
            current.getAttribute('name')) {
          var name = current.getAttribute('name');
          if ( name.indexOf && name.indexOf('.list') > 0) {
            var prefix = null;
            prefix = name.substring(0,name.indexOf('.list'));
            if (prefix + '.list' == name) {
              var listDiv = getFirstChild(current);
              listDiv.innerHTML='';
              cmsEditorFixListChildren(listDiv, current, prefix);
              var sibling = getNextSibling(listDiv);
              sibling.value = listDiv.innerHTML;
              return;
            }
          }
        }
        var children = current.childNodes;
        for (var i = 0; i < children.length; i++) {
          cmsEditorFixList(children[i]);
        }
      }
      
      function cmsEditorFixListChildren(list, current, prefix) {
        if (current.getAttribute &&
            current.getAttribute('name')) {
          var name = current.getAttribute('name');
          if (name.indexOf) { 
            if (name.indexOf('.list') > 0) {
              prefix = name.substring(0,name.indexOf('.list'));
            }
            else if (name.indexOf('.items') > 0) {
              // ignore
            }
            else if (name.indexOf('.item') > 0) {
              prefix = name.substring(0,name.indexOf('.item'));
              var element = document.createElement(prefix);
              list.appendChild(element);
              list = element;
            }
            else if (name.indexOf(prefix) == 0) {
              // detect select with multiple
              if (current.getAttribute('multiple') && current.options) {
                // get the selected options
                for (var i = 0; i < current.options.length; i++) {
                  if (current.options[i].selected) {
                    var element = document.createElement(name);
                    var text = document.createTextNode(current.options[i].value);
                    element.appendChild(text);
                    list.appendChild(element);
                  }
                }
              }
              else {
                var element = document.createElement(name);
                var text = document.createTextNode(current.value);
                element.appendChild(text);
                list.appendChild(element);
              }
              
            }
          }
        }

        var children = current.childNodes;
        for (var i = 0; i < children.length; i++) {
          cmsEditorFixListChildren(list, children[i], prefix);
        }
      }
      
      function cmsEditorUpdateRichContentFields(f) {
        if (!window.FCKeditorAPI) return;
        for (var i = 0; i < f.elements.length; i++) {
          var editor = FCKeditorAPI.GetInstance(f.elements[i].name);
          if (editor) {
            editor.UpdateLinkedField();
          }
        }
      }
      function validate() {
        if (!validators) return true;
        var i; 
        for (i = 0; i < validators.length; i++) {
          if (!validators[i]()) return false;
        }
        return true;
      }
      function findSiblingByName(current, name) {
        var parentNode = current.parentNode;
        for (i = 0; i < parentNode.childNodes.length; i++) {
          if (parentNode.childNodes[i].getAttribute && 
              parentNode.childNodes[i].getAttribute('name') == name) {
            return parentNode.childNodes[i];
          }
        }
        return null;
      }
      function getNextSibling(current) {
        if (current == null) return null;
        var sibling = current.nextSibling;
        if (sibling && !sibling.getAttribute) { // this will skip the text node if any
          return sibling.nextSibling;
        }
        return sibling;
      }
      function getPreviousSibling(current) {
        if (current == null) return null;
        var sibling = current.previousSibling;
        if (sibling && !sibling.getAttribute) { // this will skip the text node if any
          return sibling.previousSibling;
        }
        return sibling;
      }
      function getFirstChild(current) {
        if (current == null) return null;
        var child = current.firstChild;
        if (child && !child.getAttribute) { // this will skip the text node if any
          return child.nextSibling;
        }
        return child;
      }
      function getLastChild(current) {
        if (current == null) return null;
        var child = current.lastChild;
        if (child && !child.getAttribute) { // this will skip the text node if any
          return child.previousSibling;
        }
        return child;
      }
      function findDescendentByName(current, name) {
        if (current.getAttribute) {
          if (current.getAttribute('name') == name) {
            return current;
          }
        }
                                 
        var children = current.childNodes;
        var i;
        for (i = 0; i < children.length; i++) {
          var result = findDescendentByName(children[i], name);
          if (result != null) return result;
        }
        return null;
      }
      function getNamedParent(node, name)
      {
        if (node == null) {
          return null;
        }
        if (node.tagName == name) {
          return node;
        }
        return getNamedParent(node.parentNode, name);
      }
  
      function moveUp(node)
      {
        swap(node, getPreviousSibling(node));
      }
      function moveDown(node)
      {
        swap(node, getNextSibling(node));
      }
  
      function swap(node1, node2)
      {
        if (node1 == null || node2 == null) return;
        var tempNode1 = node1.cloneNode(true);
        var tempNode2 = node2.cloneNode(true);
        var child2 = getFirstChild(tempNode2);
        var child1 = getFirstChild(node1);
        if (child2 == null || child1 == null) return;
        node1.replaceChild(child2, child1);
        child1 = getFirstChild(tempNode1);
        child2 = getFirstChild(node2);
        if (child2 == null || child1 == null) return;
        node2.replaceChild(child1, child2);
      }
      function showNode(node) {
        if(!node) return;
        node.style.visibility='visible';
        node.style.display='';
      }
      function hideNode(node) {
        if(!node) return;
        node.style.visibility='hidden';
        node.style.display='none';
      }

      function checkAll(name) {
        return checkOrUncheckAll(name, true);
      }
      function uncheckAll(name) {
        return checkOrUncheckAll(name, false);
      }
      function checkOrUncheckAll(name, flag) {
        var elements = document.getElementsByName(name);
        for (i = 0; i < elements.length; i++) {
          elements[i].checked = flag;
        }
        return false;
      }

