//运行程序的js，主要功能设计编制好的代码进行运行。

Namespace.register("U.CD.R");
//注册运行js

U.CD.R.CErrF = null;
//当程序发生错误时改变代码窗口响应行的颜色。
U.CD.R.CErrFBT = null;
//错误时弹出错误帮助div

//U.CD.U.CUser.CTab 保存了上一次的Tab栏数据

//根据文件id装载文件,Tab窗口等。右键菜单单击文件时用到。文件id作为树节点id，需要修改为加UCD_RT前缀，表示此项目右键菜单。
U.CD.R.LoadFC = function (node, language) {

    //如果是图片类型，则直接显示图片
    if (U.UP.IsImg(node.Name)) {
        var _f = US.fs + node.Content.split("|")[1]
          , _e = US.fs + node.Content.split("|")[0];
        //拆分出缩略图和原图。
        //var _if = $("#UCD_CT_SM_IF")[0].contentWindow.document.body; //U.Img.Create([{ 'Thm': _e, 'Img': _f }]);
        //var _img = $$("img", { "src": _f, "onerror": [U.M.ImgError, (["this", 2])] }); _if.innerHTML = ""; _if.appendChild(_img);
        //$$("div", { "onselectstart": function () { return true; }, "innerHTML": "图片路径：" + _f + "</br>缩略图路径：" + _e }, _if);
        //var s = "<img src='"+ _f +"' onerror=''>";
        var d = $$("div", {
            "style": {
                "cssText": " width:100%; height:100%;"
            }
        });
        $$("img", {
            "src": _e,
            "style": {
                "cssText": "margin:10px; max-width:500px; max-height:350px; cursor:pointer; "
            },
            "onclick": [[U.M.StopBubble], [U.Img.Create, ([{
                "Thm": _e,
                "Img": _f
            }])]],
            "onerror": [U.M.ImgError, (["this", 2])]
        }, d);
        $$("div", {
            className: "UC_TF",
            onselectstart: "U.M.StopBubble();return true;",
            "innerHTML": "文件服务器名字为:" + _f
        }, d);
        U.UI.SUForms(d, "图片显示窗口", "UCD_R_ImgDis", "color:red;", 500, 400);
        return;
    }
    //如果node.Conteng!="" 或者node.Content只有1行，或者node.Contet.split("!")是2个。则表明是上传的文件，弹出提示，非图片文件不能展示，请持续关注后续版本。
    if (node.Content.split("|").length == 2 && node.Content.replace(/\r\n/g, '\n').split('\n').length == 1) {
        alert("未知文件类型，非图片文件不能展示，请持续关注后续版本");
        return;
    }
    if (!U.CD.ExistTab(node)) {
        U.CD.R.CreateTab(node);
    }
    //如果不存在Tab栏中，则创建上部Tab栏。

    //给评论按钮赋值
    $("#UCD_CT_IF_PL")[0].onclick = function () {
        U.CD.OU.Reply(node.ID);
    }

}
//------------------------------------------------------------------------------上部TAb切换区域-------------------------------------------------------------
//关闭一个编程窗口？
U.CD.CloseEdit = function (UFUL, UFLI, UTREE) {
    var _l = UFUL.getElementsByTagName("li");
    //如果移除的是当前节点的值，把第一个节点置为当前节点，并且刷新数据，如果移除的节点是第一个，并且是当前节点，则把第二个节点置为第一个。，如果全部移除完毕，则清空数据？
    if (UFLI == U.CD.U.CUser.CTab) {
        //如果只有1个节点，则把Tab置空，把内容置空，写得比较累赘，一会再修改。
        if (_l.length == 1) {
            U.CD.R.ClearTab();
            $("#UCD_CT_IF_PL")[0].onclick = function () {
                U.CD.OU.Reply(U.CD.BRPID);
            }
            //给评论按钮赋值
            return;
        }
        //如果移除的节点是第一个，则把第二个节点置为第一个。否则，把第一个节点置为当前节点。
        if (UFLI == _l[0]) {
            U.CD.ExistTab(_l[1].Data);
        } else {
            U.CD.ExistTab(_l[0].Data);
        }
    }
    ; UFUL.removeChild(UFLI);
    //在ul中移除该节点。
}
//清空Tab切换栏。会多处调用，独立为一个函数
U.CD.R.ClearTab = function () {
    if (U.CD.U.CUser)
        U.CD.U.CUser.CTab = null;
    $("#UCD_CT_Code_CT")[0].innerHTML = "";
    U.CD.CD.Init();
    //U.CD.CD.ExecIF($("#UCD_CT_Code_CT")[0]);
    $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0].innerHTML = "";
}
//判断是否已经存在一个Tab标签，如果存在，则直接切换。？切换上部选项卡时没有保存以前选项卡的内容。
U.CD.ExistTab = function (node) {
    var _value = false;
    //初始值，用于判断是否存在该选项卡。存在选项卡，置为true。
    var _ul = $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0];
    //获取选项卡ul标签。
    var _l = _ul.getElementsByTagName("li");
    //获取ul下面所有li标签。
    for (var i = 0; i < _l.length; i++) {
        //如果找到，返回li节点，数据保存在li节点中的Data属性中。,晕了，一直以名字来匹配，改用id
        if (_l[i].id == "Tab" + node.ID) {
            //_l[i].style.border = "2px solid green"; _value = true; //改变选择Tab的样式。
            //            _l[i].style.backgroundColor = "white";
            //            _l[i].style.borderColor = "#000";
            //            _l[i].style.borderBottomColor = "white";
            //            _l[i].style.marginTop = "4px";
            _l[i].className += " UCD_CT_Top_CR";
            _value = true;
            //改变选择Tab的样式。
            //切换Tab时，需要保存上一个Tab的结果,和冒泡排序交换值差不多。
            if (U.CD.U.CUser.CTab)
                _l["Tab" + U.CD.U.CUser.CTab.Data.ID].Data.Content = $("#UCD_CT_Code_CT")[0].innerHTML;
            //保存上一次在代码窗口编辑的值到上一个Tab中。
            U.CD.R.FlushCodePage(_l[i].Data);
            //给代码窗口赋予值。
            U.CD.U.CUser.CTab = _l[i];
            //把切换到的li设置为当前。
        } else {
            _l[i].className = "UCD_CT_Top_Tab_Li";
        }
    }
    return _value;
}
//创建代码区域的Tab栏切换效果。
U.CD.R.CreateTab = function (node) {

    //如果切换选项卡超过了7条数据，则删除第一条。这逻辑不对，应该是隐藏前面的，并做一个按钮能够浏览所有的。
    var _ul = $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0];
    U.CD.R.MoreTab(_ul);
    //超过7个节点的处理，
    //向后面追加新的Tab栏。
    var _UFUL = $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0];
    //获取Tab栏
    //向Tab栏追加一个标签。
    var _UFLI = $$("li", {
        "class": "UCD_CT_Top_Tab_Li UCD_CT_Top_CR",
        "id": "Tab" + node.ID,
        "onclick": [U.CD.R.LoadFC, ([node])]
    }, _UFUL);
    $$("span", {
        "innerHTML": node.Name,
        "title": node.Name
    }, _UFLI);
    //$$("a", { "className": "UCD_RT_TreeIcon UCD_CT_Top_Tab_Close", "title": "close", "onmouseover": [[alert, (["123"])]], "onclick": [[U.M.StopBubble], [U.CD.CloseEdit, ([_UFUL, _UFLI, node])]] }, _UFLI);
    $$("div", {
        "className": "UCD_TT_T_X",
        "style": {
            "margin": "2px -12px"
        },
        "onclick": [[U.M.StopBubble], [U.CD.CloseEdit, ([_UFUL, _UFLI, node])]]
    }, _UFLI);
    //给当前正在使用的Tab赋内容。以保存每个代码视图。代码不多，但毕竟难懂。
    if (U.CD.U.CUser.CTab)
        _ul.getElementsByTagName("li")["Tab" + U.CD.U.CUser.CTab.Data.ID].Data.Content = $("#UCD_CT_Code_CT")[0].innerHTML;
    //保存代码区域代码到。
    //node.Content = unescape(node.Content); //解码
    _UFLI.Data = node;
    //保存数据到新属性中。
    U.CD.U.CUser.CTab = _UFLI;
    //把新创建的Tab加入当前。
    U.CD.R.FlushCodePage(_UFLI.Data);
    //刷新代码和视图页面。
    //最好能做到Tab和Code和视图关联。暂时不做这个
}
//超过7个节点单独一个函数，以后可能还会完善。
U.CD.R.MoreTab = function (_ul) {
    var n = Math.floor($("#UCD_CT")[0].clientWidth / 160);
    //根据用户的屏幕分辨率设置最大打开文件数量,li的宽度为140px
    if (_ul.getElementsByTagName("li").length >= n) {
        //当窗口数量大于7时，此时需要移除最前面的节点，如果最前面的节点刚好是当前节点，则把当前节点置为第二个。
        var _c = _ul.getElementsByTagName("li")[0];
        if (_c == U.CD.U.CUser.CTab) {
            U.CD.U.CUser.CTab = _ul.getElementsByTagName("li")[1];
        }
        _ul.removeChild(_c);
    }
}

