// Rights
var NONE = 0;
var READ = 1;
var MODIFY = 2;
var ADMINISTRATE = 3;

function composeId( formId, fragmentId, objectId ) {
    var strId = formId;
    if( fragmentId != null && fragmentId != '' )
        strId += ':' + fragmentId;
    strId += ':' + objectId;
    return( strId );
}

function addNewFolder( formId, fragmentId ) {
    var newName = askNewFolderName( "" );
    if( newName == null )
        return( false );
    var strFolderAction = "addNewFolder=" + newName;
    var hiddenFieldFolderActionId = composeId( formId, fragmentId, 'hiddenFieldFolderAction' ); 
    var hiddenFieldFolderAction = document.getElementById( hiddenFieldFolderActionId );
    hiddenFieldFolderAction.value = strFolderAction;
    return( hyperlink_submit(this, formId, null ) );
}

function renameFolder( formId, fragmentId, currName ) {
    var newName = askNewFolderName( currName );
    if( newName == null )
        return false;
    var strFolderAction = "renameFolder=" + newName;
    var hiddenFieldFolderActionId = composeId( formId, fragmentId, 'hiddenFieldFolderAction' ); 
    var hiddenFieldFolderAction = document.getElementById( hiddenFieldFolderActionId );
    hiddenFieldFolderAction.value = strFolderAction;
    return( hyperlink_submit(this, formId, null ) );
}

function deleteFolder( formId, fragmentId ) {
    if ( !confirmDeleteFolder() ) 
        return false;
    var strFolderAction = "deleteFolder";
    var hiddenFieldFolderActionId = composeId( formId, fragmentId, 'hiddenFieldFolderAction' ); 
    var hiddenFieldFolderAction = document.getElementById( hiddenFieldFolderActionId );
    hiddenFieldFolderAction.value = strFolderAction;
    return hyperlink_submit(this, formId, null);
}

function toto() {
    alert( 10 );
}

function showFolderPermissions( formId, fragmentId, requestPath ) {
    parent.parent.showPopWin( requestPath + '/faces/FolderPermissions.jsp', 500, 400, null );
}

function askNewFolderName( currName ) {
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    var strPrompt = 'Enter a new folder name.';
    if( lang == 'fr' )
        strPrompt = 'Entrez un nouveau nom de dossier.';
    var rep = prompt( strPrompt, currName );
    return( rep );
}

function confirmDelete() {
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    var strConfirmDelete = 'Do you really want to delete this record?';
    if( lang == 'fr' )
        strConfirmDelete = 'Voulez-vous vraiment supprimer cet enregistrement?';
    return window.confirm(strConfirmDelete);
}

function confirmDeletePermission() {
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    var strConfirmDelete = 'Do you really want to delete this permission?';
    if( lang == 'fr' )
        strConfirmDelete = 'Voulez-vous vraiment supprimer cette permission ?';
    return window.confirm(strConfirmDelete);
}

function confirmDeleteFolder() {
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    var strConfirmDelete = 'Do you really want to delete this folder and all the records it contains?';
    if( lang == 'fr' )
        strConfirmDelete = "Voulez-vous vraiment supprimer ce dossier ainsi que toutes les fiches qu'il contient?";
    return window.confirm(strConfirmDelete);
}

//Web page opening

/**
 * Associative array containing window references.
 * Example : windows[ windowId ] = windowHandle.
 */
windows = new Array();

function cleanup() {    
    closeWindows();
}

function closeWindows() 
{
    for( windowId in windows )
        closeWindow( windowId );
}

function closeWindow( windowId ) {
    windows[ windowId ].close();
    delete( windows[ windowId ] );
}

function openWindow( url, windowId ) 
{       
    openWindowWithSize( url, windowId, 500, 500 );
} 

function openWindowWithSize(url, windowId, w, h) 
{
    openWindowParam( url, windowId, w, h, "yes", "yes", "yes", "yes" );
} 

/** 
 * Opens a window.
 * @param url File to open.
 * @param windowId Unique identifier for the window.
 * @param w Width.
 * @param h Height.
 * @param toolbar "yes" if we want a toolbar, otherwise "no".
 * @param scrollbars "yes" if we want scrollbars, otherwise "no".
 * @param resizable "yes" if we want the window to be resizable, otherwise "no".
 */
function openWindowParam( url, windowId, w, h, menubar, toolbar, scrollbars, resizable ) {
    w = window.open( url, windowId, "width=" + w + ",height=" + h + ",menubar=" + menubar + 
        ",toolbar=" + toolbar + ",scrollbars=" + scrollbars + ",resizable=" + resizable);
    windows[ windowId ] = w;
}

