//================================================
// textFormatter script                                      
//================================================

/**
 * textFormatter v.1.0 script by Laisvunas Sopauskas: http://www.classicsunlocked.net/
 * Please keep this notice intact.
 *    
 * This script takes as an input a text of a work of classics (lines should be numbered 
 * and the end of each line should be marked by <br> tag), line prefix and line name, 
 *  and outputs for each line of text html table row (<tr> tag) within which 
 *  there are two table cells (<td> tags). In one of them there is line of text with line prefix stripped and
 *  wrapped in <a> tag which has id attribute consisting from line name and line number;  
 *  in another one there is a checkbox. Such table rows after wrapping them by <table> tags  are
 *  used in ClassicsUnlocked website at www.classicsunlocked.net for publishing texts of classics.
**/


/**
  * Following HTML should be inserted somewhere in body section of the web page:
  * <p>Line prefix</p>
  * <p><input id="prefixinput" type="text"></p>
  * <p>Line name</p>
  * <p id="linenameinput">
  * <input name="linenameinput" type="radio" checked value="verse" onfocus="document.getElementById('linenameother').style.display='none';"> verse 
  * <input name="linenameinput" type="radio" value="line" onfocus="document.getElementById('linenameother').style.display='none';"> line 
  * <input name="linenameinput" type="radio" value="other" onfocus="document.getElementById('linenameother').style.display='inline';"> other 
  * </p>
  * <p><input id="linenameother" type="text" style="display: none;"></p>
  * <p>Text input</p>
  * <textarea id="textinput"></textarea>
  * <p><button onclick="cuFormatText();">Format text</button></p>
  * <p><button onclick="document.getElementById('textinput').value=''; document.getElementById('prefixinput').value=''; document.getElementById('textoutput').value='';">Reset</button></p>
  * <p>Text output</p>
  * <textarea id="textoutput" readonly></textarea>
**/

