﻿



//OBJECT DEFINITIONS...
function tablet()
{
//input references
this.tbtarget;
this.tbjog;

//select references
this.lbwords;
this.cbhotlist;

//command references
this.cmdswaptopos;
this.cmdswaptoabc;
this.cmdswaptobigdic;
this.cmdswaptosmalldic;
this.cmdaddhot;
this.cmdrmvhot;
this.cmdclearhot;
this.cmdtick;
this.imgbigtick;
this.cmdnoun;
this.cmdverb;
this.cmdadjec;
this.cmdadverb;
this.cmdconjunc;
this.cmdinterjec;
this.cmdnewrandomletter;

//dragagent
this.dragagent;

//bools
this.boolabc;
this.boolsmall;
this.boolticked;
this.targetisnum;

//functions
this.tickchange=tickchange;
//this.determinearray;
this.showwords=showwords;

//others
this.targetwordstartletter;
this.targetnumber;
this.numbermatchtries;
this.postype;
this.posswordslength

}

//Global declaration of tablet array...
tabletarray = new Array();

function tabletssetup()
{
for (var i=0; i<14 ; ++i)
{
var atablet=new tablet();

//assign ids to the new tablet object...
x=document.getElementById(i)
atablet.tbtarget = x.getElementsByTagName('input')[0].id
atablet.tbjog = x.getElementsByTagName('input')[1].id

atablet.lbwords = x.getElementsByTagName('select')[0].id
atablet.cbhotlist = x.getElementsByTagName('select')[1].id

atablet.cmdswaptopos = x.getElementsByTagName('img')[0].id
atablet.cmdswaptoabc = x.getElementsByTagName('img')[1].id
atablet.cmdswaptobigdic = x.getElementsByTagName('img')[2].id
atablet.cmdswaptosmalldic = x.getElementsByTagName('img')[3].id
atablet.cmdaddhot = x.getElementsByTagName('img')[4].id
atablet.cmdrmvhot = x.getElementsByTagName('img')[5].id
atablet.cmdclearhot = x.getElementsByTagName('img')[6].id
atablet.cmdtick = x.getElementsByTagName('img')[7].id
atablet.imgbigtick= x.getElementsByTagName('img')[8].id
atablet.cmdnoun  = x.getElementsByTagName('img')[9].id
atablet.cmdverb= x.getElementsByTagName('img')[10].id
atablet.cmdadjec = x.getElementsByTagName('img')[11].id
atablet.cmdadverb = x.getElementsByTagName('img')[12].id
atablet.cmdconjunc = x.getElementsByTagName('img')[13].id
atablet.cmdinterjec = x.getElementsByTagName('img')[14].id
atablet.cmdnewrandomletter = x.getElementsByTagName('img')[15].id

//set up dragagent...
atablet.dragagent = "dragagent_" + i

//set up boolean startsettings...
atablet.boolabc = true;
atablet.boolsmall= true;
atablet.boolticked= false;
atablet.targetisnum= false;

//setup default postype...
atablet.postype="nouns";

//programatical tally of length...
atablet.posswordslength

//remove tickbutton if IE6
//IEIEIE if (IE6){Tog(atablet.cmdtick)}

//place the object in the tablets array...
tabletarray[i]=atablet;
}
//IEIEIE if (IE6){Tog('Jopng');Tog('Jogif')}

}

//global var is true if IE6
//http://www.thefutureoftheweb.com/blog/detect-ie6-in-javascript
var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

function letter()
{
//properties
this.nouns;
this.verbs;
this.adjectives;
this.adverbs;
this.conjunctions;
this.interjections;
this.allwords;

//methods
this.putalltogether=putalltogether;
}

