// Half-baked Software's Shuffled Sentence Code.  5.2
// Modified by Charles I. Kelly, Sept. 30, 2001
PT='<html><base target=_top><body bgcolor="#FFFFCE" text="#000000" link="#0000ff" vlink="#0000cc">';PB='</body></html>';
copyright="2001";
credit='<font size=1>This is part of <a href="http://www.manythings.org/">Interesting Things for ESL Students</a>.<BR>Quiz Data Copyright (C) '+copyright+' by <a href="http://www.aitech.ac.jp/~ckelly/">Charles Kelly</a><BR>JavaScript Code (C) by Half-Baked / Modified by Charles Kelly</font>'

function BrowserCheck() {var b=navigator.appName
this.mac=(navigator.appVersion.indexOf('Mac') !=-1)
if(b=="Netscape") this.b="ns"
else if(b=="Microsoft Internet Explorer") this.b="ie"
else this.b=b
this.version=navigator.appVersion
this.v=parseInt(this.version)
this.ns=(this.b=="ns" && this.v>=4)
this.ns4=(this.b=="ns" && this.v==4)
this.ns5=(this.b=="ns" && this.v==5)
this.ie=(this.b=="ie" && this.v>=4)
this.ie4=(this.version.indexOf('MSIE 4')>0)
this.ie5=(this.version.indexOf('MSIE 5')>0)
this.min=(this.ns||this.ie)
this.CRAPBrowser=(this.ie && this.mac);
}
is=new BrowserCheck();var LocFolder=GetFolder(window.location.href);

function GetFolder(LocPath){LocPath=ReplaceStuff('\'','%27',LocPath);var i=LocPath.lastIndexOf('/');if(i<0){i=LocPath.lastIndexOf('\\')};return LocPath.substring(0,i);}

function CombineURLs(InURL){var i=InURL.indexOf('../');var s=LocFolder;while (i>-1){s=GetFolder(s);InURL=InURL.substring(3,InURL.length);i=InURL.indexOf('../');}
return s+'/'+InURL;}
x=new Array();

function ResolveURLs(InText,Attribute){x.length=0;var Temp=InText.toLowerCase();var z;var AttLen=Attribute.length+2;var y=Temp.lastIndexOf(Attribute+'="');while (y>-1){var sLoc=y+AttLen;if(Temp.substring(sLoc,sLoc+5) != 'http:'){x[x.length]=new Array();x[x.length-1][0]=sLoc;z=Temp.indexOf('"',sLoc);x[x.length-1][1]=z;x[x.length-1][2]=Temp.substring(sLoc,z);}
Temp=Temp.substring(0,y);y=Temp.lastIndexOf(Attribute+'="');}
for(var j=0;j<x.length;j++){InText=InText.substring(0,x[j][0])+CombineURLs(x[j][2])+InText.substring(x[j][1], InText.length);}
return InText;}

function ResolveAllURLs(Stuff){Stuff=ResolveURLs(Stuff,'href');Stuff=ResolveURLs(Stuff,'src');Stuff=ResolveURLs(Stuff,'parent.location');return Stuff;}
var CorrectResponse='Correct! Go to the <a href="'+NextPage+'">next page</a>.';var IncorrectResponse='Sorry! Try again.';var TheseAnswersToo='These answers are also correct:';var ThisMuchCorrect='This much of your answer is correct:';var RemainingWords='Remaining words:';var NextCorrect='The next correct part is: ';var YourScoreIs='Your score is ';var CapitalizeFirst=true;var ExerciseSubtitle='Click on words to add them to the sentence.';;var Instructions='Arrange the items at the bottom of the screen so that they are in the right order.';
var DefaultResponse='[strDefaultResponse]';var Penalties=0;var PreviousPage=history.length;var ReadingURL='';
var NavBar='<form name="NavButtons1" action="">Navigation<BR><input type="button" value="<=" onclick="parent.GoBack()"><input type="button" value="Index" onclick=\'parent.location="index.html"\'><input type="button" value="=>" onclick=\'parent.location="'+NextPage+'"\'></form>';credit+=NavBar;if(is.CRAPBrowser){NavBar=ResolveAllURLs(NavBar);}
var TitleCode='<tr><td align="center" valign="middle" bgcolor="#CEFFFF">';TitleCode+= '<h2>'+ExerciseTitle+'</h2>';

var TableOpener='<center><table border="0">';
TableCloser='</form></table></center>';

var SegRowOpener='<tr><td valign="middle" align="center" bgcolor="#CEFFFF"><BR>';
var SegRowCloser='<BR><BR></td></tr>';

