

//<![CDATA[

<!--


function Client(){
//if not a DOM browser, hopeless
	this.min = false; if (document.getElementById){this.min = true;};

	this.ua = navigator.userAgent;
	this.name = navigator.appName;
	this.ver = navigator.appVersion;  

//Get data about the browser
	this.mac = (this.ver.indexOf('Mac') != -1);
	this.win = (this.ver.indexOf('Windows') != -1);

//Look for Gecko
	this.gecko = (this.ua.indexOf('Gecko') > 1);
	if (this.gecko){
		this.geckoVer = parseInt(this.ua.substring(this.ua.indexOf('Gecko')+6, this.ua.length));
		if (this.geckoVer < 20020000){this.min = false;}
	}
	
//Look for Firebird
	this.firebird = (this.ua.indexOf('Firebird') > 1);
	
//Look for Safari
	this.safari = (this.ua.indexOf('Safari') > 1);
	if (this.safari){
		this.gecko = false;
	}
	
//Look for IE
	this.ie = (this.ua.indexOf('MSIE') > 0);
	if (this.ie){
		this.ieVer = parseFloat(this.ua.substring(this.ua.indexOf('MSIE')+5, this.ua.length));
		if (this.ieVer < 5.5){this.min = false;}
	}
	
//Look for Opera
	this.opera = (this.ua.indexOf('Opera') > 0);
	if (this.opera){
		this.operaVer = parseFloat(this.ua.substring(this.ua.indexOf('Opera')+6, this.ua.length));
		if (this.operaVer < 7.04){this.min = false;}
	}
	if (this.min == false){
		alert('Your browser may not be able to handle this page.');
	}
	
//Special case for the horrible ie5mac
	this.ie5mac = (this.ie&&this.mac&&(this.ieVer<6));
}

var C = new Client();

//for (prop in C){
//	alert(prop + ': ' + C[prop]);
//}



//CODE FOR HANDLING NAV BUTTONS AND FUNCTION BUTTONS

//[strNavBarJS]
function NavBtnOver(Btn){
	if (Btn.className != 'NavButtonDown'){Btn.className = 'NavButtonUp';}
}

function NavBtnOut(Btn){
	Btn.className = 'NavButton';
}

function NavBtnDown(Btn){
	Btn.className = 'NavButtonDown';
}
//[/strNavBarJS]

function FuncBtnOver(Btn){
	if (Btn.className != 'FuncButtonDown'){Btn.className = 'FuncButtonUp';}
}

function FuncBtnOut(Btn){
	Btn.className = 'FuncButton';
}

function FuncBtnDown(Btn){
	Btn.className = 'FuncButtonDown';
}

function FocusAButton(){
	if (document.getElementById('CheckButton1') != null){
		document.getElementById('CheckButton1').focus();
	}
	else{
		if (document.getElementById('CheckButton2') != null){
			document.getElementById('CheckButton2').focus();
		}
		else{
			document.getElementsByTagName('button')[0].focus();
		}
	}
}




//CODE FOR HANDLING DISPLAY OF POPUP FEEDBACK BOX

var topZ = 1000;

function ShowMessage(Feedback){
	var Output = Feedback + '<br /><br />';
	document.getElementById('FeedbackContent').innerHTML = Output;
	var FDiv = document.getElementById('FeedbackDiv');
	topZ++;
	FDiv.style.zIndex = topZ;
	FDiv.style.top = TopSettingWithScrollOffset(30) + 'px';
//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
	if (C.gecko){
		document.getElementById('FeedbackOKButton').focus();
	}
	FDiv.style.display = 'block';

	ShowElements(false, 'input');
	ShowElements(false, 'select');
	ShowElements(false, 'object');
	if (C.ie){
		document.getElementById('FeedbackOKButton').focus();
	}
	
//
}

function ShowElements(Show, TagName){
//Special for IE bug -- hide all the form elements that will show through the popup
	if (C.ie){
		var Els = document.getElementsByTagName(TagName);
		for (var i=0; i<Els.length; i++){
			if (Show == true){
				Els[i].style.display = 'inline';
			}
			else{
				Els[i].style.display = 'none';
			}
		}
	} 
}

function HideFeedback(){
	document.getElementById('FeedbackDiv').style.display = 'none';
	ShowElements(true, 'input');
	ShowElements(true, 'select');
	ShowElements(true, 'object');
	if (Finished == true){
		Finish();
	}
}


//GENERAL UTILITY FUNCTIONS AND VARIABLES

//PAGE DIMENSION FUNCTIONS
function PageDim(){
//Get the page width and height
	this.W = 600;
	this.H = 400;
	this.W = document.getElementsByTagName('body')[0].clientWidth;
	this.H = document.getElementsByTagName('body')[0].clientHeight;
}

var pg = null;

function GetPageXY(El) {
	var XY = {x: 0, y: 0};
	while(El){
		XY.x += El.offsetLeft;
		XY.y += El.offsetTop;
		El = El.offsetParent;
	}
	return XY;
}

function GetScrollTop(){
	if (document.documentElement && document.documentElement.scrollTop){
		return document.documentElement.scrollTop;
	}
	else{
		if (document.body){
 			return document.body.scrollTop;
		}
		else{
			return window.pageYOffset;
		}
	}
}

function GetViewportHeight(){
	if (window.innerWidth){
		return window.innerWidth;
	}
	else{
		return document.getElementsByTagName('body')[0].clientHeight;
	}
}

function TopSettingWithScrollOffset(TopPercent){
	var T = Math.floor(GetViewportHeight() * (TopPercent/100));
	return GetScrollTop() + T; 
}

