// JScript 文件

var arrayValidator = new Array(); 


function startVerify(){

	for (var i = 0; i < arrayValidator.length; i++) {
		if (arrayValidator[i].valid(true)) {
			//如果校验通过
			arrayValidator[i]._base.setMessage(arrayValidator[i]._base.getValue());
		}
		
	}
}


//_message 默认显示的信息, _focusMessage 获得焦点的时候显示的信息　,_errMessage　校验出错显示的信息　,_okMessage　校验成功显示的信息,_waitMessage 请稍候的消息
//_cssName 默认样式 ,_focusCssName获得焦点的时候的样式 _errCssName 校验出错的样式　　,_okCssName 校验成功的样式，_waitCssName 请稍候的样式
function hishopVerify(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName) {
  
this.AllowNull=_allowNull;//是否允许为空
this.VerifyControlId=_verifyControlId;
this.MessageControlId=_messageControlId;
this.Group=_group;
this.Regex=_regex;
this.Message=_message;
this.NullMessage=_nullMessage;
this.FocusMessage=_focusMessage;
//this.ErrMessage=_errMessage;
this.RegexErrMessage=_regexErrMessage;
this.OkMessage=_okMessage;
//this.WaitMessage=_waitMessage;
this.CssName=_cssName;
this.FocusCssName=_focusCssName;
this.ErrCssName=_errCssName;
this.OkCssName=_okCssName;
//this.WaitCssName=_waitCssName;
this.NowIsNull=false;//当前是否是允许空且值是空的，如果是的话，那就不再做其他的检测了


    //显示消息的控件
    hishopVerify.prototype.messageControl=function()
    {
        return document.getElementById(this.MessageControlId);
    }
    
    //被校验的控件
    hishopVerify.prototype.verifyControl=function()
    {      
       return document.getElementById(this.VerifyControlId);
    }
    
    //设置默认显示的消息
    hishopVerify.prototype.setMessage=function()
    {
        this.messageControl().innerHTML=this.Message;
        this.messageControl().className=this.CssName;
    }    
    
    //设置为空的消息    
    hishopVerify.prototype.setNullErrMessage=function()
    {
        this.messageControl().innerHTML=this.NullMessage;
        this.messageControl().className=this.ErrCssName;
    }    
    //设置获得焦点的消息
    hishopVerify.prototype.setFocusMessage=function()
    {
        this.messageControl().innerHTML=this.FocusMessage;
        this.messageControl().className=this.FocusCssName;
    }
    

    //设置Regex出错的消息
    hishopVerify.prototype.setRegexErrMessage=function()
    {
        this.messageControl().innerHTML=this.RegexErrMessage;
        this.messageControl().className=this.ErrCssName;
    }
    
    //设置成功的消息
    hishopVerify.prototype.setOkMessage=function()
    {
        this.messageControl().innerHTML=this.OkMessage;
        this.messageControl().className=this.OkCssName;
    }

    
    //获取被校验控件的内容
    hishopVerify.prototype.getValue=function()
    {
        if (this.verifyControl()==null)
        return '';
        
        var _theValue= this.verifyControl().value;
        return _theValue;
    }
    
   //创建事件
    hishopVerify.prototype.createEvent = function(_parentVerify){
		var theThis = this;
		var _content = this.verifyControl();
		
		if (_content) {
		
			if (_content.addEventListener) 
				_content.addEventListener("focus", function(){
					//这个控件是焦点的时候
					theThis.setFocusMessage();
				}, false);
			else 
				if (_content.attachEvent) {
					_content.attachEvent("onfocus", function(){
						//这个控件是焦点的时候
						theThis.setFocusMessage();
					});
					
				}
			if (_content.addEventListener) {
				_content.addEventListener("blur", function(){
					_parentVerify.valid(true, false);
				}, false);
			
			}
			else 
				if (_content.attachEvent) {
					_content.attachEvent("onblur", function(){
						_parentVerify.valid(true, false);
					});
					
				}
			
		}
	}
    
    hishopVerify.prototype.valid=function(_bAsync)
    {
   
        //如果没找到要校验的控件，那就直接返回真
        if (this.verifyControl()==null)
        {
            return true;
        }
        
        //先判断是否为空
        var theValue=this.getValue();
        var v=true;
       
        
        //如果允许为空并且值是空的，那就不做任何校验了
        if (this.AllowNull=="True" && (theValue == null || theValue == undefined  ||  theValue==""))
        {
            this.NowIsNull=true;
        }
        else        
        {
            this.NowIsNull=false;
            if (this.AllowNull!="True" && (theValue == null || theValue == undefined  ||  theValue==""))
            {
                v=false;
                this.setNullErrMessage();
            }
            else 
            {
                v=this.verifyRegex();
                if (!v)
                {
                    this.setRegexErrMessage();
                }
            }
        }
        
        if (v &&  !this.NowIsNull) //如果允许为空且当前的值是空的，那就不再输出成功信息了
            this.setOkMessage();
        return v;
    }
    
    //根据传入的正则表达式返回校验结果
    hishopVerify.prototype.verifyRegex=function()
    {       
         if (this.Regex != null && this.Regex != undefined  && typeof this.Regex == "string" && this.Regex!="")        
        {        
            return HishopVerifyByRegex(this.getValue(),this.Regex);
        }
        else//如果没有正则表达式就返回true
            return true;
    }
    
      
    
}

