/*Copyright © 2001-2010 David Titheridge & Sheila Woodgate, Department of Chemistry, The University of Auckland*/
if($.browser.msie&&parseInt($.browser.version)<7){
$('html').addClass('ie6');}
$(function(){
if($.resizable){
$(".resizable").resizable({
aspectRatio:true,autoHide:true});}
if($.draggable){
$(".draggable").draggable({});}});
if(window.parent){
document.title=parent.document.title;}
var bcConst={
SUBSCRIBEMSG:'<div title="Bestchoice Licence Required">You are welcome to use the public Bestchoice topics as long as you wish. To access full Bestchoice content, <i>buy a licence</i> or <i>enter the codes</i> provided by a teacher who has purchased a site licence.</div>',
SUBSCRIBEPAGE:'/subscribe/bcShop.aspx',
monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],
dayNames:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
RegExpWhiteSpace:/^\s*$/,
RegExpValidInputChars:/^[0-9a-zA-Z,\.\/\?;:'\[\]\{\}\|\\~!@\#\$%\^&\*\(\)_\+\-=\040]*$/,
RegExpValidInputChars2:/^[0-9a-zA-Z,\.\/\?;:'\[\]\{\}\|\\~!@\#\$%\^&\*\(\)_\+\-=\040"\<\>]*$/,// as above, plus "<>-for eg textarea comment
RegExpValidInputCharsErrorMsg:'Invalid character (eg <>)',
scoreBarTitle:[' right first time. ',' right after error. ',' gave up. ',' untried. '],
commentDisclaimer:"Comments may be quoted in publications without revealing your identity.",
adminLinks:'<a href="/bcreport" target="_blank" title="View Bestchoice Reports of class results">Reports</a><a href="/bcadmin/" target="_blank">Editor</a><a href="/admin/Cache_Control.aspx" target="bccache">Cache</a>',
reportLinks:'<a href="/bcreport" target="_blank" title="View Bestchoice Reports of class results">Bestchoice Reports</a>',
waitMsgDiv:'<div class="waitMsg boxShadow"></div>',
testMsg:"You have only one attempt per question!",
pageSlideMenuBar:'',
MAXCOMMENTS:5,
MAXDEMOCOMMENTS:2,
defaultTestStyle:0,
defaultUserMode:1,
eastPaneCaption:'C<BR>o<BR>n<BR>t<BR>a<BR>c<BR>t<BR><BR><b>&#171;</b>',
eastPaneCaption_subtopic:'P<BR>a<BR>g<BR>e<BR>s<BR><BR><b>&#171;</b>',
pageToolbar:'<div id="bcPageHeader" class="noprint nohh">'+'<a onclick="bc.printPage()" href="#" title="Print (Alt-p)"><span class="ui-icon ui-corner-all ui-icon-print"></span></a>'+'<a onclick="bc.toggleLayoutMode();" href="#" title="Full screen view on/off"><span class="ui-icon ui-corner-all ui-icon-arrow-4-diag" ></span></a>'+'<a onclick="bc.closeSubtopic(true);" href="#" title="Course home"><span class="ui-icon ui-corner-all ui-icon-home"></span></a>'+'</div>',
pageToolbarPrint:'<div id="bcPageHeader" class="noprint nohh"><a onclick="bc.printPage()" href="#" title="Print (Alt-p)"><span class="ui-icon ui-corner-all ui-icon-print"></span></a></div>',
lineSparkGraphSettings:{type:'line',height:'23px',spotRadius:'1.5',defaultPixelsPerValue:'4',spotColor:'',lineColor:'#003366',fillColor:'#fff4c0'}};
function toggleinline(toggleId){
fun.toggleinline(toggleId);}
var fun={
timeStamp:function(){
var tstmp=new Date();
return tstmp.getTime();},
queryStringToObject:function(){
var key,val,queryParams={};
var qs=window.location.href;
var qs1=qs.indexOf("?");
if(qs1<0){
return false;}
qs=qs.substr(qs1+1);
qs=qs.replace('#','&');
qs=qs.replace(/\+/g,' ');
var parms=qs.split('&');
for(var i=0;i<parms.length;i++){
var pos=parms[i].indexOf('=');
if(pos>0){
key=parms[i].substring(0,pos);
val=unescape(parms[i].substring(pos+1));
queryParams[key]=val;}}
return queryParams;},
stripeTable:function(){
$("table.stripe tbody").each(function(i){
$(this).find("tr:odd").addClass("r1").end().find("tr:even").addClass("r2").end();});},
confirmAction2:function(msg){
if(confirm(msg)==true){
return true;}else{
return false;}},
lastclickButton:false,
disableButton:function(){
if(fun.lastclickButton){
fun.lastclickButton.disabled=true;
if(fun.lastclickButton.href){fun.lastclickButton.href="#";}
if(fun.lastclickButton.onclick){fun.lastclickButton.onclick="return false;";}}},
preloadImageArray:new Array(),
preloadImages:function(){
var imgArrOffset=fun.preloadImageArray.length;
for(var x=0;x<fun.preloadImages.arguments.length;x++){
fun.preloadImageArray[x+imgArrOffset]=new Image();
fun.preloadImageArray[x+imgArrOffset].src=fun.preloadImages.arguments[x];}},
loadSelect:function(selectId,optionsArray,valueIndex,textIndex,startOptions,val){
var opts=startOptions?startOptions:'',drop=$('#'+selectId);
if(!valueIndex){
valueIndex=0;
textIndex=1;}
if(drop){
for(var i=0;i<optionsArray.length;i++){
opts+='<option value="'+optionsArray[i][valueIndex]+'">'+optionsArray[i][textIndex]+'</option>';}
drop.html(opts);
if(val){
drop.val(val);}}},
addHeaderScript:function(src){
var scriptElement=document.createElement("script");
scriptElement.type="text/javascript";
scriptElement.src=src;
document.getElementsByTagName("head")[0].appendChild(scriptElement);},
displaynone:function(objname){
if(document.getElementById(objname)){
document.getElementById(objname).style.display='none';}},
displayblock:function(objname){
document.getElementById(objname).style.display='block';},
displayinline:function(objname){
document.getElementById(objname).style.display='inline';},
toggleinline:function(objName){
var thisobj=document.getElementById(objName);
thisobj.style.display=(thisobj.style.display=="inline")?"none":"inline";},
setImage:function(imgid,imgfile){
var thisimg=document.getElementById(imgid);
thisimg.style.display='inline';
thisimg.src=imgfile;},
popWindow:function(url,w,h,wid){
var fmt='toolbar=no,menubar=no,resizable=yes,scrollbars=yes';
if(w!=''){fmt+=',width='+w;}
if(h!=''){fmt+=',height='+w;}
wid=window.open(url,wid,fmt);
wid.focus();},
gotoUrl:function(url,windowObj,reload,replaceit){
if(!windowObj){return;}
replaceit=true;
reload=true;
if(reload||(url!=windowObj.location.pathname)){
if(replaceit){
windowObj.location.replace(url);}else{
windowObj.location.href=url;}}},
makeNewArray:function(size,defaultval){
var arr=new Array(size);
for(var i=0;i<size;i++){arr[i]=defaultval;}
return arr;},
stringToBoolArray:function(bitString){
var size=bitString.length;
var arr=new Array(size-1);
for(var i=0;i<size;i++){
arr[i]=(bitString.charAt(i)==true);}
return arr;},
replaceString:function(s,f,r){
var i;
i=s.indexOf(f);
if(i>-1){
s=s.substring(0,i)+r+s.substr(i+f.length);}
return s;},
formatFractionPercent:function(a,b,custom){
var tmp,p=0;
var options={
subsuperScript:false,showPercent:true,noRound:false};
if(custom){
$.extend(options,custom);}
if(!a||isNaN(a)){a=0;}
if(!b||isNaN(b)){b=0;}
if(a>0&&b>0&&options.showPercent){
p=100*a/b;
p=(p>=10)?Math.round(p):Math.round(10*p)/10;}
if(!options.noRound){
a=Math.round(a);
b=Math.round(b);}
if(options.subsuperScript){
tmp='<sup>'+a+'</sup>'+" / "+'<sub>'+b+'</sub>';}else{
tmp=a+" / "+b;}
if(options.showPercent&&p>0){
tmp+=" = "+p+"%";}
return tmp;},
daysToDate:function(days){
var d=new Date();
if(days>0){
d.setTime(86400000*days);}
return d;},
dpRound:function(val,dp){
if(isNaN(dp)||dp==''){dp='0';}
var ndp=parseInt(dp);
var d=parseFloat(val);
return Math.round(d*Math.pow(10,ndp))/Math.pow(10,ndp);},
Sign:function Sign(x){
return x>0?1:x<0?-1:0;},
randomOrder:function(){
return(Math.round(Math.random())-0.5);},
errorSpan:function(html){
return "<span class='error'>"+html+"</span>";},
htmlFraction:function(nominator,denominator,attribs){
return '<sup '+attribs+'>'+nominator+'</sup>/<sub '+attribs+'>'+denominator+'</sub>';}};
function jalert(msg,caption){
msg="<div>"+msg+"</div>";
if(!caption){caption=document.title;}
var $dialog=$(msg).dialog({
resizable:false,
title:caption,
modal:true,
autoOpen:true,
buttons:{
Ok:function(){$(this).dialog('close');}}});}
Array.prototype.sum=function(){
for(var i=0,sum=0;i<this.length;sum+=this[i++]){}
return sum;};
Array.prototype.max=function(){
return Math.max.apply({},this);};
Array.prototype.min=function(){
return Math.min.apply({},this);};
Date.prototype.ShortDate=function(){
return this.getDate()+" "+bcConst.monthNames[this.getMonth()].substr(0,3)+" "+this.getFullYear();};
var bcInParent=false;
try{
if(parent&&parent.window["bc"]){
bcInParent=true;}}catch(e){}
if(bcInParent){
bc=parent.bc;}else if(!window["bc"]){
window["bc"]={
user:{
scores:{},
config:{
showHistory:true,useHardMode:false,
expandPageFooterToolbar:true}},
mode:"",
userdataLoadedCsid:-1,
custom:{css:''},
currentCourse:null,
currentTopic:null,
currentCS:null,
printFooter:'',
CourseClassObj:function(id,name,courseid,message,defaultUserMode,testStyle,numUsers,currentRank,marksObj,hideTopics,customTopicsArr){
this.id=id;
this.name=name;
this.courseid=courseid;
this.message=message;
this.defaultUserMode=defaultUserMode;
bc["defaultUserMode"+courseid]=defaultUserMode;
this.testStyle=testStyle;
if(!bc["testStyle"+courseid]||testStyle>bc["testStyle"+courseid]){
bc["testStyle"+courseid]=testStyle;}
this.numUsers=numUsers;
this.currentRank=currentRank;
this.userMarks=marksObj;
if(hideTopics=='ALL'){
bc.custom["hideAllMenuNodes"+courseid]=true;}else if(hideTopics!=''){
var hideNodes=hideTopics.split(',');
for(var i=0;i<hideNodes.length;i++){
bc.custom[hideNodes[i]+"hide"]=true;}}
this.customTopicsArr=customTopicsArr;
if(!bc.user["classArr"+courseid]){
bc.user["classArr"+courseid]=[];}
bc.user["classArr"+courseid].push(id);
bc.user["cc"+id]=this;},
ClassTopicObj:function(topicid,csid,showLink,message,userMode,highlightColor,sortOrder,customName){
this.topicid=topicid;
this.csid=csid;
this.showLink=showLink;
this.message=message;
this.userMode=userMode;
this.highlightColor=highlightColor;
this.sortOrder=sortOrder;
this.customName=customName;
var name;
if(csid>0){
name="cs"+csid;}else{
name="t"+topicid;}
bc.custom[name]=this;
if(highlightColor!=''){
bc.custom.css+='.'+name+'{border-color:'+highlightColor+'  !important;}';}},
SubjectObj:function(id,name){
this.id=id;
this.name=name;
bc["sa"+id]=this;},
CourseObj:function(id,name,isDemo,regionid,numSubtopics,totMarks){
this.id=id;
this.name=name;
this.isDemo=isDemo;
this.regionid=regionid;
this.numSubtopics=numSubtopics;
this.totMarks=totMarks;
if(!bc.user.scores["c"+id]){
bc.user.scores["c"+id]=new bc.MarksObj(0,0,0);}
this.userMarks=bc.user.scores["c"+id];
this.userMarks.outOf=this.totMarks;
bc["course"+id]=this;},
TopicObj:function(id,parentId,name,cssFormat,childArray){
this.idCode="t"+id;
this.id=id;
this.parentId=parentId;
this.name=name;
this.cssFormat=cssFormat;
this.childArray=childArray;
this.numChildren=childArray.length;
this.customOrder=0;
this.nodeType="t";
var nodeCustomSettings=bc.custom["t"+id];
if(nodeCustomSettings){
this.userMode=nodeCustomSettings.userMode;
this.bgColor=nodeCustomSettings.highlightColor;
this.customOrder=nodeCustomSettings.sortOrder;
if(nodeCustomSettings.customName!=''){
this.name=nodeCustomSettings.customName;}}
bc["topic"+id]=this;},
CSObj:function(id,parentId,name,cssFormat,subtopicid,totalMarks,coreMarks,numQuestions,numCoreQuestions,numPages,numCorePages,sa,sa_subtopic,isMobile,isPrivate,mustSubscribe,randomOrder,showScore,QMode,showQA,canAsk,canAnswer,csPageRangeArray){
var pr,prObj;
this.idCode="s"+id;
this.id=id;
this.subtopicid=subtopicid;
this.topicid=parentId;
this.topic=bc["topic"+parentId];
this.name=name;
this.cssFormat=cssFormat;
this.totMarks=totalMarks;
this.coreMarks=coreMarks;
this.numQuestions=numQuestions;
this.numCoreQuestions=numCoreQuestions;
this.numPages=numPages;
this.numCorePages=numCorePages;
this.sa=sa;
this.sa_subtopic=sa_subtopic;
this.isMobile=isMobile;
this.isPrivate=(isPrivate||bc.custom["cs"+id+"hide"]||bc.custom["hideAllMenuNodes"+bc.c])?true:false;
this.mustSubscribe=mustSubscribe;
this.randomOrder=randomOrder;
this.showScore=showScore;
this.QMode=QMode;
this.canChooseQMode=(this.QMode==0);
this.showQA=showQA;
this.canAsk=canAsk;
this.canAnswer=canAnswer;
this.canShowExtraQuestions=false;
this.csPageRangeArr=[];
for(var i=0;i<csPageRangeArray.length;i++){
pr=csPageRangeArray[i];
prObj={startPage:pr[0],endPage:pr[1],subsetSize:pr[2],pageStyleId:pr[2]};
this.csPageRangeArr.push(prObj);
if(prObj.subsetSize>0){
this.canShowExtraQuestions=true;}}
this.customOrder=0;
this.nodeType="s";
this.pageGroupArr=[];
this.pageArr=[];
this.status=function(x){
if(x.isPrivate){
if(!(bc.custom["cs"+id]||bc.custom["t"+x.topicid])){
return -1;}}
if(x.mustSubscribe){
if(bc.mustSubscribe&&!bc.user.isSubscribed){
return 0;}}
return 1;}(this);
if(!bc.user.scores["cs"+id]){
bc.user.scores["cs"+id]=new bc.MarksObj(0,0,0);}
this.userMarks=bc.user.scores["cs"+id];
this.userMarks.outOf=this.totMarks;
var nodeCustomSettings=bc.custom["cs"+id];
if(nodeCustomSettings){
this.userMode=nodeCustomSettings.userMode;
this.bgColor=nodeCustomSettings.highlightColor;
this.customOrder=nodeCustomSettings.sortOrder;
if(nodeCustomSettings.customName!=''){
this.name=nodeCustomSettings.customName;}}
bc["cs"+id]=this;},
PageObj:function(pageid,pagestyleid,pageTitle,dropdownText,subtopiclinkText,hasHardModeQuestions,ppArray){
this.id=pageid;
this.pageid=pageid;
this.pagestyleid=pagestyleid;
this.pageTitle=pageTitle;
this.dropdownText=dropdownText;
this.linkTitle=subtopiclinkText;
this.hasHardMode=(hasHardModeQuestions>0)?true:false;
this.ppArr=ppArray;
this.numpp=ppArray.length;
this.pp=[];
var nq=0,nm=0;
for(var i=0;i<ppArray.length;i++){
if(ppArray[i][1]>0){
nq++;
nm+=ppArray[i][1];
this.pp.push(new bc.PagepartObj(ppArray[i][0],ppArray[i][1]));}}
this.totMarks=nm;
this.numQuestions=nq;
this.pageType=(nq>0)?'q':'r';
bc["page"+pageid]=this;},
PagepartObj:function(pagepartid,totMarks){
this.ppid=pagepartid;
this.totMarks=totMarks;},
MarksObj:function(TotalRight,FirstRight,Giveup,OutOfMarks,firstTimeDays,lastTimeDays){
this.TotalRight=(TotalRight>0)?TotalRight:0;
this.FirstRight=(FirstRight>0)?FirstRight:0;
this.Giveup=(Giveup>0)?Giveup:0;
this.outOf=OutOfMarks?OutOfMarks:0;
this.startDays=firstTimeDays?firstTimeDays:0;
this.endDays=lastTimeDays?lastTimeDays:0;}};
bc.MarksObj.prototype.WrongRight=function(){
return(this.TotalRight-this.FirstRight);};
bc.MarksObj.prototype.MarksArray=function(){
return[this.FirstRight,this.TotalRight-this.FirstRight,this.Giveup];};
bc.MarksObj.prototype.TotPercent=function(){
if(this.outOf>0){
var p=100*this.TotalRight/this.outOf;
return(p>=10)?Math.round(p):Math.round(10*p)/10;}else{
return 0;}};
bc.MarksObj.prototype.AddMarks=function(TotalRight,FirstRight,Giveup){
this.TotalRight+=TotalRight;
this.FirstRight+=FirstRight;
this.Giveup+=Giveup;};
bc.MarksObj.prototype.AddMarksObj=function(bcMarksObj,subtract,copy){
if(copy){
this.FirstRight=bcMarksObj.FirstRight;
this.TotalRight=bcMarksObj.TotalRight;
this.Giveup=bcMarksObj.Giveup;}else if(subtract){
this.FirstRight-=bcMarksObj.FirstRight;
this.TotalRight-=bcMarksObj.TotalRight;
this.Giveup-=bcMarksObj.Giveup;}else{
this.FirstRight+=bcMarksObj.FirstRight;
this.TotalRight+=bcMarksObj.TotalRight;
this.Giveup+=bcMarksObj.Giveup;}};
$.extend(bc,{
setupBC:function(){
var t,tmp;
window.onunload=function(){bc.savePageScore();};
bc.Layout=$('body').layout({
applyDefaultStyles:false,
defaults:{
fxName:"slide",fxSpeed:"slow",
spacing_open:6,spacing_closed:11,togglerLength_closed:180,togglerAlign_closed:"middle",
onresize_end:bc.layoutPaneResize},
north:{
resizable:false,size:56,spacing_closed:12,togglerContent_closed:"Navigation"},
west:{
size:140,minSize:80,maxSize:200,
togglerContent_open:"&lt;",
togglerContent_closed:"M<BR>e<BR>n<BR>u<BR><BR><b>&#187;</b>"},
east:{
size:150,minSize:70,maxSize:250,
togglerContent_open:"&gt;",togglerContent_closed:bcConst.eastPaneCaption,
initClosed:!bc.user.layoutOpen.east}});
if(bc.custom.css!=''){
$('head').append('<style id="injectedCss" type="text/css">'+bc.custom.css+'</style>');}
bc.courseGroupArr=bc["sa"+bc.sa].courseGroupArr;
bc.courseArr=bc["sa"+bc.sa].courseArr;
bc.subjectName=bc["sa"+bc.sa].name;
if(bc.user["csScoresArr"]){
for(var i=0;i<bc.user.csScoresArr.length;i++){
t=bc.user.csScoresArr[i];
bc.user.scores["cs"+t[0]]=new bc.MarksObj(t[1],t[2],t[3],0,0,t[4]);
if(bc.isClassReportMode){
bc.user.scores["cs"+t[0]].numUsers=t[5];}}}
if(bc.user["courseScoresArr"]){
for(var i=0;i<bc.user.courseScoresArr.length;i++){
t=bc.user.courseScoresArr[i];
bc.user.scores["c"+t[0]]=new bc.MarksObj(t[1],t[2],t[3],t[4],t[5],t[6]);
bc.user.scores["courseRank"+t[0]]=t[7];}}
bc.user.details='Bestchoice User: <b>'+bc.user.username+'</b>';
if(bc.user.fullname!=''){bc.user.details+=', Full Name: <b>'+bc.user.fullname+'</b>';}
if(bc.user.studentcode!=''){bc.user.details+=', ID: <b>'+bc.user.studentcode+'</b>';}
if(bc.user.isSubscribed){bc.user.details+=', <i>Licenced</i>';}
if(bc.user.isAdmin==true){
$("#menuAdminLinks").html(bcConst.adminLinks).css("display","block");}else if(bc.user.isReportuser==true){
$("#menuAdminLinks").html(bcConst.reportLinks).css("display","block");}
if(bc.user.isDemo){
$("body").addClass("isDemo");}
$("#navLoginStatus").html(userAccountLinks());
if(bc.mustSubscribe&&!bc.user.isSubscribed){
bc.showSubscribeDialog();}
$("#navToolbar .button, #navSlider .button").hoverLink();
$("#navToolbar").draggable({
iframeFix:true,opacity:0.7,cursor:'move',cancel:".iconRow, #linkToggleFooterMenu"})
$("#navToolbar .iconRow").find("a,span").tooltip({
position:{
my:"right bottom",
at:"left top",
offset:"8 -5"},tooltipClass:"navbarTooltip"});
$("#NavFrame .navLinks").find("a").tooltip({
position:{
my:"right top",
at:"center bottom",
offset:"0 0"},tooltipClass:"navbarTooltip"});
bc2.configureFormValidation();
bc.gotoCourseId(bc.c);
$("#totalCourseMarks").draggable({
iframeFix:true,opacity:0.7,cursor:'move'})
.tooltip({
tooltipClass:"boxShadow menuTooltip"});
if(bc.startCsid>0){
bc.gotoSubtopicId(bc.startCsid,bc.startPageid);}
$.ajax({url:"/scripts/Bestchoice.css",cache:true,dataType:"text"});
$.ajax({url:"/scripts/javascripts.js",cache:true,dataType:"text"});
$.ajax({url:"/scripts/markingscripts.js",cache:true,dataType:"text"});
function userAccountLinks(){
tmp='<b class="navbar" style="margin-right:5px; ">'+bc.user.username+'</b>';
if(bc.mustSubscribe){
if(!bc.user.isSubscribed){
tmp+='<a id="linkSubscribe" href="javascript:bc.showSubscribeDialog();" title="Obtain licence for all Bestchoice content"  style="">Licence</a>';}else{
tmp+='<span title="You are licenced to use all Bestchoice content" class="navbar" style="">Licenced</span>';
if(bc.user.isStaff||bc.user.isReportuser){
tmp+='<a href="/Subscribe/bcShop.aspx?i='+bc.i+'" target="_top" title="Purchase site licence for all Bestchoice content">Licence</a>';}}}
return tmp;}},
layoutPaneResize:function(paneName,paneElement,paneState,paneOptions){
$(".layout-"+paneName+"-size").css("width",paneState.size+"px");
switch(paneName){
case "east":
bc.nav.showSubtopicScoreBar(bc.nav.visibleCsMarks);
break;
case "west":
$("#navTop, #navBottom, #navBottom_home").css("padding-left",(paneState.size+5)+"px");
break;}},
layoutSwapWestEast:function(){
var nav2Footer=$("#nav2Footer");
bc.Layout.swapPanes('east','west');
if(nav2Footer.hasClass("layout-east-size")){
nav2Footer.removeClass("layout-east-size").addClass("layout-west-size").css({'left':'0','right':'auto'});}else{
nav2Footer.removeClass("layout-west-size").addClass("layout-east-size").css({'left':'auto','right':'0'});}},
setupMenu:function(){
var menuHtml;
bc.closeSubtopic(true);
bc.visibleCourseMarks=new bc.MarksObj(0,0,0);
if(bc.c>0){
bc.rv=bc["rv"+bc.currentCourse.regionid];
$("#menuCourseName").text(bc.currentCourse.name);
menuHtml=bc.getSubtopicMenuTree(bc.c);
bc.displayMenuCourseTotalMarks();}else{
$("#menuCourseName").text("Select Course:");
menuHtml=bc.getCourseMenuTree();}
if($('#menuTree ul.tree').length){
$('#menuTree ul.tree').find("li a").tooltip("destroy");}
$("#menuTree").html('<ul class="tree borderbottom ">'+menuHtml+'</ul>');
var $tree=$('#menuTree ul.tree');
$tree.find('li:last-child').addClass('last');
$tree.find("li a").tooltip({
content:function(){
return $(this).find('span.tip').html();},
position:{
offset:"15 0"},
tooltipClass:"boxShadow menuTooltip"});
if(bc.c>0){
$tree.find('ul').hide();
if(bc.user.lastCsid>0){
bc.expandCsTopic(bc.user.lastCsid);
bc.highlightCurrentMenuNode("acs"+bc.user.lastCsid);}}
bc.clearWaitMsg();},
setupSearch:function(){
window.focus();
document.forms[0].search.focus();}});
$.extend(bc,{
showWaitMsg:function(msg){
if(!msg){
msg='Please wait'}
bc.clearWaitMsg();
$(bcConst.waitMsgDiv).html(msg).appendTo("body").position({
my:"center",at:"center",of:"body"});},
clearWaitMsg:function(){
$(".waitMsg").remove();},
gotoCourseId:function(newcourseid){
var url;
bc.c=newcourseid;
bc.currentCourse=(newcourseid>0&&bc["course"+newcourseid])?bc["course"+newcourseid]:null;
if(newcourseid>0){
$("body").addClass("isCourse");
if(bc["courseTopics"+newcourseid]){
bc.setupMenu();}else{
bc.showWaitMsg("Loading course...");
url="/html/sa"+bc.sa+"/menu/i"+bc.i+"/c"+newcourseid+".js";
$.ajax({
type:"GET",
url:url,
dataType:'text',
cache:true,
success:function(data){
eval(data);
bc.setupMenu();},error:function(XMLHttpRequest,textStatus,errorThrown){
alert(textStatus);
bc.clearWaitMsg();}});}}else{
$("body").removeClass("isCourse");
bc.setupMenu();}},
courseDataLoaded:function(){},
gotoTopicId:function(t,toggle){
var url;
var divTopic=$("ul#t"+t+"branch");
bc.currentTopic=bc["topic"+t];
bc.highlightCurrentMenuNode("at"+t);
bc.closeSubtopic();
if(divTopic.css("display")!="none"&&toggle==true){
divTopic.slideUp();}else{
divTopic.slideDown();}
url="/html/sa"+bc.sa+"/menu/i"+bc.i+"/topics"+bc.c+".htm#t"+t;
fun.gotoUrl(url,parent.pagemain);},
gotoSubtopicId:function(csid,pageid){
var cs,url;
if(!(bc.sa>0&&bc.c>0&&bc["cs"+csid])){return;}
bc.closeSubtopic();
bc.user.lastCsid=csid;
bc.csid=csid;
bc.currentCS=bc["cs"+csid];
bc.subtopicid=bc.currentCS.subtopicid;
bc.currentTopic=bc["topic"+bc.currentCS.topicid];
cs=bc.currentCS;
bc.highlightCurrentMenuNode("acs"+csid);
bc.expandCsTopic(csid);
bc.userdataLoadedCsid=-1;
bc.setNavbarTitle();
$("body").addClass("isSubtopic");
$.extend(bc.nav,bc.nav.defaults);
$.extend(bc.nav,{
csid:csid});
if(pageid){
bc.nav.startPageid=pageid;}
if(cs.pageArr.length>0){
bc.nav.setupNavbar();}else{
bc.showWaitMsg("Loading topic...");
url="/html/sa"+cs.sa_subtopic+"/subtopic/s"+cs.subtopicid+".js";
$.ajax({
type:"GET",
url:url,
dataType:'script',
cache:true,
success:bc.configureSubtopicQuestions,
error:function(XMLHttpRequest,textStatus,errorThrown){
alert(textStatus);
bc.clearWaitMsg();}});}
if(!bc.user.isDemo){
if(bc.isClassReportMode){
url="/handlers/getUserData.ashx?action=subtopic&c="+bc.c+"&csid="+csid+"&cc="+bc.cc;}else{
url="/handlers/getUserData.ashx?action=subtopic&c="+bc.c+"&csid="+csid;}
url+='&nocache'+fun.timeStamp();
$.getScript(url);}},
loadUserPpScores:function(ppArr){
var t;
for(var i=0;i<ppArr.length;i++){
t=ppArr[i];
bc.user.scores["pp"+t[0]]=new bc.MarksObj(t[1],t[2],t[3]);
$.extend(bc.user.scores["pp"+t[0]],{
isLocked:t[4],answerStates:t[5],endDays:t[6]});}},
setNavbarTitle:function(){
var titleLinks='',title='',pageHeadTitle='';
var eastPaneCaption=bcConst.eastPaneCaption;
pageHeadTitle="Bestchoice - "+bc.user.username+" - ";
bc.printFooter=bc.subjectName+': '+bc.institutionName;
if(bc.c>0){
bc.printFooter+=' > '+bc.currentCourse.name;
titleLinks='<a href="javascript:bc.gotoCourseId(-1)" title="Change course">'+bc.subjectName+'</a> > ';
if(bc.csid>0){
eastPaneCaption=bcConst.eastPaneCaption_subtopic;
titleLinks+='<a href="javascript:bc.closeSubtopic(true);" title="Course home" >'+bc.currentCourse.name+'</a> > ';
if($(window).width()>1200){
titleLinks+='<a href="javascript:bc.gotoTopicId('+bc.currentCS.topicid+');" title="Topic overview" >'+bc.currentTopic.name+'</a> > ';}
title=bc.currentCS.name;
bc.printFooter+=' > '+bc.currentTopic.name+' > '+bc.currentCS.name;}else{
title=bc.currentCourse.name;}}else{
title=bc.subjectName+': '+bc.institutionName;}
bc.printFooter='<div id="printFooter" class="printonly"><span>'+bc.user.details+'</span>'+bc.printFooter+'</div>';
document.title=pageHeadTitle+title.replace(/<.+?>/g,"");
$("#navTitle").html(titleLinks+'<b>'+title+'</b>');
$("#nav2Title").html('<b>'+title+'</b>');
$(".ui-layout-toggler-east span.content-closed").html(eastPaneCaption);
$(".ui-tooltip.ui-widget").hide();},
configureSubtopicQuestions:function(){
var cs=bc["cs"+bc.csid];
var st=bc["subtopic"+cs.subtopicid];
var prObj,groupPagesArr,lastpageType='';
if(!st){return;}
if(cs.csPageRangeArr.length==0){
prObj={startPage:1,endPage:st.pageArr.length,subsetSize:0,pageStyleId:0};
cs.csPageRangeArr.push(prObj);}
for(var i=0;i<cs.csPageRangeArr.length;i++){
prObj=cs.csPageRangeArr[i];
groupPagesArr=[];
for(var p=prObj.startPage;p<=prObj.endPage;p++){
if(lastpageType!=''&&st.pageArr[p-1].pageType!=lastpageType){
cs.pageArr.push(groupPagesArr);
cs.pageGroupArr.push(prObj.subsetSize);
groupPagesArr=[];
lastpageType='';}
lastpageType=st.pageArr[p-1].pageType;
groupPagesArr.push(st.pageArr[p-1]);}
cs.pageArr.push(groupPagesArr);
cs.pageGroupArr.push(prObj.subsetSize);
groupPagesArr=[];
lastpageType='';}
bc.nav.setupNavbar();},
printPage:function(){
if(frames["pagemain"]){
frames["pagemain"].focus;
frames["pagemain"].print();}
else if(window.print){
window.print();}},
showHideToolBar:function(){
var bar=$("#navToolbar");
var link=bar.find("#linkToggleFooterMenu");
if(link.hasClass("closed")){
link.html('&#187;').attr('title','Hide menu').removeClass("closed");
bar.css('left','auto').animate({right:"0"});}else{
var hideRight=-(bar.width()-10)+'px';
link.html('&#171;').attr('title','Show menu').addClass("closed");
bar.css('left','auto').animate({right:hideRight});}},
loadWelcomePage:function(){
var url='/bcwelcome.aspx?s='+bc.sa+'&i='+bc.i;
if(bc.c>0){
url+='&c='+bc.c;}
fun.gotoUrl(url,parent.pagemain);},
closeSubtopic:function(gotoHome){
$("body").removeClass("isSubtopic isFirstPage isFinalPage isTest isForwardOnly");
bc.nav.preloadPageid=-1;
if(bc.preloadPageTimeout){
clearTimeout(bc.preloadPageTimeout);}
bc.savePageScore();
bc.currentCS=null;
bc.csid=-1;
bc.subtopicid=-1;
bc.nav.cs=null;
bc.nav.pageid=-1;
bc.setNavbarTitle();
if(bc.nav.slider){
bc.nav.slider.slider('destroy').html('');}
$("#dropPages").html('');
$("#navStatus").html("").attr("title","");
$('ul#listPages').find("li a").tooltip("destroy").end().html('');
if(gotoHome){
bc.loadWelcomePage();}},
savePageScore:function(){
var pageframe=top.window.frames["pagemain"];
if(pageframe&&!pageframe.isTest&&pageframe.document.forms['scoreform']&&pageframe.csid>0){
if(pageframe.scoreChanged==true&&bc.user.isDemo==false&&bc.nav.HistoryCheckVisible==false){
pageframe.savePage();
pageframe.scoreChanged=false;}}},
showResourceDialog:function(){
if(!bc["$resourceDialog"]){
if(!bc.resourceArray){return;}
var nr=bc.resourceArray.length,res='';
for(var i=0;i<nr;i++){
if(bc.resourceArray[i][4]==bc.sa){
res+='<a href="javascript:bc.popupResource('+(i+1)+');">'+bc.resourceArray[i][0]+'</a>';}}
if(bc.c>0){
res+='<a href="/bcsearch.aspx?courseid='+bc.c+'" title="Search Bestchoice for specific information" target="bcsearch">Search Bestchoice</a>';}
res='<div id="divResourcePopup" title="Bestchoice Resources">'+res+'</div>';
bc["$resourceDialog"]=$(res)
.dialog({
resizable:true,
modal:false,
autoOpen:false,
width:200,
maxWidth:400});}
bc["$resourceDialog"].dialog('open');},
popupResource:function(i){
if(bc["$resourceDialog"]){
bc["$resourceDialog"].dialog('close');}
if(!bc.resourceArray){return;}
var res=bc.resourceArray[i-1];
var winid="rw"+i;
var url=res[1];
var w=res[2];
var h=res[3];
if(w==0){w=400;}
if(h==0){h=400;}
if(!window[winid]||window[winid].closed==true){
window[winid]=window.open(url,winid,'menubar =no,toolbar=no,status=no,scrollbars=yes,resizable=yes,width='+w+',height='+h);}
window[winid].focus();},
showCommentDialog:function(){
if(!bc["$commentDialog"]){
var res='<div id="commentDialogMsg" style="height:50px; "></div>';
res+='<div id="commentDisclaimer">'+bcConst.commentDisclaimer+'</div>';
res+='<form id="commentForm" class="validate"><select name="categoryid" id="categoryid" style="clear:left;" class="required">';
res+='<option value="">--Choose Category--</option><option value="3">Compliment</option><option value="2">Criticism</option><option value="1">Suggestion</option><option value="6">Bug</option><option value="5">Typo</option></select>';
res+='<textarea name="txtComment" id="txtComment" style="width:98%; height:150px; font-size:12px;" class="required validChars2"></textarea></form>';
res='<div id="divCommentDialog" title="Comments or Suggestions">'+res+'</div>';
bc.$commentDialog=$(res)
.dialog({
resizable:false,
modal:false,
autoOpen:false,
width:400,
buttons:{
'Send Comment':function(){
var categoryid=$(this).find("#categoryid").val();
var comment=$.trim($(this).find("#txtComment").val());
$(this).find("#txtComment").val(comment);
if($("#commentForm").valid()){
var dataObj={action:"feedback",catid:categoryid,comment:comment,
csid:bc.csid,s:bc.subtopicid,pageid:bc.nav.pageid?bc.nav.pageid:-1};
bc.saveComment(dataObj,bc.$commentDialog.find("#commentDialogMsg"));}},
'Close':function(){bc.$commentDialog.dialog('close');}}});
bc.commentFormValidator=$("#commentForm").validate();
$("#txtComment").rules("add",{minlength:2,maxlength:2000});}
var commentMsg="Any feedback, corrections, criticisms or suggested improvements to Bestchoice are appreciated.";
bc.$commentDialog.find("#commentDialogMsg").html(commentMsg);
bc.$commentDialog.find("#txtComment").val("");
bc.$commentDialog.find("#categoryid").val("");
bc.commentFormValidator.resetForm();
bc.$commentDialog.dialog('open');},
saveComment:function(queryParams,jqMsgObj){
bc.showWaitMsg("Saving your feedback...");
$.ajax({
type:"POST",
url:"/handlers/saveUserData.ashx",
cache:false,
data:queryParams,
dataType:"text",
timeout:5000,
success:function(msg){
bc.clearWaitMsg();
jqMsgObj.html("Thank you for your feedback.");
var timer=setTimeout('if(bc["$commentDialog"]) {bc["$commentDialog"].dialog("close");}',1500);},
error:function(XMLHttpRequest,textStatus,errorThrown){
bc.clearWaitMsg();
var msg="An error occured during saving.";
if(textStatus){msg+=" ("+textStatus+")";}
jqMsgObj.html(fun.errorSpan(msg));}});},
showSubscribeDialog:function(){
if(!bc["$subscribeDialog"]){
bc["$subscribeDialog"]=$(bcConst.SUBSCRIBEMSG)
.dialog({
resizable:false,
modal:true,
autoOpen:false,
width:400,
buttons:{
'Buy Licence':function(){
var url=bcConst.SUBSCRIBEPAGE;
if(bc&&bc.i){url+='?i='+bc.i;}
top.document.location=url;},
'Enter Codes':function(){
var url='/ed_User.aspx#licence';
top.document.location=url;},
Cancel:function(){
$(this).dialog('close');}}});}
bc["$subscribeDialog"].dialog('open');},
scoreColorBar:function(m,totMarks,barwidth,custom){
var config={
numBars:3,showSlider:false,showIcon:true,barClass:null,jqBar:null,jqTooltip:false,showOverlay:false};
if(custom){
$.extend(config,custom);}
var p=[];
var colorBar='',barCssClass,barTitle='',sliderLeft=0;
if(m[0]>totMarks){m[0]=totMarks;}
if((m[0]+m[1])>totMarks){m[1]=totMarks-m[0];}
if((m[0]+m[1]+m[2])>totMarks){m[2]=totMarks-(m[0]+m[1]);}
m[3]=totMarks-(m.sum());
var fraction=barwidth/totMarks;
for(var i=0;i<=3;i++){
m[i]=parseInt(m[i]*100)/100;
p[i]=Math.round(m[i]*fraction,0);}
var remainder=barwidth-(p.sum());
if(remainder!=0){
var offset=(remainder>=0)?0:-remainder;
for(var i=config.numBars;i>=0;i--){
if(p[i]>offset){
p[i]+=remainder;
break;}}}
for(var i=0;i<=3;i++){
if(m[i]>0){
if(barTitle!=''&&config.jqTooltip){
barTitle+='<br>';}
barTitle+=m[i]+" mark"+((m[i]>1)?"s":"")+bcConst.scoreBarTitle[i];}}
if(config.showSlider){
if((m[0]+m[1])>0&&(m[2]+m[3])>0){
sliderLeft=p[0]+p[1]-4;}else{
sliderLeft=0;}}
if(config.jqBar){
var barkids;
if(config.jqBar.html()==''){
for(var i=0;i<config.numBars;i++){
barCssClass='qscorebar'+(i+1);
if(config.showIcon){barCssClass+=' qscorebar'+(i+1)+'pic';}
colorBar+="<div style=\"width:0px;\" class=\"" + barCssClass + "\"></div>";}
if(config.showSlider){
colorBar+="<div style=\"left:0px;\" class=\"scorebarmark\"></div>";}
if(config.showOverlay){
colorBar+="<div class=\"overlay\">&nbsp;</div>";}
if(config.barClass){
colorBar="<div class=\"" + config.barClass + "\" style=\"width:" + barwidth + "px\">"+colorBar+"</div>";}
config.jqBar.html(colorBar).css("visibility","visible");}
if(config.barClass){
barkids=config.jqBar.find("div."+config.barClass).find("div");}else{
barkids=config.jqBar.find("div");}
if(config.showSlider){
var tickMarkDiv=config.jqBar.find("div.scorebarmark");
if(sliderLeft>0){
tickMarkDiv.css("left",sliderLeft+"px").show();}else{
tickMarkDiv.hide();}}
for(var i=0;i<config.numBars;i++){
barkids.eq(i).animate({width:p[i]+"px"},300);}
config.jqBar.attr("title",barTitle);
if(config.jqTooltip){
config.jqBar.tooltip({
position:{
offset:"3 0"},tooltipClass:"scorebarTooltip"});}}else{
if(!config.barClass){config.barClass="scorebar";}
if(sliderLeft>0){
colorBar+="<div style=\"left:" + sliderLeft + "px\" class=\"scorebarmark\"></div>";}
for(var i=0;i<=3;i++){
barCssClass='qscorebar'+(i+1)+(config.showIcon?' qscorebar'+(i+1)+'pic':'');
colorBar+="<div style=\"width:"+p[i]+"px;\" class=\"" + barCssClass + "\"></div>";}
colorBar="<div class=\"" + config.barClass + "\" style=\"width:" + barwidth + "px\" title=\"" + barTitle + "\">"+colorBar+"</div>";
return colorBar;}},
pageScoreLink:function(scoreHtml,csid){
return "<a title=\"Page Scores\" href=\"javascript:bc.gotoSubtopicId(" + csid + ",'SCORE')\" class=reslink>"+scoreHtml+"</a>";},
toggleLayoutMode:function(){
var state=bc.Layout.state;
var l={
north:!state.north.isClosed,
west:!state.west.isClosed,
east:!state.east.isClosed};
if(l.west||l.east||l.north){
bc.user.layoutOpen=l;
bc.Layout.close("west");
bc.Layout.close("east");
bc.Layout.close("north");}else{
l=bc.user.layoutOpen;
if(l.west){bc.Layout.open("west");}
if(l.east){bc.Layout.open("east");}
if(l.north){bc.Layout.open("north");}}}});
$.extend(bc,{
highlightCurrentMenuNode:function(itemid){
$("#menuTree .current").removeClass("current");
$("#menuTree").find("#"+itemid).addClass("current").parents("li.topic").addClass("current");},
showAllMenuBranches:function(action){
if(action=='hide'){
$("#menuTree ul.branch").hide(300);}else{
$("#menuTree ul.branch").show(300);}},
expandCsTopic:function(csid){
if(!bc["cs"+csid]){return;}
var topicid=bc["cs"+csid].topicid;
var csParent=$("#t"+topicid+"branch");
if(csParent){
csParent.slideDown();}},
displayMenuCourseTotalMarks:function(){
var courseMarks=bc.visibleCourseMarks;
var percent=courseMarks.TotPercent();
if(percent>100){percent=100;}
var pieMarksArray=courseMarks.MarksArray();
var totalUserMarks=courseMarks.TotalRight+courseMarks.Giveup;
var untriedMarks=courseMarks.outOf-totalUserMarks;
pieMarksArray[3]=untriedMarks;
var barTitle='';
var tmp='<span id="courseTotal_courseName">'+bc.currentCourse.name+"</span>";
tmp+='<span id="courseTotal_marks">';
tmp+=Math.round(courseMarks.TotalRight)+" / "+Math.round(courseMarks.outOf)+' = '+percent+'%</span>';
tmp+='<div id="courseTotal_pieGraph"></div>';
for(var i=0;i<=3;i++){
if(pieMarksArray[i]>0){
barTitle+=pieMarksArray[i]+" mark"+((pieMarksArray[i]>1)?"s":"")+bcConst.scoreBarTitle[i]+"<br>";}}
$("#totalCourseMarks").html(tmp).attr('title',barTitle);
if(totalUserMarks>0){
$("#courseTotal_pieGraph").sparkline(pieMarksArray,{type:'pie',height:'50px',offset:'90',sliceColors:['#66FF99','#CCFFCC','#FFFFCC','silver']});}},
updateMenuScore:function(csid,deltaMarks){
bc.setMenuSubtopicDisplay(csid);
bc.visibleCourseMarks.AddMarksObj(deltaMarks);
bc.displayMenuCourseTotalMarks();},
getMarkBarOffset:function(userMarks,totMarks){
var MARKBARHEIGHT=13,zeroYOffset=-7;
var fraction,markbar1;
fraction=userMarks/totMarks;
if(fraction>1){fraction=1;}
markbar1=Math.floor(fraction*MARKBARHEIGHT);
if(userMarks>0&&markbar1==0){markbar1=1;}
return(zeroYOffset-markbar1);},
qStatusClass:function(marks,outOf){
if(marks<=0){
return 'quntried';}else if(marks>=outOf){
return 'qdone';}else{
return 'qtried';}},
setMenuSubtopicDisplay:function(csid){
var node=bc["cs"+csid];
var cslink=$("#acs"+csid);
var yOffset,qStatusClass;
if(cslink){
yOffset=bc.getMarkBarOffset(node.userMarks.TotalRight,node.totMarks);
qStatusClass=bc.qStatusClass(node.userMarks.TotalRight,node.totMarks);
cslink.css("background-position","0 "+yOffset+"px").find("a.subtopic").removeClass('qdone qtried quntried').addClass(qStatusClass)
.find("span.tip span.usermarks").html(fun.formatFractionPercent(node.userMarks.TotalRight,node.totMarks));}},
getSubtopicMenuTree:function(courseid){
var rootMenuArray=bc["courseTopics"+courseid];
if(!rootMenuArray){return 'Failed to load menu';}
return makeMenu(rootMenuArray,0,0,bc.custom.hideAllMenuNodes);
function sortMenuArray(a,b){
var x=a.customOrder,y=b.customOrder;
if(x==y){
var x2=a.defaultOrder,y2=b.defaultOrder;
return(x2<y2)?-1:1;}
var sx=fun.Sign(x),sy=fun.Sign(y);
if(sx!=sy){return((sx>sy)?-1:1);}
return((x<y)?-1:1);}
function makeMenu(menuArr,depth,topicid,parentIsHidden,topicNode){
var menu="",menuBranch;
var node,nodeTitle2,nodeStyle,yOffset,qStatusClass;
for(var i=0;i<menuArr.length;i++){
menuArr[i].defaultOrder=i;}
menuArr.sort(sortMenuArray);
for(var i=0;i<menuArr.length;i++){
node=menuArr[i];
node.isPrivate=(node.isPrivate||parentIsHidden);
switch(node.nodeType){
case "t":
var submenuArr=node.childArray;
if(submenuArr){
menuBranch=makeMenu(submenuArr,depth+1,node.id,node.isPrivate,node);
if(menuBranch!=""){
nodeTitle2='<b>'+node.name+'</b>';
menu+="<li class='topic' id='at"+node.id+"'>";
menu+='<a class="topic t'+node.id+'" onclick="bc.gotoTopicId('+node.id+',true)" href="#" >';
menu+=node.name;
menu+="<span class='tip'>"+nodeTitle2+"</span>";
menu+="</a>";
menu+="<ul id='t"+node.id+"branch' class='branch'>";
menu+=menuBranch;
menu+="</ul></li>\n";}}
break;
case "s":
if(node.status<0){break;}
bc.visibleCourseMarks.AddMarksObj(node.userMarks);
bc.visibleCourseMarks.outOf+=node.totMarks;
nodeTitle2='';
nodeTitle2+='<b>'+node.name.replace("/"," / ")+'</b>';
nodeTitle2+='<br>'+node.numPages+' pages';
nodeTitle2+='<span class="usermarks">';
if(node.totMarks>0){
nodeTitle2+=fun.formatFractionPercent(node.userMarks.TotalRight,node.totMarks);}
nodeTitle2+='</span>';
if(node.userMarks.endDays>0){
nodeTitle2+=fun.daysToDate(node.userMarks.endDays).ShortDate();}
if(bc.isClassReportMode){
nodeTitle2+="<br>"+node.userMarks.numUsers+" users";}
yOffset=bc.getMarkBarOffset(node.userMarks.TotalRight,node.totMarks);
qStatusClass=bc.qStatusClass(node.userMarks.TotalRight,node.totMarks);
nodeStyle="background-position:0 "+yOffset+"px;";
menu+="<li id='acs"+node.id+"' style='"+nodeStyle+"'";
if(node.status>0){
menu+=" onclick=\"bc.gotoSubtopicId("+node.id+")\" class='subtopic' ";}else{
menu+=" onclick=\"bc.showSubscribeDialog();\" class='subtopic disabled'";}
menu+=">";
menu+="<a class='subtopic cs"+node.id+" "+qStatusClass+"' href='#'>";
menu+=node.name;
menu+="<span class='tip'>"+nodeTitle2+"</span>";
menu+="</a></li>";
break;}}
return menu;}},
getCourseMenuTree:function(){
var headerRow='',footerRow='';
var courseListHTML='';
var groupname,courseArr;
if(!bc.courseArr){return;}
if(bc.courseGroupArr){
for(var groupindex=0;groupindex<bc.courseGroupArr.length;groupindex++){
groupname=bc.courseGroupArr[groupindex];
courseListHTML+='<li class=courseGroup>';
courseListHTML+="<span class=courseGroup>"+groupname+"</span>";
courseArr=bc.courseArr[groupindex];
courseListHTML+='<ul class=branch>'+makeCourseList(courseArr)+'</ul>';
courseListHTML+='</li>';}}else{
courseArr=bc.courseArr;
courseListHTML+=makeCourseList(courseArr);}
courseListHTML=headerRow+courseListHTML+footerRow;
return courseListHTML;
function makeCourseList(courseArr){
var nodeStyle,yOffset,x="";
var course,ctitle,cMarks;
for(var ci=0;ci<courseArr.length;ci++){
course=courseArr[ci];
ctitle='<b>'+course.name+'</b><br>';
ctitle+=course.numSubtopics+' subtopics';
cMarks=bc.user.scores["c"+course.id];
if(cMarks){
ctitle+='<span class="usermarks">';
ctitle+=cMarks.TotalRight+" / "+cMarks.outOf;
if(cMarks.outOf>0&&cMarks.TotalRight>0){
ctitle+=' = '+cMarks.TotPercent()+"%";}
ctitle+='</span>';
if(cMarks.endDays>0){
ctitle+=fun.daysToDate(cMarks.endDays).ShortDate();}}else{
ctitle+=' 0 / '+course.totMarks;
x+="";}
yOffset=bc.getMarkBarOffset(cMarks.TotalRight,cMarks.outOf);
nodeStyle="background-position:0 "+yOffset+"px;";
x+="<li class='subtopic' style='"+nodeStyle+"'><a href=\"javascript:bc.gotoCourseId(" + course.id + ");\" class='subtopic'>";
x+=course.name;
x+='<span class="tip">'+ctitle+'</span>';
x+="</a></li>";}
return x;}},
setupContentsPage:function(){
var contentsHtml="",tmp,stripeClass='r1';
var csPageDropArray=bc.nav.csPageDropArray;
var page,numDropPages=csPageDropArray.length;
var headerRow='<thead><tr class="headerrow bordertop borderbottom">'+
'<th class="">Page</th><th class="">&nbsp;</th><th class="marks">Marks</th><th class="percent">Percent</th><th class="date">Last Date</th></tr></thead>';
var	footerRow='<tfoot><tr class="footerrow bordertop borderbottom"><td class="alignLeft">TOTAL</td><td>&nbsp;</td>';
footerRow+='<td>'+fun.formatFractionPercent(bc.nav.visibleCsMarks.TotalRight,bc.nav.visibleCsMarks.outOf,{showPercent:false})+'</td>';
footerRow+='<td>'+bc.nav.visibleCsMarks.TotPercent()+'%</td>';
footerRow+='<td>&nbsp;</td></tr></tfoot>';
for(var di=1;di<numDropPages;di++){
page=csPageDropArray[di];
stripeClass='';
contentsHtml+='<tr class="r '+page.cssClass+' '+stripeClass+'" ';
if(!bc.nav.isForwardOnly){
contentsHtml+=' onclick="bc.nav.gotoPageId('+page.pageid+');"';}
contentsHtml+='><td class="alignLeft leftEdge">'+page.dropPrefix;
contentsHtml+='</td><td class="alignLeft">';
if(page.pageTitle!=''){
contentsHtml+=page.pageTitle;}else if(page.dropSuffix!=''){
contentsHtml+=page.dropSuffix;}else{
contentsHtml+='&nbsp;';}
contentsHtml+='</td>';
if(page.totMarks>0){
contentsHtml+='<td class="">'+page.marks.TotalRight+' / '+page.totMarks+'</td>';
contentsHtml+='<td class="">'+Math.round((page.marks.TotalRight/ page.totMarks)*100,2)+'%'+ '</td>';
contentsHtml+='<td class="rightEdge">';
if(page.marks.endDays>0){
contentsHtml+=fun.daysToDate(page.marks.endDays).ShortDate();}else{
contentsHtml+='&nbsp;';}
contentsHtml+='</td>';}else{
contentsHtml+='<td>&nbsp;</td><td>&nbsp;</td><td class="rightEdge">&nbsp;</td>';}
contentsHtml+='</tr>';}
if(contentsHtml!=""){
contentsHtml='<table class="scoreTable contents" cellspacing=0 style="width:auto;">'+headerRow+footerRow+'<tbody>'+contentsHtml+'</tbody></table>';}else{}
var	heading=bc.currentCS.name+' - Contents';
var	preheading=bcConst.pageToolbar;
var scoreTarget=$("body",frames['pagemain'].document).empty();
var targetTable=$(contentsHtml,frames['pagemain'].document);
targetTable.appendTo(scoreTarget);
if(!bc.nav.isForwardOnly){
scoreTarget.find('table tbody tr').hoverLink();}
scoreTarget.prepend(preheading+"<h1>"+heading+"</h1><br />").append(bc.printFooter);
bc.clearWaitMsg();},
showUserResults:function(allcourses){
var scoreTableHTML='',jqScoreTable,heading='';
var	preheading=bcConst.pageToolbar;
var scoreTarget=$("body",frames['pagemain'].document).empty();
bc.closeSubtopic();
if(!allcourses&&bc.c>0){
preheading+="<div style='float:right'><a href='javascript:bc.showUserResults(true);' title='Show scores for all courses'>Course Scores</a></div>";
heading+=bc.currentCourse.name+" Scores for "+bc.user.username;
scoreTableHTML=bc.getSubtopicScoreTable();
jqScoreTable=$(scoreTableHTML,frames['pagemain'].document);
jqScoreTable=bc2.formatSubtopicsTable(jqScoreTable,true,null);
jqScoreTable.appendTo(scoreTarget);}else{
heading=bc.subjectName+': '+bc.institutionName+" - Scores for "+bc.user.username;
scoreTableHTML=bc.getCourseScoreTable();
jqScoreTable=$(scoreTableHTML,frames['pagemain'].document);
jqScoreTable=bc2.formatCourseTable(jqScoreTable,true,null);
jqScoreTable.appendTo(scoreTarget);}
scoreTarget.prepend(preheading+"<h1 style='text-align:center; '>"+heading+"</h1><br />").append(bc.printFooter);},
getCourseScoreTable:function(narrow){
var headerRow,footerRow,tableclass,scoreHTMLTable='';
var groupname,courseArr;
var grandTotUserCourseMarks=0,grandTotCourseMarks=0;
if(!bc.courseArr){return;}
if(bc.courseGroupArr){
for(var groupindex=0;groupindex<bc.courseGroupArr.length;groupindex++){
groupname=bc.courseGroupArr[groupindex];
scoreHTMLTable+="<tr class='subheading'>";
scoreHTMLTable+="<td colspan=6 class='alignLeft'>"+groupname+'</td></tr>';
courseArr=bc.courseArr[groupindex];
scoreHTMLTable+=makeCourseScoresTable(courseArr,narrow);}}else{
courseArr=bc.courseArr;
scoreHTMLTable+=makeCourseScoresTable(courseArr,narrow);}
headerRow='<thead><tr class="headerrow">'+
'<th class="course">Course</th><th class="date">'+(narrow?'Last':'Dates')+' Used</th><th class="marks">Marks</th><th class="percent">Percent</th><th class="marksbar">Marks Breakdown</th><th>User Rank</th></tr></thead>';
footerRow='<tfoot><tr class="footerrow bordertop borderbottom"><td>Total Marks</td>';
var percent=100*grandTotUserCourseMarks/grandTotCourseMarks;
percent=(percent>=10)?Math.round(percent):Math.round(10*percent)/10;
footerRow+="<td>&nbsp;</td><td>";
footerRow+="<sup>"+grandTotUserCourseMarks+"</sup>/<sub>"+grandTotCourseMarks+"</sub>";
if(percent>100){percent=100;}
else if(isNaN(percent)){percent=0;}
footerRow+="</td><td>"+percent+"%</td><td>&nbsp;</td><td>&nbsp;</td></tr></tfoot>";
tableclass=(narrow)?"narrowCourse":"wideCourse";
scoreHTMLTable='<table id="" class="scoreTable canShowLink bordertop borderbottom '+tableclass+'" align=center cellspacing=0  style="">'+headerRow+footerRow+'<tbody>'+scoreHTMLTable+'</tbody></table>';
return scoreHTMLTable;
function makeCourseScoresTable(courseArr,narrow){
var x="";
var course,cMarks,cRank;
var markbarsize=200;
for(var ci=0;ci<courseArr.length;ci++){
course=courseArr[ci];
x+="<tr id='c"+course.id+"'><td class='alignLeft'>"+course.name+"</td>";
cMarks=bc.user.scores["c"+course.id];
if(cMarks){
grandTotUserCourseMarks+=cMarks.TotalRight;
grandTotCourseMarks+=cMarks.outOf;
x+="<td>";
if(cMarks.endDays>0){
if(!narrow&&cMarks.startDays>0&&cMarks.endDays!=cMarks.startDays){
x+=fun.daysToDate(cMarks.startDays).ShortDate()+" - ";}
x+=fun.daysToDate(cMarks.endDays).ShortDate();}else{
x+='&nbsp;';}
x+="</td><td>";
x+=cMarks.TotalRight+" / "+cMarks.outOf;
x+="</td><td>";
if(cMarks.outOf>0&&cMarks.TotalRight>0){
x+=cMarks.TotPercent()+"%";}else{
x+='&nbsp;';}
x+="</td><td>";
if(cMarks.outOf>0){
x+=bc.scoreColorBar(cMarks.MarksArray(),cMarks.outOf,markbarsize,{barClass:'userscoremarksbar',showIcon:false});}else{
x+='&nbsp;';}
x+="</td><td>";
cRank=bc.user.scores["cRank"+course.id];
if(cRank&&cRank>0){
x+=cRank;}else{
x+='&nbsp;';}
x+="</td>";}else{
x+="<td>-</td><td>0 / "+course.totMarks+"</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>";}
x+="</tr>\n";}
return x;}},
getSubtopicScoreTable:function(){
var headerRow,footerRow,scoreHTMLTable='';
var numUserCsTried=0,numUserTopicsTried=0;
var rootMenuArray=bc["courseTopics"+bc.c];
scoreHTMLTable=makeSubtopicScoresTable(rootMenuArray,0,0);
headerRow=
'<thead><tr class="headerrow">'+
'<th class="userscoretopiccell" style="width:210px;">Topic - Subtopic</th>'+
'<th style="width:140px;">Last Used</th>';
footerRow='<tfoot><tr class="footerrow bordertop">'+
'<td class="userscoretopiccell" colspan=2>Total '+numUserCsTried+' subtopics tried in '+numUserTopicsTried+' topics</td>';
if(bc.isClassReportMode){
headerRow+='<th style="width:60px;">NumUsers</th>';
footerRow+='<td>&nbsp;</td>';}
headerRow+=
'<th style="width:90px;">Marks</th>'+
'<th style="width:60px;">Percent</th>'+
'<th style="width:204px;">Marks Breakdown</th></tr></thead>';
var percent=bc.visibleCourseMarks.TotPercent();
if(percent>100){percent=100;}
footerRow+='<td>'+Math.round(bc.visibleCourseMarks.TotalRight,1)+' / '+bc.visibleCourseMarks.outOf+'</td>'+
'<td>'+percent+'%</td><td>&nbsp;</td></tr></tfoot>';
scoreHTMLTable='<table id="" class="scoreTable canShowLink bordertop borderbottom" align=center cellspacing=0 style="width:auto;">'+headerRow+footerRow+'<tbody>'+scoreHTMLTable+'</tbody></table>';
return scoreHTMLTable;
function makeSubtopicScoresTable(menuArr,depth,topicid){
var x="",tmpx,menubranch,markbarwidth=200;
var node,csMarks,csClass;
for(var i=0;i<menuArr.length;i++){
node=menuArr[i];
switch(node.nodeType){
case "t":
var submenuArr=node.childArray;
if(submenuArr){
menubranch=makeSubtopicScoresTable(submenuArr,depth+1,node.id);
if(menubranch!=""){
x+="<tr id='t"+node.id+"' class='subheading'>";
x+="<td class='alignLeft' colspan=5>"+node.name+'</td>';
if(bc.isClassReportMode){x+="</td><td>&nbsp";}
x+="</td></tr>\n";
x+=menubranch;
x+="\n";
numUserTopicsTried+=1;}}
break;
case "s":
if(node.status<0){break;}
csMarks=bc.user.scores["cs"+node.id];
if(csMarks){
numUserCsTried+=1;
x+="<tr id='t"+node.topicid+"_s"+node.id+"'>";
csClass=(node.status>0)?'':'disabled';
x+="<td class='alignLeft "+csClass+"'>"+node.name+"</td>";
x+="<td>";
if(csMarks.endDays>0){
x+=fun.daysToDate(csMarks.endDays).ShortDate();}else{
x+='&nbsp;';}
if(bc.isClassReportMode){
x+="</td><td>"+csMarks.numUsers;}
x+="</td><td>";
tmpx=csMarks.TotalRight+" / "+node.totMarks;
x+=tmpx+"</td><td>";
if(node.totMarks>0&&csMarks.TotalRight>0){
var p=100*csMarks.TotalRight/node.totMarks;
p=(p>=10)?Math.round(p):Math.round(10*p)/10;
x+=p+"%";}else{
x+='&nbsp;';}
x+="</td><td>";
x+=bc.scoreColorBar(csMarks.MarksArray(),node.totMarks,markbarwidth,{barClass:'userscoremarksbar',showIcon:false});
x+="</td></tr>\n";}
break;}}
return x;}}});
bc.nav={
dropPages:null,
showHistory:false,HistoryCheckVisible:false,
useHardMode:false,isHardMode:false,showExtraQ:false,
numPages:null,
csPageDropArray:null,
showScore:true,
visibleCsMarks:null,
defaults:{
currentPage:null,csPageIndex:null,
clientStartTime:null,
startPageid:false,cmd:'',pageid:-1,
preloadPageid:-1,
subtopicTimeout:null,timeWaited:0,
showFeedback:true,showHint:true,showGiveup:true,
userMode:bcConst.defaultUserMode,
isTest:false,
showHistoryCheckbox:true,
canChooseQMode:true,
testStyle:bcConst.defaultTestStyle,
isForwardOnly:false},
setupNavbar:function(){
bc.nav.cs=bc.currentCS;
if(bc.nav.cs.sa_subtopic){
bc.nav.cs.safolder=bc.nav.cs.sa_subtopic;}else{
bc.nav.cs.safolder=bc.sa;}
bc.nav.dropPages=document.getElementById("dropPages");
if(bc.nav.cs.userMode){
bc.nav.userMode=bc.nav.cs.userMode;}else if(bc.currentTopic&&bc.currentTopic.userMode){
bc.nav.userMode=bc.currentTopic.userMode;}else if(bc.c>0&&bc["defaultUserMode"+bc.c]>0){
bc.nav.userMode=bc["defaultUserMode"+bc.c];}
if(!bc.user.isAdmin){
if(bc.nav.status<=0){
bc.closeSubtopic(true);
return;}}
setupNavbarOptions();
if(bc.user.isDemo){
bc.userdataLoadedCsid=bc.nav.csid;
bc.user['csInfo'+bc.csid]={};}
bc.nav.setupNavbarDropdown();
function setupNavbarOptions(){
bc.nav.showHistory=bc.user.config.showHistory;
bc.nav.useHardMode=bc.user.config.useHardMode;
switch(bc.nav.userMode){
case 1:
break;
case 2:
bc.nav.showGiveup=false;
break;
case 3:
bc.nav.showGiveup=false;
bc.nav.showHint=false;
break;
case 4:
bc.nav.isTest=true;
bc.nav.useHardMode=false;
break;
case 5:
bc.nav.isTest=true;
bc.nav.useHardMode=true;
break;}
if(bc.nav.isTest){
$("body").addClass("isTest");
$('<span class="testFlag" title="'+bcConst.testMsg+'">Test</span>').click(function(){
jalert(bcConst.testMsg,"Bestchoice Test");}).appendTo("#navTitle");
jalert(bcConst.testMsg,"Bestchoice Test");
$.extend(bc.nav,{
showGiveup:false,
showHint:false,
showFeedback:false,
canChooseQMode:false,
showHistoryCheckbox:false,
showHistory:true,
canShowExtraQuestions:false,
showQA:false});
if(bc["testStyle"+bc.c]>0){
bc.nav.testStyle=bc["testStyle"+bc.c];}
if(bc.nav.testStyle==1){
bc.nav.isForwardOnly=true;}}
if(bc.isClassReportMode){
$("#divHistory, #divChooseQMode").hide();
bc.nav.HistoryCheckVisible=false;
bc.nav.showHistoryCheckbox=false;}
if(bc.nav.showHistoryCheckbox){
$('input#chkHistory').attr('checked',bc.nav.showHistory?1:0);}
if(bc.nav.canChooseQMode){
$('input#chkHard').attr('checked',bc.nav.useHardMode?1:0);}
if(bc.nav.canShowExtraQuestions){
$("#divExtraQ").css("display","inline-block");}
bc.nav.clientStartTime=new Date();}},
gotoPreviousPage:function(){
if(bc.nav.dropPages.selectedIndex==0){return;}
bc.nav.dropPages.selectedIndex-=1;
bc.nav.loadPage();},
gotoNextPage:function(){
if(bc.nav.dropPages.selectedIndex>=(bc.nav.dropPages.options.length-1)){return;}
bc.nav.dropPages.selectedIndex+=1;
bc.nav.loadPage();},
gotoFirstPage:function(){
if(bc.nav.dropPages.selectedIndex==0){return;}
bc.nav.dropPages.selectedIndex=0;
bc.nav.loadPage();},
gotoFinalPage:function(){
if(bc.nav.dropPages.selectedIndex>=(bc.nav.numPages-1)){return;}
bc.nav.dropPages.selectedIndex=(bc.nav.numPages);
bc.nav.loadPage();},
gotoQA:function(){
if(bc.nav.showQA==true){
bc.nav.dropPages.selectedIndex=(bc.nav.dropPages.options.length-1);
bc.nav.loadPage();}},
gotoPageId:function(pageid){
if(pageid>0||pageid!=''){
bc.nav.dropPages.value=pageid;
bc.nav.loadPage();}},
setHardMode:function(isChecked){
bc.user.config.useHardMode=isChecked;
bc.nav.useHardMode=isChecked;
bc.nav.loadPage(true);},
setHistory:function(isChecked){
bc.user.config.showHistory=isChecked;
bc.nav.showHistory=isChecked;
bc.nav.loadPage(true);},
setExtraQ:function(isChecked){
bc.nav.showExtraQ=isChecked;
bc.nav.setupNavbarDropdown();},
loadPage:function(reLoad){
bc.nav.setSubtopicTimeout();
var url,pageCode;
if(bc.nav.csPageIndex==bc.nav.dropPages.selectedIndex+1){
if(!reLoad){return;}}
bc.savePageScore();
bc.nav.csPageIndex=bc.nav.dropPages.selectedIndex+1;
bc.nav.currentPage=bc.nav.csPageDropArray[bc.nav.csPageIndex-1];
pageCode=bc.nav.dropPages.options[bc.nav.csPageIndex-1].value;
bc.nav.slider.slider("value",bc.nav.csPageIndex);
$('ul#listPages').find('.current').removeClass('current')
.end().find('li#nav_p'+pageCode).addClass('current');
bc.nav.preloadPageid=-1;
if(bc.preloadPageTimeout){
clearTimeout(bc.preloadPageTimeout);}
if(bc.nav.csPageIndex<bc.nav.numPages&&!bc.isPreview){
bc.nav.preloadPageid=bc.nav.csPageDropArray[bc.nav.csPageIndex].id;
bc.preloadPageTimeout=setTimeout(function(){
if(bc.nav.preloadPageid>0){
var url="/html/sa"+bc.nav.cs.sa+"/main/s"+bc.nav.cs.subtopicid+"/p"+bc.nav.preloadPageid+".htm";
$.ajax({type:"GET",url:url,cache:true,dataType:"text"});}},4000);}
bc.nav.pageid=isNaN(pageCode)?-1:pageCode;
if(bc.nav.showHistoryCheckbox){
bc.nav.HistoryCheckVisible=((bc.nav.pageid>0)&&bc.nav.currentPage.totMarks>0&&bc.nav.currentPage.userAllQuestionsLocked&&!bc.nav.isTest);
document.getElementById("divHistory").style.display=bc.nav.HistoryCheckVisible?'inline-block':'none';}
if(bc.nav.canChooseQMode==true){
document.getElementById("divChooseQMode").style.display=((bc.nav.pageid>0)&&bc.nav.currentPage.hasHardMode)?'inline-block':'none';}
if(bc.nav.csPageIndex==1){
$("body").addClass("isFirstPage");}else{
$("body").removeClass("isFirstPage");}
if(bc.nav.csPageIndex>bc.nav.numPages){
$("body").addClass("isFinalPage");}else{
$("body").removeClass("isFinalPage");}
switch(pageCode){
case 'CONTENTS':
bc.setupContentsPage();
return;
case 'SCORE':
url='/ScoreSurvey.htm';
break;
case 'QA':
url='/UserQA.aspx?csid='+bc.nav.csid;
break;
default:
if(bc.nav.pageid<0){return;}
bc.nav.isHardMode=(bc.nav.useHardMode&&bc.nav.currentPage.hasHardMode);
if(bc.isPreview){
url='/bcpage.aspx?pageid='+bc.nav.pageid;}else{
url='/html/sa'+bc.nav.cs.safolder+'/main/s'+bc.nav.cs.subtopicid+'/p'+bc.nav.pageid+'.htm';}
break;}
fun.gotoUrl(url,parent.pagemain,true);},
setSubtopicTimeout:function(){
clearTimeout(bc.nav.subtopicTimeout);
bc.nav.subtopicTimeout=setTimeout('bc.closeSubtopic(true)',3600000);},
showSubtopicScoreBar:function(marksObj){
if(marksObj&&bc.Layout){
var barWidth=bc.Layout.state.east.size-20;
var colorbar=bc.scoreColorBar(marksObj.MarksArray(),marksObj.outOf,barWidth,{barClass:'navScorebar2',showIcon:false});
$("#nav2Scorebar").html(colorbar);
var tmp=fun.formatFractionPercent(marksObj.TotalRight,marksObj.outOf);
$("#nav2Score").html(tmp);}},
updateSubtopicScore:function(pageMarksObj){
if(bc.nav.HistoryCheckVisible){return;}
var dt=new Date(),newEndDays=dt.getTime()/86400000;
var deltaPageMarks=$.extend({},pageMarksObj);
deltaPageMarks.AddMarksObj(bc.nav.currentPage.marks,true);
if(deltaPageMarks.TotalRight==0&&deltaPageMarks.Giveup==0){return;}
bc.nav.currentPage.marks.AddMarksObj(deltaPageMarks);
bc.nav.currentPage.marks.endDays=newEndDays;
bc.nav.setNavPageDisplay(bc.nav.csPageIndex-1,bc.nav.currentPage);
if(bc.nav.csid>0){
bc.nav.cs.userMarks.AddMarksObj(deltaPageMarks);
bc.nav.cs.userMarks.endDays=newEndDays;
bc.nav.visibleCsMarks.AddMarksObj(deltaPageMarks);
if(bc.currentCourse){
bc.currentCourse.userMarks.AddMarksObj(deltaPageMarks);
bc.currentCourse.userMarks.endDays=newEndDays;
if(!bc.nav.currentPage.userAllQuestionsLocked){
bc.updateMenuScore(bc.nav.csid,deltaPageMarks);}}}
bc.nav.dropPages.options[bc.nav.numPages].text=bc.nav.getScoreDropdown(bc.nav.visibleCsMarks.TotalRight,bc.nav.visibleCsMarks.outOf);
bc.nav.showSubtopicScoreBar(bc.nav.visibleCsMarks);
if((pageMarksObj.TotalRight+pageMarksObj.Giveup)>=pageMarksObj.outOf){
bc.nav.currentPage.userAllQuestionsLocked=true;}},
setupNavbarDropdown:function(){
if(bc.userdataLoadedCsid!=bc.nav.csid&&!bc.isPreview){
bc.nav.timeWaited+=100;
if(bc.nav.timeWaited<5000){
setTimeout(bc.nav.setupNavbarDropdown,100);
return;}}
var page,thisCSPage;
var pageTitle1,pageTitle2;
var pageNum=0,pageNumb=0,droppageNum=0,ppid;
var pageUserMarks;
var userAllQuestionsLocked;
var numReviewPages=0;
var maxPageUsers;
var csInfo=bc.user['csInfo'+bc.csid];
bc.nav.totSubtopicMarks=0;
bc.nav.dropPages.options.length=0;
if(bc.nav.cs.pageArr.length==0){return;}
bc.nav.csPageDropArray=[];
bc.nav.visibleCsMarks=new bc.MarksObj(0,0,0);
bc.nav.dropPagesHtml='<option value="CONTENTS" class="total">Subtopic Contents</option>';
bc.nav.listPagesHtml='<li id="nav_pCONTENTS" class="total"><a href="#" onclick="bc.nav.gotoPageId(\'CONTENTS\')">Subtopic Contents</a></li>';
droppageNum=1;
for(var pg=0;pg<bc.nav.cs.pageGroupArr.length;pg++){
var gpSize=bc.nav.cs.pageGroupArr[pg];
var thisPageArr=bc.nav.cs.pageArr[pg];
var gpPages=(gpSize==0||bc.nav.showExtraQ)?thisPageArr.length:gpSize;
if(bc.nav.randomOrder){
thisPageArr.sort(fun.randomOrder);}
for(var i=1;i<=gpPages;i++){
page=thisPageArr[i-1];
bc.nav.totSubtopicMarks+=page.totMarks;
maxPageUsers=0;
if(bc.nav.isTest&&page.pagestyleid==2){continue;}
if(gpSize>0&&i>gpSize){
pageNumb+=1;}else{
pageNum+=1;
pageNumb=0;}
pageTitle1='Page '+pageNum;
if(pageNumb>0){
pageTitle1+='.'+pageNumb;}
switch(page.pagestyleid){
case 1:
break;
case 2:
pageTitle1+=': Review';
numReviewPages++;
break;
default:
break;}
pageTitle2='';
if(page.linkTitle!=''){
pageTitle2+=page.linkTitle;}else if(page.dropdownText!=""){
pageTitle2+=page.dropdownText;}
pageUserMarks=new bc.MarksObj();
userAllQuestionsLocked=true;
for(var pp=0;pp<page.numQuestions;pp++){
ppid=page.pp[pp].ppid;
var ups=bc.user.scores['pp'+ppid];
if(ups){
pageUserMarks.AddMarksObj(ups);
if(!ups.isLocked){userAllQuestionsLocked=false;}
if(ups.endDays>pageUserMarks.endDays){
pageUserMarks.endDays=ups.endDays;}}else{
userAllQuestionsLocked=false;}
if(bc.isClassReportMode&&csInfo){
var rptpp=csInfo['pp'+ppid];
if(rptpp&&rptpp[0]>maxPageUsers){
maxPageUsers=rptpp[0];}}}
bc.nav.visibleCsMarks.AddMarksObj(pageUserMarks);
thisCSPage=$.extend(page,{
dropPrefix:pageTitle1,dropSuffix:pageTitle2,userAllQuestionsLocked:userAllQuestionsLocked,marks:pageUserMarks});
bc.nav.csPageDropArray[droppageNum]=thisCSPage;
bc.nav.setNavPageDisplay(droppageNum,thisCSPage,true,maxPageUsers);
droppageNum+=1;}}
bc.nav.numPages=droppageNum;
bc.nav.visibleCsMarks.outOf=bc.nav.totSubtopicMarks;
$('#dropPages').html(bc.nav.dropPagesHtml);
bc.nav.dropPages.options[bc.nav.numPages]=new Option(bc.nav.getScoreDropdown(bc.nav.visibleCsMarks.TotalRight,bc.nav.visibleCsMarks.outOf),"SCORE");
bc.nav.dropPages.options[bc.nav.numPages].className='total';
var listText='<span class="pagetitle">Total Score and Survey</span>';
bc.nav.listPagesHtml+='<li id="nav_pSCORE" class="total"><a href="#"';
if(!bc.nav.isForwardOnly){
bc.nav.listPagesHtml+=' onclick="bc.nav.gotoPageId(\'SCORE\')"';}
bc.nav.listPagesHtml+='>'+listText+'</a></li>';
$('#listPages').html(bc.nav.listPagesHtml)
.find("li a").tooltip({
content:function(){
return $(this).find('span.tip').html();},
position:{
my:"right center",
at:"left center",
offset:"-10 0"},
tooltipClass:"boxShadow menuTooltip"});
if(numReviewPages>0){
var reviewLink="/bc.aspx?action=subtopicreviews&i="+bc.i+"#sa="+bc.nav.cs.safolder+"&s="+bc.nav.cs.subtopicid;
$(".linkAllReviews").attr("href",reviewLink).show();}else{
$(".linkAllReviews").hide();}
if(bc.nav.showQA==true){
bc.nav.dropPages.options[bc.nav.numPages+1]=new Option(" --- Q & A --- ","QA");}
if(bc.nav.startPageid){
bc.nav.dropPages.value=bc.nav.startPageid;
bc.nav.preloadNextPage=false;}else{
bc.nav.preloadNextPage=true;}
if(bc.nav.dropPages.selectedIndex<0){
bc.nav.dropPages.value=bc.nav.dropPages.options[0].value;}
bc.nav.numDropPages=bc.nav.dropPages.options.length;
bc.nav.setupNavSlider();
if(bc.nav.isForwardOnly){
bc.nav.slider.slider('disable');
bc.nav.dropPages.disabled=true;
$("body").addClass("isForwardOnly");}else{
bc.nav.slider.slider('enable');
bc.nav.dropPages.disabled=false;}
bc.nav.showSubtopicScoreBar(bc.nav.visibleCsMarks);
$("#nav2Scorebar").find('.navScorebar2').tooltip({
position:{
my:"right center",
at:"left center",
offset:"-10 0"},tooltipClass:"scorebarTooltip"});
if(bc.nav.visibleCsMarks.TotalRight>0){
bc.nav.dropPages.selectedIndex=0;}else{
bc.nav.dropPages.selectedIndex=1;}
bc.nav.loadPage();},
setupNavSlider:function(){
var scale='';
var sliderWidth=$(window).width()-$("#dropPages").width()-440;
var maxNumTicks=sliderWidth/15;
var tickVisibleIncrement,page;
if(sliderWidth<250){
$('#navSliderControl').width(0);
return;}
if(maxNumTicks>bc.nav.numPages){
tickVisibleIncrement=1;}else{
tickVisibleIncrement=Math.ceil(bc.nav.numPages/maxNumTicks);}
scale+='<li style="left:0%;" title="Subtopic Contents"><span class="ui-slider-label">C</span></li>';
for(var tick=1;tick<bc.nav.numPages;tick++){
if((tick)%tickVisibleIncrement==0){
page=bc.nav.csPageDropArray[tick];
scale+='<li style="left:'+leftVal(tick)+'" class="'+page.cssClass+'"><span class="ui-slider-label">'+tick+'</span></li>';}}
scale+='<li style="left:'+leftVal(bc.nav.numPages)+'" title="Total Score and Survey"><span class="ui-slider-label">S</span></li>';
scale='<ol class="ui-slider-scale ui-helper-reset" role="presentation">'+scale+'</ol>';
bc.nav.slider=$('#navSliderControl').width(sliderWidth).append(scale)
.slider({
min:1,
max:bc.nav.numPages+1,
range:"max",
value:bc.nav.dropPages.selectedIndex+1,
slide:function(event,ui){
bc.nav.dropPages.selectedIndex=ui.value-1;},
stop:function(event,ui){
bc.nav.loadPage();}});
$(".ui-slider .ui-slider-handle").html('<span class="ui-icon ui-icon-grip-dotted-vertical"></span>');
function leftVal(i){
return(i/(bc.nav.numPages)*100).toFixed(2)+'%';}},
getScoreDropdown:function(UserMarks,OutOfMarks){
if(OutOfMarks>0){
return "TOTAL: "+fun.formatFractionPercent(UserMarks,OutOfMarks)+"";}else{
return " -- Survey -- ";}},
setNavPageDisplay:function(pageIndex,navPage,add,maxPageUsers){
var markString;
var dropText=navPage.dropPrefix;
var listText='<span class="pagetitle">'+navPage.dropPrefix+'</span>';
if(navPage.totMarks>0){
navPage.cssClass=bc.qStatusClass(navPage.marks.TotalRight,navPage.totMarks);
if(bc.isClassReportMode){
markString=fun.formatFractionPercent(navPage.marks.TotalRight,navPage.totMarks,{noRound:true});}else{
markString=fun.formatFractionPercent(navPage.marks.TotalRight,navPage.totMarks);}
dropText+=": "+markString;
listText+=': <span class="pagemark">'+markString+'</span>';}else{
navPage.cssClass="review";}
if(maxPageUsers&&maxPageUsers>0){
dropText+=" - "+maxPageUsers+" users";}
if(navPage.dropSuffix!=''){
dropText+=' | '+navPage.dropSuffix;
listText+='<span class="pagetitle2">'+navPage.dropSuffix+'</span>';}
listText+='<span class="tip">';
if(navPage.pageTitle!=''){
listText+='<b>'+navPage.pageTitle+'</b>';}else{
listText+='<b>'+navPage.dropPrefix+'</b>';}
if(navPage.marks.endDays>0){
listText+='<br>'+fun.daysToDate(navPage.marks.endDays).ShortDate();}
listText+='</span>';
if(add){
bc.nav.dropPagesHtml+='<option value="'+navPage.pageid+'" class="'+navPage.cssClass+'">'+dropText+'</option>';
bc.nav.listPagesHtml+='<li id="nav_p'+navPage.pageid+'" class="'+navPage.cssClass+'"><a href="#"';
if(!bc.nav.isForwardOnly){
bc.nav.listPagesHtml+=' onclick="bc.nav.gotoPageId('+navPage.pageid+')"';}
bc.nav.listPagesHtml+='>'+listText+'</a></li>';}else{
bc.nav.dropPages.options[pageIndex].text=dropText;
bc.nav.dropPages.options[pageIndex].className=navPage.cssClass;
$('ul#listPages li#nav_p'+navPage.pageid).removeClass('qdone qtried quntried').addClass(navPage.cssClass).find('a').html(listText);}}};}
var bcAdmin={
editQuestion:function(qid){
var fmt='toolbar=no,menubar=no,resizable=yes,scrollbars=yes,width=950,height=800';
var url='/bcadmin/editframe.aspx?type=question&basicquestionid='+qid;
if(!window.bcq2||bcq2.closed==true){
bcq2=window.open(url,"bcq2",fmt);}
else{bcq2.document.location=url;}
bcq2.focus();},
editHTML:function(htmlid){
var fmt='toolbar=no,menubar=no,resizable=yes,scrollbars=yes,width=750,height=600';
var url='/bcadmin/editframe.aspx?type=html&htmlid='+htmlid;
if(!window.bcHTML2||bcHTML2.closed==true){
bcHTML2=window.open(url,"bcHTML2",fmt);}
else{bcHTML2.document.location=url;}
bcHTML2.focus();},
editPage:function(pageid){
var fmt='toolbar=no,menubar=no,resizable=yes,scrollbars=yes,width=750,height=600';
var url='/bcadmin/ed_Page.aspx?pageid='+pageid;
if(!window.bcPage2||bcPage2.closed==true){
bcPage2=window.open(url,"bcPage2",fmt);}
else{bcPage2.document.location=url;}
bcPage2.focus();}};
var bc2={
configureFormValidation:function(){
if(!$.validator){return;}
$.validator.addMethod("validChars",
function(value,element){
return(this.optional(element)||bcConst.RegExpValidInputChars.test(value));},
bcConst.RegExpValidInputCharsErrorMsg);
$.validator.addMethod("validChars2",
function(value,element){
return(this.optional(element)||bcConst.RegExpValidInputChars2.test(value));},
bcConst.RegExpValidInputCharsErrorMsg);
var vforms=$("form.validate");
vforms.find("input.text").addClass("validChars");
vforms.find("textarea").addClass("validChars2");
vforms.find(".required").prevAll('label').append(' <span class="requiredStar">*</span>');
vforms.validate();
vforms.data("isDirty",false).each(function(i){
var formid=this.id;
$(this).find("input, select").change(function(){
$("#"+formid).data("isDirty",true);});});},
setupWelcome:function(){
var tmp="",msg="";
var userCourseMarks=bc.user.scores["c"+bc.c];
var courseRank=bc.user.scores["courseRank"+bc.c];
var courseid,topicid,csid,objMarks,maxMarks,userMarks;
var td1,td2;
if(bc.custom.css!=''){
$('head').append('<style id="injectedCss" type="text/css">'+bc.custom.css+'</style>');}
$(".sparkGraph").show().sparkline('html',bcConst.lineSparkGraphSettings);
fun.stripeTable();
if(bc2.courseid>0){
$("table#TopSubtopics tbody tr").each(function(i){
csid=this.id.substr(1);
td1=$(this).find("td:first");
td2=$(this).find("td:last");
td1.addClass("leftEdge hoverHighlight");
td2.addClass("rightEdge alignCenter");
if(bc["cs"+csid]&&bc["cs"+csid].status>0){
maxMarks=parseInt(td2.text());
objMarks=bc.user.scores["cs"+csid];
userMarks=objMarks?objMarks.TotalRight:0;
tmp=fun.formatFractionPercent(userMarks,maxMarks,{subsuperScript:true,showPercent:false});
td2.html(tmp);
$(this).hoverLink().click(function(x){
return function(){bc.gotoSubtopicId(x);};}(csid));}else if(bc["cs"+csid].status==0){
td1.find("a").addClass("disabled");}});
if(userCourseMarks){
msg='';
if(courseRank&&courseRank>0){
msg+="<div style='float:right;' title='Yesterday rank of current users for this course.'>User Rank <b>"+courseRank+"</b></div>";}
msg+="My course marks: <b>"+userCourseMarks.TotalRight+"</b><br />";
var ucsdiv=document.getElementById("userCourseStats");
if(ucsdiv){ucsdiv.innerHTML=msg;}}
displayClassInfo();}else{
$("table#TopSubtopics tbody tr").each(function(i){
courseid=this.id.substr(1);
td1=$(this).find("td:first");
td2=$(this).find("td:last");
td1.addClass("leftEdge hoverHighlight");
td2.addClass("rightEdge alignCenter");
maxMarks=parseInt(td2.text());
objMarks=bc.user.scores["c"+courseid];
userMarks=objMarks?objMarks.TotalRight:0;
tmp=fun.formatFractionPercent(userMarks,maxMarks,{subsuperScript:true,showPercent:false});
td2.html(tmp);
$(this).hoverLink().click(function(cx){
return function(){bc.gotoCourseId(cx);};}(courseid));});}
$('body').append(bc.printFooter);
function displayClassInfo(){
var ccid,cc,topic,divid,classArr=bc.user["classArr"+bc2.courseid];
var info='',classStats='',linkClass;
var divClassInfo=$("#welcomeClassInfo");
var divClassStats=$("#classStats");
if(!classArr){
return;}
for(var ci=0;ci<classArr.length;ci++){
ccid=classArr[ci];
cc=bc.user["cc"+ccid];
if(!cc){continue;}
classStats+="<br /><b>Class "+cc.name+"</b><br />";
if(cc.currentRank>0){
classStats+="<div style='float:right;' title='Yesterday rank of current classes for this course.'>Class Rank <b>"+cc.currentRank+"</b></div>";}
classStats+=cc.numUsers+" users. Avg marks: ";
classStats+="<b>"+Math.round(cc.userMarks.TotalRight,1)+"</b>";
classStats+="<br />";
info+='<div class="welcomeClass">';
info+='<h3 class="welcomeClass">Class '+cc.name+"</h3>";
if(cc.message!=''){
info+=cc.message+'<br clear="left" />';}
for(var cti=0;cti<cc.customTopicsArr.length;cti++){
topic=cc.customTopicsArr[cti];
if(!topic.showLink){continue;}
divid="class_t"+topic.topicid+"_s";
tmp='';
if(topic.csid>0){
divid+=topic.csid;
maxMarks=bc["cs"+topic.csid].totMarks;
objMarks=bc.user.scores["cs"+topic.csid];
userMarks=objMarks?objMarks.TotalRight:0;
tmp='<div style="float:right;">'+fun.formatFractionPercent(userMarks,maxMarks)+'</div>';}
info+='<div class="welcomeClass_topic" id="'+divid+'">'+tmp;
if(topic.csid>0){
linkClass="cs"+topic.csid;}else{
linkClass="t"+topic.topicid;}
info+='<a class="'+linkClass+'">'+bc["topic"+topic.topicid].name;
if(topic.csid>0){
info+=' - '+bc["cs"+topic.csid].name;}
info+='</a>';
if(topic.userMode==4){
info+='<span class="testFlag">Test</span>';}
info+='<br />'+topic.message;
info+='</div>';}
info+='</div>';}
divClassStats.html(classStats);
divClassInfo.append(info).show();
divClassInfo.find(".welcomeClass_topic").each(function(i){
var p=this.id.split("_");
topicid=p[1].substr(1);
csid=p[2].substr(1);
$(this).find("a:first").addClass("hoverHighlight");
if(csid>0){
$(this).click(function(x){
return function(){bc.gotoSubtopicId(x);};}(csid));}else{
$(this).click(function(x){
return function(){bc.gotoTopicId(x);};}(topicid));}
$(this).hoverLink();});}},
setupTopicindex:function(){
var csid,cs,pageid,scoreHtml;
$("body").prepend(bcConst.pageToolbar);
if(bc.custom.css!=''){
$('head').append('<style id="injectedCss" type="text/css">'+bc.custom.css+'</style>');}
$(".topic").each(function(i){
var topicid=this.id.substr(5);
var topic=bc["topic"+topicid];
if(topic){
$(this).find("h2").html(topic.name);}
$(this).find(".subtopic").each(function(i){
csid=this.id.substr(2);
cs=bc["cs"+csid];
if(cs&&cs.status>=0){
$(this).show().find("h3 a").html(cs.name);
if(cs.status==0){
$(this).find("h3,a").addClass("disabled").attr("href","javascript:bc.showSubscribeDialog();");}else{
var stTitleDiv=$(this).find("div:first");
if(cs.totMarks>0){
scoreHtml='<div class="csscore">'+getSubtopicScore(csid,cs.totMarks)+'</div>';
stTitleDiv.prepend(scoreHtml);}
stTitleDiv.hoverLink("h3")
.click(function(x){
return function(){bc.gotoSubtopicId(x);};}(csid));
$(this).find("li.stl").each(
function(i){
pageid=$(this).attr('class').split(" ")[0].substr(1);
$(this).hoverLink("a").click(function(x,y){
return function(){bc.gotoSubtopicId(x,y);};}(csid,pageid));});}}});});
$('body').append(bc.printFooter);
function getSubtopicScore(csid,csTotMarks){
var score,csUserMarks,ret='',colorbar='';
var csMarks=bc.user.scores["cs"+csid];
if(csMarks){
csUserMarks=csMarks.TotalRight;
if(csMarks.endDays>0){
ret="Last Used: "+fun.daysToDate(csMarks.endDays).ShortDate()+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";}
colorbar=bc.scoreColorBar(csMarks.MarksArray(),csTotMarks,200,{barClass:'scorebarshort',showIcon:false});}else{
csUserMarks=0;}
score=fun.formatFractionPercent(csUserMarks,csTotMarks);
ret="<div class=floatRight>"+ret+score+"</div>"+colorbar;
return ret;}},
setupSubtopicReviews:function(){
var qs=fun.queryStringToObject();
var sa=parseInt(qs.sa),subtopicid=parseInt(qs.s);
var url,safolder,st,page,pageTitle,pageids=[],pageid,bodyHtml;
url="/html/sa"+sa+"/subtopic/s"+subtopicid+".js";
$.ajax({
async:false,
type:"GET",
url:url,
dataType:'script',
cache:true});
st=bc["subtopic"+subtopicid];
if(!st){return;}
bodyHtml='<h1>'+st.name+' Review Pages</h1><br>';
for(var i=0;i<st.pageArr.length;i++){
page=st.pageArr[i];
if(page.pagestyleid==2){
bodyHtml+='<div class="reviewPage">';
pageTitle='';
if(page.pageTitle!=""){
pageTitle=page.pageTitle;}else if(page.linkTitle!=''){
pageTitle=page.linkTitle;}else if(page.dropdownText!=""){
pageTitle=page.dropdownText;}
if(pageTitle!=''){
bodyHtml+='<h2>'+pageTitle+'</h2>';}
bodyHtml+='<div id="p'+page.id+'"></div>';
bodyHtml+='</div>';
pageids.push(page.id);}}
$("body").addClass("subtopicreviews").html(bodyHtml);
for(var i=0;i<pageids.length;i++){
pageid=pageids[i];
if(st.sa_subtopic){
safolder=st.sa_subtopic;}else{
safolder=st.sa;}
url='/html/sa'+safolder+'/main/s'+subtopicid+'/p'+pageid+'.htm';
$('#p'+pageid).load(url+' #pagecontentdiv .reviewContent');}
window.focus();
$("body").prepend(bcConst.pageToolbarPrint);},
setupCourseUsage:function(){
var isFrame=false;
var myTable=$("table#TopSubtopics");
if((parent)&&(parent.frames.length>0)){
isFrame=true;
$("body").addClass("isFrame");
$("body").prepend(bcConst.pageToolbar);}
if(bc2.courseId>0){
myTable=bc2.formatSubtopicsTable(myTable,isFrame,"td:last");}else{
$("#linkAllCourses").hide();
myTable=bc2.formatCourseTable(myTable,isFrame,"td:last");}
if(isFrame){
myTable.find("tr:first th:last").html("My Score /<br>Total Marks");}
window.focus();
myTable.find("span.sparkGraph").show().sparkline('html',bcConst.lineSparkGraphSettings);
if(bc.printFooter){
$('body').append(bc.printFooter);}},
formatCourseTable:function(jqTableObj,canShowLink,cellMarksSelector){
var courseid;
var cell1,cellLast,cellMarks,stripeClass,objMarks,userMarks;
var tmp,totMarks,row;
jqTableObj.find("tr:gt(0)").each(function(i){
row=$(this);
if(this.id){
courseid=this.id.substr(1);
cell1=row.find("td:first");
cell1.addClass("leftEdge hoverHighlight").html('<a>'+cell1.html()+'</a>');
cellLast=row.find("td:last").addClass("rightEdge");
if(cellMarksSelector){
cellMarks=row.find(cellMarksSelector);}
if(canShowLink){
row.click(function(x){
return function(){bc.gotoCourseId(x);};}(courseid));}else{
row.click(function(x){
return function(){fun.gotoUrl("bcCourseUsage.aspx?c="+x,window);};}(courseid));}
row.addClass(stripeClass);
stripeClass=(stripeClass=='r1')?'r2':'r1';
$(this).hoverLink();
if(cellMarks){
totMarks=cellMarks.text();
if(canShowLink){
objMarks=bc.user.scores["c"+courseid];
userMarks=objMarks?objMarks.TotalRight:0;
tmp=fun.formatFractionPercent(userMarks,totMarks);
cellMarks.html(tmp).addClass("alignCenter");}else{
cellMarks.html(totMarks+' marks').addClass("padRight30");}}}else{
stripeClass='r1';}});
return jqTableObj;},
formatSubtopicsTable:function(jqTableObj,canShowLink,cellMarksSelector){
var p,topicid,csid;
var cell1,cellLast,cellMarks,showLink,stripeClass,objMarks,userMarks;
var tmp,totMarks,row;
jqTableObj.find("tbody tr").each(function(i){
if(!this.id){
return false;}
p=this.id.split("_");
row=$(this);
cell1=row.find("td:first");
cellLast=row.find("td:last");
if(cellMarksSelector){
cellMarks=row.find(cellMarksSelector);}
topicid=p[0].substr(1);
if(p[1]){
csid=p[1].substr(1);
showLink=(canShowLink&&(bc['cs'+csid].status>0));
if(bc['cs'+csid].status==0){
cell1.find("a").addClass("disabled");}
row.addClass(stripeClass);
stripeClass=(stripeClass=='r1')?'r2':'r1';
if(cellMarks){
totMarks=cellMarks.text();
if(canShowLink){
objMarks=bc.user.scores["cs"+csid];
userMarks=objMarks?objMarks.TotalRight:0;
tmp=fun.formatFractionPercent(userMarks,totMarks);
cellMarks.html(tmp).addClass("alignCenter");}else{
cellMarks.html(totMarks+' marks').addClass("padRight30");}}}else if(topicid>0){
csid=-1;
showLink=canShowLink;
stripeClass='r1';}else{
return false;}
if(showLink){
cell1.addClass("leftEdge hoverHighlight").html('<a>'+cell1.html()+'</a>');
cellLast.addClass("rightEdge");
$(this).hoverLink();
if(csid>0){
row.click(function(x){
return function(){bc.gotoSubtopicId(x);};}(csid));}else{
row.click(function(x){
return function(){bc.gotoTopicId(x);};}(topicid));}}});
return jqTableObj;},
setupChooseSubjectInstitution:function(){
$("table#chooseSubjectInst tr:even").addClass("r1");
$("table#chooseSubjectInst tr:odd").addClass("r2");
$('div.sa').hoverLink('h3').each(function(i){
$(this).attr('title',$(this).parents('tr').find('h2').text()+' at '+$(this).find('h3').text());});
$(".sparkGraph").show().sparkline('html',bcConst.lineSparkGraphSettings);},
setupNewuser:function(){
$("#Form1").submit(function(){
bc2.submitUpdateUser('newuser');
return false;});
if((parent)&&(parent.frames.length>0)){
parent.location.href=window.location.href;}
bc2.configureFormValidation();},
loadNewUserInstitution:function(drop){
var i=$(drop).val();
if(i>0){
var url='/html/i'+i+'.js';
$.ajax({
type:"GET",
url:url,
dataType:'script',
cache:true,
success:bc2.setNewUserInstitution});}else{
$.extend(bc,{subinstitutionArray:[],subinstitutionPrompt:'',subjectArray:[]});
bc2.setNewUserInstitution();}},
setNewUserInstitution:function(){
fun.loadSelect("countryid",bc.countryArray,0,1,'<option val=""></option>',bc.countryid);
$("#rCountryid").show();
bc2.setCountry();
if(bc.subinstitutionArray.length>0){
fun.loadSelect("subinstitutionid",bc.subinstitutionArray,0,1,'<option val=""></option>');
$("#rSubinstitutionid").show();}else{
$("#rSubinstitutionid").hide().find("#subinstitutionid").html("");}
if(bc.subinstitutionPrompt!=''){
$("#rSubinstitution").show().find('label').html(bc.subinstitutionPrompt);}else{
$("#rSubinstitution").hide().find("#subinstitution").val("");}
fun.loadSelect("subjectid",bc.subjectArray,"id","name","",1);
if(bc.subjectArray.length>1){
$("#rSubject").show();}else{
$("#rSubject").hide();}},
setupEdituser:function(){
fun.loadSelect("countryid",bc.countryArray,0,1,'<option val=""></option>',bc.user.countryid);
if(bc.subinstitutionArray.length>0){
fun.loadSelect("subinstitutionid",bc.subinstitutionArray,0,1,'<option val=""></option>',bc.user.subinstitutionid);
$("#rSubinstitutionid").show();}else{
$("#rSubinstitutionid").hide().find("#subinstitutionid").html("");}
bc2.setCountry();
$("form").submit(function(){
return false;});
$("#btnAddClass").click(function(){
bc2.enrolUserClass();});
$("#btnRegister").click(function(){
bc2.enrolUserLicence();});
if(bc.user.isStaff){
$("table#tblLicence tbody tr").each(function(i){
var subid=$(this).find("td:first").text();
var msgcell=$(this).find("td:last");
var url="/Subscribe/Sub.aspx?subid="+subid;
msgcell.html('<a href="'+url+'">'+msgcell.text()+'</a>');});}
var classRows=$("table#tblClass tbody tr");
if(classRows.length>0){
classRows.each(function(i){
var classid=$(this).find("td:first").text();
var delLink=$(this).find("td:last a");
$(this).addClass("cc"+classid);
var url="javascript:bc2.deleteUserClass("+classid+");";
delLink.attr("href",url);});}
fun.stripeTable();
if(bc.user.mustResetPW){
$("#passwordnew, #passwordnew2").addClass("required");
$("#msg").html("You must enter password to make changes.");}
bc2.configureFormValidation();
window.focus();},
submitUpdateUser:function(mode){
if($("#Form1").data("isDirty")&&$("#Form1").valid()){
var d=$("#Form1").serialize()+'&nocache'+fun.timeStamp();
if(mode){d+="&mode="+mode;}
$("#Form1").data("isDirty",false);
bc.showWaitMsg("Saving details...");
$.getJSON('/handlers/updateUser.ashx',d,function(data){
bc.clearWaitMsg();
switch(data.action){
case "error":
$("#msg").html(fun.errorSpan(data.param));
break;
case "userexists":
$("#msg").html("Username \"" + $("#username").val() + "\" already exists.");
$("#username").focus().addClass("error");
break;
case "ok":
$("#msg").html("User details saved.");
break;
case "redirect":
document.location=data.param;
break;}});}},
setCountry:function(){
if($('#countryid').val()=='0'){
$('#rCountry').show();}else{
$('#rCountry').hide().find('#country').val('');}},
deleteUserClass:function(classid){
var classRow=$("table#tblClass tr.cc"+classid);
classRow.addClass("active");
if(!confirm("Remove yourself from this class?")){
classRow.removeClass("active");
return;}
var d='classid='+classid+'&mode=delclass'+'&nocache'+fun.timeStamp();
bc.showWaitMsg("Removing class...");
$.getJSON('/handlers/updateUser.ashx',d,function(data){
bc.clearWaitMsg();
switch(data.action){
case "error":
$("#classMsg").html(fun.errorSpan(data.param));
break;
case "ok":
classRow.remove();
break;}});},
enrolUserClass:function(){
var classid,t,alreadyEnrolled=false;
if(!$("#FormClass").data("isDirty")||!$("#FormClass").valid()){return;}
classid=$("#classid").val();
$("table#tblClass tbody tr").each(function(i){
t=$(this).find("td:first").text();
if(t==classid){
alreadyEnrolled=true;
return false;}});
if(alreadyEnrolled){
alert("Already enrolled in class!");
return;}
if(confirm("Enrol in this class?")==true){
var d=$("#FormClass").serialize()+"&mode=addclass"+'&nocache'+fun.timeStamp();
$("#FormClass").data("isDirty",false);
bc.showWaitMsg("Adding class...");
$.getJSON('/handlers/updateUser.ashx',d,function(data){
bc.clearWaitMsg();
switch(data.action){
case "error":
$("#classMsg").html(fun.errorSpan(data.param));
break;
case "ok":
var cd=eval(data.param);
var cr='<td>'+classid+'</td><td>'+cd[0]+'</td><td>'+cd[1]+'</td><td>'+cd[2]+'</td><td>'+cd[3]+'</td><td><i>Added</i></td>';
$("<tr>").addClass("active").html(cr).appendTo("table#tblClass tbody");
$("#divClass").show();
$("#FormClass input:text").val("");
break;}});}
return false;},
enrolUserLicence:function(){
var subid,t,alreadyEnrolled=false;
if(!$("#FormLicence").data("isDirty")||!$("#FormLicence").valid()){return;}
subid=$("#subid").val();
$("table#tblLicence tbody tr").each(function(i){
t=$(this).find("td:first").text();
if(t==subid){
alreadyEnrolled=true;
return false;}});
if(alreadyEnrolled){
alert("Already enrolled under this licence!");
return;}
if(confirm("Enrol under this licence?")==true){
var d=$("#FormLicence").serialize()+"&mode=licence"+'&nocache'+fun.timeStamp();
$("#FormLicence").data("isDirty",false);
bc.showWaitMsg("Enrolling...");
$.getJSON('/handlers/updateUser.ashx',d,function(data){
bc.clearWaitMsg();
switch(data.action){
case "error":$("#regMsg").html(fun.errorSpan(data.param));break;
case "ok":document.location="/";break;}});}},
setupShopForm:function(){
var txtSubcode;
fun.stripeTable();
$("a").each(function(index){
if($(this).attr("title")==""){$(this).attr("title",$(this).text());}});
if(document.forms["payForm"]){
bc2.configureFormValidation();
if(bc.subinstitutionArray.length>0){
fun.loadSelect("dropSubinst",bc.subinstitutionArray,0,1,'<option value=""></option>');
$("#rSubinstitutionid").show();}else{}
txtSubcode=$("#txtSubcode");
if(txtSubcode.length>0){
$("#payForm").submit(bc2.submitShopForm);}}},
submitShopForm:function(){
var dropSubinst=$("#dropSubinst"),txtSubinst=$("#txtSubinst"),txtSubcode=$("#txtSubcode");
var	hidCustom=document.forms["payForm"].custom;
if($("#Form1").valid()){
var si=0,si2='',sc='';
var cf="u="+u;
sc=txtSubcode.val();
if(dropSubinst.length>0){si=dropSubinst.val();}
if(txtSubinst.length>0){si2=txtSubinst.val();}
if(si>0){cf+="&si="+si;}
if(si2!=''){cf+="&si2="+si2;}
if(sc!=''){cf+="&sc="+sc;}
hidCustom.value=cf;
return true;}else{
return false;}},
setupScoreSurveyPage:function(){
var msg2="";
if(!csInfo.comments){csInfo.comments=[];}
document.forms['Form1'].csid.value=bc.csid;
document.forms['Form1'].s.value=bc.nav.cs.subtopicid;
$("#Form1").submit(function(){
bc2.confirmSaveSurvey();
return false;});
$("#commentDisclaimer").text(bcConst.commentDisclaimer);
$("#comment").resizable({
handles:"se",maxWidth:450});
$("body").prepend(bcConst.pageToolbar);
showPageScores();
if(csInfo.firstTime){msg2+=csInfo.firstTime;}
if(csInfo.lastTime&&(csInfo.lastTime!=csInfo.firstTime)){
msg2+='-'+csInfo.lastTime;}
document.getElementById("msg2").innerHTML=msg2;
if(bc.nav.showQA==true){
var qainfo="(no questions asked yet)";
if(csInfo.NUserQ&&csInfo.NUserA){
if(csInfo.NUserQ>0){qainfo="("+csInfo.NUserQ+" questions, "+csInfo.NUserA+" answers)";}}
document.getElementById("qainfo").innerHTML=qainfo;}else{
document.getElementById("qalink").style.display='none';}
if(bc.cc>0){
showClassTotalRatings();}else{
$("#radioScore-wrapper").stars({cancelShow:false});
var oldrating=csInfo.rating;
if(oldrating&&oldrating>0){
$("#radioScore-wrapper").stars("select",oldrating);}}
showPastComments();
if(bc.nav){
document.title=bc.pageHeadTitle;
$('body').append(bc.printFooter);}
bc2.configureFormValidation();
$("#comment").rules("add",{minlength:2,maxlength:2000});
function showPageScores(){
var scoremsg="",msg="",pageScoresHtml="",tmp,stripeClass='r1';
var totComplete=0,totIncomplete=0,totUnTried=0;
var csTotMarks,csCoreMarks,showExtraQ;
var csPageDropArray=bc.nav.csPageDropArray;
csTotMarks=bc.nav.cs.totMarks;
csCoreMarks=bc.nav.cs.coreMarks;
showExtraQ=bc.nav.showExtraQ;
var csMarksOutOf=bc.nav.totSubtopicMarks;
var page,numDropPages=csPageDropArray.length;
for(var di=1;di<numDropPages;di++){
page=csPageDropArray[di];
if(page.totMarks>0){
stripeClass=(stripeClass=='r1')?'r2':'r1';
if(page.marks.TotalRight>=page.totMarks){
totComplete++;}else if(page.marks.TotalRight>0){
totIncomplete++;}else{
totUnTried++;}
pageScoresHtml+='<tr class="'+page.cssClass+' '+stripeClass+'" onclick="bc.nav.gotoPageId('+page.pageid+');">';
pageScoresHtml+='<td class="tdPage alignLeft leftEdge">'+page.dropPrefix+'</td>';
pageScoresHtml+='<td class="td3"><sup>'+page.marks.TotalRight+'</sup>/<sub>'+page.totMarks+'</sub></td>';
pageScoresHtml+='<td class="td4">'+Math.round((page.marks.TotalRight/ page.totMarks)*100,2)+'%'+ '</td>';
pageScoresHtml+='<td class="tdDate">';
if(page.marks.endDays>0){
pageScoresHtml+=fun.daysToDate(page.marks.endDays).ShortDate();}else{
pageScoresHtml+='&nbsp;';}
pageScoresHtml+='</td>';
tmp=bc.scoreColorBar(page.marks.MarksArray(),page.totMarks,130,{barClass:'pagescorebar',jqTooltip:true});
pageScoresHtml+='<td class="tdColorbar rightEdge">'+tmp+'</td>';
pageScoresHtml+='</tr>';}}
msg='';
if(totComplete>0){
msg+='<span class="qdone"><b>'+totComplete+'</b> page'+((totComplete>1)?'s':'')+' complete. </span>';}
if(totIncomplete>0){
msg+='<span class="qtried"><b>'+totIncomplete+'</b> page'+((totIncomplete>1)?'s':'')+' incomplete. </span>';}
if(totUnTried>0){
msg+='<span class="quntried"><b>'+totUnTried+'</b> page'+((totUnTried>1)?'s':'')+' untried. </span>';}
document.getElementById('pagescoreTots').innerHTML=msg+'<br />';
if(pageScoresHtml!=""){
pageScoresHtml='<table class="pageScores scoreTable" cellspacing=0><tbody>'+pageScoresHtml+'</tbody></table>';
$("#pageScores").html(pageScoresHtml)
.find(".pagescorebar").tooltip({
position:{
my:"right center",
at:"left center",
offset:"-3 0"},tooltipClass:"scorebarTooltip"});
$("#pageScores table tbody tr").hoverLink();}else{
document.getElementById("pageScores").style.display='none';}
if(csMarksOutOf>0){
var csMarks=bc.nav.visibleCsMarks.TotalRight;
if(bc.cc>0){
scoremsg=bc.user.username+" Average: <sup class=topicScore>"+fun.dpRound(csMarks,2)+"</sup>/<sub class=topicScore>"+csTotMarks+"</sub> = "+(Math.round(10000*csMarks/ csTotMarks)/100)+"%";}else{
scoremsg="Subtopic Score: <sup class=topicScore>"+(Math.round(100*csMarks)/100)+"</sup>/<sub class=topicScore>"+csMarksOutOf+"</sub>="+Math.round(100*csMarks / csMarksOutOf)+"%";}}else{
scoremsg="";
document.getElementById("scoreBar").style.display='none';}
document.getElementById("scoreHeader").innerHTML=scoremsg;
$("#scoreBar .xMax").html(csMarksOutOf);
bc.scoreColorBar(bc.nav.visibleCsMarks.MarksArray(),csMarksOutOf,466,{barClass:'subtopicscorebar',showIcon:true,showOverlay:true,jqBar:$("#colorbar"),numBars:4,jqTooltip:true});
if(csInfo["numFinished"]&&csInfo["numFinished"]>0){
tmp="Previously completed by "+csInfo["numFinished"]+" users.<br />";
tmp+="First ";
if(csInfo["firstFinishDate"]){tmp+=" on "+csInfo["firstFinishDate"];}
if(csInfo["firstFinishLoc"]){tmp+=" from "+csInfo["firstFinishLoc"];}
document.getElementById("pastCompleted").innerHTML=tmp;}}
function showPastComments(){
var numComments=0,pastComments="",commentCaption;
if(csInfo.comments){numComments=csInfo.comments.length;}
if(numComments>0){
if(bc.cc>0&&csInfo.commentDates){
for(var i=0;i<numComments;i++){
pastComments+="<tr><td width=70>"+csInfo.commentDates[i]+'<br />'+csInfo.commentUsers[i]+"</td><td>"+csInfo.comments[i]+"</td></tr>";}
pastComments="<table class=grid border=1 cellspacing=0 cellpadding=2 width=100% style='font-size:12px;'><tbody>"+pastComments+"</tbody></table>";
if(numComments==20){
commentCaption="<br /><h2>Latest "+numComments+" Comments</h2>";}else{
commentCaption="<br /><h2>"+numComments+" Comments</h2>";}}else{
commentCaption='<b>Past Comments</b>';
for(var i=0;i<numComments;i++){
pastComments+="<div>"+csInfo.comments[i]+"</div>";}}
$("#pastComments").show().html(commentCaption+pastComments);}
if(numComments>=MAXCOMMENTS||bc.cc>0){
$("#divNewComment").hide();}}
function showClassTotalRatings(){
if(!csInfo["classRating"]){return;}
var classr="",r1="<tr><td>Rating</td>",r2="<tr><td>Votes</td>";
document.getElementById("divSubmit").style.display='none';
for(var i=1;i<=6;i++){
r1+="<td width=35>"+i+"</td>";
r2+="<td>"+csInfo.classRating[i]+"</td>";}
r1+="<td width=35>Avg</td>";
r2+="<td>"+(Math.round(100*csInfo.rating)/100) + "</td>";
r1+="</tr>";
r2+="</tr>";
classr="<table class=grid  border=1 cellspacing=0 cellpadding=2 style='font-size:12px;'>"+r1+r2+"</table>";
classr+="<br /><b>"+csInfo.classRating[0]+" ratings</b>";
if(csInfo.rDate1){classr+=" from "+csInfo.rDate1;}
if(csInfo.rDate2){classr+=" to "+csInfo.rDate2;}
document.getElementById("divRadio").innerHTML=classr;}},
confirmSaveSurvey:function(){
var rating,surveyChanged,newComment;
var queryString,replyDiv;
rating=$("#radioScore-wrapper").data("stars").options.value;
surveyChanged=(rating>0&&csInfo.rating!=rating&&!bc.user.isDemo)?1:0;
document.forms['Form1'].surveychanged.value=surveyChanged;
newComment=$.trim(document.forms['Form1'].comment.value);
document.forms['Form1'].comment.value=newComment;
$("#catid").rules((newComment=='')?"remove":"add","required");
if($("#Form1").valid()){
if(newComment!=""||surveyChanged==1){
queryString=$("#Form1").serialize();
replyDiv=$("#divSurveyMsg");
bc.saveComment(queryString,replyDiv);
if(surveyChanged==1){
csInfo.rating=rating;}
if(newComment!=""){
var numComments=csInfo.comments.length;
csInfo.comments[numComments]=newComment;
document.forms['Form1'].comment.value='';
$("#pastComments").show().append("<div>"+newComment+"</div>");
if(numComments>=MAXCOMMENTS){
$("#divNewComment").hide();}}}}
return false;},
bodyOnloadEvent:function(){
bc2.setupGoogleAnalytics2();},
setupGoogleAnalytics2:function(){
var ga=document.createElement('script');ga.type='text/javascript';ga.async=true;
ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js';
var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(ga,s);},
setupGeneric:function(){
$(".r:odd").addClass("r1");
$(".r:even").addClass("r2");
if((parent)&&(parent.frames.length>0)){
$("body").addClass("isFrame");
$("body").prepend(bcConst.pageToolbar);}else{
window.focus();}}};
function regvar(rid){
if(bc.rv&&bc.rv[rid]){
return bc.rv[rid];}else{
return '';}}
function showtestscore(pageindex,mark,outOf,msg){
parent.pagemain.document.getElementById("score"+pageindex).innerHTML='<sup class=score>'+mark+'</sup>/<sub class=score>'+outOf+'</sub>';
testsubmitmsg(msg);}
function submitmsg(msg,newserverstarttime){
var d=parent.pagemain.document.getElementById("lastTopScore");
if(d){
d.innerHTML=msg;}
if(parent.pagemain.document.forms["scoreform"]){
if(newserverstarttime){parent.pagemain.document.forms["scoreform"].starttime.value=newserverstarttime;}}}
function reslinkStyle(){
if(bc.user.isDemo==false){
return "<style>.reslink{display:inline;}</style>";}else{
return "<style>.reslink{display:none;}</style>";}}
$.fn.hoverLink=function(hoverHighlightSelector){
$(this).css('cursor','pointer')
.hover(function(){
$(this).addClass("hover");},function(){
$(this).removeClass("hover");}).mousedown(function(){
$(this).addClass("active");}).bind('mouseleave',function(){
$(this).removeClass('active');});
if(hoverHighlightSelector){
$(this).find(hoverHighlightSelector).addClass("hoverHighlight");}
return $(this);};

