//**********************************************************************
//*     FUNCIONES JAVASCRIPT PARA ESCRITURA EN GRIEGO POLITÓNICO       *
//*     CON FUENTES UNICODE.                                           *
//*     Jesús Quílez Bielsa. Grupo Palladium 2003 MECD                 *
//**********************************************************************
var lescrito=false
var linicio=false
var lmovi=false
var lnoreturn=false
var lmay=false
var lctr=false
var lescribegriego=false
var niniciogriego=0
var ndiacritico=0
var fonact=false

    // IE
    if(navigator.userAgent.indexOf("MSIE")>=0) cnavegador="Explorer";
    // Otros
    else cnavegador="Netscape";

function griego(imagen){
if (lescribegriego){
   lescribegriego=false
   document.getElementById(imagen).src="images/font-x-greek.png"
}
else {
     lescribegriego=true
     document.getElementById(imagen).src="images/font-x-generic.png"
}
}

function mueveraton(e){
posratx=e.pageX
posraty=e.pageY
}

if (cnavegador=="Netscape"){
  document.addEventListener('mousemove', mueveraton, false);
  document.addEventListener('keydown', abajotecla, false);
}

function pulsaDiacritico(cuadro,codigo,mayusculas,teclacontrol){
ndiacritico=parseInt(codigo)
lmay=mayusculas
lctr=teclacontrol
modificafonema(document.getElementById(cuadro))
}

function abajotecla(e){
  nasc=e.which
  lmay=e.shiftKey
  lctr=e.ctrlKey
  if (lescribegriego){
      lmovi=esteclamov(nasc)
      if (esdiacritico(nasc)){
         ndiacritico=nasc
         modificafonema(e.target)
      }
      else {
          ndiacritico=0
      }
  }
  if (nasc==113){
      if (lescribegriego){
        lescribegriego=false
        if (document.getElementById("imagri0")){document.getElementById("imagri0").src="images/font-x-greek.png"}
        if (document.getElementById("imagri1")){document.getElementById("imagri1").src="images/font-x-greek.png"}
        }
      else {
       lescribegriego=true
        if (document.getElementById("imagri0")){document.getElementById("imagri0").src="images/font-x-generic.png"}
        if (document.getElementById("imagri1")){document.getElementById("imagri1").src="images/font-x-generic.png"}
       niniciogriego=2
       }
       return false
   }
}

function ofonema(){
   this.mayuscula=0
   this.iota=0
   this.dieresis=0
   this.espiritu=0
   this.acento=0
   this.fonema=0
   this.descripcion=""
   this.nombre=""
   this.transcripcion=""
   this.sigma=false
   this.esoea=0
   this.esiu=0
   this.esvocal=false
   this.nasci=0
   this.nunicode=0
   this.cunicode=0
   this.diacritico=false
   this.espuntuacion=false
   this.esinicial=false
   this.esfinal=false
}

function griegoNS(cuadro,evento){
if (cnavegador=="Netscape"){
  if (lescribegriego){
      if (niniciogriego<2){
        var nletact = evento.which
        var nletant = 0
        var ccadena = ""
        var antselini = cuadro.selectionStart
        var antselfin = cuadro.selectionEnd
        if (niniciogriego<1){
           var nvaselini = antselini-1
        }
        else {
           var nvaselini = antselini
        }
        var cactlet = cuadro.value.substring(antselini,antselfin)
        if (niniciogriego<1){
           var cantlet=cuadro.value.substring(antselini-1,antselini)
        }
        else {
           var cantlet=""
             --niniciogriego
        }
        if (lmovi==false){
          if (evento.preventDefault) {
              evento.preventDefault();
              }
              if (noesbuffer(nletact)==false && lmovi==false){
                fonact=creafonema(nletact)
                if (fonact.nasci != 146){
                  nvalet=fonact.cunicode
                  cantlet=cuadro.value.substring(nvaselini,antselini)
                  antlet=cantlet.charCodeAt(0)
                  fonant=creafonema(antlet)
                  ccadena=contextofonetico(fonant,fonact)
                  if (antselini==0){++nvaselini}
                  cuadro.value = cuadro.value.substring(0, nvaselini) + ccadena + cuadro.value.substring(antselfin)
                  cuadro.setSelectionRange(nvaselini+ccadena.length, nvaselini+ccadena.length)
                  window.status=fonact.descripcion
                  }
                }
        }
      }
      else {
      --niniciogriego
      }
  }
}
}

