﻿///v1.0
//84年的矿泉水

function $(id) {
    return document.getElementById(id);
}

//格式化字符输出
String.prototype.Format = function() {
    Format(this, arguments);
}

//格式化字符输出
function Format() {
    var av = arguments;
    var str = av[0];
    for (var i = 1; i < av.length; i++)
        str = str.replace("{" + (i - 1) + "}", av[i]);
    return str;
}

//解析URL
function RequestPar(str, name) {
    if (str == "") str = location.href;
    var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
    if (reg.test(str)) return RegExp.$2; return "";
}


//运行正则表达式
function runReg(reg, str) {
    eval("reg=" + reg);
    if (reg.test(str)) {
        return true;
    }
    return false;
}

//取字符串长度
function len(s) {
    var l = 0;
    var a = s.split("");
    for (var i = 0; i < a.length; i++) {
        if (a[i].charCodeAt(0) < 299) {
            l++;
        } else {
            l += 2;
        }
    }
    return l;
} 

//*****************************************************************************
//格式化字符输出
String.prototype.Format = function() {
    var av = arguments;
    var str = this;
    for (var i = 0; i < av.length; i++)
        str = str.replace("{" + (i) + "}", av[i]);
    return str;
}
//删除字符串俩端的空格
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
//删除字符串左端的空格
String.prototype.ltrim = function() {
    return this.replace(/(^\s*)/g, "");
}
//删除字符串右端的空格
String.prototype.rtrim = function() {
    return this.replace(/(\s*$)/g, "");
}
//删除所有空格
String.prototype.alltrim = function() {
    return this.replace(/\s+/g, "");
}
//*****************************************************************************

/*  通用检测Form表单 begin

所有表单项属性和值大小写不敏感
***属性类型：ErrMsg,CheckT,Equal,inputFormat,classjt

@ErrMsg  错误信息  
@CheckT  检测类型
  null   检测是否为空
  Date   检测日期 统一格式yyyy-MM-dd
  int    检测是否整数
  Email  检测Email
  Url    检测Url
  Equal  检测两个对象是否相等和Equal一起使用 用于检测密码
  #      前面加#号为自定义正则表达式
@Equal   配合CheckT的类型Equal  
@inputFormat 格式输入 将关闭输入法切换选项 故不能输入中文字符
  此属性的数据格式 中间用空格隔开 第一个为正则表达式配合RegularMaskEditJson使用  前面加#号为自定义正则表达式 如不提供必须为null
  后面不定参数均表示单个字符 如需过滤空格和"符号 使用 KG和YH 字符代理
@classjt  两个类交替 中间用,号隔开 写在form里面
  第一个参数 onBlur   失去焦点
  第二个参数 onFocus  得到焦点  
*/

function FormCore() {
    var o, elemenType, av, theForm, Type, thisObj, b;
    Type = false;
    av = arguments;
    theForm = av[0];
    if (av.length > 1)
        Type = av[1];
    if ($(theForm) == null) {
        alert("请提供正确的表单名字！");
        return false;
    }
    o = $(theForm).elements;
    var OtherP = getAttributes($(theForm), "classjt");
    var clasjtarr = null;
    if (OtherP.clasjt != null && OtherP.clasjt != "") {
        clasjtarr = OtherP.classjt.split(",");
        if (clasjtarr.length != 2)
            clasjtarr = null;
    }
    
    for (var i = 0; i < o.length; i++) {
    
        thisObj = o[i];
        if (Type) { //创建FormMaskEdit
            FormMaskEdit(thisObj, clasjtarr);
        }
        else {//检测表单
            b = FormCheckEx(thisObj, theForm);
            if (!b)
                return b;
        }
    }
    return true;
}

