Namespace.register("U.MD.U.F"); //用户找回帐号

//#region 切换找回方式

/**
* 弹出密码找回
*
*/
U.MD.U.F.findPassword = function () {
    var _parent = $("#U_MD_U_L_login"); //登录注册框
    //弹出密码找回
    var _child = _parent.Child(); //获取登录注册找回密码的div
    _child[1].style.display = "none"; //隐藏注册 
    _child[2].style.display = "none";  //隐藏登录
  
    $("div", _child[0])[2].innerHTML = "找回密码";
    //头部设置内容
    var _head = $(_child[0]).childs()[1];
    $(_head).addAttrArray({
        "innerHTML": "",
        "onclick": null,
        "className": "",
        "title": ""
    });
    //调用找回密码的上下部的处理,设置为第一步
    U.MD.U.F.findPasswordProcessing($(_child[3]).Child()[1], 0);
    //显示的默认密保找回处理
    U.MD.U.F.switchEmailOrSecurityFind($("span", _child[3])[0], 'security');
    _child[3].style.display = "block"; //显示找回密码
}


/**
* 手机号找回后的上下步操作处理
*
* @param  {element} 找回密码元素
* @param  {int} 第几步
*/
U.MD.U.F.findPasswordProcessing = function (el, displaynum) {
    var _inputs,
        _len,
        _bottom,
        _child = $(el).Child(), //获取找回和确认找回的两个步骤的元素
        _parentel = $(el).Parent();
    //找回密码确认上下步处理
    for (i = 0; i < _child.length; i++) {
        //判断显示的隐藏的区域处理
        if (i == displaynum) { //如果是显示
            _child[i].style.display = "block";
            _inputs = $("input", _child[i]); //获取显示的元素下的input元素
            _len = _inputs.length; //输入框的总长度 
        }
        else { //隐藏
            _child[i].style.display = "none";
        }
    }
    //使用聚焦和释放的方式,重新设置input的初始化样式
    while (_len--) {
        _inputs[_len].value = "";
        _inputs[_len].innerText = "6-20位字符或数字";
        _inputs[_len].focus();
        _inputs[_len].blur();
    }
}

/**
* 切换找回的方式,邮箱,密保,手机切找回的方式
*
*/
U.MD.U.F.switchEmailOrSecurityFind = function (el, typename) {
    var _input,
        _tempel,
        _parentel = $(el).Parent(2),
        _childs = $(_parentel).Child(),
        _inputs = $("input", _parentel),
        _span = $("span", _parentel),
        _is = $("i", _parentel),
        _bottom = $(_parentel).Child()[2],
        _code = $("#U_MD_U_L_Overflow_Code")[0]; //验证码框
    //如果是邮箱找回处理
    if (typename == "email") {
        _input = _inputs[1];
        _tempel = $$("input", {
            "type": "text",
            "onblur": function () {
                U.MD.U.F.checkEmail(this); $(this).parentElement(2).removeClass('U_MD_U_L_Box_Border');
            },
            "onfocus": _input.onfocus,
            "onkeyup": _input.onkeyup
        });
        _input.parentNode.replaceChild(_tempel, _input);
        _is[1].innerText = "请输入邮箱";
        _span[1].className = "U_MD_U_F_T_Hover";
        _span[0].className = "";
        _code.style.display = "none"; //验证码框
        _bottom.onclick = function () {
            U.MD.U.F.findPasswordByEmail(_childs[1]);
        }
    }
    //如果是手机找回处理
    else if (typename == 'security') {//更改style
        _input = _inputs[1];
        _tempel = $$("input", {
            "type": "text",
            "onblur": function () {
                U.MD.U.F.checkPhone(this); $(this).parentElement(2).removeClass('U_MD_U_L_Box_Border');
            }, //更改onblur事件
            "onfocus": _input.onfocus, //更改onfocus事件
            "onkeyup": _input.onkeyup//更改onkeyup事件
        });
        _input.parentNode.replaceChild(_tempel, _input); //替换
        _is[1].innerText = "请输入手机号";
        _span[0].className = "U_MD_U_F_T_Hover"; //更改class
        _span[1].className = ""; //更改class
        _code.style.display = "block"; //验证码框
        _inputs[3].value = "发送"; //验证码框内的value
        _inputs[3].onclick = function () {//验证码框的点击事件
            U.MD.U.F.userName(U.MD.U.F.phoneSend); //验证用户名是否存在
        }
        _bottom.onclick = function () {//设定提交按钮的点击事件
            U.MD.U.F.phoneConfirm(_childs[1]); //确认验证码
        }
    }
}

//#endregion

//#region 手机找回