function contextofonetico(fonant,fonact){
   if (lmay){fonact.mayuscula=1}
   if (fonant.descripcion=="inicio"){
        if (fonact.sigma==true  && fonact.mayuscula==1){
              fonact.iota=0
              actualizafonema(fonact)
              cresultado=fonact.cunicode
              }
        if (fonant.espuntuacion && fonact.esvocal){
           if (estaen(";15;7;17;20;",";"+fonact.fonema+";")>-1){nespiritu=2}
           else {nespiritu=1}
           fonact.espiritu=nespiritu
           actualizafonema(fonact)
           }
           cresultado=fonact.cunicode
   }
   else {
        cresultado=fonant.cunicode+fonact.cunicode
        if (fonant.transcripcion=="k" && fonact.transcripcion=="s"){
           fonant.fonema=14;actualizafonema(fonant);cresultado=fonant.cunicode
        }
        if (fonant.transcripcion=="p" && fonact.transcripcion=="s"){
           fonant.fonema=23;actualizafonema(fonant);cresultado=fonant.cunicode
           }
        if (fonant.transcripcion=="d" && fonact.transcripcion=="s"){
           fonant.fonema=6;actualizafonema(fonant);cresultado=fonant.cunicode
        }
        if (fonant.espuntuacion && fonact.transcripcion=="r"){
           fonact.espiritu=2
           actualizafonema(fonact)
           if (fonant.descripcion=="inicio"){cresultado=fonact.cunicode}
           else{cresultado=fonant.cunicode+fonact.cunicode}
        }
        if (fonant.espuntuacion && fonact.esvocal){
           if (estaen(";15;7;17;20;",";"+fonact.fonema+";")>-1){nespiritu=2}
           else {nespiritu=1}
           fonact.espiritu=nespiritu
           actualizafonema(fonact)
           if (fonant.descripcion=="inicio"){cresultado=fonact.cunicode}
           else{cresultado=fonant.cunicode+fonact.cunicode}
        }
        if (fonant.esvocal && fonact.esvocal){
           if (fonant.espiritu>0){
              if (estaen(";9;20;",";"+fonact.fonema+";")>-1){
                fonact.espiritu=fonant.espiritu
                actualizafonema(fonact)
                fonant.espiritu=0
                actualizafonema(fonant)
                cresultado=fonant.cunicode+fonact.cunicode
              }
              }
        }
        if (fonact.sigma==true  && fonact.mayuscula==1){
              fonact.iota=0
              actualizafonema(fonact)
              cresultado=fonant.cunicode+fonact.cunicode
              }
        if (fonant.sigma==true && fonact.mayuscula==0){
           if (fonact.espuntuacion==false){
              fonant.iota=0
              actualizafonema(fonant)
              cresultado=fonant.cunicode+fonact.cunicode
              }
        }
    }
    return cresultado
}

function modificafonema(cuadro){
  var antselini = cuadro.selectionStart;
  var antselfin = cuadro.selectionEnd;
  var cactlet = cuadro.value.substring(antselini,antselfin)
  var cantlet=cuadro.value.substring(antselini-1,antselini)

  antlet=cantlet.charCodeAt(0)
  fonant=creafonema(antlet)
  fonant=ponacentos(fonant)
  nvalet=fonant.cunicode
  if (fonant.nunicode>0){
    cuadro.value = cuadro.value.substring(0, antselini-1) + nvalet + cuadro.value.substring(antselfin);
    cuadro.setSelectionRange(antselini, antselfin);
    window.status=fonant.descripcion
  }
  else {window.status="No existe esa combinación"}
  return false
}

