﻿// JavaScript File to define the textBox
if (!window.SilverlightJSApplication1)
	window.SilverlightJSApplication1 = {};

SilverlightJSApplication1.textbox = function() 
{
}

var cursorTextPos =0;
var scaleFactor = 3;
SilverlightJSApplication1.textbox.prototype =
{
	handleLoad : function(plugIn, userContext, rootElement) 
	{
		this.plugIn = plugIn;
		var button_design = rootElement.findName("button_design");
		button_design.addEventListener("Loaded", Silverlight.createDelegate(this, this.onCanvasLoad));
		button_design.addEventListener("KeyUp", Silverlight.createDelegate(this, this.onKeyUp));
		var textboxCanvas = rootElement.findName("textboxCanvas");
		textboxCanvas.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.onMouseLeftUp));
    },   
    onCanvasLoad : function(sender, args){
            sender.findName("textBox").Text = sender.findName("textBox").Text
            this.PositionTextCursor(sender);
    },
    onKeyUp : function(sender, keyargs){
        var x = keyargs.Key.toString();
        var isvalid = false;
        var text = "";
        var c = "";
        var addChar = "";
        var keyCode = keyargs.PlatformKeyCode;
    //    sender.findName("buttonText").Text = 
    //        x +":"+
    //        String.fromCharCode(keyargs.key+35);
        if(keyargs.key >=30  &&  keyargs.key <= 55){
            if(keyargs.shift == true){
                addChar = String.fromCharCode(keyargs.key+35);
            }
            else{
                addChar = String.fromCharCode(keyargs.key+67);
            }
            isvalid = true;
        }
        // space
        else if(keyargs.key == 9){
            addChar = " ";
            isvalid = true;
        }
        // backspace 
        else if(keyargs.key == 1 && sender.findName("rightCursor").Text.Length != 0)
        {
            text = sender.findName("textBox").Text;
            text=text.substr(0,text.length-1);
            
            sender.findName("textBox").Text = text;
            this.PositionRightText(sender);
            this.PositionTextCursor(sender);
        }
        //Right
        else if(keyargs.key == 16 && sender.findName("rightCursor").Text.length != 0){  
            text = sender.findName("rightCursor").Text;
            c = text.charAt(0);
            sender.findName("rightCursor").Text =
                sender.findName("rightCursor").Text.substr(1,text.length-1);
                
            sender.findName("textBox").Text = 
                sender.findName("textBox").Text + c;
            this.PositionRightText(sender);
            this.PositionTextCursor(sender);
        }
        // left
        else if(keyargs.key == 14 && sender.findName("textBox").Text.length != 0){  // left
            cursorTextPos = cursorTextPos + 1;
            text = sender.findName("textBox").Text;
            c = text.charAt(text.length-1);
            text=text.substr(0,text.length-1);
            
            sender.findName("textBox").Text = text;
            this.PositionTextCursor(sender);
            
            text = sender.findName("rightCursor").Text;
            sender.findName("rightCursor").Text = c + text;
            this.PositionRightText(sender);
        } 
        if(isvalid == true){
            sender.findName("textBox").Text = 
                sender.findName("textBox").Text +
                addChar;
            this.PositionRightText(sender);
            this.PositionTextCursor(sender);
        }
        var w = sender.findName("textBox").ActualWidth;
        var i = 0;
    },
    PositionRightText : function(sender){
        var w = sender.findName("textBox").ActualWidth;
        sender.findName("rightCursor")["Canvas.Left"] = w + 5;
    },
    PositionTextCursor : function(sender){
        var w = sender.findName("textBox").ActualWidth;
        sender.findName("TextInputCursor").X1 = w + 5;
        sender.findName("TextInputCursor").X2 = w + 5;
    },
    onMouseLeftUp : function(sender, args){
        var x = (args.getPosition(null).X/scaleFactor) - 5;
        var cursorCharPos = 0;
        var i = 5;
        var text = sender.findName("textBox").Text + sender.findName("rightCursor").Text;
        var textBoxWidth = sender.findName("textBoxWidth");
        textBoxWidth.Text = text;
        textBoxWidth.Opacity = 0.0000001;
        var widths = new Array();
        i = textBoxWidth.ActualWidth;
        cursorCharPos = text.length;
        while(text.length != 0){
            if(x < textBoxWidth.ActualWidth){
                cursorCharPos = text.length-1;
                }
            widths[text.length]=textBoxWidth.ActualWidth;
            text = text.substr(0, text.length-1);
            textBoxWidth.Text = text;
        }
        widths[0] = 0;
        textBoxWidth.Opacity = 0; 
        //split the character
        if(x > 0 || x < textBoxWidth.ActualWidth){
            var begin = widths[cursorCharPos];
            var next = widths[cursorCharPos +1];
            if( (x-begin) > (next-begin)/2) {cursorCharPos = cursorCharPos + 1;}
        }
        // split text
        text = sender.findName("textBox").Text + sender.findName("rightCursor").Text;
        sender.findName("textBox").Text = text.substr(0, cursorCharPos);
        sender.findName("rightCursor").Text = text.substr(cursorCharPos, text.length - cursorCharPos);
        this.PositionRightText(sender);
        this.PositionTextCursor(sender);
        i =33;
    }
}