//CODE FOR AVOIDING LOSS OF DATA WHEN BACKSPACE KEY INVOKES history.back()
var InTextBox = false;

function SuppressBackspace(e){ 
	if (InTextBox == true){return;}
	if (C.ie) {
		thisKey = window.event.keyCode;
	}
	else {
		thisKey = e.keyCode;
	}

	var Suppress = false;

	if (thisKey == 8) {
		Suppress = true;
	}

	if (Suppress == true){
		if (C.ie){
			window.event.returnValue = false;	
			window.event.cancelBubble = true;
		}
		else{
			e.preventDefault();
		}
	}
}

if (C.ie){
	document.attachEvent('onkeydown',SuppressBackspace);
	window.attachEvent('onkeydown',SuppressBackspace);
}
else{
	window.addEventListener('keypress',SuppressBackspace,false);
}

function ReduceItems(InArray, ReduceToSize){
	var ItemToDump=0;
	var j=0;
	while (InArray.length > ReduceToSize){
		ItemToDump = Math.floor(InArray.length*Math.random());
		InArray.splice(ItemToDump, 1);
	}
}

function Shuffle(InArray){
	Temp = new Array();
	var Len = InArray.length;

	var j = Len;

	for (var i=0; i<Len; i++){
		Temp[i] = InArray[i];
	}

	for (i=0; i<Len; i++){
		Num = Math.floor(j  *  Math.random());
		InArray[i] = Temp[Num];

		for (var k=Num; k < j; k++) {
			Temp[k] = Temp[k+1];
		}
		j--;
	}
	return InArray;
}

function WriteToInstructions(Feedback) {
//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
	document.getElementById('InstructionsDiv').innerHTML = Feedback;

}




function EscapeDoubleQuotes(InString){
	return InString.replace(/"/g, '&quot;')
}

function FocusAButton(){
	if (document.getElementById('CheckButton1') != null){
		document.getElementById('CheckButton1').focus();
	}
	else{
		document.getElementsByTagName('button')[0].focus();
	}
}

function TrimString(InString){
        var x = 0;

        if (InString.length != 0) {
                while ((InString.charAt(InString.length - 1) == '\u0020') || (InString.charAt(InString.length - 1) == '\u000A') || (InString.charAt(InString.length - 1) == '\u000D')){
                        InString = InString.substring(0, InString.length - 1)
                }

                while ((InString.charAt(0) == '\u0020') || (InString.charAt(0) == '\u000A') || (InString.charAt(0) == '\u000D')){
                        InString = InString.substring(1, InString.length)
                }

                while (InString.indexOf('  ') != -1) {
                        x = InString.indexOf('  ')
                        InString = InString.substring(0, x) + InString.substring(x+1, InString.length)
                 }

                return InString;
        }

        else {
                return '';
        }
}

function FindLongest(InArray){
	if (InArray.length < 1){return -1;}

	var Longest = 0;
	for (var i=1; i<InArray.length; i++){
		if (InArray[i].length > InArray[Longest].length){
			Longest = i;
		}
	}
	return Longest;
}

//UNICODE CHARACTER FUNCTIONS
function IsCombiningDiacritic(CharNum){
	var Result = (((CharNum >= 0x0300)&&(CharNum <= 0x370))||((CharNum >= 0x20d0)&&(CharNum <= 0x20ff)));
	Result = Result || (((CharNum >= 0x3099)&&(CharNum <= 0x309a))||((CharNum >= 0xfe20)&&(CharNum <= 0xfe23)));
	return Result;
}

function IsCJK(CharNum){
	return ((CharNum >= 0x3000)&&(CharNum < 0xd800));
}

//SETUP FUNCTIONS
//BROWSER WILL REFILL TEXT BOXES FROM CACHE IF NOT PREVENTED
function ClearTextBoxes(){
	var NList = document.getElementsByTagName('input');
	for (var i=0; i<NList.length; i++){
		if (NList[i].id.indexOf('Guess') > -1){
			NList[i].value = '';
		}
		if (NList[i].id.indexOf('Chk') > -1){
			NList[i].checked = '';
		}
	}
}

//EXTENSION TO ARRAY OBJECT
function Array_IndexOf(Input){
	var Result = -1;
	for (var i=0; i<this.length; i++){
		if (this[i] == Input){
			Result = i;
		}
	}
	return Result;
}
Array.prototype.indexOf = Array_IndexOf;

//IE HAS RENDERING BUG WITH BOTTOM NAVBAR
function RemoveBottomNavBarForIE(){
	if ((C.ie)&&(document.getElementById('Reading') != null)){
		if (document.getElementById('BottomNavBar') != null){
			document.getElementById('TheBody').removeChild(document.getElementById('BottomNavBar'));
		}
	}
}




//HOTPOTNET-RELATED CODE

var HPNStartTime = (new Date()).getTime();
var SubmissionTimeout = 30000;
var Detail = ''; //Global that is used to submit tracking data

function Finish(){
//If there's a form, fill it out and submit it
	if (document.store != null){
		Frm = document.store;
		Frm.starttime.value = HPNStartTime;
		Frm.endtime.value = (new Date()).getTime();
		Frm.mark.value = Score;
		Frm.detail.value = Detail;
		Frm.submit();
	}
}



//JQUIZ CORE JAVASCRIPT CODE

var CurrQNum = 0;
var CorrectIndicator = ':-)';
var IncorrectIndicator = 'X';
var YourScoreIs = 'Your score is ';
var ContinuousScoring = true;
var CorrectFirstTime = 'Questions answered correctly first time: ';
var ShowCorrectFirstTime = false;
var ShuffleQs = true;
var ShuffleAs = true;
var DefaultRight = 'Correct!';
var DefaultWrong = 'Sorry! Try again.';
var QsToShow = 10;
var Score = 0;
var Finished = false;
var Qs = null;
var QArray = new Array();
var ShowingAllQuestions = false;
var ShowAllQuestionsCaption = 'Show all questions';
var ShowOneByOneCaption = 'Show questions one by one';
var State = new Array();
var Feedback = '';

//The following variable can be used to add a message explaining
//that the question is finished, so no further marking will take 
//place. 
var strQuestionFinished = '';

function CompleteEmptyFeedback(){
	var QNum, ANum;
	for (QNum=0; QNum<I.length; QNum++){
//Only do this if not multi-select
		if (I[QNum][2] != '3'){
  		for (ANum = 0; ANum<I[QNum][3].length; ANum++){
  			if (I[QNum][3][ANum][1].length < 1){
  				if (I[QNum][3][ANum][2] > 0){
  					I[QNum][3][ANum][1] = DefaultRight;
  				}
  				else{
  					I[QNum][3][ANum][1] = DefaultWrong;
  				}
  			}
  		}
		}
	}
}

function SetUpQuestions(){
	var AList = new Array(); 
	var QList = new Array();
	var i, j;
	Qs = document.getElementById('Questions');
	while (Qs.getElementsByTagName('li').length > 0){
		QList.push(Qs.removeChild(Qs.getElementsByTagName('li')[0]));
	}
	var DumpItem = 0;
	while (QsToShow < QList.length){
		DumpItem = Math.floor(QList.length*Math.random());
		for (j=DumpItem; j<(QList.length-1); j++){
			QList[j] = QList[j+1];
		}
		QList.length = QList.length-1;
	}
	if (ShuffleQs == true){
		QList = Shuffle(QList);
	}
	if (ShuffleAs == true){
		var As;
		for (var i=0; i<QList.length; i++){
			As = QList[i].getElementsByTagName('ol')[0];
			if (As != null){
  			AList.length = 0;
				while (As.getElementsByTagName('li').length > 0){
					AList.push(As.removeChild(As.getElementsByTagName('li')[0]));
				}
				AList = Shuffle(AList);
				for (j=0; j<AList.length; j++){
					As.appendChild(AList[j]);
				}
			}
		}
	}
	
	for (i=0; i<QList.length; i++){
		Qs.appendChild(QList[i]);
		QArray[QArray.length] = QList[i];
	}

//Show the first item
	QArray[0].style.display = '';
	
//Now hide all except the first item
	for (i=1; i<QArray.length; i++){
		QArray[i].style.display = 'none';
	}		
	SetQNumReadout();
}

function ChangeQ(ChangeBy){
	if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}
	QArray[CurrQNum].style.display = 'none';
	CurrQNum += ChangeBy;
	QArray[CurrQNum].style.display = '';
	SetQNumReadout();
//if there's a textbox, set the focus in it
	if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){
		QArray[CurrQNum].getElementsByTagName('input')[0].focus();
	}
}

