/*
上传下载处理类
*/
Namespace.register("U.UP");

//#region 变量


//#region
U.UP.FTF = {}; //上传使用集合 //上传使用变量集合 每一个上传生成的上传按钮都是以guid的形式记录下来

U.UP.FTF.EL; //当前上传的元素

//U.UP.FTF.FT = {}; 

/*
U.UP.FTF.WH = 0;
U.UP.FTF.TF = false;
U.UP.FTF.GS = "*";
*/

//#endregion

//#region input 上传

/**
* html input上传
*
* @param  {array} 所有需要上传的input
* @param  {function} 上传成功回调函数
* @param  {array} 回调参数
* @param  {string} 回调调用地址 允许带参数 
----------http://disk.1473.cn/upload.ashx?aa=aa
* @param  {boolean} 是否单独上传
* @param {object} 上传的格式
--------- "multipart/form-data"
*/
U.UP.uploading = function (UDE, UCB, UCT, UAC, UTF, UTP) { //生成传输的iframe
    if (UDE.length > 0) {
        var _UDBD = document.body,
        _UFID = Guid.guidNoDash(); //设置随机的name
        //已加载一个可处理的iframe 防止页面通过上传刷新页面
        U.M.IFO($$("iframe", { "id": _UFID, "name": _UFID, "width": 0, "height": 0, "style": { "display": "none" },
            "frameBorder": 0
        }, _UDBD), "", [[U.UP.uploadingA, [UDE, UCB, UCT, UAC, UTF, _UFID, UTP]]]); //生成可访问的iframe
    }
}

/**
* html input上传
*
* @param  {array} 所有需要上传的input
* @param  {function} 上传成功回调函数
* @param  {array} 回调参数
* @param  {string} 回调调用地址 允许带参数 
----------http://disk.1473.cn/upload.ashx?aa=aa
* @param  {boolean} 是否单独上传
* @param {object} 上传的格式
--------- "multipart/form-data"
*/
U.UP.uploadingA = function (UDE, UCB, UCT, UAC, UTF, UFID, UTP) {
    this.contentWindow.name = UFID; //跨域页面必须设置name
    UDE = U.Ut.isArray(UDE) ? UDE : Array.prototype.slice.apply(UDE); //上传input集
    UAC = UAC + (UAC.indexOf("?") > -1 ? "" : "?") + ((US && US.userInfo && US.userInfo.userid) || US.userInfo.userid ? "&UserId=" + (US.userInfo.userid || US.userInfo.userid) : ""); //上传地址
    var i = 0,
    _UL = UDE.length, //上传input长度
    _UCE = [],
    _UCB = UCB,
    _UDBD = document.body,
    _URE = { "UpObj": UDE, "context": UCT, "value": "" }, //回调参数设置
    _UDFD = $$("form", { "action": UAC, "target": UFID, "encoding": UTP ? UTP : "multipart/form-data", //上传的form
        "enctype": UTP ? UTP : "multipart/form-data", "method": "post", "name": "loading", "style": { "display": "none" }
    }, _UDBD);

    //设置是否分段上传
    (UTF) && (_UL = 1, _URE["UpObj"] = UDE.splice(0, 1), _UCB = U.M.apply(this, [[UCB, [_URE]], [U.UP.uploading, [UDE, UCB, UCT, UAC, UTF]]])); UDE = _URE["UpObj"];

    //添加上传name
    for (i; i < _UL; i++) {
        UDE[i].name = UDE[i].name || UDE[i].id || Guid.newGuid();
        _UCE.push($(UDE[i]).replaceC($$("div"))[0]);
        _UDFD.appendChild(UDE[i]);
    }
    //上传开始
    _UDFD.submit();
    this.complete = "";
    //上传异步处理
    U.MD.IframeLoad(this, [[U.UP.uploadingAsynF, [this, _UCB, _URE]]]);
    $(_UDFD).remove();
    //清空上传至
    for (i = 0; i < _UL; i++) {
        $(_UCE[i]).replaceC(UDE[i]);
    };
    //if (document.selection) { UDE[i].select(); document.selection.clear(); } else { UDE[i].outerHTML += ""; UDE[i].value = ""; } //清空内容
}