//点击右边用户树目录时，创建代码页面。
U.CD.R.FlushCodePage = function (node) {
    //如果代码窗口值为""。则赋予RS.htm文件内容，以免报错。
    if (node.Content == "")
        U.CD.CD.Init(node);
        //调用根据结果窗口刷新代码区域函数，获得初始值。有问题，不是初始化，一会再改。
    else
        U.CD.CD.DisNode(node);
    //给代码窗口赋值,只能通过给代码窗口赋值，然后获取代码窗口innerText，才能最简单的得到给iframe打印的值，否则会带html标签到iframe。
}

//------------------------------------------------------保存功能，由于会打开多个文件，所以onclick的值会不停变化。---------------------------------------------------
U.CD.R.Save = function (node) {
    $("#UCD_TOP_L_BC")[0].onclick = function () {
        var _c = U.CD.U.IsUSelf();
        //获取用户登录Cookie.  _c.userid _c.username _c.Loginid
        if (!_c) {
            U.CD.U.LoginApply();
            return;
        }
        //如果未登录，弹出登录窗口。
        //如果没有传递节点名字，需要引导用户创建项目。创建文件
        if (!node) {
            //如果树节点中有项目，则建立在当前选中项目下面（这样太复杂），建立在第一个项目下面，如果没有项目，则提示用户将新建项目，并新建一个文件。这样太复杂了。
            var _p = U.CD.U.CUser.TNode[0].TNode, _current = null, _nr;
            _current = U.CD.U.CUser.CurrentNode
            //当前项目节点
            //for (var i = 0; i < _p.length; i++) { if (!_p[i].IsDelete) { _current = _p[i]; break; } } //找到第一个项目
            if (_current) {
                //此处还需要进一步修正,能够不用innerHTML最好。
                _nr = "<div style=' color:red;text-align:left; margin-left:10px; height:25px;'>该文件已经自动选取了项目!</div>";
                _nr += "<div style='text-align:left;margin-left:30px; height:16px; '> 确认将建立新的index.htm文件在'<span style=' color:blue;'>" + _current.Name + "'</span>项目中. </div>";
                _nr += "<div style='text-align:left;margin-left:30px; height:16px; '>取消不做任何操作.建议在项目面板中新建文件。</div>";
                U.UI.Confirm(_nr, [U.CD.R.SaveNewFile, ([_current, _c])], "");
            } else {
                U.UI.Confirm("<div style=' color:red;text-align:left; margin-left:10px; height:25px;'>您还未创建过项目!</div><div> 确认将建立一个名为Test的项目，取消不做任何操作</div> ", [U.CD.R.SaveNewFolder, ([_c])], "");
            }
            return;
        }
        //mongodb保存不了html标记，先编码。取出后解码。。由于情况比较特殊，输入内容有回车换行，这些html会自动转换，但又生成了很多div作为换行。所以是矛盾的，只能编码，解码
        var _innertext = escape($("#UCD_CT_Code_CT")[0].innerHTML);
        //获取代码区域内容，如果获取innerText，会取消掉回车换行符合？
        //alert(US.userinfo.UserId);
        U.ACD.Request(U.CD.AjaxUrl, (["Update_FileContent", _c.userid, node.Deep, node.ID, _innertext]), U.CD.R.SaveAsyn, (["", node]));
        //保存代码。userid从cookie取
    }
}
//保存功能异步函数
U.CD.R.SaveAsyn = function (r) {
    var i, node = r.context[1];
    //得到上下文节点。
    if (r.value && r.value != "null") {
        var _l = $("#UCD_CT_Top_Tab")[0].getElementsByTagName("ul")[0].getElementsByTagName("li");
        //获取ul下面所有li标签。//更新li节点信息。
        for (i = 0; i < _l.length; i++) {
            if (_l[i].id == "Tab" + node.ID) {
                _l[i].Data.Content = node.Content;
                alert("保存" + node.Name + "成功");
                return;
            }
        }
    } else {
        if (node.Name == "云端示例")
            alert("云端示例不允许保存！");
        else
            alert("保存失败");
    }
}
//新用户登录后单击保存按钮自动创建一个名为Test的项目和一个名为index.htm的文件。
U.CD.R.SaveNewFolder = function (_c) {
    var node = {
        "Name": "Test",
        "CreateDate": new Date(),
        "Type": "folder",
        "ID": Guid.newGuid(),
        "Deep": 2,
        "TNode": [],
        "IsPublic": true,
        "IsDelete": false
    };
    ;//创建一个名为Test的项目.深度默认为2
    var root = U.CD.U.CUser.TNode[0];
    //U.CD.U.CUser未保存用户信息，不知道对后期有什么影响。获取该用户的节点信息，里面保存了根节点信息
    U.ACD.Request(U.CD.AjaxUrl, (["Add_Folder", _c.userid, root.ID, root.Deep, node.ID, node.Name]), U.CD.R.SaveNewFile, (["", _c]));
}
//文件夹创建后建立文件,两种情况，一种是已经有文件夹创建文件，多传递了u参数,另外一种是后台创建新项目后返回的r值。
U.CD.R.SaveNewFile = function (r, u) {
    var _c, _pnode, node;
    //直接使用传递的用户信息。//直接使用传递的当前项目信息。
    if (u) {
        _c = u;
        _pnode = r;
    } else {
        //如果创建文件夹成功，继续创建文件//context保存了参数信息，不知道能否是集合，测试一下。强大，能返回集合。context[0]保存的是loadingdiv。//获取创建的文件夹节点
        if (r.value != "false") {
            _c = r.context[1];
            //_pnode = eval("(" + r.value + ")");
            _pnode = r.value;
        } else {
            alert("自动创建项目异常！");
            return;
        }
    }
    node = {
        "Name": "test.cpp",
        "CreateDate": new Date(),
        "Type": "file",
        "ID": Guid.newGuid(),
        "Deep": parseInt(_pnode.Deep) + 1,
        "IsPublic": true
    };
    U.ACD.Request(U.CD.AjaxUrl, (["Add_File", _c.userid, _pnode.ID, _pnode.Deep, node.ID, node.Name]), U.CD.R.SaveNewOK, (["", _c, _pnode, u]));
    //继续添加文件,把项目也传递进去，以便前台添加

}
//添加项目和文件成功。
U.CD.R.SaveNewOK = function (r) {
    if (r.value != "false") {
        var _c = r.context[1];
        //用户信息
        var _pnode = r.context[2];
        //获取项目
        var u = r.context[3];
        //是否是在现有项目下新建文件，不传递表示又创建项目又创建文件。
        //var _file = eval("(" + r.value + ")"); //获取文件
        var _file = r.value;
        //获取文件
        _pnode.TNode.length = 0;
        //清空数组，追加一个文件
        _pnode.TNode.push(_file);
        //追加文件到项目中
        //如果没有项目信息，则追加项目,追加文件。否则，只追加文件
        if (!u) {
            U.CD.RT.F_L_Node(_pnode, _c.userid, $("#UCD_RT_Tree")[0]);
            //追加项目
            U.CD.RT.LV(_pnode.TNode, $("#UCD_RT_Tree")[0].firstChild, _c.userid);
            //参数1为节点集合，参数2为节点的元素，参数3为用户id,创建文件需要树型右移操作。
            //U.CD.U.CUser.CurrentSO = $("#UCD_RT_Tree")[0].firstChild; //不知道是否正确
            U.CD.U.CUser.CurrentNode = _pnode;
            //指定当前项目
        } else {
            U.CD.RT.LV(_pnode.TNode, $("#UCD_RT_Tree")[0].firstChild, _c.userid);
            //参数1为节点集合，参数2为节点的元素，参数3为用户id,创建文件需要树型右移操作。
        }
        //同时选中文件
        U.CD.R.LoadFC(_file);
        //刷新代码和视图，选项卡，换行窗口。
        alert("初始化用户文件成功");
    } else
        alert("初始化用户数据失败");
}

