/*
存在问题
1、非能打开文件处理
*/

Namespace.register("U.Dk.LE"); //Disk左键事件命名空间

//#region 左键事件处理

//#region 当前网盘打开

//文件点击,文件夹点击,及url导航到达区域。
/*
文件管理区域点击事件,暂时分为:音乐、图片、视频、文件。
参数一:fileinfo为单击的文件对象
参数二:UAE,打开的不是一个文件夹,打开的是最近访问区域。 群文件查看,最近访问。
参数四:userid为用户id。
参数五:UOE,左边树目录与右边文件夹目录点击同步。
*/
U.Dk.LE.OpenFileDirectory = function (fileinfo, userid) {
    var i, _pictureinfo, _extension, _rightClick, _head, _navArea, _uploadel, _navarray;
    var _content;
    var _userid = userid || US.userInfo.userid; //得到用户id
    var _diskinfo = U.Dk.DiskOperatingSwitch(_userid); //根据用户id找到其所有硬盘数据。

    //如果为文件,则直接打开文件,否则,是目录,打开目录
    if (fileinfo.filetype) {  //生成导航 //文件夹展示 
        U.M.StopBubble(); //阻止冒泡
        _extension = fileinfo["UserDirectoryExtendType"].toLocaleLowerCase(); //得到文件扩展名
        //根据文件类型进入不同的应用。
        var _types = US.Disk.ApplicationTypes;
        var _applicationame;
        //判断后缀名归属于哪一个应用程序。得到应用程序的名称。
        for (i in _types) {
            if (_types[i].types.indexOf(_extension) > -1) { //判断文件类型是否归属该应用
                _applicationame = i;
                break;
            }
        }
        //根据应用名称打开不同的应用。
        switch (_applicationame) {
            case "music": //播放制定的音乐
                //_diskinfo[4]代表所有文件及文档的另外一种组织方法。
                if (_diskinfo[4][fileinfo.UserDirectoryParentID].Child) {
                    //当前播放的音乐文件
                    U.MPlayer.YYLoad(fileinfo["UserDirectoryParentID"], _diskinfo[1][0]); //播放文件夹下面所有音乐。
                }
                else {
                    U.MPlayer.TYY(fileinfo); //播放单首音乐。          
                }
                break;
            case "image": //图片查看
                _pictureinfo = fileinfo["UseFilesServerThumbnailName"] ? [fileinfo] : U.Dk.LE.OIMG(fileinfo);
                //_pictureinfo[0] 为所有图片,_pictureinfo[1]为当前文件在所有文件中的位置。
                U.D.Img.Img(fileinfo, _pictureinfo[0], _pictureinfo[1], { "TF": 2 });
                break;
            case "video":
                U.Dk.LE.OV(fileinfo); //视频播放器。
                break; //视频处理 
            case "text":
                U.D.DT.YYDK("Txt", fileinfo, _diskinfo); //弹出网盘
                break;
            case "usoffice": //如果是云端系统自有格式文件。 
                var _type = { "ue": "Excel", "uw": "Word", "txt": "Txt"}[_extension];
                U.D.DT.YYDK(_type, fileinfo, _diskinfo); //弹出网盘
                break;
            default: //windows上传的不可识别的文件打开,直接跳转到下载页面。
                U.Dk.LE.OFT(fileinfo.UserFilesServerName, fileinfo.UserallDirectoryName, _userid, fileinfo.UserDirectoryID);
                break;
        }
    }
    else {//打印目录信息
        _content = $("#UD_SYWRZ", _diskinfo.pdiv)[0]; //在"指定的张三的网盘里面查找该id"
        _content.innerText = "";
        //得到当前打开的目录的id.
        _diskinfo[1][1] = fileinfo["UserDirectoryID"]; //设置当前打开目录的id.看全集变量US.Disk.Disks

        //如果当前打开目录的id存在,设置url重写。
        if (_diskinfo[1][1]) {
            U.D.G.UrlWrite(["disk", _diskinfo[1][0].UserName, _diskinfo[1][1]], _diskinfo[1][0].UserNickName + "的网盘");
        } //网盘

        //如果有子文件夹或者文件,则显示,否则,去数据库里面取数据.
        if (fileinfo.Child) { //已加载文件
            _diskinfo[1][5] = fileinfo.Child; //把加载到的信息保存到全局变量中。
            //打印数据,用计时器的原因是可以解决文件夹过多卡顿的问题。
            setTimeout(function () {
                U.Dk.VW.XWPDY(_diskinfo[1][5], _content);
            }, 0);
            //设置在空白地方右键单击,弹出菜单的功能。
            _rightClick = [U.Dk.RM.WPYJCD, [_content, null, null, null, userid]]; //右键调用的函数
            $(_content).addAttrArray({ "onmouseup": _rightClick, "onmousedown": _rightClick }); //添加右键属性。
            //头部导航打印
            _navarray = U.Dk.HP.GetAncestors(fileinfo, _diskinfo); //获取需要输出的导航信息,这里直接获取这个目录一条线上的祖先元素
            U.Dk.LL.SCDXWPDH(_navarray, $("#UD_SYWRYB", _diskinfo.pdiv)[0], userid); //打印出导航数据

            //设置网盘上传按钮点击事件。
            _head = $("#UD_SYWRT", _diskinfo.pdiv)[0]; //得到硬盘的头部区域
            _uploadel = $("div", _head); //根据头部区域得到导航区域
            U.Dk.UP.SCXWPOP(_uploadel[0], { "DS": true, "ID": "UD_SYWRTS" + (_diskinfo[2] ? "O" : "") }, userid); //给头部的上传按钮设置事件。
        }
        //去数据库取文件夹及文件信息,异步加载
        else {
            U.Dk.RE.GXWPCKXS(userid, fileinfo, _content);
        }
    }
    //设置文件及文件夹的修改时间,打开文件或者文件夹时,把打开文件的时间记录到数据库。以实现最近访问文件,最近访问文件夹的功能。fileinfo.filetype == 0 表示文件夹 fileinfo.filetype == 1表示文件
    if (fileinfo.UserDirectoryDeep > 1) {
        //发送到数据库做记录。
        if (fileinfo.filetype == 0) {
            U.A.Request(US.Auth, ["UpdateDirectoryInfo", UDE.UserDirectoryID, ""], U.M.apply());
        }
        else {
            U.A.Request(US.Auth, ["UpdateFileInfo", UDE.UserDirectoryID, ""], U.M.apply());
        }
        fileinfo["UserDirectoryModifyTime"] = U.MT.toTimeStamp(); //修改前台的时间
    }
}