/**
* 上传结束异步
*
* @param  {array} 所有需要上传的input
* @param  {function} 上传成功回调函数
* @param  {object} 回调参数
----------[UpObj] 上传按钮元素
----------[context] 上传参数
----------[value] 上传返回值
*/
U.UP.uploadingAsynF = function (UDOD, UCB, UDE) {
    try {
        (!browser.msie) && (UDOD.src = "about:blank");
        setTimeout(function () {
            try { var _UTH = UDOD.contentWindow.document.body.innerHTML; } catch (e) { }
            try { _UTH = _UTH || (UDOD.contentWindow.name != UDOD.id ? UDOD.contentWindow.name : _UTH); } catch (e) { }
            //上传失败
            if (_UTH == null) { U.Alert("服务器处理繁忙,上传失败"); }
            //获取值转化成json对象
            try { UDE.value = eval("0,(" + _UTH + ")"); }
            catch (e) { UDE.value = _UTH; } //返回的值
            $(UDOD).remove();
            //回调
            if (UCB) { UCB(UDE); }
        }, 0);
    }
    catch (e) { }
}

//#endregion

//#region flash上传处理

/**
* 添加Flash上传按钮按钮
*
* @param  {array} 所有需要上传的input
* @param  {function} 上传成功回调函数
* @param  {object} 回调参数
* @return  {object} 回调参数
*/
U.UP.AddFAN = function (UDOD, UDID, UWH) {
    UDID = UDID || Guid.newGuid(); //var _UDTD;
    if ($("object", UDOD).length == 0) {//添加Flash按钮
        _UDTD = $$("div", { "innerHTML": '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" class="UD_filePrew" width="' + UWH["width"] + '" height="' + UWH["height"] + '" id="' + UDID + '" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"><param name="movie" value="/img/upload.swf" /><param name="menu" value="false" /><param name="wmode" value="Opaque" /><param name="quality" value="high" /><param name="bgcolor" value="ffffff" /><param name="allowScriptAccess" value="always" /><embed src="/img/upload.swf" quality="high" bgcolor="ffffff" width="' + UWH["width"] + '" height="' + UWH["height"] + '" name="' + UDID + '" align="middle" play="true" wmode="transparent" loop="false" quality="high" style="z-index: 0;" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"></embed></object>' });
        UDOD.insertBefore(_UDTD.firstChild, UDOD.firstChild);
    }

    U.UP.FTF[UDID] = {}; //设置初始化

    U.UP.FTF.EL = $("*" + UDID, UDOD).addAttrArray({ "width": UWH["width"] ? UWH["width"] : 1,
        "height": UWH["height"] ? UWH["height"] : 1, "style": { "display": "block" }
    })[0];

    U.UP.FTF[UDID]["EL"] = U.UP.FTF.EL;

    return U.UP.FTF.EL;

    /*
    //返回生成的flash上传按钮
    return (U.UP.FTF["EL"] = $("*" + UDID, UDOD).addAttrArray({ "width": UWH["width"] ? UWH["width"] : 1,
    "height": UWH["height"] ? UWH["height"] : 1, "style": { "display": "block" }
    })[0]);  //设置Flash大小
    */

}

/**
* 添加Flash传值
*
* @param  {object} 设置的flash上传插件的长宽
----------[width] 长
----------[height] 宽
* @param  {function} 上传成功回调函数
* @param  {string} 回调参数
* @return  {object} 回调参数
*/
U.UP.FAFZ = function (UWH, UTE, UDE) {
    var _UCE = U.UP.FTF,
    _UDOD = _UCE["EL"],
    _UDID = _UDOD.id || _UDOD.name; //flash 插件元素

    _UCE[_UDID].WH = UWH; //大小
    _UCE[_UDID].FT = UTE; //大小
    _UCE[_UDID].GS = UDE || "*"; //大小

    //设置舞台
    if (_UDOD && _UDOD.SetStage) {
        if (!U.UP.FOnload()) { //加载flash
            return false;
        }
        return true;
    }
    return false;

    /*
    _UCE["WH"] = UWH; //大小
    _UCE["FT"] = UTE; //回调函数
    _UCE["GS"] = UDE || "*"; //上传类型
    */
}


//#region

//Flash上传初始化
U.UP.FOnload = function () {
    try {
        var _UDE = U.UP.FTF;
        _UDE["EL"].SetStage(_UDE["WH"], _UDE["FT"], _UDE["GS"] || "*"); //加载插件初始化
        return true;
    }
    catch (e) {
        return false;
    }
}

//上传的错误提示
U.UP.FLEX = function (err) {
    U.Alert(err);
    U.M.Console(err);
}

