Namespace.register("U.MD.F.R"); //好友和群窗口区域命名空间

//#region 右键菜单

/**
*   右键功能 显示[移动至][删除]窗体
*   参数说明 0 当前元素 1 用户信息
*   @param  {element} 右键好友的区域
*   @param  {object} 好友信息
*/
U.MD.F.R.friendsRightClickMenu = function (el, friendinfo) {
    var _friendmenuel = $('#U_MD_F_G_Div')[0], //右键的菜单
        _child = $(_friendmenuel).Child(); //子菜单
    //显示菜单,定位
    $(_friendmenuel).css({ "display": "block", "zIndex": "999" });
    U.UF.C.rightClickMenuLocation(_friendmenuel); //右键菜单定位
    //按钮功能赋值
    _child[0].onclick = function () { U.MD.F.W.popupFriendsForm(friendinfo); };  //发送消息
    _child[1].onclick = function () { U.MD.U.V.ViewOtherUserInfo(friendinfo); };  //查看个人资料
    _child[2].onmouseover = function () { U.MD.F.R.moveFriendForm(friendinfo, el, _child[2]); };  //移动联系人至
    _child[3].onclick = function () { U.MD.F.R.deleteFriendForm(friendinfo); };  //删除
    //点击其它区域隐藏右键菜单
    $(document).bind("click", function () {
        $(_friendmenuel)[0].style.display = "none";
    })
}

/**
*   鼠标移动到 联系人移动至制定的好友分组弹框
*   @param  {object} 好友信息
*   @param  {element} 右键好友的区域
*   @param  {element} onmouseover出发的按钮
*/
U.MD.F.R.moveFriendForm = function (friendinfo, el, menubootom) {
    var i,
        _friendclassel = $(menubootom).parentElement().Child()[4],  //获取好友分组打印的元素
        _friendclassinfo = US.friend.allclass; //获取用户所有的好友分组
    _friendclassel.innerText = ""; //清空之前打印的好友分组
    //如果有好友分组可以移动的情况
    if (_friendclassinfo.length > 1) {
        //循环打印好友分组
        for (i = 0; i < _friendclassinfo.length; i++) {
            //如果是当前用户所在的好友分组不打印,否则都打印
            if (_friendclassinfo[i].FriendsGroupID != friendinfo.FriendsGroupID) {
                //创建好友分组元素
                $$("div", { "class": "U_MD_F_G_Div_Children_A", "innerText": _friendclassinfo[i]["FriendsGroupName"],
                    "onclick": U.UF.C.closure(function (i) {
                        U.MD.F.R.assignMoveFriend(friendinfo, _friendclassinfo[i], el);
                    }, [i])
                }, _friendclassel);
            }
        }
        _friendclassel.style.display = "block";
    }
}

/**
*  触发移动好友
*   
*   @param  {object} 好友信息
*   @param  {object} 群信息
*   @param  {element} 好友元素
*/
U.MD.F.R.assignMoveFriend = function (friendinfo, groupinfo, el) {
    //只有选择移动了触发
    if (friendinfo) {
        $('#U_MD_F_G_Div')[0].style.display = "none"; //点击后隐藏右键
        $(".U_MD_F_G_Div_Children")[0].style.display = "none"; //隐藏右键后好友分组选择的菜单
        //数据库设置移动好友信息
        U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "MoveFriendToOtherClass", friendinfo.FriendsID, groupinfo["FriendsGroupID"]],
                     U.MD.F.R.asynAssignMoveFriend, ["", friendinfo, groupinfo, el]);
        U.alert('修改成功');
    }
}

