function getElementText(node){
  if (node)
    return node.textContent ? node.textContent : node.text;
  else 
    return '';
}

function openManagementIndex() {
  Management.open({

  });
}

ManagementClass = Class.create({
  open: function(options){
    var siteContentIFrame = $(document.createElement("iframe"));
    siteContentIFrame.setAttribute("width", "100%");
    siteContentIFrame.setAttribute("height", document.viewport.getHeight());
    siteContentIFrame.setAttribute("frameBorder", "0");
    siteContentIFrame.setAttribute("scrolling", "no");
    siteContentIFrame.setStyle({
      'margin': '0px',
      'padding': '0px'
    });
    
    var href = window.location.href;
    var i = href.indexOf('#');
    var x = href.indexOf('/submit');
    
    if (i > 0)
      href = href.substring(0, i);
      
    if (x > 0)
      href = href.substring(0, x);
    
    if (href.indexOf('?') > 0) 
      href += '&m=m';
    else    
      href += '?m=m';
    
    siteContentIFrame.setAttribute("src", href);
    siteContentIFrame.setAttribute("id", "siteContentFrame");
    
    document.observe("delfoi:managementFrameWrapped", Management._managementFrameWrapped);
    //Management._groupResourceNo = options.groupResourceNo;
    Event.observe(siteContentIFrame, "load", this._onIframeLoad);
    
    var documentBody = document.getElementsByTagName('body')[0];
    var documentHead = document.getElementsByTagName('head')[0];
    
    for (var i = documentHead.childNodes.length - 1; i >= 0; i--) {
      var node = documentHead.childNodes[i];
      documentHead.removeChild(node);
    }
     
    documentBody.innerHTML = '';
    documentBody.appendChild(siteContentIFrame);
    
    this._glassPane = $(document.createElement("div"));
    this._glassPane.id = 'managementGlassPane';
    documentBody.appendChild(this._glassPane);
    
    var managementCSS = document.createElement("link");
    managementCSS.href = '/fi/css/management.css';
    managementCSS.rel = 'StyleSheet';
    documentHead.appendChild(managementCSS);
  },
  close: function () {
    var href = window.location.href;
    var x = href.indexOf('/submit');
    if (x > 0)
      href = href.substring(0, x);
      
    window.location.replace(href);
  },
  openMenu: function(menuName){
    if (Management._openMenu) 
      Management.hideMenu(Management._openMenu);
    
    Management._openMenu = menuName;
    
    var parentMenuElement = $('mainMenuItem_' + menuName);
    parentMenuElement.addClassName('menuOpen');
    
    var menuContainerId = 'managementSubMenuContainer_' + menuName;
    menuContainer = $(menuContainerId);
    
    if (!menuContainer) {
      var menuContainer = $(document.createElement("div"));
      menuContainer.id = menuContainerId;
      
      var menuId = 'managementSubMenu_' + menuName;
      var menuElement = $(menuId);
      var contentId = 'managementSubMenuContent_' + menuName;
      var contentElement = $(contentId);
      
      menuElement = $(document.createElement("div"));
      menuElement.id = menuId;
      menuElement.addClassName('managementSubMenu');
      menuContainer.appendChild(menuElement);
      
      contentElement = $(document.createElement("div"));
      contentElement.id = contentId;
      contentElement.addClassName('managementSubMenuContent');
      menuContainer.appendChild(contentElement);
      
      $('managementContainer').appendChild(menuContainer);
      
      this.ajaxRequest('/tools/management_index/' + menuName + '/menu', {
        onFailure: function(transport){
          Management.showError("Internal error: Unable to open menu: " + menuName);
        },
        onSuccess: function(transport) {
          menuElement.innerHTML = transport.responseText;
          
          var hideButton = $(document.createElement("div"));
          hideButton.addClassName("subMenuHideButton");
          Event.observe(hideButton, "click", function () {
            Management.hideMenu(menuName);
          });
          menuElement.appendChild(hideButton);

          new Ajax.Request('/' + getLocale() + '/tools/management_index/' + menuName + '/content', {
            method: 'get',
            parameters: {
               
            },
            onFailure: function(transport){
              Management.showError("Internal error: Unable to open menu: " + menuName);
            },
            onSuccess: function(transport){
              contentElement.innerHTML = transport.responseText;
              
              document.fire("delfoi:managementMenuLoaded", {
                menuName: menuName
              });
              
              document.fire('delfoi:menuOpened', {
                menu: menuName
              });
            }
          });
        }
      });
    } else {
      menuContainer.show();
      
      if (Prototype.Browser.IE) {
        menuContainer.repaint();
      }
      
      document.fire('delfoi:menuOpened', {
        menu: menuName
      });
    }
  },
  hideMenu: function(menuName){
    var menuContainer = $('managementSubMenuContainer_' + menuName);
    menuContainer.hide();
  },
  enableButton: function(id){
    var button = $(id);
    if (button && button.getAttribute('buttonDisabled') == 'true') {
      button.removeClassName('subMenuItemDisabled');
      button.setAttribute("onclick", button.getAttribute('_onclick'));
      button.removeAttribute("_onclick");
      button.removeAttribute("buttonDisabled");
    }
  },
  disableButton: function(id){
    var button = $(id);
    if (button.getAttribute('buttonDisabled') != 'true') {
      button.addClassName('subMenuItemDisabled');
      button.setAttribute("_onclick", button.getAttribute('onclick'));
      button.removeAttribute("onclick");
      button.setAttribute("buttonDisabled", "true");
    }
  },
  disableAllButtons: function(container){
    var container = $(container);
    if (container) {
      var buttons = container.select('.subMenuItem');
      for (var i = 0; i < buttons.length; i++) 
        Management.disableButton(buttons[i].id);
    }
  },
  /**
   * 
   * 
   * 
   * @param {Object} options
   *   url: ilman kielikoodia, 
   *   method: get,
   *   parameters: parameterit, 
   *   onSuccess: function (transport) { 
   *     
   *   }, 
   *   onError: function (errorMessage, errorCode, isHttpError) { 
   *   
   *   }
   */
  serverRequest: function (options) {
    var parameters = options.parameters ? options.parameters : {};
    
    if (Prototype.Browser.IE) {
      parameters = Object.extend(parameters, {
        ts: new Date().getTime()
      }); 
    }
    new Ajax.Request('/' + getLocale() + options.url, {
      method: options.method ? options.method : 'post',
      parameters: parameters,
      onCreate: function(transport){
        if (options.onCreate) 
          options.onCreate(transport);
      },
      onSuccess: function(transport){
        try {
          if (!transport.responseXML) {
            if (options.onError) 
              options.onError('Internal error: XMLDocument not found');
          }
          else {
            var validNode = transport.responseXML.documentElement.getElementsByTagName('errorCode')[0];
            var ret = parseInt(getElementText(validNode));
            if (ret == 0) {
              if (options.onSuccess) 
                options.onSuccess(transport);
            }
            else {
              var messageNode = transport.responseXML.documentElement.getElementsByTagName('message')[0];
              if (options.onError) 
                options.onError(getElementText(messageNode), ret, false);
            }
          }
        } catch (e) {
          alert('Internal error occured:' + e);
        }
      },
      onFailure: function(transport){
        if (options.onError) 
          options.onError(transport.responseText, transport.status, true);
      }
    });
  },
  ajaxRequest: function (url, options) {
    var parameters = options.parameters ? options.parameters : {};
    
    if (Prototype.Browser.IE) {
      parameters = Object.extend(parameters, {
        ts: new Date().getTime()
      }); 
    }
    
    new Ajax.Request('/' + getLocale() + url, {
      method: 'get',
      parameters: parameters,
      onCreate: function(transport){
        if (options.onCreate) 
          options.onCreate(transport);
      },
      onFailure: function(transport){
        if (options.onFailure)
          options.onFailure(transport); 
      },
      onSuccess: function(transport){
       if (options.onSuccess)
          options.onSuccess(transport); 
      }
    });
  },
  showError: function (message) {
    alert(message);
  },
  _managementFrameWrapped: function(event){
    Management.ajaxRequest('/tools/management_index/menu', {
      onFailure: function(transport){
        Management.showError("Internal error: Unable to open management view");
      },
      onSuccess: function(transport){
        var bodyElement = document.getElementsByTagName('body')[0];
        var managementContainer = $(document.createElement("div"));
        managementContainer.id = 'managementContainer';
        
        var managementMainNavi = $(document.createElement("div"));
        managementMainNavi.id = 'managementMainNavi';
        managementMainNavi.innerHTML = transport.responseText;
        
        bodyElement.appendChild(managementContainer);
      
        managementContainer.appendChild(managementMainNavi);
      }
    });
  },
  _managementMenuLoaded: function(event){
    switch (event.memo.menuName) {
      case 'users':
        Management.enableButton("subMenuItem_createuser");
        Management.enableButton("subMenuItem_createusergroup");
        break;
    }
  },
  _onIframeLoad: function (event) {
    var frameElement = event.target;
    var siteDocument = frameElement.ownerDocument;
    siteDocument.fire("delfoi:managementFrameWrapped");
    
    var gp = $('managementGlassPane');
    gp.setStyle({
      'top': '0px',
      'left': '0px',
      'width': frameElement.getWidth() + 'px',
      'height': frameElement.getHeight() + 'px'
    });
    
    new Effect.Opacity(gp, {
      from: 0,
      to: 0.6,
      duration: 1.0
    });
    
    Event.stopObserving(frameElement, "load", this._onIframeLoad);
  },
  relocateElement: function(id, containerId) {
    $(containerId).appendChild($(id));    
  },
  _groupResourceNo: -1,
  _openMenu: undefined
});

