﻿

//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
var FavoriteTreeWriter = Class.create({
    initialize: function() {
        this.bIsLoaded = false;
        this.bIsLoading = false;

        this.treeHtmlHash = new Hash();
    },

    setTreeHtml: function(id, html)
    {
        this.bIsLoaded = true;
        this.bIsLoading = false;
        
        this.treeHtmlHash.set(id, html);
    },
    
    clearUnderline: function()
    {
        $$('#toolbarMenu_Favorites a').each(function(el){
            el.removeClassName('underlinetext');
        });
    },
    
    // updates the panel with the tree-data.
    generateTree: function(id, submenuPrefixName, folderTypeEnum, titleText, isOrganizingTree) 
    {
        if (!this.treeHtmlHash.get(id))
            this.loadTreeData(id, titleText, isOrganizingTree);
            

        //this.clearUnderline();            

        // change the values here if you changes the order in the list of menuitems.
        if (folderTypeEnum == FolderTypeEnum.Show)
        {
            $(submenuPrefixName + '_SubFavorites').setStyle({'top': '50px'});
            
            $$('#' + submenuPrefixName + '_ShowFavorites a').each(function(el){
                el.addClassName('underlinetext');
            });
        }
        else if (folderTypeEnum == FolderTypeEnum.AddCurrent)
        {
            var topValue = 85;
            
            if (submenuPrefixName == "quickCardMenu")
                topValue = 25;
            
            $(submenuPrefixName + '_SubFavorites').setStyle({'top': topValue + 'px'});
            
            $$('#' + submenuPrefixName + '_AddCurrentFavorites a').each(function(el){
                el.addClassName('underlinetext');
            });
        }
        else if (folderTypeEnum == FolderTypeEnum.AddSelected)
        {
            $(submenuPrefixName + '_SubFavorites').setStyle({'top': '110px'});
            
            $$('#' + submenuPrefixName + '_AddSelectedFavorites a').each(function(el){
                el.addClassName('underlinetext');
            });
        }
        else if (folderTypeEnum == FolderTypeEnum.MoveCurrent)
        {
            var topValue = 205;
            
            if (submenuPrefixName == "quickCardMenu")
                topValue = 65;
            
            $(submenuPrefixName + '_SubFavorites').setStyle({'top': topValue + 'px'});
            
            $$('#' + submenuPrefixName + '_MoveCurrentFavorites a').each(function(el){
                el.addClassName('underlinetext');
            });
        }
        else if (folderTypeEnum == FolderTypeEnum.MoveSelected)
        {
            $(submenuPrefixName + '_SubFavorites').setStyle({'top': '230px'});
            
            $$('#' + submenuPrefixName + '_MoveSelectedFavorites a').each(function(el){
                el.addClassName('underlinetext');
            });
        }
    },

    // loads the tree-data from the server and stores it in the "treeHtml"-variable.    
    loadTreeData: function(id, titleText, isOrganizingTree)
    {
        if (this.bIsLoading)
            return;
            
        this.bIsLoading = true;
        
        //$('toolbarMenu_SubFavorites').setStyle({'left': ($('toolbarMenu_Favorites').getWidth() - 15) + 'px'}).show();
        
        var action = new PageActionRequest('favorites', (isOrganizingTree ? 'buildOrganizeTree' : 'buildTree'));
        
        action.addAction('treeUniqueId', id);

        new Ajax.Request("ajaxpages/FavoriteTreeAction.aspx", {
            method: 'post',
            asynchronous: false,  //used so the tree is created and show the only selected typ of favorites after the loading of the data is done...
            parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            onSuccess: function(transport) {
                $(id).update(transport.responseText);
                favoriteTreeWriter.setTreeHtml(id, transport.responseText);
                
                if (!titleText.empty())
                    $(id + "_treeHeadline").update(titleText);
                    
                    
                if (isOrganizingTree)
                {
                    $(id).select('div[objecttype]').each(function(element)
                        {
                            if (element.readAttribute('objecttype') != selectedFavoriteFolderType)
                                element.hide();
                            else 
                                element.show();
                        });
                }
            },
            onComplete: function() { 
                this.bIsLoadning = false; 
            }
        });
    }
});