//添加上传文件 上传文件的显示
U.UP.FLAdd = function (UDE, UL) {
    var _UDOD = U.UP.FTF.EL,
    _UDID = _UDOD.ID || _UDOD.name;
    if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["ADD"]) {
        U.UP.FTF[_UDID].FT["ADD"](UDE, UL);
    }
}


//上传所有文件完毕
U.UP.FLACP = function (UFL) {
    var _UDOD = U.UP.FTF.EL,
    _UDID = _UDOD.ID || _UDOD.name;
    if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["AFCP"]) {
        U.UP.FTF[_UDID].FT["AFCP"](UFL);
    }
}

//上传的进度条
U.UP.FLJD = function (UDE, FID) {
    var _UDOD = U.UP.FTF.EL,
    _UDID = _UDOD.ID || _UDOD.name;

    if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["JDT"]) {
        U.UP.FTF[_UDID].FT["JDT"](UDE, FID);
    }
}

//上传文件成功同时服务端返回了数据
U.UP.FSLCP = function (UDAT, FID) {
    var _UDOD = U.UP.FTF.EL,
    _UDID = _UDOD.ID || _UDOD.name;

    if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["FCP"]) {
        U.UP.FTF[_UDID].FT["FCP"](UDAT, FID);
    }
}

//上传文件判断是否存在
U.UP.IsFUp = function (UWJL, FID) {
    var _UDOD = U.UP.FTF.EL,
    _UDID = _UDOD.ID || _UDOD.name;

    if (U.UP.FTF[_UDID] && U.UP.FTF[_UDID].FT && U.UP.FTF[_UDID].FT["FUP"]) {
        U.UP.FTF[_UDID].FT["FUP"](UWJL, FID);
    }
}

//上传单个文件完毕
U.UP.FLCP = function (data) {
    U.Alert("等待服务器的响应...");
}

//#endregion

//#endregion

//#region 下载

/**
* 文件下载区域
*
* @param  {string} 上传成功回调函数
* @param  {number} 上传成功回调函数
* @param  {function} 回调参数
*/
U.UP.FileDL = function (UFN, USN, UTF) {
    var _userid = US.userInfo.userid,
    _UIE = _userid ? _userid : U.M.GetCookie("usestudiosso", "userid") || [];
    if (_userid || _UIE[0]) { //用户登录处理
        (!_userid) && (US.userInfo.userid = _UIE[0]);
        U.UP.uploading([$$("input", { "type": "text", "value": UFN, "name": "filename" }), $$("input", { "type": "text", "value": USN, "name": "filepath" })], //调用访问传参接口
        null, null, "http://main.1473.cn/USupfile.ashx?iframename=" + (UTF || "UploadFile"), false);
    }
    else { //未登录用户处理下载
        if (window.location.href.indexOf("www.1473.cn")) { //在1473
            try { //可以登录
                U.U.L.DLTC(3);
            }
            catch (e) {
                U.Alert("请在云端登录");
            }
        }
        else {
            U.UI.Confirm("是否跳转到云端进行下载", function () {
                window.location.href = "";
            })
        }
    }
}

/**
* 文件指定的格式下载
*
* @param  {string} 下载文件的ID
* @param  {string} 下载文件的格式
*/
U.UP.FileGS = function (UFID, UTP) {
    U.UP.uploading([$$("input", { "type": "text", "value": UFID, "name": "id" }),
    $$("input", { "type": "text", "value": UTP, "name": "type" })], null, null, "http://main.1473.cn/USupfile.ashx?iframename=DownType", false);
}

//#endregion

//#region 帮助处理

