/***
 * 类主体
 * 下载:http://www.codefans.net
 * 没有采用复杂的混合工厂模式封装，这样写法比较通俗易懂
 */
function XCheck(){
    var flag = false;
    
    var msgtips = "请输入数据！";
    var msgok = "恭喜，此数据可以使用！";
    var msgwrong = "此数据不符合条件！";
    var msgajax = "此数据已经被使用！";
    var msgerr = "表单数据还有错误！";
    
    var url = "";
    var parname = "username";
    
    var imgok = "index/images/MessageIcon/check_right.gif";
    var imgwrong = "index/images/MessageIcon/check_error.gif";
    var imageload = "index/images/MessageIcon/loading.gif";
    //全局对象
    var checkobj;
    var tipsobj;
    
    this.XChecksetcont = function(str1, str2, str3, str4, str5){
        /***
         * XChecksetcont方法具有5个参数,都是非必须,分别表示一下含义
         *（1）提示信息
         *（2）输入正确提示
         *（3）输入错误提示
         *（4）数据库存在此数据输出的提示信息。不存在Ajax检查的字段此地方写“”。或者null（建议null）
         *（5）提交表单还有字段为成功系统的提示信息，是以alert的形式提示。
         */
        msgtips = (str1 == null ? msgtips : str1);
        msgok = (str2 == null ? msgok : str2);
        msgwrong = (str3 == null ? msgwrong : str3);
        msgajax = (str4 == null ? msgajax : str4);
        msgerr = (str5 == null ? msgerr : str5);
    }
    this.seturl = function(u, p){
        /**********************************
         * 设置后台页面的路径以及参数
         * 1－后台页面名称×（aspx。jsp。asp均可）
         * 2－超链接后面带的参数，默认是username。
         **********************************/
        url = u;
        parname = (p == null ? parname : p);
    }
    this.getstate = function(){
        return flag;
    }
    this.alertwrong = function(){
        alert(msgerr);
        checkobj.focus();
    }
    /***
     * 验证主要方法.接受四个参数,分别表示
     * 1-objid:表单输入文本框的id.
     * 2-tipid:显示提示信息元素id.
     * 3-检测输入字段是否满足用户自定义规则,传递方法名称
     * 4-是否启用ajax操作,true为启用,启用后需调用seturl指定异步请求地址和参数名称,参数值为此项内容
     */
    this.check = function(objid, tipid, funname, ajax){
    
        checkobj = objid;
        tipsobj = tipid;
        if (typeof(checkobj) == "string") 
            checkobj = document.getElementById(checkobj);
        if (typeof(tipsobj) == "string") 
            tipsobj = document.getElementById(tipsobj);
        checkobj.onfocus = function(){
            tipsobj.className = "tips";
            insertfun(msgtips);
        }
        checkobj.onblur = function(){
        
            var XCsss = funname + "('" + checkobj.value + "')";
            if (eval(XCsss)) { //动态执行
                if (ajax) {
                    makeRequest(url + "?" + parname + "=" + checkobj.value);
                }
                else {
                    tipsobj.className = "right";
                    insertfun(getimg(imgok) + msgok);
                    flag = true;
                }
            }
            else {
                tipsobj.className = "wrong";
                insertfun(getimg(imgwrong) +msgwrong);
                flag = false;
            }
        }
    }
    function insertfun(val){
        tipsobj.innerHTML = val;
    }
    function getimg(val){
        /**
         * 修改此地方可以修改提示图片的样式
         */
        return "<img src='" + val + "' style='width:17px; height:17px'/>"
    }
    function makeRequest(url){
        insertfun(getimg(imageload) + "检测中……");
        http_request = false;
        if (window.XMLHttpRequest) {
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        }
        else 
            if (window.ActiveXObject) {
                try {
                    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
                    try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } 
                    catch (e) {
                    }
                }
            }
        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = alertContents;
        http_request.open('GET', url, true);
        http_request.send(null);
    }
    function alertContents(){
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                // alert("---"+http_request.responseText+"---");
                if (http_request.responseText == 0) {
                    tipsobj.className = "right";
                    insertfun(getimg(imgok) + msgok);
                    flag = false;
                }
                else 
                    if (http_request.responseText == 1) {
                        tipsobj.className = "wrong";
                        insertfun(getimg(imgwrong) + msgajax);
                        flag = true;
                    }
                    else {
                        insertfun(getimg(imgwrong) + "服务器内部错误！");
                    }
            }
            else {
                alert('There was a problem with the request.');
            }
        }
    }
}