// ================================================================================================================

// what should happen when the user clicks on a folder name in the favoritetree depends on this type.
var currentFolderType = FolderTypeEnum.None;

// this object will do the reading and building of the tree.
var favoriteTreeWriter = new FavoriteTreeWriter();

// will contain the id of the folder that was last selected in the tree (where the user organize it's favorites.)
var selectedFavoriteFolderId = "";

// will contain the id of the folder-element that was last selected in the tree (where the user organize it's favorites.)
var selectedFavoriteFolderElementId = "";

var selectedFavoriteFolderType = ObjectTypeEnum.None;

var isSelectedFavoriteFolderRootNode = false;

var isEditingTreeNode = false;

var isShowingMoveFavoriteTree = false;

//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
function SetFolderClickType(folderTypeEnumValue)
{
    currentFolderType = folderTypeEnumValue;
}


//---------------------------------------------------------------------------
// Opens and closes the folder.
//---------------------------------------------------------------------------
function ToggleFolder(imgExpandingId)
{
    if ($(imgExpandingId.sub('imgExpandingFolder', 'nodeContent')).toggle().visible())
        $(imgExpandingId).src = 'images/node_minus.gif';
    else
        $(imgExpandingId).src = 'images/node_plus.gif';
    
    ResizeShadowBackground();
}


//---------------------------------------------------------------------------
// When the user clicks on the foldername.
//---------------------------------------------------------------------------
function FolderClick(folderElementId, folderId, objectTypeId, isRootNode, isOrganizePanelClick)
{   
    if (isEditingTreeNode && !isShowingMoveFavoriteTree)
        return;

    tbSubMenuClose(); //closes the menu...
    
    isSelectedFavoriteFolderRootNode = isRootNode;
    
    if (isOrganizePanelClick && !isShowingMoveFavoriteTree)
    {
        if (!selectedFavoriteFolderElementId.empty() && $(selectedFavoriteFolderElementId))
            $(selectedFavoriteFolderElementId).removeClassName('organizeItemOver');
    
        $(folderElementId).addClassName('organizeItemOver');

        selectedFavoriteFolderId = folderId;
        selectedFavoriteFolderElementId = folderElementId;
        selectedFavoriteFolderType = objectTypeId;
    }
    else if (isOrganizePanelClick && isShowingMoveFavoriteTree)
    {    
        if (selectedFavoriteFolderType != objectTypeId || selectedFavoriteFolderId == folderId)
            return;

        DoMoveFolder(selectedFavoriteFolderId, folderId, objectTypeId);
        
        isShowingMoveFavoriteTree = false;
        isEditingTreeNode = false;
    }
    else
    {
        if (currentFolderType == FolderTypeEnum.Show)
        {
            if (CurrentPageType == PageTypeEnum.Home)
                DoShowFavorites(folderId, objectTypeId);
            else 
                document.location = "Home.aspx?showfavorite=true&folderid=" + folderId + "&objecttype=" + objectTypeId;
        }
        else if (currentFolderType == FolderTypeEnum.AddCurrent)
            DoAddCurrentFavorite(folderId, objectTypeId);
        else if (currentFolderType == FolderTypeEnum.AddSelected)
            DoAddSelectedFavorites(folderId, objectTypeId);
        else if (currentFolderType == FolderTypeEnum.MoveCurrent)
            DoMoveCurrentFavorite(folderId, objectTypeId);
        else if (currentFolderType == FolderTypeEnum.MoveSelected)
            DoMoveSelectedFavorites(folderId, objectTypeId);

        //closes the menu...        
        tbSubMenuClose();
        tbMenuClose();
    }
}


function ShowOrganizeFavorites()
{
    //closes the menu...        
    tbMenuClose();

    WriteLoadingImage('organizeFavoritesTreePanel');
    ShowShadowBackground();
    CenterPanel('organizeFavoritesPanel', null, true);
    
    var action = new PageActionRequest('favorites', 'buildOrganizeTree'); 
    action.addAction('treeUniqueId', 'organizeFavoritesTreePanel');

    new Ajax.Updater({success: "organizeFavoritesTreePanel"}, "ajaxpages/FavoriteTreeAction.aspx", {
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) }
    });
    
    //adds the keydown event to the document to listen on for keys like F2 (change the name on the node) etc.
    Event.observe(document, 'keydown', OrganizeFavoritePanelKeyDown);

    //adds the keyup event to the document to listen on for keys like "CTRL" etc.
    Event.observe(document, 'keyup', OrganizeFavoritePanelKeyUp);
}