/**
* 传入类型返回类型中文名与类型图片所在坐标
*
* @param  {string} 文件类型
*/
U.UP.FFT = function (UTF) {
    UTF = UTF.toLowerCase();
    var i, _UKE,

    _UDE = ["folder", "folderencrypt", "png,jpg,bmp,gif", "doc,docx,uw", "xls,xlsx,ue", "ppt,pptx", "txt", "wmv,video", "mp3", "rar,zip"], //具有系统图标的文件类型

    _UAE = [["文件夹", "-6px -41px", "-169px -5px"], ["文件夹", "-659px -42px", "-736px -77px"], //文件类型对应
    ["图片文件", "-593px -402px", "-61px -5px"], ["Word文档", "-155px -41px", "-511px -198px", "-477px -10px", "-65px -420px"],
    ["Excel文档", "-297px -41px", "-584px -198px;", "-325px -10px", "-290px -50px", "-120px -420px"],
    ["PPT幻灯片", "-227px -41px", "-548px -198px", "-220px -420px"], ["Txt文本文档", "-84px -41px", "-477px -198px", "-170px -420px"],
    ["视频文件", "-503px -41px", "-760px -42px"], ["Mp3音乐文件", "-438px -41px", "-734px -43px", "-15px -420px", "-175px -10px"],
    ["Rar压缩文件", "-368px -41px", "-619px -199px", "-270px -420px"]];

    //根据类型筛选指定的
    for (i = 0; i < _UDE.length; i++) {
        if (_UDE[i].split(",").indexOf(UTF) > -1) { _UKE = _UAE[i]; break; }
    };

    //默认都有系统文件的图标
    (!_UKE) && (_UKE = ["系统文件", "-575px -41px", "-478px -230px", "-320px -420px"]);

    //位置定位
    for (i = 1; i < _UKE.length; i++) {
        _UKE[i] = "background-position:" + _UKE[i] + ";"
    };
    return _UKE;
}

/**
* 设置文件下载
*
* @param  {string} 上传成功回调函数
* @param  {string} 上传成功回调函数
*/
U.UP.Down = function (UN, UCT) {
    if ("createElementNS" in document) { //html5 文件另存为
        (!UCT) && (UCT = document.documentElement.outerHTML);
        var _UDAD,
        _UWE = window.URL || window.webkitURL || window,
        _UDE = new Blob[UCT];
        _UDAD = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
        _UDAD.href = _UWE.createObjectURL(_UDE);
        _UDAD.download = UN; U.M.IEVENT(_UDAD, "click");
    }
    else { //IE文件另存为
        if (UCT) {
            var _UDOD = $$("iframe", { "display": "none" });
            U.M.IFO(_UDOD, UCT, function () { _UDOD.contextWindow.document.execCommand("SaveAs"); });
        }
        else { document.execCommand("SaveAs"); } //当前文档保存
    }
}



/**
* 获取上传的名字和类型
*
* @param  {string} 文件名+类型
* @return {array} 
----------[0] 文件名
----------[1] 文件类型 
*/
U.UP.GetUpName = function (UEHL) {
    UEHL = (UEHL.value || UEHL).toLocaleLowerCase();
    var _UI = UEHL.lastIndexOf(".");
    return [UEHL.substr(UEHL.lastIndexOf('\\') + 1, _UI), UEHL.substr(_UI + 1)]; //文件名
}

/**
* 判断是否为图片类型,UFN为文件名,比如"aaaa.jpg"
*
* @param  {string} 文件名
* @param  {boolean} 是否为图片
*/
U.UP.IsImg = function (UFN) {
    var _UTF = false,
    _UE = U.UP.GetUpName(UFN)[1].toLowerCase(), //获取文件类型 同时小写
    _UIF = "jpg,gif,png,bmp,jpeg,JPG,GIF,BMP,PNG,JPEG"; //获取图片的所有类型
    (_UE && _UIF.indexOf(_UE) > -1) && (_UTF = true); //判断是否是图片
    return _UTF;
}

/**
* 判断大小
*
* @param  {number} 数字1
* @param  {number} 数字2
* @param  {boolean} 返回数字1是否大于数字2
*/
U.UP.IsSizeS = function (UFO, UFT) {
    return (UFO > UFT);
}

/**
* 计算文件大小
*
* @param  {string} 文件大小
* @param  {string} 最大文件类型
*/
U.UP.FileSize = function (UIS) {
    UIS = UIS || 0;

    var _UDW = (UIS + "").replace(U.MS.Num, ""),
    _UDE = ["B", "KB", "M", "G", "TB"], //文件大小处理
    i = _UDE.indexOf(_UDW);
    //筛选到最大单位处理
    i = i == -1 ? 0 : i; UIS = parseInt(UIS);
    while (UIS > 1024) {
        UIS /= 1024; i++;
    };
    //保留两个小数点
    return UIS.toFixed(2) + _UDE[i];
}

/**
* 获取最小单位的大小
*
* @param  {string} 上传成功回调函数
*/
U.UP.GetSfileS = function (UIS) {
    var i = 0, _UDE = ["B", "KB", "M", "G", "TB"], //指定的文件类型
    _UDW = (UIS + "").replace(U.MS.Num, ""), //获取类型
    _UIE = _UDE.indexOf(_UDW, null, true); //单位位置
    return parseFloat(UIS) * Math.pow(1024, _UIE); //获取最大单位
}

//#endregion