//添加一个校验对象到集合中
function HishopVerifyAdd(_verify)
{

    //检测有没有重复的。。根据ID
    var n=-1;
     for(var i=0;i<arrayValidator.length;i++)
    {
        
            if (arrayValidator[i]._base.MessageControlId==_verify._base.MessageControlId)
            {
                n=i;
                break;
            }
        
    }
    if (n!=-1)
    {
        //有重复的就删除
     
        arrayValidator[n]=null;
        arrayValidator.splice(n,1);
    }
   

    //创建事件
    _verify._base.createEvent(_verify);
    _verify._base.setMessage();    
    //加入到集合中
    arrayValidator.push(_verify);
   
}


function hishopVerifyBase(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName)
{
      this._base=new hishopVerify(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName);
      this.TheValid=false;//是否通过了校验
      this.IsValid=false;//是否已经校验过，如果校验过，那就直接返回结果，不再次校验了
      
      //_isSubmit 这次校验是否是提交的时候的校验，如果是的话，那就判断是否已经校验过，已经校验过的话就不再重复校验了
       hishopVerifyBase.prototype.valid=function(_bAsync,_isSubmit)
       {
               //如果没找到要校验的控件，那就直接返回真
        if (this._base.verifyControl()==null)
        {
            return true;
        }
            //如果没有校验过，或者这不是提交的时候的校验，那就再次校验
            if (!this.IsValid || !_isSubmit){
                
                 this.IsValid=true;
                 this.TheValid= this._base.valid(_bAsync);
            }
            return this.TheValid;
       }

}

//_notVerifyValue 如果被校验控件的值等于此值就直接返回真 
function hishopVerifyUserIda (_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_errMessage,_regexErrMessage,_okMessage,_waitMessage,_cssName,_focusCssName,_errCssName,_okCssName,_waitCssName,_serviceUrl,_serviceUrlKey,_notVerifyValue)
{
    this._base=new hishopVerify(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName);
    
    this.WaitMessage=_waitMessage;
    this.WaitCssName=_waitCssName;
    
    this.ErrMessage=_errMessage;
    this.ErrCssName=_errCssName;
    
    this.ServiceUrlKey=_serviceUrlKey;
    this.ServiceUrl=_serviceUrl;
    
    this.NotVerifyValue=_notVerifyValue;
    //this.IsValid=false;
    
        //设置等待的消息
    hishopVerifyUserIda.prototype.setWaitMessage=function()
    {
        this._base.messageControl().innerHTML=this.WaitMessage;
        this._base.messageControl().className=this.WaitCssName;
    }
    
        //设置出错的消息
    hishopVerifyUserIda.prototype.setErrMessage=function()
    {
        this._base.messageControl().innerHTML=this.ErrMessage;
        this._base.messageControl().className=this.ErrCssName;
    }
    
    
    this.TheValid=false;//是否通过了校验
    this.IsValid=false;//是否已经校验过，如果校验过，那就直接返回结果，不再次校验了

    //添加个方法
    hishopVerifyUserIda.prototype.valid=function(_bAsync,_isSubmit)
    {
        //如果没找到要校验的控件，那就直接返回真
        if (this._base.verifyControl()==null)
        {
            return true;
        }
        
        var theThis=this;
        //alert("是否已经校验过"+this.IsValid);  
        if (!this.IsValid || !_isSubmit)
        {
            this.IsValid=true;
            //var isValid=false;
            //先检测正则表达式，如果有的话   
            theThis.TheValid = theThis._base.valid(_bAsync);
        
            if (theThis.TheValid  && !this._base.NowIsNull)
            {
           
               //如果NotVerifyValue的值等于被校验的值，那就不做任何检测，直接设为真
               if (this.NotVerifyValue!='' && this.NotVerifyValue == theThis._base.getValue())
               {
                    theThis.TheValid=true;
                    theThis._base.setOkMessage(); 
               }
               else
               {
                //如果正则表达式通过，那就上服务器上检测是否有重复的名字了
                var _http_Request=(makeRequest());
                if (_http_Request!=null)
                {
                    //写等待消息
                    theThis.setWaitMessage();					
                    //同步模式下&fireFox浏览器中，下面的事件无法执行，所以只有异步方式下才采用下面的
                    if (_bAsync)
                    {
						var _url=theThis.ServiceUrl+"?"+theThis.ServiceUrlKey+"="+escape(theThis._base.getValue())+"&t="+new Date().getMilliseconds(); 
						GetValue2(_url,function(_backText)
						{
							if (_backText == "True") {
								theThis.TheValid = true;
								theThis._base.setOkMessage();
							}
							else
							{
								theThis.TheValid=false;
                                theThis.setErrMessage(); 								
							}
								
							
						},null,null,null,null,null,null,null,null,null,_bAsync)
						
                    }

                    
					/* 同步模式下暂时去除 080620
                    if (!_bAsync)
                    {

                         //同步模式下直接这样做。。
                        if (_http_Request.responseText=="True")
                        {
                            theThis.TheValid=true;
                            theThis._base.setOkMessage();                   
                        }
                        else
                        {                        
                            theThis.TheValid=false;
                            theThis.setErrMessage(); 
                        } 
                    
                    }
					*/
                }
                }
            }
        }
        
        return theThis.TheValid;
    }
}