//默认的域名弹框
U.Dk.LE.ApplyDns = function (UDID) {
    $("#U_Help").addAttrArray({ style: { display: "block" }, onclick: [[U.Dk.LE.ApplyDns, [UDID]]] });
}

//点击桌面的申请域名  
U.Dk.LE.ApplyDnsEnd = function (UDID) {
    if (!U.U.L.isLogin(3) && UDID) { U.UI.Confirm("是否申请域名生成站点", [U.Dk.LE.aDnsF, [UDID]]) }
}

//申请域名判断
U.Dk.LE.aDomain = function (userid, UGE) {
    if (!U.U.L.isLogin(3)) { //登录使用
        var _UDID = UGE[1][1], _UUID = US.userInfo.userid;
        if (UGE[4][_UDID].UserId == _UUID || userid == _UUID) { //本人ftp群文件夹允许
            var _UDE = U.Dk.DiskOperatingSwitch(userid);
            (_UDE[1][1]) && (U.UI.Confirm("是否申请域名生成站点", [U.Dk.LE.aDnsF, [_UDE[1][1]]])); //当前目录申请
        }
        else { U.Alert("非本人目录无法建立站点"); }
    }
}

//判断当前目录是否生成域名解析
U.Dk.LE.GetDns = function (UDID, UCB) {
    //U.A.Request(US.CD, [US.DB, "UseStudio_Disk", "UD_S_CountDns", US.userInfo.userid, UDID], U.Dk.LE.AsynGetDns, ["", UDID, UCB]);
    //  U.A.Request(US.Auth,"UseStudioDisk.CountDns", [US.userInfo.userid, UDID], U.Dk.LE.AsynGetDns, ["", UDID, UCB]);
}

