version 1.1, 2000/06/28 03:41:48
|
version 1.11, 2001/08/08 13:31:43
|
Line 2
|
Line 2
|
<!-- |
<!-- |
The LearningOnline Network with CAPA |
The LearningOnline Network with CAPA |
Parameter Input Window |
Parameter Input Window |
06/16/00,06/17 Gerd Kortemeyer |
06/16/00,06/17,11/17,11/18,11/23,11/27,11/28,12/15,12/16, |
|
03/21/01,03/24,06/26 Gerd Kortemeyer |
|
07/24/01 Scott Harrison |
--> |
--> |
<head> |
<head> |
<title>LON-CAPA</title> |
<title>LON-CAPA</title> |
Line 14 var ptype='';
|
Line 16 var ptype='';
|
var pvalue=''; |
var pvalue=''; |
var preturn=''; |
var preturn=''; |
var pcode=''; |
var pcode=''; |
var poptions=''; |
var pscat=''; |
|
var pmarker=''; |
var pname=''; |
var pname=''; |
|
|
var svalue; |
var svalue; |
|
var stype; |
|
var smarker; |
|
|
var scat; |
|
var vars=new Array(); |
var vars=new Array(); |
|
|
|
var cdate=new Date(); |
|
|
|
var csec; |
|
var cmin; |
|
var chour; |
|
var cday; |
|
|
|
var months=new Array(); |
|
|
|
|
function selwrite(text) { |
function selwrite(text) { |
this.window.selector.document.write(text); |
this.window.selector.document.write(text); |
} |
} |
Line 52 function valline(text,id1,id2) {
|
Line 66 function valline(text,id1,id2) {
|
id2+'></td></tr>'); |
id2+'></td></tr>'); |
} |
} |
|
|
|
function datecalc() { |
|
var sform=choices.document.forms.sch; |
|
|
|
cdate.setHours(sform.hours.options[sform.hours.selectedIndex].value); |
|
cdate.setMinutes(sform.minutes.options[sform.minutes.selectedIndex].value); |
|
cdate.setSeconds(sform.minutes.options[sform.seconds.selectedIndex].value); |
|
cdate.setDate(sform.date.options[sform.date.selectedIndex].value); |
|
cdate.setMonth(sform.month.options[sform.month.selectedIndex].value); |
|
cdate.setFullYear(sform.year.options[sform.year.selectedIndex].value); |
|
|
|
draw(); |
|
} |
|
|
|
function hour() { |
|
var thishour=cdate.getHours(); |
|
var i; var j; |
|
choicewrite('<select name=hours onChange="parent.datecalc();">'); |
|
for (i=0;i<=23;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thishour) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'); |
|
if (i==12) { choicewrite('noon'); } else { |
|
if (i==0) { choicewrite('midnight') } else { |
|
|
|
if (i<12) { choicewrite(i+' am'); } else { |
|
j=i-12; choicewrite(j+' pm'); |
|
} |
|
|
|
} |
|
} |
|
choicewrite('</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function minute() { |
|
var thisminutes=cdate.getMinutes(); |
|
var i; |
|
choicewrite('<select name=minutes onChange="parent.datecalc();">'); |
|
for (i=0;i<=59;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisminutes) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function second() { |
|
var thisseconds=cdate.getSeconds(); |
|
var i; |
|
choicewrite('<select name=seconds onChange="parent.datecalc();">'); |
|
for (i=0;i<=59;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisseconds) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
|
|
function date() { |
|
var thisdate=cdate.getDate(); |
|
var i; |
|
choicewrite('<select name=date onChange="parent.datecalc();">'); |
|
for (i=1;i<=31;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisdate) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function year() { |
|
var thisyear=cdate.getFullYear(); |
|
var i; |
|
choicewrite('<select name=year onChange="parent.datecalc();">'); |
|
for (i=thisyear-25;i<=thisyear+50;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisyear) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function month() { |
|
var thismonth=cdate.getMonth(); |
|
var i; |
|
choicewrite('<select name=month onChange="parent.datecalc();">'); |
|
for (i=0;i<=11;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thismonth) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+months[i]+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
|
|
function intminute() { |
|
var thisminutes=cmins; |
|
var i; |
|
choicewrite('<select name=minutes onChange="parent.intcalc();">'); |
|
for (i=0;i<=59;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisminutes) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function inthour() { |
|
var thishours=chours; |
|
var i; |
|
choicewrite('<select name=hours onChange="parent.intcalc();">'); |
|
for (i=0;i<=23;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thishours) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function intsecond() { |
|
var thisseconds=csecs; |
|
var i; |
|
choicewrite('<select name=seconds onChange="parent.intcalc();">'); |
|
for (i=0;i<=59;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisseconds) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
|
|
function intday() { |
|
var thisdate=cdays; |
|
var i; |
|
choicewrite('<select name=date onChange="parent.intcalc();">'); |
|
for (i=0;i<=31;i++) { |
|
choicewrite('<option value='+i); |
|
if (i==thisdate) { |
|
choicewrite(' selected'); |
|
} |
|
choicewrite('>'+i+'</option>'); |
|
} |
|
choicewrite('</select>'); |
|
} |
|
|
|
function intcalc() { |
|
var sform=choices.document.forms.sch; |
|
svalue=((sform.date.options[sform.date.selectedIndex].value*24+ |
|
sform.hours.options[sform.hours.selectedIndex].value*1)*60+ |
|
sform.minutes.options[sform.minutes.selectedIndex].value*1)*60+ |
|
sform.seconds.options[sform.seconds.selectedIndex].value*1; |
|
draw(); |
|
} |
|
|
|
function integereval() { |
|
svalue=choices.document.forms.sch.intval.value; |
|
svalue=Math.round(svalue); |
|
if (pscat=='zeropos') { svalue=Math.abs(svalue); } |
|
if ((pscat=='pos') && (svalue==0)) { |
|
svalue=''; |
|
} |
|
if (pscat.indexOf('range')!=-1) { |
|
var rangeparts=new Array; |
|
rangeparts=split('_',pscat); |
|
rangeparts=split('...',rangeparts[1]); |
|
if (svalue<rangeparts[0]) { svalue=rangeparts[0]; } |
|
if (svalue>rangeparts[1]) { svalue=rangeparts[1]; } |
|
} |
|
draw(); |
|
} |
|
|
|
function floateval() { |
|
svalue=choices.document.forms.sch.floatval.value; |
|
svalue=1.0*svalue; |
|
if (pscat=='pos') { svalue=Math.abs(svalue); } |
|
if ((pscat=='zeroone') && ((svalue<0) || (svalue>1))) { |
|
svalue=''; |
|
} |
|
draw(); |
|
} |
|
|
|
function stringeval() { |
|
svalue=choices.document.forms.sch.stringval.value; |
|
draw(); |
|
} |
|
|
|
function intervaldis() { |
|
csecs=svalue; |
|
cdays=Math.floor(csecs/86400); |
|
csecs-=cdays*86400; |
|
chours=Math.floor(csecs/3600); |
|
csecs-=chours*3600; |
|
cmins=Math.floor(csecs/60); |
|
csecs-=cmins*60; |
|
choicewrite(cdays+' days '+chours+' hours ' |
|
+cmins+' mins '+csecs+' secs'); |
|
} |
|
|
|
|
|
|
function afterproc() { |
function afterproc() { |
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Error after rounding: ' |
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Error after rounding: ' |
+'<input type=checkbox name=val1></td></tr>'); |
+'<input type=checkbox name=val1></td></tr>'); |
Line 59 function afterproc() {
|
Line 294 function afterproc() {
|
|
|
function draw() { |
function draw() { |
choicestart(); |
choicestart(); |
choicewrite('<form name=sch>'); |
choicewrite('<form name=sch'); |
|
if (ptype=='int') { |
|
choicewrite(' action="javascript:integereval();"'); |
|
} |
|
if (ptype=='float') { |
|
choicewrite(' action="javascript:floateval();"'); |
|
} |
|
if (ptype=='string') { |
|
choicewrite(' action="javascript:stringeval();"'); |
|
} |
|
choicewrite('>'); |
if (ptype=='tolerance') { |
if (ptype=='tolerance') { |
// 0: scat |
// 0: pscat |
// 1: after processing |
// 1: after processing |
if (scat=='default') { |
if (pscat=='default') { |
tablestart('Use default value or algorithm of resource'); |
tablestart('Use default value or algorithm of resource'); |
} |
} |
if (scat=='exact') { |
if (pscat=='exact') { |
tablestart('Accept only exact value, zero tolerance'); |
tablestart('Accept only exact value, zero tolerance'); |
afterproc(); |
afterproc(); |
} |
} |
if (scat=='relative_sym') { |
if (pscat=='relative_sym') { |
// 2: percentage |
// 2: percentage |
// 3: open |
// 3: open |
tablestart('Percentage error, symmetric around value'); |
tablestart('Percentage error, symmetric around value'); |
valline('Percentage',2,3); |
valline('Percentage',2,3); |
afterproc(); |
afterproc(); |
} |
} |
if (scat=='relative') { |
if (pscat=='relative') { |
// 2: left |
// 2: left |
// 3: open |
// 3: open |
// 4: right |
// 4: right |
Line 87 function draw() {
|
Line 332 function draw() {
|
valline('Lower percentage',4,5); |
valline('Lower percentage',4,5); |
afterproc(); |
afterproc(); |
} |
} |
if (scat=='absolute_sym') { |
if (pscat=='absolute_sym') { |
tablestart('Absolute error, symmetric around value'); |
tablestart('Absolute error, symmetric around value'); |
valline('Value',2,3); |
valline('Value',2,3); |
afterproc(); |
afterproc(); |
} |
} |
if (scat=='absolute') { |
if (pscat=='absolute') { |
tablestart('Absolute error, asymmetric around value'); |
tablestart('Absolute error, asymmetric around value'); |
valline('Upper value',2,3); |
valline('Upper value',2,3); |
valline('Lower value',4,5); |
valline('Lower value',4,5); |
afterproc(); |
afterproc(); |
} |
} |
if (scat=='sigdigits') { |
if (pscat=='sigdigits') { |
tablestart('Agreement on significant digits'); |
tablestart('Agreement on significant digits'); |
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Number of digits: ' |
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Number of digits: ' |
+'<input type=text size=4 name=val2></td></tr>'); |
+'<input type=text size=4 name=val2></td></tr>'); |
|
|
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Accept if more digits given: ' |
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>Accept if more digits given: ' |
+'<input type=checkbox name=val3></td></tr>'); |
+'<input type=checkbox name=val3></td></tr>'); |
|
|
} |
} |
} |
} |
|
|
if (ptype=='date') { |
if (ptype=='date') { |
choicewrite(''); |
if (pscat=='default') { |
|
tablestart('Default value or none'); |
|
choicewrite('</table>'); |
|
} else { |
|
if (pscat=='start') { |
|
tablestart('Starting or opening date and time'); |
|
} |
|
if (pscat=='end') { |
|
tablestart('Ending or closing date and time'); |
|
} |
|
if (pscat=='interval') { |
|
tablestart('Time interval'); |
|
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>'); |
|
intervaldis(); |
|
choicewrite('</td></tr><tr bgcolor="#AAFFAA"><td>Time:' |
|
+'</td><td colspan=2>'); |
|
intday();choicewrite('days '); |
|
inthour();choicewrite('hours '); |
|
intminute(); choicewrite('mins '); intsecond(); |
|
choicewrite('secs</td></tr></table>'); |
|
} else { |
|
choicewrite('<tr bgcolor="#AAFFAA"><td colspan=3>' |
|
+cdate.toString()+ |
|
'</td></tr><tr bgcolor="#AAFFAA"><td>Date:</td><td colspan=2>'); |
|
month();date();year(); |
|
choicewrite('</td></tr><tr bgcolor="#AAFFAA"><td>Time:' |
|
+'</td><td colspan=2>');hour();choicewrite('h ');minute(); |
|
choicewrite('m ');second(); |
|
choicewrite('s</td></tr></table>'); |
|
} |
|
} |
} |
} |
|
|
if (ptype=='value') { |
if (ptype=='int') { |
|
if (pscat=='default') { |
|
tablestart('Default value or none'); |
|
choicewrite('</table>'); |
|
} else { |
|
if (pscat=='pos') { |
|
tablestart('Positive (non-zero) integer'); |
|
} |
|
if (pscat=='zeropos') { |
|
tablestart('Positive integer or zero'); |
|
} |
|
if (pscat.indexOf('range')!=-1) { |
|
var rangeparts=new Array; |
|
rangeparts=split('_',pscat); |
|
tablestart('Integer in the range ['+rangeparts[1]+']'); |
|
} |
|
if (pscat=='any') { |
|
tablestart('Integer'); |
|
} |
|
choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); |
|
choicewrite('<input name=intval size=10 value="'+svalue+ |
|
'" name=intval onChange="parent.integereval()">'); |
|
choicewrite('</td></table>'); |
|
} |
} |
} |
|
|
if (ptype=='truefalse') { |
if (ptype=='float') { |
|
if (pscat=='default') { |
|
tablestart('Default value or none'); |
|
choicewrite('</table>'); |
|
} else { |
|
if (pscat=='pos') { |
|
tablestart('Positive floating point number or zero'); |
|
} |
|
if (pscat=='zeroone') { |
|
tablestart('Floating point number between zero and one'); |
|
} |
|
if (pscat=='any') { |
|
tablestart('Floating point number'); |
|
} |
|
choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); |
|
choicewrite('<input name=floatval size=10 value="'+svalue+ |
|
'" name=floatval onChange="parent.floateval()">'); |
|
choicewrite('</td></table>'); |
|
} |
} |
} |
|
|
if (ptype=='check') { |
if (ptype=='string') { |
|
if (pscat=='default') { |
|
tablestart('Default value or none'); |
|
choicewrite('</table>'); |
|
} else { |
|
if (pscat=='any') { |
|
tablestart('Text'); |
|
} |
|
choicewrite('<tr bgcolor="#AAFFAA"><td>Value:</td><td colspan=2>'); |
|
choicewrite('<input name=intval size=20 value="'+svalue+ |
|
'" name=stringval onChange="parent.stringeval()">'); |
|
choicewrite('</td></table>'); |
|
} |
} |
} |
|
|
if (ptype=='radio') { |
|
} |
|
choicewrite('</table></form>'); |
choicewrite('</table></form>'); |
choiceend(); |
choiceend(); |
} |
} |
|
|
function sopt(va,text) { |
function sopt(va,text) { |
selwrite('<option value="'+va+'"'); |
selwrite('<option value="'+va+'"'); |
if (va==scat) { |
if (va==pscat) { |
selwrite(' selected'); |
selwrite(' selected'); |
} |
} |
selwrite('>'+text+'</option>'); |
selwrite('>'+text+'</option>'); |
Line 138 function sopt(va,text) {
|
Line 464 function sopt(va,text) {
|
|
|
function catchange() { |
function catchange() { |
var sform=selector.document.forms.fsel.fcat; |
var sform=selector.document.forms.fsel.fcat; |
scat=sform.options[sform.selectedIndex].value; |
pscat=sform.options[sform.selectedIndex].value; |
draw(); |
draw(); |
} |
} |
|
|
function assemble() { |
function assemble() { |
|
if ((ptype=='date') && (pscat!='interval')) { |
|
svalue=Math.round(cdate.getTime()/1000); |
|
} |
|
if (pscat=='default') { svalue=''; } |
|
stype=ptype+'_'+pscat; |
} |
} |
|
|
function disassemble() { |
|
} |
|
|
|
function init() { |
function init() { |
var i; |
var i; |
|
var subs=new Array(); |
var namevalue=this.window.location.search.split('&'); |
var namevalue=this.window.location.search.split('&'); |
namevalue[0]=namevalue[0].substr(1,namevalue[0].length-1); |
namevalue[0]=namevalue[0].substr(1,namevalue[0].length-1); |
|
|
for (i=0;i<namevalue.length;i++) { |
for (i=0;i<namevalue.length;i++) { |
var pair=namevalue[i].split('='); |
var pair=namevalue[i].split('='); |
if (pair[0]=='type') { ptype=pair[1]; } |
pair[1]=unescape(pair[1]); |
if (pair[0]=='value') { pvalue=pair[1]; } |
if (pair[0]=='value') { pvalue=pair[1]; } |
|
if (pair[0]=='type') { subs=pair[1].split('_'); |
|
ptype=subs[0]; |
|
pscat=subs[1]; |
|
if (typeof(subs[2])!="undefined") { |
|
pscat+='_'+subs[2]; |
|
} |
|
if ((pscat=='') || (typeof(pscat)=="undefined")) { |
|
pscat='default'; |
|
} |
|
} |
if (pair[0]=='return') { preturn=pair[1]; } |
if (pair[0]=='return') { preturn=pair[1]; } |
if (pair[0]=='call') { pcode=pair[1]; } |
if (pair[0]=='call') { pcode=pair[1]; } |
if (pair[0]=='options') { poptions=pair[1]; } |
if (pair[0]=='marker') { pmarker=pair[1]; } |
if (pair[0]=='name') { pname=pair[1]; } |
if (pair[0]=='name') { pname=pair[1]; } |
} |
} |
|
|
svalue=pvalue; |
svalue=pvalue; |
|
if (((ptype=='float') || (ptype=='string') || (ptype=='int')) && |
|
(pscat=='default') && |
|
(typeof(svalue)!="undefined") && |
|
(svalue!=0) && (svalue!='')) { pscat='any'; } |
|
|
this.window.selector.document.clear(); |
this.window.selector.document.clear(); |
selwrite('<html><body bgcolor="#FFFFFF">'); |
selwrite('<html><body bgcolor="#FFFFFF">'); |
|
|
selwrite('<form name="fsel"><h2>'+pname+'</h2>'); |
selwrite('<form name="fsel"><b>'+pname+'</b><br>'); |
selwrite('<select name="fcat" onChange="parent.catchange();">'); |
selwrite('<select name="fcat" onChange="parent.catchange();">'); |
if (ptype=='tolerance') { |
if (ptype=='tolerance') { |
sopt('default','Default'); |
sopt('default','Default'); |
Line 185 function init() {
|
Line 528 function init() {
|
sopt('default','Default'); |
sopt('default','Default'); |
sopt('start','Starting Date'); |
sopt('start','Starting Date'); |
sopt('end','Ending Date'); |
sopt('end','Ending Date'); |
sopt('interval','Starting and Ending Date'); |
sopt('interval','Time Interval'); |
|
|
|
if ((pvalue!='') && (typeof(pvalue)!="undefined")) { |
|
cdate.setTime(pvalue*1000); |
|
} |
|
|
|
months[0]='January'; |
|
months[1]='February'; |
|
months[2]='March'; |
|
months[3]='April'; |
|
months[4]='May'; |
|
months[5]='June'; |
|
months[6]='July'; |
|
months[7]='August'; |
|
months[8]='September'; |
|
months[9]='October'; |
|
months[10]='November'; |
|
months[11]='December'; |
} |
} |
|
|
if (ptype=='value') { |
if (ptype=='int') { |
|
sopt('default','Default'); |
|
sopt('pos','Positive Integer, Not Zero'); |
|
sopt('zeropos','Positive Integer or Zero'); |
|
sopt('range','Integer Range'); |
|
sopt('any','Integer'); |
} |
} |
|
|
if (ptype=='truefalse') { |
if (ptype=='float') { |
} |
sopt('default','Default'); |
|
sopt('zeroone','Floating Point between 0 and 1'); |
|
sopt('pos','Positive Floating Point'); |
|
sopt('any','Floating Point'); |
|
|
if (ptype=='check') { |
|
} |
} |
|
|
if (ptype=='radio') { |
if (ptype=='string') { |
|
sopt('default','Default'); |
|
sopt('string','String Value'); |
} |
} |
|
|
selwrite('</select></form>'); |
selwrite('</select></form>'); |
|
|
selwrite('<a href="javascript:assemble();'); |
selwrite('<a href="javascript:parent.assemble();'); |
if (preturn!='') { |
if (preturn!='') { |
selwrite('opener.'+preturn+'=this.window.svalue;'); |
selwrite( |
|
'parent.opener.document.'+preturn+'_value.value=parent.window.svalue;'); |
|
selwrite( |
|
'parent.opener.document.'+preturn+'_type.value=parent.window.stype;'); |
|
} |
|
if (pmarker!='') { |
|
selwrite( |
|
'parent.opener.document.'+preturn+'_marker.value=parent.window.pmarker;'); |
|
} |
|
if (pcode!='') { |
|
selwrite('parent.opener.'+pcode+'();'); |
|
} |
|
selwrite('">Store</a> '); |
|
|
|
selwrite('<a href="javascript:'); |
|
selwrite( |
|
'parent.opener.document.'+preturn+'_value.value='+"'';"); |
|
if (pmarker!='') { |
|
selwrite( |
|
'parent.opener.document.'+preturn+'_marker.value=parent.window.pmarker;'); |
|
} |
|
if (pcode!='') { |
|
selwrite('parent.opener.'+pcode+'();'); |
|
} |
|
selwrite('">Delete</a> '); |
|
|
|
selwrite('<a href="javascript:'); |
|
if (preturn!='') { |
|
selwrite('parent.opener.document.'+preturn+'_value.value='+"'';"); |
|
selwrite('parent.opener.document.'+preturn+'_type.value='+"'';"); |
|
} |
|
if (pmarker!='') { |
|
selwrite('parent.opener.document.'+preturn+'_marker.value='+"'';"); |
} |
} |
if (pcode!='') { |
if (pcode!='') { |
selwrite('opener.'+pcode+';'); |
selwrite('parent.opener.'+pcode+'();'); |
} |
} |
selwrite('">Store</a>'); |
selwrite('">Cancel</a>'); |
|
|
selwrite('</body></html>'); |
selwrite('</body></html>'); |
this.window.selector.document.close(); |
this.window.selector.document.close(); |
|
draw(); |
|
|
} |
} |
|
|
</script> |
</script> |
|
|
<frameset rows="50,*" onLoad="init();"> |
<frameset rows="120,*" onLoad="init();"> |
<frame name=selector src="empty.html"> |
<frame name=selector src="empty.html"> |
<frame name=choices src="empty.html"> |
<frame name=choices src="empty.html"> |
</frameset> |
</frameset> |