function pulsagriego(){
if (cnavegador=="Netscape"){return false}
   ntecla=window.event.keyCode
   if (ntecla==113){
      if (lescribegriego){lescribegriego=false}
      else {
       lescribegriego=true
       niniciogriego=2
       }
   }
   if (lescribegriego){
     if (ntecla==186){window.event.returnValue=false}
     if (ntecla==222){window.event.returnValue=false}
     if (ntecla==191){window.event.returnValue=false}
     }
}

function creafonema(nasc){
nuevo=new ofonema
nltr=buscaletras("codasc",nasc,true)
if (nltr==0){
   nnva=buscasonido("CODUNI",nasc,true)
}
else {
     npst=nltr
     nnva=buscasonido("CODLET",npst,true)
}
nuevo=cargafonema(nuevo,nnva)
return nuevo
}

function ponacentos(fonema){
if (ndiacritico==56){
	if (fonema.espiritu==2){fonema.espiritu=0}
	else {fonema.espiritu=2}
	if (fonema.fonema==0) {fonema.mayuscula=1}
	}
if (ndiacritico==57){
	if (fonema.espiritu==1){fonema.espiritu=0}
	else {fonema.espiritu=1}
	if (fonema.fonema==0) {fonema.mayuscula=1}
	}
if (ndiacritico==222){
	if (lmay){
		if (fonema.dieresis==1){fonema.dieresis=0}
		else {fonema.dieresis=1}
		if (fonema.fonema==0) {fonema.mayuscula=1}
	}
	else {
		if (fonema.acento==1){fonema.acento=0}
		else {fonema.acento=1}
		if (fonema.fonema==0){fonema.mayuscula=1}
	}
	}
if (ndiacritico==59){
	if (lmay){
		if (fonema.acento==3){fonema.acento=0}
		else {fonema.acento=3}
		if (fonema.fonema==0) {fonema.mayuscula=1}
	}
	else {
		if (fonema.acento==2){fonema.acento=0}
		else {fonema.acento=2}
		if (fonema.fonema==0) {fonema.mayuscula=1}
	}
	}
if (ndiacritico==186){
	if (lmay){
		if (fonema.acento==3){fonema.acento=0}
		else {fonema.acento=3}
		if (fonema.fonema==0) {fonema.mayuscula=1}
	}
	else {
		if (fonema.acento==2){fonema.acento=0}
		else {fonema.acento=2}
		if (fonema.fonema==0) {fonema.mayuscula=1}
	}
	}
if (ndiacritico==191){
	if (fonema.iota==1){fonema.iota=0}
	else {fonema.iota=1}
	if (fonema.fonema==0) {fonema.mayuscula=1}
	}

 nuevofonema=actualizafonema(fonema)
 return (nuevofonema)
}

function escribegriego(){
if (cnavegador=="Netscape"){return false;}
cltr=window.event.keyCode
lmay=window.event.shiftKey
lctr=window.event.ctrlKey
ndiacritico=0
if (!lescribegriego){
  if (document.getElementById("descripcion")){
     document.getElementById("descripcion").innerHTML="Alfabeto latino. Pulsa [F2] para griego."
     }
   return false
   }
if (cltr==17 || cltr==16 || cltr==113){return}
if (esteclamov(cltr)){return}
if (esdiacritico(cltr)){
     if (niniciogriego==0){
       orng=document.selection.createRange()
       orng.moveStart("character",-1)
       ctxt=orng.text
       nasc=ctxt.charCodeAt(0);
       ndiacritico=cltr
       fonant=creafonema(nasc)
       fonant=ponacentos(fonant)
       ccadena=fonant.cunicode
       if (fonant.nunicode>0){
          if (lescribegriego){
              if (document.getElementById("descripcion")){
                 document.getElementById("descripcion").innerHTML=fonant.descripcion
                 }
            }
          orng.text=ccadena
       }
       else {
        if (document.getElementById("descripcion")){
           document.getElementById("descripcion").innerHTML="No existe la combinación"
           }
         }
       window.event.returnValue=false
     }
}
else{
     if (niniciogriego<2){
       orng=document.selection.createRange()
       if (niniciogriego<1){
          orng.moveStart("character",-1)
       }
       else {--niniciogriego}
       bant=orng.getBookmark()
       ctxta=orng.text
       nasc=ctxta.charCodeAt(0);
       fonact=creafonema(nasc)
       orng.moveStart("character",-1)
       ctxtb=orng.text
       nasc=ctxtb.charCodeAt(0)
       fonant=creafonema(nasc)
       if (ctxta==ctxtb){
          fonant.descripcion="inicio"
          fonant.espuntuacion=true
          orng.moveToBookmark(bant)
          }
       ccadena=contextofonetico(fonant,fonact)
       orng.text=ccadena
       window.event.returnValue=false
       }
     else {--niniciogriego}
     if (lescribegriego){
        if (document.getElementById("descripcion")){
            if (fonact){
                document.getElementById("descripcion").innerHTML=fonact.descripcion
            }
         }
       }
     }
}

