var uploadFile = '';

// 加载广告
// appendAdvertisement();

// 加载html结构
loadHtmlJson(function(){
    // 判断是否需要移除机构名称
    if(rules.acActivityOrgs.length === 0) {
      $("#act11739232574395").parents(".form-row.m-b").remove();
    }
});

$(function () {
    setToken();
    // 获取活动标题
    getActivityTitle();
    removeAttr();
    btnBindClick();// 绑定点击事件
    $('#act11739232574395').attr({ 'readonly': 'readonly' });
    getOrgNameFn(function(data){
        $('#act11739232574395').val(data.records.orgName)
    });
    voteDialogBindFn();
    // 加载机构名称
    headerShowOrgName();
})

// 元素点击事件绑定
function btnBindClick() {
    // 返回首页
    $("#act11534485971254").off("click").on("click", function () {
        var _t = getToken();
        transPage('1',activityCode,_t);
    });
    // 排行榜
    $("#act41612547506702").off('click').on("click", function () {
        var _t = getToken();
        var _addParam = 'toRanger=1'
        transPage('1',activityCode,_t,_addParam);
    });

    // 选手主页    
    $("#act4161336684689").off("click").on("click", function () {
        // 判断关注
        isAttention(function(){
            // 判断是否报名
            isSignUp(function(){
                var _t = getToken();
                var urlParam = 'userId='+user.id;
                transPage('3',activityCode,_t,urlParam);
            },function(){
                $.dialog({
                    contentHtml: '<p style="text-align:center;">您还未报名,请到首页报名参加后本次活动!</p>',
                    onClosed: function(){
                        var _t = getToken();
                        transPage('1',activityCode,_t);
                    }
                });
            });
        });
    });

    // 活动秘籍   
    $("#act41613113951133").off("click").on("click", function () {
        $('#html-template-8').removeClass('global-none')
    });

    // 客服二维码弹框
    $("#html-template-9 .modal-close").off("click").on('click', function () {
        var _t = getToken();
        $('#html-template-9').addClass('global-none')
        transPage('1',activityCode,_t);
    });

    
    // 上传图片
    $("#uploadImage").on('change', function () {
        var _file = this.files[0];
        // 图片大于1M压缩
        var filesize = _file.size / 1024 /1024;
        if(filesize > 1) {
            compressImage(_file, function(blob){
               // blob转file
               var newFile = blobTransferFile(blob);
                uploadFileFn(newFile);
            });
        }else {
            uploadFileFn(_file);
        }
    })

    $('#act31419345204861').on('click',function() {
        if($(this).attr('src') != '') {
            $("#uploadImage").click();
        }
    })

    // 确认提交    
    $("#act21359468086634").off("click").on("click", function () {
        var userName = $('#act11738585285947')
        var phonenum = $('#act11739141518360')
        var introDuce = $('#act11739381874636')
        var signInput = $('.sign-form .form-input-group input[c_validate="idcard"]')
        var addInput = JSON.parse(data.dataJson).addGroup
        var uploadImg = $('#act31419345204861 img')

        var flag = validateForm();
        if(!flag) {
            return false;
        }

        // 验证上传图片
        if (uploadImg.attr('src') == '') {
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '请上传一张照片'
            });
            return false
        }
        // var signupId = getQueryString('bindId')
        // var orgId = orgIdFn(signupId).orgId
        // 当前不需要机构名称
        var orgId = rules.acActivityOrgs.length > 0 ? getQueryString('orgId') : null
        var params = {
            orgId: orgId,      //模板变量中获取,机构id
            declaration: introDuce.val(),   //参赛宣言
            imageUrl: uploadFile,  //上传图片地址
            name: userName.val(),  // 姓名
            userPhone: phonenum.val(),   //用户填写的手机号
        }

        // 移除orgId
        orgId === null ? delete params.orgId : ''

        if (addInput.length) {
            for (var i = 0; i < addInput.length; i++) {
                params['x'+ (i+1)] = $('#'+addInput[i].id).val()
            }
        }
        var _token = getToken();

        var authId = getQueryString('auth_id')
        var _header = {
            'content-type': 'application/json',
            'x-token': _token
        }
        if(authId !== null) {
            _header['auth-id'] = authId
        }

        $.ajax({
            type: 'POST',
            headers: _header,
            url: baseUrl + '/ACTIVITY/sz/sign-up/' + activityCode,
            data: JSON.stringify(params),
            success: function (data) {
                if(data.status >= 200 && data.status < 300){
                    $('#html-template-9').removeClass('global-none')
                    // $.dialog({
                    //     showTitle : false,
                    //     contentHtml : '您的资料已成功提交审核中,请耐心等待审核结果',
                    //     onClickOk: function() {
                    //         transPage('1',activityCode,_token);     
                    //     }
                    // });
                }else {
                    // 异常处理
                    $.dialog({
                        contentHtml : '<p style="text-align:center;">'+ data.responseJSON.message +'</p>'
                    });
                }
            },
            error: function(data){
                // 异常处理
                $.dialog({
                    contentHtml : '<p style="text-align:center;">'+ data.responseJSON.message +'</p>'
                });
            }
        })
    });
}