/**
* 手机号设置
*
* @param  {element} 手机号设置处理
*/
U.MD.U.F.checkSecurityCode = function (el) {
    var _inputs = $("input", el), //输入框
        _username = _inputs[0], //密码
        _phone = _inputs[1]; //确认手机号
    if (U.MD.U.F.checkUserName(_username) && U.MD.U.F.checkPhone(_phone)) {//判断账号和手机号是否输入指定格式
        U.MD.U.F.phoneCheckSecurityCode(["", el, _username, _phone])//调用后台处理用户的修改密码
    }
}

/**
* 手机发送验证码
*
*/
U.MD.U.F.phoneSend = function () {
    var _username = $("#U_MD_U_L_Box_height")[0].children[0].children[0].value; //用户名
    U.A.Request(US.CD, [US.DB, "UseStudio_Users", "GetUserinfoByUserName", _username], function (r) {//根据用户名获取用户信息
        if (r.value[0] == undefined) { //判断是否输入手机号
            U.MD.U.R.setInputStyle($("#userphone")[0].children[0], {//给$("#userphone")[0].children[0] 设置 一个红色边框的样式 让用户知道你输入的手机号与账号设置的手机号不匹配
                "color": "red",
                "textAlign": "right",
                "display": "block"
            }, "输入的手机号与账号不匹配");
            return false; //如果输入手机号与账号设置的手机号不匹配 return false
        }
        if (r.value[0].UserTelephoneNumber != $("#userphone")[0].children[0].children[0].value) {//如果输入手机号与账号设置的手机号不匹配)
            U.MD.U.R.setInputStyle($("#userphone")[0].children[0], {//给$("#userphone")[0].children[0] 设置 一个红色边框的样式 让用户知道你输入的手机号与账号设置的手机号不匹配
                "color": "red",
                "textAlign": "right",
                "display": "block"
            }, "输入的手机号与账号不匹配");
            return false; //如果输入手机号与账号设置的手机号不匹配 return false
        }
        else {//如果输入手机号与账号匹配 向手机发送验证码
            //        U.A.Request("http://api.cloudsql.1473.cn/postnumber", [$("#userphone")[0].children[0].children[0].value], function (r) {
            //            console.log(r);
            //        });

            var _xhttp = new XMLHttpRequest(); //XMLHttpRequest 对象用于在后台与服务器交换数据
            _xhttp.onreadystatechange = function () {//每当 readyState 属性改变时,就会调用该函数。
                if (this.readyState == 4) {//发送成功后
                    if (this.status == 201) {
                        U.Alert('发送成功'); //弹出发送成功
                        U.MD.U.F.setTime($("#U_MD_U_L_Overflow_Code")[0].children[1].children[0]); //60秒倒计时
                    } else {
                        U.Alert(JSON.parse(this.response).err || '验证码发送失败,请重新发送...');
                    }
                }
            };
            _xhttp.open("POST", "http://api.cloudsql.1473.cn/postnumber", true); //指定和服务器端交互的HTTP方法,URL地址及其他请求信息
            _xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //向一个打开但未发送的请求设置或添加一个 HTTP 请求
            _xhttp.withCredentials = true; //发送cookie等认证信息到服务端
            _xhttp.send("number=" + $("#userphone")[0].children[0].children[0].value); //$("#userphone")[0].children[0].children[0].value 发送的手机号输入的框
            //            U.A.Request.Post("http://api.cloudsql.1473.cn/postnumber", { number: $("#userphone")[0].children[0].children[0].value }, function () {
            //                U.MD.U.F.setTime($("#U_MD_U_L_Overflow_Code")[0].children[1].children[0]); //60秒倒计时
            //                U.Alert('发送成功'); //弹出发送成功
            //            });
        }
    })

}

