മീഡിയവിക്കി:Common.js

Schoolwiki സംരംഭത്തിൽ നിന്ന്
05:41, 29 ഒക്ടോബർ 2009-നു ഉണ്ടായിരുന്ന രൂപം സൃഷ്ടിച്ചത്:- Admin (സംവാദം | സംഭാവനകൾ)

ശ്രദ്ധിക്കുക: സേവ് ചെയ്തശേഷം മാറ്റങ്ങൾ കാണാനായി താങ്കൾക്ക് ബ്രൗസറിന്റെ കാഷെ ഒഴിവാക്കേണ്ടി വന്നേക്കാം.

  • ഫയർഫോക്സ് / സഫാരി: Reload ബട്ടൺ അമർത്തുമ്പോൾ Shift കീ അമർത്തി പിടിക്കുകയോ, Ctrl-F5 അല്ലെങ്കിൽ Ctrl-R (മാക്കിന്റോഷിൽ ⌘-R ) എന്ന് ഒരുമിച്ച് അമർത്തുകയോ ചെയ്യുക
  • ഗൂഗിൾ ക്രോം: Ctrl-Shift-R (മാക്കിന്റോഷിൽ ⌘-Shift-R ) അമർത്തുക
  • ഇന്റർനെറ്റ് എക്സ്പ്ലോറർ: Refresh ബട്ടൺ അമർത്തുമ്പോൾ Ctrl കീ അമർത്തിപിടിക്കുക. അല്ലെങ്കിൽ Ctrl-F5 അമർത്തുക
  • ഓപ്പറ: Menu → Settings എടുക്കുക (മാക്കിൽ Opera → Preferences) എന്നിട്ട് Privacy & security → Clear browsing data → Cached images and files ചെയ്യുക.
/**
 * Modifie Special:Search pour pouvoir utiliser différents moteurs de recherche,
 * disponibles dans une boîte déroulante.
 * Auteurs : Jakob Voss, Guillaume, importé depuis la Wiki allemande
 * <pre><nowiki>
 */


function externalSearchEngines() {
  if (typeof SpecialSearchEnhanced2Disabled != 'undefined') return;


  var mainNode = document.getElementById("powersearch");
  if (!mainNode) mainNode = document.getElementById("search");
  if (!mainNode) return;

  var beforeNode = document.getElementById("mw-search-top-table");
  if (!beforeNode) return;
  beforeNode = beforeNode.nextSibling;
  if (!beforeNode) return;
 
  var firstEngine = "mediawiki";
 
  var choices = document.createElement("div");
  choices.setAttribute("id","searchengineChoices");
  choices.style.textAlign = "center";
 
  var lsearchbox = document.getElementById("searchText");
  var initValue = lsearchbox.value;
 
  var space = "";

  for (var id in searchEngines) {
    var engine = searchEngines[id];
if(engine.ShortName)
   {
    if (space) choices.appendChild(space);
    space = document.createTextNode(" ");
 
    var attr = { 
      type: "radio", 
      name: "searchengineselect",
      value: id,
      onFocus: "changeSearchEngine(this.value)",
      id: "searchengineRadio-"+id
    };
 
    var html = "<input";
    for (var a in attr) html += " " + a + "='" + attr[a] + "'";
    html += " />";
    var span = document.createElement("span");
    span.innerHTML = html;
 
    choices.appendChild( span );
    var label
    if (engine.Template.indexOf('http') == 0) {
      label = document.createElement("a");
      label.href = engine.Template.replace("{searchTerms}", initValue).replace("{language}", "fr");
    } else {
      label = document.createElement("label");
    }
  
    label.appendChild( document.createTextNode( engine.ShortName ) );
    choices.appendChild( label );
  }
 }
  mainNode.insertBefore(choices, beforeNode);
 
  var input = document.createElement("input");
  input.id = "searchengineextraparam";
  input.type = "hidden";
 
  mainNode.insertBefore(input, beforeNode);

  changeSearchEngine(firstEngine, initValue);
}

function changeSearchEngine(selectedId, searchTerms) {

  var currentId = document.getElementById("searchengineChoices").currentChoice;
  if (selectedId == currentId) return;
 
  document.getElementById("searchengineChoices").currentChoice = selectedId;
  var radio = document.getElementById('searchengineRadio-'  + selectedId);
  radio.checked = "checked";
 
  var engine = searchEngines[selectedId];
  var p = engine.Template.indexOf('?');
  var params = engine.Template.substr(p+1);
 
  var form;
  if (document.forms["search"]) {
    form = document.forms["search"];
  } else {
    form = document.getElementById("powersearch");
  }
  form.setAttribute("action", engine.Template.substr(0,p));
 
  var l = ("" + params).split("&");
  for (var idx = 0;idx < l.length;idx++) {
    var p = l[idx].split("=");
    var pValue = p[1];
 
    if (pValue == "{language}") {
    } else if (pValue == "{searchTerms}") {
      var input;
      input = document.getElementById("searchText");
 
      input.name = p[0];
    } else {
      var input = document.getElementById("searchengineextraparam");
 
      input.name = p[0];
      input.value = pValue;
    }
  }
}

if (wgCanonicalSpecialPageName == "Search") {
var searchEngines = {
  mediawiki: {
    ShortName: "ആഭ്യന്തര അന്വേഷണം",
    Template: "/w/index.php?search={searchTerms}"
  },
  wikiwix: {
    ShortName: "വിക്കിവിക്സ്",
    Template: "http://ml.wikiwix.com/index.php?action={searchTerms}&lang={language}"
  },
  google: {
    ShortName: "ഗൂഗിൾ",
    Template: "http://www.google.com/search?as_sitesearch=ml.wikipedia.org&hl={language}&q={searchTerms}"
  },
  wlive: {
    ShortName: "വിൻഡോസ് ലൈവ്",
    Template: "http://search.live.com/results.aspx?q={searchTerms}&q1=site:http://ml.wikipedia.org"
  },
  yahoo: {
    ShortName: "യാഹൂ!",
    Template: "http://search.yahoo.com/search?p={searchTerms}&vs=ml.wikipedia.org"
  },
  exalead: {
    ShortName: "എക്സാലീഡ്",
    Template: "http://www.exalead.com/wikipedia/results?q={searchTerms}&language=ml"
  },
globalwpsearch: {
    ShortName: "ഗ്ലോബൽ ഡബ്ല്യൂപി",
    Template: "http://vs.aka-online.de/cgi-bin/globalwpsearch.pl?timeout=120&search={searchTerms}"
  }
};
addOnloadHook(externalSearchEngines);
}

/**തിരഞ്ഞെടുത്ത ലേഖനങ്ങളിലേയ്ക്ക്‌ ഇന്റര്‍ വിക്കി ലിങ്കുകള്‍ നല്‍കാന്‍**************
 *  തിരഞ്ഞെടുത്ത ലേഖനങ്ങളിലേയ്ക്ക്‌ ഇന്റര്‍ വിക്കി ലിങ്കുകള്‍ നല്‍കാനായി ഈ സ്ക്രിപ്റ്റ്‌ ഉപയോഗിയ്ക്കാം മറ്റു ഭാഷകളില്‍ എന്നു
 *  കാണുന്ന സെക്ഷനിലെ ബുള്ളറ്റുകള്‍ ഈ ഫങ്ക്ഷന്‍ മാറ്റിയെഴുതും. ആംഗലേയ വിക്കിയില്‍ നിന്നും കൊണ്ടുവന്നത്‌
 */
 function LinkFA() 
 {
     if ( document.getElementById( "p-lang" ) ) {
         var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
 
         for ( var i = 0; i < InterwikiLinks.length; i++ ) {
             if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
                 InterwikiLinks[i].className += " FA"
                 InterwikiLinks[i].title = "മറ്റൊരു ഭാഷയില്‍ ഈ ലേഖനം തിരഞ്ഞെടുക്കപ്പെട്ടതാണ്‌.";
             }
         }
     }
 }
 
 addOnloadHook( LinkFA );