///获取dns解析次数异步
//U.Dk.LE.AsynGetDns = function (r) {
//    var context = r.context,
//    _UDID = context[1],
//    _UCB = context[2];
//    r = r.value;
//    if (r[1]) { U.Alert("该目录已经生成了站点"); }
//    else if (_UCB) { _UCB(_UDID); } //else if (r[0] > 5) { U.Alert("已经在本地网盘挂载了5个域名"); }
//}

//弹出申请框
U.Dk.LE.aDnsF = function (UDID) {
    var _UDE, _UDTD, _UDMD, _UDSD;
    _UDTD = $$("div", { "className": "UD_Disk_A UC_TF", "onselectstart": "U.M.StopBubble();return true;" });
    $$("div", { "className": "UD_Disk_AT", "innerHTML": "生成网盘域名" }, _UDTD);
    _UDMD = $$("div", { "className": "UD_Disk_AC", "innerHTML": "等待域名生成..." }, _UDTD);
    _UDE = U.UI.Form({ draw: false, max: false, id: "UD_W_T", title: "申请域名", content: _UDTD, style: { width: "400px", height: "200px"} });
    U.Dk.LE.eaDomain(UDID, _UDMD);
}

//确定申请域名
U.Dk.LE.eaDomain = function (UDID, UDOD) {
    //U.A.Request(US.CD, [US.DB, "UseStudio_Disk", "UD_I_AddDns", US.userInfo.userid, UDID, 0], U.Dk.LE.AsyneaDomain, ["", UDID, UDOD]);

    //U.A.Request(US.Auth,"UseStudioDisk.AddDns", [US.userInfo.userid, UDID], U.Dk.LE.AsyneaDomain, ["", UDID, UDOD]);
}

//申请域名异步
//U.Dk.LE.AsyneaDomain = function (r) {
//    var context = r.context, _UDID = context[1], _UDOD = context[2]; r = r.value;
//    if (r[0]) {
//        $(_UDOD).addAttrArray({ "innerHTML": "http://" + r[0].UserDomain + ".1473.cn", style: { cursor: "pointer" }, title: "点击跳转", "onclick": U.M.apply(null, "window.open('" + "http://" + r[0].UserDomain + ".1473.cn" + "')") });
//    }
//    else { U.Alert("你建站超过指定次数请您重新建立。"); }
//}

//#endregion

//#region 其它网盘资料使用

//!------------------------------此函数未被调用。。如果确实没有,直接删除-----------
//(其它网盘文件[搜索])点击执行事件
U.Dk.LE.DXWPDYQT = function (UDE, UDOD) {
    var _UAE,
    _UGE = US.Disk.Disks;
    (!_UGE[US.NU]) && (_UGE[US.NU] = [[]]);
    _UGE = _UGE[US.NU][0];
    if (UDE.filetype) {
        U.Dk.LE.OpenFileDirectory(UDE, US.NU);
    }
    else {//获取单个文件夹的信息
        _UAE = _$(_UGE).Select({ "UserDirectoryID": UDE.UserDirectoryID })[0];
        if (_UAE) {
            //#error 这里有问题 到时候要改掉
            U.Dk.LE.RecordNav([[U.Dk.LE.OpenFileDirectory, [_$(_UGE).Select({ "UserDirectoryParentID": UDE.UserDirectoryID }), _$(_UGE).RecurD(UDE, { "UserDirectoryID": "" }, "UserDirectoryParentID"), US.NU]]]);
        } //打印文件
        else {//获取指定文件夹文件
            _UGE.push(UDE);
            U.A.Request(US.CD, [US.DB, "UseStudio_Disk", "GetChildsByDirectoryId", UDE.UserId, UDE.UserDirectoryID, US.NU], U.Dk.LE.AsynDXWPDYQT, ["", UDE, UDOD]);
            //    U.A.Request(US.Auth,"UseStudioDisk.GetChildsByDirectoryId", [UDE.UserId, UDE.UserDirectoryID, US.NU], U.Dk.LE.AsynDXWPDYQT, ["", UDE, UDOD]);
        }
    }
}