/**
*   把相应的好友移动到指定的群组里
*/
U.MD.F.R.asynAssignMoveFriend = function (r) {
    var _child, //好友分组元素
        _context = r.context, //异步传参
        _friendinfo = _context[1], //移动好友实体
        _groupinfo = _context[2], //好友分组字体
        _el = _context[3], //移动的元素
        _friendgroupel = $("#g" + _groupinfo.FriendsGroupID)[0], //移动到的好友分组
        _previousgroupinfo = U.Json.select(US.friend.allclass, { "FriendsGroupID": _friendinfo.FriendsGroupID })[0], //修改前的好友分组
        _friendnum = U.Json.select(US.friend.friends, { "FriendsGroupID": _friendinfo.FriendsGroupID }).length - 1 //好友分组的数量
    ;
    //设置好友原本所在的分组信息
    $(_el).parentElement(2).Child()[0].innerHTML = _previousgroupinfo.FriendsGroupName + "(" + _friendnum + ")"; //移动好友出去后需改数量显示
    //好友实体的id变化FriendsGroupID
    _friendinfo.FriendsGroupID = _groupinfo.FriendsGroupID;
    //判断分组是否显示
    if (_friendgroupel) {
        _child = $(_friendgroupel).Child();
        _friendnum = U.Json.select(US.friend.friends, { "FriendsGroupID": _friendinfo.FriendsGroupID }).length;
        _child[0].innerHTML = _groupinfo["FriendsGroupName"] + "(" + _friendnum + ")"; //新好友分组
        _child[1].appendChild(_el); //添加移动的元素
    }
}

/**
*   鼠标从 联系人移动至 移开
*   隐藏现有的好友分组   Jude
*/
U.MD.F.R.moveFriendOver = function (isdisplay, friendgroupmenu, el) {
    //判断是否是冒泡上来的,如果是冒泡的则不处理
    if (!U.UF.EV.stopBubbleMouseOutOrOver(el)) {
        //根据传参设置是否显示隐藏
        friendgroupmenu.style.display = isdisplay ? "none" : "block";
    }
}

/**
*   弹出移动好友分组
*   参数说明 0 要移动的对象的信息集合  1 右键区域
*   @param  {element}   点击移动至区域
*/
U.MD.F.R.topMoveFriendForm = function (el, friendinfo) {
    var _chooseGroupInfon = null;
    //未创建
    if (!$(".U_MD_F_G_Y_D")[0]) {
        var i, //循环
        _tempel,
        _friendclassel = $$("div", { "className": "U_MD_F_G_Y_D" }), //弹出框内容区域
        _friendclassinfo = US.friend.allclass, //好友分组信息
        _friendclassform = U.UF.UI.confirm(_friendclassel, function () { U.MD.F.R.assignMoveFriend(friendinfo, _chooseGroupInfon, el) });  //好友分组弹框

        $$("div", { "innerText": "选择好友移动至", "className": "U_MD_F_G_Y_DT" }, _friendclassel);
        _tempel = $$("div", { "className": "U_MD_F_G_Y_DS" }, _friendclassel);
        //循环所有可以移动的分组
        for (i = 0; i < _friendclassinfo.length; i++) {
            $$("div", { "innerHTML": _friendclassinfo[i].FriendsGroupName,
                "className": "U_MD_F_G_Div_Q" + (friendinfo.FriendsGroupID == _friendclassinfo[i].FriendsGroupID ? " U_MD_F_G_Div_QO" : ""),
                "onclick": U.UF.C.closure(function (i) {
                    U.MD.F.R.topMoveFriendFormSwitch(this, friendinfo, _friendclassinfo[i], _friendclassform, el);
                    _chooseGroupInfon = _friendclassinfo[i];
                }, [i])
            }, _tempel);
        }
        //自适应宽度
        $($(_friendclassform.content)[0]).Parent().style.height = "100%";
    } else {//已经创建
        var _formparent = $($($($($($(".U_MD_F_G_Y_D")[0]).Parent()).Parent()).Parent()).Parent()).Parent(); //获取父级窗体元素
        if (_formparent.style.display == "none") {
            _formparent.style.display = "block";
        } else {
            _formparent.style.display = "none"
        }
    }
}

