<a:application xmlns:a="http://ajax.org/2005/aml">
    <a:script><![CDATA[
        function filesort(value, args, xmlNode) {
            return (xmlNode.tagName == "folder" ? 0 : 1) + value.toLowerCase();
        }

        var confirmed = false;

        function remove() {
            if(window.cloud9config.readonly == true)
                return false;
            if (!confirmed) {
                var files = trFiles.getSelection();

                function confirm(file) {
                    var name = file.getAttribute("name");
                
                    require("core/util").question(
                        "Remove file?",
                        "You are about to remove the file " + name,
                        "Do you want continue? (This change cannot be undone)",
                        function () { // Yes
                            confirmed = true;
                            trFiles.remove(file);
                            confirmed = false;
                            if (files.length > 0)
                                confirm(files.shift());
                            else
                                winQuestion.hide();
                        },
                        function () { // Yes to all
                            confirmed = true;
                            trFiles.remove(file);
                            files.forEach(function (file) {
                                trFiles.remove(file);
                            });
                            confirmed = false;
                            winQuestion.hide();
                        },
                        function () { // No
                            if (files.length > 0)
                                confirm(files.shift());
                            else
                                winQuestion.hide();
                        },
                        function () { // No to all
                            winQuestion.hide();
                        }
                    );
                    btnQuestionYesToAll.setAttribute("visible", files.length > 0);
                    btnQuestionNoToAll.setAttribute("visible", files.length > 0);
                }
                confirm(files.shift());
                return false;
            } else
                return true;
        };

        function createPath(a, b){
            return b + "/" + apf.getFilename(a);
        }
    ]]></a:script>
    <a:window id="winFilesViewer"
      flex     = "1"
      skin     = "fm-window"
      title    = "Project Files"
      modal    = "false"
      visible  = "true"
      buttons  = "close"
      optimize = "true">
        <a:button
          top="-22"
          skin="header-btn"
          right="5"
          icon="refresh.png"
          onclick="require('ext/tree/tree').refresh()" />
        <!--a:button skin="header-btn" icon="order.png" top="-22" right="7"></a:button-->
        <a:tree id="trFiles" canrename="true" border="0" simpledata="true"
          contextmenu="mnuCtxTree" multiselect="false" reselectable="true" 
          onbeforemove="this.disable();" autoselect="false"
          onbeforeremove="return remove()" disabled="{{!stServerConnected.active}}"
          flex="1" anchors="0 0 0 0" onmouseover="require('ext/tree/tree').onTreeOver()"
          onmouseout="require('ext/tree/tree').onTreeOut()"
        >
            <a:each match="[project|file|folder]" sort="[@name]" sort-method="filesort">
                <a:insert match="[folder]" get="{location.host and davProject.readdir([@path])}" />
                <a:caption match="[@name]" value="{([../@changed] == 1 ? '*' : '') + [.]}" />
                <a:icon match="[folder|project]" value="folder.png" />
                <a:icon match="[file]" value="{require('core/util').getFileIcon(%[.])}" />
            </a:each>

            <a:add type="folder" get="{davProject.mkdir([@path], 'New Folder')}" />
            <a:add type="file" get="{davProject.create([@path], 'New File.txt', '')}" />
            <a:rename match="[file|folder[not(@path='/workspace')]]" set="{davProject.rename([@name], [@oldpath])}" />
            <a:move set="{require('ext/tree/tree').moveFile([@path], createPath([@path], [../@path]))}"/>
            <a:remove match="[file|folder]" set="{require('ext/filesystem/filesystem').remove([@path])}"/>
            <a:copy match="[file|folder]" set="{
                davProject.copy([@path], createPath([@newname] || [@path], [../@path]))
            }" undo="{
                alert('TODO!!');
            }"/>

            <a:drag match="[folder|file]" />
            <a:drop match="[folder|file]" target="[folder]"
                action="tree-append" copy="{event.ctrlKey}" />
                
        </a:tree>
        
        <a:scrollbar
            for      = "trFiles"
            id       = "sbTrFiles"
            margin   = "2"
            skin     = "sbios"
            top      = "0"
            right    = "0"
            bottom   = "0"
            width    = "7"
            overflow = "auto"
            onmouseover = "require('ext/tree/tree').onSBMouseOver()"
            onmouseout  = "require('ext/tree/tree').onSBMouseOut()"
            onmousedown = "require('ext/tree/tree').onSBMouseDown()"
            onmouseup   = "require('ext/tree/tree').onSBMouseUp()"
        />
        <a:menu id="mnuCtxTree" disabled="{!stServerConnected.active}">
            <a:item match="[file]" class="strong"  onclick="
                require('core/ide').dispatchEvent('openfile', {doc: require('core/ide').createDocument(apf.activeElement.selected)})
            ">Edit</a:item>
            <a:divider />
            <a:item onclick="require('ext/tree/tree').refresh()">Refresh</a:item>
            <a:item match="[file|folder[not(@root)]]" onclick="apf.activeElement.startRename()">Rename</a:item>
            <a:item match="[file|folder[not(@root)]]" onclick="apf.activeElement.remove()">Delete</a:item>
            <a:divider />
            <a:item match="[file|folder[not(@root)]]" onclick="
                apf.clipboard.cutSelection(apf.activeElement);
            ">Cut</a:item>
            <a:item match="[file|folder[not(@root)]]" onclick="
                apf.clipboard.copySelection(apf.activeElement);
            ">Copy</a:item>
            <a:item match="[folder|project]" disabled="{!apf.clipboard.empty}" onclick="
                apf.clipboard.pasteSelection(apf.activeElement);
            ">Paste</a:item>
            <a:divider />
            <a:item submenu="mnuNew">New</a:item>
        </a:menu>
    </a:window>
</a:application>