function SetQNumReadout(){
	document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;
}

I=new Array();
I[0]=new Array();I[0][0]=100;
I[0][1]='';
I[0][2]='0';
I[0][3]=new Array();
I[0][3][0]=new Array('King Hammurabi of Babylon','Correct.  This was accomplished around 1700 BC.',1,100,1);
I[0][3][1]=new Array('Emperor Justinian I of Rome','Sorry.  Justinian I developed Roman Law and this eventually evolved into the basic civil law of most European countries.  It was not, however, the fist known civil law code.',0,0,1);
I[0][3][2]=new Array('Emperor Napoleon I of France','Sorry.  Napoleon I developed what was called Napoleon\'s Civil Code and that has become the basic civil law of much of the world today.',0,0,1);
I[0][3][3]=new Array('Alexander the Great of Macedon','Nope.  Alexander the Great accomplished many things, but the compilation of the first civil law code was not among them.',0,0,1);
I[0][3][4]=new Array('King John I of England','Nope.  While the document that Kin John I was obliged to sign in 1215, the Magna Carta, was an important step in the development of law in English-speaking countries, he did not compile the first known civil law code.',0,0,1);
I[1]=new Array();I[1][0]=100;
I[1][1]='';
I[1][2]='0';
I[1][3]=new Array();
I[1][3][0]=new Array('Napoleon\'s Civil Code','Right.  Napoleon\'s Civil Code is still used in much of the world today.',1,100,1);
I[1][3][1]=new Array('The Magna Carta','Sorry.  The Magna Carta, signed by England\'s King John I in 1215, did not put this requirement on the accused.',0,0,1);
I[1][3][2]=new Array('The Uniform Code of Military Justice (UCMJ)','Nope.  The UCMJ follows U.S. Civil Law and requires the burden of proof be on the state and not the individual.',0,0,1);
I[1][3][3]=new Array('The Court of Chancery','Sorry.  This was the name given to the early Court in England which handled civil law cases.  As with most English law, the burden of proof here was on the state and not the individual charged.',0,0,1);
I[1][3][4]=new Array('Constitutional Law','Nope.  U.S. constitutional law has exactly the opposite thrust:  The state must provide the burden of proof of guilt.',0,0,1);
I[2]=new Array();I[2][0]=100;
I[2][1]='';
I[2][2]='0';
I[2][3]=new Array();
I[2][3][0]=new Array('The Magna Carta','Right!  This document limited the king&#x2019;s power and guaranteed certain basic rights.',1,100,1);
I[2][3][1]=new Array('Hammurabi\'s Code','Sorry.  King Hammurabi\'s Code dates back to 1700 BC and is the oldest known record of a Civil Law code.',0,0,1);
I[2][3][2]=new Array('Napoleon\'s Code','Sorry.  Napoleon\'s Civil Code was &#x003C;a href="javascript:alert(\'Enacted by a legislative body\')"&#x003E;codified &#x003C;/a&#x003E;by Emperor Napoleon I of France in 1804 and has become the basic civil law of much of the world.',0,0,1);
I[2][3][3]=new Array('The Court of Chancery','Nope.  The Court of Chancery was created in the years after the Magna Carta was signed to handle Civil Law cases within England.',0,0,1);
I[2][3][4]=new Array('Equity Law','Nope.  Equity Law, another name for Civil Law, was a development in England that followed the establishment of the Court of Chancery.',0,0,1);
I[3]=new Array();I[3][0]=100;
I[3][1]='';
I[3][2]='0';
I[3][3]=new Array();
I[3][3][0]=new Array('Common Law','Correct.  Common law developed from decisions in the king\'s courts.  At a later date this developed into both Criminal and Civil Law.',1,100,1);
I[3][3][1]=new Array('Criminal Law','Sorry.  Criminal law deals with criminal cases.  While it did derive in part from unwritten laws and general custom, this is not the name used to describe this body of law.',0,0,1);
I[3][3][2]=new Array('Napoleon\'s Civil Code','Sorry.  This was the Civil Law code developed by Emperor Napoleon I in 1804 that has become the basic civil law of much of the world.',0,0,1);
I[3][3][3]=new Array('The Magna Carta','Nope.  This document, signed by King John I in 1215, limited the king&#x2019;s power and guaranteed certain basic rights.',0,0,1);
I[3][3][4]=new Array('Equity Law','Sorry.  Equity Law is another term for Civil Law. It is the law that is used to restore rights, compensate damages, and to correct injuries in civil cases.',0,0,1);
I[4]=new Array();I[4][0]=100;
I[4][1]='';
I[4][2]='0';
I[4][3]=new Array();
I[4][3][0]=new Array('Civil Law','Right!  Civil, or Equity Law, is the body of law that is used to restore rights, compensate damages, and to correct injuries in civil cases.',1,100,1);
I[4][3][1]=new Array('Criminal Law','Sorry.  Criminal Law deals with criminal cases and matters.  Equity Law does not.',0,0,1);
I[4][3][2]=new Array('Common Law','Sorry.  Although Equity Law developed out of Common Law, Common Law is a broader term and refers to an early unwritten body of law based on general custom in England.',0,0,1);
I[4][3][3]=new Array('Military Law','Nope.  Military law refers to the established rules and regulations affecting the military establishment.',0,0,1);
I[4][3][4]=new Array('Constitutional Law','Nope.  Constitutional Law is law based on either federal or state constitutions. Generally, it concerns the fundamental principles that regulate the relationship between a government and its citizens. ',0,0,1);
I[5]=new Array();I[5][0]=100;
I[5][1]='';
I[5][2]='0';
I[5][3]=new Array();
I[5][3][0]=new Array('Trial by a jury of peers.','Correct!  This developed out of a similar right found in English Common Law.',1,100,1);
I[5][3][1]=new Array('Freedom from cruel and unusual punishment.','Sorry.  This is a part of the Eighth Amendment to the U.S. Constitution.',0,0,1);
I[5][3][2]=new Array('That Congress shall make no law respecting an establishment of religion.','Sorry.  You are thinking of the First Amendment to the U.S. Constitution.',0,0,1);
I[5][3][3]=new Array('The right of the people to keep and bear Arms.','Nope.  This right is guaranteed by the Second Amendment to the U.S.  Constitution.',0,0,1);
I[5][3][4]=new Array('That Congress shall have power to lay and collect taxes on incomes.','Nope.  That was the 16th Amendment to the U.S. Constitution, ratified on February 3, 1913.',0,0,1);
I[6]=new Array();I[6][0]=100;
I[6][1]='';
I[6][2]='0';
I[6][3]=new Array();
I[6][3][0]=new Array('Mutiny','Right.  This is a court-martial offense.  Remember that although civilians\' actions only really affect themselves, a military member\'s actions affect the whole nation.  Therefore the responsibility and accountability has to be greater.',1,100,1);
I[6][3][1]=new Array('Desertion','Sorry.  Under the UCMJ, the charge of desertion refers to leaving your military unit with the intent of staying away permanently.  While civilians can quit their jobs at any time, the responsibilities of our military to our entire nation make this illegal under military law.',0,0,1);
I[6][3][2]=new Array('Disrespect','Sorry.  The charge of Disrespect to a Superior Commissioned Officer more closely resembles "telling off the boss" in civilian world except that, unlike doing this in a civilian job, it is a criminal offence under the UCMJ.',0,0,1);
I[6][3][3]=new Array('Conduct Unbecoming','Nope.  While you might think that such a strike would constitute incorrect conduct, this charge under the UCMJ is not as serious as the one concerning a person or person who incites or participates in a strike.',0,0,1);
I[6][3][4]=new Array('Malingering','Nope.  While this is a chargeable offense under the UCMJ, it refers to the practice of feigning illness or inability to work.  Civilians can do this without being charged with a crime.  Military members cannot.',0,0,1);
I[7]=new Array();I[7][0]=100;
I[7][1]='';
I[7][2]='0';
I[7][3]=new Array();
I[7][3][0]=new Array('British Common Law and Royal Navy Admiralty Law','Right!  American Colonial sailors were already familiar with these rules and regulations, since many of them had served onboard British ships.  It made sense to use these as a starting point for the new Navy.',1,100,1);
I[7][3][1]=new Array('British Common Law','Sorry.  While British Common Law was partially used as a model, there is a more correct answer.',0,0,1);
I[7][3][2]=new Array('Royal Navy Admiralty Law','Sorry.  While Royal Navy Admiralty Law was partially used as a model, there is a more correct answer.',0,0,1);
I[7][3][3]=new Array('The Magna Carta','Nope.  The Magna Carta was the document signed by King John I of England in 1215 which limited the king&#x2019;s power and guaranteed certain basic rights.',0,0,1);
I[7][3][4]=new Array('The U.S Constitution','Sorry.  There was no U.S. Constitution in 1775.  The U.S. Constitution would shape U.S. Navy Regulations in the years to come, but they didn\'t govern the Navy that was helping to fight for independence.',0,0,1);
I[8]=new Array();I[8][0]=100;
I[8][1]='';
I[8][2]='0';
I[8][3]=new Array();
I[8][3][0]=new Array('Navy Regulations','Correct!  These laws specify particular actions that can and cannot be done and directs how the chain of command should handle them.',1,100,1);
I[8][3][1]=new Array('The Uniform Code of Military Justice','Sorry.  The UCMJ is a set of laws that deals with the trial and punishment of military personnel who break military-specific rules and guidelines.',0,0,1);
I[8][3][2]=new Array('The Sea Service Rules and Regulations','Nope.  There is no such set of rules and regulations.',0,0,1);
I[8][3][3]=new Array('The International Law of the Sea','Nope.  This set of laws governing many aspects of commerce and industry in and under international waters does not deal with the organization and administration of our Navy.',0,0,1);
I[8][3][4]=new Array('The Rules for the Regulation of the Navy of the United Colonies','Sorry.  This was the name given to the first rules and regulations written for our Navy.  They were based on British Common and Royal Navy Admiralty Laws.',0,0,1);
I[9]=new Array();I[9][0]=100;
I[9][1]='';
I[9][2]='0';
I[9][3]=new Array();
I[9][3][0]=new Array('Plan of the Day','Right!  Events change so frequently within a Navy Command that updated information needs to be put out on a daily basis.  Besides these type of things, the Plan of the Day will also include a review of one or more Navy Regulations that are selected at random to be included for the benefit and education of the crew.',1,100,1);
I[9][3][1]=new Array('Navy Regulations','Sorry.  Navy Regulations provide broad guidelines for the organization and administration of the Navy.  This is a large document and it is not published daily.',0,0,1);
I[9][3][2]=new Array('Ship\'s Organization and Regulations Manual (SORM)','Sorry.  The SORM is a publication which covers in great detail the organization, rules and regulations of a ship, squadron or activity.',0,0,1);
I[9][3][3]=new Array('Daily Bulletin ','Nope.  It is sometimes referred to by this name in civilian organizations, but there is a different name used within the military.',0,0,1);
I[9][3][4]=new Array('UCMJ Poster','Nope.  There is a poster which is placed in various areas of a command that contains the articles of the UCMJ, but this is not something that covers command events and is published daily.',0,0,1);
I[10]=new Array();I[10][0]=100;
I[10][1]='';
I[10][2]='0';
I[10][3]=new Array();
I[10][3][0]=new Array('The Uniform Code of Military Justice (UCMJ)','Right!  The word <em>uniform </em>	means that the code is the same for all the services.',1,100,1);
I[10][3][1]=new Array('The Manual for Courts-Martial (MCM)','Sorry.  The MCM describes the types of courts-martial established by the UCMJ, defines their jurisdiction, and prescribes their membership and procedures.',0,0,1);
I[10][3][2]=new Array('The Manual of the Judge Advocate General (JAG Manual)','Sorry.  This manual deals with the administration of military law as decreed in Navy Regulations and the UCMJ.',0,0,1);
I[10][3][3]=new Array('Navy Regulations','Nope.  Navy Regulations provide broad guidelines for the organization and administration of the Navy.  These are Navy-specific rules and regulations and do not apply to the Army, Air Force or Coast Guard.',0,0,1);
I[10][3][4]=new Array('The Non-Judicial Punishment (NJP) Manual','Nope.  There is no such individual manual.  The rules covering NJP are included as a chapter within another of the documents listed.',0,0,1);
I[11]=new Array();I[11][0]=100;
I[11][1]='';
I[11][2]='3';
I[11][3]=new Array();
I[11][3][0]=new Array('At the time of entry on active duty','It is done at the time of entry on active duty.  What other answers are correct as well?',1,100,1);
I[11][3][1]=new Array('Six months after entry on active duty','It is done at the 6-month point.  What other answers are correct as well?',1,100,1);
I[11][3][2]=new Array('At every reenlistment','It is done at every reenlistment.  What other answers are correct as well?',1,100,1);
I[11][3][3]=new Array('One year after entry on active duty','Nope.  The one-year anniversary is not a required time for this training.',0,0,1);
I[11][3][4]=new Array('At the first reenlistment only','Sorry.  While it is done at the time of the first reenlistment, that is not the only time it is done.',0,0,1);
I[11][3][5]=new Array('At the time of release from active duty','Nope.  If a member is leaving the service, they would have no need for this review.',0,0,1);
I[12]=new Array();I[12][0]=100;
I[12][1]='';
I[12][2]='0';
I[12][3]=new Array();
I[12][3][0]=new Array('General provisions and rules for apprehension and restraint.','Correct.  The conduct of nonjudicial punishments and courts-martial are also covered in the first 9 groupings.',1,100,1);
I[12][3][1]=new Array('Acts that are in direct violation of acceptable military law.','Sorry.  This is covered in the 10th grouping, also called the "&#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E;".',0,0,1);
I[12][3][2]=new Array('Court-martial offenses.','Sorry.  Court-martial offenses are covered in the 10 grouping, which includes articles 77 - 134 and is commonly called the &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E;.  The conduct of Court-martials are, however, covered in the first nine groupings.',0,0,1);
I[12][3][3]=new Array('Disobedience of lawful orders and absence without leave.','Nope.  These are covered under the 10th grouping, also known as the &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E;.',0,0,1);
I[12][3][4]=new Array('Offenses such as murder, assault and larceny.','Nope.  These offenses are covered in the 10th grouping, also known as the &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E;',0,0,1);
I[13]=new Array();I[13][0]=100;
I[13][1]='';
I[13][2]='0';
I[13][3]=new Array();
I[13][3][0]=new Array('The conduct of <a href="javascript:alert(\'NonJudicial Punishment\')">NJP</a> and courts-martial.','Right!  This is covered in the first grouping of nine, specifically in the 4th through 8th groups.',1,100,1);
I[13][3][1]=new Array('Violations of acceptable military law.','Sorry.  The &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E; are comprised of articles 77-134 of the UCMJ and these articles deal with specific violations of acceptable military, and in some cases Civil, Law.',0,0,1);
I[13][3][2]=new Array('Murder, assault and larceny.','Sorry.  These are serious crimes and are covered under Articles 118, 128 and 121 of the UCMJ respectively.',0,0,1);
I[13][3][3]=new Array('Disobedience of lawful orders and insubordination.','Nope.  These are covered under Articles 90, 91 and 92 of the UCMJ.  These three are a part of the &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E; section.',0,0,1);
I[13][3][4]=new Array('Absence without leave.','Nope.  This is covered under Article 86 of the UCMJ, one of the &#x003C;em&#x003E;Punitive Articles&#x003C;/em&#x003E;.',0,0,1);
I[14]=new Array();I[14][0]=100;
I[14][1]='';
I[14][2]='0';
I[14][3]=new Array();
I[14][3][0]=new Array('3 days confinement at sea on bread and water.','Right!  This is actually a sentence that can be given by a Commanding Officer of a ship or squadron when at sea.',1,100,1);
I[14][3][1]=new Array('Flogging','Nope.  This is a classic example of the type of cruel and unusual punishment that article 55  of the <a href="javascript:alert(\'Uniform Code of Military Justice\')">UCMJ </a>was enacted to prohibit.',0,0,1);
I[14][3][2]=new Array('Tattooing','Sorry.  While some sailors choose to get tattoos on their own, as a form of punishment this is strictly prohibited under article 55 of the &#x003C;a href="javascript:alert(\'Uniform Code of Military Justice\')"&#x003E;UCMJ&#x003C;/a&#x003E;.',0,0,1);
I[14][3][3]=new Array('Branding','Nope.  The branding of convicted sailors is considered cruel and unusual punishment and is not done.',0,0,1);
I[14][3][4]=new Array('Shaving of the head','Sorry.  While many choose to shave their heads on their own, as a form of punishment this is strictly prohibited under article 55 of the <a href="javascript:alert(\'Uniform Code of Military Justice\')">UCMJ</a>.',0,0,1);
I[15]=new Array();I[15][0]=100;
I[15][1]='';
I[15][2]='0';
I[15][3]=new Array();
I[15][3][0]=new Array('English Common Law considers the accused innocent until proven guilty.','Correct.  This is a specific right under English Common Law and was adopted later by the founding fathers of the United States.',1,100,1);
I[15][3][1]=new Array('English Common Law considers the accused guilty until proven innocent.','Sorry.  While this is the case in European Civil Code, it is not the case for English Common Law.',0,0,1);
I[15][3][2]=new Array('European Civil Code considers the accused innocent until proven guilty.','Sorry.  Quite the opposite is true.  The accused is considered guilty and must prove their own innocence.',0,0,1);
I[15][3][3]=new Array('European Civil Code evolved from the Magna Carta while English Common Law evolved from Justinian I\'s Roman Law.','Nope.  They both evolved from Justinian I\'s Roman Law and it was English Common Law, not European Civil Code, that evolved as a result of the Magna Carta.',0,0,1);
I[15][3][4]=new Array('European Civil Code evolved from Napoleon\'s Civil Code while English Common Law evolved from Hammurabi\'s Code.','Nope.  They both evolved from King Hammurabi I\'s code.',0,0,1);
I[16]=new Array();I[16][0]=100;
I[16][1]='';
I[16][2]='0';
I[16][3]=new Array();
I[16][3][0]=new Array('Cruel and unusual punishments prohibited','Right.  This is not an article under Navy Regulations but rather an article, Article 55, of the Uniform Code of Military Justice.',1,100,1);
I[16][3][1]=new Array('Fraternization prohibited','Sorry.  This is article 1165 which states that personal relationships between officers and enlisted members that are unduly familiar and that do not respect differences in grade or rank are prohibited.',0,0,1);
I[16][3][2]=new Array('Equal opportunity and treatment','Sorry.  This is article 1164 which states that equal opportunity shall be afforded to all on the basis of individual effort, performance, conduct, diligence, potential, capabilities and talents without discrimination as to race, color, religion, creed, sex or national origin.',0,0,1);
I[16][3][3]=new Array('Standards of conduct','Nope.  This is article 1110 which states that all Department of the Navy personnel are expected to conduct themselves in accordance with the highest standards of personal and professional integrity and ethics.',0,0,1);
I[16][3][4]=new Array('Alcoholic beverages prohibited ','Nope.  This is article 1162 which states that except as may be authorized by the Secretary of the navy, the introduction, possession or use of alcoholic beverages on board any ship, craft, aircraft, or in any vehicle of the Department of the Navy is prohibited.',0,0,1);
I[17]=new Array();I[17][0]=100;
I[17][1]='';
I[17][2]='0';
I[17][3]=new Array();
I[17][3][0]=new Array('Emperor Justinian I','Correct.  Justinian I developed this body of law between 527 and 565 AD.',1,100,1);
I[17][3][1]=new Array('Emperor Napoleon I','Sorry.  Napoleon I of France refined this Roman Civil Law and turned it into Napoleon\'s Civil Code.',0,0,1);
I[17][3][2]=new Array('King Hammurabi','Nope.  King Hammurabi\'s Code, estimated to have been written down in 1700 BC,  is the earliest discovered Civil Law Code.',0,0,1);
I[17][3][3]=new Array('King John I','Nope.  King John I\'s major contribution to the evolution of basic civil law came when he signed the Magna Carta, which limited the king&#x2019;s power and guaranteed certain basic rights.',0,0,1);
I[17][3][4]=new Array('Emperor Augustus Caesar','Nope.  Augustus Caesar did not make a major contribution to the evolution of basic civil law.',0,0,1);


