//两端去空格函数
String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); }
// 记录cookie
jQuery.cookie = function (name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie 
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE 
        }
        var path = options.path ? '; path=' + options.path : '; path=/';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie 
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want? 
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
jQuery.fn.cookie = function (name, value, options) {
    return $.cookie(name, value, options);
}
jQuery.storage = function (key, value) {
    var isAndroid = (/android/gi).test(navigator.appVersion);
    var uzStorage = function () {
        var ls = window.localStorage;
        if (isAndroid) {
            ls = window.localStorage;
        }
        return ls;
    };
    //如果只有一个参数，为读取
    if (arguments.length === 1) {
        var ls = uzStorage();
        if (ls) {
            var v = ls.getItem(key);
            if (!v) { return; }
            if (v.indexOf('obj-') === 0) {
                v = v.slice(4);
                return JSON.parse(v);
            } else if (v.indexOf('str-') === 0) {
                return v.slice(4);
            }
        }
    }
    //如果两个参数，为写入，第一个为键，第二个为值
    if (arguments.length === 2) {
        if (value != null) {
            var v = value;
            if (typeof v == 'object') {
                v = JSON.stringify(v);
                v = 'obj-' + v;
            } else {
                v = 'str-' + v;
            }
            var ls = uzStorage();
            if (ls) {
                ls.setItem(key, v);
            }
        } else {
            var ls = uzStorage();
            if (ls && key) {
                ls.removeItem(key);
            }
        }
    }
}
//记录页面级cookie
jQuery.fn.pagecookie = function (name, value, options) {
    //标页面的名称，不含后缀名
    var url = String(window.document.location.href);
    var pos = url.lastIndexOf("/");
    if (pos == -1) {
        pos = url.lastIndexOf("\\")
    }
    var filename = url.substr(pos + 1);
    filename = filename.substr(0, filename.indexOf("."))
    //页面级cookie名称
    name = "(" + filename + ")" + name;
    if (typeof value != 'undefined') {
        $().cookie(name, value, options);
    } else {
        return $().cookie(name);
    }
}
//打开模式窗口
jQuery.fn.ModalWindow = function (page, width, height) {
    //屏幕宽高
    var winWidth = window.screen.width;
    var winHeight = window.screen.height;
    //如果为空，则为浏览器窗口一半宽高
    width = width != null && width != 0 && width != "" ? Number(width) : winWidth / 2;
    height = height != null && height != 0 && height != "" ? Number(height) : winHeight / 2;
    //如果宽高小于100，则默认为浏览器窗口的百分比
    width = width > 100 ? Number(width) : winWidth * Number(width) / 100;
    height = height > 100 ? Number(height) : winHeight * Number(height) / 100;
    //窗口位置，使其显示在屏幕中央
    var left = (winWidth - width) / 2;
    var top = (winHeight - height) / 2;
    var arr = showModalDialog(page, "", "dialogWidth:" + width + "px; dialogHeight:" + height + "px; dialogTop=" + top + "; dialogLeft=" + left + ";status:0;scroll:0;help:0");
    var url = window.location.href;
    if (arr == "refresh") window.location.href = url;
}
//获取当前鼠标坐标
jQuery.fn.Mouse = function (e) {
    var x = 0, y = 0;
    var e = e || window.event;
    if (e.pageX || e.pageY) {
        x = e.pageX;
        y = e.pageY;
    } else if (e.clientX || e.clientY) {
        x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
        y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    }
    return { 'x': x, 'y': y };
};
//判断鼠标是否处于某元素之个
//element:页面元素，jquery对象
//return:返回bool值，如果处在元素之前返回true,否则返回false;
jQuery.fn.isMouseArea = function (element, e) {
    if (element.length < 1) return false;
    var mouse = $().Mouse(e);
    var tmp = false;
    element.each(
        function () {
            var offset = $(this).offset();
            var pxx = mouse.x > offset.left && mouse.x < (offset.left + $(this).width());
            var pyy = mouse.y > offset.top && mouse.y < (offset.top + $(this).height());
            tmp = pxx && pyy;
            if (tmp) return false;
        }
    );
    return tmp;
};
//获取文件大小，带单位，如kb,mb；
//参数：size文件字节数
jQuery.fn.getSizeUnit = function (fileSize) {
    var size = Number(fileSize);
    if (size == null) return;
    var name = new Array("B", "Kb", "Mb");
    var tm = 0;
    while (size >= 1024) {
        size /= 1024;
        tm++;
    }
    size = Math.round(size * 100) / 100;
    return size + " " + name[tm];
}
//加入收藏
jQuery.fn.addFav = function (title) {
    var url = window.location.href;
    if (document.all) {
        window.external.addFavorite(url, title);
        return true;
    }
    else if (window.sidebar) {
        window.sidebar.addPanel(title, url, "");
        return true;
    }
    //未成功
    return false;
}
//获取QueryString参数
jQuery.fn.getPara = function (url, key) {
    //将参数转换成数组格式
    function getParas(url) {
        if (url.indexOf("?") > -1) url = url.substring(url.lastIndexOf("?") + 1);
        var tm = url.split('&');
        var paras = new Array();    //要返回的数组
        for (var i = 0; i < tm.length; i++) {
            var arr = tm[i].split('=');
            if (arr.length < 2) continue;
            var val = decodeURI(arr[1]).replace(/<[^>]+>/g, "");
            paras.push({ key: arr[0].toLowerCase(), value: val });
        }
        return paras;
    }
    if (arguments.length == 0) return getParas(String(window.document.location.href));
    if (arguments.length == 1) {
        key = arguments[0];
        url = String(window.document.location.href);
    }
    var arr = getParas(url);
    var value = "";
    for (var i = 0; i < arr.length; i++) {
        if (key.toLowerCase() == arr[i].key) {
            value = arr[i].value;
            break;
        }
    }
    if (value.indexOf("#") > -1) value = value.substring(0, value.indexOf("#"));
    return value;
}