Object.extend(ManagementClass, {
  // Generic 1 - 19 
  
  ERROR_UNDEFINED: 1,
  ERROR_MANDATORY_PARAMETER_MISSING: 2,
  ERROR_UPDATECOUNTER_MISMATCH: 3,
 
  // UserManagement 20 - 39 
  
  ERROR_USEREXISTS_EMAIL: 20,
  ERROR_USEREXISTS_USERNAME: 21,
  ERROR_PASSWORDS_DO_NOT_MATCH: 22,
  ERROR_NO_ROLES_SPECIFIED: 23,
  ERROR_USERGROUP_EXISTS: 24,
  ERROR_USERGROUP_USERSEARCH_TOO_MUCH_RESULTS : 25,
  ERROR_USERGROUP_USERSEARCH_EMPTY_QUERY_CRITERIA : 26,
  ERROR_USERGROUP_USERSEARCH_NO_RESULTS : 27,
  ERROR_IMPORTUSERS_IMPORTTING_FAILED: 28
  
  // DocumentManagement 40 - 59 
});

Management = new ManagementClass(); 

document.observe("delfoi:menuOpened", function (event) {
  switch (event.memo.menu) {
    case 'users':
      UserManagement.menuOpened();
    break;
    case 'docs':
      DocumentManagement.menuOpened();
    break;
  }
});