function appendOtherMimeType( formId, fragmentId ) {
    var dropDownLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'dropDownLOMFormatOther' ) );
    var listboxLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'listboxLOMFormatOther' ) );
    if( dropDownLOMFormatOther.selectedIndex != -1 ) {
        var selectedOption = dropDownLOMFormatOther.options[ dropDownLOMFormatOther.selectedIndex ];
        if( selectedOption.value != '' ) {
            var newOption = new Option( selectedOption.text, selectedOption.value, false, false );
            listboxLOMFormatOther.options[ listboxLOMFormatOther.options.length ] = newOption;
        }
    }
    affectOtherFormatsHiddenField( formId, fragmentId );
}

function removeOtherMimeType( formId, fragmentId ) {
    var listboxLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'listboxLOMFormatOther' ) );
    if( listboxLOMFormatOther.selectedIndex != -1 ) {
        listboxLOMFormatOther.options[ listboxLOMFormatOther.selectedIndex ] = null;
        updateOtherMimeTypeButtons( formId, fragmentId );
    }
    affectOtherFormatsHiddenField( formId, fragmentId );
}

function updateOtherMimeTypeButtons( formId, fragmentId ) {
    var renderedGridPanelLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'gridPanelLOMFormatOther' ) );
    if (renderedGridPanelLOMFormatOther != null && renderedGridPanelLOMFormatOther != undefined){
        var dropDownLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'dropDownLOMFormatOther' ) );
        var listboxLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'listboxLOMFormatOther' ) );
        var buttonInsertLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'buttonLOMOtherMimeFormatInsert' ) );
        var buttonRemoveLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'buttonLOMOtherMimeFormatRemove' ) );
        var isInsertOtherMimeTypeAllowed = ( dropDownLOMFormatOther.selectedIndex != -1 &&
            dropDownLOMFormatOther.options[ dropDownLOMFormatOther.selectedIndex ].value != '' );
        var isRemoveOtherMimeTypeAllowed = ( listboxLOMFormatOther.selectedIndex != -1 );
        buttonInsertLOMFormatOther.disabled = !isInsertOtherMimeTypeAllowed;
        buttonRemoveLOMFormatOther.disabled = !isRemoveOtherMimeTypeAllowed;
    }
}

function affectOtherFormatsHiddenField( formId, fragmentId ) {
    var listboxLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'listboxLOMFormatOther' ) );
    var hiddenFieldLOMFormatOther = document.getElementById( composeId( formId, fragmentId, 'hiddenFieldLOMFormatOther' ) );
    var newValue = '';
    for( i = 0; i < listboxLOMFormatOther.options.length; i++ )
        newValue += listboxLOMFormatOther.options[ i ].value + ";";
    hiddenFieldLOMFormatOther.value = newValue;
}

function appendCategory( formId, fragmentId ) {
    var dropDownLOMCategoryList = document.getElementById( composeId( formId, fragmentId, 'dropDownLOMCategoryList' ) );
    var listboxLOMCategory = document.getElementById( composeId( formId, fragmentId, 'listboxLOMCategory' ) );
    if( dropDownLOMCategoryList.selectedIndex != -1 ) {
        var selectedOption = dropDownLOMCategoryList.options[ dropDownLOMCategoryList.selectedIndex ];
        if( selectedOption.value != '' ) {
            var newOption = new Option( selectedOption.text, selectedOption.value, false, false );
            listboxLOMCategory.options[ listboxLOMCategory.options.length ] = newOption;
        }
    }
    affectCategoriesHiddenField( formId, fragmentId );
}

function removeCategory( formId, fragmentId ) {
    var listboxLOMCategory = document.getElementById( composeId( formId, fragmentId, 'listboxLOMCategory' ) );
    if( listboxLOMCategory.selectedIndex != -1 ) {
        listboxLOMCategory.options[ listboxLOMCategory.selectedIndex ] = null;
        updateCategoryButtons( formId, fragmentId );
    }
    affectCategoriesHiddenField( formId, fragmentId );
}