function putalltogether()
{
//this.boolticked =!this.boolticked; 
var blah = new Array()
blah=this.nouns.concat(this.verbs, this.adjectives,this.adverbs,this.conjunctions,this.interjections)
blah.sort()

var result=new Array();

var lastValue="";
for(var i=0; i<blah.length; i++)  
{
  var curValue=blah[i];
 
  
  if (curValue != lastValue && !(curValue=='NOUNS'||curValue=='PLURALS'||curValue=='VERBS(ppl)'||curValue=='VERBS(tran)'||curValue=='VERBS(int)'||curValue=='ADJECTs'||curValue=='ADVERBS'||curValue=='CONJUNCs'||curValue=='PREPs'||curValue=='INTERJECs'||curValue=='PRONOUNS'||curValue=='ARTIC(def)' ||curValue=='ARTIC(ind)'||curValue=='NOMINATs') )
  //if its not a duplicate or one of the bad items then add it to result array...
  {
  result[result.length] = curValue;
  }
  lastValue=curValue;
}
  
this.allwords=result

}

//GUI Actions...
function cmdtickclick(ref)
{
var moo = ref.parentNode.id;
var thetablet = tabletarray[moo];
thetablet.tickchange()
}

function targetwordchanged(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
var targetcontent= document.getElementById(thetablet.tbtarget).value
    
if(targetcontent == "")
    {return}
var targetwordlower = targetcontent.toLowerCase()
var targetletter = targetwordlower.substr(0,1)

if (targetletter!=thetablet.targetwordstartletter)
{
thetablet.targetwordstartletter = targetletter;
///test...

if(isNaN(thetablet.targetwordstartletter))
{thetablet.targetisnum= false;
}
else
//if target is a number...
{
thetablet.targetisnum= true; 
thetablet.targetnumber= this.targetwordstartletter;

if (thetablet.targetnumber == 0)
    {
    thetablet.targetnumber = 10
    }
}
///test

processnewtargetword(thetablet)
}

if (!thetablet.targetisnum)
{
matchtextentry(thetablet.tbtarget,thetablet.lbwords)
fromtbtotb(thetablet.tbtarget,thetablet.tbjog)
changedragagent(thetablet.tbtarget,thetablet.dragagent)
//inserted
SplitOrder()
}

}




function processnewtargetword(thetablet)
{
thetablet.showwords()
if (!thetablet.targetisnum)
{matchtextentry(thetablet.tbtarget,thetablet.lbwords)
fromtbtotb(thetablet.tbtarget,thetablet.tbjog)
changedragagent(thetablet.tbtarget,thetablet.dragagent)

}
else
{this.numbermatchtries = 0}

}


function lbwordsclicked(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
fromlisttotb(thetablet.lbwords,thetablet.tbjog)
changedragagent(thetablet.tbjog,thetablet.dragagent);
//inserted
SplitOrder()

}

function lightning(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
thetablet.numbermatchtries = 0
thetablet.showwords();
}


function hotted(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
insertfromtolist(thetablet.lbwords,thetablet.cbhotlist);
}

function dehotted(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
removeselectedlistitem(thetablet.cbhotlist);
}

function hotclear(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
removealllistitems(thetablet.cbhotlist);
}


function cbhotlistclicked(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
fromlisttotb(thetablet.cbhotlist,thetablet.tbjog)
changedragagent(thetablet.tbjog,thetablet.dragagent);
//inserted
SplitOrder()
}

function posclicked(ref, pos)
{
var thetablet = tabletarray[ref.parentNode.id];
thetablet.postype=pos
thetablet.showwords()
}


function jogwordchanged(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
if (thetablet.boolticked)
{thetablet.tickchange()}

//Sq bday_early change

var jogwordlower = document.getElementById(thetablet.tbjog).value.toLowerCase()
var jogletter = jogwordlower.substr(0,1)

if (jogletter!=thetablet.targetwordstartletter && jogletter!="")
{
thetablet.targetwordstartletter = jogletter;
//showwords
thetablet.showwords()
}

matchtextentry(thetablet.tbjog,thetablet.lbwords);
changedragagent(thetablet.tbjog,thetablet.dragagent);
//inserted
SplitOrder()
}