/**
*   右键功能 显示[移动至][删除]窗体
*   
*   @param  {element} 选中变化的元素
*   @param  {object} 好友信息
*   @param  {object} 群信息
*   @param  {array} 对话框
------------[0] 对话框
*   @param  {element} 好友元素
*/
U.MD.F.R.topMoveFriendFormSwitch = function (groupel, friendinfo, friendclassinfo, friendclassform, el) {
    var i, //用于循环
        _child = $(el).parentElement().Child(); //获取
    _group = $(".U_MD_F_G_Y_DS").Child();
    for (i = 0; i < _group.length; i++) {
        _group[i].className = $(".U_MD_F_G_Y_DS").Child()[i].className == "U_MD_F_G_Div_Q U_MD_F_G_Div_QO" ? "U_MD_F_G_Div_Q" : "U_MD_F_G_Div_Q";
        groupel.className = "U_MD_F_G_Div_Q U_MD_F_G_Div_QO";
    }
    //设置点击的效果
    for (i = 0; i < _child.length; i++) {
        _child[i].className = "U_MD_F_H_ZLZOCO" + (el == _child[i] ? " U_MD_F_G_Div_QQ" : "");
    }
    //设置确定按钮的事件,这里要结合窗体的api
    //    friendclassform.AddEvent({ Yes: [U.MD.F.R.assignMoveFriend, [friendinfo, friendclassinfo, el]] });
}

//#endregion

//#region 好友分组
/**
*   右键群显示
*   @param object 右键元素的信息集合
*/
U.MD.F.R.friendClassRightClickMenu = function (friendgroupinfo, el) {
    var _el = $('#U_MD_F_G_Qun')[0], //右键的菜单
        _child = $(_el).Child(); //子菜单

    $(_el).css({ "display": "block", "zIndex": "999" }); //显示右键菜单
    U.UF.C.rightClickMenuLocation(_el); //右键菜单定位
    //修改分组名字的点击处理
    _child[0].onclick = function () { U.MD.F.R.popupUpdateFriendsClassForm(friendgroupinfo, el); };
    _child[1].onclick = function () { U.MD.F.R.popupDeleteFriendsClassForm(friendgroupinfo, el); };
    $(document).bind("click", function () {
        $('#U_MD_F_G_Qun')[0].style.display = "none";
    })
}

/**
*   修改分组昵称 弹框
*   @param object 分组信息集合
*   @param object 当前的el
*/
U.MD.F.R.popupUpdateFriendsClassForm = function (friendgroupinfo, el) {
    var _tempel,
        _temponeel,
        _temptwoel;
    var _el = $('#U_MD_F_G_Qun')[0];  //右键的菜单
    $(_el).css({ "display": "none" }); //显示右键菜单
    if (friendgroupinfo) {
        //创建好友分组的样式
        _tempel = $$("div", { "className": "U_MD_U_L_Box_I U_MD_F_Add_TNL U_MD_F_G" });
        _temponeel = $$("div", {}, _tempel)
        _temptwoel = $$("input", { "value": friendgroupinfo.FriendsGroupName, "onfocus": function () { U.UF.MR.inputPlaceholder(this, friendgroupinfo.FriendsGroupName, ""); },
            "onblur": function () { U.UF.MR.inputPlaceholder(this, "", friendgroupinfo.FriendsGroupName); }
        }, _temponeel);
        //弹出好友对话框
        U.UF.UI.confirm(_tempel, function () { U.MD.F.R.assignUpdateFriendsClass(friendgroupinfo, _temptwoel, el); }); //创建一个对话框
    }
    else {
        U.alert("暂无群信息");
    }
}

/**
*   
*   参数说明 0 群消息集合   1 更改的分组名称 3对应修改的el
*   @param  {object} 群信息
*   @param  {element} 输入框
*   @param  {object} 对应的el
*/
U.MD.F.R.assignUpdateFriendsClass = function (friendgroupinfo, formel, el) {
    U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "UpdateClassNameAndDescription", friendgroupinfo["FriendsGroupID"], formel.value, ""],
    function () {
        $(el)[0].innerText = formel.value;
        U.alert("修改成功");
    }, []);
    U.alert("正在修改中");
}