//-----------------------------------------------------------新建项目----------------------------------------------
U.CD.R.NewPro = function () {
    if (!U.U.L.DLTC()) {
        U.CD.RT.CProject(US.userinfo.UserId, U.CD.U.CUser.TNode[0]);
    }

    //    var _c = U.CD.U.IsUSelf(); //获取用户登录Cookie.  _c.userid _c.username _c.Loginid
    //    if (!_c) { U.CD.U.LoginApply(); return; }  //如果未登录，弹出登录窗口。。
    //    U.CD.RT.CProject(_c.userid, U.CD.U.CUser.TNode[0]);
}

//---------------------------------------------------------------新建文件---------------------------------------------------------
U.CD.R.NewFile = function () {
    var _c = U.CD.U.IsUSelf();
    //获取用户登录Cookie.  _c.userid _c.username _c.Loginid
    if (!_c) {
        U.CD.U.LoginApply();
        return;
    }
    //如果未登录，弹出登录窗口。。
    //首先选取项目，如果没有项目，提醒用户创建项目
    if (U.CD.U.CUser.TNode[0].TNode.length > 0) {
        //var SO = $(".UCD_RT_ZSCG_T", U.CD.U.CUser.CurrentSO)[0];//根据类名获取元素的函数,暂时用其他方法解决
        U.CD.RT.CP_NF(U.CD.U.CUser.CurrentSO, _c.userid, U.CD.U.CUser.CurrentNode);
        //alert("人手不够，此功能以后开放！请在右边树里面中单击操作面板建立文件！！！！！");
    } else {
        U.CD.RT.CProject(_c.userid, U.CD.U.CUser.TNode[0]);
    }

}