/**
* 手机确认验证码
*
* @param  {element} 确认验证码的按钮
*/
U.MD.U.F.phoneConfirm = function (el) {
    var _xhttp = new XMLHttpRequest(); //XMLHttpRequest 对象用于在后台与服务器交换数据
    _xhttp.onreadystatechange = function () {//每当 readyState 属性改变时,就会调用该函数
        if (this.readyState == 4) {//验证成功后
            if (this.status == 201) {
                U.MD.U.F.checkSecurityCode(el); //手机号设置
                U.Alert("验证成功"); //弹出验证成功
            } else {
                U.Alert(JSON.parse(this.response).err || "验证码有误");
            }
        }
    };
    _xhttp.open("POST", "http://api.cloudsql.1473.cn/verifi", true); ////指定和服务器端交互的HTTP方法,URL地址及其他请求信息
    _xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //向一个打开但未发送的请求设置或添加一个 HTTP 请求
    _xhttp.withCredentials = true; //发送cookie等认证信息到服务端
    _xhttp.send("code=" + $("#U_MD_U_L_Overflow_Code")[0].children[0].children[0].value); //$("#U_MD_U_L_Overflow_Code")[0].children[0].children[0].value 验证码输入的框
}
/**
* 手机重新发送验证码倒计时
* @param  {object} 倒计时的对象
* @param  {number} 倒计时的时间(秒数)
*/
U.MD.U.F.setTime = function (obj, countdown) {
    var countdown = 60;
    var _settime = setInterval(function () { //setInterval(需要执行的javascript代码,在执行代码前需等待的毫秒数)
        if (countdown == 0) { //倒计时变量为0 
            obj.removeAttribute("disabled"); //让obj可以使用
            obj.value = "重新获取验证码";
            clearInterval(_settime); //停止倒计时
            return;
        } else {//如果countdown不等于零 每秒countdown会减少1
            obj.setAttribute("disabled", true); //禁用obj
            obj.value = "重新发送(" + countdown + ")"; //显示倒计时的事件
            countdown--; //倒计时时间 -1S
        }
    }, 1000);
}

/**
* 验证用户名是否存在
*
* @param  {function} cb  回调函数
*/
U.MD.U.F.userName = function (cb) {
    U.A.Request(US.USER, ["CheckUserName", U_MD_U_L_Box_height.children[0].children[0].value], //验证用户名是否存在
    function (r) {//回调函数
        var _str = U.UF.C.jsonToStr(r.value); //序列化json为字符串
        if (_str == "false") {//如果用户名不存在
            U.MD.U.R.setInputStyle(U_MD_U_L_Box_height, {//如果不存在 用户名的框变红色 并且提示 用户名不存在
                "color": "red",
                "textAlign": "right",
                "display": "block"
            }, "用户名不存在");
        }
        cb(); //回调函数
    })
}

/**
* 手机号设置处理
*
* @param  {object} 数据库匹配手机号是否正确
*/
U.MD.U.F.phoneCheckSecurityCode = function (r) {
    var _bottom,
        _childs,
        _username = r[2], //输入密码框
        _enterpassword = r[3], //确认密码框
        _el = $(_username).Parent(4)
    ;
    //如果密保匹配成功处理
    if (r) {
        //如果账号和手机号匹配成功的处理
        U.MD.U.F.findPasswordProcessing(_el, 1); //手机找回的步骤
        _bottom = $(_el.parentNode).Child()[2]; //得到确认框
        _childs = $("input", _el); //获取所有的输入
        //点击事件处理
        _bottom.onclick = function () {
            U.MD.U.F.setNewUserPassword(r, _childs[1]); //新密码设置
        };
    }
    else {
        //账号或者密保错误
        U.MD.U.R.setInputStyle(_enterpassword, {//给_enterpassword 设置 一个红色边框的样式 让用户知道用户输入账号或者密保错误
            "color": "red",
            "textAlign": "right",
            "display": "block"
        }, "账号或者密保错误");
    }
}

/**
* 新密码设置
*
* @param  {string} 用户id
* @param  {string} 密码
* @param  {string} 确认密码
* @param  {string} 用户id
*/
U.MD.U.F.setNewUserPassword = function (userinfo, phone) {
    //判断用户输入的密码是否正确的处理
    var _newpassword = userinfo[1].children[1].children[0].children[0].children[0].value; //密码
    var _newpasswordt = userinfo[1].children[1].children[1].children[0].children[0].value; //再次输入密码
    if (U.MD.U.F.checkConfirmPassword(_newpassword, _newpasswordt)) {//如果 密码和再次输入的密码 相同
        U.A.Request(US.USER, ["UpdateUserPasswordByOldPhoneNumber", phone.value, _newpassword], //修改密码
                    U.MD.U.F.asynSetNewUserPassword); //修改密码成功后执行的函数
    }
}


/**
* 新密码设置
*
* @param  {object} 设置密码成功的异步ajax对象
*/
U.MD.U.F.asynSetNewUserPassword = function (r) {
    if (r.value) {
        U.alert("修改密码成功,请登录");
        U.MD.U.L.login(); //直接回到登录页面
    };
}

//#endregion

//#region 通过邮箱找回


/**
* 通过邮箱找回
*
* @param  {element} 输入框所在的位置
*/
U.MD.U.F.findPasswordByEmail = function (el) {
    var _inputs = $("input", el),
        _username = _inputs[0],
        _email = _inputs[1];
    //判断是否发送邮箱
    if (U.MD.U.F.checkEmail(_email) && U.MD.U.F.checkUserName(_username)) {
        U.A.Request(US.USER, ["FindPasswordByEmail", _username.value, _email.value], U.MD.U.F.asynFindPasswordByEmail);
    }
}

