// Aŭtomata dumtajpa seniksigado (ĉapeligado) de tekstokampoj ("input" kaj "textarea").
// Apartenas al la WordPress-a kromprogramo Cxapelado.

Event.observe(window, "load", Cxapelado_Starto, false);

function Cxapelado_Starto() {
	if (Cxapelado_SeniksigadoFunkcios()) {
		var sxaltiloj = $$(".cxapeladosxaltilo");
		for (var i = 0; i < sxaltiloj.length; i++) {
			var inputo = document.createElement("input");
			inputo.setAttribute("type", "checkbox");
			inputo.id = sxaltiloj[i].id + "input";
			if (sxaltiloj[i].hasClassName("sxaltita")) {
				var checked = document.createAttribute("checked");
				checked.value = "checked";
				inputo.setAttributeNode(checked);
			}
			var labelo = document.createElement("label");
			var labeloteksto = document.createTextNode(' cx gx ... ux → ĉ ĝ ... ŭ (plia "x" malfaras)');
			labelo.appendChild(labeloteksto);
			var labelofor = document.createAttribute("for");
			labelofor.value = inputo.id;
			labelo.setAttributeNode(labelofor);
			if (inputo && labelo) {
				sxaltiloj[i].insert(inputo);
				sxaltiloj[i].insert(labelo);
			}
		}
		var kampoj = $$(".cxapeladokampo");
		for (var i = 0; i < kampoj.length; i++) {
			if (kampoj[i].id && $(kampoj[i].id + "_cxapeladosxaltiloinput")) {
				$(kampoj[i].id + "_cxapeladosxaltiloinput").cxapeladokampo = kampoj[i];
				kampoj[i].cxapeladosxaltiloinput = $(kampoj[i].id + "_cxapeladosxaltiloinput");
				kampoj[i].cxapeladosxaltiloinput.observe("click", Cxapelado_KomutiCxapeladon);
			} else {
				kampoj[i].cxapeladosxaltiloinput = false;
			}
			if (!kampoj[i].cxapeladosxaltiloinput || kampoj[i].cxapeladosxaltiloinput.checked) {
				kampoj[i].klavosupren = Cxapelado_GvatiTajpadon.bindAsEventListener();
				Event.observe(kampoj[i], "keyup", kampoj[i].klavosupren);
			}
		}
	}
}

function Cxapelado_KomutiCxapeladon() {
	if (this.cxapeladokampo) {
		if (this.checked) {
			this.cxapeladokampo.klavosupren = Cxapelado_GvatiTajpadon.bindAsEventListener();
			Event.observe(this.cxapeladokampo, "keyup", this.cxapeladokampo.klavosupren);
		} else {
			Event.stopObserving(this.cxapeladokampo, "keyup", this.cxapeladokampo.klavosupren);
		}
		this.cxapeladokampo.focus();
	}
}

function Cxapelado_SeniksigadoFunkcios() {
	if (document.getElementById && document.body.innerHTML) {
		return true;
	} else {
		return false;
	}
}

function Cxapelado_GvatiTajpadon(e) {
	var kampo = Event.element(e);
	var signo;
	if (document.all) signo = String.fromCharCode(e.keyCode);
	else signo = String.fromCharCode(e.which);
	if (signo == "X" || signo == "x") {
		Cxapelado_Cxapeligi(kampo);
	}
	return true;
}

function Cxapelado_Cxapeligi(kampo) {
	if (kampo.selectionStart || kampo.selectionStart == "0") {
		var ekPoz = kampo.selectionStart;
		if (ekPoz > 1) {
			var literox = kampo.value.substr(ekPoz-2,2);
			var literou = Cxapelado_VereCxapeligi(literox);
			kampo.value = kampo.value.substr(0,ekPoz-2) + literou + kampo.value.substr(ekPoz);
			var celoPoz = ekPoz-(literox.length-literou.length);
			Cxapelado_kreiElektajxon(kampo,celoPoz,celoPoz);
		}
	} else if (document.selection) {
		var markilo = "\x7f"; // Retropaŝa signo - uzata nur ĉar apenaŭ estas risko, ke ĝi estas uzata intence de la uzanto
		var markiloREG = new RegExp(markilo);
		var rng = document.selection.createRange();
		rng.text = markilo;
		rng.select();
		var loko = kampo.value.indexOf(markilo);
		kampo.value = kampo.value.replace(markiloREG,'');
		if (loko > 1) {
			var komenco = kampo.value.substr(1,loko);
			var l = 0;
			var linioj;
			if (linioj = komenco.match(/\n/g)) {
				l = linioj.length;
			}
			var literox = kampo.value.substr(loko-2,2);
			var literou = Cxapelado_VereCxapeligi(literox);
			kampo.value = kampo.value.substr(0,loko-2) + literou + kampo.value.substr(loko);
			var celoPoz = loko-l-(literox.length-literou.length);
			Cxapelado_kreiElektajxon(kampo,celoPoz,celoPoz);
		} else {
			Cxapelado_kreiElektajxon(kampo,loko,loko);
		}
	}
}

