﻿var isIE;
var isGecko;
var isSafari;
var isKonqueror;

	var currEdit=null;
	var langSel=1;
	var IsUrdu=1;

	var charSpace=String.fromCharCode(32);
	var charEnter=String.fromCharCode(13);
	var charTab=String.fromCharCode(9);
	var charNewLine='\n';
	var charColon=String.fromCharCode(58);
	var charSemiColon=String.fromCharCode(59);
	var charSingleQuote=String.fromCharCode(39);
	var charDoubleQuote=String.fromCharCode(34);
	var charFullStop=String.fromCharCode(46); //(0x06D4);
	var charComma=String.fromCharCode(44);
	var charExclaim=String.fromCharCode(33);
	
	var charPlus=String.fromCharCode(43);
	var charMinus=String.fromCharCode(45);
	var charMul=String.fromCharCode(42);
	var charDiv=String.fromCharCode(47);
	var charPrecent=String.fromCharCode(37);
	var charLeftParen=String.fromCharCode(41);
	var charRightParen=String.fromCharCode(40);
	var charEqual=String.fromCharCode(61);
	var charDecSep=String.fromCharCode(61);
	
	
	var codes= new Array();
	codes['a']=0x0627;
	codes['b']=0x0628;
	codes['c']=0x0686;
	codes['d']=0x062F;
	codes['e']=0x0639;
	codes['f']=0x0641;
	codes['g']=0x06AF;
	codes['h']=0x06BE;
	codes['i']=0x06CC;
	codes['j']=0x062C;
	codes['k']=0x06A9;
	codes['l']=0x0644;
	codes['m']=0x0645;
	codes['n']=0x0646;
	codes['o']=0x06C1;
	codes['p']=0x067E;
	codes['q']=0x0642;
	codes['r']=0x0631;
	codes['s']=0x0633;
	codes['t']=0x062A;
	codes['u']=0x0626; // hamza yeh
	codes['v']=0x0637;
	codes['w']=0x0648;
	codes['x']=0x0634;
	codes['y']=0x06D2;
	codes['z']=0x0632;
	
	codes['A']=0x0622;
	codes['B']=0x0628;
	codes['C']=0x062B;
	codes['D']=0x0688;
	codes['E']=0x0651; //tashdeed
	codes['F']=0x064D; // do zair
	codes['G']=0x063A;
	codes['H']=0x062D;
	codes['I']=0x0670; // khari zabar
	codes['J']=0x0636;
	codes['K']=0x062E;
	codes['L']=0x0628;
	codes['M']=0x064B; // do zabar
	codes['N']=0x06BA;
	codes['O']=0x0628;
	codes['P']=0x064F; // Paish
	codes['Q']=0x0628;
	codes['R']=0x0691;
	codes['S']=0x0635;
	codes['T']=0x0679;
	codes['U']=0x0621;
	codes['V']=0x0638;
	codes['W']=0x0624;
	codes['X']=0x0698;
	codes['Z']=0x0630;
	
	codes['>']=0x0650; // zair
	codes['<']=0x064E; // zabar	
	// jazm
	// do paish
	// mad
	// shad zair
	// shad paish
	// hai hamza
	// left quotation
	// right quotation
	// left double quotation
	// right double quotation

			
	codes[charSpace]=32; 
	codes[charEnter]=13;
	//codes[charTab]=String.fromCharCode(9);
	//codes[charNewLine]='\n';
	codes[charColon]=0x061B;
	codes[charSemiColon]=0x061B;
	codes[charSingleQuote]=0x2018;
	codes[charDoubleQuote]=0x201C;
	codes[charFullStop]=0x06D4;
	codes[charComma]=0x060C;
	codes[charExclaim]= 0x0021;
	codes['?']=0x061F;
	codes[':']=58;
	
	codes[charPlus]=0x002B;
	codes[charMinus]=0x002D;
	codes[charMul]=0x00D7;
	codes[charDiv]=0x00F7;
	codes[charPrecent]=0x066A;
	codes[charLeftParen]=0x0028;
	codes[charRightParen]=0x0029;
	codes[charEqual]=0x003D;

		
	codes['0']=0x660;
	codes['1']=0x661;
	codes['2']=0x662;
	codes['3']=0x663;
	codes['4']=0x664;
	codes['5']=0x665;
	codes['6']=0x666;
	codes['7']=0x667;
	codes['8']=0x668;
	codes['9']=0x669;
		
     function storeCaret (textEl) {
       if (textEl.createTextRange) 
         textEl.caretPos = document.selection.createRange().duplicate();
     }
     function insertAtCaret (textEl, text) {
       if (textEl.createTextRange && textEl.caretPos) {
         var caretPos = textEl.caretPos;
         caretPos.text =
           caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
             text + ' ' : text;
       }
       else
         textEl.value  = text;
     }
     
         

	function AddText(text) 
	{
		if(!currEdit) return;
		if (currEdit.createTextRange && currEdit.caretPos) {      
			var caretPos = currEdit.caretPos;      
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
			text + ' ' : text;
		}
		else currEdit.value += text;
	     currEdit.focus(caretPos)	
    } 
    
	function processKeypresses(evt)
	{
	     if (!IsUrdu) return;
	     
	     evt = (evt) ? evt : (window.event) ? event : null;
		 //if(!evt) evt=window.event;
	     if (evt)
  	      {
		  var charCode = (evt.charCode) ? evt.charCode :
                    ((evt.keyCode) ? evt.keyCode :
                   ((evt.which) ? evt.which : 0));
                   var whichASC = charCode ; // key's ASCII code
			var whichChar = String.fromCharCode(whichASC); // key's character


			
			if(evt.keyCode)
			{
				evt.keyCode= codes[whichChar];
			}
			else if(evt.which)
			{
				//evt.which= codes[whichChar];
				//alert('evt.which : '+whichChar);
				AddText( String.fromCharCode(codes[whichChar]));
				evt.preventDefault();
				evt.stopPropagation();
			}
			else if(evt.charCode)
			{
				//evt.charCode= codes[whichChar];
				alert('evt.charCode : '+whichChar);
				AddText(whichChar);
				evt.preventDefault();
				evt.stopPropagation();				
			}
			

		  }		
		
	}
	
