﻿/*-------------------
客户端脚本容错处理
*-------------------*/


/*-------------------------------------------------------------
* 验证客户端输入数据
*------------------------------------------------------------*/


// 为 Array 类增加一个 max 方法
Array.prototype.max = function () {
    var i, max = this[0];

    for (i = 1; i < this.length; i++) {
        if (max < this[i])
            max = this[i];
    }

    return max;
}

//----------------------------------
// 为 String 类增加一个 trim 方法
// 用正则表达式将前后空格用空字符串替代
//----------------------------------
String.prototype.trim = function () {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

//----------------------------------
// 使用正则表达式，检测 s 是否满足模式 re
//----------------------------------
function checkExp(re, s) {
    return re.test(s);
}

//----------------------------------
// 验证是否 字母数字
//----------------------------------
function isAlphaNumeric(strValue) {
    // 只能是 A-Z a-z 0-9 之间的字母数字 或者为空
    return checkExp(/^\w*$/gi, strValue);
}

//----------------------------------
// 验证是否 24小时制时间
//----------------------------------
function isTime(strValue) {
    if (isEmpty(strValue)) return true;
    return checkExp(/^(20|21|22|23|[01]\d):[0-5]\d$/, strValue);
}

//----------------------------------
// 验证是否 日期
//----------------------------------
function isDate(strValue) {
    // 日期格式必须是 2001-10-1/2001-1-10 或者为空
    if (isEmpty(strValue)) return true;

    if (!checkExp(/^\d{4}-[01]?\d-[0-3]?\d$/g, strValue)) return false;
    // 或者 /^\d{4}-[1-12]-[1-31]\d$/

    var arr = strValue.split("-");
    var year = arr[0];
    var month = arr[1];
    var day = arr[2];

    // 1 <= 月份 <= 12，1 <= 日期 <= 31
    if (!((1 <= month) && (12 >= month) && (31 >= day) && (1 <= day)))
        return false;

    // 润年检查
    if (!((year % 4) == 0) && (month == 2) && (day == 29))
        return false;

    // 7月以前的双月每月不超过30天
    if ((month <= 7) && ((month % 2) == 0) && (day >= 31))
        return false;

    // 8月以后的单月每月不超过30天
    if ((month >= 8) && ((month % 2) == 1) && (day >= 31))
        return false;

    // 2月最多29天
    if ((month == 2) && (day >= 30))
        return false;

    return true;
}

//----------------------------------
// 验证是否 Email
//----------------------------------
function isEmail(strValue) {
    // Email 必须是 x@a.b.c.d 等格式 或者为空
    if (isEmpty(strValue)) return true;

    //var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
    //var pattern = /^([\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
    var pattern = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;  

    return checkExp(pattern, strValue);

}

//function isEmail(a)
//{ var i=a.length;
// var temp = a.indexOf('@');
// var tempd = a.indexOf('.');
// if (temp > 1) {
//  if ((i-temp) > 3){

//    if ((i-tempd)>0){
//     return 1;
//    }

//  }
// }
// return 0;
//}

//----------------------------------
// 验证是否 为空
//----------------------------------
function isEmpty(strValue) {
    if (strValue == "")
        return true;
    else
        return false;
}

//----------------------------------
// 验证是否 数字
//----------------------------------
function isNumeric(strValue) {
    // 数字必须是 0123456789 或者为空

    return checkExp(/^\d*$/g, strValue);
}

//----------------------------------
// 验证是否 浮点数
//----------------------------------
function isFloat(strValue) {
    return checkExp(/^(-?\d+)(\.\d+)?/g, strValue);
}

//----------------------------------
// 验证是否 货币
//----------------------------------
function isMoney(strValue) {
    // 货币必须是 -12,345,678.9 等格式 或者为空
    if (isEmpty(strValue)) return true;

    return checkExp(/^[+-]?\d+(,\d{3})*(\.\d+)?$/g, strValue);
}

//----------------------------------
// 验证是否 电话
//----------------------------------
function isPhone(strValue) {
    // 普通电话	(0755)4477377-3301/(86755)6645798-665
    // Call 机	95952-351
    // 手机		130/131/135/136/137/138/13912345678
    // 或者为空
    if (isEmpty(strValue)) return true;

    return checkExp(/(^\(\d{3,5}\)\d{6,8}(-\d{2,8})?$)|(^\d+-\d+$)|(^(130|131|132|133|134|135|136|137|138|139|180|181|182|183|184|185|186|187|188|189|150|151|152|153|154|155|156|157|158|159)\d{8}$)/g, strValue);
}

//----------------------------------
// 验证是否 电话（Other）
//----------------------------------
function isPhoneOther(strValue) {

    var strMsg = "";
    if (isEmpty(strValue)) {
        return true;
    }
    else if (!checkLength(strValue, "L=8")) {
        //strMsg = "你输入的电话号码不是8位，请重新输入！"
        return false;
    }
    else if (strValue.substr(0, 1) == "1" || strValue.substr(0, 1) == "4" || strValue.substr(0, 1) == "7") {
        return false;
    }

    //else if (document.getElementById("QuHao").value=="010")
    //{
    //	if(strValue.substr(0,1)!="2" && strValue.substr(0,1)!="5" && strValue.substr(0,1)!="6" && strValue.substr(0,1)!="8")
    //	{
    //strMsg = "北京电话号码首位必须是2,5,6,8，请重新输入！"
    //		return false;			
    //	}
    //}
    //else if (document.getElementById("QuHao").value=="021")
    //{
    //	if(strValue.substr(0,1)!="2" && strValue.substr(0,1)!="3" && strValue.substr(0,1)!="5" && strValue.substr(0,1)!="6")
    //	{
    //strMsg = "上海电话号码首位必须是2,3,5,6，请重新输入！"
    //		return false;			
    //	}
    //}
    //else if (document.getElementById("QuHao").value=="020")
    //{
    //	if(strValue.substr(0,1)!="2" && strValue.substr(0,1)!="3" && strValue.substr(0,1)!="5" && strValue.substr(0,1)!="6" && strValue.substr(0,1)!="8")
    //	{
    //strMsg = "广州电话号码首位必须是2,3,5,6,8，请重新输入！"
    //		return false;			
    //	}
    //}
    //else if (document.getElementById("QuHao").value=="0755")
    //{
    //	if(strValue.substr(0,1)!="2" && strValue.substr(0,1)!="3" && strValue.substr(0,1)!="5" && strValue.substr(0,1)!="6" && strValue.substr(0,1)!="8")
    //	{
    //strMsg = "深圳电话号码首位必须是2,3,5,6,8，请重新输入！"
    //		return false;			
    //	}
    //}
    return true;
}

//----------------------------------
// 验证是否 邮政编码
//----------------------------------
function isPostalCode(strValue) {
    // 邮政编码必须是6位数字
    return checkExp(/(^$)|(^\d{6}$)/gi, strValue)
}

//----------------------------------
// 验证是否 URL
//----------------------------------
function isURL(strValue) {
    if (isEmpty(strValue)) return true;

    var pattern = /^(http|https|ftp):\/\/(\w+\.)+[a-z]{2,3}(\/\w+)*(\/\w+\.\w+)*(\?\w+=\w*(&\w+=\w*)*)*/gi;
    // var pattern = /^(http|https|ftp):(\/\/|\\\\)(\w+\.)+(net|com|cn|org|cc|tv|[0-9]{1,3})((\/|\\)[~]?(\w+(\.|\,)?\w\/)*([?]\w+[=])*\w+(\&\w+[=]\w+)*)*$/gi;
    // var pattern = ((http|https|ftp):(\/\/|\\\\)((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((\/[\~]*|\\[\~]*)(\w)+)|[.](\w)+)*(((([?](\w)+){1}[=]*))*((\w)+){1}([\&](\w)+[\=](\w)+)*)*)/gi;

    return checkExp(pattern, strValue);

}

//----------------------------------
// 检查字段长度
//
//	strValue	字符串
//	strParam	检查参数，形如：L<10, L=5, L>117
//----------------------------------
function checkLength(strValue, strParam) {
    if (isEmpty(strValue)) return true;

    // 参数形如：L<10, L=5, L>117
    if (strParam.charAt(0) != 'L') return false;

    var l = strValue.length;
    var ml = parseInt(strParam.substr(2));

    switch (strParam.charAt(1)) {
        case '<':
            if (l >= ml)
                return false;
            break;

        case '=':
            if (l != ml)
                return false;
            break;

        case '>':
            if (l <= ml)
                return false;
            break;

        default:
            return false
    }

    return true;
}


//----------------------------------
// 检查输入数据长度的合法性（字符长度不能大于**个字符）
//
//	输入参数
//		strName		字段对象
//		strDescription	字段描述
//		strLength	字段长度
//----------------------------------
function ValidateMaxLength(strName, strDescription, strLength) {
    var strMsg = "";
    var strValue = document.all(strName).value.trim();
    var strMaxLength = "L<" + strLength;
    if (!checkLength(strValue, strMaxLength))
        strMsg = '"' + strDescription + '" 必须小于' + strLength + '个字符\n';
    return strMsg;
}

//----------------------------------
// 检查输入数据长度的合法性（字符长度不能小于**个字符）
//
//	输入参数
//		strName		字段对象
//		strDescription	字段描述
//		strLength	字段长度
//----------------------------------
function ValidateMinLength(strName, strDescription, strLength) {
    var strMsg = "";
    var strValue = document.all(strName).value.trim();
    var strMaxLength = "L>" + strLength;
    if (!checkLength(strValue, strMaxLength))
        strMsg = '"' + strDescription + '" 必须大于' + strLength + '个字符\n';
    return strMsg;
}


//----------------------------------
// 检查输入数据长度的合法性（字符长度等于**个字符）
//
//	输入参数
//		strName		字段对象
//		strDescription	字段描述
//		strLength	字段长度
//----------------------------------
function ValidateEquLength(strName, strDescription, strLength) {
    var strMsg = "";
    var strValue = document.all(strName).value.trim();
    var strMaxLength = "L=" + strLength;
    if (!checkLength(strValue, strMaxLength))
        strMsg = '"' + strDescription + '" 必须等于' + strLength + '个字符\n';
    return strMsg;
}


//----------------------------------
// 验证输入数据的合法性
//
//	输入参数
//		strName	字段名
//		strDescription	字段描述
//		strType	字段类型
//
//	输出参数
//		空串	通过验证
//		非空	未通过验证
//----------------------------------
function Validate(strName, strDescription, strType) {
    var strMsg = "";
    //var strValue = document.all( strName ).value.trim();
    var strValue = document.getElementById(strName).value.trim();
    var arrType = strType.split(" ");
    for (var i = 0; i < arrType.length; i++)
        switch (arrType[i]) {
        case "AlphaNumeric": // 字母数字
            if (!isAlphaNumeric(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须是字母或数字！\n';
            break;

        case "Date": // 日期
            if (!isDate(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须具有正确的日期格式，如 2001-10-1\n';
            break;

        case "Time": // 时间
            if (!isTime(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须具有正确的时间格式，如 08:30\n';
            break;

        case "Email": // 电子邮件
            if (!isEmail(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须具有正确的邮件格式，如 user@sohu.com\n';
            break;

        case "NotEmpty": // 不许空值
            if (isEmpty(strValue))
                strMsg = strMsg + '请填写正确的 "' + strDescription + '" ！\n';
            break;

        case "Numeric": //数字
            if (!isNumeric(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须是数字！\n';
            break;

        case "FNumeric": 	//浮点数
            if (!isFloat(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须是数字！\n';
            break;

        case "Money": //货币
            if (!isMoney(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须具有正确的货币格式，如 -123,456.789\n';
            break;

        case "Phone": // 电话
            if (!isPhone(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须具有正确的电话格式，如 021-62873434 或 13352340671 \n';
            break;

        case "PhoneOther": // 电话
            if (!isPhoneOther(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须输入正确的电话号码！\n';
            break;

        case "PostalCode": // 邮政编码
            if (!isPostalCode(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须是6位数字！\n';
            break;

        case "URL": // URL
            if (!isURL(strValue))
                strMsg = strMsg + '"' + strDescription + '" 必须是正确的URL格式！\n';
            break;

        default: // 其他
            if (arrType[i].charAt(0) == "L") {
                if (!checkLength(strValue, arrType[i]))
                    strMsg = strMsg + '"' + strDescription + '" 的长度必须 ' + arrType[i].substr(1) + ' 个字符\n';
            }
            else
                strMsg = strMsg + '错误："' + strDescription + '" 的类型 "' + strType + '" 不能识别！\n';
    }

    return strMsg;
}



// 链接转向
function goToURL(url) {
    window.location = url;
}

// 打开新窗口
function openNewWin(url, width, height) {
    var newwin = window.open(url, "NewWin", "toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=yes,width=" + width + ",height=" + height + "");
    newwin.focus();
    return false;
}