function HideOrganizeFavorites()
{
    //removes listing for keydown events
    Event.stopObserving(document, 'keydown', OrganizeFavoritePanelKeyDown);

    //removes listing for keyup events
    Event.stopObserving(document, 'keyup', OrganizeFavoritePanelKeyUp);

    isEditingTreeNode = false;
    
    HideShadowBackground();
    $('organizeFavoritesPanel').hide();
}


var isControlKeyPressed = false;

function OrganizeFavoritePanelKeyDown(e)
{
	var key=e.keyCode || e.which;
	
	if (key == 113 && !isEditingTreeNode)  // F2-key
	{
	    ChangeTreeNodeName();
	    return false;
	}
	else if (key == 13)
	{
	    Event.stop(e);
	    return false;
	}
	else if (key == 17 && !isEditingTreeNode)  // ctrl-button
	{
	    isControlKeyPressed = true;
	    return false;
	}
	else if (key == 78 && isControlKeyPressed && !isEditingTreeNode) // ctrl + n
	{
	    Event.stop(e);
	    CreateTreeNode();
	    return false;
	}
	else
	    return true;
}


function OrganizeFavoritePanelKeyUp(e)
{
	var key=e.keyCode || e.which;
	
	if (key == 17)  // ctrl-button
	{
	    isControlKeyPressed = false;
	    return false;
	}
	else
	    return true;
}


//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
function DoShowFavorites(folderId, objectTypeId)
{
    $$('body')[0].setStyle({ cursor: 'wait'});
    $('searchContainer').hide();
    ShowShadowBackground();
    CenterPanel("waitSearchMessagePanel", null, true);


    var tmpItemManager = new ItemArrayManager();
    
    tmpItemManager.addItem(new Item(SearchOptionsEnum.Favorites, ''+folderId, '', '', true, false));

    var action = new PageActionRequest('search', 'doSearch'); //makes a new action that will start the search...
    action.addAction('objectType', objectTypeId);
    action.addAction('searchData', tmpItemManager.toJSON());
    action.addAction('saveSearch', 'false');

    new Ajax.Request('ajaxpages/SearchAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/SearchAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
 
        onSuccess: function()
        {
            WriteLoadingInfo('hitlistContainer');

            var action = new PageActionRequest('hitlist', '');
            action.addAction('selectFirstObject', 'true');

            ReloadHitList('', Object.toJSON(action));
        },
        
        onComplete: function()
        {
            HideShadowBackground();
            $("waitSearchMessagePanel").hide();
            $$('body')[0].setStyle({ cursor: 'default'});
        }
    });    
}


function DoAddCurrentFavorite(folderId, objectTypeId)
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId is a variable that comes from the "objectcardmanagerclass.js"-file

    var action = new PageActionRequest('favorites', 'addObject'); 
    action.addAction('type', 'current');
    action.addAction('objectType', objectTypeId);
    action.addAction('folderId', folderId);
    
    if (objectTypeId == ObjectTypeEnum.Project)
        action.addAction('objectId', lastLoadedProjectId);
    else if (objectTypeId == ObjectTypeEnum.Company)
        action.addAction('objectId', lastLoadedCompanyId);
    else if (objectTypeId == ObjectTypeEnum.Contact)
        action.addAction('objectId', lastLoadedContactId);
        
    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function(transport)
        {
            if (CurrentObjectTypeInHitList == selectedTabObjectType)
            AddIconToHitlistItem(IconTypeEnum.Favorite, transport.responseText);
            AddIconToObjectCard(IconTypeEnum.Favorite, transport.responseText);
        }
    });
    
}

