function checkForm()
{
    var evt = window.event ? window.event : checkForm.caller.arguments[0];
    var form = (evt.srcElement) ? evt.srcElement : evt.target;
    var eles = form.elements;
    var elen = eles.length;
    var itm,tip,alt,msg,fns,flg=true,has_fun=false;
    for(var i=0;i<elen;i++)
    {
        itm = eles[i];
        if(itm.className)
        {
            tip = document.getElementById(itm.name + '_tip');
            alt = itm.alt ? itm.alt : itm.lang;
            msg = alt.split('|');
            fns = itm.className.split(' ');

            for(var j=0;j<fns.length;j++)
            {
                var cmd = fns[j];
				if(typeof(window[cmd]) == 'function')
				{
					try
					{
						flg = flg && window[cmd](itm);//eval(fns[j] + '(itm)');
						if(false == flg)
						{
							itm.focus();
							if(tip){
							  tip.innerHTML = msg[0];
							}else{
								alert(msg[0]);
							}
							return false;
						}
					}
					catch(e){}
				}
            }

            if(tip) tip.innerHTML = msg[1] ? msg[1] : '';
        }
    }

	flg = flg && checkAfter();

    if(flg)
    {
        formAlert(form);
    }
    return flg;
}

function checkAfter(){return true;}
function notempty(o){return (o.value != '');}
function email(o){return /^[a-zA-Z]([a-zA-Z0-9]*[-_.]?[a-zA-Z0-9]+)+@([\w-]+\.)+[a-zA-Z]{2,}$/.test(o.value)}
function username(o){return /^(([a-zA-Z0-9]{1,30})|([\u4E00-\u9FA5]{2,10}))$/.test(o.value)} // username char 3-30,chinese 2-10
function password(o){return /^[a-zA-Z0-9]{6,20}$/.test(o.value)} // password len 6-20
function int(o){if(o.value==''){o.value=0;}return /^(\+|-)?\d+$/.test(o.value)}
function uint(o){if(o.value==''){o.value=0;}return /^(\+)?\d+$/.test(o.value)}
function float(o){if(o.value==''){o.value='0.0';}return /^(\+|-)?\d+(\.{0,1}\d+)?$/.test(o.value)}
function money(o){if(o.value==''){o.value='0.00';}return /^\d+(\.?\d{0,2})?$/.test(o.value)}
function phone(o){return /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}$/.test(o.value)}
function cnMobile(o){return /^(86)*0*(13|15)\d{9}$/.test(o.value)} // china mobile
function tel(o){return /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(o.value)} // phone or mobile
function url(o){return /^([a-zA-z]+:\/\/)?([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?$/.test(o.value)}
function ip(o){return /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(o.value)}
function chinese(o){return /^([\u4E00-\uFA29]|[\uE7C7-\uE7F3])*$/.test(o.value)} // chinese
function image(o){return /^.+\.(jpg|gif|png|jpeg|bmp)$/i.test(o.value)}


function formAlert(form)
{
	if(!form.lang)return;
    var o=form;
    var l = parseInt(form.offsetLeft);
    var t = parseInt(form.offsetTop);
    var w = parseInt(form.offsetWidth);
    var h = parseInt(form.offsetHeight);

    var mk = document.createElement('div');
	mk.style.cssText = 'position:absolute;top:0;left:0;background:#FFF';

    mk.style.filter = "alpha(opacity=40)";
    mk.style.opacity = 0.4;
	mk.style.width = w + 'px';
    mk.style.height = h + 'px';
    form.appendChild(mk);

    var alt = document.createElement('div');
	alt.style.cssText = 'position:absolute;top:10%;padding:15px 30px;border:1px solid #666;background:#CCC';
	alt.style.left = parseInt(w/4) + 'px';
    alt.style.width = parseInt(w/2) + 'px';

	var show_text = form.getAttribute('lang');
    alt.innerHTML = show_text ? show_text : 'posting...';
    form.appendChild(alt);
}