//-----------------------------------------------------------------------
// Copyright (C) Totaljobs Group Ltd. All rights reserved. 
//-----------------------------------------------------------------------

Type.registerNamespace("PJB.UI.Controls");

PJB.UI.Controls.TextBox = function(element) {
    PJB.UI.Controls.TextBox.initializeBase(this, [element]);
    this._defaultButton = "";
    this._defaultText = "";
    this._defaultTextCssClass = "";
    this._maxLength = 0;
}
PJB.UI.Controls.TextBox.prototype = {
    initialize: function() {
        PJB.UI.Controls.TextBox.callBaseMethod(this, "initialize");
        var element = this.get_element();
		// attach event handlers
		if (this.get_defaultButton()) {
			// activate default button on pressing enter key
			$addHandlers(element, {
				"keypress": this._onKeyPress
			}, this);
		}
		if (this.get_defaultText()) {
			element.setAttribute("title", this.get_defaultText());
			$addHandlers(element, {
				"focus": this._onFocus,
				"blur": this._onBlur
			}, this);
		}
		// handle max length for multi-line text box
		if (element.tagName.toLowerCase() === "textarea") {
			if (this.get_maxLength() > 0) {
				$addHandlers(element, {
					"change": this._onMaxLength,
					"keydown": this._onMaxLength,
					"keyup": this._onMaxLength
				}, this);
			}
		}
		this._onBlur();
		
		// TK: Kept for backward compatibility!
		// C:\VSS\root\PJB\UI\Recruiters\CandidateSearch\Client\CandidateSearchBuilderPart.js (305)
		window.TextBox_HasText = function(clientId) {
			var element = $get(clientId);
			if (element && element.control) {
				return element.control.get_text().length > 0;
			}
			return false;
		};
    },
	dispose: function() {
        PJB.UI.Controls.TextBox.callBaseMethod(this, "dispose");
    },
    
    _onKeyPress: function(ev) {
		if (ev.charCode === Sys.UI.Key.enter) {
			// disable default button activation
			var buttonId = this.get_defaultButton();
			if (buttonId) {
				ev.preventDefault();
				if (buttonId.toLowerCase() !== "disable") {
					var button = $get(buttonId);
					if (button) {
						var eventTarget = document.forms[0]["__EVENTTARGET"];
    					if (eventTarget) {
    						eventTarget.value = button.name;
    					}
    					try {
    						button.click();
    					} catch (err) {}
   					}
   				}
   			} // else perform default action
   		}
    },
    
    _onFocus: function(ev) {
		var element = this.get_element();
		var defaultText = this.get_defaultText();
		if (defaultText.length > 0) {
			if (element.value === defaultText) {
				element.value = "";
				var defaultTextCssClass = this.get_defaultTextCssClass();
				if (defaultTextCssClass.length > 0) {
					Sys.UI.DomElement.removeCssClass(element, defaultTextCssClass);
				}
			}
		}
    },
    
    _onBlur: function(ev) {
		var element = this.get_element();
		var defaultText = this.get_defaultText();
		if (defaultText.length > 0) {
			if (element.value.length === 0) {
				element.value = defaultText;
				var defaultTextCssClass = this.get_defaultTextCssClass();
				if (defaultTextCssClass.length > 0) {
					Sys.UI.DomElement.addCssClass(element, defaultTextCssClass);
				}
			}
		}
    },
    
    _onMaxLength: function(ev) {
		var element = this.get_element();
		var maxLength = this.get_maxLength();
		var remaining = maxLength - element.value.length;
		if (!(ev.ctrlKey && ev.ctrlLeft)) {
			if (IsPrintableKey(ev.charCode)) {
				// truncate text to max length
				if (remaining <= 0) {
					element.value = element.value.substring(0, maxLength);
					// cancel event to discard key press
					ev.preventDefault();
				}
			}
		}
    },
    
	get_defaultButton: function() {
		return this._defaultButton;
	},
	set_defaultButton: function(value) {
		this._defaultButton = value;
	},
	
	get_defaultText: function() {
		return this._defaultText;
	},
	set_defaultText: function(value) {
		this._defaultText = value;
	},
		
	get_defaultTextCssClass: function() {
		return this._defaultTextCssClass;
	},
	set_defaultTextCssClass: function(value) {
		this._defaultTextCssClass = value;
	},

	get_maxLength: function() {
		return this._maxLength;
	},
	set_maxLength: function(value) {
		this._maxLength = value;
	},
	
	get_text: function() {
		var text = this.get_element().value;
		var maxLength = this.get_maxLength();
		if (maxLength > 0) {
			// Truncate text to MaxLength.
			if (text.length > maxLength) {
				return text.substring(0, maxLength);
			}
		}
		if (text === this.get_defaultText()) {
			text = "";
		}
		return text;
	}
}
PJB.UI.Controls.TextBox.registerClass("PJB.UI.Controls.TextBox", Sys.UI.Control);

Sys.Application.notifyScriptLoaded();