function updateCategoryButtons( formId, fragmentId ) {
    var dropDownLOMCategoryList = document.getElementById( composeId( formId, fragmentId, 'dropDownLOMCategoryList' ) );
    var listboxLOMCategory = document.getElementById( composeId( formId, fragmentId, 'listboxLOMCategory' ) );
    var buttonInsert = document.getElementById( composeId( formId, fragmentId, 'buttonLOMCategoryInsert' ) );
    var buttonRemove = document.getElementById( composeId( formId, fragmentId, 'buttonLOMCategoryRemove' ) );
    var isInsertCategoryAllowed = ( dropDownLOMCategoryList.selectedIndex != -1 && 
        dropDownLOMCategoryList.options[ dropDownLOMCategoryList.selectedIndex ].value != '' );
    var isRemovedCategoryAllowed = ( listboxLOMCategory.selectedIndex != -1 );
    buttonInsert.disabled = !isInsertCategoryAllowed;
    buttonRemove.disabled = !isRemovedCategoryAllowed;
}

function affectCategoriesHiddenField( formId, fragmentId ) {
    var listboxLOMCategory = document.getElementById( composeId( formId, fragmentId, 'listboxLOMCategory' ) );
    var hiddenField = document.getElementById( composeId( formId, fragmentId, 'hiddenFieldLOMCategory' ) );
    var newValue = '';
    for( i = 0; i < listboxLOMCategory.options.length; i++ )
        newValue += listboxLOMCategory.options[ i ].value + ";";
    hiddenField.value = newValue; 
}

/** 
 * Submit data to form but adjust its action URL
 * in order to jump to an anchor location.
 * @param form Form to update 
 * @param anchor Anchor identifier to jump to
 */
function submitToAnchor( form, anchor ) {
    if( anchor == null ) {
        var indexOfSharp = form.action.indexOf( '#' );
        if( indexOfSharp != -1 )
            form.action = form.action.substring( 0, indexOfSharp );
    }
    else
        form.action = form.action + '#' + anchor;
}

function updatePermissionCheckboxes( formId, fragmentId, clickedCheckboxId ) {
    var checkboxReadPermission = document.getElementById( composeId( formId, fragmentId, 'checkboxReadPermission' ) );
    var checkboxModifyPermission = document.getElementById( composeId( formId, fragmentId, 'checkboxModifyPermission' ) );
    var checkboxAdministratePermission = document.getElementById( composeId( formId, fragmentId, 'checkboxAdministratePermission' ) );
    var clickedCheckbox = document.getElementById( composeId( formId, fragmentId, clickedCheckboxId ) );
    
    if( clickedCheckbox.checked ) {
        if( clickedCheckbox == checkboxAdministratePermission ) {
            checkboxReadPermission.checked = true;
            checkboxModifyPermission.checked = true;
        }
        else if( clickedCheckbox == checkboxModifyPermission )
            checkboxReadPermission.checked = true;
    }
    else {
        if( clickedCheckbox == checkboxReadPermission ) {
            checkboxModifyPermission.checked = false;
            checkboxAdministratePermission.checked = false;
        }
        else if( clickedCheckbox == checkboxModifyPermission )
            checkboxAdministratePermission.checked = false;
    }
}

function isEditedPermissionValid( formId, fragmentId ) {
    var userSelect = document.getElementById( composeId( formId, fragmentId, 'listboxUserList' ) );
    var cbReadPerm = document.getElementById( composeId( formId, fragmentId, 'checkboxReadPermission' ) );
    var cbModifyPerm = document.getElementById( composeId( formId, fragmentId, 'checkboxModifyPermission' ) );
    var cbAdministratePerm = document.getElementById( composeId( formId, fragmentId, 'checkboxAdministratePermission' ) );
    var lang = document.getElementById( formId + ':hiddenFieldLanguage' ).value;
    
    if( userSelect.selectedIndex == -1 ) {
        var strSpecifyUserMsg = "You must specify a user for the right you're currently editing.";
        if( lang == 'fr' )
            strSpecifyUserMsg = "Vous devez spécifier un usager pour le droit en cours d'édition.";

        alert( strSpecifyUserMsg );
        return( false );
    }

    if( !cbReadPerm.checked && !cbModifyPerm.checked && !cbAdministratePerm.checked ) {
        var strSpecifyPermMsg = "You must specify a permission for the right you're currently editing.";
        if( lang == 'fr' )
            strSpecifyPermMsg = "Vous devez spécifier une permission pour le droit en cours d'édition.";
        alert( strSpecifyPermMsg );
        return( false );
    }

    return( true );
}