function StartUp(){
	RemoveBottomNavBarForIE();

//If there's only one question, no need for question navigation controls
	if (QsToShow < 2){
		document.getElementById('QNav').style.display = 'none';
	}
	

	

	
	CompleteEmptyFeedback();

	SetUpQuestions();
	ClearTextBoxes();
	CreateStatusArray();
	

	
//Check search string for q parameter
	if (document.location.search.length > 0){
		if (ShuffleQs == false){
			var JumpTo = parseInt(document.location.search.substring(1,document.location.search.length))-1;
			if (JumpTo <= QsToShow){
				ChangeQ(JumpTo);
			}
		}
	}
}

function ShowHideQuestions(){
	FuncBtnOut(document.getElementById('ShowMethodButton'));
	document.getElementById('ShowMethodButton').style.display = 'none';
	if (ShowingAllQuestions == false){
		for (var i=0; i<QArray.length; i++){
				QArray[i].style.display = '';
			}
		document.getElementById('Questions').style.listStyleType = 'decimal';
		document.getElementById('OneByOneReadout').style.display = 'none';
		document.getElementById('ShowMethodButton').innerHTML = ShowOneByOneCaption;
		ShowingAllQuestions = true;
	}
	else{
		for (var i=0; i<QArray.length; i++){
				if (i != CurrQNum){
					QArray[i].style.display = 'none';
				}
			}
		document.getElementById('Questions').style.listStyleType = 'none';
		document.getElementById('OneByOneReadout').style.display = '';
		document.getElementById('ShowMethodButton').innerHTML = ShowAllQuestionsCaption;
		ShowingAllQuestions = false;	
	}
	document.getElementById('ShowMethodButton').style.display = 'inline';
}