/*
*   删除好友分组弹框
*   @param object 分组信息集合
*   @param object 当前的el
*/
U.MD.F.R.popupDeleteFriendsClassForm = function (friendgroupinfo, el) {
    var _content;
    var _el = $('#U_MD_F_G_Qun')[0];  //右键的菜单
    $(_el).css({ "display": "none" }); //显示右键菜单
    if (friendgroupinfo) {
        _content = "是否确定删除(" + friendgroupinfo.FriendsGroupName + ")该分组";
        U.UF.UI.confirm(_content, function () { U.MD.F.R.assignDeleteFriendsClass(friendgroupinfo, el); });
    }
}
/*
*   确定删除好友分组
*   @param object 分组信息集合
*   @param object 当前的el

*/
U.MD.F.R.assignDeleteFriendsClass = function (friendgroupinfo, el) {
    var _friendGroupLength = U.Json.select(US.friend.friends, { "FriendsGroupID": friendgroupinfo.FriendsGroupID }).length;
    if (friendgroupinfo.FriendsGroupDescript != "自动创建") {
        if (_friendGroupLength == 0) {
            U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "DeleteFriendClass", friendgroupinfo.FriendsGroupID],
        function () {
            $(el).Parent().remove()
            U.alert("删除成功");

            //在好友数组的全局变量中删除好友分组的信息
            for (i = 0; i < US.friend.allclass.length; i++) {
                if (US.friend.allclass[i].FriendsGroupID == friendgroupinfo.FriendsGroupID) {
                    US.friend.allclass.splice(i, 1);
                }
            }
        }, []);
            U.alert("正在删除中");
        } else {
            U.alert(friendgroupinfo.FriendsGroupName + "该分组下有好友,无法删除");
        }
    } else {
        U.alert("自动创建的分组不可删除");
    }
}

//#endregion

/**
*   删除确定
*   参数说明    0 要删除的对象ID  1右键的区域
*   @param  {element} 右键好友的区域
*/
U.MD.F.R.deleteFriendForm = function (friendinfo, callback) {
    var _el;
    //创建删除好友的信息样式
    _el = $$("div", { "class": "U_MD_F_G_D" });
    $$("div", { "class": "U_MD_F_G_DelSpan", "innerText": "删除后对方将从好友列表中消失,无法进行发送以及接收消息。" }, _el);
    //弹出删除好友的框
    U.UF.UI.confirm(_el, function () {
        U.MD.F.M.deleteFriend(friendinfo);
        U.UF.C.isFunction(callback) && callback();
    });
}

/**
*   右上角设置
*   参数说明 friendinfo对应的好友信息集合
*   @param object   好友信息
*   
*/
U.MD.F.R.popupRightCornerMenu = function (friendinfo, el) {
    var _tempel,
        _friendclassinfo,
        _isaddfriend,
        _menuel = $(el).Child()[0];

    //如果菜单存在则删除
    if (_menuel) {
        $(_menuel).remove();
    }
    else {
        //好友查看
        if (friendinfo.UserId) {
            _isaddfriend = U.Json.selectOne(US.friend.friends, { "UserId": friendinfo.UserId }); //判断用户是否在好友列表里
            //判断用户是否是自己的好友,是的话则操作好友信息
            if (_isaddfriend) {
                //获取好友分组信息
                _friendclassinfo = $($("#g" + _isaddfriend.FriendsGroupID + " div")[1]).find('[tid="' + _isaddfriend["UserId"] + '"]')[0]; //好友分组信息
                //创建菜单
                _tempel = $$("div", { "class": "U_MD_F_T_B", style: {} }, el);
                $$("div",
             {
                 "innerText": "修改备注姓名",
                 "onclick": function () {
                     U.MD.F.R.updateFriendDescriptForm(_isaddfriend);
                 }
             },
               _tempel);
                $$("div",
            {
                "innerText": "修改好友分组",
                "onclick": function () {
                    U.MD.F.R.topMoveFriendForm(_friendclassinfo, _isaddfriend);
                }
            },
              _tempel);
                $$("div",
            {
                "innerText": "删除好友",
                "onclick": function () {
                    U.MD.F.R.deleteFriendForm(_isaddfriend);
                }
            },
               _tempel);
            }
            //如果好友不是自己的好友,则菜单为添加好友
            else {
                $$("div", { "innerText": "添加该好友" }, _tempel);
            }
        }
        //群菜单查看
        else {
            U.MD.F.J.groupInfoForm(friendinfo); //查看群 操作
        }
    }
}

