// ==UserScript==
// @name        RuTranslit
// @namespace   RuTranslit
// @description Azbuka -> Latin
// @include     *
// @version     1
// @grant       none
// ==/UserScript==

function textNodesUnder(node) {
  var all = [];
  for (node=node.firstChild;node;node=node.nextSibling) {
    if (node.nodeType==3) all.push(node);
    else all = all.concat(textNodesUnder(node));
  }
  return all;
}

function udelejto(x) {
  var new_s = x;

  var replaces = {
    "А": "A",
    "Б": "B",
    "В": "V",
    "Г": "G",
    "Д": "D",
    "Е": "E",
    "Ё": "Ju",
    "Ж": "Ž",
    "З": "Z",
    "И": "I",
    "Й": "J",
    "К": "K",
    "Л": "L",
    "М": "M",
    "Н": "N",
    "О": "O",
    "П": "P",
    "Р": "R",
    "С": "S",
    "Т": "T",
    "У": "U",
    "Ф": "F",
    "Х": "Ch",
    "Ц": "C",
    "Ч": "Č",
    "Ш": "Š",
    "Щ": "Šč",
    "Ъ": "ʺ",
    "Ы": "Y",
    "Ь": "ʹ",
    "Э": "E",
    "Ю": "Ju",
    "Я": "Ja"
  };

  for(var i in replaces)
  {
    new_s = new_s
    .replace(new RegExp(i,"g"), replaces[i])
    .replace(new RegExp(i.toLowerCase(),"g"), replaces[i].toLowerCase());
  }

  return new_s;
}

var nodes = textNodesUnder(document.body);

for(var i in nodes) {
  var node = nodes[i];
  node.textContent = udelejto(node.textContent);
}

document.title = udelejto(document.title);

var buttons = document.querySelectorAll("input");
for(var i in buttons)
{
  if(buttons[i].value) buttons[i].value = udelejto(buttons[i].value);
  if(buttons[i].placeholder) buttons[i].placeholder = udelejto(buttons[i].placeholder);
}