function UserInfoDlg( config ){

	var self = this;	
	var defConfig = {
		type			:	'show',      // 'show',  'edit',  'add', register
		title			:	'UserInfoDlg',		
		width			:	500,
		height			:	300,
		privilegeeditable:	true,	
		usereditable	:	true,
		keyhidden		:	true,	
		UserData		:	null,
		successCallback	:	null,
		failCallback	:	null
	};
	
	Ext.apply( this, defConfig );
	Ext.apply( this, config);
	
	self.storePrivilege = new Array();
	for( var i = 0; i < LangUserPrivilege.length-2; i++ ){
		self.storePrivilege.push( getFileStr( LangUserPrivilege, i ) );		
	}
	
	var		userdisable;
	if( self.UserData==null){
		self.UserData = new oUser(); 
	}
	
	if( self.type=='show' ){
		self.disable = true;
	}
	else if( self.type=='edit' ){
		self.disable = false;
	}
	else if( self.type=='add' ){
		self.disable = false;
	}

	if( self.type == 'register' ){
		self.disable = false;
		self.keyhidden = false;
		self.height = 340;
		
		self.TextField_user =  new Ext.form.TextField({
		    fieldLabel	: '*'+getStr(s_User), 
		    value 		: self.UserData.Username,
		    disabled 	: !self.usereditable,
		    allowBlank	: false,
		    anchor		: '100%'
		});
	
		self.text_user = {
			baseCls	: 	'x-plain',
			layout	:	'column',
			items	:	[
				{	
					baseCls	: 	'x-plain',
					layout	:	'form',
					width	:	180,
					items	:	[ self.TextField_user ]
				},{	
					baseCls	: 	'x-plain',
					//layout	:	'',
					items	:	[
						{
							xtype	:	'button',
							text	:	getStr( s_Check ),
							handler	:	function(){ self.CheckUser(); }
						}
					]
				}

			],
			getValue:	function(){
				return 	self.TextField_user.getValue();
			}
		};
	}
	else{
		self.text_user =  new Ext.form.TextField({
		    fieldLabel	: '*'+getStr(s_User), 
		    value 		: self.UserData.Username,
		    disabled 	: !self.usereditable,
		    allowBlank	: false,
		    anchor		: '90%'
		});			
	}

	self.text_Password = new Ext.form.TextField({ 
        fieldLabel	: '*'+getStr(s_Password), 
        value 		: self.UserData.Password,
        inputType	: 'password',
        disabled 	: self.disable,
        allowBlank	: false,
        anchor		: '90%'  
    });
    
    self.text_Name = new Ext.form.TextField({ 
        fieldLabel	: '*'+getStr(s_Name), 
        value 		: self.UserData.FLName,   
        disabled 	: self.disable,
        allowBlank	: false,
        anchor		: '90%'  
    })
    
    self.Privilege = new Ext.form.ComboBox({
		fieldLabel		: 	'*'+getStr(s_Privilege),
        store			: 	self.storePrivilege,
       	value 			: 	getUserPrivilegeStr( self.UserData.Privilege ),
        disabled 		: 	!self.privilegeeditable,
        editable 		:	false,
        typeAhead		: 	true,
        mode			: 	'local',
        triggerAction	: 	'all',
        selectOnFocus	:	true,
        readOnly 		: 	true,
        forceSelection	: 	true,
        allowBlank		: 	false,
        anchor			: 	'90%'
	});
	
	self.text_Repassword = new Ext.form.TextField({  
        fieldLabel	: 	'*'+getStr(s_ReinputPassWord),
        value 		: 	self.UserData.Password,
        inputType	: 	'password',            
        readOnly	: 	self.disable,
        disabled 	: 	self.disable,
        allowBlank	: 	false,
        anchor		: 	'90%',
        validator 	: 	function(){
        	if( self.text_Password.getValue() == self.text_Repassword.getValue() ){
        		return true;
        	}
        	else{
        		return false;
        	}
        }
    });
    
    self.number_Tel	= new Ext.form.NumberField({
        fieldLabel	: getStr(s_Telephone), 
        value 		: self.UserData.TelNo,
        disabled 	: self.disable,
        anchor		: '90%'  
    });
    
    self.text_CoName = new Ext.form.TextField({
        fieldLabel	: getStr(s_CompanyName),
		value 		: self.UserData.Coname,
		disabled 	: self.disable,
        anchor		: '95%'
	});
	
	self.text_CoAdr = new Ext.form.TextField({
        fieldLabel	: getStr(s_CompanyAddress),
		value 		: self.UserData.Address,	 
		readOnly	: self.disable,
		disabled 	: self.disable,
        anchor		: '95%'
	});
		        	
	self.text_Emaill = new Ext.form.TextField({
        vtype		: 'email',
        fieldLabel	: getStr(s_Emaill),
		value 		: self.UserData.Email,
		disabled 	: self.disable,
        anchor		: '95%'
	});
	
	self.text_Remark = new Ext.form.TextField({
        fieldLabel	: getStr(s_Remark),
		value 		: self.UserData.Remark,
		disabled 	: self.disable,
        anchor		: '95%'
	});
	
	self.text_Key = new Ext.form.TextField({
        fieldLabel	: 'key',
		hidden		: self.keyhidden,
        anchor		: '95%'	
	});
	
    self.Items = new Ext.FormPanel({
		id			:	self.id_Items,
		baseCls		: 	'x-plain',  
       	layout		: 	'form',  
       	labelWidth	:	110,  
        items		: 	[
        	{
       			baseCls	: 	'x-plain',
	            layout	:	'column',
	            items	:	[
	            	{
	            		baseCls		: 	'x-plain',
	            		columnWidth	:	0.5, 
	            		layout		: 	'form',   
				        labelWidth	:	90,   
				        items		: 	[
							self.text_user, 
							self.text_Password, 
							self.text_Name
						]
	            	},{
	            		baseCls		: 	'x-plain',
	            		columnWidth	:	0.5, 
	            		layout		: 	'form',   
				        labelWidth	:	90,   
				        items		: 	[
						    self.Privilege,
						    self.text_Repassword, 
						    self.number_Tel
						]
	            	}
	            ] 
	        },{
	        	baseCls	: 'x-plain',
	        	html	: '&nbsp;'
	    	},
	    	self.text_CoName,
	    	self.text_CoAdr,
	    	self.text_Emaill,
	    	self.text_Remark,
	    	{
	        	baseCls	: 'x-plain',
	        	html	: '&nbsp;'
	    	},
	    	self.text_Key
        ]
	});

	self.show = function( ){
		if( self.Window ){
			self.Window.close();
			self.Window = null;
		}
		self.Window = new Ext.Window({
		    title		: 	self.title,
		    resizable 	: 	false,
		    width		: 	self.width,
		    height		: 	self.height,
		    bodyStyle	: 	'padding:20px 0px 0px 20px;',
		    items		: 	self.Items,
		    buttons		:   [
				{
					hidden	: self.disable,
			        text	: getStr(s_Submit),
			        handler : function(){ self.submit();}
				},
				{
			        text	: getStr(s_Close),
			        handler	: function(){self.Window.close();}
				}
			]
		}); 

		self.Window.show();		
	}
	
	self.submit = function(){
		var isValid = PrivilegeIsValid({
			key		:	'UserInfoManage',
			user	:	getLocalUserName()
		});
		if( !isValid ){
			return;
		}	
			
		if( !self.Items.form.isValid() ){
			return;
		}
		
		self.iPrivilege = 0;
    	for( var i=0; i<LangUserPrivilege.length; i++ ){
    		if( getFileStr( LangUserPrivilege, i ) == self.Privilege.getValue() ){
    			self.iPrivilege = i;
    			break;
    		}
    	}

    	var strXML;
    	if( self.type == 'add' ){
    		strXML = CreateXML_AddSubUser( 
    			getUserUID(),
    			getLocalUserName(),
				self.text_user.getValue(), 
				self.text_Password.getValue(),
				self.iPrivilege, 
				self.text_Name.getValue(), 
				self.text_CoName.getValue(), 
				self.number_Tel.getValue(), 
				self.text_CoAdr.getValue(), 
				self.text_Emaill.getValue(), 
				self.text_Remark.getValue()
			);
    	}
    	else if ( self.type == 'edit' ){
    		strXML = CreateXML_EditUserInfo(
    			getUserUID(),
    			getLocalUserName(),
				self.text_user.getValue(), 
				self.text_Password.getValue(),
				self.iPrivilege, 
				self.text_Name.getValue(), 
				self.text_CoName.getValue(), 
				self.number_Tel.getValue(), 
				self.text_CoAdr.getValue(), 
				self.text_Emaill.getValue(), 
				self.text_Remark.getValue()
    		);
    	}
    	else if ( self.type == 'register' ){
    		strXML = CreateXML_CreateUser( 
				self.text_user.getValue(), 
				self.text_Password.getValue(),
				0, 
				self.text_Name.getValue(), 
				self.text_CoName.getValue(), 
				self.number_Tel.getValue(), 
				self.text_CoAdr.getValue(), 
				self.text_Emaill.getValue(),
				self.text_Key.getValue(), 
				self.text_Remark.getValue()
			);
    	}      	

		AsySendXMLData( strXML, self.Success, self.Fail  );
    }
    
	self.Success = function( RecvText ){
		
		var result = parseProtocolData( parseXML(RecvText) );
		
		if( showAjaxStatus != null ){
			showAjaxStatus();
		}
		if( wait_end != null ){
			wait_end();		
		}

		if( result == 1 ){
			self.Window.close();
			self.UserData.Username	= self.text_user.getValue(); 
			self.UserData.Password	= self.text_Password.getValue();
			self.UserData.Privilege	= self.iPrivilege; 
			self.UserData.FLName 	= self.text_Name.getValue(); 
			self.UserData.TelNo		= self.number_Tel.getValue(); 
			self.UserData.Email		= self.text_Emaill.getValue(); 
			self.UserData.Coname	= self.text_CoName.getValue(); 
			self.UserData.Address	= self.text_CoAdr.getValue(); 
			self.UserData.Remark	= self.text_Remark.getValue();
			
			if( self.successCallback!=null ){
				self.successCallback( self.UserData );
			}
		}
		else{
			if( self.failCallback!=null ){
				self.failCallback();
			}
		}
	}
	
	self.Fail = function(){
		
		if( showAjaxStatus != null ){
			showAjaxStatus();
		}
		if( wait_end != null ){
			wait_end();		
		}
		if( self.failCallback!=null ){
			self.failCallback();
		}
		self.Window.close();
	}
	
	self.CheckUser = function(){
		var strUserName = self.TextField_user.getValue();
		if( strUserName.length < 1 ){
			return;
		}
		var strXML = CreateXML_CheckUser( strUserName );
		
		AsySendXMLData(
			strXML,
			function( RecvText ){
				var result = parseProtocolData( parseXML(RecvText) );
				if( result == 1 ){
					Ext.Msg.alert( getStr( s_Tip ), getStr( s_HasUserName ) );
				}
				else{
					Ext.Msg.alert( getStr( s_Tip ), getStr( s_NoUserName ) );
				}
				
				if( wait_end != null ){
					wait_end();		
				}
			},
			function(){
				
				if( wait_end != null ){
					wait_end();		
				}	
			}
		);
	}
}
//alert ( "UserInfodlg.js" );