﻿// Urdu OpenPad
// Written by Nabeel Hasan Naqvi (simunaqv [at] gmail [dot] com)
// Visit the support forums at http://www.urduweb.org/mehfil
// This code is public domain. Redistribution and use of this code, with or without modification, is permitted.

var osk=false;
var	isIE;
var	isGecko;
var	isSafari;
var	isKonqueror;
var	CurrentKeyboard;
var _sp;
var	LAlt;
var	RAlt;
var	RShift;
var	LShift;
var	LCtrl;
var	RCtrl;
var	HelpArea;
var	kbNormal=1;
var	kbShift=2;
var	kbAlt=3;
var	kbCtrl=4;
var	kbAltGr=5;
var	bToggleFlag=0;
var	CurrentKeyboardState=1;
var	currEdit=null;
var	langSel=1;
var	IsUrdu=1;
var	bCtrlState=0;
var	bAltState=0;
var	CurrentKeyboard;
var	Diacritics=new Array(0x0650, 0x064E,0x064B,	0x064F,	0x064D,	0x064C,	0x0651,	0x0652,	0x0670);
var	charSingleQuote=String.fromCharCode(39);
var	charDoubleQuote=String.fromCharCode(34);
var charSpace=String.fromCharCode(32);
var	ValidChars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'+'-&=;,.?<>[]{}|/\\'+charSingleQuote+charSpace;
function _s(c){return String.fromCharCode(c)}
function isDiacritic(c)
{
    for(i=0; i<Diacritics.length; i++)
    {
        if(c== Diacritics[i])
        {
            return true;
        }
    }
    return false;
}
function charCode(strChar)
{
    return strChar.charCodeAt(0);
}
function Key(x,	y,z	)
{
    this.normal=0;
    this.shifted=0;
    this.alt=0;
    this.normal=x;
    if(arguments.length>1)
    {
        this.shifted= y;
    }
    if(arguments.length>2)
    {
        this.alt= z;
    }
}
function KeyHelp(x,y)
{
    this.normal=x;
    this.shifted=y
}
function Keyboard()
{
    this.Keys= new Array();
    this.Shifted= new Array();
    this.AltGr=	new	Array();
    this.MultiChar=	new	Array();
    
    this.AddKey=function(ch, x, y, z)
    {
		//alert(ch+' '+x+' '+y+' '+z);
		this.Keys[ch]=new Key(x);
		
		if(arguments.length>2)
		{
			this.Shifted[ch]= y;
			//alert(this.Shifted[ch]);
		}
		
		if(arguments.length>3)
		{
			this.AltGr[ch]= z;
			//alert(this.AltGr[ch]);
		}
    }
}



var PashtoPhonetic= new Keyboard();
PashtoPhonetic.Keys['a']=new Key(0x0627, 0x0622, 0x0623);
PashtoPhonetic.Keys['b']=new Key(0x0628, 0x200C, 0x0625);
PashtoPhonetic.Keys['c']=new Key(0x0686, 0x062B, 0x0655);
PashtoPhonetic.Keys['d']=new Key(0x062F, 0x0689, 0x065D);
PashtoPhonetic.Keys['e']=new Key(0x0639, 0x0696, 0x0613);
PashtoPhonetic.Keys['f']=new Key(0x0641, 0x067E, 0x065B);
PashtoPhonetic.Keys['g']=new Key(0x06AB, 0x063A, 0x0653);
PashtoPhonetic.Keys['h']=new Key(0x0681, 0x062D, 0x061E);
PashtoPhonetic.Keys['i']=new Key(0x064A, 0x06D0, 0x0625);
PashtoPhonetic.Keys['j']=new Key(0x062C, 0x0636, 0x060D);
PashtoPhonetic.Keys['k']=new Key(0x06A9, 0x062E, 0x0643);
PashtoPhonetic.Keys['l']=new Key(0x0644, 0x0670, 0x060E);
PashtoPhonetic.Keys['m']=new Key(0x0645, 0x0651, 0x060F);
PashtoPhonetic.Keys['n']=new Key(0x0646, 0x06BC, 0x06BA);
PashtoPhonetic.Keys['o']=new Key(0x0647, 0x06C0, 0x0656);
PashtoPhonetic.Keys['p']=new Key(0x067E, 0x0685, 0x064F);
PashtoPhonetic.Keys['q']=new Key(0x0642, 0x069A, 0xFDFB);
PashtoPhonetic.Keys['r']=new Key(0x0631, 0x0693, 0x0612);
PashtoPhonetic.Keys['s']=new Key(0x0633 , 0x0635, 0x0657);
PashtoPhonetic.Keys['t']=new Key(0x062A , 0x067C, 0x0629);
PashtoPhonetic.Keys['u']=new Key(0x0626 , 0x06CD, 0x0621);
PashtoPhonetic.Keys['v']=new Key(0x0637, 0x0638, 0x0654);
PashtoPhonetic.Keys['w']=new Key(0x0648, 0x0624, 0xFDFA);
PashtoPhonetic.Keys['x']=new Key(0x0634, 0x0698, 0x003B);
PashtoPhonetic.Keys['y']=new Key(0x06D2, 0x06CC, 0x0649);
PashtoPhonetic.Keys['z']=new Key(0x0632, 0x0630, 0x003F);

PashtoPhonetic.AddKey('1', 0x06F1, 0x0021, 0x0060);
PashtoPhonetic.AddKey('2', 0x06F2, 0x066C, 0x0040);
PashtoPhonetic.AddKey('3', 0x06F3, 0x066B, 0x0023);
PashtoPhonetic.AddKey('4', 0x06F4, 0x060B, 0x0024);
PashtoPhonetic.AddKey('5', 0x06F5, 0x066A, 0x0025);
PashtoPhonetic.AddKey('6', 0x06F6, 0x00D7, 0x005E);
PashtoPhonetic.AddKey('7', 0x06F7, 0x00BB, 0x0026);
PashtoPhonetic.AddKey('8', 0x06F8, 0x00AB, 0xE659);
PashtoPhonetic.AddKey('9', 0x06F9, 0x0029, 0x200E);
PashtoPhonetic.AddKey('0', 0x06F0, 0x0028, 0x200F);

