﻿function previewText() {
var theField = document.getElementById('storyText');
var theProcessedText = theField.value;
var theRegExpr, regExprRep;

var lineTags = new Array('{block}', '{\\/block}', '{notice}', '{\\/notice}', '{end-note}', '{\\/end-note}', '{divi}', '{\\/divi}', '{divb}', '{\\/divb}', '{divbi}', '{\\/divbi}', '{ol}', '{\\/ol}', '{ul}', '{\\/ul}', '{_', '_}', '{\\*', '\\*}');
var lineTagsRep = new Array('{block}', '{/block}', '{notice}', '{/notice}', '{end-note}', '{/end-note}', '{divi}', '{/div}', '{divb}', '{/div}', '{divbi}', '{/div}', '{ol}', '{/ol}', '{ul}', '{/ul}', '{_', '_}', '{*', '*}');

var cleanUpStrings =  new Array(/{(1|2)(r|c)*}/gi, /\n  +/gi, / +/gi, /\r+/gi, /\t/g, /{c} *\*/gi, / +\n/gi, /- +-/gi, /- +-/gi, /\n[\-_\+~]+\n/gi, /[´‚‘’`]/gi, /[„‰”“]/gi, /…/gi, /,"/gi, /,/gi, /, (\d+)/gi, /, %\"/gi, /--+/gi, / +,/gi, / +\./gi, /[ \t]+\*/g, /\*\s+\*/g, /{block}/gi, /{\/block}/gi, /{br}\n\n+/gi, /\n  +/gi, /\n\n+/gi, /\n\n/gi, /\n/gi, /\{pbr\}/gi, /\n\n/gi, / ([\.,!\?])/gi, /\.\.+"/gi, /\.\.+/gi, / ~"/gi, /(\D)\.(\d)/gi, / +/gi, / \n/gi, /{[^}]+}Chapter/gi, /{(b|i|cite|strong|em|sup)}([^{]+?)\n/gi, /{br} *{br}/gi);

var cleanUpReplacements = new Array('','\n\n', ' ', '\n', '   ', '*','\n','--', '--','\n****\n', '\'', '\"', '...', ',%\"', ', ', ',$1',',\"', '--', ', ', '.', '*', '**', '\n\n{block}\n\n', '\n\n{/block}\n\n', '\n\n', '\n\n', '\n\n', '{pbr}', ' ', '\n\n', '\n', '$1', '...~\"', '... ', '\"', '$1 .$2', ' ', '\n', 'Chapter', '{$1}$2{/$1}\n', '\n\n');

var pairOpen = new Array('{b}', '{i}', '{block}', '{notice}', '{end-note}', '{_', '_}','{*','*}', '{strong}', '{cite}', '{em}', '{sup}', '{str}', '{tt}', '{blue}', '{green}', '{red}', '{lblue}'); 
var pairClose = new Array('{/b}', '{/i}', '{/block}', '{/notice}', '{/end-note}', '{_', '_}','{*','*}', '{/strong}', '{/cite}', '{/em}', '{/sup}', '{/str}', '{/tt}', '{/blue}', '{/green}', '{/red}', '{/lblue}'); 

var formatStrings =  new Array(/<(\/)*(blockquote|b|i|cite|strong|em|sup|br)>/gi, /&/gi, /</gi, />/gi, /\n/gi, /^/, /$/, /<p>==+<\/p>/gi, /<p>[\-_~\*\+#]+<\/p>/gi, /<p>{(\d)c}(.+)<\/p>/gi, /<p>{(\d)r}(.+)<\/p>/gi, /<p>{(\d)}(.+)<\/p>/gi, /<p>{block}<\/p>/gi, /<p>{\/block}<\/p>/gi, /<p>{blocki}<\/p>/gi, /<p>{blockb}<\/p>/gi, /<p>{blockbi}<\/p>/gi, /<p>{divi}<\/p>/gi, /<p>{divb}<\/p>/gi, /<p>{divbi}<\/p>/gi, /<p>{\/(div|notice|end-note)}<\/p>/gi, /<p>{notice}<\/p>/gi, /<p>{end-note}<\/p>/gi, /<p>{r}/gi, /<p>{c}/gi, /{(blue|green|red|lblue)}/gi, /{\/(blue|green|red|lblue)}/gi, /{(b|\/b|i|\/i|small|\/small|sup|\/sup|strong|\/strong|em|\/em|u|\/u|cite|\/cite|abbr|\/abbr|acronym|\/acronym|blockquote|\/blockquote)}/gi, /{br\/}/gi, /{br} */gi, /<p><\/p>/gi, /<p>{p(i|b|bi|blue|green|red|lblue)}/gi, /<p>{(ol|\/ol|ul|\/ul)([^}]*)} *<\/p>/gi, /<p>{li}/gi, /{\/li} *<\/p>/gi, /<p>{_<\/p>/gi, /<p>_}<\/p>/gi, /<p>{\*<\/p>/gi, /<p>\*}<\/p>/gi, /{str}/gi,/{\/str}/gi, /{tt}/gi,/{\/tt}/gi);

var formatReplacements = new Array('{$1$2}','\&amp;', '\&lt;', '\&gt;', '</p>\n\n<p>', '<p>', '</p>', '<hr class=\"thick\">','<hr>', '<h$1 class=\"center\">$2</h$1>', '<h$1 class=\"right\">$2</h$1>', '<h$1>$2</h$1>', '<blockquote>', '</blockquote>', '<blockquote class=\"i\">', '<blockquote class=\"b\">', '<blockquote class=\"bi\">', '<div class=\"i\">', '<div class=\"b\">', '<div class=\"bi\">', '</div>', '<div class=\"notice\">', '<div class=\"end-note\">', '<p class=\"right\">', '<p class=\"center\">', '<span class=\"$1\">', '</span>', '<$1>', '\&nbsp;', '<br>\n', '', '<p class=\"$1\">', '<$1$2>', '<li><p>', '</p></li>', '<div class=\"i\">', '<\/div>', '<div class=\"b\">', '<\/div>', '<span class=\"str\">', '<\/span>', '<span class=\"tt\">', '<\/span>');

//alert('string: '+ strings.length + '\nreplacements: ' + replacements.length);
for (var i = 0; i < lineTags.length; i++) {
eval('theRegExpr = /' + lineTags[i] + '/gi');
regExprRep = '\n\n' + lineTagsRep[i] + '\n\n';
//alert(regExpr);
theProcessedText = theProcessedText.replace(theRegExpr, regExprRep);
}
for (var i = 0; i < cleanUpStrings.length; i++) {
theProcessedText = theProcessedText.replace(cleanUpStrings[i],cleanUpReplacements[i]);
}

var valError = '';
for (var i = 0; i < pairOpen.length; i++) {
var countOpen = countTags(theProcessedText, pairOpen[i]);
var countClose = countTags(theProcessedText, pairClose[i]);
if (countOpen != countClose) {
if (countOpen > countClose) { valError = valError + 'Error - Unclosed '+ pairOpen[i] + ' Tag\n';}
else {valError = valError + 'Error - Unopened '+ pairClose[i] + ' Tag\n';}
}
}

if (valError) { alert(valError);}

for (var i = 0; i < formatStrings.length; i++) {
theProcessedText = theProcessedText.replace(formatStrings[i],formatReplacements[i]);
}

var div = document.getElementById('story');
div.innerHTML = theProcessedText;
//theField.value = theProcessedText;
return false;
}

function countTags(string, tag) {
var substrings = string.split(tag);
return substrings.length - 1;
}