//--------------------------------------------------------------------------------------运行功能--------------------------------------------------------------------

//大窗口运行html效果。老函数，暂时没用了。
U.CD.R.run = function () {
    //判断UCD_IF是否存在， 存在则刷新iframe，不存在创建窗口
    var _i;
    //定义一个变量，保存创建的结果iframe窗口
    if ($("#UCD_IF")[0]) {
        _i = $("#UCD_IF")[0];
    } else {
        var _c = $$("div", {
            "id": "UCD_RUN"
        }, document.body);
        //创建一个运行窗口的div
        var _t = $$("div", {
            "className": "UCD_RUN_Head"
        }, _c);
        //头部信息
        $$("div", {
            "className": "UCD_RUN_Refesh",
            "innerHTML": "重新运行"
        }, _t);
        //给头部信息赋予一个刷新按钮，即再次运行
        $$("div", {
            "className": "UCD_RUN_Close",
            "innerHTML": "关闭",
            "onclick": function () {
                _c.style.display = 'none'
            }
        }, _t);
        //给div赋予一个关闭按钮
        var _i = $$("iframe", {
            "className": "UCD_RUN_Iframe",
            "id": "UCD_IF"
        }, _c);
        //添加显示结果的iframe。
        //_i.src = "javascript:void((function(){document.open();document.domain='1473.cn';document.close()})())"; //一定要指定一个链接,为空都行，否则不会触发异步。
    }
    $("#UCD_RUN")[0].style.display = "block";
    //把结果窗口置为可见。
    var _i = $("#UCD_IF")[0];
    _i.src = "RS.htm";
    //刷新结果iframe窗口,这个是大窗口运行结果。和小窗口的不一样
    U.MD.IframeLoad(_i, [[U.CD.CD.ILAsync, ([_i, $("#UCD_CT_Code_CT")[0]])]]);
    ;
}
//开启另外一个窗口运行程序,javascript版本
//U.CD.R.OpenRun = function () {
//    var s = U.CD.CD.ExecIFText($("#UCD_CT_Code_CT")[0]);
//    var _ta = $$("textarea", { "value": s });//为了解决chrome浏览器敲入nbsp出现的问题，用textarea过滤，但还是不行。等以后再解决了。
//    s = _ta.value;
//    var _w = window.open("javascript:void((function(){document.open();document.domain='1473.cn';document.close()})())", "_blank", '');
//    var _new = _w.document.open('text/html', 'replace');
//    _w.opener = null; // 防止代码对页面修改
//    _new.write(s);
//    _new.close();
//}
//C语言已经其他语言后台版本
U.CD.R.OpenRun = function () {
    var s = $("#UCD_CT_Code_CT")[0].innerText;
    if (!U.CD.R.ForbidInput(s)) {
        //U.UI.SUForms("暂时不支持输入语句scanf等，请直接赋值，敬请期待下一版", "提示！！！", "UCD_R_InAlert", "color:red;", 300, 200);
        U.UI.Confirm("暂时不支持输入语句scanf等，请直接赋值，敬请期待下一版")
        return;
    }
        //如果是Chrome,FireFox，需要过滤掉一些字符
        s = U.CD.CD.ExecIFCompChrome(s);
    if (!U.CD.FGuid)
        U.CD.FGuid = Guid.newGuid().replace(/-/g, '');
    //用Guid作为文件名，已经作为UC的一部分签入了
    //"bkp代表了后端程序,s代表了文件内容，U.CD.FGuid代表了文件名的前面部分,U.CD.USLang代表了语言类型"
    var _ld = U.CD.O.Loading("正在编译程序，请耐心等候.....");
    try {
        U.A.Request(U.CD.AjaxUrl, (["bkp", s, U.CD.FGuid, U.CD.USLang]), U.CD.R.ORAsyn, (["", _ld]));
    } catch (e) {
        U.Alert("数据库连接未成功，正在紧急修复中。。");
        throw e
    }
}

