
/**
 * 打印错误信息
 * @param error: 错误内容
 */
iError = function (error) {
    Error.print(error);
};

/**
 * 注册点击事件
 * @param dom: Dom对象
 * @param handle: 处理函数
 * @param useCapture:冒泡顺序
 */
iTapEvent = function (dom, handle, useCapture) {
    dom && dom.addEventListener.call(dom, 'click', handle, useCapture);
};

/**
 * 取消事件冒泡
 * @param e: 事件对象
 */
iCancelEvent = function (e) {
    if (e && e.stopPropagation) {
        e.stopPropagation();
    } else {
        window.event.cancelBubble = true;
    }
};

/**
 * 动态创建CSS
 * @param text: CSS内容
 */
iCreateCss = function (text) {
    var domStyle = document.querySelector('style');
    var domText = document.createTextNode(text);

    if (domStyle) {
        domStyle.appendChild(domText);
    } else {
        var domHead = document.head || document.getElementsByTagName('head')[0];

        domStyle = document.createElement('style');
        domStyle.type = 'text/css';

        domStyle.appendChild(domText);
        domHead.appendChild(domStyle);
    }
};

/**
 * 判断是否为空
 * @param str: 字符串/对象
 * @return 是/否
 */
iIsEmpty = function (obj) {
    if (obj instanceof Object) {
        for (var k in obj) {
            return false;
        }

        return true;
    } else {
        return (obj == null || obj === '');
    }
};
/**
 * 将JSON对象转换为JSON字符串
 * @param json: JSON对象
 * @return: JSON字符串
 */
iJson2Str = function (json) {
    return JSON.stringify(json);
};

/**
 * 将JSON字符串转换为JSON对象
 * @param str: JSON字符串
 * @return: JSON对象
 */
iStr2Json = function (str) {
    return JSON.parse(str);
};

/**
 * 打印日志
 * @param content: 日志内容
 */
iLog = console.log.bind(console);
/**
 * 判断是否微信浏览器
 */
function isWeixinBrowser() {
    var agent = navigator.userAgent.toLowerCase();
    if (agent.match(/MicroMessenger/i) == 'micromessenger') {
        return true;
    } else {
        return false;
    }
}
/**
 * 验证邮箱
 * @param val: 邮箱字符串
 * @return: true(是)/false(否)
 */
iIsEmail = function (val) {
    var reg = /^([.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
    return reg.test(val);
};
/**
 * 验证是否手机号码
 * @param val: 手机号码字符串
 * @return: true(是)/false(否)
 */
iIsPhone = function (val) {
    var reg = /^1[\d]{10}$/;
    return reg.test(val);
};

/**
 * 验证密码
 * @param {String} val: 密码字符串
 * @return: {Boolean} true(是)/false(否)
 */
iIsPwd = function (val) {
    var reg = /(?!^\d+$)(?!^[a-zA-Z]+$)[0-9a-zA-Z]{6,20}$/;
    return reg.test(val);
};
/**
 * 将数字字符串转换为数字
 * @param str: 原字符串
 * @return: 数字
 */
iInt = function (str) {
    return parseInt(str, 10);
};

/**
 * 将浮点数字符串转换为浮点数
 * @param str: 浮点数字符串
 * @param precision: 精度(默认:2)
 * @return: 浮点数
 */
iFloat = function (str, precision) {
    var ret = parseFloat(str);

    if (precision == null) {
        precision = 2;
    }

    ret = ret.toFixed(precision);
    return parseFloat(ret);
};

/**
 * 将整数格式化为指定位数的字符串
 * @param no: 整数
 * @param len: 位数
 * @return: 新字符串
 */
iNoStr = function (no, len) {
    var ret = String(no);

    len -= ret.length;

    if (len > 0) {
        for (var i = 0; i < len; i++) {
            ret = '0' + ret;
        }
    }

    return ret;
};
/**
 * 遍历数组/对象
 * @param obj: 原数组/对象
 * @param callback: 回调函数(v:值,k:对象键字符串/数组索引)
 * @return: 回调函数返回true时的元素值
 */
iEach = (function () {
    var _isArrayLike = function (obj) {
        var length = !!obj && 'length' in obj && obj.length,
            type = iType(obj);

        if (type === 'function' || obj != null && obj === obj.window) {
            return false;
        }

        return type === 'array' || length === 0 ||
            typeof length === 'number' && length > 0 && (length - 1) in obj;
    };

    return function (obj, callback) {
        var k = 0;

        if (!callback) {
            return null;
        }

        if (_isArrayLike(obj)) {
            var len = obj.length;

            for (k = 0; k < len; k++) {
                if (callback.call(obj[k], obj[k], k)) {
                    return obj[k];
                }
            }
        } else {
            for (k in obj) {
                if (callback.call(obj[k], obj[k], k)) {
                    return obj[k];
                }
            }
        }

        return null;
    };
})();

/**
 * 格式化日期字符串中的-为/
 * @param data: 日期(时间)字符串
 * @return: 新字符串
 */
iFmtDate = function (data) {
    return data.replace(/-/g, '/');
};

/**
 * 将日期时间对象转换为日期字符串
 * @param date: 日期时间对象
 * @param spt: 间隔符(默认:"-")
 * @return: 新字符串
 */
iDate = function (date, spt) {
    if (spt == null) {
        spt = '-';
    }

    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();

    return iNoStr(year, 4) + spt +
        iNoStr(month, 2) + spt +
        iNoStr(day, 2);
};

/**
 * 将日期时间对象转换为时间字符串
 * @param date: 日期时间对象
 * @param spt: 间隔符(默认:":")
 * @return: 新字符串
 */
iTime = function (date, spt) {
    if (spt == null) {
        spt = ':';
    }

    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();

    return iNoStr(hour, 2) + spt +
        iNoStr(minute, 2) + spt +
        iNoStr(second, 2);
};

/**
 * 将日期时间对象转换为日期时间字符串
 * @param date: 日期时间对象
 * @param dateSpt: 日期间隔符(默认:"-")
 * @param timeSpt: 时间间隔符(默认:":")
 * @param connSpt: 日期、时间间隔符(默认:" ")
 * @return: 新字符串
 */
iDateTime = function (date, dateSpt, timeSpt, connSpt) {
    if (connSpt == null) {
        connSpt = ' ';
    }
    return iDate(date, dateSpt) + connSpt +
        iTime(date, timeSpt);
};

/**
 * 将当前日期时间转换为日期字符串
 * @param spt: 日期间隔符(默认:"-")
 * @return: 新字符串
 */
iCurDate = function (spt) {
    var date = new Date();
    return iDate(date, spt);
};

/**
 * 将当前日期时间转换为时间字符串
 * @param spt: 时间间隔符(默认:":")
 * @return: 新字符串
 */
iCurTime = function (spt) {
    var date = new Date();
    return iTime(date, spt);
};

/**
 * 将当前日期时间转换为日期时间字符串
 * @param dateSpt: 日期间隔符(默认:"-")
 * @param timeSpt: 时间间隔符(默认:":")
 * @param connSpt: 日期、时间间隔符(默认:" ")
 * @return: 新字符串
 */
iCurDateTime = function (dateSpt, timeSpt, connSpt) {
    var date = new Date();
    return iDateTime(date, dateSpt, timeSpt, connSpt);
};