//其它网盘文件夹的信息
U.Dk.LE.AsynDXWPDYQT = function (r) {
    var context = r.context,
    _UDE = context[1],
    _UDOD = context[2];
    r = r.value;
    U.Ut.AddObj(r, { "UserId": _UDE.UserId, "UserThumbnailImageHead": _UDE.UserThumbnailImageHead, "UserNickName": _UDE.UserNickName }); //设定指定的值
    _UDOD.innerText = "";
    US.Disk.Disks[US.NU][0] = US.Disk.Disks[US.NU][0].concat(r);
    U.Dk.LE.DXWPDYQT(_UDE, _UDOD);
}

//#endregion

//#region 指定类型点击事件


/*
在文件夹中单击图片时,把文件夹下所有图片文件选取出来。用户所有的硬盘数据保存在树目录变量US.Disk.UserDisk中。
参数1:文件所在的目录id
参数2:目录对象,数据库目录表一条数据。
返回值:图片二维数组。
*/
U.Dk.LE.OIMG = function (fileinfo) {
    var _diskinfo = US.Disk.UserDisk; //获取当前用户网盘信息
    var _files = _diskinfo[4][fileinfo.UserDirectoryParentID].Child; //获取当前用户打开图片目录的文件信息
    var _poto = _$(_files).Like({ "UserDirectoryExtendType": US.Disk.ApplicationTypes.image.types.join(",") }); //选取所有的图片图片
    var _i = _poto.objIndexOf({ "UserDirectoryID": fileinfo.UserDirectoryID }); //获取文件所在的图片的第几个
    return [_poto, _i]; //返回
}

//点击视屏处理
U.Dk.LE.OV = function (UDE) {
    var _UTP = UDE.UserDirectoryExtendType || UDE.UserFilesExtendName,
    _USN = UDE.UserFilesServerName,
    _UTF = U.M.isPlay(_UTP);
    if (_UTP == "video") { window.open(UDE.UserFilesServerName); }
    else {
        if (_UTF) {
            window.open("/userpages/video.htm?url=" + UDE["UserFilesServerName"]);
        }
        else if (_UTF === 0) {
            U.Alert("该格式无法播放");
        }
        else {
            U.Alert("浏览器版本太低。");
        }
    }
}

//点击文件打开处理
U.Dk.LE.OFT = function (USN, UN, userid, UFID, UTF) {
    var _UTF = US.userInfo.userid == userid,
    _UMT = USN.split(".")[1],
    _UDOD = event ? event.srcElement : null;
    U.Alert("正在努力的打开中,请稍后"); window.open("/userpages/U_OF.aspx?FildID=" + UFID); //页面打开
    //  window.open("/userpages/U_OF.aspx?fileservername=" + USN + "&filename=" + UN + "&UserId=" + US.userInfo.userid + "&FildID=" + UFID + "&usrd=" + Math.random()); //window.open("http://disk.1473.cn/" + UFID + "/" + (UTF || ""));
}

//异步查看
U.Dk.LE.AsynOFT = function (r) {
    var context = r.context,
    _USN = context[1],
    _UN = context[2],
    _userid = context[3],
    _UFID = context[4],
    _UDOD = context[5];
    r = r.value;
    if (r) {
        U.Dk.LE.OFT(_USN, _UN, _userid, _UFID, true);
    }
    else {
        U.Dk.RE.WPXZWJZJO(_UFID, "file");
    }
}

