InputboxExtension = {
	validateStatus: 0, 
	f_ax: false,
	f_hh: $H(),
	f_bu: "",
	f_fm: 500,
	autoValidate: false,
	asyncValidate: false,
	f_ap : false,
	f_aF: false,
	f_x:{blankInput:"please input"},
	initialize: function(f_x, f_ax) {
		this.f_x = f_x;
		this.f_ax = f_ax || false;
		this.f_aF = true;
		this.f_p = $(document.createElement("div"));
		this.f_p.className = "inputExtendBox";
		this.f_p.style.left = this.offsetLeft+"px";
		this.f_p.style.visibility="hidden";
		this.parentNode.appendChild(this.f_p);
		if (this.value =="" || this.value == this.f_x.blankInput ) {
			this.f_f(5);
			this.value=this.f_x.blankInput;
		}
		Event.observe(this,"blur",this.f_fl.bindAsEventListener(this));
		Event.observe(this,"keydown",this.f_dJ.bindAsEventListener(this));
		Event.observe(this,"keyup",this.f_ez.bindAsEventListener(this));
		Event.observe(this,"focus",this.f_eA.bindAsEventListener(this));
		
	},
	f_ez: function(event) {
		if (this.value!=this.f_bu) this.f_f(0);
	},
	f_dJ: function(event) {
		this.f_bu = this.value;
	},
	f_eA: function() {
		if (this.f_ap) {
			this.f_ap = false;
			return;
		}

		if (this.validateStatus == 5) {
			this.value = "";
			this.f_f(0); 
		} else {
			this.select();
		}
	
	},
	isShownInExtendBox: function(_content) {
		if (!this.f_p.visible()) return false;
		if (typeof(_content) == "string") return (this.f_p.innerHTML == _content)?true:false;
		if (typeof(_content) == "object") return _content.descendantOf(this.f_p)
		return false;
	},
	fillExtendBox: function(_content) {
		_content = _content || false;
		if (_content && _content!="" && _content!=null) {
			if (typeof(_content) == "string" && this.f_p.innerHTML != _content) this.f_p.innerHTML = _content;
			else if (typeof(_content) == "object") {
				this.f_p.clear();
				this.f_p.appendChild(_content); 
			}	
			this.f_p.style.visibility="visible";
		} else {
			this.f_p.clear();
			this.f_p.style.visibility="hidden";
		}
		return this.f_p;
	},
	f_fl: function(event) {
		if (Prototype.Browser.IE && document.activeElement.tagName.toUpperCase()=="IFRAME") {
			this.f_ap = true;
			this.focus();
			return false; 
		}		
		if (this.value.strip() == "") {
			this.f_f(5);
			this.value=this.f_x.blankInput;
		} else {
			if (this.f_aF) this.value = this.value.replace(/[~!@#\$%\^&\*\(\)_\+<>\?:\\\\"\|\{\}`,\.\/;'\\\{\}]+/ig,"");
			if (this.autoValidate) {
				setTimeout(function() {
					if (this.validateStatus!=2 && this.validateStatus!=3) {
						this.f_f(1);
						this.f_ax(this.value);
					}
				}.bind(this),this.f_fm);
			}
		}
	},
	f_f: function(f_y) {
		if (f_y!=this.validateStatus) {
			this.removeClassName("vstatus" + this.validateStatus);
			this.validateStatus = f_y;  
			this.addClassName("vstatus" + f_y);
			}
	},
	setValue: function(f_i, f_dM) {
		this._oValue = this.value;
		this.value = f_i;
		if (this._oValue != this.value) Event.fire(System, "citychange")
		if (f_dM) this.f_f(2);
		else this.f_f(0);
	},
	setValidate: function(f_dE) {
		this.f_bu = this.value;
		if (f_dE) this.f_f(2);
		else this.f_f(3);
	},
	validate: function() {
		if (this.validateStatus == 1 || this.validateStatus==3) return false;
		if (this.validateStatus == 2 ) return true;
		if (this.validateStatus == 0) {
			if (this.f_ax) {
				this.f_ax();
				return false;
			} else {
				return true;
			}
		}
		return false;
	}
};
