﻿var focCol = '#CCFF99';
var errCol = '#F4BB99';
var finCol = '#FFFFFF';


var splitSign = ':';
var me = this;
var glbFS=true;
var glbcan='/非写/';
function Cinit(fs){
    glbFS = fs==null?true:fs;
    var fm = document.forms[0];
    if (!fm)return;
    
    var fe = fm.elements;
    var fl = fe.length; 
    for (var i = 0; i < fl; i++) {
        var cur = fe[i];
        var alt = (cur.alt + ''); 
        if (alt.indexOf(splitSign) != -1) {
            cur.onblur = check;
            //cur.onfocus= function(){};
        }
        var tip = document.getElementById('uname_vtip');
        if (tip!=null){
	        tip.innerHTML = '';
	        tip.className = '';
	    }
        var _alt = "/"+alt.split(splitSign)[1]+"/";
        if(_alt.indexOf(glbcan)>-1){
            cur.onkeydown=function(){return false;};
            cur.onpaste=function(){return false;};
        }
    }
    fm.onsubmit = checkSubmit;
}
var checkSubmit = function(e){
    if(document.readyState == 'loaded' || document.readyState == 'complete'){
	    var fm = document.forms[0];
	    var v  = fm.v;
        var fe = fm.elements;
        var fl = fe.length;
	    var flag = true;
	    var fln = 0;
	    try{
		    for (var i = 0; i < fl; i++) {
				    var cur = fe[i];
				    var alt = (cur.alt + '');
				    if (alt.indexOf(splitSign) != -1){
					    flag = check(e, cur);
					    if(!flag) {flag = false;fln++;}
				    }
		    }
	    }catch(e){ 
		    flag = false;fln++;
	    };
		if(fln>0){
		    var errstr="您填写的标题长度不正确，请修改您的信息！";
		    try{
		    if (glbFS)
		        top.ymPrompt.alert({message:errstr,title:"提示信息"});
		    else
			    alert(errstr);
			    }catch(ee){alert(errstr);}
			flag = false;
		}
	}else flag=false;
	
    return flag;
}
function check(e,el){
    var el = el || this;
    var alt = el.alt;
    var args = alt.split(splitSign)[1].split('/');
    var name = alt.split(splitSign)[0];
    var l = args.length;
    for (var i = 0; i < l; i++) {
        var c = args[i]; 
		var cur = getCur(c);
        if (cur) {
            if (!cur.fn) return true;
			var result = cur.fn(el);
			if(result == 'custom'){
				break;
			}
			if(result){
			    showErr(el, result);
				return false;
			}
        }
    }
	showErr(el,'hide');
	return true;    
}
var $ = function(id){
    return document.getElementById(id);
}
function $C(tagName){
    return document.createElement(tagName);
}
var showErr = function(e, msg){
	var alt	= e.alt.split(splitSign);
	var name = alt[0];
	var args = alt[1];
	var msg = msg.replace('{name}', name);
	/**
     *  根据alt参数，判断错误提示输出在哪
     */
	var eid, errArea ;
	if(args.indexOf('errArea')!=-1) eid = /errArea{(.+?)}/.exec(alt)[1];
	errArea = $(eid)?$(eid):e.parentNode;
    if (!e.errNode) {
        var etips = $C('label');
        errArea.appendChild(etips);
        e.errNode = etips;
    }
    else {
        var etips = e.errNode;
    }
    /**
     *  根据msg判断是否显示错误提示
     */
	if(msg == 'custom'){
        errArea.removeChild(e.errNode);
        e.errNode = null;
		return;
	}
    if (msg != 'hide') {
        if (glbFS){
        etips.innerHTML = msg;
        etips.style.color = "red";
        }else
        e.style.backgroundColor = this.errCol;
    }
    else {
        if (glbFS){
        errArea.removeChild(e.errNode);
        e.errNode = null;
        }else
        e.style.backgroundColor = this.finCol; 
    }
}
var getCur = function(c){
	var cur = conf[c];
	if (c.indexOf('长度')!=-1){
		cur = conf['长度'];
		cur.fn = me.defaultRangeFn;
	}
	if (c.indexOf('大于')!=-1){
		cur = conf['大于'];
		cur.fn = me.defaultCompareFn;
	}
	if (c.indexOf('小于')!=-1){
		cur = conf['小于'];
		cur.fn = me.defaultCompareFn;
	}
	if (c.indexOf('相同')!=-1){
		cur = conf['相同'];
		cur.fn = me.defaultSameFn;
	}
	if (c.indexOf('无选择')!=-1){
		cur = conf['无选择'];
		cur.fn = me.defaultSelectFn;
	}
	if(!cur) return null;
	if (!cur.fn) cur.fn = me.defaultRegFn;	
	return cur;
}
var defaultSelectFn=function(e,v){
    if(e.tagName=="SELECT"&&e.options.length>1){
        return e.value==""?this.msg:'';
    }else if (e.tagName=="INPUT"&&e.name!=""){
        var ctrllist=document.getElementsByName(e.name);
        var kk=0;
        for(var ii=0;ii<ctrllist.length;ii++){
            var ctrl=ctrllist[ii];
            if (ctrl.type=="checkbox"&&ctrl.checked)kk++;
        }
        return kk==0?this.msg:'';
    }
    return '';
}
var defaultSameFn = function(e, v){
		var val = e.value;
		if(!val) return '';
		var alt = e.alt;
		var id =  /相同{(.+?)}/.exec(alt)[1];
		if(!$(id)) return '';
		return ($(id).value != val)?this.msg:'';
}
var defaultCompareFn = function(e, v){
		var val = e.value;
		if(!val) return '';
		var alt = e.alt;
		if(alt.indexOf("大于")>-1){
		    var id =  /大于{(.+?)}/.exec(alt)[1];
		    var ctl=document.getElementsByName(id);
		    if(ctl==null||ctl==undefined) return'';
		    else{
		        var ctlname=ctl[0].alt.split(splitSign)[0];
		        this.msg = this.msg.replace('{specialctrl}',ctlname);
		        
		        var n=parseInt(val);
		        var m=parseInt(ctl[0].value);
		        return (n<m)?this.msg:'';
		    }
		}else if (alt.indexOf("小于")>-1){
		    var id =  /小于{(.+?)}/.exec(alt)[1];
		    var ctl=document.getElementsByName(id);
		    if(ctl==null||ctl==undefined) return'';
		    else{
		        var ctlname=ctl[0].alt.split(splitSign)[0];
		        this.msg = this.msg.replace('{specialctrl}',ctlname);
		 
		        var n=parseInt(val);
		        var m=parseInt(ctl[0].value);
		        return (n>m)?this.msg:'';
		    }
		}
}
var defaultRangeFn = function(e){
		var len = e.value.lenByte();
		if(!len) return '';
		var alt = e.alt;
		var range =  /长度{(.+?)}/.exec(alt)[1]; 
		if (range.indexOf('-')>0){
		var l = range.split('-')[0];
		var r = range.split('-')[1];
		if(len < l*2 || len > r*2) return this.msg.replace('{range}', range);
		return '';
		}else{
		var l = range;
		if(len < l*2 || len > l*2) return this.msg.replace('{range}', range);
		return '';
		}
}
var defaultRegFn = function(e, v){
		var len = e.value.lenByte();
		var alt = e.alt;
		if(!len&&alt.indexOf("无内容")==-1) return '';
		if (this.regFlag) return this.reg.test(e.value)?this.msg:'';
		if (this.reg) return !this.reg.test(e.value)?this.msg:'';
		else if (this.msg) return this.msg;
}
var conf = {
	'长度': {						
		msg: '{name}长度必须{range}位中文字符'
	},
	"无内容": {
		msg: '请填写{name}',
		reg: /./
	},
	'相同': {						
		msg: '{name}不一致'
	},
	"无选择": {
		msg: '请选择{name}'
	},
	"数字": {
		msg: '{name}只能为数字',
		reg: /[^\d]+/,
		regFlag : true
	},
	"全数字": {
		msg: '{name}不能为全数字',
		reg: /[^\d]+/
	},
	"怪字符": {
		msg: '{name}不能包含特殊字符',
		reg: />|<|,|\[|\]|\{|\}|\?|\/|\+|=|\||\'|\\|\"|:|;|\~|\!|\@|\#|\*|\$|\%|\^|\&|\(|\)|`/i ,
		regFlag : true
	},
	"网址":{
	    msg:'{name}的格式不正确',
	    reg:/http:[\\\"]?(.*?)[\\\"]?[\\s>]/,
	    regFlag:false
	},
	"小数":{
	    msg:'{name}为数值',
	    reg:/^[+\-]?\d+(.\d+)?$/,
	    regFlag:false
	},
	"脚本":{
	    msg:'{name}不能输入脚本',
	    reg:/^<script\s*.*>.*<\/script>+$/,
	    regFlag:true
	},
	"时间":{
	    msg:'{name}不是正确的时间',
	    reg:/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/,
	    regFlag:false
	},
	"日期":{
	    msg:'{name}不是正确的日期格式(例如2009-10-25)',
	    reg:/^((((19|20)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((19|20)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-(0?[1-9]|[12]\d)))$/,
	    regFlag:false
	},
	"日期时间":{
	    msg:'{name}不是正确的日期时间格式(例如2009-10-25 14:23:52)',
	    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-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/,
	    regFlag:false
	},
	"手机号码":{
	    msg:'{name}不正确',
	    reg:/^(13|15|18)\d{9}$/,
	    regFlag:false
	},
	"固定电话":{
	    msg:'{name}不是正确的固定电话号码',
	    reg:/(^(0\d{2,3})-(\d{8})$)|(^(0\d{3})-(\d{7})$)|(^(0\d{2})-(\d{8})-(\d+)$)|(^(0\d{3})-(\d{7})-(\d+)$)/,
	    regFlag:false
	},
	"年份":{
	    msg:'请输入正确的{name}年份',
	    reg:/^(19|20)\d{2}$/,
	    regFlag:false
	},
	"有下划线": {
		msg: '不能包含下划线',
		fn:  function(e, v){
				var val = e.value;
				return (val.search("_") >= 0)?this.msg:'';
		}
	},
	"有中文": {
		msg: '{name}不支持中文',
		reg: /[\u4E00-\u9FA5]/gi,
		regFlag : true
	},
	"中文&英文&数字":{
		msg: '{name}只能是中文、英文、数字或三者的组合',
		reg: /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/,
		regFlag : false
	},
	"可为空": {
		fn:  function(e, v){
				if(!e.value){
					//e.style.background = '';
					return 'custom'; //自定义消息处理方式
				}else { 
					return ''; 
				}
		}
	},
	'大于': {						
		msg: '{name}数值要大于{specialctrl}'
	},
	'小于': {						
		msg: '{name}数值要小于{specialctrl}'
	},
	"Email": {
		msg: '邮箱地址格式不正确',
		reg: /^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$/
	},
	"IP":{
	    msg: 'IP地址不正确',
	    reg: /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
	},
	"身份证号":{
	    msg: '身份证号不正确',
	    reg: /^\d{17}(\d|x)$/
	},
	"重名": { fn:  checkUsername }
}
function checkUsername(e,v){ 
    ajaxCheck("temp.aspx","form=checkusername&username="+e.value,function(responseText){
    
    });
}