function CreateStatusArray(){
	var QNum, ANum;
//For each item in the item array
	for (QNum=0; QNum<I.length; QNum++){
//Check if the question still exists (hasn't been nuked by showing a random selection)
		if (document.getElementById('Q_' + QNum) != null){
			State[QNum] = new Array();
			State[QNum][0] = -1; //Score for this q; -1 shows question not done yet
			State[QNum][1] = new Array(); //answers
			for (ANum = 0; ANum<I[QNum][3].length; ANum++){
				State[QNum][1][ANum] = 0; //answer not chosen yet; when chosen, will store its position in the series of choices
			}
			State[QNum][2] = 0; //tries at this q so far
			State[QNum][3] = 0; //incrementing percent-correct values of selected answers
			State[QNum][4] = 0; //penalties incurred for hints
			State[QNum][5] = ''; //Sequence of answers chosen by number
		}
		else{
			State[QNum] = null;
		}
	}
}



function CheckMCAnswer(QNum, ANum, Btn){
//if question doesn't exist, bail
	if (State[QNum].length < 1){return;}
	
//Get the feedback
	Feedback = I[QNum][3][ANum][1];
	
//Now show feedback and bail if question already complete
	if (State[QNum][0] > -1){
//Add an extra message explaining that the question
// is finished if defined by the user
		if (strQuestionFinished.length > 0){Feedback += '<br />' + strQuestionFinished;}
//Show the feedback
		ShowMessage(Feedback);
		return;
	}
	
//Hide the button while processing
	Btn.style.display = 'none';

//Increment the number of tries
	State[QNum][2]++;
	
//Add the percent-correct value of this answer
	State[QNum][3] += I[QNum][3][ANum][3];
	
//Store the try number in the answer part of the State array, for tracking purposes
	State[QNum][1][ANum] = State[QNum][2];
	State[QNum][5] += String.fromCharCode(65+ANum) + ',';
	
//Should this answer be accepted as correct?
	if (I[QNum][3][ANum][2] < 1){
//It's wrong

//Mark the answer
		Btn.innerHTML = IncorrectIndicator;
		
//Check whether this leaves just one MC answer unselected, in which case the Q is terminated
		var RemainingAnswer = FinalAnswer(QNum);
		if (RemainingAnswer > -1){
//Behave as if the last answer had been selected, but give no credit for it
//Increment the number of tries
			State[QNum][2]++;		
		
//Calculate the score for this question
			CalculateMCQuestionScore(QNum);

//Get the overall score and add it to the feedback
			CalculateOverallScore();
			if ((ContinuousScoring == true)||(Finished == true)){
				Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
				WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
			}
		}
	}
	else{
//It's right
//Mark the answer
		Btn.innerHTML = CorrectIndicator;
				
//Calculate the score for this question
		CalculateMCQuestionScore(QNum);

//Get the overall score and add it to the feedback
		if (ContinuousScoring == true){
			CalculateOverallScore();
			if ((ContinuousScoring == true)||(Finished == true)){
				Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
				WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
			}
		}
	}
	
//Show the button again
	Btn.style.display = 'inline';
	
//Finally, show the feedback	
	ShowMessage(Feedback);
	
//Check whether all questions are now done
	CheckFinished();
}

