if( typeof(Prototype)=='undefined' || typeof(Prototype.Version)=='undefined' || Prototype.Version != '1.5.0' )
{
	alert('未发现 prototype.js ，或并非 1.5.0 版本。网页上的功能可能存在问题。') ;
}

function UIForm( Form )
{
	if( typeof(Form)=='object' )
		this.Form = Form ;
	else
		this.Form = $(Form) ;
	
	if(this.Form==null)
	{
		alert("UIForm()构造函数 传入了一个无效的的 Form 对象 或 ID："+Form) ;
		return ;
	}
		
	this.bVDFocusToFail = true ;
	
	this.Controls = new Array() ;

}

UIForm.prototype.AddCtrl = function( CtrlObj )
{
	if( typeof(CtrlObj)!='object' )
		return false ;
	
	// 检查 是否与 空控件
	if( typeof(CtrlObj.Ctrl)=='undefined' )
	{
		alert('[ASSERT]正在向 UIForm::AddCtrl 传入缺少“Ctrl”属性的对象') ;
		return false ;
	}

	/*if( typeof(CtrlObj.Ctrl.id)=='undefined' || CtrlObj.Ctrl.id=='' )
		return false ;*/
		
	// 检查 是否实现 “接口函数”
	if( typeof(CtrlObj.VerifyData)=='undefined' )
	{
		alert('[ASSERT]正在向 UIForm::AddCtrl 传入的对象尚未实现“VerifyData”方法') ;
		return false ;
	}
	/*if( typeof(CtrlObj.SetValue)=='undefined' )
		return false ;*/
	if( typeof(CtrlObj.GetValue)=='undefined' )
	{
		alert('[ASSERT]正在向 UIForm::AddCtrl 传入的对象尚未实现“GetValue”方法') ;
		return false ;
	}
	
	this.Controls.push( CtrlObj ) ;
}

UIForm.prototype.VerifyData = function(VerifyAll)
{
	if(typeof(VerifyAll)=='undefined')
		VerifyAll = false ;

	bRet = true ;
	for(var idx=0; idx<this.Controls.length; idx++)
	{
		// 是否忽略
		if( this.Controls[idx].bIgnore )
			continue ;

		if( !this.Controls[idx].VerifyData() )
		{
			// 将焦点给校验失败的第一个控件
			if( this.bVDFocusToFail && bRet && this.Controls[idx].bCanFocus )
				this.Controls[idx].Ctrl.focus() ;

			if(!VerifyAll)
				return false ;
				
			bRet = false ;
		}
	}
	
	return bRet ;
}

UIForm.prototype.ToggleIgnore = function( CtrlId /*, CtrlId2, CtrlId3, ...*/ )
{
	for(idx=0;idx<arguments.length;idx++)
	{
		Ctrl = arguments[idx] ;
		Ctrl.bIgnore = !Ctrl.bIgnore ;
	}
}

UIForm.prototype.ToggleAllowEmpty = function( CtrlId /*, CtrlId2, CtrlId3, ...*/ )
{
	for(idx=0;idx<arguments.length;idx++)
	{
		Ctrl = arguments[idx] ;
		Ctrl.bVDAllowEmpty = !Ctrl.bVDAllowEmpty ;
	}
}

UIForm.prototype.ToggleDisabled = function( CtrlId /*, CtrlId2, CtrlId3, ...*/ )
{
	for(idx=0;idx<arguments.length;idx++)
	{
		arguments[idx].ToggleDisabled() ;
		/*Ctrl = arguments[idx] ;
		Ctrl.disabled = !Ctrl.disabled ;
		Ctrl.bVDAllowEmpty = !Ctrl.bVDAllowEmpty ;
		Ctrl.bIgnore = !Ctrl.bIgnore ;*/
	}
}

UIForm.prototype.BindSubmit = function()
{
	if( typeof(this.Form)=='undefined' )
		return ;

	this.Form.JSFormObj = this ;
	
	SetTimeoutExp = 'TheJSFormObj = document.'+this.Form.name+'.JSFormObj; if(TheJSFormObj.OnBeforeSubmit)TheJSFormObj.OnBeforeSubmit() ; if(TheJSFormObj.OnSubmit)TheJSFormObj.OnSubmit(); else TheJSFormObj.DefaultOnSubmit()' ;
	//alert(SetTimeoutExp)
	this.Form.onsubmit = function()
	{
		setTimeout( SetTimeoutExp, 10);
		return false ;
	}
}

UIForm.prototype.DefaultOnSubmit = function()
{
	if( !this.VerifyData(false) )
		return false ;
	
	// 禁用 忽略的 控件 
	for(var idx=0; idx<this.Controls.length; idx++)
	{
		if( this.Controls[idx].bIgnore )
			this.Controls[idx].Ctrl.disabled = true ;
	}
	
	this.Form.submit() ;
}

UIForm.prototype.Submit = function()
{ this.Form.onsubmit() ; }

UIForm.prototype.GetInput = function(InputName)
{
	if( typeof(this.Form[InputName])=='undefined' )
		return null ;
	return this.Form[InputName] ;
}

// 留待用户定义的事件
UIForm.prototype.OnSubmit = null ;

UIForm.prototype.OnBeforeSubmit = null ;