var ButtonRow='<form name="ButtonForm"><input type="button" value="Check" OnClick="parent.CheckAnswer(0)"><input type="button" value="Undo" onclick="parent.Undo()"><input type="button" value="Restart" onclick="parent.Restart()"><input type="button" value="Hint" onclick="parent.CheckAnswer(1)"></form>';var SegmentTemplate='&nbsp;&nbsp;<a href="javascript:parent.DoNothing()" onclick="parent.AddSegment([SegmentNumber])">[CurrentSegment]</font></a>&nbsp;&nbsp;';var HintButton='';
var Exercise='';var Punctuation=')}]!;:?,.\u0085\u0092\u0094\u009B\u00A8\u00B4\u00B7\u00BB';var Openers='"({[\u0082\u0084\u008B\u0091\u0093\u00A1\u00AB\u00BF';var Guesses=new Array();var Remaining=new Array();var CorrectParts=new Array();var ClosestMatch=0;

function GoBack(){var BackSkip=history.length-PreviousPage;if(BackSkip>0){history.go((BackSkip+1)*-1);}
else{parent.history.back();}}

function Shuffle(InArray){Temp=new Array();var Len=InArray.length;var j=Len;for(var i=0;i<Len;i++){Temp[i]=InArray[i];}
for(i=0;i<Len;i++){Num=Math.floor(j * Math.random());InArray[i]=Temp[Num];for(var k=Num;k<j;k++) {Temp[k]=Temp[k+1];}
j--;}
return InArray;}

function WriteFeedback(Feedback) {if(is.CRAPBrowser){Feedback=ResolveAllURLs(Feedback);}
var OutString='';OutString+= PT;OutString+= '<center>';if(Feedback.length>0){OutString+= Feedback
}
OutString+='</center>'+PB;TopFrame.document.clear();TopFrame.document.open();TopFrame.document.write(OutString);TopFrame.document.close();}

function Restart(){Penalties=0;GuessSequence.length=0;Segments=Shuffle(Segments);BuildCurrGuess();WriteFeedback(credit);BuildExercise();DisplayExercise(Exercise);}

function Undo(){if(GuessSequence.length<1){return;}
GuessSequence.length=GuessSequence.length-1;BuildCurrGuess();WriteFeedback('<B>'+Output+'</B>');BuildExercise();DisplayExercise(Exercise);}

function AddSegment(SegNum){GuessSequence[GuessSequence.length]=SegNum;BuildCurrGuess();WriteFeedback('<B>'+Output+'</B>');BuildExercise();DisplayExercise(Exercise);}

function BuildCurrGuess(){var i=0;var j=0;var NewSeg='';GuessSegs=new Array();GuessSegs.length=0;for(i=0;i<Segments.length;i++){Segments[i][2]=0;}
for(i=0;i<GuessSequence.length;i++){for(j=0;j<Segments.length;j++){if((Segments[j][1] == GuessSequence[i])&&(Segments[j][2] == 0)){GuessSegs[GuessSegs.length]=Segments[j][0];Segments[j][2]=1;break;}}}
RemainingList='';for(i=0;i<Segments.length;i++){if(Segments[i][2] == 0){RemainingList+= Segments[i][0]+'&nbsp;&nbsp;&nbsp;';}}
Output=CompileString(GuessSequence);}

function CompileString(InArray){var OutString='';var i=0;OutArray=new Array();for(i=0;i<InArray.length;i++){OutArray[OutArray.length]=FindSegment(InArray[i]);}
if(OutArray.length>0){OutString=OutArray[0];}
else{OutString='';}
var Spacer='';for(i=1;i<OutArray.length;i++){Spacer=' ';if((Openers.indexOf(OutString.charAt(OutString.length-1))>-1)||(Punctuation.indexOf(OutArray[i].charAt(0))>-1)){Spacer='';}
OutString=OutString+Spacer+OutArray[i];}
if(CapitalizeFirst == true){i=0;if((Openers.indexOf(OutString.charAt(i))>-1)||(OutString.charAt(i) == ' ')){i++;}
if((Openers.indexOf(OutString.charAt(i))>-1)||(OutString.charAt(i) == ' ')){i++;}
var Temp=OutString.charAt(i);Temp=Temp.toUpperCase();OutString=OutString.substring(0, i)+Temp+OutString.substring(i+1, OutString.length);}
return OutString;}