function CalculateMCQuestionScore(QNum){
	var Tries = State[QNum][2] + State[QNum][4]; //include tries and hint penalties
	var PercentCorrect = State[QNum][3];
	var TotAns = GetTotalMCAnswers(QNum);
	var HintPenalties = State[QNum][4];
	
//Make sure it's not already complete

	if (State[QNum][0] < 0){
//Allow for Hybrids
		if (HintPenalties >= 1){
			State[QNum][0] = 0;
		}
		else{
			State[QNum][0] = ((TotAns-(Tries-1))/TotAns)*(PercentCorrect/(100*Tries));
		}
		if (State[QNum][0] < 0){
			State[QNum][0] = 0;
		}
	}
}

function GetTotalMCAnswers(QNum){
	var Result = 0;
	for (var ANum=0; ANum<I[QNum][3].length; ANum++){
		if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
			Result++;
		}
	}
	return Result;
}

function FinalAnswer(QNum){
	var UnchosenAnswers = 0;
	var FinalAnswer = -1;
	for (var ANum=0; ANum<I[QNum][3].length; ANum++){
		if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
			if (State[QNum][1][ANum] < 1){ //This answer hasn't been chosen yet
				UnchosenAnswers++;
				FinalAnswer = ANum;
			}
		}
	}
	if (UnchosenAnswers == 1){
		return FinalAnswer;
	}
	else{
		return -1;
	}
}