/**
*   修改好友备注
*   参数说明 UGE对应的好友信息集合
*   @param object
*/
U.MD.F.R.updateFriendDescriptForm = function (_friendinfo) {
    var _tempel,
    _temponeel,
    _temptwoel,
    _descript;
    _descript = _friendinfo.FriendsDescript || _friendinfo.UserNickName; //修改的好友昵称
    //创建好友分组的样式
    _tempel = $$("div", { "className": "U_MD_U_L_Box_I U_MD_F_Add_TNL U_MD_F_G" });
    _temponeel = $$("div", {}, _tempel)
    _temptwoel = $$("input",
    {
        "value": _descript,
        "onfocus": function () {
            U.UF.MR.inputPlaceholder(this, _descript, "");
        },
        "onblur": function () {
            U.UF.MR.inputPlaceholder(this, "", _descript);
        }
    }, _temponeel);
    //弹出好友对话框
    U.UF.UI.confirm(_tempel, function () {
        U.MD.F.R.updateFriendDescript(_friendinfo, _temptwoel);
    }); //创建一个对话框

}

/**
*   确认修改备注
*   参数说明   0 对应好友信息集合   1对应的el 用于静态改变当前的备注
*   @param{object}群信息 
*   @{element}对应el
*/
U.MD.F.R.updateFriendDescript = function (friendinfo, el) {
    U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "UpdateFriendDescription", friendinfo['FriendsID'], el.value],
                U.MD.F.R.asynUpdateFriendDescript, [null, friendinfo, el.value]);
}


/**
*   好友备注修改异步
*   @param{object} 异步服务器返回的信息 
*/
U.MD.F.R.asynUpdateFriendDescript = function (r) {
    var _context = r.context,
        _friendinfo = _context[1],
        _descript = _context[2],
        _el = $($("#g" + _friendinfo.FriendsGroupID + " div")[1]).find('[tid="' + _friendinfo["UserId"] + '"]')[0];
    _friendinfo.FriendsDescript = _descript; //在好友信息集合里修改用户描述
    //在好友列表中修改好友
    if (_el) {
        $("div", _el)[2].innerText = _context[2];
    }
    //在聊天窗口修改好友
    $("div", $('.U_MD_F_TO.U_MD_F_TOT')[0])[1].innerText = _context[2];

    var _obj = $('.U_MD_F_TO.U_MD_F_TOT')[0],
        _tags = $(".U_MD_F_TA")[0].children;
    for (var i = 0, len = _tags.length; i < len; i++) {
        // 找到节点,返回下标
        if (_tags[i] == _obj) {
            $("div", $('.U_MD_F_H')[i])[2].innerText = _context[2];
        }
    }
}


//#region 群聊
/**
*   右键群聊显示
*   @param object 右键元素的信息集合
*/
U.MD.F.R.GroupRightClickMenu = function (el, friendgroupinfo) {
    var _el = $('#U_MD_F_G_Group')[0], //右键的菜单
        _child = $(_el).Child(); //子菜单

    $(_el).css({ "display": "block", "zIndex": "999" }); //显示右键菜单
    U.UF.C.rightClickMenuLocation(_el); //右键菜单定位
    //修改分组名字的点击处理
    _child[0].onclick = function () { U.MD.F.J.groupInfoForm(friendgroupinfo, el) };
    _child[1].onclick = function () { U.MD.F.J.groupExit(friendgroupinfo, US.userInfo); };
    $(document).bind("click", function () {
        $('#U_MD_F_G_Group')[0].style.display = "none";
    })
}