//运行程序异步处理。
U.CD.R.ORAsyn = function (r) {
    //处理换行
    r.value = r.value.replaceStr(/\n/, '<br>')
    var _ld = r.context[1];
    _ld.parentNode.removeChild(_ld);
    //移除进度条
    //此处r.value如果返回1,2等数字会报错。！数字转字符串问题，以后总结好后需要写到U.A中。

    if (!r.value) {
        U.Alert('后端程序无响应,请稍后重试')
    }
    var s = U.CD.CD.ExecLangBack(r.value);
    //去掉运行结果或者错误结果中每行字符的右边空格以及目录标识。s还是字符串，不是数组
    //如果是Lisp语言，特殊处理，因为lisp语言有bug，正确的结果也在错误处理中。并且没有错误提示.
    if (U.CD.USLang == "Lisp") {
        U.CD.CE.LispErr($("#UCD_CT_SM_IF")[0], s);
        return;
    }
    //如果程序编译正常，弹出结果窗口。否则，进入错误处理
    if (U.CD.CE.BuildErr(s)) {
        //判断语言类型
        switch (U.CD.USLang) {
            case "Python":
            case "Perl":
            case "Ruby":
                U.CD.CE.DefErr($("#UCD_CT_SM_IF")[0], s);
                break;
            case "PHP":
                U.CD.PHPErr($("#UCD_CT_SM_IF")[0], s);
                break;
            case "C":
            case "Net":
                U.CD.CE.CErr($("#UCD_CT_SM_IF")[0], s);
                break;
            case "Nodejs":
                U.CD.CE.NodeErr($("#UCD_CT_SM_IF")[0], s);
                break;
            default:
                break;
        }

        U.Alert("有错误！查看输出窗口以更正错误");
    } else {
        U.CD.R.ORAsynOK(s);
    }
}