//2个文本框输入的值是否一样
//CompareId 是要对比的控件的ID 
function hishopVerifyCompare (_allowNull,_verifyControlId,_messageControlId,_compareControlId,_group,_regex,_message,_nullMessage,_focusMessage,_errMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName)
{
    this._base=new hishopVerify(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName);   
    this.ErrMessage=_errMessage;
    this.ErrCssName=_errCssName;
	this.CompareControlId=_compareControlId;
    //this.IsValid=false;
    
        //设置出错的消息
    hishopVerifyCompare.prototype.setErrMessage=function()
    {
        this._base.messageControl().innerHTML=this.ErrMessage;
        this._base.messageControl().className=this.ErrCssName;
    }
    
        //获取要比较的校验控件的内容
    hishopVerifyCompare.prototype.getCompareValue=function()
    {
        var _theValue= document.getElementById(this.CompareControlId).value;
        return _theValue;
    }
    
    
    this.TheValid=false;//是否通过了校验
    this.IsValid=false;//是否已经校验过，如果校验过，那就直接返回结果，不再次校验了

    //添加个方法
    hishopVerifyCompare.prototype.valid=function(_bAsync,_isSubmit)
    {
            //如果没找到要校验的控件，那就直接返回真
        if (this._base.verifyControl()==null)
        {
            return true;
        }
        var theThis=this;
        //alert("是否已经校验过"+this.IsValid);  
        if (!this.IsValid || !_isSubmit)
        {
            this.IsValid=true;
            //var isValid=false;
            //先检测正则表达式，如果有的话   
            this.TheValid=this._base.valid(_bAsync);
        
            if (this.TheValid && !this._base.NowIsNull)
            {
                var theValue1 = this._base.getValue();
                var theValue2 = this.getCompareValue();
              
                if (theValue1==theValue2)
                {
                    this.TheValid=true;
                    this._base.setOkMessage();                    
                }
                else
                {
                    this.TheValid=false;
                    this.setErrMessage(); 
                }
                       
            }
        }
        
        return this.TheValid;
    }
}

