var IW_SingleField = Class.create({

	SUBMIT_CLASS_NAME: 'auto_submit',
	WRAPPER_CLASS: 'single_blue',

	m_objWrapper: null,

	m_objField: null,
	
	m_objSubmit: null,
	
	m_strInfo: null,
	
	action: null,

	initialize: function(p_strFieldId, p_strInfo, p_strPrefix){
		this.m_objField = $(p_strFieldId);
		
		this.m_objField.wrap('div', {'class': this.WRAPPER_CLASS});
		
		
		this.m_objWrapper = $(this.m_objField.parentNode);
		if(p_strPrefix){
			this.m_objField.insert({before: p_strPrefix});
		}
		this.m_strInfo = p_strInfo;
		this.m_objField.observe('focus', this._onFocus.bindAsEventListener(this));
		this.m_objField.observe('blur', this._onBlur.bindAsEventListener(this));
		this.m_objField.value = this.m_strInfo;
		
		this.m_objSubmit = new Element("div", {"class": this.SUBMIT_CLASS_NAME});
		
		this.m_objWrapper.insert(this.m_objSubmit);
		
		this.m_objSubmit.observe('click', this._onSubmit.bindAsEventListener(this));
		this.m_objField.observe('keydown', this._onEnter.bindAsEventListener(this));
		
	},
	
	_onFocus: function(event){
		var objField = Event.element(event);
		if(objField.tagName.toLowerCase() == 'input'){
			if(objField.value == this.m_strInfo)
				objField.value = "";
		}
	},
	
	_onBlur: function(event){
		var objField = Event.element(event);
		if(objField.tagName.toLowerCase() == 'input'){
			if(objField.value.replace(/ /g, "") == "")
				objField.value = this.m_strInfo;
		}
	},
	
	_onEnter: function(event){
		var objField = Event.element(event);
		if(objField.tagName.toLowerCase() == 'input' && event.keyCode == Event.KEY_RETURN && this._validate()){
			Event.stop(event);
			if(this.action){
				this.action(this.m_objField.value);
			}
			
			this.m_objField.value = "";
		}
	},
	
	
	
	_onSubmit: function(event){
		var objSubmit = Event.element(event);
		if(objSubmit.className.indexOf(this.SUBMIT_CLASS_NAME) > -1 && this._validate() ){
			
			if(this.action){
				this.action(this.m_objField.value);
			}
			
			this.m_objField.value = this.m_strInfo;
		}
	},
	
	_validate: function(){
		return this.m_objField.value != this.m_strInfo && this.m_objField.value.replace(/ /g, "") != "";
	}
});
