//姓名
var $nameInput = $("#name"),
    // 医保卡号
    $sscInput = $("#ybcard").find("input"),
    // 手机号码
    $mobileInput = $("#phonenum").find("input"),
    // 出生日期
    $Birthday = $("#Birthday").find("input"),
    // 户口所在地
    $address = $("#address").find("input"),
    //所属社区
    $committee = $("#committee"),
    //现住址
    $Present_Address = $('#Present_Address').find('input'),
    // 表单的ul容器
    $infoList = $("#info_list"),
    // 下一步按钮
    $nextStep = $('#next_step');
var nation, blood, marryed;
var nationObj = {},
    marryedObj = {},
    bloodObj = {};
var self,docInfo;
var state;//状态
var encryKey;
mui.plusReady(function(){
	//获取公钥
	sendPost('login/public_key', {},null, function(res) {
        if (res.status==200) {
        	var mod = res.data.modulus;
			var exp = res.data.exponent;
			encryKey = RSAUtils.getKeyPair(exp, "", mod);
        }else{
        	mui.toast('获取公钥失败')
        }
    },'GET')
	
	//返回事件
	mui.back = function(){
        backAction();
    }
	var self = plus.webview.currentWebview();
	state = self.state;
	$('#name').text(self.name) 
	$('#idcard').val(self.idCard)
	//身份证提取信息
	var idStr;
	var dd = self.idCard;
	if(dd.length == 18){
		idStr = dd.substring(6,10)+'-'+dd.substring(10,12)+'-'+dd.substring(12,14)
		if(dd.substring(16,17)%2==0){
			$('#sex').attr('data-code','2')
		}else{
			$('#sex').attr('data-code','1')
		}
	}else if(dd.length == 15){
		idStr = '19'+dd.substring(6,8)+'-'+dd.substring(8,10)+'-'+dd.substring(10,12)
		if(dd.substring(14,15)%2==0){
			$('#sex').attr('data-code','2')
		}else{
			$('#sex').attr('data-code','1')
		}
	}
	$Birthday.val(idStr)
    // 获取血型、婚姻、民族字典
    sendPost('/doctor/patient/getNationDict', {}, getPublicDataFailed, function(res) {
        if (res.status==200) {
        	nationObj = res.data
        	addOneContent1(nationObj);
        }else{ 
        	mui.toast('获取民族字典数据失败')
        }
    },'GET')
    sendPost('/doctor/patient/getMarryDict', {}, getPublicDataFailed, function(res) {
        if (res.status ==200) {
            marryedObj = res.data
            addOneContent2(marryedObj);
        }else{
        	mui.toast('获取婚姻字典数据失败')
        }
    },'GET')
    sendPost('/doctor/patient/getBloodDict', {}, getPublicDataFailed, function(res) {
        if (res.status==200) {
            bloodObj = res.data
            addOneContent3(bloodObj);
        }else{
        	mui.toast('获取血型字典数据失败')
        }
    },'GET')
    $Birthday.mobiscroll().date({
        theme: "ios",
        lang: "zh",
        display: "bottom",
        dateFormat: "yy-mm-dd",
        onSelect: function(valueText, inst) {
        }
    })
    
    addOneContent4([{'code':'1','name':'男'},{'code':'2','name':'女'}])
    
    // 弹出框生成民族内容
    function addOneContent1(arr) {
        var len = arr.length;
        var html = "";
        for(var i = 0; i < len; i++) {
            html += ''
        }
        $('#nation').html(html)
        $('#nation').mobiscroll().select({
            theme: "ios",
            lang: "zh",
            placeholder:'请选择民族',
            display: "bottom",
            onSelect: function(valueText, inst) {
				$('#national').attr('data-code',inst._tempValue)
				$('#national').attr('data-name',valueText)
            }
        })
    }
    // 弹出框生成婚姻内容
    function addOneContent2(arr) {
        var len = arr.length;
        var html = "";
        for(var i = 0; i < len; i++) {
            html += ''
        }
        $('#marryed').html(html)
        $('#marryed').mobiscroll().select({
            theme: "ios",
            lang: "zh",
            placeholder:'请选择婚姻情况',
            display: "bottom",
            onSelect: function(valueText, inst) {
				$('#marry').attr('data-code',inst._tempValue)
				$('#marry').attr('data-name',valueText)
            }
        })
    }
    // 弹出框生成血型内容
    function addOneContent3(arr) {
        var len = arr.length;
        var html = "";
        for(var i = 0; i < len; i++) {
            html += ''
        }
        $('#Bloodtype').html(html)
        $('#Bloodtype').mobiscroll().select({
            theme: "ios",
            lang: "zh",
            placeholder:'请选择血型',
            display: "bottom",
            onSelect: function(valueText,inst) {
            	$('#Blood_type').attr('data-code',inst._tempValue)
            	$('#Blood_type').attr('data-name',valueText)
            }
        })
    }
    // 弹出框生成性别
    function addOneContent4(arr) {
        var len = arr.length;
        var html = "";
        for(var i = 0; i < len; i++) {
        	if(arr[i].code == $('#sex').attr('data-code')){
        		html += ''
        	}else{
        		html += ''
        	}
        }
        $('#sexs').html(html)
        $('#sexs').mobiscroll().select({
            theme: "ios",
            lang: "zh",
            placeholder:'请选择性别',
            display: "bottom",
            onSelect: function(valueText, inst) {
				$('#sex').attr('data-code',inst._tempValue)
            }
        })
    }
    
    initExpressAddr();
    //初始化户口所在地选择下拉框数据
	function initExpressAddr(){
	    picker = new mui.PopPicker({
	        layer: 2,
	        layerNames: ["省","市"]
	    });
	    
	    //获取省份信息
	    getDistrict(1, '', 0);
	    bindPickerEvent();
	}
	//绑定picker的事件
	function bindPickerEvent(){
	    $(picker.pickers[0].holder).on('change', function(event) {
	        var eventData = event.originalEvent.detail || {},
	            item = eventData.item;
	        
	        if(!item || !item.value) {
	            return ;
	        }
	        //获取市信息
	        getDistrict(2, item.value, 1);
	    });
	}
    /**
	 * 获得省市区数据
	 * @param {number} type 1-省,2-市,3-区
	 * @param {string} code 省市对应的code
	 * @param {number} level 对应下拉框对应的列 0-省,1-市,2-区
	 */
	function getDistrict(type, code, level){
	    var url = 'common/district',
	        params = {type: type, code: code};
	    
	    sendPost(url,params,getPublicDataFailed,function(res){
	        if(res.status == 200){
	            var data = _.map(res.list, function(o){
	                return {
	                    value: o.code,
	                    text: o.name
	                }
	            });
	            picker.pickers[level].setItems(data);
	        }else{
	            getPublicDataFailed(res);
	        }
	        
	    },'POST','',true)
	}
    //选择地址下拉框
    $("#address").on('click', function(){
        picker.show(function(selected){
            var text = selected[0].text+selected[1].text;                       
            $("#address .select-input").val(text);
            $("#address .select-input").attr('data-code',selected[1].value);                   
        })
    })
    // 获取填写的数据
    var getInputs = function() {
        var data = {
            name: $nameInput.text().trim(), // 姓名
            sex:$('#sex').attr('data-code'),//性别
            sexName:$('#sex').attr('data-code')=='1'?'男':'女',
            ssc: $sscInput.val().trim().toUpperCase(), // 医保卡号
            mobile: $mobileInput.val().trim(), // 手机号码
            Birthday: $Birthday.val(), // 出生日期
            address: $address.val(), // 户口所在地
            addressCode: $address.attr('data-code'), // 户口所在地
            national: $('#national').attr('data-code'), // 民族
            nationalName: $('#national').attr('data-name'),
            marry: $('#marry').attr('data-code'), // 婚姻情况
            marryName: $('#marry').attr('data-name'),
            Blood_type: $('#Blood_type').attr('data-code'), // 血型 
            Blood_typeName: $('#Blood_type').attr('data-name'), 
            countryCode: $committee.attr('data-jwcode'), //居委会  
            countryName: $committee.val(), 
            Present_Address: $Present_Address.val().trim(), //现住址
            idcard:RSAUtils.encryStr(encryKey, $('#idcard').val().trim()),
            idcardAll:$('#idcard').val().trim(),
        }
        return data;
    },
    // 必输验证
    validRequired = function(data) {
        var fieldsStr = "ssc,mobile,Birthday,address,national,marry,Blood_type,countryCode,Present_Address",
            fieldMap = {
                ssc: "医保卡号",
                mobile: "手机号码",
                Birthday: "出生日期",
                address: "户口所在地",
                national: "民族",
                marry: "婚姻情况",
                Blood_type: "血型",
                countryCode: "居委会",
                Present_Address: "现住址"
            },
            fields = fieldsStr.split(","),
            invalidField;
        // 某个字段为""、null、undefined,则该字段不能通过必输校验
        invalidField = _.find(fields, function(key) {
            return !data[key] && data[key] !== 0;
        });
        if(invalidField) {
            mui.toast(fieldMap[invalidField] + '不能为空');
            return false;
        } else {
            return true;
        }
    },
    // 校验医保卡号格式
    validSSC = function(ssc, isshow) {
        var sscReg = /^([a-zA-Z]{1}[a-zA-Z0-9]{8}|[0-9]{12})$/;
        if(!ssc) return;
        if(!sscReg.test(ssc)) {
            $sscInput.css("color", "red")
            if(isshow != false) {
                mui.toast("请填写有效的医保卡卡号");
            }
            return false;
        }
        $sscInput.css("color", "");
        return true;
    },
    // 校验手机号格式
    validMobile = function(mobile) {
        var mobileReg = /^[1][3578][0-9]{9}$/;
        if(!mobile) return;
        if(!mobileReg.test(mobile)) {
            $mobileInput.css("color", "red");
            mui.toast("请填写有效的手机号码");
            return false;
        }
        $mobileInput.css("color", "");
        return true;
    },
    // 输入格式验证
    validFormat = function(data) {
        return validSSC(data.ssc) && (!data.mobile || validMobile(data.mobile))
    },
    // 所有输入验证
    validInputsPromise = function(fun) {
        // 表单数据
        var data = getInputs();
        return Promise.resolve()
            .then(function() { 
                if(!validRequired(data)) throw new Error("必输校验失败");
            })
            .then(function() {
                if(!validFormat(data)) throw new Error("格式校验失败");
            })
            .then(function() {
                return fun&&fun.call(this,data);
            })
            .then(function(flag) {
                if(!flag) throw new Error("数据有效性校验失败");
            })
            .then(function() {
                // 所有校验成功
                $infoList.find('input').css("color", "");
                return data;
            });
    },
    bindEvents = function() {
        //选择居委会
        selectCommittee()
        // 预览
        $nextStep.on('tap', function() {
            validInputsPromise(function(data){
            	plus.storage.setItem("jiandangCase1",JSON.stringify(data))
            	mui.openWindow({
					id: "xinxiqueren",
					url: "xinxiqueren.html",
					createNew:true,
					extras: {
						state:state
					}
				})
            })
        })
        //详细信息
        $(".detail").on('tap', function() {
            validInputsPromise(function(data){
            	plus.storage.setItem("jiandangCase1",JSON.stringify(data))
            	mui.openWindow({
					id: "xinxicaiji",
					url: "xinxicaiji.html",
					extras: {
						state:state
					}
				})
            })
        })
        // 获取焦点时恢复输入的字体颜色
        $('input').on('focus',function() {
            $(this).css("color", "");
        })
        $sscInput.on('blur', function() {
            validSSC($(this).val().trim());
        })
        $mobileInput.on('blur', function() {
            validMobile($(this).val().trim());
        })
    }
    bindEvents()
    
    //返回重置
	function backAction(){
		if(plus.storage.getItem("jiandangCase1")){
			dialog({
			    content: '是否退出自助建档?',
			    okValue: '继续编辑',
			    cancelValue: '确定退出',
			    cancel: function () {
			    	plus.storage.removeItem("jiandangCase1")
			    	plus.storage.removeItem("jiandangCase2")
					closePage()
			    },
			    ok: function() {
			    	return
			    }
			}).showModal();
		}else{
			closePage()
		}
		function closePage(){
			var zzjd = plus.webview.getWebviewById('zizhujiandang');
		    var xxcj = plus.webview.getWebviewById('xinxicaiji');
		    var xxqr = plus.webview.getWebviewById('xinxiqueren');
		    var dljd = plus.webview.getWebviewById('dailijiandang');
	    	if(xxqr){xxqr.close('none')}
	    	if(dljd){dljd.close('none')}
	    	if(xxcj){xxcj.close('none')}
			zzjd.close()
		}
	} 
})
    
function getPublicDataFailed(res) {
    mui.toast("请求失败")
}