function jogworddoubled(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
insertfromtolist(thetablet.tbjog,thetablet.cbhotlist)
}



function abcposchanged(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
//change button
Tog(thetablet.cmdswaptoabc)
Tog(thetablet.cmdswaptopos)

//change dictionary
thetablet.boolabc=!thetablet.boolabc;

//toggle all pos buttons
Tog(thetablet.cmdnoun);
Tog(thetablet.cmdverb);
Tog(thetablet.cmdadjec);
Tog(thetablet.cmdadverb);
Tog(thetablet.cmdconjunc);
Tog(thetablet.cmdinterjec);

//showwords
thetablet.showwords()
}

function smallbigchanged(ref)
{
var thetablet = tabletarray[ref.parentNode.id];
//change button
Tog(thetablet.cmdswaptosmalldic)
Tog(thetablet.cmdswaptobigdic)
//change dictionary
thetablet.boolsmall=!thetablet.boolsmall;
//showwords
thetablet.showwords()
}

function dragagentclicked(ref)
{
var astring= ref.id.toString()
var target
if (astring.length==11)
{target = astring.substr(astring.length-1,1)}
else
{target = astring.substr(astring.length-2,2)}
target = target *1
var thecorrespondingtablet = tabletarray[target];
document.getElementById(thecorrespondingtablet.tbjog).focus()
}

function dragagentdoubled(ref)
{
var astring= ref.id.toString()
var target
if (astring.length==11)
{target = astring.substr(astring.length-1,1)}
else
{target = astring.substr(astring.length-2,2)}
target = target *1
var thecorrespondingtablet = tabletarray[target];
thecorrespondingtablet.tickchange()
}

//Tablet Object Methods...
function tickchange()
{
this.boolticked =!this.boolticked; 
//2x + "&nbsp;"
var PossAgent = document.getElementById(this.tbjog).value;
if(!this.boolticked) 
{document.getElementById(this.dragagent).innerHTML = PossAgent + "&nbsp;&#8203;"}
else {document.getElementById(this.dragagent).innerHTML = "<strike>" + PossAgent +"</strike>" + "&nbsp;&#8203;"}
Tog(this.imgbigtick);
}


function showwords()

{
//var targetcontent= document.getElementById(this.tbtarget).value
//    if(targetcontent == "")
//    {return}

var jogpossiblesstartletter

//If not a number ie is an alpha letter...
if(isNaN(this.targetwordstartletter))
{this.targetisnum= false;
jogpossiblesstartletter= this.targetwordstartletter;
}
else
//if target is a number...
{
this.targetisnum= true; 
this.targetnumber= this.targetwordstartletter;

if (this.targetnumber == 0)
    {
    this.targetnumber = 10
    }
}

//if its a number show the next letter button and pick a random letter object...
if (this.targetisnum)
{
jogpossiblesstartletter=String.fromCharCode(97 + Math.round(Math.random() * 25));
document.getElementById(this.cmdnewrandomletter).style.display = "block";
}
else
{
document.getElementById(this.cmdnewrandomletter).style.display = "none";
}


//select appropriate letter object...
var letterobj

if (this.boolsmall)
{
letterobj = smalldict[jogpossiblesstartletter];
}
else 
{
letterobj = bigdict[jogpossiblesstartletter];
}

//select the appropriate array within the letter object...
var ArrayName

//if alpha (not pos) is selected...
if (this.boolabc)
{
ArrayName = letterobj.allwords;
} 
else
//if POS (not alpha) is selected...
{
if (this.postype=="nouns")
{
ArrayName = letterobj.nouns;
}
else 
if (this.postype=="verbs")
{
ArrayName = letterobj.verbs;
}
else 
if (this.postype=="adjectives")
{
ArrayName = letterobj.adjectives;
}
else 
if (this.postype=="adverbs")
{
ArrayName = letterobj.adverbs;
}
else 
if (this.postype=="conjunctions")
{
ArrayName = letterobj.conjunctions;
}
else 
if (this.postype=="interjections")
{
ArrayName = letterobj.interjections;
}
}

//populate the tablets lbwords listbox with words...

document.getElementById(this.lbwords).options.length =null
var ralen = ArrayName.length
for (var i=0; i < ralen; ++i)
{
//if this.targetisnum then only show items of length this.targetwordstartletter
if (this.targetisnum)
{
    if(ArrayName[i].length == this.targetnumber)
    {
    addOption = new Option(ArrayName[i],ArrayName[i]);
    document.getElementById(this.lbwords).options.add(addOption)
    }
}
else
{
addOption = new Option(ArrayName[i],ArrayName[i]);
document.getElementById(this.lbwords).options.add(addOption)
}
}
//Jump to index=0 for safari and chrome...
//if (!this.boolabc) {
//listbox.options[0].selected = true;
//}
 
if (this.targetisnum && document.getElementById(this.lbwords).length==0 && this.numbermatchtries < 25)
{this.numbermatchtries = this.numbermatchtries +1;
this.showwords()}



}
//end of func