GenericManagementClass = Class.create({
  initialize: function(basepath) {
    this.basepath = basepath;
  },
  goHome: function (event) {
    var container = $(Management._openMenu + '.workarea');
    if (container)
      container.innerHTML = '';
  },
  selectResource: function(resourceId, resourceType){
    if (this.getSelectedResourceNo() > 0) {
      var selectedElement = $('managementDocsResource_' + this.getSelectedResourceNo());
      if (selectedElement != undefined) {
        selectedElement.removeClassName('selected');
      }
    }
    
    this.setSelectedResource(resourceId, resourceType);
    
    var resourceDiv = $('managementDocsResource_' + resourceId);
    resourceDiv.addClassName('selected');
    
    if (this._onResourceSelected)
      this._onResourceSelected.call(this, resourceId, resourceType);
  },
  createSaveResourceModal: function (event){
    var container = $(Management._openMenu + '.workarea');
    var saveModal = document.createElement('div');
    saveModal.setAttribute('id','saveModal');
    saveModal.setAttribute('class','saveModal');
    
    container.appendChild(saveModal);
    
  },
  deleteSaveResourceModal: function (event){
    var container = $(Management._openMenu + '.workarea');
    var saveModal = $('saveModal');
    container.removeChild(saveModal);
    
  },
  deleteResource: function (resourceId) {
    var _this = this;
    var container = $(Management._openMenu + '.workarea');
    
    Management.ajaxRequest(this.basepath + 'deleteresource/delform', {
      parameters: {
        resourceNo: _this.getSelectedResourceNo() 
      },
      onCreate: function(transport){
        container.innerHTML = '';
        $(container).addClassName('loading');
      },
      onFailure: function(transport){
        $(container).removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        $(container).removeClassName('loading');
        container.innerHTML = transport.responseText;
      }
    });
  },
  deleteResource_submit: function(event){
    Event.stop(event);
    
    var element = Event.element(event);
    var container = $(Management._openMenu + '.workarea');
    var _this = this;
    
    var resourceNo = element.resourceNo.value;
    
    var confirmValue = 'no';
    
    for (var i = 0; i < element.confirm.length; i++) {
      if (element.confirm[i].checked == true) {
        confirmValue = element.confirm[i].value;
        break;
      }
    }
    
    if (confirmValue == 'yes') {
      Management.serverRequest({
        url: this.basepath + 'deleteresource/delform.save',
        method: 'post',
        parameters: Form.serialize(element),
        onCreate: function(transport){
          container.innerHTML = '';
          $(container).addClassName('loading');
        },
        onError: function(errorMessage, errorCode, isHttpError){
          container.innerHTML = '';
          $(container).removeClassName('loading');
          Management.showError(errorMessage);
        },
        onSuccess: function(transport){
          $(container).removeClassName('loading');
          var resourceDiv = $('managementDocsResource_' + resourceNo);
          if (resourceDiv) {
            resourceDiv.remove();
          }
          
          _this.setSelectedResource(undefined, undefined);
          container.innerHTML = '';
        }
      });
    } else {
      container.innerHTML = '';
    }
  },
  previewResource: function (event) {
    var siteContentFrame = $('siteContentFrame');
    var frameOriginalHeight = siteContentFrame.getHeight();
    var onLoad = function (event) {
      var gp = $('managementGlassPane');
      
      new Effect.Opacity(gp, {
        from: 0.6,
        to: 0,
        duration: 1.0
      });
      
      var onClick = function(event){
        $('managementContainer').show();
        var gp = $('managementGlassPane');
        
        new Effect.Opacity(gp, {
          from: 0,
          to: 0.6,
          duration: 1.0
        });
        
        Event.stopObserving(gp, "click", onClick);
        siteContentFrame.writeAttribute('height',frameOriginalHeight);
        gp.setStyle({
            'height': frameOriginalHeight + 'px'
          });
      };
      
      Event.observe(gp, "click", onClick);
      
      Event.stopObserving(siteContentFrame, "load", onLoad);
      
      gp.setStyle({
        'cursor': 'pointer'
      });
    };

    var frameResize = function(event){
      var gp = $('managementGlassPane');
      
      var frameContentSideNav = siteContentFrame.contentWindow.document.getElementById('siteLeftContentWrapper');
      var frameContentSideNavHeight = $(frameContentSideNav).getHeight() + 155;
      
      var frameContentNews = siteContentFrame.contentWindow.document.getElementById('siteNewsWrapper');
      var frameContentNewsHeight = $(frameContentNews).getHeight() + 155;
      
      var frameContentBody = siteContentFrame.contentWindow.document.getElementById('siteContainerWrapper');
      var frameContentHeight = $(frameContentBody).getHeight() + 155;
      
      if (frameContentHeight >= frameOriginalHeight && frameContentHeight >= frameContentNewsHeight) {
        $(siteContentFrame).writeAttribute('height', frameContentHeight);
        gp.setStyle({
          'height': frameContentHeight + 'px'
        })
      } else if (frameContentNewsHeight >= frameOriginalHeight){
        $(siteContentFrame).writeAttribute('height', frameContentNewsHeight);
        gp.setStyle({
          'height': frameContentNewsHeight + 'px'
        })
      } 
      
      Event.stopObserving(siteContentFrame, "load", frameResize);
    };

    
    siteContentFrame.src = '/' + getLocale() + this.basepath + 'preview/preview?resourceId=' + this.getSelectedResourceNo();
    Event.observe(siteContentFrame, "load", onLoad);
    Event.observe(siteContentFrame, "load", frameResize);
    $('managementGlassPane').setStyle({
      'cursor': 'wait' 
    });
    
    
    $('managementContainer').hide();
  },
  copyResource: function (event) {
	this.setClipboard(this.getSelectedResourceNo(), this.getSelectedResourceType(), 'copy');
  },
  cutResource: function (event) {
	this.setClipboard(this.getSelectedResourceNo(), this.getSelectedResourceType(), 'cut');
  },
  pasteResource: function (event) {
	var clipboard = this.getClipboard();
	    
	var _this = this;
	    
	switch (clipboard.operation) {
	  case 'copy':
	    Management.serverRequest({
	      url: this.basepath + 'copy/copy',
	      method: 'post',
	      parameters: {
	        parentNo: this.getSelectedResourceNo(),
	        resourceNo: clipboard.resourceNo
	      },
	      onSuccess: function(transport){
	        _this.refreshNode(_this.getSelectedResourceNo(), function(resourceId) {
	          if (!_this.isNodeOpen(resourceId))
	            _this.loadNode(resourceId, function(){
	              var resourceNoNode = transport.responseXML.documentElement.getElementsByTagName('resourceNo')[0];
	              var resourceTypeNode = transport.responseXML.documentElement.getElementsByTagName('resourceType')[0];
	    		  var resourceNo = parseInt(getElementText(resourceNoNode));
	    		  var resourceType = parseInt(getElementText(resourceTypeNode)); 
	              if ((resourceNo != NaN) && (resourceNo > 0)){
	  			    _this.selectResource(resourceNo, resourceType);	
				  }
	            });
	        });            
	      },
	      onError: function(errorMessage, errorCode, isHttpError){
	        Management.showError(errorMessage);
	      }
	    });
	  break;
	  case 'cut':
	    Management.serverRequest({
	      url: this.basepath + 'cut/cut',
	      method: 'post',
	      parameters: {
	        parentNo: this.getSelectedResourceNo(),
	        resourceNo: clipboard.resourceNo
	      },
	      onSuccess: function(){
	        _this.removeNode(clipboard.resourceNo);
	           
	        _this.refreshNode(_this.getSelectedResourceNo(), function(resourceId) {
	          if (!_this.isNodeOpen(resourceId))
	            _this.loadNode(resourceId);
	        });
	      },
	      onError: function(errorMessage, errorCode, isHttpError){
	        Management.showError(errorMessage);
	      }
	    });
	  break;
	}
  },
  getClipboard: function () {
	if (this._clipboard == null) {
	  this._clipboard = {
	    resourceNo: null,
	    resourceType: null,
	    operation: 'none'
	  };
	}
	    
	return this._clipboard;
  },
  setClipboard: function (resourceNo, resourceType, operation) {
	var clipboard = this.getClipboard();  
	clipboard.resourceNo = resourceNo;
	clipboard.resourceType = resourceType;
	clipboard.operation = operation;
  },
  _openNode: function (resourceId) {
    var resourceDiv = $('managementDocsResource_' + resourceId);
    var childContainer = resourceDiv.select('div.childResourcesContainer')[0];
    
    if (resourceDiv.hasClassName('cc')) {
      resourceDiv.removeClassName('cc');
      resourceDiv.addClassName('co')
    } else {
      if (resourceDiv.hasClassName('rc')) {
        resourceDiv.removeClassName('rc');
        resourceDiv.addClassName('ro');
      }
    }
      
    childContainer.show();
    resourceDiv.setAttribute('open', "true");
  },
  openNode: function(resourceId, afterOpened) {
    if (!this.isLoaded(resourceId)) {
      var _this = this;
      this.loadNode(resourceId, function (resourceId) {
        _this._openNode(resourceId);
        if (afterOpened)
          afterOpened();
      });
    } else {
      this._openNode(resourceId);
      if (afterOpened)
        afterOpened();
    }
  },
  closeNode: function(resourceId) {
    var resourceDiv = $('managementDocsResource_' + resourceId);
    var childContainer = resourceDiv.select('div.childResourcesContainer')[0];
    
    if (resourceDiv.hasClassName('co')) {
      resourceDiv.removeClassName('co');
      resourceDiv.addClassName('cc')
    }
    else {
      if (resourceDiv.hasClassName('ro')) {
        resourceDiv.removeClassName('ro');
        resourceDiv.addClassName('rc');
      }
    }
    
    childContainer.hide();
    resourceDiv.setAttribute('open', "false");
  },
  refreshNode: function(resourceId, afterRefresh) {
    if (this.isNodeOpen(resourceId)) {
      this.closeNode(resourceId);
      var _this = this;
      this.loadNode(resourceId, function (resourceId) {
        _this.openNode(resourceId, function () {
          if (afterRefresh)
            afterRefresh(resourceId);  
        });  
      });
    } else {
      var resourceDiv = $('managementDocsResource_' + resourceId);
      if (resourceDiv)
        resourceDiv.setAttribute('loaded', "false");
      
      if (afterRefresh)
        afterRefresh(resourceId);
    }
  },
  isLoaded: function (resourceId) {
    return $('managementDocsResource_' + resourceId).getAttribute('loaded') == 'true';
  },
  loadNode: function (resourceId, afterLoad) {
    var resourceDiv = $('managementDocsResource_' + resourceId);
    var childContainer = resourceDiv.select('div.childResourcesContainer')[0];
    var navIcon = resourceDiv.select('div.navIcon')[0];
     
    if (!childContainer) {
      childContainer = $(document.createElement("div"));
      childContainer.addClassName('childResourcesContainer');
      resourceDiv.appendChild(childContainer);
    }
    else 
      childContainer.show();
      
    navIcon.addClassName('loading');
    
    Management.ajaxRequest(this.basepath + 'content.loadtreechildren', {
      parameters: {
        parentNo: resourceId
      },
      onFailure: function(transport){
        Management.showError("Internal error: Unable to open tree node");
      },
      onSuccess: function(transport){
        childContainer.innerHTML = transport.responseText;
        navIcon.removeClassName('loading');
        resourceDiv.setAttribute("loaded", "true");
        if (afterLoad)
          afterLoad(resourceId);
      }
    });
  },
  isNodeOpen: function (resourceId) {
    return $('managementDocsResource_' + resourceId).getAttribute('open') == 'true';
  },
  removeNode: function (resourceId) {
	var resourceDiv = $('managementDocsResource_' + resourceId);
	if (resourceDiv) {
	  resourceDiv.remove();
	}
  },
  folderNavIconClick: function(resourceId){
    if (!this.isLoaded(resourceId)) {
      var _this = this;
      this.loadNode(resourceId, function (resourceId) {
        _this._openNode(resourceId);  
      });
    }
    else {
      if (this.isNodeOpen(resourceId)) {
        this.closeNode(resourceId);  
      }
      else {
        this.openNode(resourceId);
      }
    }
  },
  createFolder: function(event){
    Management.ajaxRequest(this.basepath + 'createfolder/createform', {
      parameters: {
        parentNo: this.getSelectedResourceNo()
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open document creation view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        $(Management._openMenu + '.workarea').innerHTML = transport.responseText;
        createFCKEditors();
      }
    });
  },
  createFolder_submit: function(event){
    Event.stop(event);
    updateFCKLinkedFields();
    
    var element = Event.element(event);
    var container = $(Management._openMenu + '.workarea');
    var _this = this;
    
    Management.serverRequest({
      url: this.basepath + 'createfolder/createform.save',
      method: 'post',
      parameters: Form.serialize(element),
      onCreate: function(transport){
        _this.createSaveResourceModal();
      },
      onError: function(errorMessage, errorCode, isHttpError) {
        _this.deleteSaveResourceModal();
        Management.showError(errorMessage);
      },
      onSuccess: function(transport) {
        _this.deleteSaveResourceModal();
        var resourceId = _this.getSelectedResourceNo();
        _this.refreshNode(resourceId, function(resourceId) {
          if (!_this.isNodeOpen(resourceId)) {
            _this.openNode(resourceId, function () {
              if (transport.responseXML) {
                var resourceNode = transport.responseXML.documentElement.getElementsByTagName('resourceNo')[0];
                resourceId = parseInt(getElementText(resourceNode));
                if (resourceId > 0) {
                  _this.selectResource(resourceId, 4);
                }
                $(Management._openMenu + '.workarea').innerHTML = '';
              }
            });
          }
        });
      }
    });
  },
  publishResource: function(event){
    Management.ajaxRequest(this.basepath + 'publishresource/publishform', {
      parameters: {
        resourceNo: this.getSelectedResourceNo()
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open publication view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        $(Management._openMenu + '.workarea').innerHTML = transport.responseText;
        createFCKEditors();
      }
    });
  },
  publishResource_submit: function(event){
    Event.stop(event);
    updateFCKLinkedFields();
    
    var element = Event.element(event);
    var container = $(Management._openMenu + '.workarea');
    var _this = this;
    
    Management.serverRequest({
      url: this.basepath + 'publishresource/publishform.save',
      method: 'post',
      parameters: Form.serialize(element),
      onCreate: function(transport){
        _this.createSaveResourceModal();
      },
      onError: function(errorMessage, errorCode, isHttpError) {
        _this.deleteSaveResourceModal();
        Management.showError(errorMessage);
      },
      onSuccess: function(transport) {
        _this.deleteSaveResourceModal();
        var dialogTitle = getElementText(transport.responseXML.documentElement.getElementsByTagName('okMessageTitle')[0]);
        var dialogContent = getElementText(transport.responseXML.documentElement.getElementsByTagName('okMessageContent')[0]);
        var alertDialog = new IxAlert(dialogContent, dialogTitle);
      }
    });
  },
  listPublications: function(event){
    Management.ajaxRequest(this.basepath + 'deletepublications/listpublications', {
      parameters: {
        resourceNo: this.getSelectedResourceNo()
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open publication listing view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        $(Management._openMenu + '.workarea').innerHTML = transport.responseText;
      }
    });
  },
  deletePublication: function(event,resNo){
    Management.ajaxRequest(this.basepath + 'deletepublications/deletepublication', {
      parameters: {
        resourceNo: resNo
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open delete publication view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        $(Management._openMenu + '.workarea').innerHTML = transport.responseText;
      }
    });
  },
  deletePublication_submit: function(event){
    Event.stop(event);
    
    var element = Event.element(event);
    var container = $(Management._openMenu + '.workarea');
    var _this = this;
    
    var confirmValue = 'no';
    
    for (var i = 0; i < element.confirm.length; i++) {
      if (element.confirm[i].checked == true) {
        confirmValue = element.confirm[i].value;
        break;
      }
    }
    
    if (confirmValue == 'yes') {
      Management.serverRequest({
        url: this.basepath + 'deletepublications/deletepublication.save',
        method: 'post',
        parameters: Form.serialize(element),
        onCreate: function(transport){
          _this.createSaveResourceModal();
        },
        onError: function(errorMessage, errorCode, isHttpError){
          _this.deleteSaveResourceModal();
          Management.showError(errorMessage);
        },
        onSuccess: function(transport){
          _this.deleteSaveResourceModal();
          _this.listPublications();
        }
      });
    } else {
      _this.listPublications();
    }
  },
  createBinary: function(event){
    var _this = this;
    Management.ajaxRequest(this.basepath + 'createbinary/createform', {
      parameters: {
        parentNo: this.getSelectedResourceNo()
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open resource creation view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        var workarea = $(Management._openMenu + '.workarea');
        workarea.innerHTML = transport.responseText;
        createFCKEditors();
        // Piilojemma binaarieditorille
        var hiddenFrame = document.createElement('iframe');
        hiddenFrame.frameBorder = 0; 
        hiddenFrame.width = 0; 
        hiddenFrame.height = 0;
        hiddenFrame.name = 'binaryHandler';
        
        Event.observe(hiddenFrame, 'load', function(event) {
          var dasFrame = Event.element(event);
          var errorNodes = dasFrame.contentDocument.getElementsByTagName('errorCode');
          if (errorNodes.length > 0) {
            var validNode = errorNodes[0];
            var ret = parseInt(getElementText(validNode));
            if (ret == 0) {
              // Luodun binaarin valitseminen puusta luonnin jalkeen
              var resourceId = _this.getSelectedResourceNo();
              
              _this.refreshNode(resourceId, function(resourceId){
                if (!_this.isNodeOpen(resourceId)) {
                  _this.openNode(resourceId, function(){
                    var resourceNode = dasFrame.contentDocument.getElementsByTagName('resourceNo')[0];
                    resourceId = parseInt(getElementText(resourceNode));
                    if (resourceId > 0) {
                      _this.selectResource(resourceId, 3);
                    }
                    $(Management._openMenu + '.workarea').innerHTML = '';
                  });
                }
                else {
                  // Toisteisuutta...
                  var resourceNode = dasFrame.contentDocument.getElementsByTagName('resourceNo')[0];
                  resourceId = parseInt(getElementText(resourceNode));
                  if (resourceId > 0) {
                    _this.selectResource(resourceId, 3);
                  }
                  $(Management._openMenu + '.workarea').innerHTML = '';
                }
              });
            }
            else {
              var messageNode = dasFrame.contentDocument.getElementsByTagName('message')[0];
              if (messageNode != null) {
                alert(getElementText(messageNode));
              }
            }
          }
        });
        
        workarea.appendChild(hiddenFrame);
        var binaryForm = workarea.getElementsByTagName('form')[0];
        binaryForm.target = 'binaryHandler';
        binaryForm.action = '/' + getLocale() + _this.basepath + 'createbinary/createform.save';
      }
    });
  },
  editResource: function(event){
    var requestPath = '';
    var _this = this;
    if (this.getSelectedResourceType() == 37) {
      requestPath = this.basepath + 'editresource/editdocumentform';
    }
    else if (this.getSelectedResourceType() == 38) {
      requestPath = this.basepath + 'editresource/editqueryform';
    }
    else if (this.getSelectedResourceType() == 4) {
      requestPath = this.basepath + 'editresource/editfolderform';
    }
    else if (this.getSelectedResourceType() == 3) {
      requestPath = this.basepath + 'editresource/editbinaryform';
    }
    if (requestPath != '') {
      Management.ajaxRequest(requestPath, {
        parameters: {
          resourceNo: this.getSelectedResourceNo()
        },
        onCreate: function(transport){
          $(Management._openMenu + '.workarea').innerHTML = '';
          $(Management._openMenu + '.workarea').addClassName('loading');
        },
        onFailure: function(transport){
          $(Management._openMenu + '.workarea').removeClassName('loading');
          Management.showError("Internal error: Unable to open resource editing view");
        },
        onSuccess: function(transport){
          $(Management._openMenu + '.workarea').removeClassName('loading');
          var workarea = $(Management._openMenu + '.workarea');
          workarea.innerHTML = transport.responseText;
          
          // FCK-dokumentteja tai -kyselyja editoitaessa tabit
          if (_this.getSelectedResourceType() == 37) {
            var documentTabComponent = $('fckDocumentEditorTabs');
            var tabController = new IxProtoTabs(documentTabComponent);
          }
          else if (_this.getSelectedResourceType() == 38) {
            var documentTabComponent = $('fckQueryEditorTabs');
            var tabController = new IxProtoTabs(documentTabComponent);
          }
          
          createFCKEditors();

          // Piilojemma binaarieditorille
          if (_this.getSelectedResourceType() == 3) {
            var hiddenFrame = document.createElement('iframe');
            hiddenFrame.frameBorder = 0;
            hiddenFrame.width = 0;
            hiddenFrame.height = 0;
            hiddenFrame.name = 'binaryHandler';
            hiddenFrame.onload = function(event){
              var dasFrame = Event.element(event);
              
              var validNode = dasFrame.contentDocument.getElementsByTagName('errorCode')[0];
              var ret = parseInt(getElementText(validNode));
              if (ret == 0) {
                // Paivityslaskurin paivittaminen
                var workarea = $(Management._openMenu + '.workarea');            
                var formElement = workarea.getElementsByTagName('form')[0];
                var newCounterNode = dasFrame.contentDocument.getElementsByTagName('updateCounter')[0];
                if (newCounterNode != undefined) {
                  storeAsHiddenValue(formElement, 'updateCounter', parseInt(getElementText(newCounterNode)));
                }
                // Puunoden paivittaminen
                if (formElement.title) {
                  var resourceDiv = $('managementDocsResource_' + formElement.resourceNo.value);
                  if (resourceDiv) {
                    var resourceTitle = resourceDiv.down('div.resourceTitle');
                    if (resourceTitle) 
                      resourceTitle.innerHTML = formElement.title.value;
                  }
                }
              }
              else {
                var messageNode = dasFrame.contentDocument.getElementsByTagName('message')[0];
                if (messageNode != null) {
                  alert(getElementText(messageNode));
                }
              }
            };
            workarea.appendChild(hiddenFrame);
            var binaryForm = workarea.getElementsByTagName('form')[0];
            binaryForm.target = 'binaryHandler';
            binaryForm.action = '/' + getLocale() + _this.basepath + 'editresource/editbinaryform.save';
          }
        }
      });
    }
  },
  editResource_submit: function(event){
    var _this = this;
    
    Event.stop(event);
    updateFCKLinkedFields();
    
    var element = Event.element(event);
    
    var resourceType = parseInt(element.resourceType.value);
    var resourceNo = parseInt(element.resourceNo.value);
    
    var container = $(Management._openMenu + '.workarea');
    var requestPath = '';
    
    switch (resourceType) {
      case 37:
        requestPath = this.basepath + 'editresource/editdocumentform.save';
      break;
      case 38:
    	requestPath = this.basepath + 'editresource/editqueryform.save';
      break;
      case 4:
        requestPath = this.basepath + 'editresource/editfolderform.save';
      break;
    }
	    
    if (requestPath != '') {
      // TODO: onnistumisen yhteydessa updatecounter-paivitys ja puun refresh!!
      Management.serverRequest({
        url: requestPath,
        method: 'post',
        parameters: Form.serialize(element),
        onCreate: function(transport){
          _this.createSaveResourceModal();
        },
        onError: function(errorMessage, errorCode, isHttpError){
          _this.deleteSaveResourceModal();
          Management.showError(errorMessage);
        },
        onSuccess: function(transport) {
          var reloadEditor = false;
		    
  		  var contentChangeNode = transport.responseXML.documentElement.getElementsByTagName('contentChanged')[0];
  		  if (contentChangeNode != undefined) {
  		    reloadEditor = parseInt(getElementText(contentChangeNode)) == 1;
  		  }
  		  
  		  var workarea = $(Management._openMenu + '.workarea');            
		  var formElement = workarea.getElementsByTagName('form')[0];
       
		  if (reloadEditor == true) {
		    _this.deleteSaveResourceModal();
		    _this.selectResource(resourceNo, resourceType);
		    _this.editResource();
		  } else {
			// Paivityslaskurin paivittaminen
            var newCounterNode = transport.responseXML.documentElement.getElementsByTagName('updateCounter')[0];
            if (newCounterNode != undefined) {
              storeAsHiddenValue(formElement, 'updateCounter', parseInt(getElementText(newCounterNode)));
            }
            // Puunoden paivittaminen
            if (formElement.title) {
              var resourceDiv = $('managementDocsResource_' + formElement.resourceNo.value);
              if (resourceDiv) {
                var resourceTitle = resourceDiv.down('div.resourceTitle');
                if (resourceTitle) 
                  resourceTitle.innerHTML = formElement.title.value;
              }
            }
            _this.deleteSaveResourceModal();
		  }
        }
      });
    }
  },
  toggleVisibility: function(options) {
    var _this = this;
    Management.ajaxRequest(this.basepath + 'togglevisibility/togglevisibility', {
      parameters: {
        resourceNo: this.getSelectedResourceNo()
      },
      onFailure: function(transport){
        Management.showError("Internal error: Unable to toggle visibility");
      },
      onSuccess: function(transport){
        var resourceDiv = $('managementDocsResource_' + _this.getSelectedResourceNo());
        if (resourceDiv) {
          if (resourceDiv.hasClassName('hiddenResource')) {
            resourceDiv.removeClassName('hiddenResource');
          }
          else {
            resourceDiv.addClassName('hiddenResource');
          }
        }
      }
    });
  },
  loadTitle: function(options){
    Management.ajaxRequest(this.basepath + 'editresource/util.loadtitle', {
      parameters: {
        resourceNo: this.getSelectedResourceNo(),
        lang: options.language
      },
      onFailure: function(transport){
        Management.showError("Internal error: Unable to load title");
      },
      onSuccess: function(transport){
        var titleElement = document.getElementsByName('title')[0];
        titleElement.value = transport.responseText;
      }
    });
  },
  loadDescription: function(options){
    Management.ajaxRequest(this.basepath + 'editresource/util.loaddescription', {
      parameters: {
        resourceNo: this.getSelectedResourceNo(),
        lang: options.language
      },
      onFailure: function(transport){
        Management.showError("Internal error: Unable to load description");
      },
      onSuccess: function(transport){
        var editor = FCKeditorAPI.GetInstance(options.descriptionField);
        editor.SetHTML(transport.responseText);
      }
    });
  },
  loadContent: function(options){
    Management.ajaxRequest(this.basepath + 'editresource/util.loadcontent', {
      method: 'get',
      parameters: {
        resourceNo: options.resourceNo,
        lang: options.language
      },
      onFailure: function(transport){
        Management.showError("Internal error: Unable to load content");
      },
      onSuccess: function(transport){
        var editor = FCKeditorAPI.GetInstance(options.contentField);
        editor.SetHTML(transport.responseText);
      }
    });
  },
  changeLanguage: function(event, options){
    var element = event.target ? event.target : event.srcElement;
    var form = element.form;
    var oldValue = document.getElementsByName('previousLang')[0].value;
    var newValue = element.value;
    
    // Otsikon tallentaminen
    
    var titleElement = document.getElementsByName('title')[0];
    if (titleElement != undefined) {
      storeAsHiddenValue(form, 'title_' + oldValue, trim(titleElement.value));
    }
    
    // Kuvauksen tallentaminen
    
    if (options.descriptionField != undefined) {
      var descriptionEditor = FCKeditorAPI.GetInstance(options.descriptionField);
      storeAsHiddenValue(form, 'description_' + oldValue, descriptionEditor.GetHTML());
    }

    // Sisall�n tallentaminen (vain dokumenteille)

    if (options.contentField != undefined) {
      var contentEditor = FCKeditorAPI.GetInstance(options.contentField);
      storeAsHiddenValue(form, 'content_' + oldValue, contentEditor.GetHTML());
    }
    
    // Vinkataan editorille etta poistuva sisalt� vaatii tallennusta
    
    storeAsHiddenValue(form, 'langModified_' + oldValue, 'true');
    
    // Uuden kieliversion lataaminen kaytt�liittymaan
    
    options.language = newValue;
    if (titleElement != undefined) {
      var container = document.getElementById('title_' + newValue);
      if (container == null) {
        if (options.resourceNo > 0) {
          this.loadTitle(options);
        }
        else {
          titleElement.value = '';
        }
      }
      else {
        titleElement.value = container.value;
      }
    }
    if (options.descriptionField != undefined) {
      container = document.getElementById('description_' + newValue);
      if (container == null) {
        if (options.resourceNo > 0) {
          this.loadDescription(options);
        }
        else {
          descriptionEditor.SetHTML('');
        }
      }
      else {
        descriptionEditor.SetHTML(container.value);
      }
    }
    if (options.contentField != undefined) {
      container = document.getElementById('content_' + newValue);
      if (container == null) {
        if (options.resourceNo > 0) {
          this.loadContent(options);
        }
        else {
          contentEditor.SetHTML('');
        }
      }
      else {
        contentEditor.SetHTML(container.value);
      }
    }
    storeAsHiddenValue(form, 'previousLang', newValue);
    if (options.descriptionField != undefined) {
      fckSetDocumentLanguage(options.descriptionField, newValue);
    }
    if (options.contentField != undefined) {
      fckSetDocumentLanguage(options.contentField, newValue);
    }
  },
  setSelectedResource: function (resourceNo, resourceType) {
    this._selectedNo = resourceNo;
    this._selectedType = resourceType;
  },
  getSelectedResourceNo: function () {
    return this._selectedNo;
  },
  getSelectedResourceType: function () {
    return this._selectedType;
  }
});