PashtoPhonetic.AddKey('=', 0x03D, 0x002B, 0x005C);
PashtoPhonetic.AddKey('-', 0x02D, 0x0640, 0x005F);
PashtoPhonetic.AddKey('.', 0x002E, 0x0650, 0x003C);
PashtoPhonetic.AddKey(',', 0x060C, 0x064E, 0x003E);
PashtoPhonetic.AddKey('/', 0x002F, 0x061F, 0x0670);
PashtoPhonetic.AddKey('\\', 0x005C, 0x002A, 0x007C);
PashtoPhonetic.AddKey(';', 0x061B, 0x003A, 0x0611);
PashtoPhonetic.AddKey('[', 0x005D, 0x007D);
PashtoPhonetic.AddKey(']', 0x005B, 0x007B);
PashtoPhonetic.AddKey(charSingleQuote, 0x0027, 0x0022);
PashtoPhonetic.AddKey('`', 0x064B, 0x064D, 0x007E);
PashtoPhonetic.AddKey(' ', 32);

PashtoPhonetic.Shifted['+']=0x002B; 
PashtoPhonetic.Shifted['_']=0x0640; 
PashtoPhonetic.Shifted['>']=0x0650; 
PashtoPhonetic.Shifted['<']=0x064E; 
PashtoPhonetic.Shifted['?']=0x061F; 
PashtoPhonetic.Shifted['|']=0x002A; 
PashtoPhonetic.Shifted['{']=0x007D; 
PashtoPhonetic.Shifted['}']=0x007B; 
PashtoPhonetic.Shifted[charDoubleQuote]=0x0022; 
PashtoPhonetic.Shifted['~']=0x064D;
PashtoPhonetic.Shifted[':']=0x003A; 
PashtoPhonetic.Shifted[' ']=0x200C; 

PashtoPhonetic.Shifted['!']=0x0021;
PashtoPhonetic.Shifted['@']=0x066C;
PashtoPhonetic.Shifted['#']=0x066B;
PashtoPhonetic.Shifted['$']=0x060B;
PashtoPhonetic.Shifted['%']=0x066A;
PashtoPhonetic.Shifted['^']=0x00D7;
PashtoPhonetic.Shifted['&']=0x00BB;
PashtoPhonetic.Shifted['*']=0x00AB;
PashtoPhonetic.Shifted['(']=0x0029;
PashtoPhonetic.Shifted[')']=0x0028;

PashtoPhonetic.AltGr['1']= 0x0060;
PashtoPhonetic.AltGr['2']= 0x0040;
PashtoPhonetic.AltGr['3']= 0x0023;
PashtoPhonetic.AltGr['4']= 0x0024;
PashtoPhonetic.AltGr['5']= 0x0025;
PashtoPhonetic.AltGr['6']= 0x005E;
PashtoPhonetic.AltGr['7']= 0x0026;
PashtoPhonetic.AltGr['8']= 0xE659;
PashtoPhonetic.AltGr['9']= 0x200E;
PashtoPhonetic.AltGr['0']= 0x200F;


var	KeyMaps= new Array();
var	Keypads=new	Array();
var	langArray=new Array();
function raiseButton(evt)
{
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if(evt.srcElement)
    {
        var	el = evt.srcElement;
        className =	el.className;
        if (className == 'btnFlat' || className	== 'btnLowered')
        {
            el.className = 'btnRaised';
        }
        if (className == 'btnSysFlat' || className == 'btnSysLowered')
        {
            if((evt.srcElement==LShift)	|| (evt.srcElement==RShift))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbShift))
                {
                    return;
                }
                else
                el.className = 'btnSysRaised';
            }
            else if((evt.srcElement==LAlt) || (evt.srcElement==RAlt))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbAlt))
                {
                    return;
                }
                else
                el.className = 'btnSysRaised';
            }
            else
            el.className = 'btnSysRaised';
        }
    }
    else if(evt.target)
    {
        var	el = evt.target;
        className =	el.className;
        if (className == 'btnFlat' || className	== 'btnLowered')
        {
            el.className = 'btnRaised';
        }
        if (className == 'btnSysFlat' || className == 'btnSysLowered')
        {
            if((evt.target==LShift)	|| (evt.target==RShift))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbShift))
                {
                    return;
                }
                else
                el.className = 'btnSysRaised';
            }
            else if((evt.target==LAlt) || (evt.target==RAlt))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbAlt))
                {
                    return;
                }
                else
                el.className = 'btnSysRaised';
            }
            else
            el.className = 'btnSysRaised';
        }
    }
}
function normalButton(evt)
{
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if(evt.srcElement)
    {
        var	el = window.event.srcElement;
        className =	el.className;
        if (className == 'btnRaised' ||	className == 'btnLowered')
        {
            el.className = 'btnFlat';
        }
        if (className == 'btnSysRaised'	|| className ==	'btnSysLowered')
        {
            if((evt.srcElement==LShift)	|| (evt.srcElement==RShift))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbShift))
                {
                    return;
                }
                else
                {
                    el.className = 'btnSysFlat';
                }
            }
            else if((evt.srcElement==LAlt) || (evt.srcElement==RAlt))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbAlt))
                {
                    return;
                }
                else
                {
                    el.className = 'btnSysFlat';
                }
            }
            else
            el.className = 'btnSysFlat';
        }
    }
    else if(evt.target)
    {
        var	el = evt.target;
        className =	el.className;
        if (className == 'btnRaised' ||	className == 'btnLowered')
        {
            el.className = 'btnFlat';
        }
        if (className == 'btnSysRaised'	|| className ==	'btnSysLowered')
        {
            if((evt.target==LShift)	|| (evt.target==RShift))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbShift))
                {
                    return;
                }
                else
                {
                    el.className = 'btnSysFlat';
                }
            }
            else if((evt.target==LAlt) || (evt.target==RAlt))
            {
                if((bToggleFlag) &&	(CurrentKeyboardState==kbAlt))
                {
                    return;
                }
                else
                {
                    el.className = 'btnSysFlat';
                }
            }
            else
            el.className = 'btnSysFlat';
        }
    }
}
function lowerButton(evt)
{
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if(evt.srcElement)
    {
        var	el = window.event.srcElement;
        className =	el.className;
        if (className == 'btnFlat' || className	== 'btnRaised')
        {
            el.className = 'btnLowered';
        }
        if (className == 'btnSysFlat' || className == 'btnSysRaised')
        {
            el.className = 'btnSysLowered';
        }
    }
    else if(evt.target)
    {
        var	el = evt.target;
        className =	el.className;
        if (className == 'btnFlat' || className	== 'btnRaised')
        {
            el.className = 'btnLowered';
        }
        if (className == 'btnSysFlat' || className == 'btnSysRaised')
        {
            el.className = 'btnSysLowered';
        }
    }
}