function writeButton(caption, str)
	{
			document.writeln('<td class="btnFlat"  width=6% onclick="javascript:AddText(\''+ str+ '\' );">'+caption+'</td>');

	}
	
function writeButton2(caption, str)
{
			document.writeln('<td class="btnFlat" onclick="javascript:AddText(\''+ str+ '\' );" >'+caption+'</td>');
}

function writeKeyboard()
{
	 document.writeln('<span dir="ltr">');
	 document.writeln('<table   width="100%" style="border: 1px solid #C0C0C0;">');
	 // first row contains information and language switching
	 //document.writeln('<tr>');
	 //document.writeln('<td width="100%" colspan="15">');
	 	//document.writeln('<table   width="100%" style="border: 1px solid #C0C0C0;">');
			//document.writeln('<tr>');
				//document.writeln('<td width="100%">');
					//document.writeln('<span style="font-family:Verdana; font-size:12">Toggle Language</span>');
					//document.writeln('<input type="button" value="English" id="English" name="English" value="English" style="font-family:Urdu Naskh Asiatype; background-color: #CCCCCC" onclick="toggleLanguage();">');
					//document.writeln('<input type="button" value="   اردو   "  id="Urdu" name="Urdu" value="Urdu" style="font-family:Urdu Naskh Asiatype ; background-color: #CCCCCC" onclick="toggleLanguage();">');				
				//document.writeln('</td>');
			//document.writeln('</tr>');
		//document.writeln('</table>');
	 //document.writeln('</td>');
	 //document.writeln('</tr>');
	 
	 //start of keyboard	 
	 document.writeln('<tr>');
		writeButton('ر', 'ر' );
		 writeButton('ذ', 'ذ');
		writeButton('ڈ', 'ڈ' );
		 writeButton('د', 'د');
		 writeButton('خ', 'خ');
		writeButton('ح', 'ح');
		 writeButton('چ', 'چ' );
		 writeButton('ج', 'ج' );
		writeButton('ث', 'ث') ;
		 writeButton('ٹ', 'ٹ' );
		 writeButton('ت', 'ت' );
		writeButton('ب', 'ب');
		 writeButton('آ', 'آ' );
		 writeButton('ا', 'ا' );	     
	 document.writeln('</tr><tr>');
		writeButton('گ', 'گ');
		 writeButton('ک', 'ک' );
		writeButton('ق', 'ق' );
		 writeButton('ف', 'ف' );
		 writeButton('ع', 'ع' );
		writeButton('ظ', 'ظ' );
		 writeButton('ط', 'ط' );
		 writeButton('ض', 'ض' );
		writeButton('ص', 'ص' );
		 writeButton('ش', 'ش' );
		 writeButton('س', 'س');
		writeButton('ژ', 'ژ' );
		 writeButton('ے', 'ے' );
	 writeButton('ڑ', 'ڑ');
	document.writeln('</tr>');
	document.writeln('<tr>');
	document.writeln('<TD >&nbsp;</TD ><TD >&nbsp;</TD>');
		writeButton('۔', '۔');
		 writeButton('ے', 'ے');
		 writeButton('ی', 'ی');
		writeButton('ئ', 'ئ');
		 writeButton('ء', 'ء');
		 writeButton('ھ', 'ھ');
		writeButton('ہ', 'ہ');
		 writeButton('ؤ', 'ؤ');
		 writeButton('و', 'و');
		writeButton('ن', 'ن');
		 writeButton('م', 'م');
		 writeButton('ل', 'ل');
	 document.writeln('</tr>');	
	 document.writeln('<tr>');		 
	 //last row for the diacritics
	 document.writeln('<td width="100%" colspan="15">');
	 document.writeln('<table align=right style="border: 1px solid #D3D3D3;" colspan="15">');     	
	 document.writeln('<tr>');	
		writeButton2( 'کوما' ,String.fromCharCode(0x060C));
		 writeButton2( 'تشدید' ,String.fromCharCode(0x0651));
		 writeButton2( 'کھڑی زبر' , String.fromCharCode(0x0670));
		writeButton2( 'درمیانی حمزہ' ,String.fromCharCode(0x0626));
		 writeButton2( 'دو زیر' ,String.fromCharCode(0x064D));
		 writeButton2( 'دو زبر' ,String.fromCharCode(0x064B));
		writeButton2( ' پیش ' ,String.fromCharCode(0x064F));
		 writeButton2( 'زبر' , String.fromCharCode(0x064E));
		 writeButton2( 'زیر' ,String.fromCharCode(0x0650));   
	document.writeln('</tr>');   
	document.writeln('</table>');

	 //last row
	 document.writeln('</td>');
	 document.writeln('</tr>');
	 document.writeln('</table>');
	 document.writeln('</span>');
	
	//makeRaised(document.getElementById("English"));
	//makePressed(document.getElementById("Urdu"));
}
	
	
function makeRaised(el) {
	with (el.style) {
		borderLeft   = "1px solid buttonhighlight";
		borderRight  = "1px solid buttonshadow";
		borderTop    = "1px solid buttonhighlight";
		borderBottom = "1px solid buttonshadow";
		padding      = "1px";
	}
}