//弹出正确结果窗口
U.CD.R.ORAsynOK = function (s) {
    //运行结果窗口，类似windows平台。
    //var SEW = [1, "50", "30%", "779", "420", "UCD_R_Result", "运行结果", "", s, "no", false, true, true, "background-color:black;color:white;overflow-y:scroll", true];
    //var _f = { "Embed": SEW[0], "Top": SEW[1], "Left": SEW[2], "Width": SEW[3], "Height": SEW[4], "ContainerId": SEW[5], "titleName": SEW[6], "ContentId": SEW[7], "Content": SEW[8], "hasScroll": SEW[9], "hasMax": SEW[10], "hasMin": SEW[11], "hasDraw": SEW[12], "CStyle": SEW[13], "IsR": SEW[14] };
    var _r = U.UI.Form({
        min: false,
        max: false,
        id: 'UCD_R_Result',
        style: {
            'background-color': 'white',
            'color': 'black',
            'height': '400px'
        },
        title: '运行结果',
        content: s,
        SO: false
    })
    //var _r = U.UI.Form(_f, document.body); //向body追加窗体。
    U.D.SetDTop(_r);
    _r.getElementsByTagName("div")["UCD_R_ResultContent"].innerText = s;
    //解决弹出窗体使用innerHTML而不是innerText的问题。
    $("#UCD_CT_SM_IF")[0].innerHTML = "";
    //清空错误输出窗口内容
}