//保存到数据
U.Dk.LE.USOS = function (UDID, UTH, UFT, UCB, UTF, UPID, UIN) {
    var _UDPD, _UTF,
    _UGE = US.Disk.UserDisk,
    _userid = _UGE[1][2],
    _UYID = US.userInfo.userid,
    _UDE = U.Ut.isString(UDID) ? (_UGE[4][UDID] ? _UGE[4][UDID] : UDID) : UDID;
    UDID = _UDE ? _UDE.UserDirectoryID : UDID;
    if (_UDE.UserFilesID != undefined) { UDID = _UDE.UserFilesID; _UDE.UserFilesServerName = "" }
    if (U.MS.Guid.test(UDID) && _UDE && (_UYID == _userid || _UDE.UserId == _UYID || _UDE.GroupID == _UDE.UserId)) { //直接保存文件
        (UIN = UIN || "") && (UIN = UIN.replaceHtmlSign() + (_UDE.filetype ? "." + _UDE.UserDirectoryExtendType : "")); // _$(_UGE[4]).Select({ "UserDirectoryID": UDID }, null, 1)[0]; 
        if (_userid == _UGE[1][0].UserId) {
            if (_UDE.UsOffice != UTH) {
                parent.U.A.Request(US.Auth, ["SaveFileContent", UDID, UTH, UIN], parent.U.Dk.LE.AsynUSOS, ["", UDID, UTH, _UDE, UIN]);
                U.Alert("数据同步中..");
            }
        }
        else { U.Alert("拒绝访问"); }
        (UCB) && (U.M.apply(this, UCB)());
    }
    else {
        if (!U.Dk.RE.QXWJPD(_UYID, "txt", UPID)) {
            _UGE[1][1] = UPID = (userid == _userid) ? US.DG : US.FG;
        }; //选择目录
        if (UIN) {
            return U.Dk.RE.AF(UFT, UIN, U.M.apply(this, UCB), US.userInfo.userid, true);
        } //直接新建
        else {
            _UGE = US.Disk.UserDisk;
            _UTF = $(_UGE.pdiv).Parent({ usform: "true" }).style.display == "none";
            _UDPD = U.D.DT.YYDK("Disk", { "userid": _userid, "directoryid": UDID }); UCB = UCB || []; //指定的目录保存
            (_UTF) && (UCB.push[U.D.CloseWindow, [_UDPD]]);
            U.Dk.RE.CMB("txt", U.M.apply(this, UCB), _UDPD, _userid, true); //新建文件保存
        }
    }
}

//新建文件后保存
U.Dk.LE.NUSOS = function (UDST, UFT, UGE, UCT, UREQ) {
    var _UFID = UCT[1]["UserDirectoryID"];
    UGE = UGE || window.frames["US_ExcelFrame"].U.Excel.SY;
    U.Dk.LE.USOS(_UFID, UDST); UGE["ID"] = _UFID;  //保存数据   //Word变量保存
}

//异步保存
U.Dk.LE.AsynUSOS = function (r) {
    var _UDE,
    context = r.context,
    _UFID = context[1],
    _UST = context[2],
    _UDE = context[3],
    _USN = context[4];
    r = r.value;
    if (r) {
        _$(_UDE).Change({ "UsOffice": _UST, "": "", "UserDirectoryModifyTime": U.MT.toTimeStamp() });
        (_USN) && (U.Dk.RE.AsynMRN({ value: true, context: ["", _UDE, _USN] })); U.Alert("修改成功..");
    } //修改保存值
    else {
        U.Alert("磁盘空间已满,无法修改内容");
    }
}

//获取音乐文件和目录
U.Dk.LE.GM = function (UDE) {
    var i, _UCE,
    _UME = [],
    _UGE = US.Disk.UserDisk;
    (!UDE.UserDirectoryID) && (UDE = _UGE[4][UDE]);
    UDE = [UDE];
    for (i = 0; i < UDE.length; i++) {
        _UCE = _UGE[4][UDE[i].UserDirectoryID].Child;
        _UME.push([UDE[i], _$(_UCE).Select({ "filetype": 0 }), _$(_UCE).Select({ "UserDirectoryExtendType": "mp3" })]);
    }
    return _UME;
}

//#endregion

//#endregion