function makePressed(el) {
	with (el.style) {
		borderLeft   = "1px solid buttonshadow";
		borderRight  = "1px solid buttonhighlight";
		borderTop    = "1px solid buttonshadow";
		borderBottom = "1px solid buttonhighlight";
		paddingTop    = "2px";
		paddingLeft   = "2px";
		paddingBottom = "0px";
		paddingRight  = "0px";
	}
}

	
	
	function toggleLanguage()
	{
		if(!currEdit) return;
		currEdit.focus(); 
		
		IsUrdu=!IsUrdu;
		if(IsUrdu)
		{
			//makeRaised(document.getElementById("English"));
			//makePressed(document.getElementById("Urdu"));
		}
		else
		{
			//makeRaised(document.getElementById("Urdu"));
			//makePressed(document.getElementById("English"));
		}
	}
	
function raiseButton(evt) {
	//IE-Only Function
	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';
		}
	}
	else if(evt.target)
	{
		var el = evt.target;
		
		className = el.className;
		if (className == 'btnFlat' || className == 'btnLowered') {
			el.className = 'btnRaised';
		}
	}
}

function normalButton(evt) {
	//IE-Only Function
	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';
		}
	}
	else if(evt.target)
	{
		var el = evt.target;
		
		className = el.className;
		if (className == 'btnRaised' || className == 'btnLowered') {
			el.className = 'btnFlat';
		}
	}
}

function lowerButton(evt) {
	//IE-Only Function
	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';
		}
		
	}
	else if(evt.target)
	{
		var el = evt.target;
		
		className = el.className;
		if (className == 'btnFlat' || className == 'btnRaised') {
			el.className = 'btnLowered';
		}
	}
}
		
		
function addEvent(obj, evType, fn){
	
  if (obj.addEventListener)
  {
    obj.addEventListener(evType, fn, true);
    return true;
  }
  else if (obj.attachEvent)
  {
	  alert("on"+evType);
    var r = obj.attachEvent("on"+evType, fn);	
    return r;
	
  }
  else
  {
    alert("Handler could not be attached");
  }
}

function setEditor(el)
{
	currEdit=el;
}

function makeUrduEditor(idx, pt)
{
	var el=document.getElementById(idx);	
	
	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="Urdu Naskh Asiatype";
		fontSize=pt;
	}
	addEvent(el , "keypress",  processKeypresses);
}

function writeUrduEditor(sName, rows, cols, pt)
{
	if(rows>1)
		document.writeln('<TEXTAREA NAME="'+sName+'" id="'+sName+'" ROWS="'+rows+'" COLS="'+cols+'" style="font-family:Urdu Naskh Asiatype; font-size:'+pt+';" lang="ur" dir="rtl" wrap="soft" onkeypress="processKeypresses()" onclick="storeCaret(this)" onkeyup="storeCaret(this)" onFocus= "setEditor(this)"></TEXTAREA>');	
	else
		document.writeln('<input type="text" name="'+sName+'" id="'+sName+'" size="'+cols+'" style="font-family:Urdu Naskh Asiatype; font-size:'+pt+';" lang="ur" dir="rtl" onkeypress="processKeypresses()" onclick="storeCaret(this)" onkeyup="storeCaret(this)" onfocus="setEditor(this)">');
	var el=document.getElementById(sName);
	if(!document.all)
	{
		addEvent(el , "keypress",  processKeypresses);		
	}
}

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);
	
	
	//if (isIE) {
		document.onmouseover = raiseButton;
		document.onmouseout  = normalButton;
		document.onmousedown = lowerButton;
		document.onmouseup   = raiseButton;
	//}
	
	var sPath='';
	if(arguments.length>0) sPath=cssPath;
	document.writeln('<style type="text/css">@import"' + sPath + 'UrduEditor.css";</style>');
}
 