/** Main Page layout fixes *********************************************************
 *
 *  Description:        Various layout fixes for the main page, including an
 *                      additional link to the complete list of languages available
 *                      and the renaming of the 'Article' to to 'Main Page'.
 *  Maintainers:        User:AzaToth, User:R. Koot
 */

function mainPageRenameNamespaceTab() {
    try {
        var Node = document.getElementById( 'ca-nstab-main' ).firstChild;
        if ( Node.textContent ) {      // Per DOM Level 3
            Node.textContent = 'പ്രധാന താള്‍';
        } else if ( Node.innerText ) { // IE doesn't handle .textContent
            Node.innerText = 'പ്രധാന താള്‍';
        } else {                       // Fallback
            Node.replaceChild( Node.firstChild, document.createTextNode( 'പ്രധാന താള്‍' ) ); 
        }
    } catch(e) {
        // bailing out!
    }
}

function mainPageAppendCompleteListLink() {
    try {
        var node = document.getElementById( "p-lang" )
                           .getElementsByTagName('div')[0]
                           .getElementsByTagName('ul')[0];

        var aNode = document.createElement( 'a' );
        var liNode = document.createElement( 'li' );

        aNode.appendChild( document.createTextNode( 'Complete list' ) );
        aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/List_of_Wikipedias ' );
        liNode.appendChild( aNode );
        liNode.className = 'interwiki-completelist';
        node.appendChild( liNode );
     } catch(e) {
       // lets just ignore what's happened
       return;
    }
}

if ( wgTitle == 'പ്രധാന താള്‍' && ( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) ) {
       addOnloadHook( mainPageRenameNamespaceTab );
}

if ( wgTitle == 'പ്രധാന താള്‍' && wgNamespaceNumber == 0 ) {
       addOnloadHook( mainPageAppendCompleteListLink );
}

/**<pre><nowiki>*/
/** Extra toolbar options ****************************************************** 
  *
  *  Description: UNDOCUMENTED
  *  Maintainers: [[User:MarkS]]?, [[User:Voice of All]], [[User:R. Koot]]
  */
 
 //This is a modified copy of a script by User:MarkS for extra features added by User:Voice of All.
 // This is based on the original code on Wikipedia:Tools/Editing tools
 // To disable this script, add <code>mwCustomEditButtons = [];<code> to [[Special:Mypage/monobook.js]]
 
 if (mwCustomEditButtons) {
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png",
     "speedTip": "Redirect",
     "tagOpen": "#REDIRECT [[",
     "tagClose": "]]",
     "sampleText": "Insert text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png",
     "speedTip": "Strike",
     "tagOpen": "<s>",
     "tagClose": "</s>",
     "sampleText": "Strike-through text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png",
     "speedTip": "Line break",
     "tagOpen": "<br />",
     "tagClose": "",
     "sampleText": ""};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png",
     "speedTip": "Superscript",
     "tagOpen": "<sup>",
     "tagClose": "</sup>",
     "sampleText": "Superscript text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png",
     "speedTip": "Subscript",
     "tagOpen": "<sub>",
     "tagClose": "</sub>",
     "sampleText": "Subscript text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png",
     "speedTip": "Small",
     "tagOpen": "<small>",
     "tagClose": "</small>",
     "sampleText": "Small Text"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png",
     "speedTip": "Insert hidden Comment",
     "tagOpen": "<!-- ",
     "tagClose": " -->",
     "sampleText": "Comment"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png",
     "speedTip": "Insert a picture gallery",
     "tagOpen": "\n<gallery>\n",
     "tagClose": "\n</gallery>",
     "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png",
     "speedTip": "Insert block of quoted text",
     "tagOpen": "<blockquote>\n",
     "tagClose": "\n</blockquote>",
     "sampleText": "Block quote"};
 
   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png",
     "speedTip": "Insert a table",
     "tagOpen": '{| class="wikitable"\n|-\n',
     "tagClose": "\n|}",
     "sampleText": "! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3"};

   mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/ml/2/20/Button_subst.png",
     "speedTip": "സബ്സ്റ്റിറ്റിയൂഷന്‍ (subst) ചേര്‍ക്കുക",
     "tagOpen": "{{ബദല്‍:",
     "tagClose": "}}",
     "sampleText": "സ്വാഗതം"};

  mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png",
     "speedTip": "റഫറന്‍‌സുകള്‍ നല്‍കാന്‍",
     "tagOpen": "<ref>\n",
     "tagClose": "\n</ref>",
     "sampleText": "References"};

  mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/e/ef/Button_cite_book.png",
     "speedTip": "പുസ്തകസ്രോതസ്സ്",
     "tagOpen": "{{cite book ",
     "tagClose": "\n| last= \n| first= \n| authorlink= \n| coauthors= \n| editor= \n| others= \n| title= \n| origdate= \n| origyear= \n| origmonth= \n| url= \n| format= \n| accessdate= \n| accessyear= \n| accessmonth= \n| edition= \n| series= \n| date= \n| year= \n| month= \n| publisher= \n| location= \n| language= \n| isbn= \n| oclc= \n| doi= \n| id= \n| pages= \n| chapter= \n| chapterurl= \n| quote= \n}}",
     "sampleText": ""};

  mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/2/2c/Button_cite_news.png",
     "speedTip": "വാര്‍ത്താസ്രോതസ്സ്",
     "tagOpen": "{{cite news ",
     "tagClose": "\n| first = \n| last = \n| authorlink = \n| author = \n| coauthors = \n| title = \n| url = \n| format = \n| work = \n| publisher = \n| pages = \n| page = \n| date = \n| accessdate = \n| language = \n}}",
     "sampleText": ""};

  mwCustomEditButtons[mwCustomEditButtons.length] = {
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/9/91/Button_cite_web.png",
     "speedTip": "വെബ്ബ്സ്രോതസ്സ്",
     "tagOpen": "{{cite web ",
     "tagClose": "\n| url = \n| title = \n| accessdate = \n| accessmonthday = \n| accessyear = \n| author = \n| last = \n| first = \n| authorlink = \n| coauthors = \n| date = \n| year = \n| month = \n| format = \n| work = \n| publisher = \n| pages = \n| language = \n| archiveurl = \n| archivedate = \n| quote = \n}}",
     "sampleText": ""};
 }
/*</nowiki></pre>*/

/*<pre><nowiki>
ടൂള്‍ ബാര്‍ ബട്ടണുകള്‍ അടുക്കിപ്പെറുക്കി വയ്ക്കാനുള്ള സ്ക്രിപ്റ്റ്‌
Maintainer : [[User:Tux the penguin]]
*/
function lija_rearrange()
{
var def,ext;
if(mwEditButtons)
def=mwEditButtons;

if(mwCustomEditButtons)
ext=mwCustomEditButtons;

if(def!=null && ext!=null)
{
var defc=def.slice();
 var extc=ext.slice();
try
  {
def[2]=extc[1];
def[3]=defc[4];
def[4]=extc[8];
def[5]=extc[5];
def[6]=extc[9];
def[7]=extc[2];
def[8]=defc[10];
def[9]=extc[6];
def[10]=defc[8];
def[def.length]={
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png",
     "speedTip": "എണ്ണമിട്ട പട്ടിക",
     "tagOpen": "\n#",
     "tagClose": "\n#രണ്ടാമത്തെ ഇനം\n#മൂന്നാമത്തെ ഇനം",
     "sampleText": "ഒന്നാമത്തെ ഇനം"};
def[def.length]={
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_liste.png",
     "speedTip": "എണ്ണമിടാത്ത പട്ടിക",
     "tagOpen": "\n*",
     "tagClose": "\n*രണ്ടാമത്തെ ഇനം\n*മൂന്നാമത്തെ ഇനം",
     "sampleText": "ഒന്നാമത്തെ ഇനം"};
def[def.length]={
     "imageFile": "http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png",
     "speedTip": "സൂചിക ചേര്‍ക്കുക",
     "tagOpen": "[[Category:",
     "tagClose": "]]",
     "sampleText": "ഉള്ളടക്കം"};
 

ext[0]=defc[2];
ext[1]=defc[3];
ext[2]=defc[5];
ext[3]=defc[6];
ext[4]=extc[7];
ext[5]=defc[7];
ext[6]=extc[3];
ext[7]=extc[4];
ext[8]=extc[0];
ext[9]=extc[10];
ext[10]=extc[11];
ext[11]=defc[9];
}
catch(ex)
{
//എറര്‍ ഉണ്ടായാല്‍..... സഹിക്കുക. അല്ലാണ്ടെന്തു ചെയ്യാന്‍ ?
}
}


}

