// Sindhi OpenPad
// Written by Abdul Rasheed (arsamo_help@yahoo.com)
// Visit Sindhi website at http://www.sindhsalamat.com
// 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	isOpera;
var currEdit2;
var IsSindhi2=1;
var IsSindhi3=1;
var gMode;

var gEditorId=null;
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 editorFont="MB Sindhi Web, Tahoma";
var sindhiColor="#99FF99";
var englishColor="#CCCCFF";
var	CurrentKeyboardState=1;
var	currEdit=null;
var	langSel=1;
var	IsSindhi=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 isAlpha(ch)
{
    return (ch >= 'a' && ch	<= 'z\uffff') || (ch >=	'A'	&& ch <= 'Z\uffff');
}
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 SindhiPhonetic= new Keyboard();
SindhiPhonetic.Keys['a']=new Key(0x0627, 0x0622, 0x0649);
SindhiPhonetic.Keys['b']=new Key(0x0628, 0x067b, 0xFDE1);
SindhiPhonetic.Keys['c']=new Key(0x0637, 0x0638, 0x200D);
SindhiPhonetic.Keys['d']=new Key(0x062F, 0x068A);
SindhiPhonetic.Keys['e']=new Key(0x064A, 0x0650, 0x0656);
SindhiPhonetic.Keys['f']=new Key(0x0641, 0x6A6);
SindhiPhonetic.Keys['g']=new Key(0x06AF, 0x064B);
SindhiPhonetic.Keys['h']=new Key(0x0647, 0x062D, 0x06c1);
SindhiPhonetic.Keys['i']=new Key(0x06b3, 0x06be, 0xfde4);
SindhiPhonetic.Keys['j']=new Key(0x062C, 0x064D, 0xfdfb);
SindhiPhonetic.Keys['k']=new Key(0x06aa, 0x06e1);
SindhiPhonetic.Keys['l']=new Key(0x0644, 0x003a);
SindhiPhonetic.Keys['m']=new Key(0x0645, 0x06fe, 0xfdf4);
SindhiPhonetic.Keys['n']=new Key(0x0646, 0x06Bb, 0x200e);
SindhiPhonetic.Keys['o']=new Key(0x0648, 0x064f, 0x0657);
SindhiPhonetic.Keys['p']=new Key(0x067E, 0x06a6);
SindhiPhonetic.Keys['q']=new Key(0x0642, 0x064e, 0x064b);
SindhiPhonetic.Keys['r']=new Key(0x0631, 0x0699, 0xfde6);
SindhiPhonetic.Keys['s']=new Key(0x0633, 0x0634);
SindhiPhonetic.Keys['t']=new Key(0x062A, 0x067d, 0x0629);
SindhiPhonetic.Keys['u']=new Key(0x0639, 0x063a, 0xfde3);
SindhiPhonetic.Keys['v']=new Key(0x0680, 0x0621, 0x0624);
SindhiPhonetic.Keys['w']=new Key(0x0635, 0x0636, 0xFDFA);
SindhiPhonetic.Keys['x']=new Key(0x062e, 0x0651, 0x200c);
SindhiPhonetic.Keys['y']=new Key(0x067f, 0x062b, 0xfde5);
SindhiPhonetic.Keys['z']=new Key(0x0632, 0x0630, 0x0652);
SindhiPhonetic.Keys['&']=new Key(0x06FD);

SindhiPhonetic.AddKey('1', 0x0031, charCode('!'), 0x021);
SindhiPhonetic.AddKey('2', 0x0032, charCode('@'), 0x662);
SindhiPhonetic.AddKey('3', 0x0033, charCode('#'), 0x663);
SindhiPhonetic.AddKey('4', 0x0034, charCode('$'), 0x664);
SindhiPhonetic.AddKey('5', 0x0035, charCode('%'), 0x665);
SindhiPhonetic.AddKey('6', 0x0036, charCode('^'), 0x666);
SindhiPhonetic.AddKey('7', 0x0037, charCode('&'), 0x6fd);
SindhiPhonetic.AddKey('8', 0x0038, charCode('*'), 0x668);
SindhiPhonetic.AddKey('9', 0x0039, charCode('('), 0x669);
SindhiPhonetic.AddKey('0', 0x0030, charCode(')'), 0x661);

