﻿//language control function
//usage: <input onkeypress="LangKey(event, 'English')" />
//option: 'Persian', 'English', 'Numeric', 'NotSet', ''
function LangKey(obj, e, option)
{
	var key;
	var code;
	if (!e)	e = e;
	
    if (e) 
        key = e.keyCode ? e.keyCode : e.charCode;
	else
	    return;
	code = key;
    switch(option)
    {
        case 'NotSet':
        case '':
            code = key;
        break;
		case 'Persian':
		{
			if (key>31 && key<128)			
				code=' !"#$%&گ)(×+و-./0123456789:ك,=.؟@ِذ}ىُيلآ÷ـ،/’د×؛َءٍف‘{ًْإ~جژچ^_پشذزيثبلاهتنمئدخحضقسفعرصطغظ<|>ّ'.charCodeAt(key-32);
		}
		break;
		case 'Numeric':
		{
			if (key>47 && key<58)
				code=key;
			else
				code=0;
		}
		break;
		case 'English':
		{
		    //Problems: RTYUIOP{}
		    if (key==171)
		        code=75
		    if (key==187)
		        code=76		        
		    else if (key==247)
		        code=96
		    else if (key==215)
		        code=126;

			else if(key==1567)
                code=63;
			else if(key==1662)
                code=92;
			else if(key==1670)
				code=93;
			else if(key==1688)
				code=67;
			else if(key==1705)
				code=59;

			else if(key==1711)
				code=39;
			else if(key==1740)
				code=100;
			else if(key==1726)
                code=100;
			else if(key==1728)
				code=71;
			else if(key==1735)
				code=86;
		
			else if((key>1568 && key<1595)||(key>1599 && key<1618))
				code='MHNVBmhfZje[ponbvcsawqxzuy     Jtr;glki, XQWEASDF'.charCodeAt(key-1569);			
		}
		break;
		case 'Pattern':
		{
		    if (obj)
		    {
		        //var nextValue = getTextAtCaretPostion(obj, String.fromCharCode(key));
                //var regex = /\d{4}\/\d{2}\/\d{2}/;
                //return !regex.test(nextValue);
		    }
		}
		break;
    }
    
    if (code != key)
    {
        if (e.charCode)
        {
            //if firefox
            var new_event=document.createEvent("KeyEvents");
            new_event.initKeyEvent("keypress", false, true, document.defaultView, false, false, false, false, 0, code);
            obj.dispatchEvent(new_event);
            e.preventDefault();
            return false;
	    }
	    else
	    {
	        //if IE
	        e.keyCode = code;
	    }
	}
}

function getTextAtCaretPostion(obj, strValue)
{
    var result = "";
    var objField = obj;
    if (document.selection) 
    {
        objField.focus();
        sel = document.selection.createRange();
        var startPos , selectEnd;
        startPos  = getCaretPosition(objField);
        endPos = startPos + sel.text.length;
        result = objField.value.substring(0, startPos) + strValue + objField.value.substring(endPos, objField.value.length);
    }  
    else 
    if (objField.selectionStart || objField.selectionStart == '0') 
    {
        var startPos = objField.selectionStart;
        var endPos = objField.selectionEnd;
        result = objField.value.substring(0, startPos) + strValue + objField.value.substring(endPos, objField.value.length);
    }
    else 
    {
        result = objField.value + strValue;
    }
    return result;
}

function appendTextAtCaretPostion(obj, strValue)
{
    var objField = obj;
    if (document.selection) 
    {
        objField.focus();
        sel = document.selection.createRange();
        sel.text = strValue;
    }  
    else 
    if (objField.selectionStart || objField.selectionStart == '0') 
    {
        var startPos = objField.selectionStart;
        var endPos = objField.selectionEnd;
        objField.value = objField.value.substring(0, startPos) + strValue + objField.value.substring(endPos, objField.value.length);
    }
    else 
    {
        objField.value += strValue;
    }
}

function getCaretPosition(obj)
{
    var selectionStart;
    selectionStart = -1;
    var objField = obj;
    if( document.selection )
    { 
        // The current selection
        var range = document.selection.createRange(); 
        // We'll use this as a 'dummy' 
        var stored_range = range.duplicate(); 
        // Select all text 
        if (objField.tagName == "TEXTAREA")
        {
            //for textarea
            stored_range.moveToElementText(objField); 
        }
        else if (objField.tagName == "INPUT" && objField.type == "text")
        {
            //for input text
            stored_range.expand('textedit');
        }
        // Now move 'dummy' end point to end point of original range 
        stored_range.setEndPoint('EndToEnd', range); 
        // Now we can calculate start and end points 
        selectionStart = stored_range.text.length - range.text.length;
        objField.selectionStart = stored_range.text.length - range.text.length; 
        objField.selectionEnd = objField.selectionStart + range.text.length; 
    }
    return selectionStart;
}
