﻿
var CTRL_PASTE = 22;
var CTRL_COPY = 3;
var CTRL_CUT = 24;
var TAB_KEY = 9;
var DELETE_KEY = 46;
var BACKSPACE_KEY = 8;
var ENTER_KEY = 13;
var RIGHT_ARROW_KEY = 39;
var DOWN_ARROW_KEY = 40;
var UP_ARROW_KEY = 38;
var LEFT_ARROW_KEY = 37;
var HOME_KEY = 36;
var END_KEY = 35;
var PAGEUP_KEY = 33;
var PAGEDOWN_KEY = 34;
var CAPS_LOCK_KEY = 20;
var ESCAPE_KEY = 27;

function getSelText(){
	Sel = "" ;
	if (window.getSelection) {
		Sel = document.activeElement.value.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd); 
	}else{
 		Sel = document.selection.createRange().text;
	}
	return Sel ;
}



function GetCarrentPosition(el){
   var sel, rng, r2, i=-1;
 
	if(document.selection && el.createTextRange) {
		sel=document.selection;
		if(sel){
		el.focus() ;
		var Sel = document.selection.createRange() ;
		Sel.moveStart('character' , -el.value.length)
		i= Sel.text.length ;
		}
    }

	else if (el.selectionStart || el.selectionStart=='0')
	i = el.selectionStart ;
	return i;
}



function SetCarrentPosition(ctrl, pos){

	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}


function Mask(e,textBox) {

	var keyCode = e.keyCode? e.keyCode : e.charCode
   	var Pos = GetCarrentPosition(textBox) ;

	var text = textBox.value ;
	var textb = text ;

	var keyCharacter = cleanKeyCode(keyCode);

	if (keyCode!=8 && keyCode!=35 && keyCode!=36 && keyCode!=37 && keyCode!=39 && keyCode!=46){
        tmpCode = keyCharacter ;
        if (keyCode==190){tmpCode=".";}
        if (keyCode==110){tmpCode=".";}
        if (isValid(text+tmpCode,textBox)==false || keyCode==69){
                return false;
        }
     }
     
    //textBox.maxlength = 5 ;
     
	var retVal = false;

	switch(keyCode)
	{
		case BACKSPACE_KEY:
//			var c = GetCarrentPosition(textBox); 
//			var SelLength = getSelText().length ;
//			if (SelLength>1){
//				var TextLen = textBox.value.length ;
//				var sPos = TextLen - SelLength ;
//				textBox.value = textBox.value.substring(0,sPos) + TextData.substring(sPos ,TextLen) ;
//				SetCarrentPosition(textBox,sPos);
//			}

//			if(c > 0 && SelLength<1) {
//				while(c > 0) {
//					    c--;
//						var x = textBox.value.substring(0,c);
//						var y = textBox.value.substring(c+1,textBox.value.length);
//						textBox.value = x + y;
//						SetCarrentPosition(textBox,c);
//						textBox.curPos = c;
//						if (textBox.value.substring(0,1)=="."){
//						    textBox.value = textBox.value.replace(".","") ;
//						    SetCarrentPosition(textBox,0);
//						}
//						break;
//				}
//			}
//			break;
		case TAB_KEY:
			var c = GetCarrentPosition(textBox); 
			textBox.curPos = c;
			retVal = true;
			break;
		case HOME_KEY:
			SetCarrentPosition(textBox,0);
			textBox.curPos = c;
			break;
		case END_KEY:
			SetCarrentPosition(textBox,textBox.value.length);
			textBox.curPos = textBox.value.length;
			break;
		case ENTER_KEY:
			retVal = true;
			break;
		case DELETE_KEY:   
			var c = GetCarrentPosition(textBox); 
			var SelLength = getSelText().length ;
			if(c<2){break;};
			if (SelLength>1){
				var TextLen = textBox.value.length ;
				var sPos = TextLen - SelLength ;
				textBox.value = textBox.value.substring(0,sPos) //+ TextData.substring(sPos ,TextLen) ;
				if (sPos<2){sPos=2}
				if (sPos==2 || sPos==5 || sPos==10){sPos++}
				SetCarrentPosition(textBox,sPos);
			}

//			if(c > -1 && SelLength<1) {
//					var x = textBox.value.substring(0,c);
//					var y = textBox.value.substring(c+1,textBox.value.length);
//					textBox.value = x + y;
//					SetCarrentPosition(textBox,c);
//					textBox.curPos = c;
//			}
			break;
		case LEFT_ARROW_KEY:
			var c = GetCarrentPosition(textBox); 
			if(c > 0) {
				SetCarrentPosition(textBox,c-1);
				textBox.curPos = c-1;
			}
			break;
		case RIGHT_ARROW_KEY:
			var c = GetCarrentPosition(textBox); 
			if(c < textBox.value.length) {
				SetCarrentPosition(textBox,c+1);
				textBox.curPos = c+1;
			}
			break;
		default:

			var c = GetCarrentPosition(textBox); 
			var SelLength = getSelText().length ;
			if (SelLength>1){
				var TextLen = textBox.value.length ;
				var sPos = TextLen - SelLength ;
				textBox.value = textBox.value.substring(0,sPos) //+ TextData.substring(sPos ,TextLen) ;
				SetCarrentPosition(textBox,sPos);
			}

            if (keyCode==190){keyCharacter="."}
            if (keyCode==110){keyCharacter="."}
            addNewKey(textBox,keyCharacter,c);
            SetCarrentPosition(textBox,Pos+1);
            break;
	}
	
	return retVal;
}