SindhiPhonetic.Keys['=']=new Key(0x068c);
SindhiPhonetic.Keys['-']=new Key(0x068f);
SindhiPhonetic.Keys[',']=new Key(0x060C);
SindhiPhonetic.Keys[_s(46)]=new Key(0x06D4);
SindhiPhonetic.Keys['/']=new Key(0x0626);
SindhiPhonetic.Keys['\\']=new Key(0x068d);
SindhiPhonetic.Keys[';']=new Key(0x06a9);
SindhiPhonetic.Keys['[']=new Key(0x0687);
SindhiPhonetic.Keys[']']=new Key(0x0686);
SindhiPhonetic.Keys[charSingleQuote]=new Key(0x06b1, 0x640);
SindhiPhonetic.Keys['~']=new Key(0x64C); //(0x0653);
SindhiPhonetic.Keys[' ']=new Key(32);
SindhiPhonetic.Keys['<']=new Key(0x201c);
SindhiPhonetic.Keys['´']=new Key(0x0657);

SindhiPhonetic.Shifted['!']=charCode('!');
SindhiPhonetic.Shifted['@']=0x0649;
SindhiPhonetic.Shifted['#']=0xE001;
SindhiPhonetic.Shifted['$']=0xE000;
SindhiPhonetic.Shifted['%']=0xE002;
SindhiPhonetic.Shifted['^']=0xE003;
SindhiPhonetic.Shifted['~']=0x064C; 
SindhiPhonetic.Shifted['&']=0x06fd;
SindhiPhonetic.Shifted['*']=0x0624;
SindhiPhonetic.Shifted['(']=0x0029;
SindhiPhonetic.Shifted[')']=0x0028;

SindhiPhonetic.Shifted['+']=0x002B;
SindhiPhonetic.Shifted['_']=0x005f;

SindhiPhonetic.Shifted['>']=0x201C; 
SindhiPhonetic.Shifted['<']=0x201d; 
SindhiPhonetic.Shifted['?']=0x061F; 
SindhiPhonetic.Shifted['|']=0x067a; 
SindhiPhonetic.Shifted['{']=0x0683; 
SindhiPhonetic.Shifted['}']=0x0684; 
SindhiPhonetic.Shifted[charDoubleQuote]=0x0022; 
SindhiPhonetic.Shifted['~']=0x0653;
SindhiPhonetic.Shifted[':']=0x061b; 
SindhiPhonetic.Shifted[';']=0x061B;
SindhiPhonetic.Shifted[' ']=0x200C; 

SindhiPhonetic.AltGr['[']=0x201C; 
SindhiPhonetic.AltGr[']']=0x201D; 
SindhiPhonetic.AltGr['{']=0x2018; 
SindhiPhonetic.AltGr['}']=0x2019; 