function addPermission( formId, fragmentId, anchor ) {
    var hiddenFieldPermAssignedToAllUsers = document.getElementById( 
        composeId( formId, fragmentId, 'hiddenFieldPermAssignedToAllUsers' ) );
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    if( hiddenFieldPermAssignedToAllUsers.value == 'true' ) {
        var msg = "No more users left.  All the users are listed in the permission table.";
        if( lang == 'fr' )
            msg = "Il ne reste plus d'usager.  Tous les usagers sont listés dans le tableau des permissions.";
        alert( msg );
        return( false );
    }
    else {
        submitToAnchor( document.getElementById( formId ), anchor );
        return( true );
    }
}

function arePermDefinedForAllUsers() {
    var hiddenFieldPermAssignedToAllUsers = document.getElementById( composeId( formId, fragmentId, 'hiddenFieldPermAssignedToAllUsers' ) );
    return( hiddenFieldPermAssignedToAllUsers.value == 'true' );
}

function affectLomUrl() {
    var hiddenFieldLOMUrlField = window.frames['popupFrame'].document.getElementById( "form1:hiddenFieldLOMUrl" );
    var saveButton = document.getElementById( 'form1:LomDescription:buttonSave' );
    if( hiddenFieldLOMUrlField != null && hiddenFieldLOMUrlField.value != null &&
        hiddenFieldLOMUrlField.value.indexOf( 'http' ) != -1 ) {
        var locationField = document.getElementById( 'form1:LomDescription:textFieldLOMLocation' );
        locationField.value = hiddenFieldLOMUrlField.value;
    }
    // We save the data to make sure that the new location and identifier are kept.
    saveButton.click(); 
}

function noThing(){
}

function refreshPage(){
    //window.location.reload( true );
    //dojo.byId('form1').submit();
    try {
        dojo.byId('form1:refreshLink').click();
    }catch(error){}
    
}

// This method should be implemented on the server-side. - FB
function printLastModificationDate() {
    var lang = document.getElementById( 'form1:hiddenFieldLanguage' ).value;
    var months = new Array(13);
    var copyrightStr;
    var lastModifStr;
    if( lang == 'fr' ) {  
        months[1] = "janvier";
        months[2] = "f&eacute;vrier";
        months[3] = "mars";
        months[4] = "avril";
        months[5] = "mai";
        months[6] = "juin";
        months[7] = "juillet";
        months[8] = "ao&ucirc;t";
        months[9] = "septembre";
        months[10] = "octobre";
        months[11] = "novembre";
        months[12] = "d&eacute;cembre";
    }
    else {
        months[1] = "January";
        months[2] = "February";
        months[3] = "March";
        months[4] = "April";
        months[5] = "May";
        months[6] = "June";
        months[7] = "July";
        months[8] = "August";
        months[9] = "September";
        months[10] = "October";
        months[11] = "November";
        months[12] = "December";
    }
    var dateObj = new Date(document.lastModified)
    var lmonth = months[dateObj.getMonth() + 1]
    var date = dateObj.getDate()
    var fyear = dateObj.getYear()
    if (fyear < 2000)
        fyear = fyear + 1900
    if( lang == 'fr' ) {
        copyrightStr = 'Tous droits r&eacute;serv&eacute;s LICEF 2006<br>';
        lastModifStr = "Derni&egrave;re mise &agrave; jour : " + date +  " " + lmonth + " " + fyear;
    }
    else {
        copyrightStr = 'All rights reserved LICEF 2006<br>';
        lastModifStr = "Last update: " + lmonth + ", " + date +  ", " + fyear;
    }
    document.write(copyrightStr);
    document.write(lastModifStr);
}

function updateOtherLanguageField( selectId, otherFieldId ) {
    var select = document.getElementById( selectId );
    var otherField = document.getElementById( otherFieldId );
    if( select.options[ select.selectedIndex ].value == 'other' ) {
        otherField.className = 'TxtFld';
        otherField.value = '';
    }
    else
        otherField.className = 'hidden TxtFld';
}

function findSelectedTreeNodeRec( node ) {
    if( typeof( node ) == "undefined" || node == null ) 
        return( null );

    // Hack : Use the style to find the selected node. Fix that later. 
    if( typeof( node.style ) != "undefined" && node.style.fontWeight == 'bold' )
        return( node );

    var children = ( node.hasChildNodes() ? node.childNodes : null );
    if( children != null ) {
        for( var i = 0; i < children.length; i++ ) {
            var childNode = findSelectedTreeNodeRec( children[ i ] );
            if( childNode != null )
                return( childNode );
        }
    }
    return( null );
}

