//---- Copyright 2004-2010 Threadbender.com ----
var LN = 1;
var cP = 0;
var lastE;
var lastKey;
var above = 1;
var aA;
var qA;
var sA = new Array(25);
var aC;
var qC;
var sC;
var qCCA;
var r = document.body.createTextRange();

function initialize(){
var lCount = new Array(25);
options.solveAbove.checked = false;
for (i=0; i<26; i++){
sA[i] = ' ';
lCount[i] = 0;
}
var cMIdx = T1.children.length - 1;
var cCnt = (cMIdx)/2;
qA = new Array(cCnt);
aA = new Array(cCnt);
qCCA = new Array(cCnt);
var tmp;
var idx = -1;
var quote = "";
for (i=0; i<=cMIdx; i++){
tmp = T1.children(i);
if (tmp.id.charAt(0) == "C"){
qA[++idx] = tmp.innerText;
quote = quote + tmp.innerText;
aA[idx] = qA[idx].replace(/\S/g,' ');
qCCA[idx] = qA[idx].length;
document.getElementById("A"+(idx+1)).value = aA[idx];
}}
T1.children(0).style.display="none";
T1.children(cMIdx).style.marginBottom="0px";
quote = quote.replace(/[^A-Z]/g,'');
var aLtr =0;
for (i=0; i<quote.length; i++){
aLtr = quote.charCodeAt(i)-65;
lCount[aLtr]++;
}
for (i=0; i<26; i++){
if (lCount[i]==0){
CNT.cells(i).innerHTML="&nbsp;";
}else{
CNT.cells(i).innerText=lCount[i];
}
}
showCursor();
}

function cbPunctChanged(){
var tmpC;
var tmpD;
var tmpE;
var beg;
var idx;

if (options.showPunct.checked == true){
for (i=0; i<qA.length; i++){
tmpC = qA[i].replace(/[A-Z]/g,' ');
tmpD = tmpC.replace(/\S/g,'.');
tmpE = tmpC.replace(/ /g,'');
beg = 0;
for (j=0; j<tmpE.length; j++){
idx = tmpD.indexOf('.', beg);
aA[i] = aA[i].substr(0,idx) +tmpE.charAt(j)+ aA[i].substr(idx+1);
beg = idx+1;
}
document.getElementById("A"+(i+above)).value = aA[i];
}
}else{
for (i=0; i<qA.length; i++){
aA[i] = aA[i].replace(/[^A-Z]/g,' ');
document.getElementById("A"+(i+above)).value = aA[i];
}
}
showCursor();
}

function chkAns(){
var cMIdx = (T1.children.length-3)/2;
var above = 0;
var thisAns = "";
var cryptoWin;
if (options.solveAbove.checked == false){
above = 1;
}
for (i=0; i<cMIdx; i++){
thisAns += document.getElementById("A"+(i+above)).value + ' ';
}
answer.ans.value = thisAns.substr(0, (thisAns.length-2));
answer.auth.value = document.getElementById("A"+(cMIdx+above)).value;
answer.target = "newwin";
window.open('','newwin','width=400,height=150,top=150,left=100');
setTimeout('answer.submit()',400);
showCursor();
}

function chkQAns(){
var cMIdx=(T1.children.length-1)/2;
var above=0;
var thisAns="";
var cryptoWin;
if (options.solveAbove.checked == false){
above=1;
}
for (i=0; i<cMIdx; i++){
thisAns+= document.getElementById("A"+(i+above)).value+' ';
}
answer.ans.value = thisAns;
answer.target="newwin";
window.open('','newwin','width=400,height=150,top=150,left=100 resizable=yes menubar=yes, toolbar=yes, scrollbars=yes');
setTimeout('answer.submit()',400);
showCursor();
}