function changedragagent(FromTextBox,ToDragAgent)
{
//+ "&nbsp;"
	var PossAgent = document.getElementById(FromTextBox).value;
	if (!PossAgent==""){
	document.getElementById(ToDragAgent).innerHTML =  PossAgent + "&nbsp;&#8203;"
	}
}


//Helper Methods...
function Tog(d) 
{
if(document.getElementById(d).style.display == "none") { document.getElementById(d).style.display = "block"; }
else { document.getElementById(d).style.display = "none"; }
}

//Jump to matching entry in words listbox...
function matchtextentry(tb, lb)
{
var listbox=document.getElementById(lb)
var textboxval=document.getElementById(tb).value

  for (i=0; i < listbox.length; i++)
     if (listbox.options[i].text.substr(0,textboxval.length).toLowerCase() == textboxval.toLowerCase())
      {
         listbox.options[i].selected = true;
         break;
      }
} 

      
function fromtbtotb(origintb,destinationtb)
{
document.getElementById(destinationtb).value = document.getElementById(origintb).value 
}

function insertfromtolist(FromList, ToList)
//Inserts to a list from a list  
{

var WordToAdd=document.getElementById(FromList).value;
var x=document.getElementById(ToList);
var y=document.createElement('option');
y.text= WordToAdd;
y.value= WordToAdd;
var found = 0
// alert(x.indexOf(WordToAdd) + "<br />")

  for (i=0; i < x.length; i++)
     if (x.options[i].text.toLowerCase() ==
WordToAdd.toLowerCase())
      {
         x.options[i].selected = true;
         found = 1
         break; 
      }
  
if (found == 0) //ie if the item is not already in the hotlist
{ 
try
    {
    x.add(y,null); // standards compliant
    }
  catch(ex)
    {
    x.add(y); // IE only
    }

var item = x.length-1
x.options[item].selected = true;

}}


function fromlisttotb(from,to)
{
var mylist=document.getElementById(from)
document.getElementById(to).value=mylist.options[mylist.selectedIndex].text
}

function removeselectedlistitem(listname)
  {
  var x=document.getElementById(listname)
  x.remove(x.selectedIndex)
  }


function removealllistitems(listname)
{
var mylist=document.getElementById(listname)
mylist.options.length=null;
}

var targetstring
var jogstring