DocumentManagementClass = Class.create(GenericManagementClass, {
  initialize: function($super) {
    $super('/tools/management_index/docs/');
  },
  menuOpened: function () {
    Management.disableAllButtons('managementSubMenu_docs');
    Management.enableButton('subMenuItem_docs.docshome');
    Management.enableButton('subMenuItem_docs.deletepublications');
  },
  createDocument: function(event){
    var _this = this;
    Management.ajaxRequest('/tools/management_index/docs/createdocument/createform', {
      parameters: {
        parentNo: this.getSelectedResourceNo()
      },
      onCreate: function(transport){
        $(Management._openMenu + '.workarea').innerHTML = '';
        $(Management._openMenu + '.workarea').addClassName('loading');
      },
      onFailure: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        Management.showError("Internal error: Unable to open document creation view");
      },
      onSuccess: function(transport){
        $(Management._openMenu + '.workarea').removeClassName('loading');
        $(Management._openMenu + '.workarea').innerHTML = transport.responseText;
        var documentTabComponent = $('fckDocumentEditorTabs');
        var tabController = new IxProtoTabs(documentTabComponent);
        createFCKEditors();
      }
    });
  },
  createDocument_submit: function(event){
    Event.stop(event);
    updateFCKLinkedFields();
    
    var element = Event.element(event);
    var container = $('docs.workarea');
    var _this = this;
    
    Management.serverRequest({
      url: '/tools/management_index/docs/createdocument/createform.save',
      method: 'post',
      parameters: Form.serialize(element),
      onCreate: function(transport){
        _this.createSaveResourceModal();
      },
      onError: function(errorMessage, errorCode, isHttpError) {
        _this.deleteSaveResourceModal();
        Management.showError(errorMessage);
      },
      onSuccess: function(transport) {
        _this.deleteSaveResourceModal();
        var resourceId = _this.getSelectedResourceNo();
        _this.refreshNode(resourceId, function(resourceId) {
          if (!_this.isNodeOpen(resourceId)) {
            _this.openNode(resourceId, function () {
              if (transport.responseXML) {
                var resourceNode = transport.responseXML.documentElement.getElementsByTagName('resourceNo')[0];
                resourceId = parseInt(getElementText(resourceNode));
                if (resourceId > 0) {
                  _this.selectResource(resourceId, 37);
                }
                $('docs.workarea').innerHTML = '';
              }
            });
          }
          else {
            // Toisteisuutta...
            if (transport.responseXML) {
              var resourceNode = transport.responseXML.documentElement.getElementsByTagName('resourceNo')[0];
              resourceId = parseInt(getElementText(resourceNode));
              if (resourceId > 0) {
                _this.selectResource(resourceId, 37);
                _this.editResource();
              }
            }
          }
        });
      }
    });
  },
  _onResourceSelected: function(resourceNo, resourceType){
    Management.disableAllButtons('managementSubMenu_docs');
    Management.enableButton('subMenuItem_docs.docshome');
    switch (resourceType) {
      case 3:
    	Management.enableButton('subMenuItem_docs.editresource');
        Management.enableButton('subMenuItem_docs.deleteresource');
        Management.enableButton('subMenuItem_docs.togglevisibility');
        Management.enableButton('subMenuItem_docs.publishresource');
        Management.enableButton('subMenuItem_docs.deletepublications');
        Management.enableButton('subMenuItem_docs.cut');
        Management.enableButton('subMenuItem_docs.copy');
      break;
      case 37:
        Management.enableButton('subMenuItem_docs.editresource');
        Management.enableButton('subMenuItem_docs.deleteresource');
        Management.enableButton('subMenuItem_docs.preview');
        Management.enableButton('subMenuItem_docs.togglevisibility');
        Management.enableButton('subMenuItem_docs.publishresource');
        Management.enableButton('subMenuItem_docs.deletepublications');
        Management.enableButton('subMenuItem_docs.cut');
        Management.enableButton('subMenuItem_docs.copy');
        break;
      case 4:
        Management.enableButton('subMenuItem_docs.createbinary');
        Management.enableButton('subMenuItem_docs.createdocument');
        Management.enableButton('subMenuItem_docs.createfolder');
        Management.enableButton('subMenuItem_docs.editresource');
        Management.enableButton('subMenuItem_docs.deleteresource');
        Management.enableButton('subMenuItem_docs.togglevisibility');
        Management.enableButton('subMenuItem_docs.deletepublications');
        Management.enableButton('subMenuItem_docs.cut');
        Management.enableButton('subMenuItem_docs.copy');
        if (this.getClipboard().resourceNo > 0)
          Management.enableButton('subMenuItem_docs.paste');
        break;
      case 12:
        Management.enableButton('subMenuItem_docs.createbinary');
        Management.enableButton('subMenuItem_docs.createdocument');
        Management.enableButton('subMenuItem_docs.createfolder');
        Management.enableButton('subMenuItem_docs.deletepublications');
        if (this.getClipboard().resourceNo > 0)
            Management.enableButton('subMenuItem_docs.paste');
        break;
      default:
        break;
    }
  }
});