function addNewKey(tb,key,pos) {
if (tb.value.length<tb.maxLength){
	var startSel = tb.value.substring(0,pos);
	var endSel = tb.value.substring(pos,tb.value.length);
	tb.value = startSel + key + endSel;

	SetCarrentPosition(tb,pos);
	tb.curPos = pos;
}
}


function Paste(event,textBox) {
	var pastedVal = window.clipboardData.getData("Text");
    if (isValid(pastedVal,textBox)==false){return false;}

}

function keydown(event)
{
    if(Mask(event,this)==false){
        event.preventDefault();
    }
}

var attachList = ""
function Focus(textBox) {

    if (attachList.indexOf(textBox.id)==-1){
            if(document.attachEvent) 
            { 
                textBox.attachEvent("onkeydown", function(){return Mask(event,textBox);});
                textBox.attachEvent("onpaste", function(){return Paste(event,textBox);}); 
            } 
            else 
            { 
                    
                textBox.addEventListener("keydown", keydown , false);
                textBox.addEventListener("paste", function(e) {e.preventDefault();} , false);          
            }
            attachList = attachList + "," + textBox.id + "," ;
    }
}


function cleanKeyCode(key)
{
	switch(key)
	{
		case 96: return "0"; break;
		case 97: return "1"; break;
		case 98: return "2"; break;
		case 99: return "3"; break;
		case 100: return "4"; break;
		case 101: return "5"; break;
		case 102: return "6"; break;
		case 103: return "7"; break;
		case 104: return "8"; break;
		case 105: return "9"; break;
		default: return String.fromCharCode(key); break;
	}
}



function isValid(Text,textBox){
    var num = parseFloat(Text*10)/10 ;
    //alert(num)
    Out = isNaN(num)==false ;
    if (Text.substring(0,1)=="."){Out=false}
    if(textBox.rel!=null){
    ArrOption = textBox.rel.split(",")
        if (isNaN(ArrOption[0])==false && isNaN(ArrOption[1])==false){
            if (num<ArrOption[0] || num>ArrOption[1]){Out=false}
        }
    //    if (textBox.rel="%"){
    //        if (num<0 || num>99.9){Out=false}
    //    }
    }
    return Out ;
}