/**
* 通过邮箱找回
*
* @param  {object} ajax返回的值
*/
U.MD.U.F.asynFindPasswordByEmail = function (r) {
    //成功发送
    if (r.value == "2") {
        U.alert("已经发送邮箱,请及时查看密码");
        U.MD.U.L.init();
        //U.MD.U.L.login(); //直接回到登录页面
    }
    //账号不存在处理
    else if (r.value == "0") {
        U.alert("您输入的账号不存在");
    }
    //邮箱和账号不匹配处理
    else if (r.value == "1") {
        U.alert("邮箱账号不匹配");
    }
}

//#endregion

//#region 密码和密保检查

/**
*  判断有限是否正确
*
* @param  {object} 输入用户名的框
*/
U.MD.U.F.checkEmail = function (inputel) {
    var _email = inputel.value; //获取用户名
    //输入为空不做变化
    if (_email == "") {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "请输入邮箱"); //输入的用户名为空的样式处理
    }
    //注册的用户不符合要求
    else if (!U.UF.S.Email.test(_email)) {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'right' }, "请输入正确邮箱"); //注册用户名不符合提示
    }
    else {
        return true;
    }
    return false;
}

/**
*  手机号输入格式检查
*
* @param  {object} 输入手机号的框
*/
U.MD.U.F.checkPhone = function (inputel) {
    var _password = inputel.value; //输入手机号的value
    //如果没有输入手机号
    if (_password == "") {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "请输入手机号"); //没有输入手机号的提示
    }
    //输入的手机号的格式不对
    else if (!/^1[3|4|5|8][0-9]\d{4,8}$/.test(_password)) {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", "color": "red", 'textAlign': 'right' }, "请输入有效手机号"); //输入的手机号有问题
    }
    else {
        return true;
    }
    return false;
}

/**
*  密码输入格式检查
*
* @param  {object} 输入密码的框
*/
U.MD.U.F.checkPass = function (inputel) {
    var _password = inputel.value;
    //如果没有输入密码
    if (_password == "") {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "6-20位字符或数字"); //没有输入密码的提示
    }
    //输入的密码的格式不对
    else if (!U.UF.S.PassWord.test(_password)) {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", "color": "red", 'textAlign': 'right' }, "6-20位字符或数字"); //输入的密码有问题
    }
    else {
        return true;
    }
    return false;
}

/**
*  验证码输入格式
*
*/

U.MD.U.F.Verification = function (inputel) {
    var _code = inputel.value;
    //如果没有输入验证码
    if (_code == "") {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "请输入验证码"); //没有输入验证码的提示
    }
    //输入的验证码的格式不对
    else if (!/^\d{4,6}$/.test(_code)) {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", "color": "red", 'textAlign': 'right' }, "请输入4-6位数的验证码"); //输入的验证码有问题
    }
    else {
        return true;
    }
    return false;
}

/**
*  判断输入框的值是否是账号或者邮箱
*
*/
U.MD.U.F.checkUserName = function (inputel) {
    var _username = inputel.value; //获取用户名
    //输入为空不做变化
    if (_username == "") {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "云端账号"); //输入的用户名为空的样式处理
    }
    //注册的用户不符合要求
    else if (!U.UF.S.UserName.test(_username)) {
        U.MD.U.R.setInputStyle(inputel, { "display": "block", 'textAlign': 'right' }, "4-14位数字或者字母"); //注册用户名不符合提示
    }
    else {
        return true;
    }
    return false;
}

/**
* 判断输入密码和确认密码是否一致处理
*
* @param  {element} 密码
* @param  {element} 确认密码
*/
U.MD.U.F.checkConfirmPassword = function (inputo, inputt) {
    var _password = inputt.value;
    //如果没有输入密码
    if (_password == "") {
        U.MD.U.R.setInputStyle(inputt, { "display": "block", 'textAlign': 'left', 'marginRight': '0px' }, "6-20位字符或数字"); //没有输入密码的提示
    }
    //输入的密码的格式不对
    else if (!U.UF.S.PassWord.test(_password)) {
        U.MD.U.R.setInputStyle(inputt, { "display": "block", "color": "red", 'textAlign': 'right' }, "6-20位字符或数字"); //输入的密码有问题
    }
    //输入密码和确认密码不相同
    else if (inputo.value != inputt.value) {
        U.MD.U.R.setInputStyle(inputt, { "display": "block", "color": "red", 'textAlign': 'right' }, "密码不一致"); //输入的密码有问题
    }
    else {
        return true;
    }
    return false;
}

//#endregion