function UpdateKeypad(kbState)
{	
    var	sId;
    if(!osk) return;
    switch(kbState)
    {
        case kbNormal:
			for(key	in Keypads)
			{
				if(CurrentKeyboard.Keys[Keypads[key].id])
				{
					if (document.all)
					Keypads[key].innerText=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].normal);
					else if(!document.all && document.getElementById)
					{
						if (isDiacritic(CurrentKeyboard.Keys[Keypads[key].id].normal))
						Keypads[key].innerHTML=String.fromCharCode(0x0627)+String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].normal);
						else
						Keypads[key].innerHTML=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].normal);
					}
				}
			}
        break;
			case kbShift:
			for(key	in Keypads)
			{
				sId= Keypads[key].id;
				sId= sId.toUpperCase(sId);
				if(CurrentKeyboard.Keys[Keypads[key].id])
				{
					if (document.all)
					{
						if (CurrentKeyboard.MultiChar)
						{
							if (isAlpha(Keypads[key].id))
							{
								if (CurrentKeyboard.MultiChar[sId])
								{
									Keypads[key].innerText=CurrentKeyboard.MultiChar[sId];
									continue;
								}
							}
						}
						if(CurrentKeyboard.Keys[Keypads[key].id].shifted)
						{
							Keypads[key].innerText=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].shifted);
						}
						else
						Keypads[key].innerText=' ';
					}
					else if	(!document.all && document.getElementById)
					{
						if (CurrentKeyboard.MultiChar)
						{
							if (isAlpha(Keypads[key].id))
							{
								if (CurrentKeyboard.MultiChar[sId])
								{
									Keypads[key].innerHTML=CurrentKeyboard.MultiChar[sId];
									continue;
								}
							}
						}
						if(CurrentKeyboard.Keys[Keypads[key].id].shifted)
						{
							if (isDiacritic(CurrentKeyboard.Keys[Keypads[key].id].shifted))
							Keypads[key].innerHTML=String.fromCharCode(0x0627)+String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].shifted);
							else
							Keypads[key].innerHTML=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].shifted);
						}
						else
						Keypads[key].innerHTML=' ';
					}
				}
			}
			break;
        case kbAlt:
			for(key	in Keypads)
			{
				if(CurrentKeyboard.Keys[Keypads[key].id])
				{
					if (document.all)
					{
						if(CurrentKeyboard.Keys[Keypads[key].id].alt)
						{
							Keypads[key].innerText=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].alt);
						}
						else
						Keypads[key].innerText=' ';
					}
					else if	(!document.all && document.getElementById)
					{
						if(CurrentKeyboard.Keys[Keypads[key].id].alt)
						{
							if (isDiacritic(CurrentKeyboard.Keys[Keypads[key].id].alt))
							Keypads[key].innerHTML=String.fromCharCode(0x0627)+String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].alt);
							else
							Keypads[key].innerHTML=String.fromCharCode(CurrentKeyboard.Keys[Keypads[key].id].alt);
						}
						else
						Keypads[key].innerHTML=' ';
					}
				}
			}
			break;
    }
}