function DoAddSelectedFavorites(folderId, objectTypeId)
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId is a variable that comes from the "objectcardmanagerclass.js"-file

    var action = new PageActionRequest('favorites', 'addObject'); 
    action.addAction('type', 'selected');
    action.addAction('objectType', objectTypeId);
    action.addAction('folderId', folderId);
        
    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function()
        {
            var action = new PageActionRequest('hitlist', '');
            action.addAction('selectObject', 'true');

            if (objectTypeId == ObjectTypeEnum.Project)
                action.addAction('objectId', lastLoadedProjectId);
            else if (objectTypeId == ObjectTypeEnum.Company)
                action.addAction('objectId', lastLoadedCompanyId);
            else if (objectTypeId == ObjectTypeEnum.Contact)
                action.addAction('objectId', lastLoadedContactId);

            ReloadHitList('', Object.toJSON(action));
        }
    });
}


function DoRemoveCurrentFavorite()
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId and selectedTabObjectType is variables that comes from the "objectcardmanagerclass.js"-file

    if ($('toolbarMenu_RemoveCurrentFavorites').readAttribute('enabled') == 'false')
        return;

    tbMenuClose(); //closes the menu
    
    var action = new PageActionRequest('favorites', 'removeObject'); 
    action.addAction('type', 'current');
    action.addAction('objectType', selectedTabObjectType);

    if (selectedTabObjectType == ObjectTypeEnum.Project)
        action.addAction('objectId', lastLoadedProjectId);
    else if (selectedTabObjectType == ObjectTypeEnum.Company)
        action.addAction('objectId', lastLoadedCompanyId);
    else if (selectedTabObjectType == ObjectTypeEnum.Contact)
        action.addAction('objectId', lastLoadedContactId);


    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function()
        {
            RemoveIconFromHitlistItem(IconTypeEnum.Favorite);
            RemoveIconFromObjectCard(IconTypeEnum.Favorite);
        }
    });
}

function DoRemoveSelectedFavorites()
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId is a variable that comes from the "objectcardmanagerclass.js"-file

    if ($('toolbarMenu_RemoveSelectedFavorites').readAttribute('enabled') == 'false')
        return;

    tbMenuClose(); //closes the menu
    
    var action = new PageActionRequest('favorites', 'removeObject'); 
    action.addAction('type', 'selected');
    action.addAction('objectType', CurrentObjectTypeInHitList);
        
    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function()
        {
            var action = new PageActionRequest('hitlist', '');
            action.addAction('selectObject', 'true');

            if (CurrentObjectTypeInHitList == ObjectTypeEnum.Project)
                action.addAction('objectId', lastLoadedProjectId);
            else if (CurrentObjectTypeInHitList == ObjectTypeEnum.Company)
                action.addAction('objectId', lastLoadedCompanyId);
            else if (CurrentObjectTypeInHitList == ObjectTypeEnum.Contact)
                action.addAction('objectId', lastLoadedContactId);

            ReloadHitList('', Object.toJSON(action));
        }
    });
}

function DoMoveCurrentFavorite(folderId, objectTypeId)
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId and selectedTabObjectType is variables that comes from the "objectcardmanagerclass.js"-file

    var action = new PageActionRequest('favorites', 'moveObject'); 
    action.addAction('type', 'current');
    action.addAction('objectType', selectedTabObjectType);
    action.addAction('folderId', folderId);

    if (selectedTabObjectType == ObjectTypeEnum.Project)
        action.addAction('objectId', lastLoadedProjectId);
    else if (selectedTabObjectType == ObjectTypeEnum.Company)
        action.addAction('objectId', lastLoadedCompanyId);
    else if (selectedTabObjectType == ObjectTypeEnum.Contact)
        action.addAction('objectId', lastLoadedContactId);


    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }
    });
}