function buscafonema(iota,mayuscula,dieresis,espiritu,acento,fonema){
nregtot= CODLET.length - 1
nregact=1
cvlrcpo=""
fonema=iota+";"+mayuscula+";"+dieresis+";"+espiritu+";"+acento+";"+fonema
for (nregact=1;nregact<=nregtot;++nregact) {
	cvlrcpo=CODIOT[nregact]+";"+CODMAY[nregact]+";"+CODDIE[nregact]
	cvlrcpo=cvlrcpo+";"+CODESP[nregact]+";"+CODACC[nregact]+";"+CODFON[nregact]
	if (cvlrcpo==fonema){
		return (nregact)
	}
}
return (0)
}

function daunicode(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta
cadena=cadena.substring(1)
nfin=estaen(cadena,"-")
while (nfin>0){
	crespuesta=cadena.substring(0,nfin)
	cadena=cadena.substring(nfin+1)
	cadunicode=cadunicode+daunicodeb(crespuesta)
	nfin=estaen(cadena,"-")
	if (nfin>0){cadunicode=cadunicode+"-"}
	}
return(cadunicode)
}

function daunicodeb(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
cadena=trim(cadena)
cadena=cambiacadena(cadena," ","&#32;")
ninicio=estaen(cadena,"&#")+2
while (ninicio>1){
	nfin=estaen(cadena,";")
	nunicode=cadena.substring(ninicio,nfin)
	cadena=cadena.substring(nfin+1)
	ninicio=estaen(cadena,"&#")+2
	cadunicode=cadunicode+String.fromCharCode(nunicode)
	}
return(cadunicode)
}

function dacodigofon(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido

for (nlon=0;nlon<nlongitud;nlon++){
	nunicode=cadena.charCodeAt(nlon)
	nfon=buscasonido("CODUNI",nunicode,true)
	if (nfon>0){
		iota=CODIOT[nfon]
		mayuscula=CODMAY[nfon]
		dieresis=CODDIE[nfon]
		espiritu=CODESP[nfon]
		acento=CODACC[nfon]
		fonema=CODFON[nfon]
		cdsc=NOMSON[nfon]
		csonido=trim(cdsc)
		cfonema=trim(cdsc.substring(0,1))
		if (fonema==7){cfonema="h"}
		if (fonema==24){cfonema="w"}
		if (fonema==8){cfonema="q"}
		if (fonema==6){cfonema="z"}
		if (fonema==21){cfonema="f"}
		if (fonema==22){cfonema="j"}
		if (fonema==14){cfonema="x"}
		if (fonema==23){cfonema="ps"}
		if (fonema==20){cfonema="y"}
		if (fonema==15){cfonema="o"}
		if (fonema==5){cfonema="e"}
		if (estaen(csonido,"suave")>1){cfonema=cfonema+"1"}
		if (estaen(csonido,"spero")>1){cfonema=cfonema+"2"}
		if (estaen(csonido,"agudo")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"grave")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"circunflejo")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"suscrita")>1){cfonema=cfonema+"7"}
		if (estaen(csonido,"resis")>1){cfonema=cfonema+"6"}
		if (nfon==147){cfonema=" "}
	}
	else {cfonema=cadena.substring(nlon,nlon+1)}
	crespuesta=crespuesta+cfonema
}

return(crespuesta)
}