var	KeyMaps= new Array();
var	Keypads=new	Array();
var	langArray=new Array();



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	)
            {
				CurrentKeyboardState=kbShift;
				
            }
            else if(evt.ctrlKey	&& evt.altKey)
            {
				CurrentKeyboardState=kbAlt;
            }
            else if(evt.ctrlKey)
            {
                CurrentKeyboardState=kbCtrl;
            }
        }
        else if(!document.all && document.getElementById)
        {
            if(evt.ctrlKey)
            {
                if(	evt.shiftKey)
                {
					CurrentKeyboardState=kbAlt;
                }
                else
                {
                    CurrentKeyboardState=kbCtrl;
                }
            }
            else if(evt.shiftKey )
            {
				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)
            {
				CurrentKeyboardState = kbNormal;
            }
        }
        if(CurrentKeyboardState	== kbAlt)
        {
            if(document.all)
            {
                if(!(evt.altKey	&& evt.ctrlKey))
                {
					CurrentKeyboardState = kbNormal;
                }
            }
            else if(!document.all && document.getElementById)
            {
                if(!evt.ctrlKey	|| evt.shiftKey)
                {
					CurrentKeyboardState=kbNormal;
                }
            }
        }
    }
}
function storeCaret	(textEl)
{
    if (textEl.createTextRange)
    textEl.caretPos	= document.selection.createRange().duplicate();
}


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
					{
						setSindhi(currEdit.name);
					}
				}
				else
				{
					if(langArray[currEdit.id]==1)
					{
						setEnglishById(currEdit.id);
					}
					else
					{
						setSindhiById(currEdit.id);
					}
				}
				
                if(isIE)
                {
                    evt.returnValue=false;
                    evt.cancelBubble=true;
                }
                else if(isGecko)
                {
                    evt.preventDefault();
                    evt.stopPropagation();
                }
            }
        }
    }
}

	function AddText2(text) 
	{
	
		if(!currEdit) return;
	 
		if (currEdit.createTextRange && currEdit.caretPos) {      
			var caretPos = currEdit.caretPos;      
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
			text + ' ' : text;
			currEdit.focus(caretPos);
		}
		else if (currEdit.selectionStart || currEdit.selectionStart == '0') 
		{ 
			var vTop=currEdit.scrollTop;
			//alert(vTop);
			var startPos = currEdit.selectionStart; 
			var endPos = currEdit.selectionEnd; 
			currEdit.value = currEdit.value.substring(0, startPos) 
						  + text 
						  + currEdit.value.substring(endPos, currEdit.value.length); 
			currEdit.focus(); 
			currEdit.selectionStart = startPos + 1; 
			currEdit.selectionEnd = startPos + 1; 
			currEdit.scrollTop=vTop;
		}
		else 
		{
			currEdit.value += text;
			currEdit.focus(caretPos);	
		}
    }
    
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 d(s){document.writeln(s);};
function w(c,s){d('<td class="btnFlat"  width=6% onclick="javascript:AddText2(\''+s+'\' );">'+c+'</td>');}
function w2(c,s){d('<td class="btnFlat" onclick="javascript:AddText2(\''+s+'\' );">'+c+'</td>');}
function writeKeyboard(){d('<span dir="ltr">');d('<table width="100%" style="border: 1px solid #C0C0C0;">');d('<tr>');w('&#1670;','&#1670;');w('&#1667;','&#1667;');w('&#1668;','&#1668;'); w('&#1580;','&#1580;');w('&#1662;','&#1662;');w('&#1579;','&#1579;');w('&#1658;','&#1658;');w('&#1661;','&#1661;');w('&#1663;', '&#1663;');w('&#1578;', '&#1578;');w('&#1664;','&#1664;');w('&#1659;','&#1659;');w('&#1576;','&#1576;');w('&#1570;','&#1570;');w('&#1575;','&#1575;');d( '</tr><tr>');w('&#1589;','&#1589;');w('&#1588;','&#1588;');w('&#1587;','&#1587;');w('&#1586;',' &#1586;');w('&#1689;','&#1689;');w('&#1585;','&#1585;');w('&#1584;','&#1584;');w('&#1677;','&#1677;');w('&#1679;','&#1679;');w(' &#1674;','&#1674;');w('&#1676;','&#1676;');w('&#1583;','&#1583;');w('&#1582;','&#1582;');w('&#1581;','&#1581;');w('&#1671;','&#1671;');d('</tr><tr>');w('&#1605;','&#1605;');w('&#1604;','&#1604;');w('&#1713;','&#1713;');w('&#1715;','&#1715;');w('&#1711;','&#1711;');w('&#1705;', '&#1705;');w('&#1706;','&#1706;');w('&#1602;','&#1602;');w('&#1702;','&#1702;');w('&#1601;','&#1601;');w('&#1594;','&#1594;');w( '&#1593;','&#1593;');w('&#1592;','&#1592;');w('&#1591;','&#1591;');w('&#1590;','&#1590;');d('</tr>');d('</tr><tr>');w2('&#1659;&#1607; &#1586;&#1610;&#1585;',String.fromCharCode(0x064D));w2('&#1659;&#1607; &#1586;&#1576;&#1585;',String.fromCharCode(0x064B));w2('&#1586;&#1576;&#1585;',String.fromCharCode(0x064E));w2('&#1586;&#1740;&#1585;',String.fromCharCode(0x0650));w2('&#1662;&#1610;&#1588;',String.fromCharCode(0x064F));w2('&#1588;&#1583;',String.fromCharCode(0x0651));w('&#1790;','&#1790;');w('&#1789;','&#1789;');w('&#1574;','&#1574;');w('&#1610;','&#1610;');w('&#1569;','&#1569;');w('&#1607;','&#1607;');w('&#1608;','&#1608;');w('&#1723;','&#1723;');w('&#1606;','&#1606;');d('</tr>');d('<tr>');d('<td width="100%" colspan="15">');d('<table align=right style="border: 1px solid #D3D3D3;" colspan="15">');d('</table>');d('</td>');d('</tr>');d('</table>');d('</span>');}
function r(e){e=(e)?e:(window.event)?event:null;if(e.srcElement){var el=e.srcElement;className=el.className;if(className=='btnFlat'||className=='btnLowered'){el.className='btnRaised';}}else if(e.target){var el=e.target;className=el.className;if(className=='btnFlat'||className=='btnLowered'){el.className='btnRaised';}}}
function n(e){e=(e)?e:(window.event)?event:null;if(e.srcElement){var el=window.event.srcElement;className=el.className;if(className=='btnRaised'||className=='btnLowered'){el.className='btnFlat';}}else if(e.target){var el=e.target;className=el.className;if(className=='btnRaised'||className=='btnLowered'){el.className='btnFlat';}}}
function l(e){e=(e)?e:(window.event)?event:null;if(e.srcElement){var el=window.event.srcElement;className=el.className;if(className=='btnFlat'||className=='btnRaised'){el.className='btnLowered';}}else if(e.target){var el=e.target;className=el.className;if(className=='btnFlat'||className=='btnRaised'){el.className='btnLowered';}}}