function cbSolveChanged(){
var tmp;
var idx;
var cMIdx = T1.children.length - 1;
if (options.solveAbove.checked == true){
above = 0;
idx = 0;
T1.children(0).style.display="block";
T1.children(cMIdx).style.display="none";
T1.children(cMIdx-1).style.marginBottom="0px";
for (i=0; i<cMIdx-1; i++){
tmp = T1.children(i);
if (tmp.id.charAt(0) == "A"){
tmp.value = aA[idx++];
tmp.style.marginBottom = "0px";
}else{
tmp.style.marginBottom = ".6em";
}
}
LN = LN - 1;
}else{
above = 1;
idx = aA.length - 1;
T1.children(cMIdx).style.display="block";
T1.children(0).style.display="none";
T1.children(cMIdx).value = aA[idx--];
T1.children(cMIdx).style.marginBottom = "0px";
for (i=cMIdx-1; i>=1; i--){
tmp = T1.children(i);
if (tmp.id.charAt(0) == "A"){
tmp.value = aA[idx--];
tmp.style.marginBottom = ".6em";
}else{
tmp.style.marginBottom = "0px";
}
}
LN = LN + 1;
}
showCursor();
}



function saveLoc() {
var e = window.event;
var obj = e.srcElement;
if (obj.id.charAt(0) == "A"){
var tr = obj.createTextRange();
var d = tr.duplicate();
d.moveToPoint(e.x, e.y);
tr.setEndPoint("EndtoStart", d);
cP = tr.text.length;
LN = parseInt(obj.id.substr(1));
}else if (obj.id.charAt(0) == "C"){
var tr = document.body.createTextRange();
tr.moveToElementText(obj);
var d = tr.duplicate();
d.moveToPoint(e.x, e.y);
tr.setEndPoint("EndtoStart", d);
cP = tr.text.length;
LN = parseInt(obj.id.substr(1))+above;
obj = document.getElementById("A"+LN)
moveToCursor(obj, cP)
}else{
LN = -1;
cP = 0;
}
lastE = "click";
lastKey = 0;
}


function kDn() {
var e = window.event;
var obj = e.srcElement;
if (obj.id.charAt(0) != "A"){
LN = -1;
cP = 0;
}else{
var kp = e.keyCode;
if ((kp>64)&&(kp<91)){
kp = 65
}
if (lastE == "dn") {
switch (kp) {
case 37: if (cP >  0) { cP--;} break;
case 39: if (cP < qCCA[LN-above]){ cP++;} break;
case 16:
case 17:
case 18:
break;
default:
if (lastKey == e.keyCode){
e.returnValue = false;
e.cancelBubble = true;
return false;
}else{
lastKey = e.keyCode;
break;
}
}
}else{
lastKey = e.keyCode;
if ((cP>=qCCA[LN-above])&&(kp!=8)&&(kp!=36)&&(kp!=37)) {
e.returnValue = false;
e.cancelBubble = true;
return false;
}
switch (kp) {
case 65:
break;
case 9:
e.returnValue = false;
e.cancelBubble = true;
var num = parseInt(obj.id.charAt(1));
if (num == aA.length -1 +above){
num = above;
}else{
num++;
}
document.getElementById("A"+num).focus();
LN = num;
cP = 0;
break;
case 35:
case 36:
case 37:
case 39:
case 8:
case 32:
case 46:
case 116:
case 122:
break;
default:
e.returnValue = false;
e.cancelBubble = true;
e.keyCode = 0;
return false;
}
}
}
lastE = "dn";
}





