﻿/*---常规验证函数 last updated 2010-06-18 Jimmy.Yang ---*/

String.prototype.getQuery = function (name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = this.substr(this.indexOf("?") + 1).match(reg);
    if (r != null) return decodeURIComponent(r[2]); return null;
}


String.prototype.Trim = function () {
    var m = this.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}

String.prototype.trim = function () {
    return this.Trim();
}

String.prototype.isMobile = function () {
    return (/^(?:13\d|15[012389]|189)-?\d{5}(\d{3}|\*{3})$/.test(this.Trim()));
}

String.prototype.isTel = function () {
    return (/^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/.test(this.Trim()));
}

String.prototype.isMobileTel = function () {
    return (this.isTel() || this.isMobile());
}

String.prototype.isEmail = function () {
    return (/^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)$/.test(this.Trim()));
}


String.prototype.isNumber = function () {
    return (!isNaN(this.Trim()));
}

String.prototype.isInt = function () {
    return (/^(-?[0-9]\d*)$/.test(this.Trim()));
}


String.prototype.isFloat = function () {
    return (/^(-?([0-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0))$/.test(this.Trim()));
}

String.prototype.isPwd = function () {
    return (/^[\w+]{6,32}$/.test(this.Trim()));
}


String.prototype.isPwdEx = function () {
    return (/^.{6,32}$/.test(this.Trim()));
}

String.prototype.isChineseFirstName = function () {
    return (/^[\u4e00-\u9fa5]{1,2}$/.test(this.Trim()));
}

String.prototype.isChineseLastName = function () {
    return (/^[\u4e00-\u9fa5]{1,15}$/.test(this.Trim()));
}


String.prototype.isEmpty = function () {
    return (this.Trim() == "" || this == null);
}

String.prototype.isDate = function () {
    return isDate(this);
}

String.prototype.isDateTime = function () {
    return isDateTime(this);
}


String.prototype.isNumber = function () {
    return isNumber(this);
}

String.prototype.isMoney = function () {
    return (/^(-?\d+)(\.\d+)?$/.test(this.Trim()));
}

String.prototype.isUserName = function () {
    return (/^[\w+]{2,50}$/.test(this.Trim()));
}

String.prototype.isPostCode = function () {
    return (/^[\d+]{6}$/.test(this.Trim()));
}

/*
String.prototype.PadHelper = function(totalWidth, paddingChar, isRightPadded) {

if (this.length < totalWidth) {
var paddingString = new String();
for (i = 1; i <= (totalWidth - this.length); i++) {
paddingString += paddingChar;
}

if (isRightPadded) {
return (this + paddingString);
} else {
return (paddingString + this);
}
} else {
return this;
}
}

String.prototype.PadLeft = function(totalWidth, paddingChar) {
if (paddingChar != null) {
return this.PadHelper(totalWidth, paddingChar, false);
} else {
return this.PadHelper(totalWidth, ' ', false);
}
}
String.prototype.PadRight = function(totalWidth, paddingChar) {
if (paddingChar != null) {
return this.PadHelper(totalWidth, paddingChar, true);
} else {
return this.PadHelper(totalWidth, ' ', true);
}

}
*/





function isNumber(s) {
    return (!isNaN(s.Trim()));
}

function isDate(str) {
    var reg = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/
    if (reg.test(str)) return true;
    return false;
}


function isDateTime(str) {
    var reg = /^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[0-9])|([1][0-9])|([2][0-4]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/
    if (reg.test(str)) return true;
    return false;
}





/*---常用其它函数---*/

function openWin(theURL, winName, features, myWidth, myHeight, isCenter) {
    if (window.screen) if (isCenter) if (isCenter == "true") {
        var myLeft = (screen.width - myWidth) / 2;
        var myTop = (screen.height - myHeight) / 2;
        features += (features != '') ? ',' : '';
        features += ',left=' + myLeft + ',top=' + myTop;
    }
    window.open(theURL, winName, features + ((features != '') ? ',' : '') + 'width=' + myWidth + ',height=' + myHeight);
}


//左填充,示例:document.write(lpad("1","0",2))返回01
function lpad(desstr, padchar, lenint) {
    var result = "";
    for (var i = 1; i <= lenint - desstr.length; i++) {
        result += padchar
        //document.write("result=" + result + "<br/>")
    }
    result += desstr
    return result;
}

//获取当前时间(不含日期部分)
function GetTime() {
    var today = new Date()
    var strD = String(today.getHours());
    var strH = String(today.getMinutes());
    var strS = String(today.getSeconds());
    return (lpad(strD, "0", 2) + ":" + lpad(strH, "0", 2) + ":" + lpad(strS, "0", 2));
}

//获取当前时间(参数DateTimeDiff 时差)
function GetTimeDiff(DateTimeDiff) {
    var today = new Date()
    var i = today.getHours() + DateTimeDiff;
    i = i % 24

    var strD = String(i);
    var strH = String(today.getMinutes());
    var strS = String(today.getSeconds());

    return (lpad(strD, "0", 2) + ":" + lpad(strH, "0", 2) + ":" + lpad(strS, "0", 2));
}


//获取当前时间(不含日期部分)
function GetTimeNoSecond() {
    var today = new Date()
    var strD = String(today.getHours());
    var strH = String(today.getMinutes());
    return (lpad(strD, "0", 2) + ":" + lpad(strH, "0", 2));
}

//获取当前时间(参数DateTimeDiff 时差)
function GetTimeNoSecondDiff(DateTimeDiff) {
    var today = new Date()
    var i = today.getHours() + DateTimeDiff;
    i = i % 24

    var strD = String(i);
    var strH = String(today.getMinutes());

    return (lpad(strD, "0", 2) + ":" + lpad(strH, "0", 2));
}


//checkBox全选功能(allChkId为全选checkBox的ID,chkId为要操作checkbox组的ID)
function checkAll(allChkId, chkId) {
    try {
        var chkObj = eval("document.all." + chkId);

        var chkAllObj = eval("document.all." + allChkId);

        if (chkObj.length == undefined) {
            chkObj.checked = chkAllObj.checked;
            return;
        }

        for (var i = 0; i < chkObj.length; i++) {
            chkObj[i].checked = chkAllObj.checked;
        }
    }
    catch (err) {
        alert("当前没有任何信息,请销后操作.");
    }
}


//初始化CheckBox组(strValue以"|"分隔，例如:initCheck("UserRight","aaa|ccc"))
function initCheck(ChkId, strValue) {
    var chkObj = eval("document.all." + ChkId);
    var ArrT = strValue.split("|");
    for (var i = 0; i < chkObj.length; i++) {
        for (var j = 0; j < ArrT.length; j++) {
            if (chkObj[i].value == ArrT[j]) {
                chkObj[i].checked = true;
            }
        }
    }
}

//检测checkbox组是否有选择
function checkId(chkId) {
    try {
        var chkobj = eval("document.all." + chkId);
        var result = false;

        if (chkobj.length == undefined) {
            if (chkobj.checked) {
                result = true;
            }
        }
        else {
            for (var i = 0; i < chkobj.length; i++) {
                if (chkobj[i].checked) {
                    result = true;
                    break;
                }
            }
        }

        if (!result) {
            alert("请选中要操作的记录!");
            try {
                chkobj[0].focus();
            }
            catch (ex) { }
        }
        return result;
    }
    catch (err) {
        alert("当前没有任何信息,请销后操作");
        return false;
    }
}




//身份证号码验证
function isIdCardNo(num) {
    //    if (isNaN(num)) {
    //        //alert("输入的不是数字！"); 
    //        return false;
    //    }
    //    var len = num.length, re;
    //    if (len == 15)
    //        re = new RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
    //    else if (len == 18)
    //        re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
    //    else {
    //        //alert("输入的数字位数不对！"); 
    //        return false;
    //    }
    //    var a = num.match(re);
    //    if (a != null) {

    //        var D, B;
    //        if (len == 15) {
    //            D = new Date("19" + a[3] + "/" + a[4] + "/" + a[5]);
    //            B = D.getYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];
    //        }
    //        else {
    //            D = new Date(a[3] + "/" + a[4] + "/" + a[5]);
    //            B = D.getFullYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];
    //        }
    //        if (!B) {
    //            //alert("输入的身份证号 "+ a[0] +" 里出生日期不对！"); 
    //            return false;
    //        }
    //    }
    //    return true;
    var re = new RegExp(/^[\d]{6}(19|20)*[\d]{2}((0[1-9])|(11|12))([012][\d]|(30|31))[\d]{3}[xX\d]$/);
    return re.test(num)
}


//将页面中的关键字高亮显示,在body的onload中使用
function HighLight(nWord) {
    var oRange = document.body.createTextRange();
    //var Arr = nWord.split(" ") 	
    //for(var i=0;i<Arr.length;i++){	
    //while(oRange.findText(Arr[i])){
    while (oRange.findText(nWord)) {
        oRange.pasteHTML("<span style='background-color:yellow;color:#ff0000'>" + oRange.text + "</span>");
        oRange.moveStart('character', 1);
        //}		
    }
}


function GetGroupValue(Group) {
    var _Result = "";
    for (var i = 0; i < Group.length; i++) {
        if (Group[i].checked) { _Result += "," + Group[i].value; }
    }
    if (_Result.substring(0, 1) == ",") { _Result = _Result.substring(1); }
    return _Result;
}


function SetGroupValue(sId, sValue) {
    var objs = document.getElementById(sId).getElementsByTagName("input");
    for (var i = 0; i < objs.length; i++) {
        if (objs[i].value == sValue) {
            objs[i].checked = true;
            break;
        }
    }
}

function GetRadioValue(sId) {
    var _Result = "";
    var objs = document.getElementById(sId).getElementsByTagName("input");
    for (var i = 0; i < objs.length; i++) {
        if (objs[i].checked) {
            _Result = objs[i].value;
            break;
        }
    }
    return _Result;
}


//将页面中的关键字高亮显示,在body的onload中使用(支持多个关键字，多个关键字用空格分开)
function highword(nWord) {
    //将全角空格(逗号)转半角空格
    nWord = nWord.replace("　", " ").replace(",", " ").replace("，", " ")

    var Arr = nWord.split(" ");
    for (var i = 0; i < Arr.length; i++) {
        HighLight(Arr[i]);
    }
}

//html中向aspx页面转递中文参数时js方法
function urlParm(TypeName) {
    return encodeURIComponent(TypeName);
}


//重新按比例显示图片(img onload="DrewImage(this,300,400)")
function Resize(ImgD, xx, yy) {
    var image = new Image();
    image.src = ImgD.src;
    //document.frmupload.f_width.value=image.width;
    //document.frmupload.f_height.value=image.height;
    if (image.width > 0 && image.height > 0) {
        flag = true;
        if (image.width / image.height >= xx / yy) {
            if (image.width > xx) {
                ImgD.width = xx;
                ImgD.height = (image.height * xx) / image.width;
            } else {
                ImgD.width = image.width;
                ImgD.height = image.height;
            }
            //ImgD.alt=image.width+"X"+image.height;
        }
        else {
            if (image.height > yy) {
                ImgD.height = yy;
                ImgD.width = (image.width * yy) / image.height;
            } else {
                ImgD.width = image.width;
                ImgD.height = image.height;
            }
            //ImgD.alt=image.width+"X"+image.height;
        }
    }
}

//生成随机字符串
function GetRandomString(n) {
    var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    var res = "";
    for (var i = 0; i < n; i++) {
        var id = Math.ceil(Math.random() * chars.length - 1);
        res += chars[id];
    }
    return res;
}


//得到类似2008-12-26 14:32:50字符串的utc毫秒数(即相对1970-1-1 00:00:00的毫秒数)
function GetTimeUTC(s) {
    var sYear = s.substring(0, 4);
    var s1 = s.substring(5);
    var _str = s1.substring(0, 5) + "-" + sYear + " " + s1.substring(6);
    return Date.parse(_str);
}

/*得到日期年月日等加数字后的日期 */
//var oDate = new Date();
//document.write(oDate.dateAdd("q",1).toLocaleString())
Date.prototype.dateAdd = function (interval, number) {
    var d = this;
    var k = { 'y': 'FullYear', 'q': 'Month', 'm': 'Month', 'w': 'Date', 'd': 'Date', 'h': 'Hours', 'n': 'Minutes', 's': 'Seconds', 'ms': 'MilliSeconds' };
    var n = { 'q': 3, 'w': 7 };
    eval('d.set' + k[interval] + '(d.get' + k[interval] + '()+' + ((n[interval] || 1) * number) + ')');
    return d;
}

/* 计算两日期相差的日期年月日等 */
Date.prototype.dateDiff = function (interval, objDate) {
    var d = this, t = d.getTime(), t2 = objDate.getTime(), i = {};
    i['y'] = objDate.getFullYear() - d.getFullYear();
    i['q'] = i['y'] * 4 + Math.floor(objDate.getMonth() / 4) - Math.floor(d.getMonth() / 4);
    i['m'] = i['y'] * 12 + objDate.getMonth() - d.getMonth();
    i['ms'] = objDate.getTime() - d.getTime();
    i['w'] = Math.floor((t2 + 345600000) / (604800000)) - Math.floor((t + 345600000) / (604800000));
    i['d'] = Math.floor(t2 / 86400000) - Math.floor(t / 86400000);
    i['h'] = Math.floor(t2 / 3600000) - Math.floor(t / 3600000);
    i['n'] = Math.floor(t2 / 60000) - Math.floor(t / 60000);
    i['s'] = Math.floor(t2 / 1000) - Math.floor(t / 1000);
    return i[interval];
}

function convertJQueryDate() {

    var argsLen = arguments.length;
    var dt = arguments[0];
    dt = dt.substring(6, dt.length - 7);
    var foo = new Date(parseInt(dt));
    switch (argsLen) {
        case 1:
            return convertJQuertDate1(foo, "");

            break;
        case 2:
            return convertJQuertDate1(foo, arguments[1], false);
            break;
        case 3:
            return convertJQuertDate1(foo, arguments[1], arguments[2]);
            break;
    }
}
function convertJQuertDate1(argDate, argSplit, withHMS) {
    if (argSplit == "")
        return (argDate.getFullYear() + "-" + argDate.getMonth() + "-" + argDate.getDate()) + " " + (withHMS == false ? (argDate.getHours() + ":" + argDate.getMinutes() + ":" + argDate.getSeconds()) : "");
    if (argSplit == "CN") {
        return (argDate.getFullYear() + "年" + argDate.getMonth() + "月" + argDate.getDate() + "日 ") + (withHMS == false ? (argDate.getHours() + "时" + argDate.getMinutes() + "分" + argDate.getSeconds() + "秒") : "");
    }
    return (argDate.getFullYear() + argSplit + argDate.getMonth() + argSplit + argDate.getDate() + " ") + (withHMS == false ? (argDate.getHours() + ":" + argDate.getMinutes() + ":" + argDate.getSeconds()) : "");
}

function getRandom() {
    return Math.floor(Math.random() * 110000000);
}

//根据生日取得星座
function astro(birth) {
    if (birth != '') {
        var tmpstr;
        var bstr;
        var mm;
        var yy;
        var dd;
        var birthmonth;
        tmpstr = birth.split(' ')
        bstr = tmpstr[0]
        tmpstr = bstr.split('-')
        yy = (tmpstr[0] * 1)
        mm = (tmpstr[1] * 1)
        dd = (tmpstr[2] * 1)
        switch (mm) {
            case 1:
                if (dd >= 21) { return ('水瓶座'); }
                else { return ('魔羯座'); }
                break;
            case 2:
                if (dd >= 20) { return ('双鱼座'); }
                else { return ('水瓶座'); }
                break;
            case 3:
                if (dd >= 21) { return ('白羊座'); }
                else { return ('双鱼座'); }
                break;
            case 4:
                if (dd >= 21) { return ('金牛座'); }
                else { return ('白羊座'); }
                break;
            case 5:
                if (dd >= 22) { return ('双子座'); }
                else { return ('金牛座'); }
                break;
            case 6:
                if (dd >= 22) { return ('巨蟹座'); }
                else { return ('双子座'); }
                break;
            case 7:
                if (dd >= 23) { return ('狮子座'); }
                else { return ('巨蟹座'); }
                break;
            case 8:
                if (dd >= 24) { return ('处女座'); }
                else { return ('狮子座'); }
                break;
            case 9:
                if (dd >= 24) { return ('天秤座'); }
                else { return ('处女座'); }
                break;
            case 10:
                if (dd >= 24) { return ('天蝎座'); }
                else { return ('天秤座'); }
                break;
            case 11:
                if (dd >= 23) { return ('射手座'); }
                else { return ('天蝎座'); }
                break;
            case 12:
                if (dd >= 22) { return ('魔羯座'); }
                else { return ('射手座'); }
                break;
            default: return ('');
        }
    } else { return (''); }
}

// 根据生日的月份和日期，计算星座。
function getAstro(month, day) {
    var s = "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯";
    var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
    return s.substr(month * 2 - (day < arr[month - 1] ? 2 : 0), 2);
}


//替换字符串函数(strReplace中如果有正则表达式的特殊字符串，可能会出错)
function replace(strSource, strReplace, strDestination) {
    var reg = new RegExp(strReplace, "g");
    return strSource.replace(reg, strDestination);
}


function createXMLHttpRequest() {

    var xmlHttp;
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    return xmlHttp;
}


//分析url
function parseURL(url) {
    var a = document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':', ''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function () {
            var ret = {},
                seg = a.search.replace(/^\?/, '').split('&'),
                len = seg.length, i = 0, s;
            for (; i < len; i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;

        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],
        hash: a.hash.replace('#', ''),
        path: a.pathname.replace(/^([^\/])/, '/$1'),
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],
        segments: a.pathname.replace(/^\//, '').split('/')
    };
}

//替换myUrl中的同名参数值
function replaceUrlParams(myUrl, newParams) {
    for (var x in newParams) {
        var hasInMyUrlParams = false;
        for (var y in myUrl.params) {
            if (x.toLowerCase() == y.toLowerCase()) {
                myUrl.params[y] = newParams[x];
                hasInMyUrlParams = true;
                break;
            }
        }
        //原来没有的参数则追加
        if (!hasInMyUrlParams) {
            myUrl.params[x] = newParams[x];
        }
    }
    var _result = myUrl.protocol + "://" + myUrl.host + ":" + myUrl.port + myUrl.path + "?";

    for (var p in myUrl.params) {
        _result += (p + "=" + myUrl.params[p] + "&");
    }

    if (_result.substr(_result.length - 1) == "&") {
        _result = _result.substr(0, _result.length - 1);
    }

    if (myUrl.hash != "") {
        _result += "#" + myUrl.hash;
    }
    return _result;
}