//被校验控件的值是否在一个范围内，目前仅支持 Int 和 Float 这2种类型
function hishopVerifyRange (_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_errMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName,_min,_max,_dataType)
{

    this._base=new hishopVerify(_allowNull,_verifyControlId,_messageControlId,_group,_regex,_message,_nullMessage,_focusMessage,_regexErrMessage,_okMessage,_cssName,_focusCssName,_errCssName,_okCssName);
        
    this.ErrMessage=_errMessage;
    this.ErrCssName=_errCssName;
    //this.IsValid=false;
    
        //设置出错的消息
    hishopVerifyRange.prototype.setErrMessage=function()
    {
        this._base.messageControl().innerHTML=this.ErrMessage;
        this._base.messageControl().className=this.ErrCssName;
    }
       
    
    this.TheValid=false;//是否通过了校验
    this.IsValid=false;//是否已经校验过，如果校验过，那就直接返回结果，不再次校验了

    //添加个方法
    hishopVerifyRange.prototype.valid=function(_bAsync,_isSubmit)
    {
    
        //如果没找到要校验的控件，那就直接返回真
        if (this._base.verifyControl()==null)
        {
            return true;
        }
        var theThis=this;
     
        if (!this.IsValid || !_isSubmit)
        {
            this.IsValid=true;           
            //先检测正则表达式，如果有的话   
            this.TheValid=this._base.valid(_bAsync);
        
            //如果检测是否为空和正则表达式
            //并且当前不是空的情况下，才做下面的检测
            if (this.TheValid && !this._base.NowIsNull)
            {
                var theValue1; 
                var theMin;
                var theMax;
                if (_dataType=="Int")
                {
                    //int类型
                    theValue1=parseInt(this._base.getValue());
                    theMin=parseInt(_min);
                    theMax=parseInt(_max);
                }
                else if (_dataType=="Float")
                {
                    
                    //浮点类型
                    theValue1=parseFloat(this._base.getValue());
                    theMin=parseFloat(_min);
                    theMax=parseFloat(_max);
                }
                
                if (theValue1 !=null && theValue1 !=undefined)
                {
                    //开始检测
                    if (theValue1>=theMin && theValue1 <=theMax)                    
                    {
                        this.TheValid=true;
                        this._base.setOkMessage();  
                    }
                    else
                    {
                        this.TheValid=false;
                        this.setErrMessage(); 
                    }
                }
                else
                {
                    this.TheValid=false;
                    this.setErrMessage(); 
                }
                
            
                       
            }
        }
        
        return this.TheValid;
    }
}


//判断一个字符串是否符合正则表达式
function HishopVerifyByRegex(_verifyText,_regex)
{
        var exp = new RegExp( "^" + _regex + "$" , "i");
        // 2007-12-7 by jeffery
        // 改为直接将匹配结果赋值给isValid
        //
        return exp.test( _verifyText );    
}




//校验指定组的所有对象，并返回校验结果,一般用于按钮提交的时候。。。
function VerifyAll(_group)
{
    var isVerify=true; 
    for(var i=0;i<arrayValidator.length;i++)
    {
        //只检测指定组的
        if (arrayValidator[i]._base.Group == _group)
        {
            if (!arrayValidator[i].valid(false,true))
            {
                isVerify=false;
                //不能一出错就跳出循环，因为要把每个都检测到，并显示错误信息
            }
        }
    }
    
    return isVerify;
}

//根据消息文本框ID来获得校验对象
function VerifyGetbyMessageControlId(_messageControlId)
{
	var _verify;
	for(var i=0;i<arrayValidator.length;i++)
    {
        //只检测指定组的
        if (arrayValidator[i]._base.MessageControlId == _messageControlId)
		_verify=arrayValidator[i];

    }	
	return _verify;
}

var HishopVerifyDirectoryIsOk=true;
//校验目录权限
function HishopVerifyDirectory(_url,_isLast,_controlId)
{
	//正在检测
	var _message1=document.getElementById("SetupStep2_Message1");
	//检测完成
	var _message2=document.getElementById("SetupStep2_Message2");
	//检测失败
	var _message4=document.getElementById("SetupStep2_Message4");
	
	//下一步
	var _nextLink=document.getElementById("SetupStep2_NextLink");
	//重新检测
	var _reVerifyLink=document.getElementById("SetupStep2_ReVerifyLink");
	
	
	if (_message1)
		_message1.style.display="inline";
		
	if (_message2)
		_message2.style.display="none";
		
	if (_message4)
		_message4.style.display="none";
	
	if (_nextLink)
		_nextLink.style.display = "none";
	
	if (_reVerifyLink)
		_reVerifyLink.style.display="none";
	
	
	this.Back = function(_backText){
		var _text = _backText.split('|');
		
		if (_text.length < 2 || (_text.length > 1 && _text[1].trim() == "0")) {
			HishopVerifyDirectoryIsOk = false
		}

		var _control = document.getElementById(_controlId);
		if (_control) 
			_control.innerHTML = _text[0];
		
		if (_isLast) {
		
			if (_message1) 
				_message1.style.display = "none";
			
			if (_message2) 
				_message2.style.display = "inline";
						
			
			if (HishopVerifyDirectoryIsOk) {
				//所有的校验成功
				if (_message4) 
					_message4.style.display = "none";
				
				if (_nextLink)
					_nextLink.style.display="inline";
				
				if (_reVerifyLink)
					_reVerifyLink.style.display="none";
				
			}
			else {
				if (_message4) 
					_message4.style.display = "inline";
					
				if (_nextLink)
					_nextLink.style.display="none";
				
				if (_reVerifyLink)
					_reVerifyLink.style.display="inline";
			}
			//设置回初始值
			HishopVerifyDirectoryIsOk = true;
		}
	}
	
	var theUrl = HishopAjaxDirUrl + "/HishopSetup.aspx?Type=VerifyDir&Dir=" +escape(_url);
	//alert(theUrl);
	GetValue2(theUrl, this.Back);	
}