//检测表单正则
var RegularJson = {
    //验证整数
    "int": "/^[0-9]+$/",
    //验证两位小数
    "float": "/^[0-9\\.]+$/",
    //验证日期 格式 yyyy-MM-dd
    "date": "/^(\\d{4})\-(\\d{2})\-(\\d{2})$/",
    //验证Email
    "email": "/^[a-zA-Z0-9_\\.]+@[a-zA-Z0-9-]+[\\.a-zA-Z]+$/",
    //验证url
    "url": "/[a-zA-z]+:\\/\\/[^s]*/",
    //验证身份证号码15
    "card15": "/^\\d{15}$/",
    //验证身份证号码18
    "card18": "/^\\d{17}(?:\\d|x)$/",
    
    //验证移动手机号
    "mobilenumber": "/^((13([4-9]){1})|(15([8-9]){1}))([0-9]){8}$/",
    //验证联通号码
    "Unicomnumber": "/^13[013]\\d{8}$/",
    //验证所有手机号码
    "pbonenumber": "/^(((1[0-9]{1}[0-9]{1}))+\\d{8})$/",
    //验证所有电话号码:
    "allnumber": "/^((0\\d{2,3})-(\\d{7,8}))|(((1[0-9]{1}[0-9]{1}))+\\d{8})$/",
    //验证注册的用户名 正确格式为：以字母或_符号开头，长度在5-18之间
    "regUsername": "/^([\\w\\d_]|[\\u4e00-\\u9fa5]){5,18}$/"
};

//格式输入的正则
var RegularMaskEditJson = {
    //只能输入数字
    "int": "/^[0-9]+$/",
    //只能输入数字和字母 不区分大小写
    "intw": "/^[A-Za-z0-9]+$/",
    //只能输入数字和大写字母
    "intA": "/^[A-Z0-9]+$/",
    //只能输入数字和小写字母
    "inta": "/^[a-z0-9]+$/",
    //只能输入字母
    "w": "/^[A-Za-z]+$/",
    //只能输入大写字母
    "A": "/^[a-z]+$/",
    //只能输入小写字母
    "a": "/^[a-z]+$/"
};


function FormMaskEdit(thisObj, classjtarr) {
    var OtherP = getAttributes(thisObj, "Inputformat", "type");
    if (OtherP.Inputformat != null && OtherP.Inputformat != "") {
        keyInputFormat(thisObj, OtherP.Inputformat);
    }

    if (classjtarr != null) {
        var className = thisObj.className;
        if (OtherP.type == "text" || OtherP.type == "textarea" || OtherP.type=="password") {
            thisObj.onblur = function() { thisObj.className = className + " " + classjtarr[0];};
            thisObj.onfocus = function() { thisObj.className = className + " " + classjtarr[1];};
        }
    }
}
/*  
格式输入
*/
function keyInputFormat(obj, str) {
    //obj.onpaste = function() { return false; };
    //obj.onkeyup = function(e) { return keyInputFormatEx(e,obj, str, 1); };
    obj.onkeypress = function(e) { return keyInputFormatEx(e,obj, str, 0); }
    obj.ondragenter = function() { return false; }; //禁止拖拽
    obj.style.imeMode = "disabled";
}

//格式输入Ex
function keyInputFormatEx(eventTag, obj, str, i) {
    var json, vreg, fchr, b, b1, arr, tempchr, ekey, e;
    b = false; b1 = false;
    e = eventTag || event;
    ekey = window.event ? e.keyCode : e.which;
    ekey = String.fromCharCode(ekey);

    arr = str.split(" ");
    if (arr[0] != "null") {
        fchr = arr[0].substring(0, 1);
        if (fchr == "#")
            vreg = arr[0].substring(1);
        else
            eval("vreg=RegularMaskEditJson." + arr[0].toLowerCase());
        b = runReg(vreg, ekey);
    }
    else
        b = true;

    for (var i = 1; i < arr.length; i++) {
        if (arr[i].toLowerCase() == "KG".toLowerCase()) tempchr = " ";
        else if (arr[i].toLowerCase() == "YH".toLowerCase()) tempchr = "\"";
        else tempchr = arr[i];
        if (tempchr != "") {
            if (tempchr == ekey) {
                b1 = true;
                break;
            }
        }
    }
    return b || b1;
}