function setEditor(evt)
{
	if(window.opera)
	{
		currEdit=window.event.srcElement;
	}
	if(isGecko)
	{
		currEdit=evt.target;		
	}
	else
		currEdit=window.event.srcElement;
}

function setSindhiById(idx)
{
	setSindhi(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 setSindhi(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="#99FF99";
	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+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhiById("'+idx+'")\'></span>');		
	}
	else
	{
		document.writeln('<span class="smallfonteng10">English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhi("'+idx+'")\'></span>');	 
	}
}

function insertToggleControl(idx, byId)
{
	var strName= idx+"_toggle";
	var el;
	
	if(arguments.length >1)
	{
		if(byId)
		{
			el= document.getDocumentById(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+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhiById("'+idx+'")\'>';
			//document.writeln('English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhi("'+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+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhiById("'+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+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhi("'+idx+'")\'>';
		//document.writeln('English<input type="radio" value="English" name="'+strName+'"onclick=\'setEnglish("'+idx+'")\'>&#1587;&#1606;&#1676;&#1610;<input type="radio" value="Sindhi" checked name="'+strName+'" onclick=\'setSindhi("'+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 (window.opera && obj.addEventListener)
  {
	obj.addEventListener(evType, fn, false);
    return true;
  }	
  else */
  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 makeSindhiEditorById(idx, pt)
{
	langArray[idx]=1;
	var el= document.getElementById(idx);
	
	el.setAttribute("OpenPadId", idx);
	if(null==el)
		return;
	setAttributes(el, pt);
}

function makeSindhiEditor(idx, pt)
{		
	langArray[idx]=1;	
	var el= $(idx);
	
	if(null==el)
		return;
	setAttributes(el, pt);		
}

function setAttributes(el, pt)
{
	el.lang="sd";
	el.dir="rtl";
	el.onFocus= "setEditor(el)";
	el.onclick="storeCaret(el)";
	el.onkeyup="storeCaret(el)";

	el.wrap="soft";
	with(el.style)
	{
		fontFamily=editorFont;
		fontSize=pt;
		backgroundColor="#99FF99";
	}
	
	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 makeSindhiEditors(editors)
{
	var strName;
	var iSize;
	
	for(var xtextEl in editors)
	{
		strName= xtextEl;
		iSize= editors[xtextEl];
		makeSindhiEditor(strName, iSize);
	}
}

function makeSindhiEditorsById(editors)
{
	var strName;
	var iSize;
	

	for(var xtextEl in editors)
	{
		strName= xtextEl;
		iSize= editors[xtextEl];
		makeSindhiEditorById(strName, iSize);
	}
}

function initSindhiEditor()
{
    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);
    isOpera	= window.opera;
   
	var allInputs, thisInput, attr;
	var allTextAreas, thisTextArea;
	var editors;
	
	var ua = navigator.userAgent.toLowerCase();
	isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1)); 
	isGecko = (ua.indexOf("gecko") != -1);
	isOpera= window.opera;

	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=r;
	document.onmouseout=n;
	document.onmousedown=l;
	document.onmouseup=r
    addEvent(document, "keydown", Downkeys);
    addEvent(document, "keyup",	Upkeys);
    KeyMaps["SindhiPhonetic"]=SindhiPhonetic;
    setKeymap("SindhiPhonetic");    
}
