Index: pro-violet-viettel/www/deploy/20150304/assets/js/manager.js
===================================================================
--- pro-violet-viettel/www/deploy/20150304/assets/js/manager.js	(revision 845)
+++ pro-violet-viettel/www/deploy/20150304/assets/js/manager.js	(revision 846)
@@ -1,1052 +1,1372 @@
 if (jQuery)
-    (function ($) {
-        $.extend($.fn, {
-            violetFileManager: function (o) {
-                if (!o)
-                    var o = {};
-                if (o.tree == undefined)
-                    o.tree = null;
-                if (o.grid == undefined)
-                    o.grid = null;
-
-                if (o.maincontainer == undefined)
-                    o.maincontainer = null;
-                if (o.titlebar == undefined)
-                    o.titlebar = null;
-                if (o.toolsbar == undefined)
-                    o.toolsbar = null;
-                if (o.statusbar == undefined)
-                    o.statusbar = null;
-                if (o.navigationbar == undefined)
-                	o.navigationbar = null;
-
-                if (o.oTree == undefined)
-                    o.oTree = null;
-                if (o.oGrid == undefined)
-                    o.oGrid = null;
-                if (o.host == undefined)
-                    o.host = 'http://localhost/';
-                if (o.hostmodule == undefined)
-                    o.hostmodule = 'privatecontent/';
-                if (o.script == undefined)
-                    o.script = 'getcontent';
-                if (o.data == undefined)
-                    o.data = null;
-                if (o.datasource == undefined)
-                    o.datasource = 'ajax';
-                
-                if (o.filehosting == undefined)
-                	o.filehosting = 'http://sbgapi.violet.vn/';
-                
-                if (o.invisibledButtons == undefined)
-                	o.invisibledButtons = null;
-
-                o.host = o.host + 'ajax/';
-
-                var isDev = false;
-                var contextmenu = null;
-                var oContainer = this;
-                var tree = [];
-                var totalItem = 0;
-                var countItem = 0;
-                var maxWidth = 0;
-                var treeCurrentNode = null;
-                var self = this;
-                var oClipBoard = {items: null, act: null};
-
-                /**
-                 * Toolbar defined
-                 * */
-                var btnNewFolder = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnNewFolder');
-                var btnDel = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnDel');
-                var btnCopy = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCopy');
-                var btnCut = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnCut');
-                var btnPaste = $('#' + o.toolsbar + ' > DIV.btn-group.basic > #btnPaste');
-                var btnShare = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnShare');
-                var btnPreview = $('#' + o.toolsbar + ' > DIV.btn-group.social > #btnPreview');
-                var btnDownload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnDownload');
-                var btnUpload = $('#' + o.toolsbar + ' > DIV.btn-group.creation > #btnUpload');
-                var btnRefresh = $('#' + o.toolsbar + ' > DIV.btn-group.control > #btnRefresh');
-
-                var toolbarButtons = [btnNewFolder, btnDel, btnCopy, btnCut, btnPaste, btnShare, btnPreview, btnDownload, btnUpload, btnRefresh];
-                var statusbar = $('DIV#' + o.statusbar);
-                
-                var sendCommand = function (p) {
-                    if (p.postdata == undefined)
-                        p.postdata = null;
-                    if (p.script == undefined)
-                        p.script = o.script;
-                    if (p.callbackSuccess == undefined)
-                        p.callbackSuccess = null;
-                    if (p.callbackDone == undefined)
-                        p.callbackDone = null;
-                    if (p.callbackFail == undefined)
-                        p.callbackFail = null;
-                    if (p.callbackAlways == undefined)
-                        p.callbackAlways = null;
-                    if (p.parseData == undefined)
-                        p.parseData = null;
-                    if (p.self == undefined)
-                        p.self = this;
-
-                    if (p.script != null && (o.datasource == 'ajax' || isDev)) {
-                        $.post(o.host + o.hostmodule + p.script, p.postdata, function (data) {
-                            if (data) {
-                                parseData = $.parseJSON(data);
-                                p.parseData = parseData;
-                            }
-
-                            if (p.callbackSuccess != null) {
-                                if (parseInt(parseData.ERROR.errCode) === 0)
-                                    p.callbackSuccess(parseData);
-                                else {
-                                    p.callbackFail(parseData.ERROR);
-                                }
-                            }
-
-                        }).done(function () {
-                            if (p.callbackDone != null)
-                                p.callbackDone(p.parseData);
-                        }).fail(function () {
-                            if (p.callbackFail != null)
-                                p.callbackFail(this);
-                        }).always(function () {
-                            if (p.callbackAlways != null)
-                                p.callbackAlways(this);
-                        });
-                    }
-                    else if (o.datasource == 'json') {
-                        if (p.callbackSuccess != null)
-                            p.callbackSuccess(o.data);
-                        if (p.callbackDone != null)
-                            p.callbackDone(this);
-                    }
-
-                };
-
-                var getDirTreeMaxWidth = function () {
-                    var scrWidth = $(o.maincontainer).width();
-                    return parseInt(scrWidth / 2);
-                }
-
-                var layoutRender = function () {
-                    var scrWidth = $('#' + o.maincontainer).width();
-                    var scrHeght = $(window).innerHeight();
-                    var dirTreeHeight = scrHeght - $('#' + o.titlebar).height() - $('#' + o.toolsbar).height() - $('#' + o.statusbar).height() -5;
-                    $('#' + o.tree).parent().height(dirTreeHeight);
-                    $('#' + o.grid).parent().height(dirTreeHeight);
-                    $('#' + o.grid).parent().width('calc(100% - ' + ($('#' + o.tree).parent().width() + 8) + 'px)');
-                    var scollWidth = $('#' + o.grid).parent().width();
-                    maxWidth = getDirTreeMaxWidth();
-                    $(o.tree).height(dirTreeHeight - 5);
-                    
-                    if (o.invisibledButtons != null) {
-                    	for (var i = 0; i < o.invisibledButtons.length; i++) {
-                    		$('#' + o.invisibledButtons[i]).hide();
-                    	}
-                    }
-                }
-
-                var createFileManager = function (parseData) {
-                    o.data = parseData;
-                    totalItem = o.data.DIRECTORIES.length;
-                    o.oTree = $('#' + o.tree).violetTree({data: o.data.DIRECTORIES, manager: oContainer});
-                    o.oGrid = $('#' + o.grid).violetGrid({data: o.data, manager: oContainer});
-                    self.refreshStatusBar();
-                };
-
-                var getAllDirChild = function (parentID, aryChild) {
-                    parentID = parentID == null ? 0 : parentID;
-                    var dirList = searchItemsByParent(parentID, 'directory');
-                    var index = aryChild.length;
-                    aryChild[index] = parentID;
-                    if (dirList.length > 0) {
-                        for (var i = 0; i < dirList.length; i++) {
-                            getAllDirChild(dirList[i].id, aryChild);
-                        }
-                    }
-                }
-
-                var buildTreeFromParent = function (dirID, node) {
-                    var aryChildFiles = [];
-                    var aryChildDirs = [];
-                    var aryChildIDs = [];
-                    var aryTmp = [];
-                    var dir = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
-                    aryChildDirs = searchItemsByParent(dirID, 'directory');
-                    aryChildFiles = searchItemsByParent(dirID, 'file');
-
-                    node.id = dir.id;
-                    node.name = dir.name;
-                    node.type = 'directory';
-
-                    $(aryChildDirs).each(function (index) {
-                        var id = this.id;
-                        var name = this.name;
-                        var type = 'directory';
-                        var cDir = {id: id, name: name, type: type, childs: null};
-                        aryChildIDs[index] = cDir;
-                    });
-
-                    if ($(aryChildFiles).length > 0) {
-                        if (node.files == undefined)
-                            node.files = [];
-                        $(aryChildFiles).each(function (index) {
-                            var id = this.id;
-                            var name = this.name;
-                            var type = 'file';
-                            var cFile = {id: id, name: name, type: type};
-                            node.files[index] = cFile;
-                        });
-                    }
-
-                    if ($(aryChildDirs).length > 0) {
-                        if (node.childs == undefined)
-                            node.childs = [];
-                        $(aryChildIDs).each(function (index) {
-                            node.childs[index] = new Object;
-                            buildTreeFromParent(aryChildIDs[index].id, node.childs[index]);
-                        });
-                    }
-                }
-
-                var checkChildExisted = function (id) {
-                    var dirList = searchItemsByParent(id, 'directory');
-                    var fileList = searchItemsByParent(id, 'file');
-                    return (dirList.length > 0) || (fileList.length > 0);
-                }
-
-                var doneInit = function () {
-                    bindEventToToolbars();
-                    documentEventsBinding();
-                };
-
-                var failInit = function (er) {
-                    bootbox.alert(er.err);
-                }
-
-                var init = function () {
-                    layoutRender();
-                    $('#' + o.tree).parent().resizable({
-                        maxWidth: maxWidth,
-                        minWidth: 220,
-                        handles: "e",
-                        resize: function (event, ui) {
-                            layoutRender();
-                        }
-                    });
-                    $(window).resize(function () {
-                        layoutRender();
-                        $('#' + o.tree).parent().resizable({maxWidth: maxWidth});
-                    });
-                    sendCommand({postdata: null, callbackSuccess: createFileManager, callbackDone: doneInit, callbackFail: failInit});
-                };
-
-                var searchItemByID = function (id, type) {
-                    var data = {};
-                    switch (type) {
-                        case 'directory':
-                            data = o.data.DIRECTORIES;
-                            break;
-                        case 'file':
-                            data = o.data.FILES;
-                            break;
-                        default:
-                            break;
-                    }
-
-                    //for (var i = 0; i < data.length; i++) {
-                    for (var i in data) {
-                        if (data[i].id == id) {
-                            return i;
-                        }
-                    }
-                }
-
-                var searchItemsByParent = function (parentID, type) {
-                    var data = {};
-                    var aryItem = [];
-                    var index = aryItem.length;
-
-                    switch (type) {
-                        case 'directory':
-                            data = o.data.DIRECTORIES;
-                            break;
-                        case 'file':
-                            data = o.data.FILES;
-                            break;
-                        default:
-                            break;
-                    }
-
-                    for (i in data) {
-                        if (data[i].parentID == parentID) {
-                            aryItem[index] = data[i];
-                            index++;
-                        }
-                    }
-
-                    return aryItem;
-                }
-
-                /**************************
-                 * TOOLBAR EVENTS - START *
-                 **************************/
-                var btnRefreshClick = function (obj) {
-                    $(o).find('i').addClass('icon-spin');
-                    sendCommand({postdata: null,
-                        callbackSuccess: function (parseData) {
-                            o.data = parseData;
-                            self.updateData({updateAll: true});
-                            o.oTree.refeshTree();
-                        },
-                        callbackDone: function () {
-                            $(o).find('i').removeClass('icon-spin');
-                        },
-                        callbackFail: failInit
-                    });
-                }
-
-                var btnNewFolderClick = function () {
-                    createFolderStart();
-                }
-
-                var btnUploadClick = function () {
-                    uploadStart();
-                    uploadInit();
-
-                }
-                var btnDownloadClick = function () {
-                    var items = o.oGrid.getHightLightItem();
-                    var fileid= new Array();
-                    var folder= new Array();
-                    for (var i = 0; i < $(items).length; i++) {
-                                        if(items[i].type=="file")
-                                        {
-                                        var file = items[i].id;              
-                                        fileid.push(file);
-                                        }
-                                        if(items[i].type=="directory")
-                                        {
-                                        var file = items[i].id;              
-                                        folder.push(file);
-                                        }
-                    }
-                    console.log(fileid.toString());
-                    var redirect = o.host+"download/getFile/";  
-                    self.redirectPost(redirect, {file: fileid.toString(),folder: folder.toString()}); 
-                }
-
-                var btnDelClick = function () {
-                    var items = o.oGrid.getHightLightItem();
-                    if ($(items).length == 0) {
-                        var dirID = $(o.oTree.getSelectedNode()).attr('id');
-                        var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
-                        item.type = 'directory';
-                        items = [item];
-                    }
-                    self.deleteItem(items);
-                }
-
-                var btnCopyClick = function () {
-                    copy('copy');
-                }
-
-                var btnPasteClick = function () {
-                    paste();
-                }
-
-                var btnCutClick = function () {
-                    copy('move');
-                }
-
-                var bindEventToToolbars = function () {
-                    $(btnRefresh).click(function (e) {
-                        btnRefreshClick(this)
-                    });
-
-                    $(btnNewFolder).click(function (e) {
-                        btnNewFolderClick()
-                    });
-                    $(btnUpload).click(function (e) {
-                        btnUploadClick()
-                    });
-
-                    $(btnDel).click(function (e) {
-                        btnDelClick()
-                    });
-                    $(btnCopy).click(function (e) {
-                        btnCopyClick()
-                    });
-                    $(btnCut).click(function (e) {
-                        btnCutClick()
-                    });
-                    $(btnPaste).click(function (e) {
-                        btnPasteClick()
-                    })
-                    $(btnPreview).click(function (e) {
-                        btnPreviewClick()
-                    })
-                    $(btnDownload).click(function (e) {
-                        btnDownloadClick()
-                    })
-
-                    /*btnShare
-                     btnPreview
-                     btnDownload
-                     btnUpload*/
-                }
-                /************************
-                 * TOOLBAR EVENTS - END *
-                 ************************/
-
-                /***********************************
-                 * DOCUMENT EVENTS BINDING - START *
-                 ***********************************/
-                var documentEventsBinding = function () {
-                    $(document).bind('keydown', function (e) {
-                        switch (e.which) {
-                            case 113:
-                            case 27:
-                                var gridSelectedItems = o.oGrid.getHightLightItem();
-                                if ($(gridSelectedItems).length > 0) {
-                                    o.oGrid.rename(e.which);
-                                } else {
-                                    o.oTree.rename(e.which);
-                                }
-                                break;
-                            case 46:
-                                //delete
-                                btnDelClick();
-                                break;
-                            case 65:
-                                if (e.ctrlKey) {
-                                    o.oGrid.selectAllNode();
-                                }
-                                break;
-                            default:
-                                break;
-                        }
-                    });
-                }
-                /***********************************
-                 * DOCUMENT EVENTS BINDING - END *
-                 ***********************************/
-
-                /*******************************
-                 * CREATE FOLDER - START *
-                 *******************************/
-                var createFolderStart = function () {
-                    var promptOptions = {
-                        title: "Táº¡o thÆ° má»¥c má»i",
-                        buttons: {
-                            confirm: {
-                                label: "LÆ°u"
-                            },
-                            cancel: {
-                                label: "Há»§y"
-                            }
-                        },
-                        callback: function (result) {
-                            if (result === null) {
-                            } else {
-                                createFolder(treeCurrentNode, result);
-                            }
-                        }
-                    };
-
-                    return bootbox.prompt(promptOptions);
-                }
-
-                var uploadStart = function () {
-                    var userid = o.data.userinfo.us_id;
-                    var promptOptions = {
-                        title: "Táº£i lÃªn",
-                        message: "<form id='upload' method='post'  action='"+api_url+"space/upload' enctype='multipart/form-data'><div id='drop'>KÃ©o tháº£ tá»p vÃ o ÄÃ¢y <a> Chá»n tá»p </a><input type='hidden' name='response' value='1'/><input type='hidden' name='dir' value='" + self.getTreeCurrentNode() + "'/><input type='hidden' name='userid' value='"+userid+"'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>",
-                        buttons: {
-                            success: {
-                                label: "Xong",
-                                className: "btn btn-primary",
-                                callback: function (result) {
-                                   
-                                }
-                            },
-                        },
-                        onEscape: function() {uploadDone(self.getTreeCurrentNode());}
-                    };
-
-                    return bootbox.dialog(promptOptions);
-                }
-                var uploadDone = function (result) {
-                   
-                }
-                var btnPreviewClick = function(){
-                    var items = o.oGrid.getHightLightItem();
-                    if ($(items).length == 0) {
-                        var dirID = $(o.oTree.getSelectedNode()).attr('id');
-                        var item = o.data.DIRECTORIES[searchItemByID(dirID, 'directory')];
-                        item.type = 'directory';
-                        items = [item];
-                    }
-                    previewFile(items[0]); 
-                }
-                
-                var previewFile = function(node) {
-                    var content="";
-                    $ext=node.fileurl.split('.').pop();
-                    $ext = $ext.toLowerCase(); 
-                    if($.inArray( $ext, [ "jpg", "jpeg","png","gif"])>=0)
-		   {
-                        content="<img style='width:100%' src='"+node.fileurl+"' /><br />"+node.name;
-                        bootbox.alert(content);
-                    }
-                   
-                    if($.inArray( $ext, [ "flv", "mp4","avi","m4v"])>=0)
-		   { 
-                        $.ajax({
-                            url: o.host+"preview/getVideoPreview/",
-                            type: "POST",
-                            data: {fileurl:node.fileurl,name:node.name}, 
-                            success: function(data, textStatus, jqXHR)
-                            {
-                                bootbox.alert(data);
-                            }
-                            ,
-                            error: function(jqXHR, textStatus, errorThrown)
-                            {
-
-                            }
-                        }); 
-                    }
-                    
-                    if($.inArray( $ext, [ "ogg"])>=0)
-		   {
-                        content='<audio controls>\
-                        <source src="'+node.fileurl+'" type="audio/ogg">\
+	(function($) {
+		$
+				.extend(
+						$.fn,
+						{
+							violetFileManager : function(o) {
+								if (!o)
+									var o = {};
+								if (o.tree == undefined)
+									o.tree = null;
+								if (o.grid == undefined)
+									o.grid = null;
+
+								if (o.maincontainer == undefined)
+									o.maincontainer = null;
+								if (o.titlebar == undefined)
+									o.titlebar = null;
+								if (o.toolsbar == undefined)
+									o.toolsbar = null;
+								if (o.statusbar == undefined)
+									o.statusbar = null;
+								if (o.navigationbar == undefined)
+									o.navigationbar = null;
+
+								if (o.oTree == undefined)
+									o.oTree = null;
+								if (o.oGrid == undefined)
+									o.oGrid = null;
+								if (o.host == undefined)
+									o.host = 'http://localhost/';
+								if (o.hostmodule == undefined)
+									o.hostmodule = 'privatecontent/';
+								if (o.script == undefined)
+									o.script = 'getcontent';
+								if (o.data == undefined)
+									o.data = null;
+								if (o.datasource == undefined)
+									o.datasource = 'ajax';
+
+								if (o.filehosting == undefined)
+									o.filehosting = 'http://sbgapi.violet.vn/';
+
+								if (o.invisibledButtons == undefined)
+									o.invisibledButtons = null;
+
+								o.host = o.host + 'ajax/';
+
+								var isDev = false;
+								var contextmenu = null;
+								var oContainer = this;
+								var tree = [];
+								var totalItem = 0;
+								var countItem = 0;
+								var maxWidth = 0;
+								var treeCurrentNode = null;
+								var self = this;
+								var oClipBoard = {
+									items : null,
+									act : null
+								};
+
+								/**
+								 * Toolbar defined
+								 */
+								var btnNewFolder = $('#'
+										+ o.toolsbar
+										+ ' > DIV.btn-group.basic > #btnNewFolder');
+								var btnDel = $('#' + o.toolsbar
+										+ ' > DIV.btn-group.basic > #btnDel');
+								var btnCopy = $('#' + o.toolsbar
+										+ ' > DIV.btn-group.basic > #btnCopy');
+								var btnCut = $('#' + o.toolsbar
+										+ ' > DIV.btn-group.basic > #btnCut');
+								var btnPaste = $('#' + o.toolsbar
+										+ ' > DIV.btn-group.basic > #btnPaste');
+								var btnShare = $('#' + o.toolsbar
+										+ ' > DIV.btn-group.social > #btnShare');
+								var btnPreview = $('#'
+										+ o.toolsbar
+										+ ' > DIV.btn-group.social > #btnPreview');
+								var btnDownload = $('#'
+										+ o.toolsbar
+										+ ' > DIV.btn-group.creation > #btnDownload');
+								var btnUpload = $('#'
+										+ o.toolsbar
+										+ ' > DIV.btn-group.creation > #btnUpload');
+								var btnRefresh = $('#'
+										+ o.toolsbar
+										+ ' > DIV.btn-group.control > #btnRefresh');
+
+								var toolbarButtons = [ btnNewFolder, btnDel,
+										btnCopy, btnCut, btnPaste, btnShare,
+										btnPreview, btnDownload, btnUpload,
+										btnRefresh ];
+								var statusbar = $('DIV#' + o.statusbar);
+
+								var sendCommand = function(p) {
+									if (p.postdata == undefined)
+										p.postdata = null;
+									if (p.script == undefined)
+										p.script = o.script;
+									if (p.callbackSuccess == undefined)
+										p.callbackSuccess = null;
+									if (p.callbackDone == undefined)
+										p.callbackDone = null;
+									if (p.callbackFail == undefined)
+										p.callbackFail = null;
+									if (p.callbackAlways == undefined)
+										p.callbackAlways = null;
+									if (p.parseData == undefined)
+										p.parseData = null;
+									if (p.self == undefined)
+										p.self = this;
+
+									if (p.script != null
+											&& (o.datasource == 'ajax' || isDev)) {
+										$
+												.post(
+														o.host + o.hostmodule
+																+ p.script,
+														p.postdata,
+														function(data) {
+															if (data) {
+																parseData = $
+																		.parseJSON(data);
+																p.parseData = parseData;
+															}
+
+															if (p.callbackSuccess != null) {
+																if (parseInt(parseData.ERROR.errCode) === 0)
+																	p
+																			.callbackSuccess(parseData);
+																else {
+																	p
+																			.callbackFail(parseData.ERROR);
+																}
+															}
+
+														})
+												.done(
+														function() {
+															if (p.callbackDone != null)
+																p
+																		.callbackDone(p.parseData);
+														})
+												.fail(function() {
+													if (p.callbackFail != null)
+														p.callbackFail(this);
+												})
+												.always(
+														function() {
+															if (p.callbackAlways != null)
+																p
+																		.callbackAlways(this);
+														});
+									} else if (o.datasource == 'json') {
+										if (p.callbackSuccess != null)
+											p.callbackSuccess(o.data);
+										if (p.callbackDone != null)
+											p.callbackDone(this);
+									}
+
+								};
+
+								var getDirTreeMaxWidth = function() {
+									var scrWidth = $(o.maincontainer).width();
+									return parseInt(scrWidth / 2);
+								}
+
+								var layoutRender = function() {
+									var scrWidth = $('#' + o.maincontainer)
+											.width();
+									var scrHeght = $(window).innerHeight();
+									var dirTreeHeight = scrHeght
+											- $('#' + o.titlebar).height()
+											- $('#' + o.toolsbar).height()
+											- $('#' + o.statusbar).height() - 5;
+									$('#' + o.tree).parent().height(
+											dirTreeHeight);
+									$('#' + o.grid).parent().height(
+											dirTreeHeight);
+									$('#' + o.grid).parent().width(
+											'calc(100% - '
+													+ ($('#' + o.tree).parent()
+															.width() + 8)
+													+ 'px)');
+									var scollWidth = $('#' + o.grid).parent()
+											.width();
+									maxWidth = getDirTreeMaxWidth();
+									$(o.tree).height(dirTreeHeight - 5);
+
+									if (o.invisibledButtons != null) {
+										for ( var i = 0; i < o.invisibledButtons.length; i++) {
+											$('#' + o.invisibledButtons[i])
+													.hide();
+										}
+									}
+								}
+
+								var createFileManager = function(parseData) {
+									o.data = parseData;
+									totalItem = o.data.DIRECTORIES.length;
+									o.oTree = $('#' + o.tree).violetTree({
+										data : o.data.DIRECTORIES,
+										manager : oContainer
+									});
+									o.oGrid = $('#' + o.grid).violetGrid({
+										data : o.data,
+										manager : oContainer
+									});
+									self.refreshStatusBar();
+								};
+
+								var getAllDirChild = function(parentID,
+										aryChild) {
+									parentID = parentID == null ? 0 : parentID;
+									var dirList = searchItemsByParent(parentID,
+											'directory');
+									var index = aryChild.length;
+									aryChild[index] = parentID;
+									if (dirList.length > 0) {
+										for ( var i = 0; i < dirList.length; i++) {
+											getAllDirChild(dirList[i].id,
+													aryChild);
+										}
+									}
+								}
+
+								var buildTreeFromParent = function(dirID, node) {
+									var aryChildFiles = [];
+									var aryChildDirs = [];
+									var aryChildIDs = [];
+									var aryTmp = [];
+									var dir = o.data.DIRECTORIES[searchItemByID(
+											dirID, 'directory')];
+									aryChildDirs = searchItemsByParent(dirID,
+											'directory');
+									aryChildFiles = searchItemsByParent(dirID,
+											'file');
+
+									node.id = dir.id;
+									node.name = dir.name;
+									node.type = 'directory';
+
+									$(aryChildDirs).each(function(index) {
+										var id = this.id;
+										var name = this.name;
+										var type = 'directory';
+										var cDir = {
+											id : id,
+											name : name,
+											type : type,
+											childs : null
+										};
+										aryChildIDs[index] = cDir;
+									});
+
+									if ($(aryChildFiles).length > 0) {
+										if (node.files == undefined)
+											node.files = [];
+										$(aryChildFiles).each(function(index) {
+											var id = this.id;
+											var name = this.name;
+											var type = 'file';
+											var cFile = {
+												id : id,
+												name : name,
+												type : type
+											};
+											node.files[index] = cFile;
+										});
+									}
+
+									if ($(aryChildDirs).length > 0) {
+										if (node.childs == undefined)
+											node.childs = [];
+										$(aryChildIDs)
+												.each(
+														function(index) {
+															node.childs[index] = new Object;
+															buildTreeFromParent(
+																	aryChildIDs[index].id,
+																	node.childs[index]);
+														});
+									}
+								}
+
+								var checkChildExisted = function(id) {
+									var dirList = searchItemsByParent(id,
+											'directory');
+									var fileList = searchItemsByParent(id,
+											'file');
+									return (dirList.length > 0)
+											|| (fileList.length > 0);
+								}
+
+								var doneInit = function() {
+									bindEventToToolbars();
+									documentEventsBinding();
+								};
+
+								var failInit = function(er) {
+									bootbox.alert(er.err);
+								}
+
+								var init = function() {
+									layoutRender();
+									$('#' + o.tree).parent().resizable({
+										maxWidth : maxWidth,
+										minWidth : 220,
+										handles : "e",
+										resize : function(event, ui) {
+											layoutRender();
+										}
+									});
+									$(window).resize(function() {
+										layoutRender();
+										$('#' + o.tree).parent().resizable({
+											maxWidth : maxWidth
+										});
+									});
+									sendCommand({
+										postdata : null,
+										callbackSuccess : createFileManager,
+										callbackDone : doneInit,
+										callbackFail : failInit
+									});
+								};
+
+								var searchItemByID = function(id, type) {
+									var data = {};
+									switch (type) {
+									case 'directory':
+										data = o.data.DIRECTORIES;
+										break;
+									case 'file':
+										data = o.data.FILES;
+										break;
+									default:
+										break;
+									}
+
+									// for (var i = 0; i < data.length; i++) {
+									for ( var i in data) {
+										if (data[i].id == id) {
+											return i;
+										}
+									}
+								}
+
+								var searchItemsByParent = function(parentID,
+										type) {
+									var data = {};
+									var aryItem = [];
+									var index = aryItem.length;
+
+									switch (type) {
+									case 'directory':
+										data = o.data.DIRECTORIES;
+										break;
+									case 'file':
+										data = o.data.FILES;
+										break;
+									default:
+										break;
+									}
+
+									for (i in data) {
+										if (data[i].parentID == parentID) {
+											aryItem[index] = data[i];
+											index++;
+										}
+									}
+
+									return aryItem;
+								}
+
+								/***********************************************
+								 * TOOLBAR EVENTS - START *
+								 **********************************************/
+								var btnRefreshClick = function(obj) {
+									$(o).find('i').addClass('icon-spin');
+									sendCommand({
+										postdata : null,
+										callbackSuccess : function(parseData) {
+											o.data = parseData;
+											self.updateData({
+												updateAll : true
+											});
+											o.oTree.refeshTree();
+										},
+										callbackDone : function() {
+											$(o).find('i').removeClass(
+													'icon-spin');
+										},
+										callbackFail : failInit
+									});
+								}
+
+								var btnNewFolderClick = function() {
+									createFolderStart();
+								}
+
+								var btnUploadClick = function() {
+									uploadStart();
+									uploadInit();
+
+								}
+								var btnDownloadClick = function() {
+									var items = o.oGrid.getHightLightItem();
+									var fileid = new Array();
+									var folder = new Array();
+									for ( var i = 0; i < $(items).length; i++) {
+										if (items[i].type == "file") {
+											var file = items[i].id;
+											fileid.push(file);
+										}
+										if (items[i].type == "directory") {
+											var file = items[i].id;
+											folder.push(file);
+										}
+									}
+									console.log(fileid.toString());
+									var redirect = o.host + "download/getFile/";
+									self.redirectPost(redirect, {
+										file : fileid.toString(),
+										folder : folder.toString()
+									});
+								}
+
+								var btnDelClick = function() {
+									var items = o.oGrid.getHightLightItem();
+									if ($(items).length == 0) {
+										var dirID = $(o.oTree.getSelectedNode())
+												.attr('id');
+										var item = o.data.DIRECTORIES[searchItemByID(
+												dirID, 'directory')];
+										item.type = 'directory';
+										items = [ item ];
+									}
+									self.deleteItem(items);
+								}
+
+								var btnCopyClick = function() {
+									copy('copy');
+								}
+
+								var btnPasteClick = function() {
+									paste();
+								}
+
+								var btnCutClick = function() {
+									copy('move');
+								}
+
+								var bindEventToToolbars = function() {
+									$(btnRefresh).click(function(e) {
+										btnRefreshClick(this)
+									});
+
+									$(btnNewFolder).click(function(e) {
+										btnNewFolderClick()
+									});
+									$(btnUpload).click(function(e) {
+										btnUploadClick()
+									});
+
+									$(btnDel).click(function(e) {
+										btnDelClick()
+									});
+									$(btnCopy).click(function(e) {
+										btnCopyClick()
+									});
+									$(btnCut).click(function(e) {
+										btnCutClick()
+									});
+									$(btnPaste).click(function(e) {
+										btnPasteClick()
+									})
+									$(btnPreview).click(function(e) {
+										btnPreviewClick()
+									})
+									$(btnDownload).click(function(e) {
+										btnDownloadClick()
+									})
+
+									/*
+									 * btnShare btnPreview btnDownload btnUpload
+									 */
+								}
+								/***********************************************
+								 * TOOLBAR EVENTS - END *
+								 **********************************************/
+
+								/***********************************************
+								 * DOCUMENT EVENTS BINDING - START *
+								 **********************************************/
+								var documentEventsBinding = function() {
+									$(document)
+											.bind(
+													'keydown',
+													function(e) {
+														switch (e.which) {
+														case 113:
+														case 27:
+															var gridSelectedItems = o.oGrid
+																	.getHightLightItem();
+															if ($(gridSelectedItems).length > 0) {
+																o.oGrid
+																		.rename(e.which);
+															} else {
+																o.oTree
+																		.rename(e.which);
+															}
+															break;
+														case 46:
+															// delete
+															btnDelClick();
+															break;
+														case 65:
+															if (e.ctrlKey) {
+																o.oGrid
+																		.selectAllNode();
+															}
+															break;
+														default:
+															break;
+														}
+													});
+								}
+								/***********************************************
+								 * DOCUMENT EVENTS BINDING - END *
+								 **********************************************/
+
+								/***********************************************
+								 * CREATE FOLDER - START *
+								 **********************************************/
+								var createFolderStart = function() {
+									var promptOptions = {
+										title : "Táº¡o thÆ° má»¥c má»i",
+										buttons : {
+											confirm : {
+												label : "LÆ°u"
+											},
+											cancel : {
+												label : "Há»§y"
+											}
+										},
+										callback : function(result) {
+											if (result === null) {
+											} else {
+												createFolder(treeCurrentNode,
+														result);
+											}
+										}
+									};
+
+									return bootbox.prompt(promptOptions);
+								}
+
+								var uploadStart = function() {
+									var userid = o.data.userinfo.us_id;
+									var promptOptions = {
+										title : "Táº£i lÃªn",
+										message : "<form id='upload' method='post'  action='"
+												+ api_url
+												+ "space/upload' enctype='multipart/form-data'><div id='drop'>KÃ©o tháº£ tá»p vÃ o ÄÃ¢y <a> Chá»n tá»p </a><input type='hidden' name='response' value='1'/><input type='hidden' name='dir' value='"
+												+ self.getTreeCurrentNode()
+												+ "'/><input type='hidden' name='userid' value='"
+												+ userid
+												+ "'/><input type='file' name='upload_file' multiple /></div><ul></ul></form>",
+										buttons : {
+											success : {
+												label : "Xong",
+												className : "btn btn-primary",
+												callback : function(result) {
+
+												}
+											},
+										},
+										onEscape : function() {
+											uploadDone(self
+													.getTreeCurrentNode());
+										}
+									};
+
+									return bootbox.dialog(promptOptions);
+								}
+								var uploadDone = function(result) {
+
+								}
+								var btnPreviewClick = function() {
+									var items = o.oGrid.getHightLightItem();
+									if ($(items).length == 0) {
+										var dirID = $(o.oTree.getSelectedNode())
+												.attr('id');
+										var item = o.data.DIRECTORIES[searchItemByID(
+												dirID, 'directory')];
+										item.type = 'directory';
+										items = [ item ];
+									}
+									previewFile(items[0]);
+								}
+
+								var previewFile = function(node) {
+									var content = "";
+									$ext = node.fileurl.split('.').pop();
+									$ext = $ext.toLowerCase();
+									if ($.inArray($ext, [ "jpg", "jpeg", "png",
+											"gif" ]) >= 0) {
+										content = "<img style='width:100%' src='"
+												+ node.fileurl
+												+ "' /><br />"
+												+ node.name;
+										bootbox.alert(content);
+									}
+
+									if ($.inArray($ext, [ "flv", "mp4", "avi",
+											"m4v" ]) >= 0) {
+										$
+												.ajax({
+													url : o.host
+															+ "preview/getVideoPreview/",
+													type : "POST",
+													data : {
+														fileurl : node.fileurl,
+														name : node.name
+													},
+													success : function(data,
+															textStatus, jqXHR) {
+														bootbox.alert(data);
+													},
+													error : function(jqXHR,
+															textStatus,
+															errorThrown) {
+
+													}
+												});
+									}
+
+									if ($.inArray($ext, [ "ogg" ]) >= 0) {
+										content = '<audio controls>\
+                        <source src="'
+												+ node.fileurl
+												+ '" type="audio/ogg">\
                       Your browser does not support the audio element.\
-                      </audio> <br />'+node.name;
-                        bootbox.alert(content); 
-                    }
-                    if($.inArray( $ext, [ "mp3"])>=0)
-		   {
-                        content='<audio controls>\
-                        <source src="'+node.fileurl+'" type="audio/mpeg">\
+                      </audio> <br />'
+												+ node.name;
+										bootbox.alert(content);
+									}
+									if ($.inArray($ext, [ "mp3" ]) >= 0) {
+										content = '<audio controls>\
+                        <source src="'
+												+ node.fileurl
+												+ '" type="audio/mpeg">\
                       Your browser does not support the audio element.\
-                      </audio> <br />'+node.name;
-                        bootbox.alert(content);  
-                    } 
-                    
-                    if($.inArray( $ext, ["ppt","xls","doc","pdf","docx","pptx","xlsx"])>=0)
-		   {
-                            
-                            $.ajax({
-                            url: o.host+"preview/getFilePreview/"+node.id,
-                            type: "POST",
-                            data: {},
-                            success: function(data, textStatus, jqXHR)
-                            {
-                                bootbox.alert(data);
-                            }
-                            ,
-                            error: function(jqXHR, textStatus, errorThrown)
-                            {
-
-                            }
-                        }); 
-                    }
-                    if($.inArray( $ext, [ "xvl"])>=0)
-		   {
-                       var url = o.host.replace("ajax/", "");  
-                       var redirect = url + 'frontend/lecture/'; 
-                       self.redirectPost(redirect, {fileid: node.id}); 
-                    } 
-                    $( ".bootbox" ).addClass( "preview" );
-                }
-                
-                var uploadInit = function () {
-                    var ul = $('#upload ul');
-
-                    $('#drop a').click(function () {
-                        $(this).parent().find('input').click();
-                    });
-                    
-                    $('#upload').fileupload({
-                        dropZone: $('#drop'),
-                        add: function (e, data) {
-
-                            var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"' +
-                                    ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>');
-                            tpl.find('p').text(data.files[0].name)
-                                    .append('<i>' + formatFileSize(data.files[0].size) + '</i>');
-                            data.context = tpl.appendTo(ul);
-                            tpl.find('input').knob();
-                            tpl.find('span').click(function () {
-
-                                if (tpl.hasClass('working')) {
-                                    jqXHR.abort();
-                                }
-
-                                tpl.fadeOut(function () {
-                                    tpl.remove();
-                                });
-
-                            });
-                           
-                            var jqXHR = data.submit();
-                        },
-                        progress: function (e, data) {
-
-                            // Calculate the completion percentage of the upload
-                            var progress = parseInt(data.loaded / data.total * 100, 10);
-
-                            // Update the hidden input field and trigger a change
-                            // so that the jQuery knob plugin knows to update the dial
-                            data.context.find('input').val(progress).change();
-
-                            if (progress == 100) {
-                                data.context.removeClass('working');
-                               
-                                
-                                                       
-                                
-                            }
-                        },
-                        fail: function (e, data) {
-                            // Something has gone wrong!
-                            data.context.addClass('error');
-                        },
-                        done: function (e, data) {
-                            //var newFileData = {"DIRECTORIES": [{"id": "5000", "name": "Dir1", "parentID": 85}], "FILES": [{"id": "2000", "name": "File in root 1", "parentID": 85, "minetype": "text"},{"id": "2001", "name": "File in root 2", "parentID": 85, "minetype": "text"}], "ERROR": {"err": "", "errCode": 0}};
-                              var newFileData=data.result;
-                              newFileData=$.parseJSON(data.result);
-                                if (newFileData.ERROR.errCode == 0) {
-                                    for (var i = 0; i < $(newFileData.FILES).length; i++) {
-                                        var file = newFileData.FILES[i];
-                                        var node = {thumbnail: file.thumbnail, id: file.id, name: file.name,fileurl: file.fileurl, parentID: file.parentID, minetype:file.minetype};
-                                        o.oGrid.createNode(node);
-                                        o.data.FILES[$(o.data.FILES).length] = node;
-                                    }
-                                    
-                                    for (var i = 0; i < $(newFileData.DIRECTORIES).length; i++) {
-                                        var file = newFileData.DIRECTORIES[i];
-                                        var node = {id: file.id, name: file.name, parentID: file.parentID, minetype:file.minetype};
-                                        o.oTree.createNode(node);
-                                        o.oGrid.createNode(node);
-                                        o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
-                                    }
-                                    
-                                    /*var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID};
-                                    o.oTree.createNode(node);
-                                    o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
-                                    if (o.oGrid) o.oGrid.reloadGrid();*/
-                                }        
-                        }
-
-                    });
-                    
-                    $(document).on('drop dragover', function (e) {
-                        e.preventDefault();
-                    });
-                    
-                    function formatFileSize(bytes) {
-                        if (typeof bytes !== 'number') {
-                            return '';
-                        }
-
-                        if (bytes >= 1000000000) {
-                            return (bytes / 1000000000).toFixed(2) + ' GB';
-                        }
-
-                        if (bytes >= 1000000) {
-                            return (bytes / 1000000).toFixed(2) + ' MB';
-                        }
-
-                        return (bytes / 1000).toFixed(2) + ' KB';
-                    }
-
-                };
-
-                var createFolder = function (parent, name) {
-                    var postdata = {fname: name, fparentid: parent};
-                    var script = 'createdir';
-                    /*isDev = true;*/
-                    sendCommand({
-                        postdata: postdata,
-                        script: script,
-                        callbackSuccess: function (parseData) {
-                            createFolderFinish(parseData);
-                        },
-                        callbackFail: function () {
-                        }
-                    });
-                }
-
-                var createFolderFinish = function (parseData) {
-                    /*isDev = false;*/
-                    if (parseData.ERROR.errCode == 0) {
-                        var node = {id: parseData.id, name: parseData.name, parentID: parseData.parentID};
-                        o.oTree.createNode(node);
-                        o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
-                        if (o.oGrid)
-                            o.oGrid.reloadGrid();
-                    }
-                }
-                /*******************************
-                 * CREATE FOLDER - END         *
-                 *******************************/
-                /********************************
-                 * COPY & PASTE & MOVE - START  *
-                 ************=*******************/
-                var copy = function (act) {
-                    //detect selected items
-                    //push to clipboard
-                    var items = o.oGrid.getHightLightItem();
-
-                    if ($(items).length == 0) {
-                        var node = o.oTree.getSelectedNode();
-                        var itemID = $(node).attr('id');
-
-                        if (itemID == 0)
-                            return false;
-
-                        items[0] = o.data.DIRECTORIES[searchItemByID(itemID, 'directory')];
-                        items[0].type = 'directory';
-                    }
-
-                    if ($(items).length > 0) {
-                        oClipBoard.items = items;
-                        oClipBoard.act = act;
-                    }
-                    return true;
-                }
-
-                var paste = function () {
-                    if ((oClipBoard.act != 'copy'
-                            && oClipBoard.act != 'move')
-                            || oClipBoard.items == null)
-                        return;
-
-                    var items = [];
-                    var destination = self.getTreeCurrentNode();
-                    if (oClipBoard.act != 'copy') {
-                        $(oClipBoard.items).each(function (index) {
-                            var node = new Object;
-                            if (this.type == 'directory')
-                                buildTreeFromParent(this.id, node);
-                            else {
-                                node.id = this.id;
-                                node.type = 'file';
-                            }
-
-                            items[index] = node;
-                        });
-                    }
-                    else {
-                        items = oClipBoard.items;
-                    }
-
-					for (var i = 0; i < items.length; i++) {
-						if (items[i].type == 'directory') {
-							items[i] = self.getAllDirChilds(items[i]);							
-						}
-					}
-					
-                    var postdata = {act: oClipBoard.act, destination: destination, data: JSON.stringify(items)};
-                    var script = oClipBoard.act;
-
-                    sendCommand({
-                        postdata: postdata,
-                        script: script,
-                        callbackSuccess: function (parseData) {
-                            if (oClipBoard.act == 'copy') {
-                                $(parseData.DIRECTORIES).each(function (index) {
-                                    o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this;
-                                });
-
-                                $(parseData.FILES).each(function (index) {
-                                    o.data.FILES[$(o.data.FILES).length] = this;
-                                });
-
-                                o.data.DIRECTORIES.sort(function (a, b) {
-                                    return a.parentID - b.parentID;
-                                });
-
-                                o.oTree.setData(o.data.DIRECTORIES);
-                                o.oGrid.setData(o.data);
-                                o.oTree.createCopyNode(parseData.DIRECTORIES);
-                                o.oGrid.reloadGrid();
-                            }
-                            else if (oClipBoard.act == 'move') {
-
-                            }
-                        }
-                    });
-                }
-
-                var move = function () {
-
-                }
-
-                var copyTo = function () {
-
-                }
-
-                var moveTo = function () {
-
-                }
-
-                /*****************************
-                 * COPY & PASTE & MOVE - END *
-                 *****************************/
-
-                this.deleteItem = function (item) {
-
-                    var confirmText = 'Báº¡n cÃ³ muá»n xÃ³a ';
-
-                    if ($.isArray(item) && item.length > 1) {
-                        confirmText += 'cÃ¡c thÆ° má»¥c (vÃ  files) ÄÃ£ chá»n?';
-                    }
-                    else if (item.length == 1) {
-                        if (item[0].id == 0)
-                            return false;
-                        confirmText += (item[0].type == 'directory') ? 'thÆ° má»¥c' : 'file';
-                        confirmText += ' <span style="font-weight:bold">' + item[0].name + "</span> khÃŽng?";
-                    }
-
-                    confirmText += '<br /><div style="color:red">(hÃ nh Äá»ng nÃ y sáºœ xÃ³a táº¥t cáº£ thÆ° má»¥c con vÃ  cÃ¡c file trong cÃ¡c thÆ° má»¥c ÄÃ£ chá»n)</div>';
-
-                    var parentID = item[0].parentID;
-
-                    for (var i = 0; i < item.length; i++) {
-                        if (item[i].type == 'directory') {
-                        	item[i] = self.getAllDirChilds(item[i]);                        	
-                        }
-                    }
-
-                    var confirmOptions = {
-                        message: confirmText,
-                        buttons: {
-                            confirm: {
-                                label: "XÃ³a"
-                            },
-                            cancel: {
-                                label: "KhÃŽng xÃ³a"
-                            }
-                        },
-                        callback: function (result) {
-                            if (result) {
-                                var delobj = JSON.stringify(item);
-                                var postdata = {delobj: delobj};
-                                var script = 'delete';
-                                sendCommand({
-                                    postdata: postdata,
-                                    script: script,
-                                    callbackSuccess: function (parseData) {
-                                        if ($(parseData.DIRECTORIES).length > 0) {
-                                            $(parseData.DIRECTORIES).each(function (index) {
-                                                o.oTree.deletion(this);
-                                                o.oGrid.deletion(this, 'directory');
-                                            });
-                                        }
-
-                                        if ($(parseData.FILES).length > 0) {
-                                            $(parseData.FILES).each(function (index) {
-                                                var file = o.data.FILES[searchItemByID(this, 'file')];
-                                                o.oGrid.deletion(this, file.minetype);
-                                            });
-                                        }
-                                    },
-                                    callbackDone: function (obj) {
-                                        if ($(parseData.DIRECTORIES).length > 0) {
-                                            $(parseData.DIRECTORIES).each(function (index) {
-                                                delete o.data.DIRECTORIES[searchItemByID(this, 'directory')];
-                                            });
-                                        }
-
-                                        if ($(parseData.FILES).length > 0) {
-                                            $(parseData.FILES).each(function (index) {
-                                                delete o.data.FILES[searchItemByID(this, 'file')];
-                                            });
-                                        }
-
-                                        o.oTree.setData(o.data.DIRECTORIES);
-                                        o.oGrid.setData(o.data);
-                                        self.setTreeCurrentNode(parentID);
-                                        o.oGrid.reloadGrid();
-                                    },
-                                    callbackFail: function () {
-                                    }
-                                });
-                            }
-                        }
-                    };
-
-                    bootbox.confirm(confirmOptions);
-                }
-                
-                this.getAllDirChilds = function (oDirItem) {
-                	var aryChildDirTmp = [];
-                    var aryChildDirID = [];
-                    var aryChildFiles = searchItemsByParent(oDirItem.id, 'file');
-                    var aryChildDirs = [];
-
-                    getAllDirChild(oDirItem.id, aryChildDirTmp);
-                    for (var d = 1; d < aryChildDirTmp.length; d++) {
-                        aryChildDirID[d - 1] = aryChildDirTmp[d];
-                    }
-
-                    for (var j = 0; j < aryChildDirID.length; j++) {
-                        if (o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')] != undefined)
-                            aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID(aryChildDirID[j], 'directory')];
-
-                        var aryTmp = searchItemsByParent(aryChildDirID[j], 'file');
-                        if (aryTmp.length > 0)
-                            for (var f in aryTmp) {
-                                aryChildFiles[aryChildFiles.length] = aryTmp[f];
-                            }
-                    }
-
-                    oDirItem.childDirs = aryChildDirs;
-                    oDirItem.childFiles = aryChildFiles;
-                    return oDirItem;
-                }
-
-                this.setTreeCurrentNode = function (treeNode) {
-                    //fire when click a node on Tree
-                    //then fire action of Grid
-                    treeCurrentNode = treeNode;
-                    if (o.oGrid)
-                        o.oGrid.reloadGrid();
-                };
-
-                this.getTreeCurrentNode = function () {
-                    return treeCurrentNode;
-                }
-
-                this.gridNodeDblClick = function (node) {
-                    if (node.minetype == 'directory') {
-                        var treeNode = $('#' + o.tree).find('UL.vstree[rel^="node' + node.parentID + '"] > LI[rel^="folder"] > A#' + node.id);
-                        o.oTree.activeNode(treeNode);
-                    }
-                    else {
-                        //execute or preview file
-                         previewFile(node);
-                    }
-                };
-
-                this.createNewFolder = function () {
-
-                }
-
-                this.updateData = function (p) {
-                    if (p.item == undefined)
-                        p.item = null;
-                    if (p.updateAll == undefined)
-                        p.updateAll = false;
-                    if (p.from == undefined)
-                        p.from = null;
-                    if (p.type == undefined)
-                        p.type = null;
-                    if (p.callback == undefined)
-                        p.callback = null;
-
-                    var obj = p.from == 'tree' ? o.oGrid : o.oTree;
-                    if (!p.updateAll) {
-                        var index = searchItemByID(p.item.id, p.type);
-                        switch (p.type) {
-                            case 'directory':
-                                o.data.DIRECTORIES[index].name = p.item.name;
-                                o.data.DIRECTORIES[index].parentID = p.item.parentID;
-                                break;
-                            case 'file':
-                                o.data.FILES[index].name = p.item.name;
-                                o.data.FILES[index].parentID = p.item.parentID;
-                                o.data.FILES[index].minetype = p.item.minetype;
-                                o.data.FILES[index].fileurl = p.item.fileurl;
-                                break;
-                            default:
-                                break;
-                        }
-                    }
-
-                    o.oTree.setData(o.data.DIRECTORIES);
-                    o.oGrid.setData(o.data);
-
-                    if (p.callback != null) {
-                        eval('obj.' + p.callback + '(p.item);')
-                    }
-
-                    //call sendCommand
-                }
-
-                this.searchItemsByParent = function (parentID, type) {
-                    return searchItemsByParent(parentID, type);
-                }
-
-                this.searchItemByID = function (id, type) {
-                    return searchItemByID(id, type);
-                }
-                
-                this.refreshStatusBar = function () {
-                	var totalSize = 0;
-                	var message = '';
-                	if (o.data.FILES.length > 0) {
-                		for (var i = 0; i < o.data.FILES.length; i++) {
-                			totalSize += parseInt(o.data.FILES[i].size);
-                		}
-                	}
-                	
-                	message = '<span>Tá»ng dung lÆ°á»£ng ÄÃ£ sá»­ dá»¥ng: <strong>' + self.formatFileSize(totalSize) + '</strong></span>';
-                	
-                	var items = o.oGrid.getHightLightItem();
-                	if (items.length == 1) {
-                		if ((typeof items[0].minetype !== 'undefined')) {
-                			message += '<span>Tá»p: <strong>' + items[0].name + '</strong></span>';
-                			message += '<span> - Dung lÆ°á»£ng: <strong>' + self.formatFileSize(items[0].size) + '</strong></span>';
-                		}else {
-                			message += '<span>ThÆ° má»¥c: <strong>' + items[0].name + '</strong></span>';
-                		}
-                	}
-                	else if (items.length > 1) {
-                		var selectedSize = 0;
-                		for (var i = 0; i < items.length; i++) {
-                			selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size) : 0;
-                		}
-                		message += '<span><strong>' + items.length + ' tá»p (thÆ° má»¥c)</strong> ÄÆ°á»£c chá»n</span>';
-                		message += '<span> - Dung lÆ°á»£ng: <strong>' + self.formatFileSize(selectedSize) + '</strong></span>';
-                	}
-                	
-                	$(statusbar).html(message);
-                }
-                
-                this.redirectPost = function(location, args){
-                    var form = '';
-                    $.each( args, function( key, value ) {
-                        form += '<input type="hidden" name="'+key+'" value="'+value+'">';
-                    });
-                    $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit();
-                }
-                
-    		this.formatFileSize = function (size) {
-    		        var i;
-    		        i = Math.floor(Math.log(size) / Math.log(1024));
-    		        if ((size === 0) || (parseInt(size) === 0)) {
-    		          return "0 kB";
-    		        } else if (isNaN(i) || (!isFinite(size)) || (size === Number.POSITIVE_INFINITY) || (size === Number.NEGATIVE_INFINITY) || (size == null) || (size < 0)) {
-    		          console.info("Throwing error");
-    		          throw Error("" + size + " did not compute to a valid number to be humanized.");
-    		        } else {
-    		            return (size / Math.pow(1024, i)).toFixed(2) * 1 + " " + ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][i];
-    		        }}
-    			
-
-                this.initialize = function () {
-                    init();
-                    return this;
-                };
-
-                return this.initialize();
-            }
-        
-        });
-    })(jQuery);
+                      </audio> <br />'
+												+ node.name;
+										bootbox.alert(content);
+									}
+
+									if ($.inArray($ext, [ "ppt", "xls", "doc",
+											"pdf", "docx", "pptx", "xlsx" ]) >= 0) {
+
+										$.ajax({
+											url : o.host
+													+ "preview/getFilePreview/"
+													+ node.id,
+											type : "POST",
+											data : {},
+											success : function(data,
+													textStatus, jqXHR) {
+												bootbox.alert(data);
+											},
+											error : function(jqXHR, textStatus,
+													errorThrown) {
+
+											}
+										});
+									}
+									if ($.inArray($ext, [ "xvl" ]) >= 0) {
+										var url = o.host.replace("ajax/", "");
+										var redirect = url
+												+ 'frontend/lecture/';
+										self.redirectPost(redirect, {
+											fileid : node.id
+										});
+									}
+									$(".bootbox").addClass("preview");
+								}
+
+								var uploadInit = function() {
+									var ul = $('#upload ul');
+
+									$('#drop a').click(function() {
+										$(this).parent().find('input').click();
+									});
+
+									$('#upload')
+											.fileupload(
+													{
+														dropZone : $('#drop'),
+														add : function(e, data) {
+
+															var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"'
+																	+ ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><span></span></li>');
+															tpl
+																	.find('p')
+																	.text(
+																			data.files[0].name)
+																	.append(
+																			'<i>'
+																					+ formatFileSize(data.files[0].size)
+																					+ '</i>');
+															data.context = tpl
+																	.appendTo(ul);
+															tpl.find('input')
+																	.knob();
+															tpl
+																	.find(
+																			'span')
+																	.click(
+																			function() {
+
+																				if (tpl
+																						.hasClass('working')) {
+																					jqXHR
+																							.abort();
+																				}
+
+																				tpl
+																						.fadeOut(function() {
+																							tpl
+																									.remove();
+																						});
+
+																			});
+
+															var jqXHR = data
+																	.submit();
+														},
+														progress : function(e,
+																data) {
+
+															// Calculate the
+															// completion
+															// percentage of the
+															// upload
+															var progress = parseInt(
+																	data.loaded
+																			/ data.total
+																			* 100,
+																	10);
+
+															// Update the hidden
+															// input field and
+															// trigger a change
+															// so that the
+															// jQuery knob
+															// plugin knows to
+															// update the dial
+															data.context
+																	.find(
+																			'input')
+																	.val(
+																			progress)
+																	.change();
+
+															if (progress == 100) {
+																data.context
+																		.removeClass('working');
+
+															}
+														},
+														fail : function(e, data) {
+															// Something has
+															// gone wrong!
+															data.context
+																	.addClass('error');
+														},
+														done : function(e, data) {
+															// var newFileData =
+															// {"DIRECTORIES":
+															// [{"id": "5000",
+															// "name": "Dir1",
+															// "parentID": 85}],
+															// "FILES": [{"id":
+															// "2000", "name":
+															// "File in root 1",
+															// "parentID": 85,
+															// "minetype":
+															// "text"},{"id":
+															// "2001", "name":
+															// "File in root 2",
+															// "parentID": 85,
+															// "minetype":
+															// "text"}],
+															// "ERROR": {"err":
+															// "", "errCode":
+															// 0}};
+															var newFileData = data.result;
+															newFileData = $
+																	.parseJSON(data.result);
+															if (newFileData.ERROR.errCode == 0) {
+																for ( var i = 0; i < $(newFileData.FILES).length; i++) {
+																	var file = newFileData.FILES[i];
+																	var node = {
+																		thumbnail : file.thumbnail,
+																		id : file.id,
+																		name : file.name,
+																		fileurl : file.fileurl,
+																		parentID : file.parentID,
+																		minetype : file.minetype
+																	};
+																	o.oGrid
+																			.createNode(node);
+																	o.data.FILES[$(o.data.FILES).length] = node;
+																}
+
+																for ( var i = 0; i < $(newFileData.DIRECTORIES).length; i++) {
+																	var file = newFileData.DIRECTORIES[i];
+																	var node = {
+																		id : file.id,
+																		name : file.name,
+																		parentID : file.parentID,
+																		minetype : file.minetype
+																	};
+																	o.oTree
+																			.createNode(node);
+																	o.oGrid
+																			.createNode(node);
+																	o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
+																}
+
+																/*
+																 * var node =
+																 * {id:
+																 * parseData.id,
+																 * name:
+																 * parseData.name,
+																 * parentID:
+																 * parseData.parentID};
+																 * o.oTree.createNode(node);
+																 * o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] =
+																 * node; if
+																 * (o.oGrid)
+																 * o.oGrid.reloadGrid();
+																 */
+															}
+														}
+
+													});
+
+									$(document).on('drop dragover',
+											function(e) {
+												e.preventDefault();
+											});
+
+									function formatFileSize(bytes) {
+										if (typeof bytes !== 'number') {
+											return '';
+										}
+
+										if (bytes >= 1000000000) {
+											return (bytes / 1000000000)
+													.toFixed(2)
+													+ ' GB';
+										}
+
+										if (bytes >= 1000000) {
+											return (bytes / 1000000).toFixed(2)
+													+ ' MB';
+										}
+
+										return (bytes / 1000).toFixed(2)
+												+ ' KB';
+									}
+
+								};
+
+								var createFolder = function(parent, name) {
+									var postdata = {
+										fname : name,
+										fparentid : parent
+									};
+									var script = 'createdir';
+									/* isDev = true; */
+									sendCommand({
+										postdata : postdata,
+										script : script,
+										callbackSuccess : function(parseData) {
+											createFolderFinish(parseData);
+										},
+										callbackFail : function() {
+										}
+									});
+								}
+
+								var createFolderFinish = function(parseData) {
+									/* isDev = false; */
+									if (parseData.ERROR.errCode == 0) {
+										var node = {
+											id : parseData.id,
+											name : parseData.name,
+											parentID : parseData.parentID
+										};
+										o.oTree.createNode(node);
+										o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = node;
+										if (o.oGrid)
+											o.oGrid.reloadGrid();
+									}
+								}
+								/***********************************************
+								 * CREATE FOLDER - END *
+								 **********************************************/
+								/***********************************************
+								 * COPY & PASTE & MOVE - START * =***********
+								 **********************************************/
+								var copy = function(act) {
+									// detect selected items
+									// push to clipboard
+									var items = o.oGrid.getHightLightItem();
+
+									if ($(items).length == 0) {
+										var node = o.oTree.getSelectedNode();
+										var itemID = $(node).attr('id');
+
+										if (itemID == 0)
+											return false;
+
+										items[0] = o.data.DIRECTORIES[searchItemByID(
+												itemID, 'directory')];
+										items[0].type = 'directory';
+									}
+
+									if ($(items).length > 0) {
+										oClipBoard.items = items;
+										oClipBoard.act = act;
+									}
+									return true;
+								}
+
+								var paste = function() {
+									if ((oClipBoard.act != 'copy' && oClipBoard.act != 'move')
+											|| oClipBoard.items == null)
+										return;
+
+									var items = [];
+									var destination = self.getTreeCurrentNode();
+									if (oClipBoard.act != 'copy') {
+										$(oClipBoard.items)
+												.each(
+														function(index) {
+															var node = new Object;
+															if (this.type == 'directory')
+																buildTreeFromParent(
+																		this.id,
+																		node);
+															else {
+																node.id = this.id;
+																node.type = 'file';
+															}
+
+															items[index] = node;
+														});
+									} else {
+										items = oClipBoard.items;
+									}
+
+									for ( var i = 0; i < items.length; i++) {
+										if (items[i].type == 'directory') {
+											items[i] = self
+													.getAllDirChilds(items[i]);
+										}
+									}
+
+									var postdata = {
+										act : oClipBoard.act,
+										destination : destination,
+										data : JSON.stringify(items)
+									};
+									var script = oClipBoard.act;
+
+									sendCommand({
+										postdata : postdata,
+										script : script,
+										callbackSuccess : function(parseData) {
+											if (oClipBoard.act == 'copy') {
+												$(parseData.DIRECTORIES)
+														.each(
+																function(index) {
+																	o.data.DIRECTORIES[$(o.data.DIRECTORIES).length] = this;
+																});
+
+												$(parseData.FILES)
+														.each(
+																function(index) {
+																	o.data.FILES[$(o.data.FILES).length] = this;
+																});
+
+												o.data.DIRECTORIES
+														.sort(function(a, b) {
+															return a.parentID
+																	- b.parentID;
+														});
+
+												o.oTree
+														.setData(o.data.DIRECTORIES);
+												o.oGrid.setData(o.data);
+												o.oTree
+														.createCopyNode(parseData.DIRECTORIES);
+												o.oGrid.reloadGrid();
+											} else if (oClipBoard.act == 'move') {
+
+											}
+										}
+									});
+								}
+
+								var move = function() {
+
+								}
+
+								var copyTo = function() {
+
+								}
+
+								var moveTo = function() {
+
+								}
+
+								/***********************************************
+								 * COPY & PASTE & MOVE - END *
+								 **********************************************/
+
+								this.deleteItem = function(item) {
+
+									var confirmText = 'Báº¡n cÃ³ muá»n xÃ³a ';
+
+									if ($.isArray(item) && item.length > 1) {
+										confirmText += 'cÃ¡c thÆ° má»¥c (vÃ  files) ÄÃ£ chá»n?';
+									} else if (item.length == 1) {
+										if (item[0].id == 0)
+											return false;
+										confirmText += (item[0].type == 'directory') ? 'thÆ° má»¥c'
+												: 'file';
+										confirmText += ' <span style="font-weight:bold">'
+												+ item[0].name
+												+ "</span> khÃŽng?";
+									}
+
+									confirmText += '<br /><div style="color:red">(hÃ nh Äá»ng nÃ y sáºœ xÃ³a táº¥t cáº£ thÆ° má»¥c con vÃ  cÃ¡c file trong cÃ¡c thÆ° má»¥c ÄÃ£ chá»n)</div>';
+
+									var parentID = item[0].parentID;
+
+									for ( var i = 0; i < item.length; i++) {
+										if (item[i].type == 'directory') {
+											item[i] = self
+													.getAllDirChilds(item[i]);
+										}
+									}
+
+									var confirmOptions = {
+										message : confirmText,
+										buttons : {
+											confirm : {
+												label : "XÃ³a"
+											},
+											cancel : {
+												label : "KhÃŽng xÃ³a"
+											}
+										},
+										callback : function(result) {
+											if (result) {
+												var delobj = JSON
+														.stringify(item);
+												var postdata = {
+													delobj : delobj
+												};
+												var script = 'delete';
+												sendCommand({
+													postdata : postdata,
+													script : script,
+													callbackSuccess : function(
+															parseData) {
+														if ($(parseData.DIRECTORIES).length > 0) {
+															$(
+																	parseData.DIRECTORIES)
+																	.each(
+																			function(
+																					index) {
+																				o.oTree
+																						.deletion(this);
+																				o.oGrid
+																						.deletion(
+																								this,
+																								'directory');
+																			});
+														}
+
+														if ($(parseData.FILES).length > 0) {
+															$(parseData.FILES)
+																	.each(
+																			function(
+																					index) {
+																				var file = o.data.FILES[searchItemByID(
+																						this,
+																						'file')];
+																				o.oGrid
+																						.deletion(
+																								this,
+																								file.minetype);
+																			});
+														}
+													},
+													callbackDone : function(obj) {
+														if ($(parseData.DIRECTORIES).length > 0) {
+															$(
+																	parseData.DIRECTORIES)
+																	.each(
+																			function(
+																					index) {
+																				delete o.data.DIRECTORIES[searchItemByID(
+																						this,
+																						'directory')];
+																			});
+														}
+
+														if ($(parseData.FILES).length > 0) {
+															$(parseData.FILES)
+																	.each(
+																			function(
+																					index) {
+																				delete o.data.FILES[searchItemByID(
+																						this,
+																						'file')];
+																			});
+														}
+
+														o.oTree
+																.setData(o.data.DIRECTORIES);
+														o.oGrid.setData(o.data);
+														self
+																.setTreeCurrentNode(parentID);
+														o.oGrid.reloadGrid();
+													},
+													callbackFail : function() {
+													}
+												});
+											}
+										}
+									};
+
+									bootbox.confirm(confirmOptions);
+								}
+
+								this.getAllDirChilds = function(oDirItem) {
+									var aryChildDirTmp = [];
+									var aryChildDirID = [];
+									var aryChildFiles = searchItemsByParent(
+											oDirItem.id, 'file');
+									var aryChildDirs = [];
+
+									getAllDirChild(oDirItem.id, aryChildDirTmp);
+									for ( var d = 1; d < aryChildDirTmp.length; d++) {
+										aryChildDirID[d - 1] = aryChildDirTmp[d];
+									}
+
+									for ( var j = 0; j < aryChildDirID.length; j++) {
+										if (o.data.DIRECTORIES[searchItemByID(
+												aryChildDirID[j], 'directory')] != undefined)
+											aryChildDirs[aryChildDirs.length] = o.data.DIRECTORIES[searchItemByID(
+													aryChildDirID[j],
+													'directory')];
+
+										var aryTmp = searchItemsByParent(
+												aryChildDirID[j], 'file');
+										if (aryTmp.length > 0)
+											for ( var f in aryTmp) {
+												aryChildFiles[aryChildFiles.length] = aryTmp[f];
+											}
+									}
+
+									oDirItem.childDirs = aryChildDirs;
+									oDirItem.childFiles = aryChildFiles;
+									return oDirItem;
+								}
+
+								this.setTreeCurrentNode = function(treeNode) {
+									// fire when click a node on Tree
+									// then fire action of Grid
+									treeCurrentNode = treeNode;
+									if (o.oGrid)
+										o.oGrid.reloadGrid();
+								};
+
+								this.getTreeCurrentNode = function() {
+									return treeCurrentNode;
+								}
+
+								this.gridNodeDblClick = function(node) {
+									if (node.minetype == 'directory') {
+										var treeNode = $('#' + o.tree)
+												.find(
+														'UL.vstree[rel^="node'
+																+ node.parentID
+																+ '"] > LI[rel^="folder"] > A#'
+																+ node.id);
+										o.oTree.activeNode(treeNode);
+									} else {
+										// execute or preview file
+										previewFile(node);
+									}
+								};
+
+								this.createNewFolder = function() {
+
+								}
+
+								this.updateData = function(p) {
+									if (p.item == undefined)
+										p.item = null;
+									if (p.updateAll == undefined)
+										p.updateAll = false;
+									if (p.from == undefined)
+										p.from = null;
+									if (p.type == undefined)
+										p.type = null;
+									if (p.callback == undefined)
+										p.callback = null;
+
+									var obj = p.from == 'tree' ? o.oGrid
+											: o.oTree;
+									if (!p.updateAll) {
+										var index = searchItemByID(p.item.id,
+												p.type);
+										switch (p.type) {
+										case 'directory':
+											o.data.DIRECTORIES[index].name = p.item.name;
+											o.data.DIRECTORIES[index].parentID = p.item.parentID;
+											break;
+										case 'file':
+											o.data.FILES[index].name = p.item.name;
+											o.data.FILES[index].parentID = p.item.parentID;
+											o.data.FILES[index].minetype = p.item.minetype;
+											o.data.FILES[index].fileurl = p.item.fileurl;
+											break;
+										default:
+											break;
+										}
+									}
+
+									o.oTree.setData(o.data.DIRECTORIES);
+									o.oGrid.setData(o.data);
+
+									if (p.callback != null) {
+										eval('obj.' + p.callback + '(p.item);')
+									}
+
+									// call sendCommand
+								}
+
+								this.searchItemsByParent = function(parentID,
+										type) {
+									return searchItemsByParent(parentID, type);
+								}
+
+								this.searchItemByID = function(id, type) {
+									return searchItemByID(id, type);
+								}
+
+								this.refreshStatusBar = function() {
+									var totalSize = 0;
+									var message = '';
+									if (o.data.FILES.length > 0) {
+										for ( var i = 0; i < o.data.FILES.length; i++) {
+											totalSize += parseInt(o.data.FILES[i].size);
+										}
+									}
+
+									message = '<span>Tá»ng dung lÆ°á»£ng ÄÃ£ sá»­ dá»¥ng: <strong>'
+											+ self.formatFileSize(totalSize)
+											+ '</strong></span>';
+
+									var items = o.oGrid.getHightLightItem();
+									if (items.length == 1) {
+										if ((typeof items[0].minetype !== 'undefined')) {
+											message += '<span>Tá»p: <strong>'
+													+ items[0].name
+													+ '</strong></span>';
+											message += '<span> - Dung lÆ°á»£ng: <strong>'
+													+ self
+															.formatFileSize(items[0].size)
+													+ '</strong></span>';
+										} else {
+											message += '<span>ThÆ° má»¥c: <strong>'
+													+ items[0].name
+													+ '</strong></span>';
+										}
+									} else if (items.length > 1) {
+										var selectedSize = 0;
+										for ( var i = 0; i < items.length; i++) {
+											selectedSize += (typeof items[i].minetype !== 'undefined') ? parseInt(items[i].size)
+													: 0;
+										}
+										message += '<span><strong>'
+												+ items.length
+												+ ' tá»p (thÆ° má»¥c)</strong> ÄÆ°á»£c chá»n</span>';
+										message += '<span> - Dung lÆ°á»£ng: <strong>'
+												+ self
+														.formatFileSize(selectedSize)
+												+ '</strong></span>';
+									}
+
+									$(statusbar).html(message);
+								}
+								
+								this.refreshNavigationBar = function () {
+									var root = null;
+								}
+
+								this.redirectPost = function(location, args) {
+									var form = '';
+									$.each(args, function(key, value) {
+										form += '<input type="hidden" name="'
+												+ key + '" value="' + value
+												+ '">';
+									});
+									$(
+											'<form action="' + location
+													+ '" method="POST">' + form
+													+ '</form>').appendTo(
+											'body').submit();
+								}
+
+								this.formatFileSize = function(size) {
+									var i;
+									i = Math.floor(Math.log(size)
+											/ Math.log(1024));
+									if ((size === 0) || (parseInt(size) === 0)) {
+										return "0 kB";
+									} else if (isNaN(i)
+											|| (!isFinite(size))
+											|| (size === Number.POSITIVE_INFINITY)
+											|| (size === Number.NEGATIVE_INFINITY)
+											|| (size == null) || (size < 0)) {
+										console.info("Throwing error");
+										throw Error(""
+												+ size
+												+ " did not compute to a valid number to be humanized.");
+									} else {
+										return (size / Math.pow(1024, i))
+												.toFixed(2)
+												* 1
+												+ " "
+												+ [ "B", "KB", "MB", "GB",
+														"TB", "PB", "EB", "ZB",
+														"YB" ][i];
+									}
+								}
+
+								this.initialize = function() {
+									init();
+									return this;
+								};
+
+								return this.initialize();
+							}
+
+						});
+	})(jQuery);
