﻿// JScript File
// Author: Diego Perini <dperini@nwbox.com>

var s = 0; //Biến lưu vị trí đầu của con trỏ
var e = 0; //Biến lưu vị trí cuối của con trỏ

var activeTextbox;      //Control chịu sự tương tác
var IsCaps = false;     //Tình trạng phím Caps
var IsShift = false;    //Tình trạng phím Shift
// Set ký tự vào textbox đang tương tác
//tmpChar : ký tự bình thường khi không dùng phím Shift hay Caps
//tmpChar2: ký tự dùng phím Shift hay Caps
//IsNumber: Phím truyền vào có phải là phím không chịu sự tác động của phím Caps hay không.
function setChar(tmpChar, tmpChar2, IsNumber)
{
    if (activeTextbox.value.length >= activeTextbox.maxLength)
        return;
    GetCaretPos();
    var strtmp = tmpChar;
    if(IsCaps)
    {
        if(!IsNumber)
        {
            if(!IsShift)
                strtmp = tmpChar2;
        }
        else
        {
            if(IsShift)
                strtmp = tmpChar2;
        }
    }
    else
        if(IsShift)
            strtmp = tmpChar2;
    try
    {
        activeTextbox.value = activeTextbox.value.substring(0, s) + strtmp + activeTextbox.value.substring(e);
        s++;
        e = s;
        setCaretTo(activeTextbox, s);
    }
    catch(z){}
    IsShift = false;
    //alert(s);
    
    //convertAtOnce(activeTextbox);
}
// Hiển thị keyboard lên khi focus vào textbox
function ShowKeyboard(left, top)
{
    if (!left || !top)
    {
        left = 0;
        top = 200;
    }
    s = e = getSelectionStart(activeTextbox);
    var virtualKeyboard = document.getElementById("VirtualKeyboard");
    virtualKeyboard.style.display = "block";
    virtualKeyboard.style.left = left;
    virtualKeyboard.style.top = top;
}
function BackspaceX()
{
    GetCaretPos();
    var strFirst = activeTextbox.value.substring(0, s);
    if(s < e)
        activeTextbox.value = strFirst + activeTextbox.value.substring(e);
    else if(s > 0)
    {
        activeTextbox.value = strFirst.substring(0, s - 1) + activeTextbox.value.substring(e);
        s--;
    }
    e = s;
    setCaretTo(activeTextbox, s);
}
function DoDelete()
{
    GetCaretPos();
    var strFirst = activeTextbox.value.substring(0, s);
    if(s < e)
        activeTextbox.value = strFirst + activeTextbox.value.substring(e);
    else
        activeTextbox.value = strFirst + activeTextbox.value.substring(e + 1);
    e = s;
    setCaretTo(activeTextbox, s);
}
function MoveLeft()
{
    if(s > 0 && s == e)
        s--;
    e = s;
    setCaretTo(activeTextbox, s);
}
function MoveRight()
{
    if(e < activeTextbox.value.length && s == e)
        e++;
    s = e;
    setCaretTo(activeTextbox, s);
}
function MoveFirst()
{
    s = e = 0;
    setCaretTo(activeTextbox, s);
}
function MoveLast()
{
    s = e = activeTextbox.value.length;
    setCaretTo(activeTextbox, s);
}
//Nhấn phím Caps
function Key_Caps()
{
    IsCaps = !IsCaps;
}
//Nhấn phím Shift
function Key_Shift()
{
    IsShift = !IsShift;
}
//Trả về dấu "
function getChar()
{
    return "\"";
}
//Lấy vị trí đầu tiên của con trỏ (có thể xem như vị trí đầu tiên lựa chọn text)
//objText là object textfield
function getSelectionStart(objText) 
{
	if (objText.createTextRange)
	{
		var r = document.selection.createRange().duplicate();
		r.moveEnd('character', objText.value.length);
		
		if (r.text == '') 
		    return objText.value.length;		
		return objText.value.lastIndexOf(r.text);
	} else 
	    return objText.selectionStart;	
}

//Lấy vị trí cuối cùng của con trỏ (có thể xem như vị trí cuối tiên lựa chọn text)
function getSelectionEnd(objText) 
{
	if (objText.createTextRange) 
	{
		var r = document.selection.createRange().duplicate();
		r.moveStart('character', -objText.value.length);
		return r.text.length;
	} else 
	    return objText.selectionEnd;
}

function DoEnter()
{
    HideKeyboard();
}

function HideKeyboard()
{
    var virtualKeyboard = document.getElementById("VirtualKeyboard");
    virtualKeyboard.style.display = "none";
}
//Set vị trí con trỏ
//obj: Đối tượng textbox
//pos: vị trí con trỏ cần xét
function setCaretTo(obj, pos) { 
    if(obj.createTextRange) { 
        /* Create a TextRange, set the internal pointer to
           a specified position and show the cursor at this
           position
        */ 
        var range = obj.createTextRange(); 
        range.move("character", pos); 
        range.select(); 
    } else if(obj.selectionStart) { 
        /* Gecko is a little bit shorter on that. Simply
           focus the element and set the selection to a
           specified position
        */ 
        obj.focus(); 
        obj.setSelectionRange(pos, pos); 
    } 
}
//Lấy vị trí đầu cuối của con trỏ
function GetCaretPos()
{
    var strSelect = "";
    try
    {
        strSelect = document.selection.createRange().text;
    }
    catch(zz){}
    if(strSelect.length > 0)
    {
        s = activeTextbox.value.indexOf(strSelect);
        e = s + strSelect.length;
    }
}
function SetActiveControl(ctrl)
{
    activeTextbox = ctrl;
}