DocumentManagement = new DocumentManagementClass();

UserManagement = {
  menuOpened: function () {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_createuser');
    Management.enableButton('subMenuItem_createusergroup');
    Management.enableButton('subMenuItem_importusers');
  },
  selectPanelistUser: function(id){
    UserManagement._select(id, 'panelistUser');
  },
  createSaveUserModal: function (event){
    var container = $('managementSubMenuContent_users');
    var saveModal = document.createElement('div');
    saveModal.setAttribute('id','saveModal');
    saveModal.setAttribute('class','saveModal');
    
    container.appendChild(saveModal);
    
  },
  deleteSaveUserModal: function (event){
    var container = $('managementSubMenuContent_users');
    var saveModal = $('saveModal');
    container.removeChild(saveModal);
    
  },
  selectManagerUser: function(id){
    UserManagement._select(id, 'managerUser');
  },
  selectPanelistGroup: function(id){
    UserManagement._select(id, 'panelistGroup');
  },
  selectManagerGroup: function(id){
    UserManagement._select(id, 'managerGroup');
  },
  goHome: function(event){
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_createuser');
    Management.enableButton('subMenuItem_createusergroup');
    Management.enableButton('subMenuItem_importusers');

    Management.ajaxRequest('/tools/management_index/users/content', {
      parameters: {
      },
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport){
        // TODO: Lokalisointi?
        $('managementSubMenuContent_users').removeClassName('loading');
        alert('Failed to open document creation view');
      },
      onSuccess: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        $('managementSubMenuContent_users').innerHTML = transport.responseText;
      }
    });
  },
  createUser: function(event) {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_usershome');
    
    Management.ajaxRequest('/tools/management_index/users/createuser/createform', {
      parameters: {
      },
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        $('managementSubMenuContent_users').innerHTML = transport.responseText;
      }
    });
  },
  createUser_submit: function(event) {
    Event.stop(event);
    var formElement = Event.element(event);
    var parameters = Form.serialize(formElement);
    
    Management.serverRequest({
      url: '/tools/management_index/users/createuser/createform.save',
      method: 'post',
      parameters: parameters,
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      },
      onSuccess: function () {
        UserManagement.deleteSaveUserModal();
        UserManagement.goHome();
      },
      onError: function(errorMessage, errorCode, isHttpError) {
        UserManagement.deleteSaveUserModal();
        switch (errorCode) {
          case ManagementClass.ERROR_USEREXISTS_EMAIL: 
            Management.ajaxRequest('/tools/management_index/users/createuser/attachform', {
              parameters: parameters,
              onFailure: function(transport){
                UserManagement.deleteSaveUserModal();
                Management.showError("Internal error: Unable to open view");
              },
              onSuccess: function(transport){
                UserManagement.deleteSaveUserModal();
                $('managementSubMenuContent_users').innerHTML = transport.responseText;
              }
            });
          break;
          default:
            Management.showError(errorMessage);
          break;
        }
      }
    });
  },
  attachUser_submit: function(event) {
    Event.stop(event);
    
    var formElement = Event.element(event);
    var action = 'cancel';
    
    for (var i = 0; i < formElement.attachuser.length; i++) {
      if (formElement.attachuser[i].checked) {
        method = formElement.attachuser[i].value;
        break;
      }
    }
    
    switch (action) {
      case 'attach':
        Management.serverRequest({
          url: '/tools/management_index/users/createuser/attachform.save',
          method: 'post',
          parameters: Form.serialize(formElement),
          onCreate: function(transport){
            UserManagement.createSaveUserModal();
          },
          onSuccess: function(){
            UserManagement.deleteSaveUserModal();
            UserManagement.goHome();
          },
          onError: function(errorMessage, errorCode, isHttpError){
            UserManagement.deleteSaveUserModal();
            Management.showError(errorMessage);
          }
        });
      break;
      default:
        UserManagement.goHome();
      break;
    }
  },
  editUser: function(event) {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_usershome');
    
    Management.ajaxRequest('/tools/management_index/users/edituser/editform', {
      parameters: {
        userId: UserManagement._selectedId
      },
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        $('managementSubMenuContent_users').innerHTML = transport.responseText;
      }
    });
  },
  editUser_submit: function(event) {
    Event.stop(event);
    var formElement = Event.element(event);
    
    Management.serverRequest({
      url: '/tools/management_index/users/edituser/editform.save',
      method: 'post',
      parameters: Form.serialize(formElement),
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      },
      onSuccess: function(){
        UserManagement.deleteSaveUserModal();
        UserManagement.goHome();
      },
      onError: function(errorMessage, errorCode, isHttpError){
        UserManagement.deleteSaveUserModal();
        Management.showError(errorMessage);
      }
    });
  },
  createUserGroup: function(event) {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_usershome');
    
    Management.ajaxRequest('/tools/management_index/users/createusergroup/createform', {
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        $('managementSubMenuContent_users').innerHTML = transport.responseText;
        createFCKEditors();
      }
    });
  },
  createUserGroup_submit: function(event) {
    Event.stop(event);
    var formElement = Event.element(event);
    updateFCKLinkedFields();
    
    Management.serverRequest({
      url: '/tools/management_index/users/createusergroup/createform.save',
      method: 'post',
      parameters: Form.serialize(formElement),
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      },
      onSuccess: function(){
        UserManagement.deleteSaveUserModal();
        UserManagement.goHome();
      },
      onError: function(errorMessage, errorCode, isHttpError){
        UserManagement.deleteSaveUserModal();
        Management.showError(errorMessage);
      }
    });
  },
  editUserGroup: function(event) {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_usershome');
    
    Management.ajaxRequest('/tools/management_index/users/editusergroup/editform', {
      parameters: {
        usergroupId: UserManagement._selectedId
      },
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        $('managementSubMenuContent_users').removeClassName('loading');
        $('managementSubMenuContent_users').innerHTML = transport.responseText;
        createFCKEditors();
      }
    });
  },
  editUserGroup_submit: function (event) {
    Event.stop(event);
    
    var formElement = Event.element(event);
    
    updateFCKLinkedFields();
    
    Management.serverRequest({
      url: '/tools/management_index/users/editusergroup/editform.save',
      method: 'post',
      parameters: Form.serialize(formElement), 
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      },
      onError: function(errorMessage, errorCode, isHttpError){
        UserManagement.deleteSaveUserModal();
        Management.showError(errorMessage); 
      },
      onSuccess: function(transport){
        UserManagement.deleteSaveUserModal();
        UserManagement.goHome();
      }
    });
  },
  editUserGroupSetUsers: function(event) {
    Management.ajaxRequest('/tools/management_index/users/editusergroup/setusersview', {
      parameters: {
        groupid: Management._groupResourceNo,
        usergroupId: UserManagement._selectedId
      },
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      },
      onFailure: function(transport){
        UserManagement.deleteSaveUserModal();
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function(transport){
        UserManagement.deleteSaveUserModal();
      }
    });
  },
  editUserGroup_SearchUsers: function(event) {
    var queryText = document.getElementsByName('usersearchfield')[0].value;
    Management.serverRequest({
      url: '/tools/management_index/users/editusergroup/searchusers',
      method: 'post',
      parameters: {
        criteria: queryText
      },
      onCreate: function(transport){
        $('userGroupSearchResultContainer').innerHTML = '';
        $('userGroupSearchResultContainer').addClassName('loading_small');
      },
      onError: function(errorMessage, errorCode, isHttpError){
        $('userGroupSearchResultContainer').removeClassName('loading_small');
        Management.showError(errorMessage); 
      },
      onSuccess: function(transport){
        $('userGroupSearchResultContainer').removeClassName('loading_small');
        var userNodes = transport.responseXML.documentElement.getElementsByTagName('user');
        var resultsSelect = $('userGroupSearchResultContainer');
        resultsSelect.innerHTML = '';
        
        for (var i = 0; i < userNodes.length; i++) {
          var id = getElementText(userNodes[i].getElementsByTagName('id')[0]);
          var username = getElementText(userNodes[i].getElementsByTagName('username')[0]);
          
          var userOption = document.createElement("option");
          userOption.value = id;
          userOption.innerHTML = username;
          
          resultsSelect.appendChild(userOption);
        }
      }
    });
  },
  editUserGroup_SearchUsers_addUser: function () {
    var sResultsSelect = $('userGroupSearchResultContainer');
    var userSelect = $('userGroupsCurrentUsersContainer');
    var addUsersField = document.getElementsByName('addUsers')[0];
    var usersArray = addUsersField.value.split(',');
    
    for (var i = usersArray.length - 1; i >= 0; i--) {
      var userId = parseInt(usersArray[i]);
      if (isNaN(userId)) 
        usersArray.splice(i, 1);
    }
    
    var users = sResultsSelect.getElementsByTagName('option');
    
    for (var i = users.length - 1; i >= 0; i--) {
      var user = users[i];
      if (user.selected == true) {
        user._pending = true;
        usersArray.push(user.value);
        userSelect.appendChild(user);
      }
    }
    
    addUsersField.value = usersArray.toString();
  },
  editUserGroup_removeSelectedUsers: function () {
    var usersSelect = $('userGroupsCurrentUsersContainer');  
    var removeUserField = document.getElementsByName('removeUsers')[0];
    var usersArray = removeUserField.value.split(',');
    
    for (var i = usersArray.length - 1; i >= 0; i--) {
      var userId = parseInt(usersArray[i]);
      if (isNaN(userId)) 
        usersArray.splice(i, 1);
    }
    
    var users = usersSelect.getElementsByTagName('option');
    
    for (var i = users.length - 1; i >= 0; i--) {
      var user = users[i];
      if (user.selected == true) {
        if (user._pending != true)
          usersArray.push(user.value);
        usersSelect.removeChild(user);
      }
    }
    
    removeUserField.value = usersArray.toString();
  },
  importUsers: function (event) {
    Management.disableAllButtons('managementSubMenu_users');
    Management.enableButton('subMenuItem_usershome');
    
    Management.ajaxRequest('/tools/management_index/users/importusers/importform', {
      onCreate: function(transport){
        $('managementSubMenuContent_users').innerHTML = '';
        $('managementSubMenuContent_users').addClassName('loading');
      },
      onFailure: function(transport) {
        $('managementSubMenuContent_users').removeClassName('loading');
        Management.showError("Internal error: Unable to open view");
      },
      onSuccess: function (transport) {
        $('managementSubMenuContent_users').removeClassName('loading');
        var workarea = $('managementSubMenuContent_users');
        workarea.innerHTML = transport.responseText;
        
        var hiddenFrame = document.createElement('iframe');
        hiddenFrame.frameBorder = 0; 
        hiddenFrame.width = 0; 
        hiddenFrame.height = 0;
        hiddenFrame.name = 'importHandler';
        hiddenFrame._initialized = false;
        
        Event.observe(hiddenFrame, 'load', function(event) {
          var dasFrame = Event.element(event);
          Event.stop(event);
          
          if (dasFrame._initialized == false) {
            dasFrame._initialized = true;
          } else {
            var workarea = $('managementSubMenuContent_users');
            workarea.innerHTML = dasFrame.contentDocument.documentElement.innerHTML;
          }
        });
          
        workarea.appendChild(hiddenFrame);
        var binaryForm = workarea.getElementsByTagName('form')[0];
        binaryForm.target = 'importHandler';
        binaryForm.action = '/' + getLocale() + '/tools/management_index/users/importusers/importform.preview';
      } 
    });
  },
  importUsers_submit: function (event) {
    Event.stop(event);
    
    var formElement = Event.element(event);
    
    Management.serverRequest({
      url: '/tools/management_index/users/importusers/importform.save',
      method: 'post',
      parameters: Form.serialize(formElement), 
      onCreate: function(transport){
        UserManagement.createSaveUserModal();
      }, 
      onError: function(errorMessage, errorCode, isHttpError){
        UserManagement.deleteSaveUserModal();
        Management.showError(errorMessage); 
      },
      onSuccess: function(transport){
        UserManagement.deleteSaveUserModal();
        UserManagement.goHome();
      }
    });
  },
  _select: function (id, type) {
    var selectedElement = UserManagement._getSelectedElement();
    if (selectedElement) 
      selectedElement.removeClassName('selected');
    
    UserManagement._selectedId = id;
    UserManagement._selectionType = type;
    
    UserManagement._getSelectedElement().addClassName('selected');
    
    switch (type) {
      case 'panelistUser':
        document.fire('delfoi:userSelected', {
          id: id,
          'role': 'panelist'
        });
        break;
      case 'managerUser':
        document.fire('delfoi:userSelected', {
          id: id,
          'role': 'manager'
        });
        break;
      case 'panelistGroup':
        document.fire('delfoi:groupSelected', {
          id: id,
          'role': 'panelist'
        });
        break;
      case 'managerGroup':
        document.fire('delfoi:groupSelected', {
          id: id,
          'role': 'manager'
        });
        break;
    }
  },
  _getSelectedElement: function() {
    return $(UserManagement._selectionType + UserManagement._selectedId);
  },
  _userSelected: function(event) {
    var id = event.memo.id;
    var role = event.memo.role;
    
    Management.disableButton('subMenuItem_editusergroup');
    Management.enableButton('subMenuItem_edituser');
  },
  _userGroupSelected: function(event){
    var id = event.memo.id;
    var role = event.memo.role;
    
    Management.disableButton('subMenuItem_edituser');
    Management.enableButton('subMenuItem_editusergroup');
  },
  _selectedId: -1,
  _selectionType: ''
};

document.observe("delfoi:userSelected", UserManagement._userSelected);
document.observe("delfoi:groupSelected", UserManagement._userGroupSelected);
document.observe("delfoi:managementMenuLoaded", Management._managementMenuLoaded);

