﻿
function create_form(d,txt,lang,gn,tgt){
//Ponemos src del iframe dinámicamente para evitar error de javascript.
d.getElementById(tgt).location='http://vozme.com/text2voice.php';
//tgt = 'voice_1234';
//Quitamos todo elemento html al texto.
txt = stripHTML(txt);
//Eliminamos caracteres de salto de línea y tabulación.
txt = formateaVozMe(txt);

//Formulario.
fx_2g=d.createElement('form');
d.body.appendChild(fx_2g);
fx_2g.target=tgt;
fx_2g.method='POST';//'GET'
fx_2g.action='http://vozme.com/text2voice.php';
//text
t=d.createElement('input');
t.name='text';
t.type='hidden';
t.value=txt;
fx_2g.appendChild(t);
//lang
l=d.createElement('input');
l.name='lang';
l.type='hidden';
l.value=lang;
fx_2g.appendChild(l);
//gn
g=d.createElement('input');
g.name='gn';
g.type='hidden';
g.value=gn;
fx_2g.appendChild(g);
//interface
i=d.createElement('input');
i.name='interface';
i.type='hidden';
i.value='full';
fx_2g.appendChild(i);
//submit
//window.open('', tgt, 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes');
frame = d.getElementById('frameEspere');
frame.style.visibility = "visible";
frame.style.display = "block";
frame.focus();
setTimeout('ocultarFrame(frame)', (txt.length * 2));
fx_2g.submit();
delete fx_2g;
return false;
}

function ocultarFrame(frame){
frame.style.visibility = "hidden";
//frame.style.display = "none";
}

function get_selection(){
var lang = arguments[0] || '';
var gn = arguments[1] || '';
var tgt= 'frameVoz';//'voice_'+parseInt(Math.random()*100000);
var d=window.document;
if(window.getSelection){
 txt=window.getSelection();
} else if(d.getSelection){
 txt=d.getSelection();
} else if(d.selection){
 txt=d.selection.createRange().text;
} else{
 txt='';
}
create_form(d,txt,lang,gn,tgt);
return false;
}


function get_id(id){
var lang = arguments[1] || '';
var gn = arguments[2] || '';
var tgt= 'frameVoz';//arguments[3] || 'voice_'+parseInt(Math.random()*100000);
var d=window.document;
var txt='';
txt=d.getElementById(id).innerHTML;

if(txt == ''){
    txt = d.getElementById(id).value;
    if(txt == ''){
        return false;
    }
}

create_form(d,txt,lang,gn,tgt);
return false;
}


function get_blogger(id){
var lang = arguments[1] || '';
var gn = arguments[2] || '';
var tgt= 'frameVoz';//'voice_'+parseInt(Math.random()*100000);
var d=window.document;
var txt='';
pN=d.getElementsByName(id)[0].parentNode;
for(n=0;n<pN.childNodes.length;n++){
    if(pN.childNodes[n].className == 'post-title entry-title' || pN.childNodes[n].className == 'post-title' || pN.childNodes[n].className == 'post-body entry-content' || pN.childNodes[n].className == 'post-body'){
        txt=txt + ' ' + pN.childNodes[n].innerHTML;
    }
}
create_form(d,txt,lang,gn,tgt);
return false;
}


function get_contenido(){
var lang = arguments[0] || '';
var gn = arguments[1] || '';
var tgt= 'frameVoz';
var d=window.document;
var txt='';
var temp='';
var clase = 'textoEscuchar';

var elementos = d.getElementsByName(clase);

//Se agrega el texto de todos los elementos que haya para escuchar.
for(i = 0; i < elementos.length; i++){
    temp = elementos[i].innerHTML;
    if(temp != ''){
        txt = txt + temp;
    }else{
        temp = elementos[i].value;
        if(temp != ''){
            txt = txt + temp;
        }
    }   
}
//Si hay algo para escuchar tras comprobar todos los elementos, lo escuchamos y si no, salimos.
if(txt != ''){
    create_form(d,txt,lang,gn,tgt);
}
return false;
}

//Función para eliminar los tags html para que se genere el audio en vozme.
function stripHTML(cadena)
{
cadena = cadena.replace(/&nbsp;/gi,'');
cadena = cadena.replace(/<\/h1>/g,'</h1>.');
return cadena.replace(/<[^>]+>/g,'');
}