function selectFileImage(fileObj) {
    var file = fileObj;
    //图片方向角 added by lzk  
    var Orientation = null;

    if (file) {
        console.log("正在上传,请稍后...");
        var rFilter = /^(image\/jpeg|image\/png|image\/jpg|image\/gif)$/i; // 检查图片格式  
        if (!rFilter.test(file.type)) {
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '请选择jpeg/jpg/gif/png格式的图片'
            });
            return;
        }
        //获取照片方向角属性,用户旋转控制  
        EXIF.getData(file, function () {
            EXIF.getAllTags(this);
            Orientation = EXIF.getTag(this, 'Orientation');
            //return;  
        });

        var oReader = new FileReader();
        oReader.onload = function (e) {
            //var blob = URL.createObjectURL(file);  
            //_compress(blob, file, basePath);  
            var image = new Image();
            image.src = e.target.result;
            image.onload = function () {
                var expectWidth = this.naturalWidth;
                var expectHeight = this.naturalHeight;

                if (this.naturalWidth > this.naturalHeight && this.naturalWidth > 800) {
                    expectWidth = 800;
                    expectHeight = expectWidth * this.naturalHeight / this.naturalWidth;
                } else if (this.naturalHeight > this.naturalWidth && this.naturalHeight > 1200) {
                    expectHeight = 1200;
                    expectWidth = expectHeight * this.naturalWidth / this.naturalHeight;
                }
                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");
                canvas.width = expectWidth;
                canvas.height = expectHeight;
                ctx.drawImage(this, 0, 0, expectWidth, expectHeight);
                var base64 = null;
                //修复ios  
                if (navigator.userAgent.match(/iphone/i)) {
                    //如果方向角不为1,都需要进行旋转  
                    if (Orientation != "" && Orientation != 1) {
                        switch (Orientation) {
                            case 6://需要顺时针(向左)90度旋转    
                                rotateImg(this, 'left', canvas);
                                break;
                            case 8://需要逆时针(向右)90度旋转   
                                rotateImg(this, 'right', canvas);
                                break;
                            case 3://需要180度旋转  
                                rotateImg(this, 'right', canvas);//转两次  
                                rotateImg(this, 'right', canvas);
                                break;
                        }
                    }
                    base64 = canvas.toDataURL("image/jpeg", 0.8);
                } else if (navigator.userAgent.match(/Android/i)) {// 修复android  
                    var encoder = new JPEGEncoder();
                    base64 = encoder.encode(ctx.getImageData(0, 0, expectWidth, expectHeight), 80);
                } else {
                    if (Orientation != "" && Orientation != 1) {
                        switch (Orientation) {
                            case 6://需要顺时针(向左)90度旋转    
                                rotateImg(this, 'left', canvas);
                                break;
                            case 8://需要逆时针(向右)90度旋转 
                                rotateImg(this, 'right', canvas);
                                break;
                            case 3://需要180度旋转  
                                rotateImg(this, 'right', canvas);//转两次  
                                rotateImg(this, 'right', canvas);
                                break;
                        }
                    }

                    base64 = canvas.toDataURL("image/jpeg", 0.8);
                }
                $("#act31419345204861 img").attr("src", base64);
            };
        };
        oReader.readAsDataURL(file);
    }
}