addOnloadHook(lija_rearrange);
//****************************************************************************************************************
//ടൂള്‍ ബാര്‍ സ്ക്രിപ്റ്റ്‌ ഇവിടെ അവസാനിയ്ക്കുന്നു. 
//****************************************************************************************************************
/*</nowiki></pre>*/


/*
<nowiki><pre>

    This script is a modified version of Alex benenson's cyrillic translitarator and this version was created by [[User:Peringz|Peringz]]
*/

var consonants = {"ക":"ക","ഖ":"ഖ","ഗ":"ഗ","ഘ":"ഘ","ങ":"ങ","ച":"ച","ഛ":"ഛ","ജ":"ജ","ഝ":"ഝ","ഞ":"ഞ","ട":"ട","ഠ":"ഠ","ഡ":"ഡ","ഢ":"ഢ","ണ":"ണ","ത":"ത","ഥ":"ഥ","ദ":"ദ","ധ":"ധ","ന":"ന","പ":"പ","ഫ":"ഫ","ബ":"ബ","ഭ":"ഭ","മ":"മ","യ":"യ","ര":"ര","ല":"ല","വ":"വ","ശ":"ശ","ഷ":"ഷ","സ":"സ","ഹ":"ഹ","ള":"ള","ഴ":"ഴ","റ":"റ","റ്റ":"റ്റ"};
var chillaksharam = {"ണ്‍":"ണ","ന്‍":"ന","ം":"മ","ര്‍":"ര","ല്‍":"ല","ള്‍":"ള","്\\u200D":""};

var vowels = '"്a":"","്e":"െ","്i":"ി","്o":"ൊ","്u":"ു","്A":"ാ","്E":"േ","്I":"ീ","്O":"ോ","്U":"ൂ","്Y":"ൈ","െe":"ീ","ൊo":"ൂ","ിi":"ീ","ിe":"ീ","ുu":"ൂ","ുo":"ൂ","്r":"്ര്",';
var roman = '"k":"ക്","ക്h":"ഖ്","g":"ഗ്","ഗ്h":"ഘ്","ന്‍g":"ങ്","c":"ക്\\u200D","ക്\\u200Dh":"ച്","ച്h":"ഛ്","j":"ജ്","ജ്h":"ഝ്","ന്‍j":"ഞ്","ന്‍h":"ഞ്","T":"ട്","ട്h":"ഠ്","D":"ഡ്","ഡ്h":"ഢ്","റ്റ്h":"ത്","ത്h":"ഥ്","d":"ദ്","ദ്h":"ധ്","p":"പ്","പ്h":"ഫ്","f":"ഫ്","b":"ബ്","ബ്h":"ഭ്","y":"യ്","v":"വ്","w":"വ്","z":"ശ്","S":"ശ്","സ്h":"ഷ്","s":"സ്","h":"ഹ്","ശ്h":"ഴ്","x":"ക്ഷ്","R":"റ്","t":"റ്റ്",';
var chill = '"N":"ണ്‍","n":"ന്‍","m":"ം","r":"ര്‍","l":"ല്‍","L":"ള്‍",';
var swaram = '"a":"അ","അa":"ആ","A":"ആ","e":"എ","E":"ഏ","എe":"ഈ","i":"ഇ","ഇi":"ഈ","ഇe":"ഈ","അi":"ഐ","I":"ഐ","o":"ഒ","ഒo":"ഊ","O":"ഓ","അu":"ഔ","ഒu":"ഔ","u":"ഉ","ഉu":"ഊ","U":"ഊ","H":"ഃ","റ്h":"ഋ","ര്‍^":"ഋ","ഋ^":"ൠ","ല്‍^":"ഌ","ഌ^":"ൡ",';
//var numerals = '"1":"൧","2":"൨","3":"൩","4":"൪","5":"൫","6":"൬","7":"൭","8":"൮","9":"൯","0":"൦",';
var conjuncts = '"ന്‍t":"ന്റ്","ന്റ്h":"ന്ത്","ന്‍k":"ങ്ക്","ന്‍n":"ന്ന്","ണ്‍N":"ണ്ണ്","ള്‍L":"ള്ള്","ല്‍l":"ല്ല്","ംm":"മ്മ്","ന്‍m":"ന്മ്","ന്ന്g":"ങ്ങ്","ന്‍d":"ന്ദ്","ണ്‍m":"ണ്മ്","ല്‍p":"ല്പ്","ംp":"മ്പ്","റ്റ്t":"ട്ട്","ന്‍T":"ണ്ട്","ണ്‍T":"ണ്ട്","്ര്^":"ൃ","ന്‍c":"ന്‍\\u200D","ന്‍\\u200Dh":"ഞ്ച്","ണ്‍D":"ണ്ഡ്",';
var others = '"്L":"്ല്","~":"്\\u200C","്~":"\\u200C", "\\u200C~":"\\u200C", "\\u200D\\u200C":"\\u200D", "\\u200C_":"__", "___":"___","~":"്","ക്\\u200Dc":"ക്ക്\\u200D","ക്ക്\\u200Dh":"ച്ച്","q":"ക്യൂ",';
var caps = '"B":"ബ്ബ്","C":"ക്ക്\\u200D","F":"ഫ്","G":"ഗ്ഗ്","J":"ജ്ജ്","K":"ക്ക്","M":"മ്മ്","P":"പ്പ്","Q":"ക്യൂ","V":"വ്വ്","W":"വ്വ്","X":"ക്ഷ്","Y":"യ്യ്","Z":"ശ്ശ്",';
var ZWNJ = '"_":"\\u200C"';

// for compatibility with bookmarklets
function cyr_translit(src) {
    return to_cyrillic(src);
}

var conversionHash = undefined;
var maxcyrlength = 0;

function getConversionHash() {
    if (conversionHash == undefined) {
        // TODO
        var opr = "{" + vowels + roman + chill + swaram +  conjuncts + caps + others;
        for (var consonant in consonants) {
	        opr += '"' + consonant + 'a":"' + consonant + 'ാ",';
	        opr += '"' + consonant + 'e":"' + consonant + 'േ",';
	        opr += '"' + consonant + 'i":"' + consonant + 'ൈ",';
	        opr += '"' + consonant + 'o":"' + consonant + 'ോ",';
	        opr += '"' + consonant + 'u":"' + consonant + 'ൗ",';
        }
		
        for (var chk in chillaksharam) {
            opr += '"' + chk + 'a":"' + chillaksharam[chk] + '",';
            opr += '"' + chk + 'e":"' + chillaksharam[chk] + 'െ",';
            opr += '"' + chk + 'i":"' + chillaksharam[chk] + 'ി",';
            opr += '"' + chk + 'o":"' + chillaksharam[chk] + 'ൊ",';
            opr += '"' + chk + 'u":"' + chillaksharam[chk] + 'ു",';
            opr += '"' + chk + 'A":"' + chillaksharam[chk] + 'ാ",';
            opr += '"' + chk + 'E":"' + chillaksharam[chk] + 'േ",';
            opr += '"' + chk + 'I":"' + chillaksharam[chk] + 'ീ",';
            opr += '"' + chk + 'O":"' + chillaksharam[chk] + 'ോ",';
            opr += '"' + chk + 'U":"' + chillaksharam[chk] + 'ൂ",';
            opr += '"' + chk + 'Y":"' + chillaksharam[chk] + 'ൈ",';
            opr += '"' + chk + 'r":"' + chillaksharam[chk] + '്ര്",';
            opr += '"' + chk + 'y":"' + chillaksharam[chk] + '്യ്",';
            opr += '"' + chk + 'v":"' + chillaksharam[chk] + '്വ്",';
            opr += '"' + chk + 'w":"' + chillaksharam[chk] + '്വ്",';
            opr += '"' + chk + '~":"' + chillaksharam[chk] + '്\\u200C",';
        }
		
        opr += ZWNJ + "}";
        // var tb = document.getElementById('wpTextbox1');
        // tb.value = opr;
        conversionHash = eval("("+opr+")");
        maxcyrlength=6;
    }

    return conversionHash;
}