function dacodigofonb(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido

for (nlon=0;nlon<nlongitud;nlon++){
	nunicode=cadena.charCodeAt(nlon)
	nfon=buscasonido("CODUNI",nunicode,true)
	if (nfon>0){
		iota=CODIOT[nfon]
		mayuscula=CODMAY[nfon]
		dieresis=CODDIE[nfon]
		espiritu=CODESP[nfon]
		acento=CODACC[nfon]
		fonema=CODFON[nfon]
		cdsc=NOMSON[nfon]
		csonido=trim(cdsc)
		cfonema=trim(cdsc.substring(0,1))
		if (estaen(csonido,"eta")==0){cfonema="h"}
		if (estaen(csonido,"omega")==0){cfonema="w"}
		if (estaen(csonido,"zeta")==0){cfonema="q"}
		if (estaen(csonido,"dseta")==0){cfonema="z"}
		if (estaen(csonido,"fi")==0){cfonema="f"}             
		if (estaen(csonido,"ji")==0){cfonema="j"}
		if (estaen(csonido,"psi")==0){cfonema="ps"}
		if (estaen(csonido,"í")==0){cfonema="y"}
		if (estaen(csonido,"ó")==0){cfonema="o"}
		if (estaen(csonido,"é")==0){cfonema="e"}
		if (estaen(csonido,"áspero")>1){cfonema=cfonema+"2"}
		if (estaen(csonido,"suscrita")>1){cfonema=cfonema+"7"}
		if (estaen(csonido,"diéresis")>1){cfonema=cfonema+"6"}
		if (nfon==147){cfonema=" "}
	}
	else {cfonema=cadena.substring(nlon,nlon+1)}
	crespuesta=crespuesta+cfonema
}

return(crespuesta)
}


function dacodigofon2(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido
var nGri=0

for (nlon=0;nlon<nlongitud;nlon++){
	nunicode=cadena.charCodeAt(nlon)
	nfon=buscasonido("CODUNI",nunicode,true)
	if (nfon>0){
	        if (nGri==0){
                    crespuesta=crespuesta+"{$"
                    nGri=1
                }
                iota=CODIOT[nfon]
		mayuscula=CODMAY[nfon]
		dieresis=CODDIE[nfon]
		espiritu=CODESP[nfon]
		acento=CODACC[nfon]
		fonema=CODFON[nfon]
		cdsc=NOMSON[nfon]
		csonido=trim(cdsc)
		cfonema=trim(cdsc.substring(0,1))
		if (fonema==7){cfonema="h"}
		if (fonema==24){cfonema="w"}
		if (fonema==8){cfonema="q"}
		if (fonema==6){cfonema="z"}
		if (fonema==21){cfonema="f"}
		if (fonema==22){cfonema="j"}
		if (fonema==14){cfonema="x"}
		if (fonema==23){cfonema="ps"}
		if (fonema==20){cfonema="y"}
		if (fonema==15){cfonema="o"}
		if (fonema==5){cfonema="e"}
		if (estaen(csonido,"suave")>1){cfonema=cfonema+"1"}
		if (estaen(csonido,"spero")>1){cfonema=cfonema+"2"}
		if (estaen(csonido,"agudo")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"grave")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"circunflejo")>1){cfonema=cfonema+"8"}
		if (estaen(csonido,"suscrita")>1){cfonema=cfonema+"7"}
		if (estaen(csonido,"resis")>1){cfonema=cfonema+"6"}
		if (nfon==147){cfonema=" "}
	}
	else {
	     	     if (nGri==1){
	     	        crespuesta=crespuesta+"}"
	     	        nGri=0
	     	     }
                cfonema=cadena.substring(nlon,nlon+1)
        }
	crespuesta=crespuesta+cfonema
}

return(crespuesta)
}