//暂时不支持所有语言的输入语句
U.CD.R.ForbidInput = function (s) {
    //可以把所有语言的输入都放在数组中，统一判断
    var _in = ["scanf", "fscanf"], n = _in.length, i;
    for (i = 0; i < n; i++) {
        if (s.indexOf(_in[i]) > -1) {
            return false;
        }
    }
    return true;
}

//小非模态窗口,只需要传递中间内容，即可生成一个窗口。s表示窗体中内容，title表示窗口标题，i表示窗口唯一id,c表示内容文字颜色,w是宽度,h是高度
U.UI.SUForms = function (s, title, i, c, w, h) {
    //窗体函数不支持坐标，还需要修正。窗口的样式position:absolute; display:block;需要内置进去
    var l = (document.body.clientWidth - w) / 2
      , t = (document.body.clientHeight - h - 50) / 2;
    //  var SEW = [1, t, l, w, h, i, title, "", s, "no", false, false, false, c, true];
    // var _f = { "Embed": SEW[0], "Top": SEW[1], "Left": SEW[2], "Width": SEW[3], "Height": SEW[4], "ContainerId": SEW[5], "titleName": SEW[6], "ContentId": SEW[7], "Content": SEW[8], "hasScroll": SEW[9], "hasMax": SEW[10], "hasMin": SEW[11], "hasDraw": SEW[12], "CStyle": SEW[13], "IsR": SEW[14] };
    //var _r = U.UI.UForms(_f, document.body); //向body追加窗体。
    var _r = U.UI.Form({
        min: false,
        max: false,
        id: i,
        style: {
            width: "500px",
            height: "500px"
        },
        content: c,
        title: title,
        hst: {
            style: {
                "padding": "0"
            }
        }
    });
    U.D.SetDTop(_r);
}

//错误窗口帮助,以后还可以再次封装小窗体，大窗体等，让代码更少
U.CD.R.Help = function () {

    var s = "1、下面为错误输出窗口。</br>2、窗口中凡是包含了error字符的是错误，必须修改完才能生成正确程序，</br>3、包含了note字符的是警告信息，可以忽略，</br>4、没有包含error和note的信息可以不理！";
    U.UI.SUForms(s, "错误帮助窗口", "UCD_R_ErrHelpWin", "color:red;", 300, 200);
}

//停止运行结果窗口
U.CD.R.Stop = function () {
    if ($("#UCD_RUN")[0])
        $("#UCD_RUN")[0].style.display = 'none';
}
//如果存在UCD_RUN,关闭它。

//_i.src = "javascript:void((function(){document.open();document.domain='1473.cn';document.close()})())"; //一定要指定一个链接,为空都行，否则不会触发异步。