function to_cyrillic(src, output, chunks) {
    if (src == undefined || src == "" || src == null)
        return src;
    if (output == undefined)
        output = new String();

    var hash = getConversionHash();
	
    var location = 0;
	
    while (location < src.length) {
        var len = Math.min(maxcyrlength, src.length - location);
        var arr = undefined;
        var sub;
        while (len > 0) {
	        sub = src.substr(location, len);
	        arr = hash[sub];
	        if (arr != undefined) 
		        break;
	        else 
		        len--;
        }
		
        // need this for translit on the fly
        if (chunks != undefined)
	        chunks[chunks.length] = sub;
			
        if (arr == undefined) {
	        output += sub;
	        location ++;
        }
        else {

	        // case analysis
	        var newChar = arr;
			
	        if (sub.toLowerCase() == sub.toUpperCase() && arr.length > 1 && arr[1] && (newChar.toUpperCase() != newChar.toLowerCase())) {
			
		        // need translit hash to determine if previous character (and possibly the one before it) 
		        // were converted and are in upper case
				
		        // set prevDud to true previous is not a translated character or simply a blank
		        // set prevCap to true if previous was translated and was upper case

		        var prevCh = output.length == 0 ? null : output.substr(output.length - 1, 1);
		        var prevDud = !prevCh || !getTranslitString(prevCh);
		        var prevCap = (!prevDud && prevCh == prevCh.toUpperCase());

		        // sub is caseless but result isn't. case will depend on lookbehind and lookahead
		        if (prevDud || !prevCap) {
			        output += newChar.toLowerCase();
			        prevCap = false;
		        }
		        else {
			        var next = " ";
			        if (location + len < src.length)
				        next = src.substr(location + len, 1);

			        if (next != next.toUpperCase() && next == next.toLowerCase() ) {
				        //next is lowercase (and not caseless)
				        output += newChar.toLowerCase();
			        }
			        else if (next == next.toUpperCase() && next != next.toLowerCase() ) {
				        // next is uppercase (and not caseless)
				        output += newChar.toUpperCase();
			        }
			        else {
				        // next is caseless. output case determined by the case of output[length - 2]
				        var pprevCh = output.length == 1 ? null : output.substr(output.length - 2, 1);
				        var pprevDud = !pprevCh || !getTranslitString(pprevCh);
				        if (!pprevDud && (pprevCh == pprevCh.toUpperCase())) {
					        //pre-prev is in upper case. output is also uppercase
					        output += newChar.toUpperCase();
				        }
				        else {
				            output += newChar.toLowerCase();
				        }
						
			        }
		        }
					
	        }
	        else if ((sub.toLowerCase() == sub.toUpperCase()) && (arr.length < 2 || !arr[1])) {
				
		        // literal treatment of newChar
		        output += newChar;

	        }
	        else if (sub != sub.toLowerCase()) {
			
		        // sub not all-lowercase
		        output += newChar.toUpperCase();
	        }
	        else {
					
					
					
		        // sub is lowercase
	            output += newChar.toLowerCase();
	        }
	        location += len;
        }
    }
	
    return output;
}



function convertIt(src,converter){
 var resultbuffer=""; 
    for(var i=0;i<src.length;i++){
    resultbuffer=converter(resultbuffer+src[i]);
    }
        return converter(resultbuffer);

}



var translitHash = undefined;

function initTranslit() {
    if (translitHash == undefined) {
        translitHash = new Array();

        for (var i = 0; i < conversionHash.length; i++) {
	        var ch = conversionHash[i][1];
	        // if the translit string is not caseless, convert cyr string to upper case
	        // otherwise maintain its case
	        if (conversionHash[i][0].toUpperCase() != conversionHash[i][0].toLowerCase())
		        ch = ch.toUpperCase();
				
	        if (translitHash[ch] == undefined)
		        translitHash[ch] = conversionHash[i][0];
        }
    }
}




//-- translit on-the-fly -- 

function replaceValue(node, value, stepback) {
    if (stepback == undefined)
        stepback = 0;
		
    if (isExplorer()) {
        var range = document.selection.createRange();
        range.moveStart("character", -stepback);
        range.text = value;
        range.collapse(false);
        range.select();
    }
    else {
        var scrollTop = node.scrollTop;
        var cursorLoc =  node.selectionStart;
        node.value = node.value.substring(0, node.selectionStart - stepback) + value + 
                node.value.substring(node.selectionEnd, node.value.length);
        node.scrollTop = scrollTop;
        node.selectionStart = cursorLoc + value.length - stepback;
        node.selectionEnd = cursorLoc + value.length - stepback;
    }
}


// compare positions
function positionIsEqual(other) {
    if (isExplorer())
        return this.position.isEqual(other.position);
    else
        return this.position == other.position;
  
}

function Position(node) {
  if (node.selectionStart != undefined)
    this.position = node.selectionStart;
  else if (document.selection && document.selection.createRange())
    this.position = document.selection.createRange();
    
  this.isEqual = positionIsEqual;
}

function resetState() {
    this.position = new Position(this.node);
    this.transBuffer = "";
    this.cyrBuffer = "";
}

function StateObject(node) {
    this.node = node;
    this.reset = resetState;
    this.cyrBuffer = "";
    this.transBuffer = "";
    this.position = new Position(node);
}


var stateHash = new Array();

function isExplorer() {
  return (document.selection != undefined && document.selection.createRange().isEqual != undefined);
}

function pressedKey(event) {
  if (isExplorer())
    return event.keyCode;
  else
    return event.which;
}

function transliterateKey(event) {
     /*
    if ((event.keyCode == 255 && event.charCode > 0) || event.keyCode == 8) {
        return;
    }
    */
    
    if (event == undefined)
        event = window.event;
    
    var node = null;
    if (event.target) {
        node = event.target;
        }
    else if (event.srcElement) {
        node = event.srcElement;
        }
		
		
    // initialize state
    var state = stateHash[node];
    if (state == null) {
        state = new StateObject(node);
        stateHash[node] = state;
    }
    if ( (pressedKey(event) > 20) && !event.ctrlKey && !event.altKey && !event.metaKey) {

        var c = String.fromCharCode(pressedKey(event));

        // process input
        var result = process_translit(state, c);
        // finish up
        if (c != result.out || result.replace != 0) {
          if (isExplorer())
	        event.returnValue = false;
          else
            event.preventDefault();
		  
          replaceValue(node, result.out, result.replace);
		  
          state.position = new Position(node);

        }
    }
	
}

function TranslitResult() {
    this.out = "";
    this.replace = 0;
}

function process_translit(state, c) {
    // reset state if position changed
    if (!state.position.isEqual(new Position(state.node)))
        state.reset();
		
    var result = new TranslitResult();
	
    // initial backbuffer. Add to it as characters are converted
    var backbuffer = getBackBuffer(state.node, state.cyrBuffer.length, 2);
    var chunks = new Array();
	
    state.transBuffer = state.transBuffer+ c

    var str = to_cyrillic(state.cyrBuffer+c, backbuffer, chunks);

    // remove backbuffer from output
    str = str.substr(backbuffer.length);
    result.out = str; 
    /* str is now left alone - it has the output matching contents of chunks and 
       will be used to reinitialize backbuffers, along with chunks and state.transBuffer
    */
	
    // get the difference between state.cyrBuffer and output
    for (var i = 0; i < Math.min(state.cyrBuffer.length, result.out.length); i++) {
        if (state.cyrBuffer.substr(i, 1) != result.out.substr(i, 1)) {
	        result.replace = state.cyrBuffer.length - i;
	        result.out = result.out.substr(i);
	        break;
        }
    }
    if (result.replace == 0) {
               if(result.out.length<state.cyrBuffer.length)
		        result.replace=state.cyrBuffer.length- result.out.length;
        result.out = result.out.substr(Math.min(state.cyrBuffer.length, result.out.length));
                 
                       //    result.out+="\u0008"
                         
    }
	
    // update state: backbuffer, bufferArray
    if (chunks.length > 0 && chunks[chunks.length - 1] == result.out.substr(result.out.length - 1)) {
        // no convertion took place, reset state
        state.reset();
    }
    else {
        while (state.transBuffer.length > maxcyrlength) {
	        state.transBuffer = state.transBuffer.substr(chunks[0].length);
	        chunks.shift();
	        str = str.substr(1);
        }
        state.cyrBuffer = str;
    }
    return result;
}