function dacodigofonsin(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido              

for (nlon=0;nlon<nlongitud;nlon++){
	nunicode=cadena.charCodeAt(nlon)
	nfon=buscasonido("CODUNI",nunicode,true)
	if (nfon>0){
		iota=CODIOT[nfon]
		mayuscula=CODMAY[nfon]
		dieresis=CODDIE[nfon]
		espiritu=CODESP[nfon]
		acento=CODACC[nfon]
		fonema=CODFON[nfon]
		cdsc=NOMSON[nfon]
		csonido=trim(cdsc)
		cfonema=trim(cdsc.substring(0,1))
		if (fonema==7){cfonema="H"}
		if (fonema==24){cfonema="W"}
		if (fonema==8){cfonema="Q"}
		if (fonema==6){cfonema="Z"}
		if (fonema==21){cfonema="F"}
		if (fonema==22){cfonema="X"}
		if (fonema==14){cfonema="C"}
		if (fonema==23){cfonema="Y"}
		if (fonema==20){cfonema="U"}
		if (fonema==15){cfonema="O"}
		if (fonema==5){cfonema="E"}
		if (nfon==147){cfonema=" "}
	}
	else {cfonema=cadena.substring(nlon,nlon+1)}
	crespuesta=crespuesta+cfonema
}

return(crespuesta)
}


function esgriego(cadena){
var nlongitud=cadena.length
var nunicode=0
var lgriego=false
for (nlon=0;nlon<nlongitud;nlon++){
    cunicode=cadena.charAt(nlon)
    nunicode=cadena.charCodeAt(nlon)
    if (nunicode>900){
       lgriego=true
       break
    }
}
return (lgriego)
}


function davalorfon(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido

for (nlon=0;nlon<nlongitud;nlon++){
	cunicode=cadena.charAt(nlon)
    	nunicode=cadena.charCodeAt(nlon)
    	if (nunicode==8127){
    	   cunicode="'"
        }
        if (estaen(",.;-=/?¿:'\"",cunicode)>-1){
           cfonema=cunicode
        }
        else{
    	nfon=buscasonido("CODUNI",nunicode,true)
    	if (nfon>0){
    		iota=CODIOT[nfon]
    		mayuscula=CODMAY[nfon]
    		dieresis=CODDIE[nfon]
    		espiritu=CODESP[nfon]
    		acento=CODACC[nfon]
    		fonema=CODFON[nfon]
    		cdsc=NOMSON[nfon]
    		csonido=trim(cdsc)
    		cfonema=trim(cdsc.substring(0,1))
		if (fonema==7){cfonema="h"}
		if (fonema==24){cfonema="w"}
		if (fonema==8){cfonema="q"}
		if (fonema==6){cfonema="z"}
		if (fonema==21){cfonema="f"}
		if (fonema==22){cfonema="j"}
		if (fonema==14){cfonema="x"}
		if (fonema==23){cfonema="ps"}
		if (fonema==20){cfonema="y"}
		if (fonema==15){cfonema="o"}
		if (fonema==5){cfonema="e"}
    		if (estaen(csonido,"punto alto")==0){cfonema=":"}
    		if (estaen(csonido,"dseta")==0){cfonema="z"}
    		if (estaen(csonido,"suave")>1){cfonema=cfonema+"1"}
    		if (estaen(csonido,"spero")>1){cfonema=cfonema+"2"}
    		if (estaen(csonido,"agudo")>1){cfonema=cfonema+"3"}
    		if (estaen(csonido,"grave")>1){cfonema=cfonema+"4"}
    		if (estaen(csonido,"circunflejo")>1){cfonema=cfonema+"5"}
    		if (estaen(csonido,"resis")>1){cfonema=cfonema+"6"}
    		if (estaen(csonido,"suscrita")>1){cfonema=cfonema+"7"}
    		if (nfon==147){cfonema=" "}
    		if (mayuscula==1){cfonema=cfonema.toUpperCase()}
    	}
    	else {cfonema=cadena.substring(nlon,nlon+1)}
    	}
	crespuesta=crespuesta+cfonema
}

return(crespuesta)
}