//对图片旋转处理 
function rotateImg(img, direction, canvas) {
    //最小与最大旋转方向,图片旋转4次后回到原方向    
    var min_step = 0;
    var max_step = 3;
    //var img = document.getElementById(pid);    
    if (img == null) return;
    //img的高度和宽度不能在img元素隐藏后获取,否则会出错    
    var height = img.height;
    var width = img.width;
    //var step = img.getAttribute('step');    
    var step = 2;
    if (step == null) {
        step = min_step;
    }
    if (direction == 'right') {
        step++;
        //旋转到原位置,即超过最大值    
        step > max_step && (step = min_step);
    } else {
        step--;
        step < min_step && (step = max_step);
    }
    //旋转角度以弧度值为参数    
    var degree = step * 90 * Math.PI / 180;
    var ctx = canvas.getContext('2d');
    switch (step) {
        case 0:
            canvas.width = width;
            canvas.height = height;
            ctx.drawImage(img, 0, 0);
            break;
        case 1:
            canvas.width = height;
            canvas.height = width;
            ctx.rotate(degree);
            ctx.drawImage(img, 0, -height);
            break;
        case 2:
            canvas.width = width;
            canvas.height = height;
            ctx.rotate(degree);
            ctx.drawImage(img, -width, -height);
            break;
        case 3:
            canvas.width = height;
            canvas.height = width;
            ctx.rotate(degree);
            ctx.drawImage(img, -width, 0);
            break;
    }
}

// 验证身份证
function validateIDNumber(card) {
    var vcity = {
        11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古',
        21: '辽宁', 22: '吉林', 23: '黑龙江', 31: '上海', 32: '江苏',
        33: '浙江', 34: '安徽', 35: '福建', 36: '江西', 37: '山东', 41: '河南',
        42: '湖北', 43: '湖南', 44: '广东', 45: '广西', 46: '海南', 50: '重庆',
        51: '四川', 52: '贵州', 53: '云南', 54: '西藏', 61: '陕西', 62: '甘肃',
        63: '青海', 64: '宁夏', 65: '新疆', 71: '台湾', 81: '香港', 82: '澳门', 91: '国外'
    }
    // 检查号码是否符合规范,包括长度,类型
    function isCardNo(card) {
        // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
        var reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/
        if (reg.test(card) === false) {
            return false
        }

        return true
    }
    // 取身份证前两位,校验省份
    function checkProvince(card) {
        var province = card.substr(0, 2)
        if (vcity[province] == undefined) {
            return false
        }
        return true
    }
    // 检查生日是否正确
    function checkBirthday(card) {
        var len = card.length
        // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
        if (len == '15') {
            var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/
            var arr_data = card.match(re_fifteen)
            var year = arr_data[2]
            var month = arr_data[3]
            var day = arr_data[4]
            var birthday = new Date('19' + year + '/' + month + '/' + day)
            return verifyBirthday('19' + year, month, day, birthday)
        }
        // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
        if (len == '18') {
            var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X|x)$/
            var arr_data = card.match(re_eighteen)
            var year = arr_data[2]
            var month = arr_data[3]
            var day = arr_data[4]
            var birthday = new Date(year + '/' + month + '/' + day)
            return verifyBirthday(year, month, day, birthday)
        }
        return false
    }
    // 校验日期
    function verifyBirthday(year, month, day, birthday) {
        var now = new Date()
        var now_year = now.getFullYear()
        // 年月日是否合理
        if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {
            // 判断年份的范围(0岁到130岁之间)
            var time = now_year - year
            if (time >= 0 && time <= 130) {
                return true
            }
            return false
        }
        return false
    }
    // 校验位的检测
    function checkParity(card) {
        // 15位转18位
        card = changeFivteenToEighteen(card)
        var len = card.length
        if (len == '18') {
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
            var cardTemp = 0, i, valnum
            for (i = 0; i < 17; i++) {
                cardTemp += card.substr(i, 1) * arrInt[i]
            }
            valnum = arrCh[cardTemp % 11]
            if (valnum == card.substr(17, 1).toUpperCase()) {
                return true
            }
            return false
        }
        return false
    }
    // 15位转18位身份证号
    function changeFivteenToEighteen(card) {
        if (card.length == '15') {
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
            var cardTemp = 0, i
            card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6)
            for (i = 0; i < 17; i++) {
                cardTemp += card.substr(i, 1) * arrInt[i]
            }
            card += arrCh[cardTemp % 11]
            return card
        }
        return card
    }
    // 是否为空
    if (card === '') {
        // alert('请输入身份证号,身份证号不能为空')
        return false
    }
    // 校验长度,类型
    if (isCardNo(card) === false) {
        // alert('您输入的身份证号码不正确,请重新输入')
        return false
    }
    // 检查省份
    if (checkProvince(card) === false) {
        // alert('您输入的身份证号码不正确,请重新输入')
        return false
    }
    // 校验生日
    if (checkBirthday(card) === false) {
        // alert('您输入的身份证号码生日不正确,请重新输入')
        return false
    }
    // 检验位的检测
    if (checkParity(card) === false) {
        // alert('您的身份证校验位不正确,请重新输入')
        return false
    }
    return true
}

