//**********************************************************************
//*     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=true
var niniciogriego=0
var ndiacritico=0

if (cnavegador=="Netscape"){
window.captureEvents(Event.MOUSEMOVE | Event.MOUSEDOWN | Event.MOUSEUP | Event.KEYDOWN );
document.onmousemove=mueveraton
document.onkeydown=abajotecla
}

function abajotecla(e){
  nasc=e.which
  lmay=e.shiftKey
  lctr=e.ctrlKey
  if (nasc==113){
      if (lescribegriego){lescribegriego=false}
      else {
       lescribegriego=true
       niniciogriego=2
       window.status="Alfabeto latino. Pulsa [F2] para volver al griego."
       }
   }
  if (lescribegriego){
      lmovi=esteclamov(nasc)
      if (esdiacritico(nasc)){
         ndiacritico=nasc
         modificafonema(e.target)
      }
      else {
          ndiacritico=0
      }
  }
}

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 (!lescribegriego){window.status="Alfabeto latino. Pulsa [F2] para volver al griego."}
if (cnavegador=="Netscape" && 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)
          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
          }
     return false;
  }
}
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=codlet[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;}
if (!lescribegriego){
   window.status="Alfabeto latino. Pulsa [F2] para volver al griego."
   return false
   }
cltr=window.event.keyCode
lmay=window.event.shiftKey
lctr=window.event.ctrlKey
ndiacritico=0
if (cltr==17 || cltr==16){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){window.status=fonant.descripcion}
          orng.text=ccadena
       }
       else {window.status="No existe esa 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){window.status=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 (estaen(csonido,"eta")==0){cfonema="h"}
		if (estaen(csonido,"omega")==0){cfonema="w"}
		if (estaen(csonido,"zeta")==0){cfonema="q"}
		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,"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,"diéresis")>1){cfonema=cfonema+"6"}
		if (nfon==147){cfonema=" "}
	}
	else {cfonema=cadena.substring(nlon,nlon+1)}
	crespuesta=crespuesta+cfonema
}

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==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=nasc
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;46;58;63;0;188;190;",";"+nasci+";")>-1){return true}
else {return false}
}