function davalorfon2(cadena){
nlongitud=cadena.length
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido
var nGri=0

for (nlon=0;nlon<nlongitud;nlon++){
	cunicode=cadena.charAt(nlon)
    	nunicode=cadena.charCodeAt(nlon)
    	if (nunicode==8127){
    	   cunicode="'"
        }
        if (estaen(" ,.;-/=?¿:'\"",cunicode)>-1){
           cfonema=cunicode
            if (nGri==1){
               crespuesta=crespuesta+"}"
               nGri=0
            }
        }
        else{
    	nfon=buscasonido("CODUNI",nunicode,true)
    	if (nfon>0){
    	        if (nGri==0){
    	            crespuesta=crespuesta+"{$"
    	            nGri=1
                    }
    		iota=CODIOT[nfon]
    		mayuscula=CODMAY[nfon]
    		dieresis=CODDIE[nfon]
    		espiritu=CODESP[nfon]
    		acento=CODACC[nfon]
    		fonema=CODFON[nfon]
    		cdsc=NOMSON[nfon]
    		csonido=trim(cdsc)
    		cfonema=trim(cdsc.substring(0,1))
		if (fonema==7){cfonema="h"}
		if (fonema==24){cfonema="w"}
		if (fonema==8){cfonema="q"}
		if (fonema==6){cfonema="z"}
		if (fonema==21){cfonema="f"}
		if (fonema==22){cfonema="j"}
		if (fonema==14){cfonema="x"}
		if (fonema==23){cfonema="ps"}
		if (fonema==20){cfonema="y"}
		if (fonema==15){cfonema="o"}
		if (fonema==5){cfonema="e"}
    		if (estaen(csonido,"punto alto")==0){cfonema=":"}
    		if (estaen(csonido,"dseta")==0){cfonema="z"}
    		if (estaen(csonido,"suave")>1){cfonema=cfonema+"1"}
    		if (estaen(csonido,"spero")>1){cfonema=cfonema+"2"}
    		if (estaen(csonido,"agudo")>1){cfonema=cfonema+"3"}
    		if (estaen(csonido,"grave")>1){cfonema=cfonema+"4"}
    		if (estaen(csonido,"circunflejo")>1){cfonema=cfonema+"5"}
    		if (estaen(csonido,"resis")>1){cfonema=cfonema+"6"}
    		if (estaen(csonido,"suscrita")>1){cfonema=cfonema+"7"}
    		if (nfon==147){cfonema=" "}
    		if (mayuscula==1){cfonema=cfonema.toUpperCase()}
    	}
    	else {
    	     	if (nGri==1){
    	     	         crespuesta=crespuesta+"}"
    	     	         nGri=0
                         }
                cfonema=cadena.substring(nlon,nlon+1)
                }
    	}
	crespuesta=crespuesta+cfonema
}
if (nGri==1){
   crespuesta=crespuesta+"}"
}
return(crespuesta)
}


function dafoncodigo(cadena){
var nunicode=0
var cadunicode=""
var crespuesta=""
var cfonema
var csonido
var ofon=new ofonema
var ofonant=new ofonema

cadena=replaceAll(cadena,"y","u")
cadena=replaceAll(cadena,"Y","U")
cadena=replaceAll(cadena,"PS","Y")
cadena=replaceAll(cadena,"ps","y")
nlongitud=cadena.length

for (nlon=0;nlon<nlongitud;nlon++){
    clet=cadena.substring(nlon,nlon+1)
    npos=estaen("_123456789",clet)
    if (npos==-1){
       if (nlon>0){
          if (ofon.sigma){
             if (nlon<nlongitud){
              cpos=cadena.substring(nlon,nlon+1)
              if (estaen(",. :;",cpos)>-1){ofon.iota=3}
              else {ofon.iota=0}
              }
          }
           actualizafonema(ofon)
           crespuesta=crespuesta+ofon.cunicode
       }
       if (nlon<nlongitud){
          nascii=cadena.charCodeAt(nlon)
          ofon=creafonema(nascii)
       }
    }
    else {
       if  (npos==1){ofon.espiritu=1}
       if  (npos==2){ofon.espiritu=2}
       if  (npos==3){ofon.acento=1}
       if  (npos==4){ofon.acento=2}
       if  (npos==5){ofon.acento=3}
       if  (npos==6){ofon.dieresis=1}
       if  (npos==7){ofon.iota=1}
       if  (npos==8){ofon.acento=1}
    }
}
actualizafonema(ofon)
crespuesta=crespuesta+ofon.cunicode
return(crespuesta)
}