function CheckAnswer(CheckType){if(GuessSequence.length<1){if(CheckType == 1){WriteFeedback(NextCorrect+'<BR><B>'+FindSegment(Answers[0][0])+'</B>');Penalties++;}
return;}
var i=0;var j=0;var k=0;var WellDone='';var WhichCorrect=-1;var TryAgain='';var LongestCorrectBit='';TempCorrect=new Array();LongestCorrect=new Array();var TempHint='';var HintToReturn=1;var OtherAnswers='';for(i=0;i<Answers.length;i++){TempCorrect.length=0;for(j=0;j<Answers[i].length;j++){if(Answers[i][j] == GuessSequence[j]){TempCorrect[j]=GuessSequence[j];}
else{TempHint=Answers[i][j];break;}}
if((TempCorrect.length == GuessSequence.length)&&(TempCorrect.length == Answers[i].length)){WhichCorrect=i;break;}
else{if(TempCorrect.length>LongestCorrect.length){LongestCorrect.length=0;for(k=0;k<TempCorrect.length;k++){LongestCorrect[k]=TempCorrect[k];}
HintToReturn=TempHint;}}}
if(WhichCorrect>-1){for(i=0;i<Answers.length;i++){if(i!=WhichCorrect){OtherAnswers+= '<BR>'+CompileString(Answers[i]);}}
WellDone='<B>'+Output+'</B><BR>'+CorrectResponse+'<BR>';var Score=Math.floor(((Segments.length-Penalties) * 100)/Segments.length);WellDone+= YourScoreIs+' '+Score+'%.<BR>';WriteFeedback(WellDone);return;}
else{TryAgain='<B>'+CompileString(GuessSequence)+'</B><BR>';Penalties++;if(CheckType == 0){TryAgain+= IncorrectResponse+'<BR>';}
if(LongestCorrect.length>0){LongestCorrectBit=CompileString(LongestCorrect);GuessSequence.length=LongestCorrect.length;TryAgain+= ThisMuchCorrect+'<BR><B>'+LongestCorrectBit+'</B><BR>';}
if(CheckType == 1){TryAgain+= NextCorrect+'<BR>'+FindSegment(HintToReturn);}
WriteFeedback(TryAgain);BuildCurrGuess();BuildExercise();DisplayExercise(Exercise);}}

function FindSegment(SegID){var Seg='';for(var i=0;i<Segments.length;i++){if(Segments[i][1] == SegID){Seg=Segments[i][0];break;}}
return Seg;}

function DoNothing(){}

function StartUp(){Segments=Shuffle(Segments);
WriteFeedback(credit);
BuildExercise();
DisplayExercise(Exercise);
H=PT+'<center><font size=1><a href="http://www.manythings.org/">www.manythings.org</a> : <a href="http://www.manythings.org/ss/">Srambled Sentences</a></font>'+TitleCode+ButtonRow+ExerciseSubtitle+'</center>'+PB;
F3.document.clear();F3.document.open();F3.document.write(H);F3.document.close();
}

function BuildExercise(){Exercise='';var SegRow=SegRowOpener;var TempRow='';for(var i=0;i<Segments.length;i++){if(Segments[i][2] == 0){TempRow=SegmentTemplate;TempRow=ReplaceStuff('[SegmentNumber]', Segments[i][1], TempRow);TempRow=ReplaceStuff('[CurrentSegment]', Segments[i][0], TempRow);SegRow+= TempRow;}}
SegRow+= SegRowCloser;Exercise=TableOpener+SegRow+TableCloser;}

function ReplaceStuff(Token, Replacement, InString){var i=InString.indexOf(Token);var FirstBit='';var LastBit='';while (i>-1){FirstBit=InString.substring(0, i);LastBit=InString.substring(i+Token.length, InString.length);InString=FirstBit+Replacement+LastBit;i=InString.indexOf(Token);}
return InString;}

function DisplayExercise(StuffToDisplay){var OutString='';OutString+= PT;
OutString+= '<center><table border="1" cellpadding="5" cellspacing="1" width="90%">';
OutString+= '<tr><td bgcolor="#CEFFFF" align="center">';
OutString+= StuffToDisplay;OutString+= '</td></tr>';
OutString+= '</table></center>'+PB;

if(is.CRAPBrowser){OutString=ResolveAllURLs(OutString);}
BottomFrame.document.clear();BottomFrame.document.open();BottomFrame.document.write(OutString);BottomFrame.document.close();}

function Blank(){return PT+'<B>Wait</B> when loading.<BR>Click the BACK button a few times when going back.'+PB;}
