﻿// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.

Type.registerNamespace('GSAjaxControls');

GSAjaxControls.TextPosition = function() {
    throw Error.invalidOperation();
}
GSAjaxControls.TextPosition.prototype = {
    Left : 0,
    Inline : 1,
    Right : 2
}
GSAjaxControls.TextPosition.registerEnum("GSAjaxControls.TextPosition", false);


GSAjaxControls.TextLengthLimitBehavior = function(element) {

    GSAjaxControls.TextLengthLimitBehavior.initializeBase(this, [element]);

    // Properties
    this._maxLength = null;
    this._displayControlID = null;
    this._singleCharacterText = null;
    this._multipleCharacterText = null;
    this._textPosition = GSAjaxControls.TextPosition.Left;
    
    // Member variables
    this._keyUpHandler = null;

}

GSAjaxControls.TextLengthLimitBehavior.prototype = {

    initialize : function() {
        GSAjaxControls.TextLengthLimitBehavior.callBaseMethod(this, 'initialize');

        this._keyUpHandler = Function.createDelegate(this, this._keyUp);
        $addHandler(this.get_element(), 'keyup', this._keyUpHandler);

		this._keyUp();
    },

    dispose : function() {
         if (this._keyUpHandler) {
            $removeHandler(this.get_element(), "keyup", this._keyUpHandler);
            this._keyUpHandler = null;
        }
        
        GSAjaxControls.TextLengthLimitBehavior.callBaseMethod(this, 'dispose');
    },

    _keyUp : function() {
		var element = this.get_element();
		var maxLimit = this._maxLength;
		
		if (maxLimit > 0)
		{
			if (element.value.length <= maxLimit)
			{
				if (this._displayControlID != null)
				{
					var displayText = this._getDisplayText();
					
					var displayControl = document.getElementById(this._displayControlID);
					if ((displayControl.canHaveHTML) 
							|| (displayControl.innerHTML) /* for General Compatibility */
							|| (displayControl.toString() == '[object HTMLDivElement]') /* for General Compatibility */
							|| (displayControl.toString() == '[object HTMLElement]') /* for Opera Compatibility */
							|| (displayControl.toString() == '[object HTMLSpanElement]')  /* for Mozilla Compatibility */)
					{
						displayControl.innerHTML = displayText;
					}
					else
					{
						displayControl.value = displayText;
					}
				}
			}
			else
			{
				element.value = element.value.substring(0, maxLimit);
			}
		}
	},
	
	_getDisplayText : function() {
		var element = this.get_element();
		var remainingLength = (this._maxLength - element.value.length)
		
		var displayText = '';
		if (remainingLength != 1)
		{
			workingText = this._multipleCharacterText;
		}
		else
		{
			workingText = this._singleCharacterText;
		}
		
		if ((workingText != null) && (workingText != ''))
		{
			switch (this._textPosition) {
				case GSAjaxControls.TextPosition.Inline :
					var iLocation = workingText.indexOf('{0}');
					if (iLocation != -1)
					{
						displayText = workingText.substring(0,iLocation) + remainingLength 
							+ workingText.substring(iLocation + 3);
					}
					else
					{
						displayText = workingText;
					}
					break;
				case GSAjaxControls.TextPosition.Right :
					displayText = workingText + remainingLength;
					break;	
				case GSAjaxControls.TextPosition.Left :
				default :
					displayText = remainingLength + workingText;
					break;
			}
		}
		else
		{
			displayText = remainingLength;
		}
		
		
		return displayText;
	},

    get_MaxLength : function() {
        return this._maxLength;
    },
    
    set_MaxLength : function(value) {
		if (this._maxLength != value) {
			this._maxLength = value;
			this.raisePropertyChanged('MaxLength');
		}
    },
    
    get_DisplayControlID : function() {
        return this._displayControlID;
    },

    set_DisplayControlID : function(value) {
		if (this._displayControlID != value) {
			this._displayControlID = value;
			this.raisePropertyChanged('DisplayControlID');
		}
    },
    
    get_SingleCharacterText : function() {
		return this._singleCharacterText;
    },
    
    set_SingleCharacterText : function(value) {
		if (this._singleCharacterText != value) {
			this._singleCharacterText = value;
			this.raisePropertyChanged('SingleCharacterText');
		}
    },
    
    get_MultipleCharacterText : function() {
		return this._multipleCharacterText;
    },
    
    set_MultipleCharacterText : function(value) {
		if (this._multipleCharacterText != value) {
			this._multipleCharacterText = value;
			this.raisePropertyChanged('MultipleCharacterText');
		}
    },
    
    get_TextPosition : function() {
		return this._textPosition;
    },
    
    set_TextPosition : function(value) {
		if (this._textPosition != value) {
			this._textPosition = value;
			this.raisePropertyChanged('TextPosition');
		}
    }
}

GSAjaxControls.TextLengthLimitBehavior.registerClass('GSAjaxControls.TextLengthLimitBehavior', AjaxControlToolkit.BehaviorBase);


if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();