function getBackBuffer(node, offset, count) {
		
    if (isExplorer()) { //.tagName.toUpperCase() == "EDITOR") {
	
        var range = document.selection.createRange();
        range.moveStart("character", -offset);
        var result = range.text.substr(-count);
        if (!result)
	        result = "";
			
        return result;

    } else {
        return node.value.substring(0, node.selectionStart - offset).substr(-count);
    }
}

// need this for bookmarklets
function getSelectedNode() {
  if (document.activeElement)
    return document.activeElement;
  else
    if (window.getSelection && window.getSelection() && window.getSelection().rangeCount > 0) {
        var range = window.getSelection().getRangeAt(0);
        if (range.startContainer && range.startContainer.childNodes && range.startContainer.childNodes.length > range.startOffset)
	        return range.startContainer.childNodes[range.startOffset]
    }
  return null;
}

function toggleCyrMode() {
    var node = getSelectedNode();
    if (node) {
        if (stateHash[node]) {
	        if (removeKeyEventListener(node))
		        delete stateHash[node];
        }
        else {
	        if (addKeyEventListener(node))
		        stateHash[node] = new StateObject(node);
        }
    }
}

function addKeyEventListener(node) {
    if (node.addEventListener)
        node.addEventListener("keypress", transliterateKey, false);
    else if (node.attachEvent)
        node.attachEvent("onkeypress", transliterateKey);
    else return false;
    return true;
}
function removeKeyEventListener(node) {
    if (node.removeEventListener)
        node.removeEventListener("keypress", transliterateKey, false);
    else if (node.detachEvent)
        node.detachEvent("onkeypress", transliterateKey);
    else return false;
    return true;
}

function getSelectedText() {
    if (isExplorer()) {
        return document.selection.createRange().text;
    }
    else {
        var node = getSelectedNode();
        if (node && node.value && node.selectionStart != undefined && node.selectionEnd != undefined)
	        return node.value.substring(node.selectionStart, node.selectionEnd);
    }
    return "";
}


	/* calling functions  */

        function addLoadEvent(func) {
            
            if (window.addEventListener) 
                window.addEventListener("load", func, false);
            else if (window.attachEvent) 
                window.attachEvent("onload", func);
        }

        function addTranslit(editForm,textBox) {
            checkrt(editForm); // check for translit support

            if (textBox.addEventListener) 
                textBox.addEventListener("keypress", processKeys, false);
            else if (textBox.attachEvent) 
                textBox.attachEvent("onkeypress", processKeys);
        }

        function addTextEvent() {

			///////
			if(lija_getCookie('mlWikiTranslit')!=null && lija_getCookie('mlWikiTranslit')!="")  
              realTime=(lija_getCookie('mlWikiTranslit')=="true")?true:false;
            //////

            var editForm =document.getElementById('editform');
            if(editForm != null) {
                var textBox=document.getElementById('wpTextbox1');
                var textSummary = document.getElementById('wpSummary');
                addTranslit(editForm,textBox);
                addCheckbox(editForm,textBox );
                if(textSummary) { addTranslit(editForm,textSummary); }
            }

            // add transliteration feature to search form also
            var searchForm = document.getElementById('searchform');
            if( searchForm != null ) {
				try {
					var searchBox = document.getElementById('searchInput');
					 // add IME checkbox control to searchForm
					if (searchBox != null || searchForm != null) {
						var element = document.createElement("input");
						element.setAttribute("type","checkbox");
						element.setAttribute("id","sbrealtime");
						if (element.addEventListener) 
							element.addEventListener("click", rtClick, false);
						else if (element.attachEvent) 
							element.attachEvent("onclick", rtClick);
						
						// var labelcheckBox = document.createTextNode('മലയാളത്തിലെഴുതുക');					
						var chkSpan = document.createElement("span");
						chkSpan.setAttribute("id","spnRealtime");
						var searchBody = document.getElementById('searchBody');
						searchBody.appendChild(element);
						searchBody.appendChild(chkSpan);
						
						// searchForm.insertBefore(element,searchBox);
						document.getElementById("sbrealtime").checked = realTime;
						document.getElementById('spnRealtime').innerHTML = '<a href="http://ml.wikipedia.org/wiki/സഹായം:ടൈപ്പിംഗ്‌" title="Switches keyboard between Malayalam and English">മലയാളത്തിലെഴുതുക</a>';
						// searchForm.insertBefore(chkSpan,searchBox);
						// var p = document.createElement("p");
						// p.setAttribute("style","width:100%;height:1px;");
						// searchForm.insertBefore(p,searchBox);
					}
				 }
				 catch(ex)
				 {
				  //എററിനെ ഓടിക്കുക.
				 }
				 
				 if(searchBox) { addTranslit(searchForm,searchBox); }
			}             
			
            //മലയാളം ടൈപ്പിങ് താളുകളിൽ സാധ്യമാക്കാനുള്ള സ്ക്രിപ്റ്റുകൾ  | scripts to avail Malayalam transliteration
            //തിരയല്‍ താള്‍ | Search page

            var simpleSearchForm = document.getElementById('search');
            if( simpleSearchForm != null) { 
               var simpleSearchBox = document.getElementById('searchText');
               if( simpleSearchBox ) { addTranslit(simpleSearchForm, simpleSearchBox );}
            } 

            var powerSearchForm = document.getElementById('powersearch');
            if( powerSearchForm != null) { 
               var powerSearchBox = document.getElementById('powerSearchText');
               if( powerSearchBox ) { addTranslit(powerSearchForm, powerSearchBox );}
            } 

            // തലക്കെട്ട് മാറ്റല്‍ താള്‍. | Move page

            var movePageForm = document.getElementById('movepage');
            if( movePageForm != null ) {
                var newTitleBox = document.getElementById('wpNewTitle');
                if( newTitleBox ) {addTranslit(movePageForm, newTitleBox);}
                var reasonBox = document.getElementById('wpReason');
                if( reasonBox ) {addTranslit(movePageForm, reasonBox ); }
                          
            }

               //വിക്കിപീഡിയ:കളരി
                       var kalariForm = document.getElementById('createbox');
            if( kalariForm != null ) {

                var kalariText = document.getElementsByName('title')[0];
                if( kalariText ) {addTranslit(kalariForm, kalariText);}
                }

             //അപ്‌ലോഡ് താള്‍
            //********************
            var upForm=document.getElementById('mw-upload-form');
            if(upForm)//ഈ ഫോം ഇല്ലെങ്കില്‍ പിന്നെ മുന്നോട്ട് പോകണ്ട.
            {
              var upName=document.getElementById('wpDestFile');
              var upComment=document.getElementById('wpUploadDescription');
              if(upName) addTranslit(upForm,upName);
              if(upComment) addTranslit(upForm,upComment);
            }
          //**************      
    }
        
    function addCheckbox(editform,textBox) {


            if(editform==null||textBox==null) return;

                   try
                    {
            var element = document.createElement("input");
            element.setAttribute("type","checkbox");
            element.setAttribute("id","realtime");

            if (element.addEventListener) 
                element.addEventListener("click", rtClick, false);
            else if (element.attachEvent) 
                element.attachEvent("onclick", rtClick);

            var labelcheckBox = document.createTextNode(' മലയാളം എഴുതുവാന്‍ ഈ ഉപാധി സ്വീകരിക്കുക - Use Ctrl + M to Toggle.');
            editform.insertBefore(element,textBox);
            document.getElementById("realtime").checked = realTime;
            editform.insertBefore(labelcheckBox,textBox);
            var p = document.createElement("p");
            p.setAttribute("style","width:100%;height:1px;");
            editform.insertBefore(p,textBox);
             }
             catch(ex)
             {
              //എററിനെ ഓടിക്കുക.
             }
        }

        var imeStatus = false;
        
        function processKeys(event) {
            if (rtsupported) {
                e = event || window.event;

                var myKeyCode = 0;
                var myShiftKey = false;
                if( document.all ) { //IE
                    myKeycode = e.keyCode;
                    myShiftKey = e.shiftKey;
                } else if ( document.getElementById || document.layers ) {
                    myKeyCode = e.which;
                    myShiftKey = (myKeyCode == 16)?true:false;
                }
                

                if ((e.keyCode == 13 && e.ctrlKey) || (e.which == 109 && e.ctrlKey))
	            {
		            realTime = !realTime;
					lija_setCookie('mlWikiTranslit',realTime,1);//save in cookie
					var chk = document.getElementById('realtime');
					var chkSb = document.getElementById('sbrealtime');
					if (chk) { chk.checked = realTime; }
					if (chkSb) { chkSb.checked = realTime; }
	                return false;
	            }
	            
	            else if ((e.keyCode >= 3328 && e.keyCode <= 3455) || (e.which >= 3328 && e.which <= 3455)) {
	                var chk = document.getElementById('realtime');
					var spanSb = document.getElementById('spnRealtime');
					var chkSb = document.getElementById('sbrealtime');
	                if (imeStatus == false || realTime) {
	                    realTime = false;
					    if (chk) { chk.checked = realTime; chkSb.checked = realTime; spanSb.innerText = chkSb.checked }
					    imeStatus = true;
					   //alert('A Malayalam input tool was detected. Disabling in-built transliteration. To turn it On again use Ctrl+M');
						window.status='A Malayalam input tool was detected. Disabling in-built transliteration. To turn it On again use Ctrl+M';//FF failure
					    // return false;
					}
	            }
                            
                else if (realTime) {
                    imeStatus = false;
                    transliterateKey(event); // call transliteration function
                }
            } 
        }
        var realTime=false;

        function rtClick(event) {
                       realTime = !realTime;
                       lija_setCookie('mlWikiTranslit',realTime,1);//save in cookie
        }

        var rtsupported = false;
        var error; 

        function checkrt(editform) {
            try {
        	
            /*
            var nav = navigator.userAgent.toUpperCase();
            rtsupported = (nav.indexOf("GECKO") >= 0 || nav.indexOf("OPERA") >= 0 || nav.indexOf("SAFARI") >= 0);
            */
        	
                rtsupported = (document.selection != undefined)
        		
                if (!rtsupported) {
	                var element = document.createElement("TEXTAREA");
	                editform.appendChild(element);
        			
	                if (element.selectionStart != undefined)
		                rtsupported = true;
		                editform.removeChild(element);
                }
        		
            } catch (error) {}
        }

		//************************************
		// ട്രാന്‍സ്‌ലിറ്ററേഷന്‍ സ്ക്രിപ്റ്റില്‍ കൂക്കി സപ്പോര്‍ട്ട് ചേര്‍ക്കാനുള്ള ശ്രമം

		function lija_getCookie(cookieName)
		{
		if (document.cookie.length>0)
		{ 
		cookieStart=document.cookie.indexOf(cookieName + "=");
		if (cookieStart!=-1)
		{ 
		cookieStart=cookieStart + cookieName.length+1;
		cookieEnd=document.cookie.indexOf(";",cookieStart);
		if (cookieEnd==-1) cookieEnd=document.cookie.length;
		return unescape(document.cookie.substring(cookieStart,cookieEnd));
		} 
		}
		return "";
		}

		function lija_setCookie(cookieName,value,expiredays)
		{
		var exdate=new Date();
		exdate.setDate(exdate.getDate()+expiredays);
		document.cookie=cookieName+ "=" +escape(value)+"; path=/"+
		((expiredays==null) ? "" : "; expires="+exdate.toGMTString());
		}

		//************************************

