var Notice='Copyright (C) 2008-2009 Hamid Zarrabi-Zadeh // Source: http://tanzil.info // License: CC-BY ';;var version='0.1.6';var localSearch=false;var audioEnabled=true;var resultsPerPage=20;var searchResults=null;var highlightAya=false;var quranTypes=[{id:1,name:'Simple',type:'simple'},{id:2,name:'Simple (Enhanced)',type:'simple-modified'},{id:3,name:'Simple (Minimal)',type:'simple-min'},{id:4,name:'Simple (Clean)',type:'simple-clean'},{id:10,name:'Uthmani',type:'uthmani'},{id:11,name:'Uthmani (Minimal)',type:'uthmani-min'}];var defType=2;var mainType=defType;var queryType=null;var mainText,quranText;var mainTextIsReady=false;var fontList=[{id:1,name:'Default',alt:'Traditional Arabic'},{id:2,name:'Traditional Arabic',alt:'Scheherazade'},{id:3,name:'Times New Roman',alt:'Times New Roman'},{id:4,name:'Tahoma',alt:'Times New Roman'},{id:5,name:'Scheherazade',alt:'Traditional Arabic'},{id:6,name:'me_quran',alt:'Scheherazade'},{id:99,name:'Custom',alt:'Traditional Arabic'}];var currFont='';var currScale=1;var baseFont='Times New Roman';var searchText='';var searchPattern='';var highlightPattern='';var isIE=(navigator.appName=="Microsoft Internet Explorer");var isFirefox=navigator.userAgent.indexOf("Firefox")!=-1;var isOpera=!!window.opera;var isOldFirefox=isFirefox&&!document.getElementsByClassName;var isOldBrowser=!window.XMLHttpRequest;var isMac=/mac/i.test(navigator.platform);var defJustify=!isOpera&&!isOldFirefox;var tooltipLeft=false;var tabList=[{id:'preface',name:'ആമുഖം',visible:true},{id:'quran',name:'വിവര്‍ത്തനം'},{id:'wordmeaning',name:'വാക്കര്‍ത്ഥം'},{id:'search',name:'തിരച്ചില്‍ ഫലങ്ങള്‍',visible:false}];var currTab='quran';var lastTab=currTab;var searchTab=[{id:'quran',name:'search-quran'},{id:'roots',name:'search-roots'}];var transList=[{lang:'ar',id:'jalalayn',name:'تفسير الجلالين'},{lang:'sq',id:'nahi',name:'Efendi Nahi'},{lang:'sq',id:'mehdiu',name:'Feti Mehdiu'},{lang:'sq',id:'ahmeti',name:'Sherif Ahmeti'},{lang:'az',id:'mammadaliyev',name:'Məmmədəliyev & Bünyadov'},{lang:'az',id:'musayev',name:'Musayev'},{lang:'bn',id:'bengali',name:'মুহিউদ্দীন খান'},{lang:'bs',id:'korkut',name:'Korkut'},{lang:'ch',id:'jian',name:'Ma Jian'},{lang:'cs',id:'hrbek',name:'Hrbek'},{lang:'cs',id:'nykl',name:'Nykl'},{lang:'nl',id:'keyzer',name:'Keyzer'},{lang:'en',id:'ahmedali',name:'Ahmed Ali'},{lang:'en',id:'arberry',name:'Arberry'},{lang:'en',id:'asad',name:'Asad'},{lang:'en',id:'daryabadi',name:'Daryabadi'},{lang:'en',id:'hilali',name:'Hilali & Khan'},{lang:'en',id:'pickthall',name:'Pickthall'},{lang:'en',id:'qaribullah',name:'Qaribullah'},{lang:'en',id:'sahih',name:'Sahih International'},{lang:'en',id:'sarwar',name:'Sarwar'},{lang:'en',id:'shakir',name:'Shakir'},{lang:'en',id:'yusufali',name:'Yusuf Ali'},{lang:'en',id:'transliteration',name:'Transliteration'},{lang:'fr',id:'hamidullah',name:'Hamidullah'},{lang:'de',id:'aburida',name:'Abu Rida'},{lang:'de',id:'bubenheim',name:'Bubenheim & Elyas'},{lang:'de',id:'khoury',name:'Khoury'},{lang:'de',id:'zaidan',name:'Zaidan'},{lang:'id',id:'indonesian',name:'Bahasa Indonesia'},{lang:'it',id:'piccardo',name:'Piccardo'},{lang:'ja',id:'japanese',name:'Japanese'},{lang:'ko',id:'korean',name:'Korean'},{lang:'ml',id:'abdulhameed',name:'അബ്ദുല്‍ ഹമീദ് & പറപ്പൂര്‍'},{lang:'no',id:'berg',name:'Einar Berg'},{lang:'fa',id:'ghomshei',name:'الهی قمشه‌ای'},{lang:'fa',id:'ansarian',name:'انصاریان'},{lang:'fa',id:'ayati',name:'آیتی'},{lang:'fa',id:'fooladvand',name:'فولادوند'},{lang:'fa',id:'makarem',name:'مکارم شیرازی'},{lang:'pl',id:'bielawskiego',name:'Bielawskiego'},{lang:'pt',id:'elhayek',name:'El-Hayek'},{lang:'ro',id:'grigore',name:'Grigore'},{lang:'ru',id:'kuliev',name:'Кулиев'},{lang:'ru',id:'osmanov',name:'Османов'},{lang:'ru',id:'porokhova',name:'Порохова'},{lang:'sd',id:'amroti',name:'امروٽي'},{lang:'es',id:'cortes',name:'Cortes'},{lang:'sw',id:'barwani',name:'Al-Barwani'},{lang:'sv',id:'bernstrom',name:'Bernström'},{lang:'tt',id:'nugman',name:'Yakub Ibn Nugman'},{lang:'tr',id:'golpinarli',name:'Abdulbakî Gölpınarlı'},{lang:'tr',id:'bulac',name:'Alİ Bulaç'},{lang:'tr',id:'diyanet',name:'Diyanet İşleri'},{lang:'tr',id:'vakfi',name:'Diyanet Vakfı'},{lang:'tr',id:'yuksel',name:'Edip Yüksel'},{lang:'tr',id:'yazir',name:'Elmalılı Hamdi Yazır'},{lang:'tr',id:'ozturk',name:'Öztürk'},{lang:'tr',id:'yildirim',name:'Suat Yıldırım'},{lang:'tr',id:'ates',name:'Süleyman Ateş'},{lang:'tr',id:'transliteration',name:'Transliteration'},{lang:'ur',id:'kanzuliman',name:'احمد رضا خان'},{lang:'ur',id:'ahmedali',name:'احمد علی'},{lang:'ur',id:'jalandhry',name:'جالندہری'},{lang:'ur',id:'qadri',name:'طاہر القادری'},{lang:'ug',id:'saleh',name:'محمد صالح'},{lang:'uz',id:'sodik',name:'Мухаммад Содик'}];var defTrans='en.shakir';var transText=[];var transFont,transFontSize;var transFontList=[{id:'def',font:'Tahoma'},{id:'ug',font:'UKIJ Nasq, Scheherazade, Lateef, Microsoft Uighur, UKIJ Tuz, UKIJ Basma, Arial'}];var langList=[{id:'sq',lang:'Albanian'},{id:'ar',lang:'Arabic'},{id:'az',lang:'Azerbaijani'},{id:'bn',lang:'Bengali'},{id:'bs',lang:'Bosnian'},{id:'ch',lang:'Chinese'},{id:'cs',lang:'Czech'},{id:'nl',lang:'Dutch'},{id:'en',lang:'English'},{id:'fr',lang:'French'},{id:'de',lang:'German'},{id:'id',lang:'Indonesian'},{id:'it',lang:'Italian'},{id:'ja',lang:'Japanese'},{id:'ko',lang:'Korean'},{id:'ml',lang:'Malayalam'},{id:'no',lang:'Norwegian'},{id:'fa',lang:'Persian'},{id:'pl',lang:'Polish'},{id:'pt',lang:'Portuguese'},{id:'ro',lang:'Romanian'},{id:'ru',lang:'Russian'},{id:'sd',lang:'Sindhi'},{id:'es',lang:'Spanish'},{id:'sw',lang:'Swahili'},{id:'sv',lang:'Swedish'},{id:'tt',lang:'Tatar'},{id:'tr',lang:'Turkish'},{id:'ur',lang:'Urdu'},{id:'ug',lang:'Uyghur'},{id:'uz',lang:'Uzbek'}];var rtlLangs=['ar','fa','ur','ug','sd'];var reciteList=[{id:'abdulbasit-mrtl',name:'AbdulBasit',base:'Abdul_Basit_Murattal_192kbps',quality:192,server:1},{id:'abdulbasit-mjwd',name:'AbdulBasit (Mujawwad)',base:'AbdulSamad_64kbps_QuranExplorer.Com',quality:64,server:3},{id:'afasy',name:'Al-Afasy',base:'Alafasy_128kbps',quality:128,server:1},{id:'ajamy',name:'Al-Ajamy',base:'Ahmed_ibn_Ali_al-Ajamy_64kbps_QuranExplorer.Com',quality:64,server:1},{id:'ayyub',name:'Muhammad Ayyub',base:'Muhammad_Ayyoub_128kbps',quality:128,server:1},{id:'basfar',name:'Abdullah Basfar',base:'Abdullah_Basfar_192kbps',quality:192,server:2},{id:'ghamadi',name:'Al-Ghamadi',base:'Ghamadi_40kbps',quality:40,server:2},{id:'hudhaify',name:'Al-Hudhaify',base:'Hudhaify_128kbps',quality:128,server:2},{id:'husary',name:'Al-Husary',base:'Husary_128kbps',quality:128,server:2},{id:'jibreel',name:'Muhammad Jibreel',base:'Muhammad_Jibreel_128kbps',quality:128,server:3},{id:'minshawi',name:'Al-Minshawi',base:'Menshawi_16kbps',quality:16,server:3},{id:'minshawi-mjwd',name:'Al-Minshawi (Mujawwad)',base:'Minshawy_Mujawwad_192kbps',quality:128,server:3},{id:'hani',name:'Hani Rafi',base:'Hani_Rifai_192kbps',quality:192,server:2},{id:'shateri',name:'Ash-Shateri',base:'Abu Bakr Ash-Shaatree_128kbps',quality:128,server:3},{id:'shuraim',name:'Ash-Shuraim',base:'Saood bin Ibraaheem Ash-Shuraym_128kbps',quality:128,server:3},{id:'sudais',name:'As-Sudais',base:'Abdurrahmaan_As-Sudais_192kbps',quality:192,server:3},{id:'ibrahim',name:'English: Ibrahim Walk',base:'English/Ibrahim_Walk_192kbps_TEST',quality:192,server:2}];var servers=['','tanzil.info','tanzil.net','online-quran.info','versebyversequran.com'];var defRecite='ghamadi';var lastLoad=0;var loadedAya='';var reloadTried=false;var currAudioInfo={};var Consts={Juz:'Juz',End:''}
var cookieData=[{name:'currVersion',val:0.1},{name:'currSura',val:6},{name:'currAya',val:1},{name:'fontID',val:1},{name:'fontSize',val:16},{name:'customFont',val:'Lotus'},{name:'textJustify',val:defJustify},{name:'currType',val:defType},{name:'showSigns',val:true},{name:'showSmallAlef',val:!isMac},{name:'currTrans',val:defTrans},{name:'showHoverTrans',val:true},{name:'currRecite',val:defRecite},{name:'autoForward',val:true},{name:'rootChar',val:'ش'},{name:'searchMode',val:'quran'},{name:'searchText',val:'كتاب'}];var cookieExpire=120;var cookiesReady=false;
var ayaRange;var startAya=0;var endAya=0;
function inithomePage()
{adjustPageHeight();initMenuCollapse();
}