function SplitOrder()
//puts into array just the drag agent number for each agent eg 3,1,2 if third is placed first etc.
{
var SortableOrder= (Sortable.serialize('DragAgentsDiv'));
SplitSortableOrder = SortableOrder.split("&")
var elementcontent
var substrvalue;

targetstring=""
jogstring=""

//for(i=0;i<SplitSortableOrder.length;i++)
for(i=0;i<14;i++)
{
elementcontent = SplitSortableOrder[i]
substrvalue = elementcontent.substr(16)//get just the number associated with the drag agent

thetablet= tabletarray[substrvalue]
if (!document.getElementById(thetablet.tbtarget).value == "")
{
targetstring= targetstring + document.getElementById(thetablet.tbtarget).value + ", " 

jogstring=jogstring + document.getElementById(thetablet.tbjog).value + " "
}

//SplitSortableOrder[i] = substrvalue
}
targetstring  = targetstring.slice(0, -2)
//document.getElementById('txtAgentOrderSplit').value = SplitSortableOrder 
document.getElementById('TxtCurrentTargetWordsString').value = targetstring
document.getElementById('TxtCurrentjogWordsString').value = jogstring
//change
createlearnerlink()
updatethemesocial()
};

function fill(targets,jogstring,themestring)
{
filltargets(targets)

if (!jogstring=="")
{
filljogwords(jogstring)
}

if (!themestring=="")
{
document.getElementById('jogtheme').value = themestring;
}

}

function filltargets(themestring)
{
clearall()
var splittheme;
splittheme = themestring.split("*");
var tonum = splittheme.length 
for(i=0;i<tonum;i++)
{
var thetablet= tabletarray[i]

//set target word start letter...

var targetwordlower = splittheme[i].toLowerCase()
var targetletter = targetwordlower.substr(0,1)

if (targetletter!='' && targetletter!= undefined)
{
if (targetletter!=thetablet.targetwordstartletter)
{
thetablet.targetwordstartletter = targetletter;
processnewtargetword(thetablet)
}


document.getElementById(thetablet.tbtarget).value = splittheme[i];
}
}
selectrandomindexes()
}



function filljogwords(jogstring)
{
var splittheme;
splittheme = jogstring.split("*");
var tonum = splittheme.length 
var i
for(i=0;i<tonum;i++)
{
var thetablet= tabletarray[i]
//set target word start letter...
var targetwordlower = splittheme[i].toLowerCase()
var targetletter = targetwordlower.substr(0,1)

if (targetletter!=thetablet.targetwordstartletter)
{
thetablet.targetwordstartletter = targetletter;
thetablet.showwords()
}

document.getElementById(thetablet.tbjog).value = splittheme[i];
matchtextentry(thetablet.tbjog,thetablet.lbwords);
changedragagent(thetablet.tbjog,thetablet.dragagent);
SplitOrder()
}

}

function clearall()
{
untickall()
resetdraggables()

for(i=0;i<14;i++)
{
var thetablet= tabletarray[i]
thetablet.targetwordstartletter = ""
document.getElementById(thetablet.tbtarget).value = ""
document.getElementById(thetablet.tbjog).value = ""
removealllistitems(thetablet.lbwords)
var TheDragAgent = thetablet.dragagent
document.getElementById(TheDragAgent).innerHTML =  "";
}
//note hack to keep the space -agent 0 is set manually
//document.getElementById('dragagent_0').innerHTML =  "&nbsp;";
}

var randomwasput = false;

function checkandtopup()
{
randomwasput = false
var theamount = document.getElementById('opt1').value
if (theamount * 1 < 12 || theamount=="" )
{
document.getElementById('opt1').value = Math.floor(Math.random()*987) + 12
addamount()
randomwasput = true;
}
}

function resetcost()
{
var theamount = document.getElementById('opt1').value
if (randomwasput)
{
document.getElementById('opt1').value = ""
addamount()
randomwasput = false
}
}


function addamount()
{
var theamount = document.getElementById('opt1').value ;
document.getElementById('opt2').value = theamount;
document.getElementById('opt3').value = theamount;
document.getElementById('opt4').value = theamount;
document.getElementById('opt5').value = theamount;
document.getElementById('opt6').value = theamount;
document.getElementById('opt7').value = theamount;
}