//---------------------------------------------------------------------------自定义窗体-------------------------------------------------------------------------------
//窗体初始化
//暂有传参{ "Embed": 是否是Iframe, "Top": 偏移高, "Left": 偏移左, "Width": 长度, "Height": 高度, "ContainerId": id, "titleName": 标题, "ContentId": 内容区Id, "Content": 内容, "hasScroll": 内容区是否滚动, "hasMax": 是否允许放大, "hasMin": 是否允许缩小, "hasDraw": 是否拉伸, "CStyle": 内容区样式, "IsR": 关闭是否移除 }
//U.UI.UForms = function (USW, UDPD) {
//    var i, _UDOD, _UDTD, _UDSD, _UDCD, _UDED, _UECV, _UZC = /%/, UDGE = [["UD_W_WT_H", "up"], ["UD_W_WT_HL", "topRight"], ["UD_W_WT_HR", "topleft"], ["UD_W_WT_ML", "left"], ["UD_W_WT_MR", "right"], ["UD_W_WT_B", "down"], ["UD_W_WT_BL", "bottomLeft"], ["UD_W_WT_BR", "bottomRight"]];
//    (_UZC.test(USW.Width)) && (USW.Width = US.Width * (parseInt(USW.Width) / 100)); (_UZC.test(USW.Height)) && (USW.Height = US.Height * (parseInt(USW.Height) / 100)); (_UZC.test(USW.Top)) && (USW.Top = US.Height * (parseInt(USW.Top) / 100)); (_UZC.test(USW.Left)) && (USW.Left = US.Width * (parseInt(USW.Left) / 100));
//    _UDOD = $$("div", { "className": "UD_W UD_UIU", "id": USW.ContainerId, "style": { "width": USW.Width + "px", "height": USW.Height + "px", "left": USW.Left + "px", "top": USW.Top + "px"} });
//    $$("div", { "className": "UD_ICON UD_ICONl" }, _UDOD);
//    _UDTD = $$("div", { "className": "UD_WIMG UD_W_TB", "style": { "width": (USW.Width - 30) + "px" }, "onmousedown": [[U.D.DragMouseDown, ([_UDOD])]] }, _UDOD);
//    $$("span", { "className": "UD_W_TB_T", "innerHTML": USW.titleName }, _UDTD);
//    _UDSD = $$("div", { "className": "UD_W_TB_WM" }, _UDTD);
//    $$("span", { "title": "关闭", "className": "UD_ICON UD_W_TB_WM_Close", "onmousedown": U.M.StopBubble, "onclick": [[(U.D.Tb ? U.D.Tb.PopupWinClose : U.D.CloseWindow), ([_UDOD, (USW.IsR ? "remove" : "")])]] }, _UDSD);
//    (USW.hasMax) && ($$("span", { "title": "最大化", "className": "UD_ICON UD_W_TB_WM_Max", "onmousedown": U.M.StopBubble, "onclick": [[U.D.Windowmaximize, ([_UDOD])]] }, _UDSD));
//    (USW.hasMin) && ($$("span", { "title": "最小化", "className": "UD_ICON UD_W_TB_WM_Min", "onmousedown": U.M.StopBubble, "onclick": [[U.D.WindowMin, ([_UDOD])]] }, _UDSD));
//    $$("div", { "className": "UD_ICON UD_ICONR" }, _UDOD);
//    _UDCD = $$("div", { "className": "UD_WIMG UD_ICONz", "onmousedown": U.M.StopBubble }, _UDOD); //, "style": { "height": USW.Height - 36 + "px" }
//    _UDED = $$("div", { "id": USW.ContainerId + 'Content', "className": "UD_W_WC", "style": { "cssText": "height:100%;" + USW.CStyle} }, _UDCD);
//    _UECV = { "with": [{ "Element": _UDCD, "hdiffer": -36 }, { "Element": _UDTD, "hdiffer": 0, "wdiffer": -30}], 'upf': [[U.M.apply($("span", _UDTD)[0], "retElement.style.marginLeft = (retElement.parentNode.parentNode.clientWidth - retElement.clientWidth) / 2 + 'px';")]] };
//    if (USW.Embed == 0) { $$("iframe", { "id": USW.ContentId, "name": USW.ContentId, "frameborder": 0, "scrolling": USW.hasScroll, "src": USW.Content, "width": "100%", "height": "100%" }, _UDED); }
//    else { if (typeof USW.Content == "object") { _UDED.appendChild(USW.Content); } else { _UDED.innerHTML = USW.Content; } }
//    if (USW.hasDraw) { for (i = 0; i < UDGE.length; i++) { $$("span", { "className": UDGE[i][0], "onmousedown": [[U.D.Chatdrag, ([_UDOD, UDGE[i][1], _UECV])]] }, _UDOD); } }
//    (UDPD) && (UDPD.appendChild(_UDOD)); return _UDOD;
//}