function DoMoveSelectedFavorites(folderId, objectTypeId)
{
    // lastLoadedProjectId/lastLoadedCompanyId/lastLoadedContactId is a variable that comes from the "objectcardmanagerclass.js"-file

    var action = new PageActionRequest('favorites', 'moveObject'); 
    action.addAction('type', 'selected');
    action.addAction('objectType', objectTypeId);
    action.addAction('folderId', folderId);
        
    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function()
        {
            var action = new PageActionRequest('hitlist', '');
            action.addAction('selectObject', 'true');

            if (objectTypeId == ObjectTypeEnum.Project)
                action.addAction('objectId', lastLoadedProjectId);
            else if (objectTypeId == ObjectTypeEnum.Company)
                action.addAction('objectId', lastLoadedCompanyId);
            else if (objectTypeId == ObjectTypeEnum.Contact)
                action.addAction('objectId', lastLoadedContactId);

            ReloadHitList('', Object.toJSON(action));
        }
    });
}




function CreateTreeNode()
{
    if (selectedFavoriteFolderId == "" || isEditingTreeNode)
        return;
        
    isEditingTreeNode = true;

    $('divNewTreeNodePanel').show();
    $('txtNewTreeNodeName').focus();
}

function CreateTreeNodeNameKeyPressed(e)
{
	var key=e.keyCode || e.which;
	
	if (key==13) //enter-key
	{
		DoCreateNewTreeNode();
		return false;
	}
	if (key == 27) //esc-key
	{
        DoCancelCreateNewTreeNode();
	    return false;
	}
	else
	    return true;
}

function DoCreateNewTreeNode()
{
    if ($('txtNewTreeNodeName').value.strip().empty())
        return;
        
    var nodeName = $('txtNewTreeNodeName').value.strip();

    $('divNewTreeNodePanel').hide();
    
    var backupOrganizeFavoritesTreePanelText = $('organizeFavoritesTreePanel').innerHTML;
    
    WriteLoadingImage('organizeFavoritesTreePanel');

    var action = new PageActionRequest('favorites', 'addNode'); 
    action.addAction('objectType', selectedFavoriteFolderType);
    action.addAction('parentFolderId', selectedFavoriteFolderId);
    action.addAction('folderName', nodeName)
    action.addAction('treeUniqueId', 'organizeFavoritesTreePanel');

    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) 
        { 
            (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); 
            $('organizeFavoritesTreePanel').update(backupOrganizeFavoritesTreePanelText);
            DoCancelCreateNewTreeNode(); 
        }, 
    
        onSuccess: function(transport) 
        {
            if (transport.responseText != 'name_exists')
            {
                $('organizeFavoritesTreePanel').update(transport.responseText);
                favoriteTreeWriter = new FavoriteTreeWriter();
                DoCancelCreateNewTreeNode();
            }
            else
            {
                $('organizeFavoritesTreePanel').update(backupOrganizeFavoritesTreePanelText);
                $('divNewTreeNodePanel').show();
                
                nameExistsTemplate = new Template(resource.lblFavoriteNameExists);
                alert(nameExistsTemplate.evaluate({ foldername: nodeName }));
            }
            
        }
    });    
}

function DoCancelCreateNewTreeNode()
{
    isEditingTreeNode = false;
    
    $('txtNewTreeNodeName').value='';
    $('divNewTreeNodePanel').hide();
}


function ChangeTreeNodeName()
{
    if (selectedFavoriteFolderId == "" || isSelectedFavoriteFolderRootNode || isEditingTreeNode)
        return;
        
    isEditingTreeNode = true;
    
    var ahrefNode = $(selectedFavoriteFolderElementId);
    var editElement = $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolder'));
    var textElement = $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolderText'));
    textElement.value = ahrefNode.innerHTML;

    ahrefNode.hide();
    editElement.show();
    textElement.focus();
    textElement.select(); //selects the text in the textfield.
}


function ChangeTreeNodeNameKeyPressed(e)
{
	var key=e.keyCode || e.which;
	
	if (key==13) //enter-key
	{
		DoSaveTreeNodeName();
		return false;
	}
	if (key == 27) //esc-key
	{
	    DoCancelTreeNodeName();
	    return false;
	}
	else
	    return true;
}