// add this line to your monobook.js to disable in-built transliteration - thanks to Sadik Khalid for this quick tip
 // var userIMEEnabled = false;   // paste this line to user monobook.js and remove // from the begining of this line

// check for user preference and load in-built transliteration tool
  if(typeof(window.userIMEEnabled) == 'undefined') { addLoadEvent(addTextEvent); }
 
/*
</pre></nowiki>
*/

/*
==addLoadEvent==
<pre> */
function addLoadEvent(func) 
{
  addOnloadHook( func );
}

/* </pre> */


/*
== Dynamic Navigation Bars (experimental) ==
<pre> */
 // BEGIN Dynamic Navigation Bars (experimental)
 // FIXME: currently only works for one nav bar on a page at a time
 // ===============================================
 
// set up the words in your language
 var NavigationBarHide = '[മറയ്ക്കുക]';
 var NavigationBarShow = '[പ്രദര്‍ശിപ്പിക്കുക]';
 
 // set up max count of Navigation Bars on page,
 // if there are more, all will be hidden
 // NavigationBarShowDefault = 0; // all bars will be hidden
 // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
 var NavigationBarShowDefault = 1;
 //Honor the User Preferences
 if ( getCookie('WikipediaPreferencesShowNav') != 'true' ) {
         NavigationBarShowDefault = 0;
    } else {
      if ( wgNamespaceNumber == 0 ) NavigationBarShowDefault = 999 ;
    }
/* </pre> */


/*
=== toggleNavigationBar ===*
<pre> */
 // shows and hides content and picture (if available) of navigation bars
 // Parameters:
 //     indexNavigationBar: the index of navigation bar to be toggled
 function toggleNavigationBar(indexNavigationBar)
 {
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
    if (!NavFrame || !NavToggle) {
        return false;
    }
 
    // if shown now
    if (NavToggle.firstChild.data == NavigationBarHide) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;
 
    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'block';
            }
        }
    NavToggle.firstChild.data = NavigationBarHide;
    }
 }
 /* </pre> */