//添加链接地址的参数
//url:超链接
//key:参数的名称
//value:参数的值
jQuery.fn.setPara = function (url, key, value) {
    if (isNull(url) || isNull(key)) return url; //如果网址或参数名为空，则返回
    //如果没有参数，直接添加
    if (url.indexOf("?") < 0) return url + "?" + key + "=" + value;
    //如果已经有参数
    var paras = getParas(url);
    paras = setPara(paras, key, value);
    url = url.substring(0, url.lastIndexOf("?"));
    return url + "?" + stringPara(paras);
    function isNull(data) {
        return (data == "" || data == undefined || data == null) ? true : false;
    }
    //将参数转换成数组格式
    function getParas(url) {
        if (url.indexOf("?") > -1) url = url.substring(url.lastIndexOf("?") + 1);
        var tm = url.split('&');
        var paras = new Array();    //要返回的数组
        for (var i = 0; i < tm.length; i++) {
            var arr = tm[i].split('=');
            if (arr.length < 2) continue;
            paras.push({ key: arr[0].toLowerCase(), value: arr[1] });
        }
        return paras;
    }
    //设置参数，如果不存在则添加
    function setPara(paras, key, value) {
        var isexist = false;
        for (var i = 0; i < paras.length; i++) {
            if (paras[i].key == key.toLowerCase()) {
                isexist = true;
                paras[i].value = value;
                break;
            }
        }
        if (!isexist) paras.push({ key: key, value: value });
        return paras;
    }
    //将数组的参数转换为url参数格式
    function stringPara(paras) {
        var str = "";
        for (var i = 0; i < paras.length; i++) {
            if (paras[i].value == null) continue;
            str += paras[i].key + "=" + paras[i].value + "&";
        }
        if (str.length > 0) {
            if (str.charAt(str.length - 1) == "&") {
                str = str.substring(0, str.length - 1)
            }
        }
        return str;
    }
}
//获取文件名
jQuery.fn.getFileName = function () {
    var url = String(window.document.location.href);
    var pos = url.lastIndexOf("/");
    if (pos == -1) {
        pos = url.lastIndexOf("\\")
    }
    var filename = url.substr(pos + 1);
    filename = filename.substr(0, filename.indexOf("."))
    return filename;
};
//获取根路径
jQuery.fn.getHostPath = function () {
    var url = window.location.href;
    var pathName = window.document.location.pathname;
    var localhostPath = url.substring(0, url.indexOf(pathName) + 1);
    return localhostPath;
};
//在线浏览pdf文件
jQuery.fn.PdfViewer = function (file) {
    var viewer = "/Utility/PdfViewer/viewer.html";
    if (file.indexOf("?") > -1) file = file.substring(0, file.indexOf("?"));
    viewer += "?file=" + encodeURIComponent(file);
    //window.location.href = viewer;
    return viewer;
}
//格式化日期
Date.prototype.ToString = function () {
    var year = this.getFullYear();
    var month = this.getMonth() + 1;
    var date = this.getDate();
    //
    var hour = this.getHours();
    var minu = this.getMinutes();
    var sec = this.getSeconds();
    //
    var str = year + "/" + month + "/" + date + " " + hour + ":" + minu + ":" + sec;
    return str;
}
Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
//将时间转换为指定的时区
Date.prototype.toLocal = function (timezone) {
    //本地时间与格林威治时间的时间差，单位为小时
    var gmtHours = -new Date().getTimezoneOffset() / 60;
    if (typeof (timezone) != "number") timezone = Number(timezone);
    var minutes = (timezone - gmtHours) * 60;
    var local = this;
    local.setMinutes(local.getMinutes() - minutes);

    return local;
}
String.prototype.format = function (args) {
    if (arguments.length < 1) return this;
    var primary = this;
    for (var i = 0; i < arguments.length; i++) {
        primary = primary.replace(eval('/\\{' + i + '\\}/g'), arguments[i]);
    }
    return primary;
}
//获取信息
//service:webservice请求页
//sfunc:webservice服务中的方法
//para:参数
//successFunc:调取成功后的方法
jQuery.fn.SoapAjax = function (service, sfunc, para, successFunc, loadfunc, unloadfunc, errfunc) {
    var urlPath = "/manage/soap/" + service + ".asmx/" + sfunc;
    $.ajax({
        type: "POST",
        url: urlPath,
        dataType: "xml",
        data: para,
        //开始，进行预载
        beforeSend: function (XMLHttpRequest, textStatus) {
            if (loadfunc != null) loadfunc(XMLHttpRequest, textStatus);
        },
        //加载出错
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (errfunc != null) errfunc(XMLHttpRequest, textStatus, errorThrown);
            if (unloadfunc != null) unloadfunc();
        },
        //加载成功！
        success: function (data) {
            if (successFunc != null) successFunc($(data));
            if (unloadfunc != null) unloadfunc();
        }
    });
}
//网页是否处于微信内置浏览器
jQuery.fn.isWeixin = function () {
    var ua = window.navigator.userAgent.toLowerCase();
    return ua.match(/MicroMessenger/i) == 'micromessenger';
}
//网页是否处于微信小程序内置浏览器
jQuery.fn.isWeixinApp = function () {
    var ua = window.navigator.userAgent.toLowerCase();
    return ua.match(/miniProgram/i) == 'miniprogram';
}
//加载css
jQuery.fn.loadcss = function (url, callback) {
    var head = document.getElementsByTagName('head')[0];
    var link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    link.href = url;
    head.appendChild(link);
}