function FormCheckEx(thisObj, theForm) {
    var OtherP = getAttributes(thisObj, "type", "ErrMsg", "CheckT", "Equal");
    if (OtherP.CheckT != null) {
        OtherP.CheckT = OtherP.CheckT.toLowerCase();
        switch (OtherP.CheckT) {
            case "null":
                {
                    if (thisObj.value == "") {
                        alert(OtherP.ErrMsg);
                        thisObj.value = "";
                        if(thisObj.type!="hidden")
                          thisObj.focus();
                        return false;
                    }
                    break;
                }
            case "equal":
                {
                    var value;
                    eval("value=" + theForm + "." + OtherP.Equal + ".value;");
                    if (thisObj.value != value) {
                        alert(OtherP.ErrMsg);
                        thisObj.value = "";
                        thisObj.focus();
                        return false;
                    }
                    break;
                }
            case "select":
                {
                    if (thisObj.options.length > 0) {
                        var value = thisObj.options[thisObj.selectedIndex].value;
                        if (value == "err") {
                            alert(OtherP.ErrMsg);
                            if(thisObj.style.display!="none")
                                thisObj.focus();
                            return false;
                        }
                    }
                    break;
                }
            default:
                {
                    return RegCheck(OtherP, thisObj);
                    break;
                }
        }
    }
    return true;
}

function RegCheck(OtherP, thisObj) {
    var vreg = 1;
    if (OtherP.CheckT.substring(0, 1) == "#")
        vreg = OtherP.CheckT.substring(1);
    else if (parseInt(OtherP.CheckT) > 0)
        vreg = undefined;
    if (vreg == undefined) {    //判断长度
        var l = len(thisObj.value);
        if (l < parseInt(OtherP.CheckT)) {
            alert("请不要少于" + OtherP.CheckT + "个字符");
            thisObj.focus();
            return false;
        }
    }
    else { //系统定义的格式
        var regarr = OtherP.CheckT.split(" ");
        var b = false;
        for (var i = 0; i < regarr.length; i++) {
            if (regarr[i] != "") {
                eval("vreg=RegularJson." + regarr[i]);
                b = b || runReg(vreg, thisObj.value);
            }
            if (!b) {
                alert(OtherP.ErrMsg);
                thisObj.focus();
                return false;
            }
        }
    }
    return true;
}

//获得元素的属性值
function getAttributes() {
    var obj, av, objatt;
    av = arguments;
    obj = av[0];
    var rj = {};
    if (obj != null) {
        for (var i = 1; i < av.length; i++) {
            objatt = obj.getAttribute(av[i]);
            if (objatt == null)
                eval("rj." + av[i] + "=null;");
            else
                eval("rj." + av[i] + "='" + objatt + "';");
        }
    }
    return rj;
}

//***************************************** 
//***********************************************************附加****************************************************
function GetAdHTML(A) {
    var WriteHTML = "";
    for (var i = 0; i < A.length; i++) {
        var item = A[i];
        if (i == 0)
            WriteHTML += "<div class='cent ad2'>";
        else
            WriteHTML += "<div class='cent ad2_1'>";
        for (var j = 0; j < item.length; j++) {
            if (j < item.length - 1)
                WriteHTML += Format("<div class='ad2div'><a href='{0}' target='_blank'><img src='../../Content/UploadFile/UserZone/{1}'></a></div>", item[j][1], item[j][0]);
            else
                WriteHTML += Format("<div class='ad2NoR'><a href='{0}' target='_blank'><img src='../../Content/UploadFile/UserZone/{1}'></a></div>", item[j][1], item[j][0]);
        }
        WriteHTML += "</div>";
    }
    return WriteHTML;
}