function dafoncodigo2(cadena){
nlongitud=cadena.length
cRespuesta=""
cResto=""
cGriego=""
nIniGri= cadena.indexOf("{$")
nFinGri= cadena.indexOf("}")

while (nIniGri>-1){
      cRespuesta=cRespuesta+cadena.substring(0,nIniGri)
      cGriego=cadena.substring(nIniGri+2)
      nFinGri=cGriego.indexOf("}")
      cGriego=cGriego.substring(0,nFinGri)
      cGriego=dafoncodigo(cGriego)
      cRespuesta=cRespuesta+cGriego
      cadena=cadena.substring(nIniGri+nFinGri+3)
      nIniGri= cadena.indexOf("{$")
}
cRespuesta=cRespuesta+cadena
return(cRespuesta)
}

function esfonemaoea(fonema){
noea=0
if(fonema=="o"){noea=959}
if(fonema=="e"){noea=949}
if(fonema=="a"){noea=945}
return noea
}

function esfonemavocal(fonema){
if (estaen("a;e;i;y;o;w;h;",fonema+";")>-1){return true}
else {return false}
}

function esfonemasigma(fonema){
if (fonema=="s"){return (true)}
else {return (false)}
}

function esfonemaiu(nasci){
   niu=0
   if (niu=="i"){niu=7985}
   if (niu=="y"){niu=8016}
return niu
}

function esfonemacompuesto(fonema){
   var ncom=0
   if (fonema=="k"){ncom=958}
   if (fonema=="p"){ncom=968}
   if (fonema=="d"){ncom=950}
   return (ncom)
}

function esdiacritico(nasci){
if (estaen(";56;57;222;186;191;59;",";"+nasci+";")>-1){return true}
else{return false}
}

function esteclamov(nasci){
lmovimiento=false
if (nasci>32 && nasci<41){lmovimiento=true}
if (nasci==46 || nasci==44 || nasci==8){lmovimiento=true}
return (lmovimiento)
}

function actualizafonema(fonema){
nprx=buscafonema(fonema.iota,fonema.mayuscula,fonema.dieresis,fonema.espiritu,fonema.acento,fonema.fonema)
fonema=cargafonema(fonema,nprx)
return (fonema)
}

function cargafonema(fonema,nnva){
fonema.iota=CODIOT[nnva]
fonema.mayuscula=CODMAY[nnva]
if (ndiacritico==0){
   if (lmay){fonema.mayuscula=1}
}
fonema.dieresis=CODDIE[nnva]
fonema.espiritu=CODESP[nnva]
fonema.acento=CODACC[nnva]
fonema.fonema=CODFON[nnva]
fonema.descripcion=NOMSON[nnva]
fonema.transcripcion=TRL[CODFON[nnva]+1]
fonema.nombre=NOMFON[CODFON[nnva]+1]
fonema.nasci=CODLET[nnva]
fonema.nunicode=CODUNI[nnva]
fonema.cunicode=String.fromCharCode(CODUNI[nnva])
fonema.esoea=esfonemaoea(fonema.transcripcion)
fonema.esiu=esfonemaiu(fonema.transcripcion)
fonema.esvocal=esfonemavocal(fonema.transcripcion)
fonema.espuntuacion=espausa(CODUNI[nnva])
fonema.sigma=esfonemasigma(fonema.transcripcion)
return fonema
}

function noesbuffer(nasci){
lbuffer=false
if (nasci>122 && nasci<188){
   lbuffer=true
}
else {
     if (nasci>191){lbuffer=true}
     if (estaen(";39;94;96;180;",";"+nasci+";")>-1){lbuffer=true}
     if (esdiacritico(nasci)){lbuffer=true}
}
return lbuffer
}

function espausa(nasci){
if (estaen(";32;59;44;46;58;63;0;188;190;",";"+nasci+";")>-1){return true}
else {return false}
}

function activaGriego(){
    lescribegriego=true
    niniciogriego=1
}