//----------------------------------------------------------------------
// Saves the new name of the node.
//----------------------------------------------------------------------
function DoSaveTreeNodeName()
{
    if ($F(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolderText')).strip().empty())
        return;
        
    var action = new PageActionRequest('favorites', 'rename'); 
    action.addAction('folderId', selectedFavoriteFolderId);
    action.addAction('folderName', $F(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolderText')).strip())

    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function(transport)
        {
            var jsonData = transport.responseText.evalJSON();
            
            if (jsonData.status == 'success')
            {
                $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolderText')).value = "";
                $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolder')).hide();

                var ahrefNode = $(selectedFavoriteFolderElementId);
                ahrefNode.innerHTML = jsonData.name;
                ahrefNode.show();
                
                favoriteTreeWriter = new FavoriteTreeWriter();
            }
            else
            {
                nameExistsTemplate = new Template(resource.lblFavoriteNameExists);
                alert(nameExistsTemplate.evaluate({ foldername: jsonData.name }));
            }
        },
        
        onComplete: function()
        {
            isEditingTreeNode = false;
        }
    });    
}

//----------------------------------------------------------------------
// When the user presses the esc-button on the keyboard, it will 
// cancel the changing of the new name
//----------------------------------------------------------------------
function DoCancelTreeNodeName()
{
    isEditingTreeNode = false;
    
    var ahrefNode = $(selectedFavoriteFolderElementId);
    $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolderText')).value = "";
    $(selectedFavoriteFolderElementId.sub('nodeFolder', 'editNodeFolder')).hide();

    ahrefNode.show();
}


//----------------------------------------------------------------------
// 
//----------------------------------------------------------------------
function MoveFavoriteFolder()
{
    if (isEditingTreeNode || isSelectedFavoriteFolderRootNode)
        return;

    WriteLoadingImage('divMoveNodeFavoriteTree');

    (new FavoriteTreeWriter()).generateTree('divMoveNodeFavoriteTree', 'toolbarMenu', FolderTypeEnum.None, resource.lblMoveTo+':', true);
    
    $('divMoveTreeNodePanel').show();

    isEditingTreeNode = true;
    isShowingMoveFavoriteTree = true;
}

//----------------------------------------------------------------------
// 
//----------------------------------------------------------------------
function DoMoveFolder(fromFolderId, toFolderId, objectTypeId)
{
    WriteLoadingImage('organizeFavoritesTreePanel');

    var action = new PageActionRequest('favorites', 'moveNode'); 
    action.addAction('fromFolderId', fromFolderId);
    action.addAction('toFolderId', toFolderId);
    action.addAction('treeUniqueId', 'organizeFavoritesTreePanel');

    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function(transport) {
            $('organizeFavoritesTreePanel').update(transport.responseText);
            favoriteTreeWriter = new FavoriteTreeWriter();
        }
    });    
    
    $('divMoveNodeFavoriteTree').update('');
    $('divMoveTreeNodePanel').hide();
}


//----------------------------------------------------------------------
// When the user presses the esc-button on the keyboard, it will 
// cancel the changing of the new name
//----------------------------------------------------------------------
function DoCancelMoveTreeNode()
{
    isEditingTreeNode = false;
    isShowingMoveFavoriteTree = false;
    
    $('divMoveNodeFavoriteTree').update('');
    $('divMoveTreeNodePanel').hide();
}


//----------------------------------------------------------------------
// 
//----------------------------------------------------------------------
function DeleteTreeNode()
{
    if (selectedFavoriteFolderId == "" || isEditingTreeNode || isSelectedFavoriteFolderRootNode)
        return;
        
    WriteLoadingImage('organizeFavoritesTreePanel');

    var action = new PageActionRequest('favorites', 'deleteNode'); 
    action.addAction('folderId', selectedFavoriteFolderId);
    action.addAction('treeUniqueId', 'organizeFavoritesTreePanel');

    new Ajax.Request('ajaxpages/FavoriteTreeAction.aspx', { 
        method: 'post',
        parameters: { unique: GenerateUniqueValue(), action: Object.toJSON(action) },
            
        onFailure: function(transport) { (new Error()).doErrorResponseCheck('ajaxpages/FavoriteTreeAction.aspx', 'action: ' + Object.toJSON(action), transport); }, 
    
        onSuccess: function(transport) {
            $('organizeFavoritesTreePanel').update(transport.responseText);
            favoriteTreeWriter = new FavoriteTreeWriter();
        }
    });    
}

