//********************************************************
//*           SOPA DE LETRAS : FUNCIONES JAVASCRIPT      *
//*           DESARROLLADAS POR Jesús Quílez Bielsa      *
//*           jquilez@roble.pntic.mec.es                 *
//*           Y EL GRUPO PALLADIUM                       *
//********************************************************
var cprueba=""
var csepcar = ""
var csepcad = ""
var ngriego = 0
var ncastot = 0
var acasillas = new Array()
var cletras = "AABCDEFGHIJKLMNOPQRSTUVXYZ"
function dapalabra(cadena,separador){
if (!cadena){}
else {
      csepcad=cadena
      if (!separador){csepcar=";"}
      else {csepcar=separador}
}
npos=estaen(csepcad,";")
if (npos==0){
   csepcad=csepcad.substring(1)
   npos=estaen(csepcad,";")
}
if (npos>0){
   cpalabra=csepcad.substring(0,npos)
   csepcad=csepcad.substring(npos+1)
}
else {cpalabra=""}
return(cpalabra)
}

function verdefiniciones(){
}

function iniciasopa(){
verdiv("menesp")
ncastot=document.QA0.cs00.length-1
limpiatabla()
if (lgriego){
   if (ngriego==0){
      cvalidas=listagriego(cvalidas)
      ctrampas=listagriego(ctrampas)
   }
   ++ngriego
}
lval=false
while (!lval){
      limpiacasillas()
      lval=colocapalabra(cvalidas)
      lval=colocapalabra(ctrampas)
}
for (ncasact=0;ncasact<=ncastot;++ncasact){
    document.QA0.cs00[ncasact].value=acasillas[ncasact]
}
rellenatabla()
ocudiv("menesp")
}

function limpiacasillas(){
for (ncasact=0;ncasact<=ncastot;++ncasact){
    acasillas[ncasact]=""
}
}

function colocapalabra(listado){
cpalnva=dapalabra(listado)
lencaja=true
while (cpalnva>""){
     lencaja=false
     while (!lencaja){
           cpalact=cpalnva
           nlonpal=cpalact.length
           ncaract=0
           nvpal=daazar(2,1)
           if (nvpal==2){
              cpalact=inviertepalabra(cpalact)
           }
           nzpal=daazar(3,1)
           if (nzpal==1) {
              nxpal=daazar(parseInt(ncolsop/2),1)
              nypal=daazar(nfilsop,1)
           }
           if (nzpal==2) {
              nxpal=daazar(ncolsop,1)
              nypal=daazar(parseInt(nfilsop/2),1)
           }
           if (nzpal==3) {
              nxpal=daazar(ncolsop,1)
              nypal=daazar(parseInt(nfilsop/2),1)
           }
           if (nzpal>0 && nzpal<4){
              lencaja=pruebapalabra(nzpal,nxpal,nypal,nlonpal,cpalact)
              if (lencaja){
                 ponpalabra(nzpal,nxpal,nypal,nlonpal,cpalact)
              }
           }
     }
     cpalnva=dapalabra()
}
return (lencaja)
}

function pruebapalabra(nz,nx,ny,nlon,cpal){
lvale=true
     if (nz==1) {
          while (nx+nlon>=ncolsop){--nx}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=(ny*ncolsop)+nx+ncaract
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra,ncasilla)
                if (!lvale){return (lvale)}
          }
     }
     if (nz==2) {
          while (ny+nlon>=nfilsop){--ny}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=((ny+ncaract)*ncolsop)+nx
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra,ncasilla)
                if (!lvale){return (lvale)}
          }
     }
     if (nz==3) {
          while (nx+nlon>=ncolsop){--nx}
          while (ny+nlon>=nfilsop){--ny}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=((ny+ncaract)*ncolsop)+nx+ncaract
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra,ncasilla)
                if (!lvale){return (lvale)}
          }
       }
       return (lvale)
}

function ponpalabra(nz,nx,ny,nlon,cpal){
lvale=true
     if (nz==1) {
          while (nx+nlon>=ncolsop){--nx}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=(ny*ncolsop)+nx+ncaract
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra)
                if (lvale){acasillas[ncasilla]=cletra}
                if (!lvale){return (lvale)}
          }
     }
     if (nz==2) {
          while (ny+nlon>=nfilsop){--ny}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=((ny+ncaract)*ncolsop)+nx
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra)
                if (lvale){acasillas[ncasilla]=cletra}
                if (!lvale){return (lvale)}
          }
     }
     if (nz==3) {
          while (nx+nlon>=ncolsop){--nx}
          while (ny+nlon>=nfilsop){--ny}
          for (ncaract=0;ncaract<nlon;++ncaract){
                ncasilla=((ny+ncaract)*ncolsop)+nx+ncaract
                ccaracter=acasillas[ncasilla]
                cletra=cpal.substring(ncaract,ncaract+1)
                lvale=valeletra(ccaracter,cletra)
                if (lvale){acasillas[ncasilla]=cletra}
                if (!lvale){return (lvale)}
          }
       }
       return (lvale)
}


function valeletra(cactual,cnueva,casilla){
    if(casilla>ncastot){
          return (false)
        }
    if (cactual>""){
       if (cactual !=  cnueva){
           return (false)
       }
    }
    return(true)
}

function rellenatabla(){
nceltot=document.QA0.cs00.length
for (ncasilla=0;ncasilla<nceltot;++ncasilla){
    cvalor=document.QA0.cs00[ncasilla].value
    if (cvalor==""){
       nazar=daazar(25,1)
       cletra=cletras.substring(nazar,nazar+1)
       if (lgriego){
          cletra=verengriego(cletra)
       }
       document.QA0.cs00[ncasilla].value=cletra
    }
}
}
function limpiatabla(){
nceltot=document.QA0.cs00.length
for (ncasilla=0;ncasilla<nceltot;++ncasilla){
       document.QA0.cs00[ncasilla].value=""
}
}
function inviertepalabra(palabra){
nlon=palabra.length
cnueva=""
for (nlet=nlon;nlet>0;--nlet){
    cnueva=cnueva+palabra.substring(nlet-1,nlet)
}
return(cnueva)
}

function verengriego(cadena){
ctxt=cadena
nasc=ctxt.charCodeAt(0);
nltr=0
nltr=buscaletras("codasc",nasc,true)
if (nltr>0){
   npst=codlet[nltr]
   nnva=buscasonido("CODLET",npst,true)
}
iota=0
mayuscula=1
dieresis=0
espiritu=0
acento=0
fonema=CODFON[nnva]
nprx=buscafonema(iota,mayuscula,dieresis,espiritu,acento,fonema)
nltt=CODUNI[nprx]
cltr=String.fromCharCode(nltt)
return (cltr)
}

function listagriego(cadena){
var nlon=cadena.length
cadenagriego=""
for (ncaract=0;ncaract<nlon;++ncaract){
    ccaract=cadena.substring(ncaract,ncaract+1)
    if (ccaract==";"){cadenagriego=cadenagriego+";"}
    else {cadenagriego=cadenagriego+verengriego(ccaract)}
}
return (cadenagriego)
}