function showFolderActionIcons( formId, fragmentId, treeId, imgPath, folderActionsStyleClass, requestPath ) {
    if( !selectionMode &&
        typeof( currFolderPerm ) != "undefined" &&
        typeof( currFolderName ) != "undefined" &&
        typeof( isCurrFolderRoot ) != "undefined" ) {
        var compTreeId = composeId( formId, fragmentId, treeId );
        var tree = document.getElementById( compTreeId );
        var node = findSelectedTreeNodeRec( tree );
        if( node != null ) {
            var lang = document.getElementById( formId + ':hiddenFieldLanguage' ).value;
            var folderActionsCode = '<span class="' + folderActionsStyleClass + '">';
            if( currFolderPerm >= MODIFY ){
                var strNewFolder = 'Add new folder';
                if( lang == 'fr' )
                    strNewFolder = 'Ajouter un dossier';
                folderActionsCode += 
                    '<a href="#" onClick="return( addNewFolder( \'' + formId + '\', ' + 
                        ( fragmentId == null ? "null" : "'" + fragmentId + "'" ) +' ) );">' +
                    '<img src="' + imgPath + 'resources/img/actionNewFolder.gif" width="15" height="15" border="0" alt="' + 
                        strNewFolder + '"></a>';
            }
            if( !isCurrFolderRoot && currFolderPerm >= ADMINISTRATE ) {
                var strRenameFolder = 'Rename folder';
                var strDeleteFolder = 'Delete folder';
                if( lang == 'fr' ) {
                    strRenameFolder = 'Renommer le dossier';
                    strDeleteFolder = 'Supprimer le dossier';
                }
                folderActionsCode +=
                    '<a href="#" onClick="return( renameFolder( \'' + formId + '\', ' +
                        ( fragmentId == null ? "null" : "'" + fragmentId + "'" ) + ', ' +
                        "'" + currFolderName + '\' ) );">' +
                    '<img src="' + imgPath + 'resources/img/actionRenameFolder.gif" width="16" height="16" border="0" alt="' +
                        strRenameFolder + '"></a>';
                folderActionsCode +=
                '<a href="#" onClick="return( deleteFolder( \'' + formId + '\', ' +
                        ( fragmentId == null ? "null" : "'" + fragmentId + "'" ) +' ) );">' +
                '<img src="' + imgPath + 'resources/img/actionDeleteFolder.gif" width="15" height="15" border="0" alt="' + 
                    strDeleteFolder + '"></a>'; 
            }
            var strShowFolderPerm = 'Show permissions';
            if( lang == 'fr' )
                strShowFolderPerm = 'Voir les permissions';
            if( currFolderPerm >= ADMINISTRATE ) {
                strShowFolderPerm = 'Edit permissions';
                if( lang == 'fr' )
                    strShowFolderPerm = 'Éditer les permissions';
            }
            folderActionsCode +=
                '<a href="#" onClick="return( showFolderPermissions( \'' + formId + '\', ' +
                    ( fragmentId == null ? "null" : "'" + fragmentId + "'" ) + ', ' +
                    "'" + requestPath + '\' ) );">' +
                '<img src="' + imgPath + 'resources/img/actionShowFolderPerm.gif" width="15" height="15" border="0" alt="' +
                    strShowFolderPerm + '"></a>';
            folderActionsCode += '</span>';
            node.insertAdjacentHTML( 'beforeEnd', folderActionsCode );
        }
    }
}

function selectResource(resLocation, resTitle) {
    top.setSelection(resTitle, resLocation)
}

function setSelection(title, location) {
    if (window.opener && !window.opener.closed)
        window.opener.setLMSelection(title, location);
    window.close();
}

function setTaxonPathCondition() {
    //alert(taxonPathTestValueOperandID);
    var hiddenFieldTaxonPath = window.frames['popupFrame'].document.getElementById( "form1:hiddenFieldTaxonPath" );
    //alert(hiddenFieldTaxonPath);
    //alert(hiddenFieldTaxonPath.value);
    if( hiddenFieldTaxonPath != null && hiddenFieldTaxonPath.value != null &&
        hiddenFieldTaxonPath.value != "" ) {
        var taxonField = document.getElementById( "form1:AdvancedSearchBox:AdvancedSearchForm:"+taxonPathTestValueOperandID );
        if (taxonField != null){
            //alert(hiddenFieldTaxonPath.value);
            taxonField.value = hiddenFieldTaxonPath.value;
        }
    }
    setTaxonPathTestValueOperand(null);
}

var taxonPathTestValueOperandID;

function setTaxonPathTestValueOperand(compID){
    taxonPathTestValueOperandID = compID;
}

