/*
 * 特别声明：本技术材料受《中华人民共和国著作权法》、《计算机软件保护条例》等法律、法规、行政
 * 规章以及有关国际条约的保护，赞同科技享有知识产权、保留一切权利并视其为技术秘密。未经本公司书
 * 面许可，任何人不得擅自（包括但不限于：以非法的方式复制、传播、展示、镜像、上载、下载）使用，
 * 不得向第三方泄露、透露、披露。否则，本公司将依法追究侵权者的法律责任。特此声明！
 *
 * Special Declaration: These technical material reserved as the technical secrets by AGREE
 * TECHNOLOGY have been protected by the "Copyright Law" "ordinances on Protection of Computer
 * Software" and other relevant administrative regulations and international treaties. Without
 * the written permission of the Company, no person may use (including but not limited to the
 * illegal copy, distribute, display, image, upload, and download) and disclose the above
 * technical documents to any third party. Otherwise, any infringer shall afford the legal
 * liability to the company.
 */


/**
 * Created by heweijun on 2016/6/7.
 */

export class MaxLengthValidator {
    private maxLength: number;
    private id: string;
    private textNode: HTMLInputElement;

    constructor(id: string, textNode: HTMLInputElement, maxLength: number) {
        this.id = id;
        this.textNode = textNode;
        this.maxLength = maxLength;
    }

    setMaxLength(maxLength: number) {
        this.maxLength = maxLength;
    }

    handleModifyEvent() {
        if (this.maxLength < 0) {
            return;
        }
        let count = 0;
        //                        var textNode = text._getTextNode();
        //length 获取字数数，不区分汉子和英文
        for (let i = 0; i < this.textNode.value.length; i++) {
            //charCodeAt()获取字符串中某一个字符的编码
            let c = this.textNode.value.charCodeAt(i);
            //单字节加1
            if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
                count++;
            }
            else {
                count += 2;
            }
            if (count > this.maxLength) {
                let selectionStart = this.textNode.selectionStart;
                let selectionEnd = this.textNode.selectionEnd;
                this.textNode.value = this.textNode.value.substr(0, i);
                if (selectionEnd <= i) {
                    this.textNode.selectionStart = selectionStart;
                    this.textNode.selectionEnd = selectionEnd;
                }
                //TODO handle
                //sender.syncAttribute(this.id, null, null, EventTypes.VERIFY, "autoFocus");
                break;
            } else if (count === this.maxLength) {
                //TODO handle
                //sender.syncAttribute(this.id, null, null, EventTypes.VERIFY, "autoFocus");
            }
        }
    }
}
