AE.namespace('AE.app');

if(!AE.app.tipTextfield){
AE.app.tipTextfield = function (){

	// 默认配置
	this.config = {
		textfieldId		:'',			// 输入框 ID (必须)
		submitButtonId	:'',			// 提交按钮 ID
		tipClassName	:'text-tip',	// 输入框提示分类名 (必须)
		tipText			:'',			// 输入框提示信息 (必须)
		tipTextFocus	:'',			// 聚焦时输入框提示信息
		onBlur			:null			// 失去焦点时执行的事件
	};

	// 内部缓存区
	this.temp = {
		text			:'',			// 已经输入的文本
		textfield		:null,			// 输入框
		submitButton	:null			// 提交按钮
	};
};

AE.app.tipTextfield.prototype = {
	/**
	 * 初始化
	 */
	init: function(customConfig) {
		// 组合参数
		this.config=YL.merge(this.config,customConfig||{});
		var _self=this,config=this.config,temp=this.temp;

		// 获得输入框, 并加上聚焦和失去焦点的事件
		temp.textfield = get(config.textfieldId);
		if(_self.getVisibleText() == config.tipText) {
			_self.setVisibleText('');
		}
		
		YUE.on(temp.textfield,'focus',_self.focus,{_self:_self});
		YUE.on(temp.textfield,'blur',_self.blur,{_self:_self});

		// 如果指定了提交按钮 ID, 则获取提交按钮, 并加上点击提交事件
		if(config.submitButtonId){
			temp.submitButton = get(config.submitButtonId);
			YUE.on(temp.submitButton,'click',_self.submit,{_self:_self});
		}

		// 初始化时, 让输入框失去焦点
		_self.blur(null, {_self:_self});
	},

	/**
	 * 输入框聚焦
	 */
	focus: function(ev, args) {
		var _self = args._self;
		var temp = _self.temp;
		var config = _self.config;

		// 如果输入框为空, 显示辅助信息, 移除提示 className
		if(_self.isEmpty()) {
			_self.setVisibleText(config.tipTextFocus);
			YUD.removeClass(temp.textfield, config.tipClassName);
		}
	},

	/**
	 * 输入框失去焦点
	 */
	blur: function(ev, args) {
		var _self = args._self;
		var temp = _self.temp;
		var config = _self.config;

		// 获取最新输入
		temp.text = _self.getVisibleText();

		// 如果输入框为空, 添加提示 className, 显示提示信息
		if(_self.isEmpty()) {
			YUD.addClass(temp.textfield, config.tipClassName);
			_self.setVisibleText(config.tipText);
		}

		if(config.onBlur) {
			config.onBlur();
		}
	},

	/**
	 * 点击提交
	 */
	submit:function(ev, args) {
		var _self = args._self;

		// 如果输入框为空, 阻塞提交
		if(_self.isEmpty()) {
			YUE.stopEvent(ev);
		}
	},

	/**
	 * 判断输入框是否为空
	 */
	isEmpty: function() {
		if(this.getText().length <= 0) {
			return true;
		}

		return false;
	},

	/**
	 * 获取文本内容
	 */
	getText: function() {
		return this.temp.text;
	},

	/**
	 * 获取可见的文本内容
	 */
	getVisibleText: function() {
		return this.temp.textfield.value;
	},

	/**
	 * 设置可见的文本内容
	 */
	setVisibleText: function(text) {
		this.temp.textfield.value = text;
	}

};
}