function selectrandomindexes()
{

for(i=0;i<14;i++)
{
var thetablet= tabletarray[i]
if (!thetablet.boolticked)
{

var max = document.getElementById(thetablet.lbwords).length -1;
if (max>0)
{
var randomindex= Math.round(Math.random() * max);
document.getElementById(thetablet.lbwords).options[randomindex].selected = true;
fromlisttotb(thetablet.lbwords,thetablet.tbjog);
changedragagent(thetablet.tbjog,thetablet.dragagent);
}
}
}
SplitOrder()
}


function untickall()
{

for(i=0;i<14;i++)
{
var thetablet= tabletarray[i]
if (thetablet.boolticked)
{
thetablet.tickchange()
}
}
}

function enabledictchoice()
{
for(i=0;i<14;i++)
{
var thetablet= tabletarray[i]
document.getElementById(thetablet.cmdswaptobigdic).style.display = "block";
}
}

function resetdraggables()
{
Sortable.sequence('DragAgentsDiv');                     // => ['2','1','3']
 Sortable.setSequence('DragAgentsDiv', ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11','12', '13', '14', '15']); 
 Sortable.sequence('DragAgentsDiv');  
 
}

function removeticker()
{
document.getElementById('tickerdiv').style.display = "none"; 
document.getElementById('imgtickercancel').style.display = "none";
document.getElementById('addiv').style.display = "block";

}


function createlearnerlink()
{

var themestring= document.getElementById('jogtheme').value

var parsedtargetwordsstring
//var parsedjogstring
var parsedthemestring

//test...

parsedtargetwordsstring = "";

for(i=0;i<14;i++)
{
var thetablet= tabletarray[i];
parsedtargetwordsstring = parsedtargetwordsstring + document.getElementById(thetablet.tbtarget).value + "*";
}


//parsedtargetwordsstring = targetstring.replace(/, /g, "*")
parsedtargetwordsstring = parsedtargetwordsstring.replace(/ /g, "+")


//parsedthemestring = themestring.replace(/, /g, "*")
parsedthemestring = themestring.replace(/ /g, "+")

//construct link...
var webroot = "http://www.joglab.com/?theme=";

var llink = webroot + parsedthemestring + "&targetwords=" + parsedtargetwordsstring

document.getElementById('tblearnerlink').value = llink
}


function createsuperll()
{
var quicktargetsstring= document.getElementById('rapidinputtargets').value
var quickthemenamestring= document.getElementById('quickthemename').value
var quicklearnerlinkstring
var quicklearnerlinkhtmlstring
var justtargets

quicklearnerlinkstring = quicktargetsstring.replace(/, /g, "*");
quicklearnerlinkstring = quicklearnerlinkstring.replace(/,/g, "*");
quicklearnerlinkstring = quicklearnerlinkstring.replace(/  /g, " ");
justtargets = quicklearnerlinkstring
quicklearnerlinkstring = quicklearnerlinkstring.replace(/ /g, "+");

quickthemenamestring = quickthemenamestring.replace(/  /g, " ");
quickthemenamestring = quickthemenamestring.replace(/ /g, "+");
quickthemenamestring = quickthemenamestring.replace(/&/g, "and");

//construct link...
var webroot = "http://www.joglab.com/?theme=";


quicklearnerlinkstring = webroot + quickthemenamestring + "&targetwords=" + quicklearnerlinkstring;

document.getElementById('rapidlearnerlinkonly').value = quicklearnerlinkstring;
document.getElementById('rapidlearnerlinkhtml').value = "<a href=\"" + quicklearnerlinkstring + "\"" + ">Create a Jog (mnemonic device) for " + quickthemenamestring + " at JogLab.com</a>"

return justtargets
}

function superfill()
{
fill(createsuperll())
setTimeout( "jumptotop();", 1000);
}

function jumptotop(){
window.location = "#top"
}

function clearsuperfill()
{
document.getElementById('rapidlearnerlinkonly').value = ""
document.getElementById('rapidlearnerlinkhtml').value = "" 
document.getElementById('rapidinputtargets').value = ""
document.getElementById('quickthemename').value = ""
}