function CheckMultiSelAnswer(QNum){
//bail if question doesn't exist or exercise finished
	if ((State[QNum].length < 1)||(Finished == true)){return;}

//Increment the tries for this question
	State[QNum][2]++;
	
	var ShouldBeChecked;
	var Matches = 0;
	State[QNum][5] += '|';
	
//Check if there are any mismatches
	Feedback = '';
	var CheckBox = null;
	for (var ANum=0; ANum<I[QNum][3].length; ANum++){
		CheckBox = document.getElementById('Q_' + QNum + '_' + ANum + '_Chk');
		if (CheckBox.checked == true){
			State[QNum][5] += 'Y';
		}
		else{
			State[QNum][5] += 'N';
		}
		ShouldBeChecked = (I[QNum][3][ANum][2] == 1);
		if (ShouldBeChecked == CheckBox.checked){
			Matches++;
		}
		else{
			Feedback = I[QNum][3][ANum][1];
		}
	}
//Add the hit readout
	Feedback = Matches + ' / ' + I[QNum][3].length + '<br />' + Feedback;
	if (Matches == I[QNum][3].length){
//It's right
		CalculateMultiSelQuestionScore(QNum);
		if (ContinuousScoring == true){
			CalculateOverallScore();
			if ((ContinuousScoring == true)||(Finished == true)){
				Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
				WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
			}
		}
	}
//If it's wrong, no need to do anything but show the feedback
	ShowMessage(Feedback);
	
//Check whether all questions are now done
	CheckFinished();
}