function initPage(start)
{adjustPageHeight();readCookies();adjustVariables();initRootList();showTabList();initTexts();initSuraMenu();initJuzMenu();initAyaMenu($('suraMenu').value*1,1);initReciteMenu();initTypeCharList();initRootMenu(rootChar);initMalTypeCharList();showMenuTab(searchTab,searchMode);initMenuCollapse();$('searchText').value=searchText;setAutoForward(autoForward);
//if(start.page)
//showPage(start.page);else
//showAya(start.sura||currSura,start.aya||start.sura>0||currAya);
ShowTafheemBlocks(1);
if(localSearch)
loadMainText(mainType);
if(audioEnabled){initAudioPlayer('player',147,20,'mediaPlayer');
initAudioPlayer('buffer','0','0','mediaBuffer');}}
function unload()
{saveCookies();mainText=quranText=transText=null;}
function readCookies()
{for(var i in cookieData)
{var w=Cookies.get(cookieData[i].name);if(w==null)w=cookieData[i].val;if(w=='true'||w=='false')w=(w=='true');window[cookieData[i].name]=w;}
cookiesReady=true;}

function initJIHCMSPage(start)
{readCookies();initRootList();readCookies();adjustVariables();initTexts();initSuraMenu();initAyaMenu($('suraMenu').value*1,1);
var randsura=Math.floor(Math.random()*115); if(randsura==0){randsura=1;}
ShowJIHCMSTafheemBlocks(randsura);
}