//Función para que no haya caracteres de salto de línea ni tabuladores, de tal manera que se enere el audio en vozme.
function formateaVozMe(cadena)
{  
   //alert('Cadena inicial: \n' + cadena);
     //Eliminamos los saltos de línea y retornos de carro.
     cadena = cadena.replace(new RegExp('\\n','gi'),'.');
     cadena = cadena.replace(new RegExp('\\r','gi'),'');
     cadena = cadena.replace(new RegExp('\\t','gi'),'');

     //Eliminamos los puntos que quedan sueltos.
     while(cadena.indexOf(' . ') != -1){
     cadena = cadena.replace(/ \. /g,'');
     }
     //sustituimos los puntos y coma por coma, y también la barra vertical.
     cadena = cadena.replace(/;/g,',');
     cadena = cadena.replace(/\|/g,',');
     //sustituimos dos puntos por punto simple para que se lea correctamente.
     cadena = cadena.replace(/:/g,'.');

     var aux = '';
     var caracter;
     var ini = false;
     var anteriorEsPunto = false;
     //Ahora hacemos un recorridos por los caracteres del texto y sustituimos el resto de caracteres no aceptados por vozme.
     for(var i = 0, ini = 0; i < cadena.length; i++){
        //Así eliminamos todos los puntos y espacios del comienzo
        if((ini == false) && (!/[áéíóúña-z\d]$/i.test((cadena.charAt(i))))){
            caracter = '';
        }else{
            ini = true;
            // Si ya no hemos pasado la primera palabra, no permitimos puntos seguidos.
            if(cadena.charAt(i) == '.'){
                if(anteriorEsPunto){
                    caracter = '';
                }else {
                    anteriorEsPunto = true;
                    caracter = cadena.charAt(i);
                }    
            }else{ //Si el siguiente carácter no es un punto, lo procesamos como corresponda.
              
                anteriorEsPunto = false;
                caracter = cadena.charAt(i);
            
                if(cadena.charAt(i) == '(')
                {
                    caracter = ',';
                }
                if(cadena.charAt(i) == ')')
                {
                    caracter = ',';
                }
                if(cadena.charAt(i) == '\'')
                {
                    caracter = ' ';
                }
                if(cadena.charAt(i) == '"')
                {
                    caracter = ' ';
                }
            }
        }
        aux = aux + caracter;
     }

     //Ponemos espacio tras los puntos y tras las comas para que se lea bien el texto.
     while(aux.indexOf(' . ') != -1){
     aux = aux.replace(/ \. /gi,'.');
     }
     while(aux.indexOf(' , ') != -1){
        aux = aux.replace(/ , /gi,',');
     }

     while((aux.indexOf(' .') != -1) || (aux.indexOf('. ') != -1)){
        aux = aux.replace(/ \.|\. /gi,'.');
     }
     while((aux.indexOf(' ,') != -1) || (aux.indexOf(', ') != -1)){
        aux = aux.replace(/ ,|, /gi,',');
     }
     
     while((aux.indexOf(',.') != -1) || (aux.indexOf('.,') != -1)){
        aux = aux.replace(/,\.|\.,/gi,'.')
     }

     while(aux.indexOf('..') != -1){
     aux = aux.replace(/\.\./gi,'.');
     }    
     
     aux = aux.replace(/501.930,28/g, 'quinientos un mil novecientos treinta coma veintiocho');
     
     aux = aux.replace(/\./gi, '. ');
     aux = aux.replace(/,/gi, ', ');
     
     //Replaces necesarios: la cadenas siguientes causan que no se genere el audio, así que las cambio a mano.
     aux = aux.replace(/S01/gi, 'S cero uno');
     aux = aux.replace(/S02/gi, 'S cero dos');
     aux = aux.replace(/S03/gi, 'S cero tres');
     aux = aux.replace(/S04/gi, 'S cero cuatro');
     aux = aux.replace(/S05/gi, 'S cero cinco');
     aux = aux.replace(/S06/gi, 'S cero seis');
     aux = aux.replace(/S07/gi, 'S cero siete');
     aux = aux.replace(/S08/gi, 'S cero ocho');
     aux = aux.replace(/S09/gi, 'S cero nueve');
     aux = aux.replace(/S10/gi, 'S diez');
     aux = aux.replace(/S11/gi, 'S once');
     
     aux = aux.replace(/SR01/gi, 'S R cero uno');
     aux = aux.replace(/SR02/gi, 'S R cero dos');
     aux = aux.replace(/SR03/gi, 'S R cero tres');
     
     aux = aux.replace(/AU01/gi, 'AU cero uno');
     aux = aux.replace(/AU02/gi, 'AU cero dos');
     aux = aux.replace(/AU03/gi, 'AU cero tres');
     
     aux = aux.replace(/RP01/gi, 'R P cero uno');
     aux = aux.replace(/RP02/gi, 'R P cero dos');
     aux = aux.replace(/RP03/gi, 'R P cero tres');
     
     //Pongo números acabados en 1 y seguidos de punto, porque vozMe si encuentra la cadena "1." no saca el audio, aparentemente.
     //Imposible que quede bien de esta manera pero bueno.
     /*aux = aux.replace(/11111\./gi, 'ciento diez mil ciento once.');
     aux = aux.replace(/11111\./gi, 'diez mil ciento once.');
     aux = aux.replace(/1111\./gi, 'mil ciento once.');
     aux = aux.replace(/111\./gi, 'ciento once.');
     aux = aux.replace(/11\./gi, 'once.');
     aux = aux.replace(/1\./gi, 'uno.');*/
     aux = aux.replace(/1\./gi, '1 o.');
     
     
     
     //Números Ordinales
     aux = aux.replace(/nº/gi, 'número');
     // MUCHO OJO: el caracter '°' (\u00B0) que se busca en el texto no es el del teclado, es copiado de la web. 
     //el del teclado es 'º', aparentemente idéntico pero es diferente en relidad.
     
     //Reemplazamos todos los caracteres de la página por el del teclado.
     while(aux.indexOf('\u00B0') != -1){
        aux = aux.replace('\u00B0', 'º');
     }
     //Estos tienen el del teclado º
     aux = aux.replace(/1º|1\. º|1 º/g, 'primero');
     aux = aux.replace(/2º|2\. º|2 º/gi, 'segundo');
     aux = aux.replace(/3º|3\. º|3 º/gi, 'tercero');
     aux = aux.replace(/4º|4\. º|4 º/gi, 'cuarto');
     aux = aux.replace(/5º|5\. º|5 º/gi, 'quinto');
     aux = aux.replace(/6º|6\. º|6 º/gi, 'sexto');
     aux = aux.replace(/7º|7\. º|7 º/gi, 'séptimo');
     aux = aux.replace(/8º|8\. º|8 º/gi, 'octavo');
     aux = aux.replace(/9º|9\. º|9 º/gi, 'noveno');
     aux = aux.replace(/10º|10\. º|10 º/gi, 'décimo');
     aux = aux.replace(/11º|11\. º|11 º/gi, 'undécimo');
     aux = aux.replace(/12º|12\. º|12 º/gi, 'duodécimo');
     aux = aux.replace(/13º|13\. º|13 º/gi, 'decimotercero');
     aux = aux.replace(/14º|14\. º|14 º/gi, 'decimocuarto');
     aux = aux.replace(/15º|15\. º|15 º/gi, 'decimoquinto');
     aux = aux.replace(/16º|16\. º|16 º/gi, 'decimosexto');
     aux = aux.replace(/17º|17\. º|17 º/gi, 'decimoséptimo');
     aux = aux.replace(/18º|18\. º|18 º/gi, 'decimooctavo');
     aux = aux.replace(/19º|19\. º|19 º/gi, 'decimonoveno');
     aux = aux.replace(/20º|20\. º|20 º/gi, 'vigésimo');
     aux = aux.replace(/21º|21\. º|21 º/gi, 'vigesimoprimero');
     aux = aux.replace(/22º|22\. º|22 º/gi, 'vigesimosegundo');
     aux = aux.replace(/23º|23\. º|23 º/gi, 'vigesimotercero');
     aux = aux.replace(/24º|24\. º|24 º/gi, 'vigesimocuarto');
     aux = aux.replace(/25º|25\. º|25 º/gi, 'vigesimoquinto');
     aux = aux.replace(/26º|26\. º|26 º/gi, 'vigesimosexto');
     aux = aux.replace(/27º|27\. º|27 º/gi, 'vigesimoséptimo');
     aux = aux.replace(/28º|28\. º|28 º/gi, 'vigesimooctavo');
     aux = aux.replace(/29º|29\. º|29 º/gi, 'vigesimonoveno');
     aux = aux.replace(/30º|30\. º|30 º/gi, 'trigésimo');
     aux = aux.replace(/31º|31\. º|31 º/gi, 'trigesimoprimero');
     aux = aux.replace(/32º|32\. º|32 º/gi, 'trigesimosegundo');
     aux = aux.replace(/33º|33\. º|33 º/gi, 'trigesimotercero');
     aux = aux.replace(/34º|34\. º|34 º/gi, 'trigesimocuarto');
     aux = aux.replace(/35º|35\. º|35 º/gi, 'trigesimoquinto');
     aux = aux.replace(/36º|36\. º|36 º/gi, 'trigesimosexto');
     aux = aux.replace(/37º|37\. º|37 º/gi, 'trigesimoséptimo');
     aux = aux.replace(/38º|38\. º|38 º/gi, 'trigesimooctavo');
     aux = aux.replace(/39º|39\. º|39 º/gi, 'trigesimonoveno');
     aux = aux.replace(/40º|40\. º|40 º/gi, 'cuadragésimo');
     aux = aux.replace(/41º|41\. º|41 º/gi, 'cuadragesimoprimero');
     aux = aux.replace(/42º|42\. º|42 º/gi, 'cuadragesimosegundo');
     aux = aux.replace(/43º|43\. º|43 º/gi, 'cuadragesimotercero');
     aux = aux.replace(/44º|44\. º|44 º/gi, 'cuadragesimocuarto');
     aux = aux.replace(/45º|45\. º|45 º/gi, 'cuadragesimoquinto');
     aux = aux.replace(/46º|46\. º|46 º/gi, 'cuadragesimosexto');
     aux = aux.replace(/47º|47\. º|47 º/gi, 'cuadragesimoséptimo');
     aux = aux.replace(/48º|48\. º|48 º/gi, 'cuadragesimooctavo');
     aux = aux.replace(/49º|49\. º|49 º/gi, 'cuadragesimonoveno');
     aux = aux.replace(/50º|50\. º|50 º/gi, 'quincuagésimo');
     
     //En femenino
     aux = aux.replace(/1ª|1\. ª|1 ª/g, 'primera');
     aux = aux.replace(/2ª|2\. ª|2 ª/gi, 'segunda');
     aux = aux.replace(/3ª|3\. ª|3 ª/gi, 'tercera');
     aux = aux.replace(/4ª|4\. ª|4 ª/gi, 'cuarta');
     aux = aux.replace(/5ª|5\. ª|5 ª/gi, 'quinta');
     aux = aux.replace(/6ª|6\. ª|6 ª/gi, 'sexta');
     aux = aux.replace(/7ª|7\. ª|7 ª/gi, 'séptima');
     aux = aux.replace(/8ª|8\. ª|8 ª/gi, 'octava');
     aux = aux.replace(/9ª|9\. ª|9 ª/gi, 'novena');
     aux = aux.replace(/10ª|10\. ª|10 ª/gi, 'décima');
     aux = aux.replace(/11ª|11\. ª|11 ª/gi, 'undécima');
     aux = aux.replace(/12ª|12\. ª|12 ª/gi, 'duodécima');
     aux = aux.replace(/13ª|13\. ª|13 ª/gi, 'decimotercera');
     aux = aux.replace(/14ª|14\. ª|14 ª/gi, 'decimocuarta');
     aux = aux.replace(/15ª|15\. ª|15 ª/gi, 'decimoquinta');
     aux = aux.replace(/16ª|16\. ª|16 ª/gi, 'decimosexta');
     aux = aux.replace(/17ª|17\. ª|17 ª/gi, 'decimoséptima');
     aux = aux.replace(/18ª|18\. ª|18 ª/gi, 'decimooctava');
     aux = aux.replace(/19ª|19\. ª|19 ª/gi, 'decimonovena');
     aux = aux.replace(/20ª|20\. ª|20 ª/gi, 'vigésima');
     aux = aux.replace(/21ª|21\. ª|21 ª/gi, 'vigesimoprimera');
     aux = aux.replace(/22ª|22\. ª|22 ª/gi, 'vigesimosegunda');
     aux = aux.replace(/23ª|23\. ª|23 ª/gi, 'vigesimotercera');
     aux = aux.replace(/24ª|24\. ª|24 ª/gi, 'vigesimocuarta');
     aux = aux.replace(/25ª|25\. ª|25 ª/gi, 'vigesimoquinta');
     aux = aux.replace(/26ª|26\. ª|26 ª/gi, 'vigesimosexta');
     aux = aux.replace(/27ª|27\. ª|27 ª/gi, 'vigesimoséptima');
     aux = aux.replace(/28ª|28\. ª|28 ª/gi, 'vigesimooctava');
     aux = aux.replace(/29ª|29\. ª|29 ª/gi, 'vigesimonovena');
     aux = aux.replace(/30ª|30\. ª|30 ª/gi, 'trigésima');
     aux = aux.replace(/31ª|31\. ª|31 ª/gi, 'trigesimoprimera');
     aux = aux.replace(/32ª|32\. ª|32 ª/gi, 'trigesimosegunda');
     aux = aux.replace(/33ª|33\. ª|33 ª/gi, 'trigesimotercera');
     aux = aux.replace(/34ª|34\. ª|34 ª/gi, 'trigesimocuarta');
     aux = aux.replace(/35ª|35\. ª|35 ª/gi, 'trigesimoquinta');
     aux = aux.replace(/36ª|36\. ª|36 ª/gi, 'trigesimosexta');
     aux = aux.replace(/37ª|37\. ª|37 ª/gi, 'trigesimoséptima');
     aux = aux.replace(/38ª|38\. ª|38 ª/gi, 'trigesimooctava');
     aux = aux.replace(/39ª|39\. ª|39 ª/gi, 'trigesimonovena');
     aux = aux.replace(/40ª|40\. ª|40 ª/gi, 'cuadragésima');
     aux = aux.replace(/41ª|41\. ª|41 ª/gi, 'cuadragesimoprimera');
     aux = aux.replace(/42ª|42\. ª|42 ª/gi, 'cuadragesimosegunda');
     aux = aux.replace(/43ª|43\. ª|43 ª/gi, 'cuadragesimotercera');
     aux = aux.replace(/44ª|44\. ª|44 ª/gi, 'cuadragesimocuarta');
     aux = aux.replace(/45ª|45\. ª|45 ª/gi, 'cuadragesimoquinta');
     aux = aux.replace(/46ª|46\. ª|46 ª/gi, 'cuadragesimosexta');
     aux = aux.replace(/47ª|47\. ª|47 ª/gi, 'cuadragesimoséptima');
     aux = aux.replace(/48ª|48\. ª|48 ª/gi, 'cuadragesimooctava');
     aux = aux.replace(/49ª|49\. ª|49 ª/gi, 'cuadragesimonovena');
     aux = aux.replace(/50ª|50\. ª|50 ª/gi, 'quincuagésima');
     
     
     //Palabras abreviadas.
     aux = aux.replace(/art\./gi, 'artículo');
     aux = aux.replace(/D\./gi, 'Don');
     aux = aux.replace(/Dª\.|Dª/gi, 'Doña');
     aux = aux.replace(/Mª/gi, 'María');
     aux = aux.replace(/Ilmo\./gi, 'Ilustrísimo');
     aux = aux.replace(/Excmo\./gi, 'Excelentísimo');
     aux = aux.replace(/IVTM/g, 'i uve te eme');
     aux = aux.replace(/OVC/g, 'o uve ce');
     aux = aux.replace(/CSV/g, 'ce ese uve');
     aux = aux.replace(new RegExp('C/', 'g'), 'calle');
     aux = aux.replace(/Ext\./g, 'extensión');
     aux = aux.replace(/Telf\./g, 'teléfono');
     aux = aux.replace(/www\./g, 'uve doble uve doble uve doble punto');
     aux = aux.replace(/\. com/g, ' punto com');
     aux = aux.replace(/\. es/g, ' punto es');
     aux = aux.replace(/\. net/g, ' punto net');
     aux = aux.replace(/\. org/g, ' punto o erre ge');
     aux = aux.replace(/O\. A\. G\. E\. R/g, 'oager');
     aux = aux.replace(/LOPD/g, 'Ley Orgánica de Protección de Datos');
     aux = aux.replace(/Pz\./g, 'plaza');
     aux = aux.replace(/Escuchar Contenido = L/g, 'Escuchar Contenido = ele. ');
     
     
     //alert('Cadena final: \n' + aux);
     cadena = aux;
     return cadena;
} 