function CalculateMultiSelQuestionScore(QNum){
	var Tries = State[QNum][2];
	var TotAns = State[QNum][1].length;
	
//Make sure it's not already complete
	if (State[QNum][0] < 0){
		State[QNum][0] = (TotAns - (Tries-1)) / TotAns;
		if (State[QNum][0] < 0){
			State[QNum][0] = 0;
		}
	}
}



function CalculateOverallScore(){
	var TotalWeighting = 0;
	var TotalScore = 0;
	
	for (var QNum=0; QNum<State.length; QNum++){
		if (State[QNum] != null){
			if (State[QNum][0] > -1){
				TotalWeighting += I[QNum][0];
				TotalScore += (I[QNum][0] * State[QNum][0]);
			}
		}
	}
	Score = Math.floor((TotalScore/TotalWeighting)*100);
}

function CheckFinished(){
	var FB = '';
	var AllDone = true;
	for (var QNum=0; QNum<State.length; QNum++){
		if (State[QNum] != null){
			if (State[QNum][0] < 0){
				AllDone = false;
			}
		}
	}
	if (AllDone == true){
	
//Report final score and submit if necessary
		CalculateOverallScore();
		FB = YourScoreIs + ' ' + Score + '%.';
		if (ShowCorrectFirstTime == true){
			var CFT = 0;
			for (QNum=0; QNum<State.length; QNum++){
				if (State[QNum] != null){
					if (State[QNum][0] >= 1){
						CFT++;
					}
				}
			}
			FB += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow;
		}
		WriteToInstructions(FB);
		
		Finished == true;

		TimeOver = true;
		Locked = true;
		


		Finished = true;
		Detail = '<?xml version="1.0"?><hpnetresult><fields>';
		for (QNum=0; QNum<State.length; QNum++){
			if (State[QNum] != null){
				if (State[QNum][5].length > 0){
					Detail += '<field><fieldname>Question #' + (QNum+1) + '</fieldname><fieldtype>question-tracking</fieldtype><fieldlabel>Q ' + (QNum+1) + '</fieldlabel><fieldlabelid>QuestionTrackingField</fieldlabelid><fielddata>' + State[QNum][5] + '</fielddata></field>';
				}
			}
		}
		Detail += '</fields></hpnetresult>';
		setTimeout('Finish()', SubmissionTimeout);
	}
}










//-->

//]]>