function saveCookies()
{if(!cookiesReady)return;for(var i in cookieData)
Cookies.set(cookieData[i].name,window[cookieData[i].name],cookieExpire);}
function update(name,val)
{window[name]=val;Cookies.set(name,val,cookieExpire);}
function setCookieDefault(name,val){getItem(cookieData,name,'name').val=val;}
function Tip()
{}
function adjustVariables()
{currType=currType||1;fontSize=fontSize||16;currTrans=getItem(transList,currTrans,'fname',defTrans).fname;currRecite=getItem(reciteList,currRecite,'id',defRecite).id;}
function initTransList()
{for(var i in transList)
transList[i].fname=transList[i].lang+'.'+transList[i].id;}
function initTexts()
{quranText=[];for(var i in quranTypes)
quranText[quranTypes[i].id]=[];}
function loadMainText(type)
{var ajax=new AJAX({timeout:300});var args={type:quranTypeName(type),download:0};queryType=type;ajax.request(root+'php/download.php',args,handleResponse);}
function handleResponse(response)
{quranText[queryType]=response.split('\n');mainText=quranText[queryType];mainTextIsReady=true;}
function quranTypeName(type)
{var typeName=getItem(quranTypes,type).type;return typeName;}
function getItem(theArray,value,id,def)
{id=id||'id';var res=null;for(var i=0;i<theArray.length;i++)
if(theArray[i][id]==value)
res=theArray[i];if(!res)
res=def?getItem(theArray,def,id):theArray[0];return res;}
function initSuraMenu(sura,nameType)
{var items=[];nameType=nameType||'name';for(var i=1;i<=Quran.numSuras;i++)
items.push({text:i+'. '+Quran.getSuraName(i,nameType),value:i});
initMenu('suraMenu',items,sura);
}
function initAyaMenu(sura,aya)
{var numAyas=Quran.suraProps(sura).ayas;if($('ayaMenu').childNodes.length==numAyas)
return;var items=[];for(var i=1;i<=numAyas;i++)
items.push({text:i,value:i});
//initMenu('ayaMenu',items,aya);
}
function initJuzMenu()
{var items=[];for(var i=1;i<=Quran.numJuzs;i++)
items.push({text:Consts.Juz+' '+i,value:i});initMenu('juzMenu',items);}
function initTransMenu()
{var items=[];for(var i=0;i<transList.length;i++){var langID=transList[i].lang;var lang=getItem(langList,langID).lang;items.push({text:lang+':  '+transList[i].name,value:transList[i].fname});}
initMenu('transMenu',items,currTrans);}
function initReciteMenu()
{var items=[];for(var i=0;i<reciteList.length;i++)
items.push({text:reciteList[i].name,value:reciteList[i].id});initMenu('reciteMenu',items,currRecite);}
function getItems(theArray,textLabel,valueLabel)
{var items=[];for(var i=0;i<theArray.length;i++)
items[i]={text:theArray[i][textLabel],value:theArray[i][valueLabel]||i};return items;}
function initMenu(menuID,items,defVal)
{var menu=$(menuID);var newMenu=document.createElement('select');var attr=['id','className','class','onchange'];for(var i in attr){newMenu[attr[i]]=menu[attr[i]];newMenu.setAttribute(attr[i],menu.getAttribute(attr[i]));}
for(var i=0;i<items.length;i++){var text=items[i].text;var option=document.createElement('option');option.text=option.innerHTML=text;option.value=items[i].value;newMenu.appendChild(option);if(defVal&&defVal==items[i].value)
newMenu.selectedIndex=i;}
menu.parentNode.replaceChild(newMenu,menu);}
function initMenu0(menuID,items,defVal)
{var menu=$(menuID);removeAllChild(menu);for(var i=0;i<items.length;i++)
{var text=items[i].text;var option=document.createElement('option');option.text=option.innerHTML=text;option.value=items[i].value;menu.appendChild(option);if(defVal&&defVal==items[i].value)
menu.selectedIndex=i;}}
function showTabList()
{var text='';for(var i=0;i<tabList.length;i++)
text+='<li'+(tabList[i].visible==false?' style="display:none;"':'')
+'><a href="javascript:showTab(\''+tabList[i].id+'\');"'
+(tabList[i].id==currTab?' class="selected"':'')+'>'
+tabList[i].name+'</a></li>';$('tab-strip').innerHTML=text;}
function showTab(tabID)
{if(currTab!='search')
lastTab=currTab;currTab=tabID;showTabList();$('searchDiv').style.display=(currTab=='search')?'block':'none';$('quranDiv').style.display=(currTab!='search')?'block':'none';$('quranText').style.display=(currTab=='quran')?'block':'none';$('TQpref').style.display=(currTab=='preface')?'block':'none'; $('Wmean').style.display=(currTab=='wordmeaning')?'block':'none';
if(currTab=='preface'&&prefloaded==false)TQChangeSuraPreface();
if(currTab=='wordmeaning'&&wordmeanloaded==false) ShowWordmeanings(); 
if(currTab!='search') redraw();}
function showMenuTab(tabList,tabID)
{for(var i in tabList){$(tabList[i].name+'-tab').style.display='none';removeClassName(tabList[i].name+'-selector','selected');}
var name=getItem(tabList,tabID).name;$(name+'-tab').style.display='block';addClassName(name+'-selector','selected');searchMode=tabID;}
function displayAya(sura,aya,highlight)
{update('currSura',sura);update('currAya',aya);highlightAya=highlight;var page=Quran.getAyaPage(sura,aya);var juz=Quran.getAyaJuz(sura,aya);$('juzMenu').selectedIndex=juz-1;
initAyaMenu(sura,aya);
if(isOldBrowser)
$('suraMenu').selectedIndex=sura-1;else
initSuraMenu(sura,'name');
//$('ayaMenu').selectedIndex=aya-1;
//retrievePage();
if(currSura+':'+currAya!=loadedAya&&audioEnabled)
loadAudio();}
function redraw()
{currType=$('typeMenu').value;showSigns=$('showSigns').checked;showSmallAlef=$('showSmallAlef').checked;showFont(true);displayAya(currSura,currAya,highlightAya);}
function showAya(sura,aya)
{sura=sura||$('suraMenu').value*1;aya=aya||$('ayaMenu').value*1;sura=Quran.fixSuraNum(sura);aya=Quran.fixAyaNum(sura,aya);displayAya(sura,aya);}
function showSura(sura)
{sura=sura||$('suraMenu').value*1;sura=Quran.fixSuraNum(sura);displayAya(sura,1);}
function showPage(page)
{page=page||$('pageNum').value*1;page=Quran.fixPageNum(page);displayAya(Quran.pageProps(page).sura,Quran.pageProps(page).aya);}
function showJuz(juz)
{juz=juz||$('juzMenu').value*1;juz=Quran.fixJuzNum(juz);
var jzSura=Quran.juzProps(juz).sura; var jzAya=Quran.juzProps(juz).aya;
displayAya(jzSura,jzAya);
ShowTafheemBlocks(jzSura);
}
function changePage(num)
{num=getArrowOffset(num)||num;var page=$('pageNum').value*1+num;showPage(page);}
function navigateAya(suraD,ayaD)
{var sura=Quran.fixSuraNum(currSura+suraD);var aya=(suraD==0)?Quran.fixAyaNum(sura,currAya+ayaD):1;$('navAya').value=sura+':'+aya;displayAya(sura,aya);}
function getCurrDir(tab)
{tab=tab||currTab;return{quran:'rtl',search:'ltr'}[tab]||getTransDir();}
function getCurrTextDir()
{var tab=(currTab=='search')?lastTab:currTab;return{quran:'rtl',search:'ltr'}[tab]||getTransDir();}
function getTransDir()
{var lang=getItem(transList,currTrans,'fname').lang;return(arrayContains(rtlLangs,lang))?'rtl':'ltr';}
function retrievePage()
{var page=$('pageNum').value*1;var startAya=Quran.getPageStart(page);var endAya=Quran.getPageStart(page+1);if(quranText[currType][startAya]==null||transText[startAya]==null)
{var args={type:quranTypeName(currType),typeNum:currType,transType:currTrans,currFont:currFont,pageNum:page,startAya:startAya,endAya:endAya};var ajax=new AJAX();ajax.request(root+'php/get-aya.php',args,procPageResp);showLoadingImage(true);}
else
showPageText(page);}
function procPageResp(response)
{showLoadingImage(false);if(response==null)
{showError();return;}
var temp=response.split('|');var temp2=temp[0].split(':');var quranType=temp2[0]*1;var page=temp2[1]*1;var ayaList=temp[1].split('\n');var trans=temp[2].split('\n');var line=Quran.getPageStart(page);for(i=0;i<ayaList.length-1;i++)
{quranText[quranType][line]=ayaList[i];transText[line]=trans[i];line++;}
showPageText(page);}
function showPageText(page)
{var suraNames=[];var prevSura=0;var list=Quran.getPageItems(page);var text='';for(i=0;i<list.length;i++)
{var sura=list[i].sura;var aya=list[i].aya;if(sura!=prevSura&&aya>0){suraNames.push(Quran.getSuraName(sura));prevSura=sura;}
var index=Quran.getAyaStart(sura,aya);var ayaText=quranText[currType][index];var className='aya';var args={showSigns:showSigns,showSmallAlef:showSmallAlef,font:currFont,type:currType};if(aya==1){text+='<div class="suraHeaderFrame"><div class="suraHeaderText">'
+((getCurrDir()=='rtl')?'سورة '+Quran.getSuraName(sura):Quran.getSuraName(sura,'tname'))+'</div></div>';if(sura!=1&&sura!=9){ayaText=ayaText.replace(/^(([^ ]+ ){4})/,'$1|').split('|');text+='<div class="besm">'+(currTab=='preface'?'بسم الله الرحمن الرحيم':TextTools.fixText(ayaText[0],args))+'</div>\n';ayaText=ayaText[1];}}
if(currSura==sura&&currAya==aya){if(highlightAya)
ayaText=TextTools.highlight(highlightPattern,ayaText);className=highlightAya?'ayaHighlight':'ayaSelected';}
ayaText=TextTools.fixText(ayaText,args);ayaTrans=transText[index];if(currTab=='preface'){ayaText=ayaTrans;var thisAya='<span class="ayaText">'+ayaText+'</span> ';thisAya+='<span class="ayaNumber" onclick="displayAya('+sura+', '+aya+');">';thisAya+='('+(getTransDir()=='ltr'?aya:TextTools.arabicNumber(aya))+')</span>';text+='<span id="t-'+sura+'-'+aya+'" class="'+className+'">'+thisAya+'</span> \n';}
else{var tipCommand=showHoverTrans?'onmouseover':'onclick';tipCommand+=getTooltipCommand(ayaTrans);var thisAya='<span class="ayaText" '+tipCommand+' >'+ayaText+'</span> ';thisAya+='<span class="ayaNumber" onclick="displayAya('+sura+', '+aya+');">';thisAya+='﴿'+TextTools.arabicNumber(aya)+'﴾</span>';text+='<span id="'+sura+'-'+aya+'" class="'+className+'">'+thisAya+'</span> \n';}}
if(currTab=='preface'){$('preface').innerHTML=text;$('preface').style.direction=getTransDir();$('preface').style.fontFamily=transFont;$('preface').style.fontSize=transFontSize*1.5+'pt';}
else
$('quranText').innerHTML=text;var currJuz=Quran.getAyaJuz(currSura,currAya);$('suraName').innerHTML=(getCurrDir()=='rtl')?'سورة '+Quran.getSuraName(currSura):Quran.getSuraName(currSura,'tname');$('juzName').innerHTML=(getCurrDir()=='rtl')?'الجزء '+TextTools.arabicNumberName(currJuz):'Juz '+currJuz;$('pageNumber').innerHTML=$('pageNumber2').innerHTML=(getCurrDir()=='rtl')?TextTools.arabicNumber(page):page;if(currTab=='search')
showTab(lastTab);scrollToAya();}
function getTooltipCommand(text,title,specs)
{if(showHoverTrans==2)
return'';var width=Math.min(text.length*7,300);var spec=', WIDTH, '+width+', ABOVE, true, LEFT, '+tooltipLeft;spec+=!showHoverTrans?', FOLLOWMOUSE, false':'';spec+=title?', TITLE, \''+title+'\'':'';spec+=", FONTFACE, '"+transFont+"'";spec+=", FONTSIZE, '"+(1.2*transFontSize)+"pt'";spec+=specs?', '+specs:'';text=text.strip();text=text.escapeHTML();text=text.replace(/'/g,"\\'");text=text.replace(/"/g,'&quot;');text=text.replace(/\u200C/g,isIE?'&zwnj;':' ');var klass='tooltipL';if(getTransDir()=='rtl')
klass='tooltipR';text='&lt;div class=&quot;'+klass+'&quot;&gt;'+text+'&lt;/div&gt;';var command='="Tip(\''+text+'\' '+spec+')"';return command;}
function setTrans()
{update('currTrans',$('transMenu').value);transText=[];getItem(tabList,'search').visible=false;showTabList();if(currTab=='search')
showTab(lastTab);setTransFontDefs();redraw();}
function setTransFontDefs()
{var lang=getItem(transList,currTrans,'fname').lang;transFont=getItem(transFontList,lang).font;transFontSize=fontWidth(baseFont,2)/fontWidth(transFont,2)*10;}
function showTranslation()
{update('showHoverTrans',$('showHoverTrans').checked);redraw();}
function startSearch()
{if(localSearch&&!mainTextIsReady){alert('Text is loading...\n\nPlease search again after a few seconds.');return;}
var search=$('searchText').value;if(search.strip()==''){alert('Search string is empty.');return;}
$('pageOffset').value=1;$('searchPattern').innerHTML=search;searchText=search;search=search.replace(/\-/g,'!');searchPattern=TextTools.enrichPattern(search);highlightPattern=searchPattern.replace(/[+!]/g,'|');highlightPattern=highlightPattern.replace(/^[|]+/g,'');searchResults=null;
try{new RegExp(highlightPattern,'g');}
catch(e){alert('Search expression is invalid.');searchResults={results:[],totalMatch:0};searchPattern='';}
if(localSearch&&!searchResults)
searchResults=TextTools.search(mainText,searchPattern);prepareResults();}
function prepareResults()
{if(!searchPattern)
return;var pageOffset=1*$('pageOffset').value;if(localSearch){var results=getResultsItems(pageOffset);//displaySearchPage(results,searchResults.results.length,searchResults.totalMatch);
}
else
{var args={type:quranTypeName(mainType),transType:currTrans,pattern:encodeURIComponent(searchPattern),searchText:encodeURIComponent(searchText),pageOffset:pageOffset,resultsPerPage:resultsPerPage};var ajax=new AJAX();ajax.request('Search.php',args,procSerachQuery);showLoadingImage(true);}}
function procSerachQuery(response)
{if(response==null||/Fatal error/.test(response))
{showError();return;}
var result=response.split('|');var count=result[0].split(':');var numAyaMatch=count[0];var totalMatch=count[1];var resutls=result[1].split('\n');var res=[];for(var i=0;i<resutls.length-1;i++){var item=resutls[i];item=item.split(':');res.push({index:item[0],text:item[1],trans:item[2].replace(/↕/g,':')});}
//displaySearchPage(res,numAyaMatch,totalMatch);showLoadingImage(false);
}
function getResultsItems(pageOffset)
{var results=searchResults.results;var start=(Math.max(0,pageOffset-1))*resultsPerPage;var end=Math.min(start+resultsPerPage,results.length);var res=[];for(var i=start;i<end;i++)
res.push({index:results[i],text:mainText[results[i]]});return res;}
function displaySearchPage(results,numAyaMatch,totalMatch)
{if(results.length==0)
$('pageOffset').value=0;var div=composeSearchPage(results,$('pageOffset').value);removeAllChild($('searchResults'));$('searchResults').appendChild(div);$('searchFrame').scrollTop=0;$('totalPages').innerHTML=Math.ceil(numAyaMatch/resultsPerPage);$('searchStat').innerHTML=totalMatch+' results in '+numAyaMatch+' ayas';setResultsFont();getItem(tabList,'search').visible=true;showTab('search');}
function composeSearchPage(results,pageOffset)
{var mainDiv=document.createElement('div');var args={showSigns:false,showSmallAlef:showSmallAlef,ignoreInternalSigns:true,font:'default',type:mainType};for(var i=0;i<results.length;i++)
{var line=' '+results[i].text+' ';line=TextTools.highlight(highlightPattern,line);line=TextTools.fixText(line,args);var item=Quran.getLineCoords(results[i].index);var spec=Quran.getSuraName(item.sura)+': '+TextTools.arabicNumber(item.aya);var link='goToAya('+item.sura+', '+item.aya+')';var rowClass='row-'+i%2;var div=document.createElement('div');div.className='result';var transTip='onmouseover'+getTooltipCommand(results[i].trans,'&nbsp;'+item.sura+':'+item.aya);div.innerHTML='<div class="'+rowClass+'" onclick="'+link+'">'+'<span class="number">'+TextTools.arabicNumber((pageOffset-1)*resultsPerPage+i+1)+'. </span>'+line+'<span class="spec" '+transTip+'> ﴿'+spec+'﴾</span></div>';mainDiv.appendChild(div);}
return mainDiv;}
function goToAya(sura,aya)
{displayAya(sura,aya,true);}
function showSearchPage(offset)
{var newOffset=1*$('pageOffset').value+offset;newOffset=Math.max(newOffset,1);newOffset=Math.min(newOffset,$('totalPages').innerHTML);$('pageOffset').value=newOffset;prepareResults();}
function setResultsFont()
{var defFonts={imlaaei:{fontFamily:'Traditional Arabic, Scheherazade',scale:1.3},uthmani:{fontFamily:'Times New Roman, Scheherazade',scale:1.15}}
var textType=(mainType<10)?'imlaaei':'uthmani';$('searchResults').style.fontFamily=defFonts[textType].fontFamily;$('searchResults').style.fontSize=defFonts[textType].scale+'em';}
function setFontSize(num)
{var size=$('fontSize').value*1+num;$('fontSize').value=size;showFont();}
function setCustomFont()
{customFont=$('customFont').value;showFont();}
function showFont(no_redraw)
{var defFonts={imlaaei:{name:'Traditional Arabic',alt:'Scheherazade'},uthmani:{name:'me_quran',alt:'Scheherazade'}}
update('fontID',$('fontMenu').value);var fontSet=getItem(fontList,fontID);if(fontID==1)
fontSet=defFonts[(currType<10)?'imlaaei':'uthmani'];update('customFont',$('customFont').value);$('customFontRow').style.display=(fontID==99)?'block':'none';if(fontID==99)
fontSet={name:customFont,alt:fontSet.alt};if(fontExists(fontSet.name))
currFont=fontSet.name;else if(fontExists(fontSet.alt))
currFont=fontSet.alt;else currFont=baseFont;currScale=fontWidth(baseFont)/fontWidth(currFont)*1.1;update('textJustify',$('textJustify').checked);var justify=textJustify?'justify':'right';update('fontSize',$('fontSize').value*1);var obj=$('quranText');obj.style.fontFamily=currFont;obj.style.textAlign=justify;obj.style.fontSize=currScale+'em';$('quranDiv').style.fontSize=(fontSize+3)+'px';if(!no_redraw)
redraw();}
function fontWidth(fontName,text)
{text=text||'ربنا إنك جامع الناس ليوم لا ريب فيه إن الله لا يخلف الميعاد';if(text==2)text='In the name of Allah, بسم الله الرحمن الرحيم';var tester=document.createElement('div');tester.className='checkFont';tester.style.fontFamily=fontName;tester.innerHTML=text;document.body.appendChild(tester);var width=getDimensions(tester).width;document.body.removeChild(tester);return width;}
function fontExists(fontName)
{var fontFamily=fontName+', '+baseFont;return fontWidth(baseFont)*fontWidth(baseFont,2)!=fontWidth(fontFamily)*fontWidth(fontFamily,2);}
function $(element)
{if(typeof element=="string")
element=document.getElementById(element);return element;}
Object.extend=function(destination,source)
{for(var property in source)
destination[property]=source[property];return destination;};Function.prototype.bind=function(obj)
{var method=this,temp=function(){return method.apply(obj,arguments);};return temp;}
String.prototype.strip=function()
{return this.replace(/^\s+/,'').replace(/\s+$/,'');}
String.prototype.escapeHTML=function(){var div=document.createElement('div');var text=document.createTextNode(this);div.appendChild(text);return div.innerHTML;}
function hasClassName(element,className)
{if(!(element=$(element)))return;var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));}
function addClassName(element,className)
{if(!(element=$(element)))return;if(!hasClassName(element,className))
element.className+=(element.className?' ':'')+className;return element;}
function removeClassName(element,className)
{if(!(element=$(element)))return;element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return element;}
function getDimensions(element)
{element=$(element);var display=$(element).style.display;if(display!='none'&&display!=null)
return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};}
function getWinDims()
{var myWidth=0,myHeight=0;if(typeof(window.innerWidth)=='number'){myWidth=window.innerWidth;myHeight=window.innerHeight;}else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){myWidth=document.documentElement.clientWidth;myHeight=document.documentElement.clientHeight;}else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){myWidth=document.body.clientWidth;myHeight=document.body.clientHeight;}
return{width:myWidth,height:myHeight};}
function adjustPageHeight()
{var pageHeight=getWinDims().height;var footer=getPosition($('footer-content'));var leftPane=getPosition($('left-content'));var height=pageHeight-leftPane.top-(footer.bottom-footer.top)-21;$('left-content').style.minHeight=height+'px';}
function scrollToAya()
{var obj=$(currSura+'-'+currAya);if(currTab=='preface')
obj=$('t-'+currSura+'-'+currAya);var pos=getPosition(obj);var top=getScroll().Y;var win=getWinDims();if(pos.top-top<win.height*Scroller.marginTop||pos.bottom-top>win.height*(1-Scroller.marginTop/2))
Scroller.goTo(obj);}
function getScroll()
{var scrOfX=0,scrOfY=0;if(typeof(window.pageYOffset)=='number'){scrOfY=window.pageYOffset;scrOfX=window.pageXOffset;}else if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){scrOfY=document.body.scrollTop;scrOfX=document.body.scrollLeft;}else if(document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)){scrOfY=document.documentElement.scrollTop;scrOfX=document.documentElement.scrollLeft;}
return{X:scrOfX,Y:scrOfY};}
function getPosition(obj)
{var curleft=curtop=0;var height=obj.offsetHeight;if(obj.offsetParent)
do{curleft+=obj.offsetLeft;curtop+=obj.offsetTop;}
while(obj=obj.offsetParent);return{left:curleft,top:curtop,bottom:curtop+height};}
var Scroller={duration:600,marginTop:1/8,method:'quadratic',startTime:0,target:0,initGap:0,task:null,goTo:function(obj)
{clearInterval(this.task);this.startTime=(new Date()).getTime();this.target=getPosition(obj).top-getWinDims().height*this.marginTop;this.initGap=this.target-getScroll().Y;setTimeout('Scroller.scrollWindow()',10);},scrollWindow:function()
{var currPos=getScroll();var now=(new Date()).getTime();if(now-this.startTime<this.duration){var newY=this.target-this.newGap(now);window.scrollTo(currPos.X,newY);if(newY==currPos.Y||currPos.Y!=getScroll().Y){clearInterval(this.task);this.task=setTimeout('Scroller.scrollWindow()',10);}}
else
window.scroll(currPos.X,this.target);},newGap:function(now)
{var portion=0;var deltaTime=(now-this.startTime)/this.duration;if(this.method=='quadratic')
portion=1-Math.pow(1-deltaTime,2);else
portion=deltaTime;return parseInt(this.initGap*(1-portion));}}
var scrollFactor=isIE?1.3:1.8;var scrollTimeout=null;function smoothScroll(obj)
{clearInterval(scrollTimeout);var destY=getPosition(obj).top-getWinDims().height/8;setTimeout('scrollWindowTo('+destY+')',20);}
function scrollWindowTo(destY)
{var pos=getScroll();var diff=destY-pos.Y;if(Math.abs(diff)>2*scrollFactor){var delta=(diff<0?-1:+1)*Math.pow(Math.abs(diff),1/scrollFactor);window.scrollTo(pos.X,pos.Y+delta);if(pos.Y!=getScroll().Y)
scrollTimeout=setTimeout('scrollWindowTo('+destY+')',10);}
else
window.scrollTo(pos.X,destY);}
function arrayContains(anArray,aValue)
{var temp='|'+anArray.join('|')+'|';if(temp.indexOf('|'+aValue+'|')==-1)
return false;else
return true;}
function removeAllChild(node)
{while(node&&node.firstChild)
node.removeChild(node.firstChild);}
function getPrevSibling(node)
{var x=node.previousSibling;while(x.nodeType!=1)
x=x.previousSibling;return x;}
function getNextSibling(node)
{var x=node.nextSibling;while(x.nodeType!=1)
x=x.nextSibling;return x;}
function setOpacity(obj,opacity)
{obj.style.opacity=opacity/100;obj.style.filter='alpha(opacity='+opacity+')';}
function selectText(obj)
{obj.select();}
function deselectText(obj)
{if(document.selection)
document.selection.empty();else
window.getSelection().removeAllRanges();}
function submitOnEnter(myfield,e)
{var keycode;if(window.event)keycode=window.event.keyCode;else if(e)keycode=e.which;else return true;if(keycode!=13)
return true;myfield.form.submit();return false;}
function initMenuCollapse()
{var objs=$('left-content').getElementsByTagName('div');var list=[];for(var i=0;i<objs.length;i++)
{var cls=objs[i].className;if(cls&&cls.match('menu-content'))
list.push(objs[i]);}
for(var i in list)
{var d=list[i];d.style.overflow='hidden';d.style.display='block';var p=getPrevSibling(d);p.onclick=function(){toggleCollapse(this);};if(d.id=='audio-reload')
p.onclick=function(){toggleCollapse(this);loadAudio();};if(d.parentNode.getAttribute('isCollapsed')=='true')
toggleCollapse(p,true);}}
function toggleCollapse(obj,collapse)
{var next=getNextSibling(obj);var expand=collapse?false:(next.style.display=='none');var img=obj.getElementsByTagName('img')[0];next.style.display=expand?'block':'none';img.style.backgroundPosition=expand?'0px -12px':'0px 0px';}
function setDialogPos(){
var ns6=document.getElementById && !document.all
McurY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
}
function showDialog(divID,modal)
{modal=modal||true;var dialog=new jt_DialogBox(modal,{okButton:true,titleOpacity:100});var obj=$(divID)||document.body;var width=obj.getAttribute('width')||400;var height=obj.getAttribute('height')||300;var title=obj.getAttribute('headTitle')||'Tanzil';var url=obj.getAttribute('urlAddress');var maxHeight=obj.getAttribute('height');dialog.setTitle(title);if(url)
dialog.setUrl(url,height);else
{dialog.setContent(obj.innerHTML);if(maxHeight)
dialog.setHeight(maxHeight);}
dialog.setWidth(width);var yy=(getWinDims().height-height-50)/2;
dialog.moveTo((getWinDims().width-width)/2,Math.max(50,Math.min(yy,150)));
//dialog.moveTo((getWinDims().width-width)/2,Math.max(450,McurY-50));
//dialog.moveTo((getWinDims().width-width)/2,-1);
dialog.show();}
function createDialog(modal,buttons)
{var div=document.createElement('div');for(var i=0;i<buttons.length;i++)
{var butt=document.createElement('button');var butText=document.createTextNode(buttons[i].button);butt.appendChild(butText);butt.onclick=buttons[i].handler;div.appendChild(butt);}
return new jt_DialogBox(modal,div);}
function showLoadingImage(show)
{$('loadingImage').src=show?'images/ajax-loader.gif':'images/dot.gif';$('loadingImage').title=show?'Loading...':'';}
function showError()
{$('loadingImage').src='images/warning.png';$('loadingImage').title='Error Loading...';}
function helpTip(id,width)
{width=width||400;$(id).className="ContentArea helpTooltip";var title=$(id).getAttribute('headTitle')||'';TagToTip(id,BGCOLOR,'#F3F3FF',WIDTH,width,TITLE,title,STICKY,true,CLOSEBTN,true,CENTERMOUSE,true);Drag.init($('WzTiTl'),$('WzTtDiV'),0,null,0);$('WzTiTl').style.cursor='move';}
function arrowTip(arrow)
{var num=getArrowOffset(arrow);Tip((num==+1?'Next':'Previous')+' Page',LEFT,arrow=='left',DELAY,800,FOLLOWMOUSE,false);}
function getArrowOffset(arrow)
{return{rtl:{left:+1,right:-1},ltr:{left:-1,right:+1}}[getCurrDir()][arrow];}
function preload()
{var args=preload.arguments;document.imageArray=new Array(args.length);for(var i=0;i<args.length;i++){document.imageArray[i]=new Image;document.imageArray[i].src=args[i];}}
function initRootList()
{Roots=[];var root=RootList.split(' ');for(var i=0;i<root.length;i++)
Roots.push(root[i]);}
function initTypeCharList()
{var chars='ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي أ إ آ ء ؤ ئ ى ة';chars=chars.split(' ');var str='';for(var i=0;i<chars.length;i++){var clas='';str+='<a class="'+clas+'" href="javascript:TypeChar(\''+chars[i]+'\')">'+chars[i]+'</a> ';}
$('TypeCharList').innerHTML=str;}
function TypeChar(chr)
{$('searchText').value+=chr;}
function initMalTypeCharList()
{var chars='അ ആ ഇ ഈ ഉ ഊ ഋ എ ഏ ഐ ഒ ഓ ഔ ക ഖ ഗ ഘ ങ ച ഛ ജ ഝ ഞ ട ഠ ഡ ഢ ണ ത ഥ ദ ധ ന പ ഫ ബ ഭ മ യ ര ല വ ശ ഷ സ ഹ ള ക്ഷ ഴ റ ാ ി ീ ു ൂ ൃ െ േ ൈ ണ്‍ ന്‍ ര്‍ ല്‍ ള്‍ ൊ ോ ൗ ൌ ഃ ം ്';chars=chars.split(' ');var str='';for(var i=0;i<chars.length;i++){var clas='';str+='<a class="'+clas+'" href="javascript:MalTypeChar(\''+chars[i]+'\')">'+chars[i]+'</a> ';}
$('MalCharList').innerHTML=str;}
function MalTypeChar(chr)
{$('TFsearchText').value+=chr;}
function initCharList(chr)
{rootChar=chr;var chars='آ ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي';chars=chars.split(' ');var str='';for(var i=0;i<chars.length;i++){var clas=(chars[i]==chr)?'current-char':'';str+='<a class="'+clas+'" href="javascript:initRootMenu(\''+chars[i]+'\')">'+chars[i]+'</a> ';}
$('charList').innerHTML=str;}
function initRootMenu(chr)
{initCharList(chr);var items=[];if(chr=='ا')chr='[اإأ]';if(chr=='ك')chr='[كک]';reg=new RegExp('^'+chr,'');for(var i=0;i<Roots.length;i++)
if(reg.test(Roots[i]))
items.push({value:Roots[i],text:Roots[i]});initMenu('rootMenu',items);}
function startRootSearch()
{var root=$('rootMenu').value;$('pageOffset').value=1;$('searchPattern').innerHTML=root;searchPattern=root;
searchPattern=TextTools.enrichPattern(searchPattern);highlightPattern=searchPattern.replace(/[+!]/g,'|');searchResults=null;prepareResults();}
function setRecitation()
{update('currRecite',$('reciteMenu').value);loadAudio();}
function setAutoForward(auto,obj)
{autoForward=auto;$('autoForward').style.backgroundPosition=auto?'0px -20px':'0px 0px';var tooltip=function(){Tip(auto?'Recite Mode: Continuous':'Recite Mode: Current Aya Only')};$('autoForward').onmouseover=tooltip;if(obj) tooltip.call();}
function toggleAutoForward(obj)
{setAutoForward(!autoForward,obj);}
function initAudioPlayer(playerID,width,height,container)
{var so=new SWFObject(root+'Plmedia/mediaplayer.swf',playerID,width,height,8);so.addParam('allowscriptaccess','always');so.addParam('allowfullscreen','false');so.addVariable('width',width);so.addVariable('height',height);so.addVariable('frontcolor','0x000099');so.addVariable('lightcolor','0x000033');so.addVariable('file',getAudio(currSura,currAya).url);so.addVariable('javascriptid',playerID);so.addVariable('showstop ','false');so.addVariable('enablejs','true');so.write(container);loadAudio();}
function sendEvent(playerID,typ,param)
{var player=$(playerID);if(player&&player.sendEvent)
player.sendEvent(typ,param);}
function loadFile(playerID,obj)
{var player=$(playerID);if(!player||!player.loadFile)
return false;player.loadFile(obj);return true;}
function loadBuffer(sura,aya)
{var audio=getAudio(sura,aya);currAudioInfo['buffer']=audio.info;loadFile('buffer',{file:audio.url});sendEvent('buffer','playpause');sendEvent('buffer','playpause');}
function recite()
{sendEvent('player','playpause');}
function threeDigits(num)
{var temp='000'+num;return temp.substr(temp.length-3);}
function getAudio(sura,aya)
{var reciter=getItem(reciteList,currRecite);var host=servers[reciter.server];var url='http://'+host+'/quran/audio/'+reciter.id+'/';if(host=='versebyversequran.com')
url='http://www.versebyversequran.com/data/'+reciter.base+'/';url+=threeDigits(sura)+threeDigits(aya)+'.mp3';if(aya==1&&reciter.server!=4)
url='http://tanzil.net/quran/audio/bisms/'+reciter.id+'/'+threeDigits(sura)+'_MP3WRAP.mp3';var info={id:reciter.id,server:reciter.server,quality:reciter.quality,sura:sura,aya:aya};return{url:url,info:info};}
function loadAudio(retry)
{if(retry&&reloadTried)
return;var audio=getAudio(currSura,currAya);currAudioInfo['player']=audio.info;if(loadFile('player',{file:audio.url}))
loadedAya=currSura+':'+currAya;else
setTimeout('loadAudio()',500);reloadTried=retry;loadFile('buffer',{file:audio.url});}
function getUpdate(typ,param1,param2,playerID)
{if(playerID=='player')
{if(typ=='load'){lastLoad=param1;if(param1==100&&autoForward){var next=Quran.getNextAya(currSura,currAya);loadBuffer(next.sura,next.aya);}}
if(typ=='state'&&param1==3){if(!lastLoad)
setTimeout('loadAudio(true)',100);else if(autoForward&&goToNextAya())
setTimeout('recite()',100);}}}
function goToNextAya()
{var next=Quran.getNextAya(currSura,currAya);if(next.sura==115)
return false;
var dispsura=currSura;
currSura=next.sura;currAya=next.aya;
if ((currAya > endAya)||(dispsura < currSura)) nextpage();
displayAya(currSura,currAya);
return true;
};
var TextTools={matchingRules:[["$HAMZA_SHAPE","$HAMZA_SHAPE"],["$ALEF_MAKSURA","YY"],["$ALEF","[$ALEF$ALEF_MAKSURA$ALEF_WITH_MADDA_ABOVE$ALEF_WITH_HAMZA_ABOVE$ALEF_WITH_HAMZA_BELOW$ALEF_WASLA]"],["[$TEH$MARBUTA]","[$TEH$MARBUTA]"],["$HEH","[$HEH$MARBUTA]"],["$WAW","[$WAW$WAW_WITH_HAMZA_ABOVE$SMALL_WAW]"],["$YEH","[$YEH$ALEF_MAKSURA$YEH_WITH_HAMZA$SMALL_YEH]"],["YY","[$ALEF_MAKSURA$YEH$ALEF]"],[" ","$SPACE"]],wildcardRegs:[["\\.","P"],["\\*","S"],["[?؟]","Q"],["[QS]*S[QS]*","S"],["^\s*[QS]*",""]],wildcards:[["S","$LETTER_HARAKA*"],["Q","$LETTER?"],["P","$LETTER"]],preProcess:[["[$FARSI_YEH$YEH_BARREE]","$YEH"],["[$FARSI_KEHEH$SWASH_KAF]","$KAF"],["$NOON$SUKUN","$NOON"],["([$KASRA$KASRATAN])($SHADDA)","$2$1"]],init:function()
{for(var i in UGroups)
UGroups[i]=this.regTrans(UGroups[i]);}}
TextTools.regTrans=function(str)
{return str.replace(/\$([A-Z_]+)/g,function(s,i,ofs,all){return UGroups[i]||UChars[i]||'';});}
TextTools.pregReplace=function(fromExp,toExp,str)
{fromExp=new RegExp(this.regTrans(fromExp),'g');toExp=this.regTrans(toExp);return str.replace(fromExp,toExp);}
TextTools.applyRules=function(rules,str)
{for(var i in rules)
str=this.pregReplace(rules[i][0],rules[i][1],str);return str;}
TextTools.arabicNumber=function(str)
{var res=String(str).replace(/([0-9])/g,function(s,n,ofs,all){return String.fromCharCode(0x0660+n*1);});return res;}
TextTools.farsiNumber=function(str)
{var res=String(str).replace(/([0-9])/g,function(s,n,ofs,all){return String.fromCharCode(0x06F0+n*1);});return res;}
TextTools.arabicNumberName=function(num)
{var unary=Array('الاول','الثاني','الثالث','الرابع','الخامس','السادس','السابع','الثامن','التاسع','العاشر');var decimal=Array('عشر','العشرون','الثلاثون');if(num<1||num>=40)return'';if(num<=10)return unary[num-1];var digit=num%10;var dec=parseInt(num/10);unary[0]='الحادي';var res=(digit>0?unary[digit-1]+(dec>1?' و':' '):'')+decimal[dec-1];return res;}
TextTools.fixText=function(text,args)
{args=args||{};if(args.showSigns)
{text=this.pregReplace(' ([$HIGH_SALA-$HIGH_SEEN])','<span class="sign">&nbsp;$1</span>',text);text=this.pregReplace('([$RUB_EL_HIZB$SAJDAH])',args.ignoreInternalSigns?'':'<span class="internal-sign">$1</span>',text);}
else
text=this.pregReplace('[$HIGH_SALA-$RUB_EL_HIZB$SAJDAH]','',text);if(!args.showSmallAlef)
text=this.pregReplace('$SUPERSCRIPT_ALEF','',text);if(args.font=='me_quran')
text=this.addSpaceTatweel(text);else if(args.type>=10)
{text=this.addSpaceTatweel(text);text=this.removeExtraMeems(text);text=this.pregReplace('($LAM$HARAKA*)$HAMZA($HARAKA*$ALEF)','$1$TATWEEL$HAMZA_ABOVE$2',text);text=this.pregReplace('$SMALL_YEH($HARAKA*$LETTER)','$TATWEEL$HIGH_YEH$1',text);}
text=this.pregReplace('$ALEF$MADDA','$ALEF_WITH_MADDA_ABOVE',text);text=this.pregReplace('$HIGH_NOON','$TATWEEL$HIGH_NOON',text);if(args.font!='me_quran')
text=this.pregReplace('($SHADDA)([$KASRA$KASRATAN])','$2$1',text);return text;}
TextTools.addSpaceTatweel=function(text)
{text=this.pregReplace('($SHADDA|$FATHA)($SUPERSCRIPT_ALEF)','$1$TATWEEL$2',text);text=this.pregReplace('([$HAMZA$DAL-$ZAIN$WAW][$SHADDA$FATHA]*)$TATWEEL($SUPERSCRIPT_ALEF)','$1$ZWNJ$2',text);return text;}
TextTools.removeExtraMeems=function(text)
{text=this.pregReplace('([$FATHATAN$DAMMATAN])$LOW_MEEM','$1',text);text=this.pregReplace('($KASRATAN)$HIGH_MEEM','$1',text);return text;}
TextTools.highlight=function(pattern,str)
{pattern=new RegExp('('+pattern+')','g');str=str.replace(pattern,'◄$1►');str=str.replace(/◄\s/g,' ◄').replace(/\s►/g,'► ');str=str.replace(/([^\s]*)◄/g,'◄$1').replace(/►([^\s]*)/g,'$1►');while(/◄[^\s]*◄/.test(str))
str=str.replace(/(◄[^\s]*)◄/g,'$1').replace(/►([^\s]*►)/g,'$1');str=str.replace(/◄/g,'<span class="highlight">').replace(/►/g,'</span>');return str;}
TextTools.enrichPattern=function(pattern,ignoreHaraka)
{if(ignoreHaraka)
pattern=this.pregReplace("$HARAKA",'',pattern);
pattern=this.regTrans(pattern);pattern=this.handleSpaces(pattern);pattern=this.applyRules(this.preProcess,pattern);pattern=this.applyRules(this.wildcardRegs,pattern);pattern=this.pregReplace("(.)","$1$HARAKA*",pattern);pattern=this.applyRules(this.matchingRules,pattern);pattern=this.applyRules(this.wildcards,pattern);return pattern;}
TextTools.handleSpaces=function(pattern)
{

	var prev = '';

	if (pattern == '') return pattern;

	

	pattern = pattern.replace(/^([^"]*")([^"]*)("*[^"\s]*)/g, '$1 $2 $3');
	
	pattern = pattern.replace(/\s+/g, ' ');	
	
	
	while (pattern != prev)

	{

		prev = pattern;

		//pattern = pattern.replace(/^([^"]*)("[^"]*")*([^"\s]*) /g, '$1$2$3+');

		
		pattern = pattern.replace(/^(([^"]*"[^"]*")*)([^"\s]*) /g, '$1$3+');

	}
	
	
	
	pattern = pattern.replace(/_/g, ' ');

	pattern = pattern.replace(/"/g, '+');

	// remove extra operators

	pattern = pattern.replace(/^[+|]+/g, '').replace(/[+|!]+$/g, '');

	pattern = pattern.replace(/\+*([+|!])\+*/g, '$1');



	return pattern;

}
TextTools.init();var textTools=TextTools;