function ToggleShift()
{
    ToggleKeyboard(kbShift);
}
function ToggleAlt()
{
    ToggleKeyboard(kbAlt);
}
function ToggleAltGr()
{
    ToggleKeyboard(kbAltGr);
}
function ToggleKeyboard(ToggleKey)
{	
	bToggleFlag=!bToggleFlag
    if(bToggleFlag)
    {
        if(ToggleKey==kbShift)
        {
			if(osk)
			{
				RShift.className='btnSysLowered';            
				LShift.className='btnSysLowered';
				UpdateKeypad(kbShift);
            }
            CurrentKeyboardState=kbShift;
            
        }
        else if(ToggleKey==kbAlt)
        {
			if(osk)
			{
				LAlt.className='btnSysLowered';
				RAlt.className='btnSysLowered';
				UpdateKeypad(kbAlt);
            }
            CurrentKeyboardState=kbAlt;
            
        }
    }
    else
    {
		if(osk)
		{
			if(CurrentKeyboardState	== kbShift)
			{
				RShift.className='btnSysFlat';
				LShift.className='btnSysFlat';
			}
			else if(CurrentKeyboardState ==	kbAlt)
			{
				LAlt.className='btnSysFlat';
				RAlt.className='btnSysFlat';
			}
			UpdateKeypad(kbNormal);
        }
        CurrentKeyboardState = kbNormal;
        
    }
}
function isValidChar(sChar)
{
    if(ValidChars.indexOf(sChar)>=0)
    {
        return true;
    }
    return false;
}
function processKeyup(evt)
{
    if (!langArray[currEdit.id]) return;
    evt	= (evt)	? evt :	((event) ? event : null);
    if (evt)
    {
        var	charCode = (evt.charCode) ?	evt.charCode : evt.keyCode;
        if(charCode	== 17)
        {
            CurrentKeyboardState = kbNormal;
        }
    }
}
function Downkeys(evt)
{
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if(evt)
    {
        if(document.all)
        {
            if(evt.shiftKey	)
            {
				if(osk)
				{
					RShift.className='btnSysLowered';
					LShift.className='btnSysLowered';
					UpdateKeypad(kbShift);
                }
                CurrentKeyboardState=kbShift;
            }
            else if(evt.ctrlKey	&& evt.altKey)
            {
				if(osk)
				{
					RCtrl.className='btnSysLowered';
					LCtrl.className='btnSysLowered';
					RAlt.className='btnSysLowered';
					LAlt.className='btnSysLowered';                
					UpdateKeypad(kbAlt);
                }
                CurrentKeyboardState=kbAlt;
            }
            else if(evt.ctrlKey)
            {
                CurrentKeyboardState=kbCtrl;
            }
        }
        else if(!document.all && document.getElementById)
        {
            if(evt.ctrlKey)
            {
                if(	evt.shiftKey)
                {
					if(osk)
					{
						RCtrl.className='btnSysLowered';
						LCtrl.className='btnSysLowered';
						RShift.className='btnSysLowered';
						LShift.className='btnSysLowered';                    
						UpdateKeypad(kbAlt);
                    }
                    CurrentKeyboardState=kbAlt;
                }
                else
                {
                    CurrentKeyboardState=kbCtrl;
                }
            }
            else if(evt.shiftKey )
            {
				if(osk)
				{
					RShift.className='btnSysLowered';
					LShift.className='btnSysLowered';                
					UpdateKeypad(kbShift);
                }
                CurrentKeyboardState=kbShift;
            }
        }
    }
}
function Upkeys(evt)
{
    evt	= (evt)	? evt :	(window.event) ? event : null;
    var	charCode = (evt.charCode) ?	evt.charCode : evt.keyCode;
    if(evt)
    {
        if (CurrentKeyboardState ==	kbCtrl)
        {
            CurrentKeyboardState = kbNormal;
        }
        if(CurrentKeyboardState	== kbShift)
        {
            if(!evt.shiftKey)
            {
				if(osk)
				{
					RShift.className='btnSysFlat';
					LShift.className='btnSysFlat';                
					UpdateKeypad(kbNormal);
                }
                CurrentKeyboardState = kbNormal;
            }
        }
        if(CurrentKeyboardState	== kbAlt)
        {
            if(document.all)
            {
                if(!(evt.altKey	&& evt.ctrlKey))                
                {
					if(osk)
					{
						RCtrl.className='btnSysFlat';
						LCtrl.className='btnSysFlat';
						LAlt.className='btnSysFlat';
						RAlt.className='btnSysFlat';                    
						UpdateKeypad(kbNormal);
                    }
                    CurrentKeyboardState = kbNormal;
                }
            }
            else if(!document.all && document.getElementById)
            {
                if(!evt.ctrlKey	|| evt.shiftKey)
                {
					if(osk)
					{
						RCtrl.className='btnSysFlat';
						LCtrl.className='btnSysFlat';
						RShift.className='btnSysFlat';
						LShift.className='btnSysFlat';                    
						UpdateKeypad(kbNormal);
                    }
                    CurrentKeyboardState=kbNormal;
                }
            }
        }
    }
}
function storeCaret	(textEl)
{
    if (textEl.createTextRange)
    textEl.caretPos	= document.selection.createRange().duplicate();
}
function isAlpha(ch)
{
    return (ch >= 'a' && ch	<= 'z\uffff') || (ch >=	'A'	&& ch <= 'Z\uffff');
}
function processKeydown(evt)
{
    if (!currEdit) return;
    //evt	= (evt)	? evt :	((event) ? event : null);
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if (evt)
    {
        var	charCode = (evt.charCode) ?	evt.charCode : evt.keyCode;
        //alert(charCode);
        var idx= String.fromCharCode(charCode);
        var	idxChar;
        
        if(isAlpha(idx))
        {			
			idxChar=String.fromCharCode(charCode).toLowerCase();
        }
        
        if (CurrentKeyboardState ==	kbAlt)
        {
			if(isAlpha(idx))
				AddText(idxChar);
			else
				AddText(idx);
            //ToggleKeyboard(kbNormal);
        }
        if(charCode	== 17)
        {
            CurrentKeyboardState = kbCtrl;
        }
        else if(CurrentKeyboardState ==	kbCtrl)
        {
            if(charCode==32)
            {
                if(!currEdit.getAttribute('OpenPadId'))
				{
					if(langArray[currEdit.name]==1)
					{
						setEnglish(currEdit.name);
					}
					else
					{
						setUrdu(currEdit.name);
					}
				}
				else
				{
					if(langArray[currEdit.id]==1)
					{
						setEnglishById(currEdit.id);
					}
					else
					{
						setUrduById(currEdit.id);
					}
				}
				
                if(isIE)
                {
                    evt.returnValue=false;
                    evt.cancelBubble=true;
                }
                else if(isGecko)
                {
                    evt.preventDefault();
                    evt.stopPropagation();
                }
            }
        }
    }
}
function AddText(idx)
{
    var	txt;
    if(!currEdit) return;
    var	idxChar= idx;

    
    if(isAlpha(idxChar))
    {
		idxChar= idxChar.toLowerCase();
		var	sId= idxChar.toUpperCase();
    }
    
    switch(CurrentKeyboardState)
    {
        case kbNormal:
			if(CurrentKeyboard.Keys[idxChar] !=	null)
			{
				txt= String.fromCharCode(CurrentKeyboard.Keys[idxChar].normal);
			}
			break;
        
        case kbShift:
       
			if (isAlpha(idxChar))
			{
				if (CurrentKeyboard.MultiChar[sId])
				{
					txt=CurrentKeyboard.MultiChar[sId];
					//ToggleKeyboard(kbShift);
				}
				else if(CurrentKeyboard.Keys[idxChar] != null)
				{			
					if(CurrentKeyboard.Keys[idxChar].shifted !=	null)
					{
						if(CurrentKeyboard.Keys[idxChar].shifted)
						{
							txt= String.fromCharCode(CurrentKeyboard.Keys[idxChar].shifted);
						}
						//ToggleKeyboard(kbShift);
					}
				}
			}
			else if (CurrentKeyboard.Shifted[idxChar] != null)
			{
				//alert(idx);
				txt= String.fromCharCode(CurrentKeyboard.Shifted[idxChar]);
				//ToggleKeyboard(kbShift);
				
			}
	   

	        
			break;
        case kbAlt:
			if (isAlpha(idxChar))
			{
				if(CurrentKeyboard.Keys[idxChar] !=	null)
				if(CurrentKeyboard.Keys[idxChar].alt !=	null)
				{
					txt= String.fromCharCode(CurrentKeyboard.Keys[idxChar].alt);
					//ToggleKeyboard(kbAlt);
				}
			}
			else if (CurrentKeyboard.AltGr[idxChar] != null)
			{
				txt= String.fromCharCode(CurrentKeyboard.AltGr[idxChar]);
				//ToggleKeyboard(kbAlt);
				
			}
			break;
    }
    
    if(txt==null)
		return;
	//alert(txt);
		
	if(window.opera)
	{
		var	vTop=currEdit.scrollTop;
        var	startPos = currEdit.selectionStart;
        var	endPos = currEdit.selectionEnd;
        currEdit.value = currEdit.value.substring(0, startPos)
        + txt
        + currEdit.value.substring(endPos, currEdit.value.length);
        currEdit.focus();
        currEdit.selectionStart	= startPos + 1;
        currEdit.selectionEnd =	startPos + 1;
        currEdit.scrollTop=vTop;
	}
    else if (currEdit.createTextRange &&	currEdit.caretPos)
    {
        var	caretPos = currEdit.caretPos;
        caretPos.text =	caretPos.text.charAt(caretPos.text.length -	1) == '	' ?
        txt	+ '	' :	txt;
        currEdit.focus(caretPos);
    }
    else if	(currEdit.selectionStart ||	currEdit.selectionStart	== '0')
    {
        var	vTop=currEdit.scrollTop;
        var	startPos = currEdit.selectionStart;
        var	endPos = currEdit.selectionEnd;
        currEdit.value = currEdit.value.substring(0, startPos)
        + txt
        + currEdit.value.substring(endPos, currEdit.value.length);
        currEdit.focus();
        currEdit.selectionStart	= startPos + 1;
        currEdit.selectionEnd =	startPos + 1;
        currEdit.scrollTop=vTop;
    }
    else
    {
        currEdit.value += txt;
        currEdit.focus(caretPos);
    }
}
function processKeypresses(evt)
{
    if(!currEdit.getAttribute('OpenPadId'))
	{
		if (!langArray[currEdit.name]) return;
	}
	else
	{
		if (!langArray[currEdit.id]) return;
	}
		
    if (!currEdit) return;
    evt	= (evt)	? evt :	(window.event) ? event : null;
    if (evt)
    {
        var	charCode = (evt.charCode) ?	evt.charCode :
        ((evt.keyCode) ? evt.keyCode :
        ((evt.which) ? evt.which : 0));
        var	whichASC = charCode	;       
        var	whichChar =	String.fromCharCode(whichASC);
        var	idxChar= whichChar.toLowerCase(whichChar);
		var	sId;
		
		if((charCode==13))
		{
			return;
		}

        if(isIE)
        {			
            if(CurrentKeyboardState== kbAlt)
            {
                evt.keyCode=0;
                return;
            }
            
            if(isAlpha(idxChar))
			{
				idxChar= idxChar.toLowerCase();
				sId= idxChar.toUpperCase();
			}
		    
			switch(CurrentKeyboardState)
			{
				case kbNormal:
					if(CurrentKeyboard.Keys[idxChar] !=	null)
					{
						evt.keyCode = CurrentKeyboard.Keys[idxChar].normal;
					}
					break;
		        
				case kbShift:
		       
					if (isAlpha(idxChar))
					{
						if(CurrentKeyboard.Keys[idxChar] != null)
						{			
							if(CurrentKeyboard.Keys[idxChar].shifted !=	null)
							{
								if(CurrentKeyboard.Keys[idxChar].shifted)
								{
									evt.keyCode = CurrentKeyboard.Keys[idxChar].shifted;
								}
								//ToggleKeyboard(kbShift);
							}
						}
					}
					else if (CurrentKeyboard.Shifted[idxChar] != null)
					{
						evt.keyCode = CurrentKeyboard.Shifted[idxChar];
						//ToggleKeyboard(kbShift);
						
					}
			   

			        
					break;
				case kbAlt:
					if (isAlpha(idxChar))
					{
						if(CurrentKeyboard.Keys[idxChar] !=	null)
						if(CurrentKeyboard.Keys[idxChar].alt !=	null)
						{
							evt.keyCode= CurrentKeyboard.Keys[idxChar].alt;
							//ToggleKeyboard(kbAlt);
						}
					}
					else if (CurrentKeyboard.AltGr[idxChar] != null)
					{
						evt.keyCode = CurrentKeyboard.AltGr[idxChar];
						//ToggleKeyboard(kbAlt);
						
					}
					break;
			}

            return;           
        }
        else if(isGecko)
        {	
			var fCode;
			//alert(evt.charCode+" "+evt.keyCode);
			charCode = evt.charCode;
			
			if (charCode==0)
			{
				return;
			}
			
			whichASC = charCode	;       
			whichChar =	String.fromCharCode(whichASC);
			idxChar= whichChar.toLowerCase(whichChar);
			
			if((charCode==8) ||  (charCode==13) || (charCode==37) || (charCode==39) ||  (charCode==38)|| (charCode==40)|| (charCode==33) ||  (charCode==34) ||  (charCode==50)  ) return;
			
			if(evt.ctrlKey && evt.altKey)
			{
				if (isAlpha(idxChar))
				{
					if(CurrentKeyboard.Keys[idxChar] !=	null)
					if(CurrentKeyboard.Keys[idxChar].alt !=	null)
					{
						txt= String.fromCharCode(CurrentKeyboard.Keys[idxChar].alt);
					}
				}
				else if (CurrentKeyboard.AltGr[idxChar] != null)
				{
					txt= String.fromCharCode(CurrentKeyboard.AltGr[idxChar]);
				}
				
				var	vTop=currEdit.scrollTop;
				var	startPos = currEdit.selectionStart;
				var	endPos = currEdit.selectionEnd;
				currEdit.value = currEdit.value.substring(0, startPos)
				+ txt
				+ currEdit.value.substring(endPos, currEdit.value.length);
				currEdit.focus();
				currEdit.selectionStart	= startPos + 1;
				currEdit.selectionEnd =	startPos + 1;
				currEdit.scrollTop=vTop;
					
				evt.preventDefault();
				evt.stopPropagation();
				return;
			}
		
				
			if(!(CurrentKeyboardState == kbCtrl))
			{
				AddText(whichChar);
				evt.preventDefault();
				evt.stopPropagation();
			}
			
        }
        else if(window.opera)
        {
			//alert(charCode);
			if((charCode==13) || (charCode==37) || (charCode==39) ||  (charCode==38)|| (charCode==40)|| (charCode==33) || (charCode==32) || (charCode==34) || (charCode==46) || (charCode==50)  ) return;
						
			if(!(CurrentKeyboardState == kbCtrl))
			{
				AddText(idxChar);
				//evt.keyCode = codes[whichChar];
				evt.preventDefault();
				evt.stopPropagation();	
			}			
        }
    }
}