// 验证用户姓名
function validateUserName(userName) {
    let state = false
    if (userName !== '') {
        let uName = userName.replace(/\s*/g, '')
        var reg = /^(([a-zA-Z+\.?\·?a-zA-Z+]{1,15}$)|([\u4e00-\u9fa5+\·?\u4e00-\u9fa5+]{1,15}$)|([^\x00-\xff]))/
        if (!reg.test(uName)) {
            state = false
        } else {
            state = true
        }
    }

    return state
}
  
// 验证手机号
function validatePhone(phonenum) {
    let state = false
    if (phonenum !== '') {
        var reg = /^1[3456789]\d{9}$/
        if (!reg.test(phonenum)) {
            state = false
        } else {
            state = true
        }
    }
    return state
}

// 验证输入框
function validateInput($input) {

    var c_len = $input.attr("c_len");
    var c_validateempty = $input.attr("c_validateempty");
    var c_validate = $input.attr("c_validate");
    var c_name = $input.attr('c_name');
    var _value = $input.val();

    // 为空校验
    if (c_validateempty == 'yes' && _value == '') {
        $.dialog({
            type : 'tips',
            autoClose : 3000,
            infoText : c_name + '不能为空'
        });
        return false;
    }

    // 长度校验
    if (_value.length > c_len) {
        $.dialog({
            type : 'tips',
            autoClose : 3000,
            infoText :  c_name + '不能超过' + c_len + '个字'
        });
        return false;
    }

    // 规则校验 c_validate = phone,idcard,username三种类型
    if (c_validate !== ''){
        if(c_validate === 'phone' && !validatePhone(_value)) {// 手机校验
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '手机号格式错误'
            });
            return false;
        } else if(c_validate === 'idcard' && !validateIDNumber(_value)){// 身份证校验
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '身份证格式错误'
            });
            return false;
        } else if(c_validate === 'username' && !validateUserName(_value)){// 用户名称校验
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '用户名格式错误,请输入中文或者英文'
            });
            return false;
        }
    }
    return true;
}

// 验证表单输入框
function validateForm() {
   var inputs = $('.sign-form .form-input-group-inner input');
   var flag = true;
   for(var k =0 ;k < inputs.length; k++){
     flag = validateInput(inputs.eq(k));
     if(!flag){
        break;
     }
   }
   return flag
}

// blob转file
function blobTransferFile(_blob) {
    let _name = (new Date().getTime());
    const _type = _blob.type
    let file = new window.File([_blob], _name, { type: _type })
    if (_type === 'image/svg+xml') {
        _name += '.svg'
        file = new window.File([_blob], _name, { type: _type })
    } else if (_type === 'image/gif') {
        _name += '.gif'
        file = new window.File([_blob], _name, { type: _type })
    } else if (_type === 'image/jpeg') {
        _name += '.jpg'
        file = new window.File([_blob], _name, { type: _type })
    } else if (_type === 'image/png') {
        _name += '.png'
        file = new window.File([_blob], _name, { type: _type })
    } else {
        file = _blob
    }

    return file;
}

// 文件上传
function uploadFileFn(file) {

    showLoading('上传中...');
    var formData = new FormData();
    formData.append('file', file)
    selectFileImage(file)

    var authId = getQueryString('auth_id')
    var _header = {
      'x-token': getToken()
    }
    
    var authUrl = ""
    if(authId !== null) {
      _header['auth-id'] = authId
      authUrl = 'http://auth.icaremgt.com/api-admin-manage/system/components/upload?auth_id='+authId;
    } else {
      authUrl = manageUrl + '/api-admin-manage/system/components/upload';
    }

    $.ajax({
        type: 'POST',
        headers: _header,
        url: authUrl,
        data: formData,
        contentType: false,
        processData: false,
        success: function (data) {
            var data = typeof data == 'string' ? JSON.parse(data) : data
            if(data.code == 200){
                uploadFile = data.records.fileUrl
                $("#uploadImage").parent().addClass('global-none-important')
                $("#act31419345204861").removeClass('global-none')
            }
            hideLoading();
        },
        error: function () {
            $.dialog({
                type : 'tips',
                autoClose : 3000,
                infoText : '上传失败!'
            }); 
            hideLoading();
        }
    })
}