function kUp() {
e = window.event;
var obj = e.srcElement;

if (obj.id.charAt(0) == "A"){
var kp = e.keyCode;
if ((kp>64)&&(kp<91)){
kp = 65
}
switch (kp) {
case 35:
cP = qCCA[LN-above];
moveToCursor(obj, cP)
break;
case 36:
cP = 0;
moveToCursor(obj, cP)
break;
case 37: if (cP >  0) { cP--;} break;
case 39: if (cP < qCCA[LN-above]){ cP++;} break;

case 8:
if (cP > 0){
cP--;
qC = qA[LN - above].charAt(cP);
if (qC.replace(/[A-Z]/g,' ')==' '){
replaceChar(qC,' ');
sA[qC.charCodeAt()-65] = ' ';
moveToCursor(obj, cP);
}else{
obj.value = aA[LN - above];
moveToCursor(obj, cP);
}
}
break;
case 46:
if (cP < qCCA[LN-above]){
qC = qA[LN - above].charAt(cP);
if (qC.replace(/[A-Z]/g,' ')==' '){
replaceChar(qC,' ');
sA[qC.charCodeAt()-65] = ' ';
moveToCursor(obj, cP);
}else{
obj.value = aA[LN - above];
moveToCursor(obj, cP);
}
}
break;
case 32:
case 65:
if (cP >= qCCA[LN-above]){
e.returnValue = false;
e.cancelBubble = true;
return false;
}
aC = aA[LN - above].charAt(cP);
qC = qA[LN - above].charAt(cP);
sC = String.fromCharCode(e.keyCode);
if ((qC.replace(/[A-Z]/g,' ')!=' ')||(qC==' ')||(aC==sC)){
obj.value = aA[LN - above];
moveToCursor(obj, ++cP)
break;
}
if((e.keyCode!=32)&&(sA.join("").indexOf(sC)!=-1)){
obj.value = obj.value.substr(0,cP)+ sC + obj.value.substr(cP+2);
moveToCursor(obj, cP+1)
var sCIdx = sA.join("").indexOf(sC);
if (confirm( '\''+ sC + '\' has already been substituted for \'' + String.fromCharCode(sCIdx+65) +'\'.\n'
+'If you continue, \''+ sC + '\' will be substituted for \'' + qC  +'\' instead.\n\n'
+'Press OK to make the substitution.\n'
+'Press Cancel to leave the puzzle as it was.')==false){
obj.value = aA[LN - above];
moveToCursor(obj, cP);
break;
}
replaceChar(String.fromCharCode(sCIdx+65),' ');
sA[sCIdx] = ' ';
replaceChar(qC,sC);
sA[qC.charCodeAt()-65] = sC;
moveToCursor(obj, ++cP);
break;
}
if (aC!=' '){
sA[aC.charCodeAt()-65] = ' ';
}
replaceChar(qC, sC);
sA[qC.charCodeAt()-65] = sC;
moveToCursor(obj, ++cP)
break;
default:
}
for (i=0; i<26; i++){
if (sA[i]==0){
RPL.cells(i).innerHTML="&nbsp;";
}else{
RPL.cells(i).innerText=sA[i];
}}}
lastE = "up";
}

function replaceChar(qC,sC){
var beg;
var tStr;
for (i=0; i<qA.length; i++){
splitArr = qA[i].split(qC)
tStr = aA[i].substr(0,splitArr[0].length)
for (j=1; j<splitArr.length; j++){
beg = tStr.length + 1;
tStr = tStr + sC + aA[i].substr(beg,splitArr[j].length);
}
aA[i] = tStr;
document.getElementById("A"+(i+above)).value = tStr;
}}
function moveToCursor(obj, pos){
r.moveToElementText(obj);
r.move("character",(pos));
r.select();
}

function showCursor(){
moveToCursor(document.getElementById("A"+LN), cP);
}

function hint(si,so){
replaceChar(si,so);
showCursor();
}
function printIt(){
if (document.getElementById != null){
var html = '<html>\n<head>\n<title>Cryptoquote - Threadbender.com</title>\n'
+ '<link rel="stylesheet" type="text/css" href="css/main2.css" />'
+ '</head>\n<body style="background:#FFF;">\n<div id="T2">\n';
var printQuote = document.getElementById("T1");
if (printQuote != null){
html += printQuote.innerHTML;
}
else{
alert("Error finding main content");
return;
}
html += '\n</div>\n</body>\n</html>';
var printWin = window.open("","printIt");
printWin.document.open();
printWin.document.write(html);
printWin.document.close();
printWin.print();
}
else{
alert("Unable to print.");
}
}
//---- Copyright 2004-2010 Threadbender.com ----