function writeButton(idx, perc,	btnClass, str, caption)
{
    document.writeln('<td class="'+btnClass+'" id="'+idx+'"	width='+perc+'%	onclick="javascript:AddText(\''+ str+ '\' );" onmouseover="ShowHelp(\''+ str+ '\');	">'+caption+'</td>');
    Keypads[idx]=document.getElementById(idx);
}
function writeEmptyCell(idx, perc, btnClass, str, caption)
{
    document.writeln('<td class="'+btnClass+'" id="'+idx+'"	width='+perc+'%>&nbsp;</td>');
}
function writeButton2(idx, perc, btnClass, str,	caption)
{
    document.writeln('<td class="'+btnClass+'" id="'+idx+'"	width='+perc+'%	>'+caption+'</td>');
    Keypads[str]=document.getElementById(idx);
}

function writeKeyboard()
{
    document.writeln('<span	dir="ltr">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	style="border-collapse:	collapse" bordercolor="#111111"	width="100%" id="AutoNumber1">');
    document.writeln('<tr>');
    document.writeln('<td width="100%" class="btnHelp" id="HelpDesk">');
    document.writeln('<span	lang="ur" dir="rtl">');
    document.writeln('&#x645;&#x627;&#x624;&#x633; &#x67E;&#x647; &#x6CC;&#x624; &#x628;&#x67C;&#x646; &#x631;&#x627;&#x648;&#x644;&#x626;');
    document.writeln('</span>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('<tr>');
    document.writeln('<td width="100%">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	bordercolor="#111111" width="100%" id="AutoNumber2"	>');
    document.writeln('<tr>');
    writeButton('~', 7,	"btnFlat", '~',	'~');
    writeButton('1', 7,	"btnFlat", '1',	'1');
    writeButton('2', 7,	"btnFlat", '2',	'2');
    writeButton('3', 7,	"btnFlat", '3',	'3');
    writeButton('4', 7,	"btnFlat", '4',	'4');
    writeButton('5', 7,	"btnFlat", '5',	'5');
    writeButton('6', 7,	"btnFlat", '6',	'6');
    writeButton('7', 7,	"btnFlat", '7',	'7');
    writeButton('8', 7,	"btnFlat", '8',	'8');
    writeButton('9', 7,	"btnFlat", '9',	'9');
    writeButton('0', 7,	"btnFlat", "0",	"0");
    writeButton('-', 7,	"btnFlat", '-',	'-');
    writeButton('=', 6,	"btnFlat", '=',	'=');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('<tr>');
    document.writeln('<td width="100%">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	bordercolor="#111111" width="100%" id="AutoNumber2"	>');
    document.writeln('<tr>');
    writeButton('q', 6,	"btnFlat", 'q',	'q');
    writeButton('w', 7,	"btnFlat", 'w',	'w');
    writeButton('e', 7,	"btnFlat", 'e',	'e');
    writeButton('r', 8,	"btnFlat", 'r',	'r');
    writeButton('t', 8,	"btnFlat", 't',	't');
    writeButton('y', 8,	"btnFlat", 'y',	'y');
    writeButton('u', 8,	"btnFlat", 'u',	'u');
    writeButton('i', 8,	"btnFlat", 'i',	'i');
    writeButton('o', 8,	"btnFlat", 'o',	'o');
    writeButton('p', 8,	"btnFlat", 'p',	'p');
    writeButton('[', 8,	"btnFlat", '[',	'[');
    writeButton(']', 8,	"btnFlat", ']',	']');
    writeButton('\\', 8, "btnFlat",	'\\\\',	'\\\\');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('<tr>');
    document.writeln('<td width="100%">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	bordercolor="#111111" width="100%" id="AutoNumber3">');
    document.writeln('<tr>');
    writeButton('a', 10, "btnFlat",	'a', 'a');
    writeButton('s', 7,	"btnFlat", 's',	's');
    writeButton('d', 7,	"btnFlat", 'd',	'd');
    writeButton('f', 8,	"btnFlat", 'f',	'f');
    writeButton('g', 8,	"btnFlat", 'g',	'g');
    writeButton('h', 8,	"btnFlat", 'h',	'h');
    writeButton('j', 8,	"btnFlat", 'j',	'j');
    writeButton('k', 8,	"btnFlat", 'k',	'k');
    writeButton('l', 8,	"btnFlat", 'l',	'l');
    writeButton(';', 8,	"btnFlat", ';',	';');
    writeButton(charSingleQuote	, 8, "btnFlat",	'\\\'',	'\\\'');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('<tr>');
    document.writeln('<td width="100%">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	bordercolor="#111111" width="100%" id="AutoNumber4">');
    document.writeln('<tr>');
    writeButton2('LeftShift', 7, "btnSysFlat", 'LeftShift',	'Shift');
    writeButton('z', 8,	"btnFlat", 'z',	'z');
    writeButton('x', 8,	"btnFlat", 'x',	'x');
    writeButton('c', 8,	"btnFlat", 'c',	'c');
    writeButton('v', 8,	"btnFlat", 'v',	'v');
    writeButton('b', 8,	"btnFlat", 'b',	'b');
    writeButton('n', 9,	"btnFlat", 'n',	'n');
    writeButton('m', 9,	"btnFlat", 'm',	'm');
    writeButton(',', 9,	"btnFlat", ',',	',');
    writeButton('.', 9,	"btnFlat", '.',	'.');
    writeButton('/', 9,	"btnFlat", '/',	'/');
    writeButton2('RightShift', 8, "btnSysFlat",	'RightShift', 'Shift');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('<tr>');
    document.writeln('<td width="100%">');
    document.writeln('<table border="0"	cellpadding="0"	cellspacing="1"	bordercolor="#111111" width="100%" id="AutoNumber4">');
    document.writeln('<tr>');
    writeButton('LeftCtrl',	8, "btnSysFlat", 'LeftCtrl', 'Ctrl');
    writeEmptyCell('21', 20);
    writeButton2('AltL', 7,	"btnSysFlat", 'AltL', 'Alt');
    writeButton(' ', 32, "btnFlat",	' ', 'SPACE');
    writeButton2('AltR', 6,	"btnSysFlat", 'AltR', 'AltGr');
    writeEmptyCell('23', 18);
    writeButton('RightCtrl', 9,	"btnSysFlat", 'RightCtrl', 'Ctrl');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</td>');
    document.writeln('</tr>');
    document.writeln('</table>');
    document.writeln('</span>');
    RShift=document.getElementById("RightShift");
    LShift=document.getElementById("LeftShift");
    LAlt=document.getElementById("AltL");
    RAlt=document.getElementById("AltR");
    LCtrl=document.getElementById("LeftCtrl");
    RCtrl=document.getElementById("RightCtrl");
    HelpArea=document.getElementById("HelpDesk");
    addEvent(RShift, "click",ToggleShift);
    addEvent(LShift, "click",ToggleShift);
    addEvent(LAlt, "click",ToggleAlt);
    addEvent(RAlt, "click",ToggleAlt);
    osk=true;
}


function ShowHelp(idx)
{
    switch(CurrentKeyboardState)
    {
        case kbNormal:
        if (Keypads[idx].id)
        if(CurrentKeyboard.Keys[Keypads[idx].id])
        {
            if (document.all)
            HelpArea.innerText=	'Keyboard:'+idx;
            else if	(!document.all && document.getElementById)
            HelpArea.innerHTML=	'Keyboard:'+idx;
        }
        break;
        case kbShift:
        if (Keypads[idx].id)
        if(CurrentKeyboard.Keys[Keypads[idx].id])
        if(CurrentKeyboard.Keys[Keypads[idx].id].shifted)
        {
            if (document.all)
            HelpArea.innerText=	'Keyboard: Shift+ '+idx;
            else if	(!document.all && document.getElementById)
            HelpArea.innerHTML=	'Keyboard: Shift+ '+idx;
        }
        break;
        case kbAlt:
        if (Keypads[idx].id)
        if(CurrentKeyboard.Keys[Keypads[idx].id])
        if(CurrentKeyboard.Keys[Keypads[idx].id].alt)
        {
            if (document.all)
            HelpArea.innerText=	'Keyboard: Ctrl+Alt+ '+idx;
            else if	(!document.all && document.getElementById)
            HelpArea.innerHTML=	'Keyboard: Ctrl+Shift+ '+idx;
        }
        break;
    }
}

function setEditor(evt)
{
	if(window.opera)
	{
		currEdit=window.event.srcElement;
	}
	if(isGecko)
	{
		currEdit=evt.target;		
	}
	else
		currEdit=window.event.srcElement;
}

function setUrduById(idx)
{
	setUrdu(idx, true);
}

function setEnglishById(idx)
{
	setEnglish(idx, true);
}

function setEnglish(idx, byId)
{

	var el;
	if(arguments.length >1)
	{
		if(byId)
			el= document.getElementById(idx);
		else
			el= $(idx); 
	}
	else
	{
		el= $(idx); 
	}
	
	langArray[idx]=0;
	el.style.backgroundColor="#CCCCFF";
	if (el.createTextRange) 
	{
		var caretPos = el.caretPos;
		el.focus(caretPos);
		currEdit=el;
	}
	else if (el.selectionStart || el.selectionStart == '0')
	{
		var startPos = el.selectionStart; 
		el.focus(); 
		currEdit=el;
		el.selectionStart = startPos + 1; 
		el.selectionEnd = startPos + 1;
	}
}

function setUrdu(idx, byId)
{
	var el;
	if(arguments.length >1)
	{
		if(byId)
			el= document.getElementById(idx);
		else
			el= $(idx); 
	}
	else
	{
		el= $(idx); 
	}
	
	langArray[idx]=1;
	el.focus(1);
	el.style.backgroundColor="#DBEFF6";
	if (el.createTextRange) 
	{
		var caretPos = el.caretPos;
		el.focus(caretPos);
		currEdit=el;
	}
	else if (el.selectionStart || el.selectionStart == '0')
	{
		var startPos = el.selectionStart; 
		el.focus(); 
		currEdit=el;
		el.selectionStart = startPos + 1; 
		el.selectionEnd = startPos + 1;
	}
}

function writeToggleControl(idx, byId)
{
	var strName= idx+"_toggle";
	
	if(arguments.length >1)
	{
		if(byId)
			document.writeln('<span class="smallfonteng10">English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglishById("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrduById("'+idx+'")\'></span>');		
	}
	else
	{
		document.writeln('<span class="smallfonteng10">English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrdu("'+idx+'")\'></span>'); 
	}
}

function writeHelp()
{	
	var el= document.getElementById("comment");	
	var p = document.createElement("P");
	var txt = document.createTextNode('په دې بلاګ کښې تاسو د پښتو ورداخل ايډيټر سره ښه په اسانۍ خپلې تبصرې په پښتو ثبت کولے شئ. په انګريزي يا په خپل سيسټم کيبورډ سره ليکلو له Ctrl+Space Bar دباؤ کړئ.. بېرته پښتو ايډيټر لپاره هم دغه طريقه تکرار کړئ.');

	p.appendChild(txt);
	p.style.color="#FF0000";
	el.parentNode.insertBefore(p, el);
	
}
function insertToggleControl(idx, byId)
{
	var strName= idx+"_toggle";
	var el;
	
	if(arguments.length >1)
	{
		if(byId)
		{
			el= document.getElementById(idx);
			
			if(null==el) return;
			var lineBR=document.createElement("br");
			el.parentNode.insertBefore(lineBR, el.nextSibling);
			var toggleSpan= document.createElement("span");
			toggleSpan.innerHTML='English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglishById("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrduById("'+idx+'")\'>';
			//document.writeln('English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrdu("'+idx+'")\'>'); 
			lineBR.parentNode.insertBefore(toggleSpan, lineBR.nextSibling);
			var lineBR2=document.createElement("br");
			el.parentNode.insertBefore(lineBR2, toggleSpan.nextSibling);
			//document.writeln('English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglishById("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrduById("'+idx+'")\'>');		
		}
	}
	else
	{
		el= $(idx);
		if(null==el) return;
		var lineBR=document.createElement("br");
		el.parentNode.insertBefore(lineBR, el.nextSibling);
		var toggleSpan= document.createElement("span");
		toggleSpan.style.width="200px";
		toggleSpan.innerHTML='English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrdu("'+idx+'")\'>';
		//document.writeln('English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1662;&#1690;&#1578;&#1608;<input type="radio" value="Urdu" checked name="'+strName+'" onclick=\'setUrdu("'+idx+'")\'>'); 
		lineBR.parentNode.insertBefore(toggleSpan, lineBR.nextSibling);
		var lineBR2=document.createElement("br");
		el.parentNode.insertBefore(lineBR2, toggleSpan.nextSibling);
	}		
}

function $(strName)
{
	var result=null;
	allInputs= document.getElementsByTagName('input');
		
	for (var i = 0; i < allInputs.length; i++) 
	{
		thisInput = allInputs[i];
		if(thisInput.type == 'text')
		{			
			if(thisInput.name == strName)				
				return thisInput;
		}
	}
	
	allTextAreas= document.getElementsByTagName('textarea');
	for (i = 0; i < allTextAreas.length; i++) 
	{
		thisTextArea= allTextAreas[i];				
		if(thisTextArea.name == strName)				
			return thisTextArea;		
	}
	return null;
}


function addEvent(obj, evType, fn)
{
    if (obj.addEventListener)
    {
        obj.addEventListener(evType, fn, true);
        return true;
    }
    else if	(obj.attachEvent)
    {
        var	r =	obj.attachEvent("on"+evType, fn);
        return r;
    }
    else
    {
        alert("Handler could not be	attached");
    }
}

function makeUrduEditorById(idx, pt)
{
	langArray[idx]=1;
	var el= document.getElementById(idx);
	
	el.setAttribute("OpenPadId", idx);
	if(null==el)
		return;
	setAttributes(el, pt);
}

function makeUrduEditor(idx, pt)
{		
	langArray[idx]=1;	
	var el= $(idx);
	
	if(null==el)
		return;
	setAttributes(el, pt);		
}

function setAttributes(el, pt)
{
	el.lang="ur";
	el.dir="rtl";
	el.onFocus= "setEditor(el)";
	el.onclick="storeCaret(el)";
	el.onkeyup="storeCaret(el)";

	el.wrap="soft";
	with(el.style)
	{
		fontFamily="Pashto Destaar, Tahoma";
		fontSize=pt;
		backgroundColor="#DBEFF6";
	}
	
	addEvent(el , "keypress",  processKeypresses);
	addEvent(el , "keydown",  processKeydown);
	addEvent(el , "keyup",  processKeyup);
	addEvent(el , "focus", setEditor);	
}

function setKeymap(keymapName)
{
    CurrentKeyboard= KeyMaps[keymapName];
    UpdateKeypad(kbNormal);
}

function AddEditor(sName)
{
    langArray[sName]=1;
}

function initUrduEditor(cssPath)
{
    var	ua = navigator.userAgent.toLowerCase();
    isIE = ((ua.indexOf("msie")	!= -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1));
    isGecko	= (ua.indexOf("gecko") != -1);
    isSafari = (ua.indexOf("safari") !=	-1);
    isKonqueror	= (ua.indexOf("konqueror") != -1);
    
    var _se = document.getElementsByTagName('script');
		for (var i=0; i<_se.length; i++) {
		if (_se[i].src && (_se[i].src.indexOf("OpenPad.js") != -1) )
		{			
			_x=_se[i].src.indexOf("OpenPad.js");
			_sp=_se[i].src.substring(0,_x);		
		}
	}
	

	document.writeln('<style type="text/css">@import "'+_sp+'OpenPad.css";</style>');
	
	
    document.onmouseover = raiseButton;
    document.onmouseout	= normalButton;
    document.onmousedown = lowerButton;
    document.onmouseup = raiseButton;
    addEvent(document, "keydown", Downkeys);
    addEvent(document, "keyup",	Upkeys);
    //KeyMaps["SindhiPhonetic"]=SindhiPhonetic;
    KeyMaps["PashtoPhonetic"]=PashtoPhonetic;
    setKeymap("PashtoPhonetic");

}