var Cxapelado_literoj = new Object;
Cxapelado_literoj.cxRX = /c[Xx]/g;
Cxapelado_literoj.gxRX = /g[Xx]/g;
Cxapelado_literoj.hxRX = /h[Xx]/g;
Cxapelado_literoj.jxRX = /j[Xx]/g;
Cxapelado_literoj.sxRX = /s[Xx]/g;
Cxapelado_literoj.uxRX = /u[Xx]/g;
Cxapelado_literoj.CxRX = /C[Xx]/g;
Cxapelado_literoj.GxRX = /G[Xx]/g;
Cxapelado_literoj.HxRX = /H[Xx]/g;
Cxapelado_literoj.JxRX = /J[Xx]/g;
Cxapelado_literoj.SxRX = /S[Xx]/g;
Cxapelado_literoj.UxRX = /U[Xx]/g;
//Cxapelado_literoj.apxRX = /'([Xx])/g;
Cxapelado_literoj.cxxRX = /ĉ([Xx])/g;
Cxapelado_literoj.gxxRX = /ĝ([Xx])/g;
Cxapelado_literoj.hxxRX = /ĥ([Xx])/g;
Cxapelado_literoj.jxxRX = /ĵ([Xx])/g;
Cxapelado_literoj.sxxRX = /ŝ([Xx])/g;
Cxapelado_literoj.uxxRX = /ŭ([Xx])/g;
Cxapelado_literoj.CxxRX = /Ĉ([Xx])/g;
Cxapelado_literoj.GxxRX = /Ĝ([Xx])/g;
Cxapelado_literoj.HxxRX = /Ĥ([Xx])/g;
Cxapelado_literoj.JxxRX = /Ĵ([Xx])/g;
Cxapelado_literoj.SxxRX = /Ŝ([Xx])/g;
Cxapelado_literoj.UxxRX = /Ŭ([Xx])/g;
function Cxapelado_VereCxapeligi(t) {
    t = t.replace(Cxapelado_literoj.cxRX,"ĉ");
    t = t.replace(Cxapelado_literoj.gxRX,"ĝ");
    t = t.replace(Cxapelado_literoj.hxRX,"ĥ");
    t = t.replace(Cxapelado_literoj.jxRX,"ĵ");
    t = t.replace(Cxapelado_literoj.sxRX,"ŝ");
    t = t.replace(Cxapelado_literoj.uxRX,"ŭ");
    t = t.replace(Cxapelado_literoj.CxRX,"Ĉ");
    t = t.replace(Cxapelado_literoj.GxRX,"Ĝ");
    t = t.replace(Cxapelado_literoj.HxRX,"Ĥ");
    t = t.replace(Cxapelado_literoj.JxRX,"Ĵ");
    t = t.replace(Cxapelado_literoj.SxRX,"Ŝ");
    t = t.replace(Cxapelado_literoj.UxRX,"Ŭ");
    //t = t.replace(Cxapelado_literoj.apxRX,"$1");
    t = t.replace(Cxapelado_literoj.cxxRX,"c$1");
    t = t.replace(Cxapelado_literoj.gxxRX,"g$1");
    t = t.replace(Cxapelado_literoj.hxxRX,"h$1");
    t = t.replace(Cxapelado_literoj.jxxRX,"j$1");
    t = t.replace(Cxapelado_literoj.sxxRX,"s$1");
    t = t.replace(Cxapelado_literoj.uxxRX,"u$1");
    t = t.replace(Cxapelado_literoj.CxxRX,"C$1");
    t = t.replace(Cxapelado_literoj.GxxRX,"G$1");
    t = t.replace(Cxapelado_literoj.HxxRX,"H$1");
    t = t.replace(Cxapelado_literoj.JxxRX,"J$1");
    t = t.replace(Cxapelado_literoj.SxxRX,"S$1");
    t = t.replace(Cxapelado_literoj.UxxRX,"U$1");
    return t;
}

function Cxapelado_kreiElektajxon(input, selectionStart, selectionEnd) {
	if (input && input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
  } else if (input && input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd("character", selectionEnd);
		range.moveStart("character", selectionStart);
		range.select();
	}
}