/*
=== createNavigationBarToggleButton ===
<pre> */
 // adds show/hide-button to navigation bars
 function createNavigationBarToggleButton()
 {
    var indexNavigationBar = 0;
    // iterate over all < div >-elements
    for(
            var i=0; 
            NavFrame = document.getElementsByTagName("div")[i]; 
            i++
        ) {
        // if found a navigation bar
        if (NavFrame.className == "NavFrame") {
 
            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
            
            var NavToggleText = document.createTextNode(NavigationBarHide);
            NavToggle.appendChild(NavToggleText);
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            for(
              var j=0; 
              j < NavFrame.childNodes.length; 
              j++
            ) {
              if (NavFrame.childNodes[j].className == "NavHead") {
                NavFrame.childNodes[j].appendChild(NavToggle);
              }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
    // if more Navigation Bars found than Default: hide all
    if (NavigationBarShowDefault < indexNavigationBar) {
        for(
                var i=1; 
                i<=indexNavigationBar; 
                i++
        ) {
            toggleNavigationBar(i);
        }
    }
 
 }
 
 addLoadEvent(createNavigationBarToggleButton);
 
 // END Dynamic Navigation Bars
 // ======================
/* </pre> */


/*
==Cookies==
<pre> */
//Cookie helpers
//===========
function setCookie(cookieName, cookieValue) {
 var today = new Date();
 var expire = new Date();
 var nDays = 30;
 expire.setTime( today.getTime() + (3600000 * 24 * nDays) );
 document.cookie = cookieName + "=" + escape(cookieValue)
                 + ";path=/w"
                 + ";expires="+expire.toGMTString();
 document.cookie = cookieName + "=" + escape(cookieValue)
                 + ";path=/wiki"
                 + ";expires="+expire.toGMTString();
}

function getCookie(cookieName) {
  var start = document.cookie.indexOf( cookieName + "=" );
  if ( start == -1 ) return "";
  var len = start + cookieName.length + 1;
  if ( ( !start ) &&
    ( cookieName != document.cookie.substring( 0, cookieName.length ) ) )
      {
        return "";
      }
  var end = document.cookie.indexOf( ";", len );
  if ( end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring( len, end ) );
}

function deleteCookie(cookieName) {
  if ( getCookie(cookieName) ) {
    document.cookie = cookieName + "=" + ";path=/w" +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    document.cookie = cookieName + "=" + ";path=/wiki" +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
  }
}
/* </pre> */


/*
== Interproject links ==
<pre> */
function Projectlinks() {
        var elements = new Array();
        var spans = document.getElementsByTagName('span');
        
        // filter for projectlinks
        for (var i=0, j=0; i<spans.length; i++) {
                if (spans[i].className == 'interProject') {
                        elements[j] = spans[i].getElementsByTagName('a')[0];
                        j++;
                }
        }
        
        
        if (j) {
                // create navbox
                var plheader = document.createElement('h5');
                plheader.appendChild(document.createTextNode('In other projects'));
                var plbox = document.createElement('div');
                plbox.setAttribute('class','pBody');
                plbox.setAttribute('style','margin-top:0.7em;');
                var pllist = document.createElement('ul');

                // append
                for (var i=0; i<elements.length; i++) {
                        var plitem = document.createElement('li');
                        plitem.appendChild(elements[i]);
                        pllist.appendChild(plitem);
                }
                plbox.appendChild(plheader);
                plbox.appendChild(pllist);
                document.getElementById("p-tb").appendChild(plbox);
        }
}

addLoadEvent(Projectlinks);
/* </pre> */


 /*
==addCharSubsetMenu==
<pre> */

/* add menu for selecting subsets of secial characters  */
/***** must match MediaWiki:Edittools *****/
function addCharSubsetMenu() {
  var edittools = document.getElementById('editpage-specialchars');

  if (edittools) {
    var menu = "<select id=\"charSubsetControl\" style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">";
    menu += "<option>ഫലകങ്ങള്‍</option>";
    menu += "<option>വിക്കിവിന്യാസങ്ങള്‍</option>";
    menu += "<option>അനുമതിപത്രങ്ങള്‍</option>";
    menu += "<option>മലയാളം</option>";
    menu += "<option>കൊറിയന്‍</option>";
    menu += "<option>ലത്തീന്‍</option>";
    menu += "<option>ഐ.പി.എ.</option>";
    menu += "<option>പലവക</option>";
    menu += "<option>അറബി</option>";
    menu += "<option>ദേവനാഗരി</option>";
    menu += "<option>ഹിബ്രു</option>";
    menu += "<option>പഴയ ഇംഗ്ലീഷ്</option>";
    menu += "</select>";
    edittools.innerHTML = menu + edittools.innerHTML;

    /* default subset from cookie */
    var s = parseInt( getCookie('edittoolscharsubset') );
    if ( isNaN(s) ) s = 0;

    /* update dropdown control to value of cookie */
    document.getElementById('charSubsetControl').selectedIndex = s; 

    /* display the subset indicated by the cookie */
    chooseCharSubset( s );
  }
}
/* </pre> */

/* 
===chooseCharSubsetMenu===
<pre> */
/* select subsection of special characters */
function chooseCharSubset(s) {
  var l = document.getElementById('editpage-specialchars').getElementsByTagName('p');
  for (var i = 0; i < l.length ; i++) {
    l[i].style.display = i == s ? 'inline' : 'none';
    l[i].style.visibility = i == s ? 'visible' : 'hidden';
  }
  setCookie('edittoolscharsubset', s);
}


/* </pre> */

/* 
== customizeWikipedia ==
<pre> */

function customizeWikipedia() {
  addCharSubsetMenu();
}
 
addLoadEvent(customizeWikipedia);

/* </pre> */


 /*HERE STARTS THE WORKING-CODE OF "METABOXES"*/

 /* Funcionament de la Plantilla:Metacaixa
 Implementat per: Usuari:Peleguer.
 Actualitzat per Joanjoc seguint les indicacions d'en Martorell
 */

 function MetaCaixaInit(){
  //S'executa al carregar-se la pàgina, si hi ha metacaixes,
  // s'assignen els esdeveniments als botons
  //alert("MetaCaixaInit");
  
  var i=0       //Inicialitzem comptador de caixes
  for (i=0;i<=9;i++){
     var vMc = document.getElementById("mc"+i);
     if (!vMc) break;
     //alert("MetaCaixaInit, trobada Metacaixa mc"+i);
     
     var j=1    //Inicialitzem comptador de botons dins de la caixa
     var vPsIni = 0  //Pestanya visible inicial
     for (j=1;j<=9;j++){
        var vBt = document.getElementById("mc"+i+"bt"+j);
        if (!vBt) break;
        //alert("MetaCaixaInit, trobat botó mc"+i+"bt"+j);
        vBt.onclick = MetaCaixaMostraPestanya;          //A cada botó assignem l'esdeveniment onclick
        //alert (vBt.className);
        if (vBt.className=="mcBotoSel") vPsIni=j;  //Si tenim un botó seleccionat, en guardem l'index
     }
     //alert ("mc="+i+", ps="+j+", psini="+vPsIni );
     if (vPsIni == 0) { //Si no tenim cap botó seleccionat, n'agafem un aleatòriament
         vPsIni = 1+Math.floor((j-1)*Math.random()) ;
         //alert ("Activant Pestanya a l'atzar; _mc"+i+"bt"+vPsIni +"_");
         document.getElementById("mc"+i+"ps"+vPsIni).style.display = "block";
         document.getElementById("mc"+i+"ps"+vPsIni).style.visibility = "visible";
         document.getElementById("mc"+i+"bt"+vPsIni).className="mcBotoSel";
     } 
  }
 }
   
 function MetaCaixaMostraPestanya(){
  //S'executa al clicar una pestanya,
  //aquella es fa visible i les altres s'oculten
  var vMcNom = this.id.substr(0,3); //A partir del nom del botó, deduïm el nom de la caixa
  var vIndex = this.id.substr(5,1); //I l'index
  
  var i=1
  for (i=1;i<=9;i++){        //busquem totes les pestanyes d'aquella caixa
      //alert(vMcNom+"ps"+i);
        var vPsElem = document.getElementById(vMcNom+"ps"+i);
        if (!vPsElem) break;
        if (vIndex==i){ //Si és la pestanya bona la mostrem i canviem la classe de botó
                vPsElem.style.display = "block";
                vPsElem.style.visibility = "visible";
                document.getElementById(vMcNom+"bt"+i).className="mcBotoSel";
        } else {             //Sinó, l'ocultem i canviem la classe de botó
                vPsElem.style.display = "none";
                vPsElem.style.visibility = "hidden";
                document.getElementById(vMcNom+"bt"+i).className="mcBoto";
        }
  }
  return false; //evitem la recàrrega de la pàgina
 }
 
 addOnloadHook(MetaCaixaInit);

 /*HERE FINISHES THE WORKING-CODE OF "METABOXES"*/

/** WikiMiniAtlas *******************************************************
  *
  *  Description: WikiMiniAtlas is a popup click and drag world map.
  *               This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
  *               The script itself is located on meta because it is used by many projects.
  *               See [[Meta:WikiMiniAtlas]] for more information. 
  *  Maintainers: [[User:Dschwen]]
  */

if (wgServer == "https://secure.wikimedia.org") {
  var metaBase = "https://secure.wikimedia.org/wikipedia/meta";
} else {
  var metaBase = "http://meta.wikimedia.org";
}
importScriptURI(metaBase+"/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400")

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = "മറയ്ക്കുക";
var expandCaption = "പ്രദര്‍ശിപ്പിക്കുക";
 
function collapseTable( tableIndex )
{
    var Button = document.getElementById( "collapseButton" + tableIndex );
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
    if ( !Table || !Button ) {
        return false;
    }
 
    var Rows = Table.rows;
 
    if ( Button.firstChild.data == collapseCaption ) {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( var i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}
 
function createCollapseButtons()
{
    var tableIndex = 0;
    var NavigationBoxes = new Object();
    var Tables = document.getElementsByTagName( "table" );
 
    for ( var i = 0; i < Tables.length; i++ ) {
        if ( hasClass( Tables[i], "collapsible" ) ) {
 
            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
            if (!Header) continue;
 
            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
 
            var Button     = document.createElement( "span" );
            var ButtonLink = document.createElement( "a" );
            var ButtonText = document.createTextNode( collapseCaption );
 
            Button.className = "collapseButton";  //Styles are declared in Common.css
 
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
            ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
            ButtonLink.appendChild( ButtonText );
 
            Button.appendChild( document.createTextNode( "[" ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( "]" ) );
 
            Header.insertBefore( Button, Header.childNodes[0] );
            tableIndex++;
        }
    }
 
    for ( var i = 0;  i < tableIndex; i++ ) {
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
            collapseTable( i );
        } 
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ( hasClass( element, "outercollapse" ) ) {
                    collapseTable ( i );
                    break;
                }
            }
        }
    }
}
 
addOnloadHook( createCollapseButtons );

var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();


/**submit in tools extension ല്‍ നിന്നും എടുത്തത്. 28/10/08 ഉള്‍പ്പെടുത്തി.
 */

/* Any JavaScript here will be loaded for all users on every page load. */

if ( /^MediaWiki(\/.+)?$/.test( wgPageName ) && wgAction == 'view' ) {
	addOnloadHook(function(){
		document.body.className+=" mainpage";
	})
}

/* Force preview for anons */
/* by Marc Mongenet, 2006, fr.wikipedia */
function forcePreview() {
	if( wgUserName != null || wgAction != 'edit' )
		return;
	saveButton = document.getElementById('wpSave');
	if( !saveButton )
		return;
	saveButton.disabled = true;
	saveButton.value = 'Save page (use preview first)';
	saveButton.style.fontWeight = 'normal';
	document.getElementById('wpPreview').style.fontWeight = 'bold';
}
addOnloadHook(forcePreview);
/* End of forcePreview */

/** includePage ************
 * force the loading of another JavaScript file
 * @todo Is this still needed? We have importScript and importScriptURI in wikibits.js
 * Maintainer: [[Commons:User:Dschwen]]
 */
function includePage( name ){
	document.write('<script type="text/javascript" src="' + wgScript + '?title='
		+ name + '&action=raw&ctype=text/javascript"><\/script>' 
	);
}
/* End of includePage */

/* Including extra .js pages */ 

// switches for scripts
// TODO: migrate to JSConfig
// var load_extratabs = true;
var load_edittools = true;

// extra drop down menu on editing for adding special characters
includePage( 'MediaWiki:Edittools.js' );

// Editpage scripts
if( wgAction == 'edit' || wgAction == 'submit' )
	importScript('MediaWiki:Editpage.js')

/* End of extra pages */

/* Test if an element has a certain class **************************************
 *
 * From English Wikipedia, 2008-09-15
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
var hasClass = (function() {
	var reCache = {};
	return function ( element, className ) {
		return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
	};
})();

/** Collapsible tables *********************************************************
 *
 * From English Wikipedia, 2008-09-15
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Maintainers: [[User:R. Koot]]
 */
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';

function collapseTable( tableIndex ){
	var Button = document.getElementById( 'collapseButton' + tableIndex );
	var Table = document.getElementById( 'collapsibleTable' + tableIndex );

	if ( !Table || !Button ) {
		return false;
	}

	var Rows = Table.rows;

	if ( Button.firstChild.data == collapseCaption ) {
		for ( var i = 1; i < Rows.length; i++ ) {
			Rows[i].style.display = 'none';
		}
		Button.firstChild.data = expandCaption;
	} else {
		for ( var i = 1; i < Rows.length; i++ ) {
			Rows[i].style.display = Rows[0].style.display;
		}
		Button.firstChild.data = collapseCaption;
	}
}

function createCollapseButtons(){
	var tableIndex = 0;
	var NavigationBoxes = new Object();
	var Tables = document.getElementsByTagName( 'table' );

	for ( var i = 0; i < Tables.length; i++ ) {
		if ( hasClass( Tables[i], 'collapsible' ) ) {
			/* only add button and increment count if there is a header row to work with */
			var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
			if( !HeaderRow )
				continue;
			var Header = HeaderRow.getElementsByTagName( 'th' )[0];
			if( !Header )
				continue;

			NavigationBoxes[tableIndex] = Tables[i];
			Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );

			var Button     = document.createElement( 'span' );
			var ButtonLink = document.createElement( 'a' );
			var ButtonText = document.createTextNode( collapseCaption );

			Button.style.styleFloat = 'right';
			Button.style.cssFloat = 'right';
			Button.style.fontWeight = 'normal';
			Button.style.textAlign = 'right';
			Button.style.width = '6em';

			ButtonLink.style.color = Header.style.color;
			ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
			ButtonLink.setAttribute( 'href', "javascript:collapseTable(" + tableIndex + ");" );
			ButtonLink.appendChild( ButtonText );

			Button.appendChild( document.createTextNode( "[" ) );
			Button.appendChild( ButtonLink );
			Button.appendChild( document.createTextNode( "]" ) );

			Header.insertBefore( Button, Header.childNodes[0] );
			tableIndex++;
		}
    }
 
	for ( var i = 0;  i < tableIndex; i++ ) {
		if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
			collapseTable( i );
		}
	}
}

addOnloadHook( createCollapseButtons );


/** Dynamic Navigation Bars (experimental) *************************************
 *
 * From English Wikipedia, 2008-09-15
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Maintainers: UNMAINTAINED
 */
 
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
 
// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar( indexNavigationBar ){
	var NavToggle = document.getElementById('NavToggle' + indexNavigationBar);
	var NavFrame = document.getElementById('NavFrame' + indexNavigationBar);

	if( !NavFrame || !NavToggle ) {
		return false;
	}

	// if shown now
	if( NavToggle.firstChild.data == NavigationBarHide ) {
		for( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
			if ( hasClass( NavChild, 'NavPic' ) ) {
				NavChild.style.display = 'none';
			}
			if ( hasClass( NavChild, 'NavContent') ) {
				NavChild.style.display = 'none';
			}
		}
	NavToggle.firstChild.data = NavigationBarShow;

	// if hidden now
	} else if( NavToggle.firstChild.data == NavigationBarShow) {
		for( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
			if( hasClass( NavChild, 'NavPic' ) ) {
				NavChild.style.display = 'block';
			}
			if( hasClass( NavChild, 'NavContent' ) ) {
				NavChild.style.display = 'block';
			}
		}
		NavToggle.firstChild.data = NavigationBarHide;
	}
}

// adds show/hide-button to navigation bars
function createNavigationBarToggleButton(){
	var indexNavigationBar = 0;
	// iterate over all < div >-elements
	var divs = document.getElementsByTagName('div');
	for( var i = 0; NavFrame = divs[i]; i++ ) {
		// if found a navigation bar
		if( hasClass( NavFrame, 'NavFrame' ) ) {
			indexNavigationBar++;
			var NavToggle = document.createElement("a");
			NavToggle.className = 'NavToggle';
			NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
			NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

			var NavToggleText = document.createTextNode(NavigationBarHide);
			for( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
				if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
					if( NavChild.style.display == 'none' ) {
						NavToggleText = document.createTextNode(NavigationBarShow);
						break;
					}
				}
			}

			NavToggle.appendChild(NavToggleText);
			// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
			for( var j=0; j < NavFrame.childNodes.length; j++) {
				if( hasClass( NavFrame.childNodes[j], 'NavHead' ) ) {
					NavFrame.childNodes[j].appendChild(NavToggle);
				}
			}
			NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
		}
	}
} 
addOnloadHook( createNavigationBarToggleButton );
"https://schoolwiki.in/index.php?title=മീഡിയവിക്കി:Common.js&oldid=1958" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്