function HishopVerifyDbConn(_type,_dbAddressControlId,_dbPortControlId,_dbUserNameControlId,_dbPassControlId,_dbNameControlId)
{
		
	var _dbAddress,_dbPort,_dbUserName,_dbPass,_dbName;
	var _dbAddressControl=document.getElementById(_dbAddressControlId);
	if (_dbAddressControl)
		_dbAddress = _dbAddressControl.value;
	
	var _dbPortControl=document.getElementById(_dbPortControlId);
	if (_dbPortControl)
		_dbPort = _dbPortControl.value;

	var _dbUserNameControl=document.getElementById(_dbUserNameControlId);
	if (_dbUserNameControl)
		_dbUserName = _dbUserNameControl.value;

	var _dbPassControl=document.getElementById(_dbPassControlId);
	if (_dbPassControl)
		_dbPass = _dbPassControl.value;

	var _dbNameControl=document.getElementById(_dbNameControlId);
	if (_dbNameControl)
		_dbName = _dbNameControl.value;
		
	var theUrl = HishopAjaxDirUrl + "/HishopSetup.aspx?Type=VerifyDB&DbType="+_type+
	"&Address=" +
	escape(_dbAddress)+
	"&Port="+
	escape(_dbPort)+
	"&UserName="+
	escape(_dbUserName)+
	"&Pass="+
	escape(_dbPass)+
	"&DbName="+
	escape(_dbName);
	//alert(theUrl);
	
	var _nextLink=document.getElementById("SetupStep3_NextLink");
	var _parentLink=document.getElementById("SetupStep3_ParentLink");
	var _waitingMessage=document.getElementById("Message3");
	
	if (_nextLink)
		_nextLink.style.display="none";
	
	if (_parentLink)
		_parentLink.style.display="none";
		
	if (_waitingMessage)
		_waitingMessage.style.display="inline";
		
this.Back = function(_backText){
		if (_backText.trim()=="SUCCEED")
		{
			document.location="SetupStep4.aspx";
		}
		else
		{
			alert(_backText);
			if (_nextLink)
				_nextLink.style.display="inline";
				
			if (_parentLink)
				_parentLink.style.display="inline";
			
			if (_waitingMessage)
				_waitingMessage.style.display="none";
				
		}
	}
		
	//document.write(theUrl);
	GetValue2(theUrl, this.Back);	
}
function HishopSetAdminInfoAndSiteInfo(_adminName,_adminPass,_siteName,_siteUrl,_siteEmail)
{
	var theUrl = HishopAjaxDirUrl + "/HishopSetup.aspx?Type=UpdateInfo"+
	"&AdminName="+
	escape(_adminName)+
	"&AdminPass=" +
	escape(_adminPass)+
	"&SiteName="+
	escape(_siteName)+
	"&SiteUrl="+
	escape(_siteUrl)+
	"&SiteEmail="+
	escape(_siteEmail);
	//alert(theUrl);
	
	var _nextLink=document.getElementById("SetupStep4_NextLink");
	var _parentLink=document.getElementById("SetupStep4_ParentLink");
	var _waitingMessage=document.getElementById("SetupStep4_Message3");
	
	if (_nextLink)
		_nextLink.style.display="none";
	
	if (_parentLink)
		_parentLink.style.display="none";
		
	if (_waitingMessage)
		_waitingMessage.style.display="inline";
		
this.Back = function(_backText){
		if (_backText.trim()=="SUCCEED")
		{
			document.location="SetupStep5.aspx";
		}
		else
		{
			alert(_backText);
			if (_nextLink)
				_nextLink.style.display="inline";
				
			if (_parentLink)
				_parentLink.style.display="inline";
			
			if (_waitingMessage)
				_waitingMessage.style.display="none";
				
		}
	}
		
	//document.write(theUrl);
	GetValue2(theUrl, this.Back);	
}