function cuFormatText() {
var textinput;
var textoutput;
var prefixinput;
var textinputValue;
var prefixinputValue;
var textLinesArray;
var arrayElementString;
var textLinesArray2;
var lineNumber;
var lineOfText;
var formattedText;
var evalString;
var linenameinput;
var radioinputs;
var radiovalue;
var linename;
var linename2;
var linename2Array;
var linename2ArrayNew;
var linenameother;

textinput=document.getElementById('textinput');
textoutput=document.getElementById('textoutput');
textinputValue=textinput.value;
//alert('textinputValue: \n' + textinputValue);

prefixinput=document.getElementById('prefixinput');
prefixinputValue=prefixinput.value;
//alert('prefixinputValue: ' + prefixinputValue);

linenameinput=document.getElementById('linenameinput');
radioinputs=linenameinput.getElementsByTagName('input');
for (var j=0; j<radioinputs.length; j++) {
   if (radioinputs[j].checked) {radiovalue=radioinputs[j].value;}
}
//alert('radiovalue: ' + radiovalue);

if (radiovalue=='verse') {linename='verse_'}
else if (radiovalue=='line') {linename='line_'}
else if (radiovalue=='other') {
   linenameother=document.getElementById('linenameother');
   linename=linenameother.value+'_';
}
//alert('linename: ' + linename);


evalString='textinputValue.replace(/' + prefixinputValue + "/g, '')";
//alert('evalString: ' + evalString);

textinputValue=eval(evalString);
//textinputValue=textinputValue.replace(/IL.18./g, '');
textinputValue=textinputValue.replace(/\n/g, '');
//alert('textinputValue.length: ' + textinputValue.length);

textLinesArray=textinputValue.split('<br>');
//alert('textLinesArray.length: ' + textLinesArray.length);
//alert('textLinesArray[13]: ' + textLinesArray[13]);

textLinesArray2=new Array;

for (var m=0; m<textLinesArray.length; m++) {
   arrayElementString=textLinesArray[m];
   if (arrayElementString.length>10) {textLinesArray2.push(textLinesArray[m]);}
}
alert('Number of lines: ' + textLinesArray2.length);

for (var k=0; k<textLinesArray2.length; k++) {
   if (textLinesArray2[k].charAt(1)!='0' && textLinesArray2[k].charAt(1)!='1' && textLinesArray2[k].charAt(1)!='2' && textLinesArray2[k].charAt(1)!='3' && textLinesArray2[k].charAt(1)!='4' && textLinesArray2[k].charAt(1)!='5' && textLinesArray2[k].charAt(1)!='6' && textLinesArray2[k].charAt(1)!='7' && textLinesArray2[k].charAt(1)!='8' && textLinesArray2[k].charAt(1)!='9') {
      lineNumber=textLinesArray2[k].substr(0, 1);
      lineOfText=textLinesArray2[k].substr(2);
      //alert('lineNumber: ' + lineNumber);
      //alert('lineOfText: ' + lineOfText); 
   }
   else if (textLinesArray2[k].charAt(2)!='0' && textLinesArray2[k].charAt(2)!='1' && textLinesArray2[k].charAt(2)!='2' && textLinesArray2[k].charAt(2)!='3' && textLinesArray2[k].charAt(2)!='4' && textLinesArray2[k].charAt(2)!='5' && textLinesArray2[k].charAt(2)!='6' && textLinesArray2[k].charAt(2)!='7' && textLinesArray2[k].charAt(2)!='8' && textLinesArray2[k].charAt(2)!='9') {
      lineNumber=textLinesArray2[k].substr(0, 2);
      lineOfText=textLinesArray2[k].substr(3);
      //alert('lineNumber: ' + lineNumber);
      //alert('lineOfText: ' + lineOfText); 
   }
   else if (textLinesArray2[k].charAt(3)!='0' && textLinesArray2[k].charAt(3)!='1' && textLinesArray2[k].charAt(3)!='2' && textLinesArray2[k].charAt(3)!='3' && textLinesArray2[k].charAt(3)!='4' && textLinesArray2[k].charAt(3)!='5' && textLinesArray2[k].charAt(3)!='6' && textLinesArray2[k].charAt(3)!='7' && textLinesArray2[k].charAt(3)!='8' && textLinesArray2[k].charAt(3)!='9') {
      lineNumber=textLinesArray2[k].substr(0, 3);
      lineOfText=textLinesArray2[k].substr(4);
      //alert('lineNumber: ' + lineNumber);
      //alert('lineOfText: ' + lineOfText); 
   }
   else if (textLinesArray2[k].charAt(4)!='0' && textLinesArray2[k].charAt(4)!='1' && textLinesArray2[k].charAt(4)!='2' && textLinesArray2[k].charAt(4)!='3' && textLinesArray2[k].charAt(4)!='4' && textLinesArray2[k].charAt(4)!='5' && textLinesArray2[k].charAt(4)!='6' && textLinesArray2[k].charAt(4)!='7' && textLinesArray2[k].charAt(4)!='8' && textLinesArray2[k].charAt(4)!='9') {
      lineNumber=textLinesArray2[k].substr(0, 4);
      lineOfText=textLinesArray2[k].substr(5);
      //alert('lineNumber: ' + lineNumber);
      //alert('lineOfText: ' + lineOfText); 
   }

linename2=linename + lineNumber;
//alert('linename2: ' + linename2);
linename2Array=linename2.split('');
//alert('linename2Array: ' + linename2Array);
linename2ArrayNew=new Array;
for (var z=0; z<linename2Array.length; z++) {
   if (linename2Array[z]=='a' || linename2Array[z]=='b' || linename2Array[z]=='c' || linename2Array[z]=='d' || linename2Array[z]=='e' || linename2Array[z]=='f' || linename2Array[z]=='g' || linename2Array[z]=='h' || linename2Array[z]=='i' || linename2Array[z]=='j' || linename2Array[z]=='k' || linename2Array[z]=='l' || linename2Array[z]=='m' || linename2Array[z]=='n' || linename2Array[z]=='o' || linename2Array[z]=='p' || linename2Array[z]=='q' || linename2Array[z]=='r' || linename2Array[z]=='s' || linename2Array[z]=='t' || linename2Array[z]=='u' || linename2Array[z]=='v' || linename2Array[z]=='w' || linename2Array[z]=='x' || linename2Array[z]=='y' || linename2Array[z]=='z' || linename2Array[z]=='0' || linename2Array[z]=='1' || linename2Array[z]=='2' || linename2Array[z]=='3' || linename2Array[z]=='4' || linename2Array[z]=='5' || linename2Array[z]=='6' || linename2Array[z]=='7' || linename2Array[z]=='8' || linename2Array[z]=='9' || linename2Array[z]=='_') {linename2ArrayNew.push(linename2Array[z]);}
}
//alert('linename2ArrayNew: ' + linename2ArrayNew);
linename2='';
for (var z=0; z<linename2ArrayNew.length; z++) {linename2=linename2.concat(linename2ArrayNew[z]);}
//alert('linename2: ' + linename2);

  textLinesArray2[k]='<tr class="line_off">\n' + '<td class="checkboxtd">\n' + '<input type="checkbox" />\n' + '</td>\n' + '<td class="lineoftext">\n' + '<a class="pageanchor" id="' + linename2 + '">' + lineNumber + '. ' + lineOfText + '</a>\n' + '</td>\n' + '</tr>\n\n';
   //alert('textLinesArray2[' + k + ']: \n' + textLinesArray2[k]);
}

formattedText='';
for (var n=0; n<textLinesArray2.length; n++) {formattedText=formattedText.concat(textLinesArray2[n]);}

textoutput.value=formattedText;
}
