From: <Saved by Microsoft Internet Explorer 5>
Subject: 
Date: Mon, 13 Aug 2007 15:41:25 -0400
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_001A_01C7DDC0.682EB7E0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138

This is a multi-part message in MIME format.

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dhs.gov/xlibrary/assets/training/cvi/M/css/common_hacks.css

.clearfix:unknown {
	CLEAR: both; DISPLAY: block; VISIBILITY: hidden; HEIGHT: 0px; content: =
"."
}
HTML .clearfix {
	HEIGHT: 1%
}

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:pcii/common_layout.css

UNKNOWN {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
BODY {
	OVERFLOW-X: hidden
}
HTML {
	OVERFLOW-X: hidden
}
H1 {
	LEFT: 450px; POSITION: absolute; TOP: 84px
}
H2 {
	LEFT: 15px; PADDING-BOTTOM: 10px; POSITION: absolute; TOP: 150px
}
H3 {
	LEFT: 30px; PADDING-BOTTOM: 10px; POSITION: absolute; TOP: 175px
}
P {
	MARGIN-BOTTOM: 10px
}
UL {
	MARGIN-BOTTOM: 10px
}
LI {
	MARGIN-BOTTOM: 10px
}
#content {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; LEFT: 0px; PADDING-BOTTOM: =
10px; WIDTH: 95%; PADDING-TOP: 0px; POSITION: absolute; TOP: 210px
}
#content IMG {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 5px =
10px 10px; PADDING-TOP: 3px
}
#content IMG.borderless {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#nav {
	RIGHT: 0px; WIDTH: 195px; POSITION: absolute; TOP: 103px; HEIGHT: 25px
}
#nav P {
	DISPLAY: inline
}
#pagecount {
	RIGHT: 40px; WIDTH: 140px; POSITION: absolute; TOP: 150px; TEXT-ALIGN: =
center
}
.prev A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; RIGHT: 118px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 64px; =
PADDING-TOP: 25px; POSITION: absolute; TOP: 0px; HEIGHT: 0px
}
.next A {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; RIGHT: 38px; =
PADDING-BOTTOM: 0px; MARGIN: 0px; OVERFLOW: hidden; WIDTH: 55px; =
PADDING-TOP: 25px; POSITION: absolute; TOP: 0px; HEIGHT: 0px
}
#subnav UL {
	LIST-STYLE-TYPE: none
}
#glossary {
	LEFT: 10px; POSITION: absolute; TOP: 108px
}
#resources {
	LEFT: 135px; POSITION: absolute; TOP: 108px
}
#help {
	LEFT: 270px; POSITION: absolute; TOP: 108px
}
#exit {
	RIGHT: 15px; POSITION: absolute; TOP: 0px
}
.popup_standard #close {
	RIGHT: 0px; WIDTH: 255px; PADDING-TOP: 14px; POSITION: absolute; TOP: =
0px; HEIGHT: 37px
}
.popup_standard #close A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0px; =
MARGIN-LEFT: 180px; PADDING-TOP: 0px
}
.popup_sim #content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; LEFT: 0px; PADDING-BOTTOM: 0px; =
MARGIN: 0px; PADDING-TOP: 0px; POSITION: absolute; TOP: 0px
}
.popup_sim #simulation {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#kc-feedback {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 20px; MARGIN: =
0px 10px; PADDING-TOP: 20px
}
.floatbox {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px =
10px; WIDTH: 230px; PADDING-TOP: 3px
}
.floatbox H3 {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: =
0px; PADDING-TOP: 5px
}
.floatbox P {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
0px; PADDING-TOP: 10px
}
.float-left {
	FLOAT: left
}
.float-right {
	FLOAT: right
}
.hidden {
	DISPLAY: none
}
.iconbox {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; MIN-HEIGHT: 150px; =
PADDING-BOTTOM: 15px; MARGIN: 0px auto; WIDTH: 90%; PADDING-TOP: 15px
}
.iconbox P {
	MARGIN: 0px 0px 0px 85px; VERTICAL-ALIGN: top
}
.iconbox H4 {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px; VERTICAL-ALIGN: top; WIDTH: 70px; PADDING-TOP: 65px
}
.tab-jobaid A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 40px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.tab-jobaid A SPAN {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 5px; FLOAT: left; =
PADDING-BOTTOM: 9px; PADDING-TOP: 5px
}
.button A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 0px 15px; PADDING-TOP: 0px
}
.button A SPAN {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 5px; FLOAT: left; =
PADDING-BOTTOM: 9px; PADDING-TOP: 7px
}
.btn-check A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 30px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.btn-schedule A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 30px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.btn-closewindow A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 30px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 15px 0px 0px 175px; PADDING-TOP: 0px
}
.btn-dialog A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 30px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.button2 A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 10px; FLOAT: left; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 0px 15px; PADDING-TOP: 0px
}
.button2 A SPAN {
	PADDING-RIGHT: 15px; DISPLAY: block; PADDING-LEFT: 5px; FLOAT: left; =
PADDING-BOTTOM: 11px; PADDING-TOP: 10px
}
.btn-showme A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 35px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.btn-letmetry A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 35px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.btn-printsteps A {
	PADDING-RIGHT: 0px; PADDING-LEFT: 35px; FLOAT: left; PADDING-BOTTOM: =
0px; PADDING-TOP: 0px
}
.kc-container {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
10px 25px; WIDTH: 90%; PADDING-TOP: 10px
}
.kc-question {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; MARGIN: =
0px; PADDING-TOP: 10px
}
.kc-answers {
	MARGIN: 0px 0px 0px 20px
}
.kc-answers P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 17px; PADDING-BOTTOM: 7px; MARGIN: =
0px; PADDING-TOP: 7px
}
.kc-answers A SPAN {
	PADDING-RIGHT: 9px; PADDING-LEFT: 9px; PADDING-BOTTOM: 5px; MARGIN: 0px =
5px 0px 0px; PADDING-TOP: 5px
}
.kc-container TABLE {
	MARGIN: 15px 20px 20px
}
.kc-answers TH {
	HEIGHT: 25px
}
.kc-answers TD {
	HEIGHT: 35px
}
.kc-answers OPTION {
	WIDTH: 20px
}
.kc-container IMG {
	FLOAT: right
}
.kc-bottomspacer {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
#kc-buttons {
	MARGIN-LEFT: 30px
}
#kc-buttons IMG {
	FLOAT: left
}
#kc-feedback {
	CLEAR: left; PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; =
PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 35px; PADDING-TOP: 0px
}
.prompt {
	PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: =
15px 25px; PADDING-TOP: 10px
}
.halfscreen {
	WIDTH: 330px
}
#dialogOptions {
	MARGIN-LEFT: 10px
}
#dialogOptions P {
	DISPLAY: inline
}
.dialog {
	PADDING-RIGHT: 10px; PADDING-LEFT: 50px; PADDING-BOTTOM: 3px; MARGIN: =
10px 40px; PADDING-TOP: 3px
}
.dialog .dialogname {
	DISPLAY: block
}
.imageAndDef {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: =
10px 40px 15px; PADDING-TOP: 5px
}
.imageAndDef IMG {
	FLOAT: left
}
.imageAndDef P {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; MARGIN: =
0px; PADDING-TOP: 0px
}
.imageAndDef .iconname {
	PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 0px; PADDING-BOTTOM: =
3px; PADDING-TOP: 3px
}
.getflash A {
	PADDING-RIGHT: 4px; PADDING-LEFT: 20px; PADDING-BOTTOM: 2px; =
PADDING-TOP: 2px
}
.interactive {
	PADDING-RIGHT: 30px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 30px
}
#content .thumbnail IMG {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FLOAT: right; PADDING-BOTTOM: =
0px; MARGIN: 0px 0px 4px 10px; PADDING-TOP: 0px
}
#content .thumbnail P {
	CLEAR: right; PADDING-RIGHT: 35px; PADDING-LEFT: 0px; FLOAT: right; =
PADDING-BOTTOM: 7px; PADDING-TOP: 7px
}
FORM#moveit {
	LEFT: -100px; POSITION: absolute; TOP: -100px
}
.footnote {
	MARGIN-TOP: 20px
}
#content UL {
	MARGIN-LEFT: 25px; LIST-STYLE-TYPE: none
}
#content UL LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 12px; PADDING-BOTTOM: 0px; MARGIN: =
5px 0px; PADDING-TOP: 0px
}
.tbl-layout {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 0px =
auto; PADDING-TOP: 3px
}
.tbl-layout TD {
	VERTICAL-ALIGN: top
}
.tbl-blueborder {
	PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 15px; MARGIN: =
0px auto; PADDING-TOP: 15px
}
.datatable {
	BORDER-COLLAPSE: collapse
}
.datatable TH {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.datatable TD {
	PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.simbox {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: =
10px auto; WIDTH: 630px; PADDING-TOP: 5px
}
.simbox IMG {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: =
0px; PADDING-TOP: 0px
}
.simbox H4 {
	MARGIN: 5px 0px 5px 10px
}
.popup H3 {
	LEFT: 15px; POSITION: absolute; TOP: 90px
}
.popup #content {
	LEFT: 15px; POSITION: absolute; TOP: 120px
}
.popup #close {
	LEFT: 740px; POSITION: absolute; TOP: 2px
}
.popup #closeprompt {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 10px; =
PADDING-TOP: 10px
}
.cert_catagory {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; =
PADDING-TOP: 5px
}
.cert_catagory LABEL {
	MARGIN-LEFT: 5px
}
.cert_catagory INPUT {
	MARGIN-RIGHT: 5px
}
P.access {
	DISPLAY: none
}
#dlink {
	RIGHT: 0px; BOTTOM: 0px; POSITION: absolute
}
#pageID {
	CLEAR: both; RIGHT: 20px; POSITION: absolute; TOP: 40px
}
.clearboth {
	CLEAR: both
}
.center {
	MARGIN-LEFT: auto; MARGIN-RIGHT: auto
}

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:pcii/common_skin.css

BODY {
	BACKGROUND: url(skin/body.jpg) #ffffff no-repeat left top
}
A IMG {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
A:hover SPAN {
	CURSOR: hand
}
H1 {
	COLOR: #ffffff
}
H2 {
	COLOR: #174790
}
H3 {
	COLOR: #174790
}
#nav {
	BACKGROUND: url(skin/nav.jpg) no-repeat left top
}
#nav A {
	COLOR: #ffffff
}
#nav P {
	COLOR: #ffffff
}
#pagecount {
	COLOR: #174790
}
.prev A {
	BACKGROUND: url(skin/nav-prev.jpg) no-repeat left top
}
.prev A:hover {
	BACKGROUND: url(skin/nav-prev-over.jpg) no-repeat left top
}
.next A {
	BACKGROUND: url(skin/nav-next.jpg) no-repeat left top
}
.next A:hover {
	BACKGROUND: url(skin/nav-next-over.jpg) no-repeat left top
}
#subnav A {
	COLOR: #000000
}
#subnav A:hover {
	COLOR: #990033
}
#exit A {
	COLOR: #ffffff
}
#kc-feedback {
	DISPLAY: none
}
.button A {
	BACKGROUND: url(skin/btn_bg.gif) no-repeat left bottom; COLOR: #ffffff
}
.button A SPAN {
	BACKGROUND: url(skin/btn-span_bg.gif) no-repeat right bottom; COLOR: =
#ffffff
}
.button A:hover SPAN {
	BACKGROUND: url(skin/btn-span_bg.gif) no-repeat right bottom; CURSOR: =
hand; COLOR: #ffcc00
}
.btn-check A {
	BACKGROUND: url(skin/btn-check.gif) no-repeat left bottom
}
.btn-schedule A {
	BACKGROUND: url(skin/btn-schedule.gif) no-repeat left bottom
}
.btn-closewindow A {
	BACKGROUND: url(skin/btn-closewindow.gif) no-repeat left bottom
}
.btn-dialog A {
	BACKGROUND: url(skin/btn-dialog.gif) no-repeat left bottom
}
.button2 A {
	BACKGROUND: url(skin/btn_bg.gif) no-repeat left bottom; COLOR: #ffffff
}
.button2 A SPAN {
	BACKGROUND: url(skin/btn2-span_bg.gif) no-repeat right bottom; COLOR: =
#ffffff
}
.button2 A:hover SPAN {
	BACKGROUND: url(skin/btn2-span_bg.gif) no-repeat right bottom; COLOR: =
#ffcc00
}
.btn-showme A {
	BACKGROUND: url(skin/btn-showme.gif) no-repeat left bottom
}
.btn-letmetry A {
	BACKGROUND: url(skin/btn-letmetry.gif) no-repeat left bottom
}
.btn-printsteps A {
	BACKGROUND: url(skin/btn-printsteps.gif) no-repeat left bottom
}
.iconbox {
	BORDER-RIGHT: #ffcf3f 1px solid; BORDER-TOP: #ffcf3f 1px solid; =
BACKGROUND: #ffff8b; BORDER-LEFT: #ffcf3f 1px solid; BORDER-BOTTOM: =
#ffcf3f 1px solid
}
.helpfulhint {
	BACKGROUND: url(skin/icon-helpful.gif) no-repeat center top
}
.remember {
	BACKGROUND: url(skin/icon-remember.gif) no-repeat center top
}
.mistakes {
	BACKGROUND: url(skin/icon-mistakes.gif) no-repeat center top
}
.kc-container {
	BORDER-RIGHT: #cccccc 2px solid; BORDER-TOP: #cccccc 2px solid; =
BACKGROUND: #eeeeee; BORDER-LEFT: #cccccc 2px solid; BORDER-BOTTOM: =
#cccccc 2px solid
}
.kc-answers TH {
	BORDER-BOTTOM: #cccccc 2px solid
}
.kc-answers A {
	COLOR: #174790
}
.kc-answers P {
	COLOR: #174790
}
.prompt {
	BORDER-RIGHT: #5ebb4d 1px solid; BORDER-TOP: #5ebb4d 1px solid; =
BACKGROUND: url(skin/prompt_bg.gif) #d4efc9 repeat-x 50% top; =
BORDER-LEFT: #5ebb4d 1px solid; BORDER-BOTTOM: #5ebb4d 1px solid
}
.dialog {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; =
BACKGROUND: url(skin/dialog.gif) #e2e2e2 no-repeat 5px 5px; BORDER-LEFT: =
#999999 1px solid; BORDER-BOTTOM: #999999 1px solid
}
.imageAndDef {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; =
BACKGROUND: #e4e4e4; BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: =
#cccccc 1px solid
}
.getflash A {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
BACKGROUND: url(skin/getflash.gif) #f2f2f2 no-repeat 3px center; =
BORDER-LEFT: #666666 1px solid; COLOR: #666666; BORDER-BOTTOM: #666666 =
1px solid
}
.getflash A:hover {
	BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; =
BACKGROUND: url(skin/getflash.gif) #f2f2f2 no-repeat 3px center; =
BORDER-LEFT: #666666 1px solid; COLOR: #ff0000; BORDER-BOTTOM: #666666 =
1px solid
}
.interactive {
	BACKGROUND: url(skin/interactive.gif) no-repeat right bottom
}
.thumbnail IMG {
	BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; =
BORDER-LEFT: #999999 1px solid; BORDER-BOTTOM: #999999 1px solid
}
.thumbnail P {
	BACKGROUND: url(skin/interactive.gif) no-repeat right bottom; COLOR: =
#166ba2
}
.verticalbar {
	BORDER-RIGHT: #ffcf3f 2px solid; BORDER-TOP: #ffcf3f 2px solid; =
BACKGROUND: #ffff8b; BORDER-LEFT: #ffcf3f 2px solid; BORDER-BOTTOM: =
#ffcf3f 2px solid
}
.verticalbar H3 {
	BACKGROUND: #ffcf3f
}
#content UL LI {
	BACKGROUND: url(skin/bullet_01.gif) no-repeat 0px 7px
}
#content UL LI UL LI {
	BACKGROUND: url(skin/bullet_02.gif) no-repeat 0px 7px
}
.tbl-blueborder {
	BACKGROUND: #b6c4e2
}
.tbl-blueborder TD {
	BORDER-RIGHT: #194991 5px solid; BORDER-TOP: #194991 5px solid; =
BORDER-LEFT: #194991 5px solid; BORDER-BOTTOM: #194991 5px solid
}
.datatable {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid
}
.datatable TH {
	BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid
}
.datatable TD {
	BORDER-TOP: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid
}
.simbox H4 {
	COLOR: #194990
}
.simbox {
	BORDER-RIGHT: #cccccc 2px solid; BORDER-TOP: #cccccc 2px solid; =
BACKGROUND: #eeeeee; BORDER-LEFT: #cccccc 2px solid; BORDER-BOTTOM: =
#cccccc 2px solid
}
#content .video A IMG {
	BORDER-RIGHT: #cccccc 1px solid; BORDER-TOP: #cccccc 1px solid; =
BORDER-LEFT: #cccccc 1px solid; BORDER-BOTTOM: #cccccc 1px solid
}
#content .video .active A IMG {
	BORDER-RIGHT: #006699 2px solid; BORDER-TOP: #006699 2px solid; =
BORDER-LEFT: #006699 2px solid; BORDER-BOTTOM: #006699 2px solid
}
#content .video A {
	COLOR: #333333
}
#content .video .active A {
	COLOR: #006699
}
BODY.popup {
	BACKGROUND: url(skin/body_popup.jpg) no-repeat left top
}
.popup #close A {
	COLOR: #ffffff
}
.imageAndDef .imageheader {
	BORDER-RIGHT: red 1px solid; BORDER-TOP: red 1px solid; BORDER-LEFT: =
red 1px solid; BORDER-BOTTOM: red 1px solid
}
#dlink A {
	COLOR: #ffffff
}

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:pcii/common_typo.css

BODY {
	FONT: 0.9em/140% Arial, Helvetica, sans-serif
}
H1 {
	FONT: bold 0.9em Geneva, Arial, Helvetica, sans-serif; TEXT-TRANSFORM: =
uppercase
}
H2 {
	FONT-SIZE: 1.3em
}
H2.large {
	FONT-SIZE: 1.7em
}
H3.large {
	FONT-SIZE: 1.5em
}
#kc-feedback {
	FONT: bold 1em Arial, Helvetica, sans-serif
}
.button A {
	FONT: bold 1em Geneva, Arial, Helvetica, sans-serif; TEXT-DECORATION: =
none
}
.button2 A {
	FONT: bold 1em Geneva, Arial, Helvetica, sans-serif; TEXT-DECORATION: =
none
}
.iconbox H4 {
	FONT: bold 0.8em/100% Geneva, Arial, Helvetica, sans-serif; TEXT-ALIGN: =
center
}
.kc-container A {
	TEXT-DECORATION: none
}
.kc-answers TH {
	TEXT-ALIGN: left
}
.kc-answers TD {
	TEXT-ALIGN: left
}
.kc-question {
	FONT: 1em Arial, Helvetica, sans-serif
}
.getflash A {
	FONT: 0.8em Geneva, Arial, Helvetica, sans-serif; TEXT-DECORATION: none
}
.getflash A:hover {
	TEXT-DECORATION: underline
}
.dialog .dialogname {
	FONT: bold 0.85em Verdana, Arial, Helvetica, sans-serif
}
.imageAndDef .iconname {
	FONT: bold 1em Arial, Helvetica, sans-serif
}
#content .thumbnail P {
	FONT: bold 0.9em Arial, Helvetica, sans-serif; TEXT-TRANSFORM: =
uppercase
}
.footnote {
	FONT-SIZE: 0.85em
}
#nav A {
	FONT-WEIGHT: normal; TEXT-DECORATION: none
}
#pagecount {
	FONT: bold 1em Arial, Helvetica, sans-serif
}
#subnav A {
	FONT: bold 0.7em Arial, Helvetica, sans-serif; TEXT-TRANSFORM: =
uppercase; TEXT-DECORATION: none
}
TABLE TD {
	TEXT-ALIGN: left
}
.simbox H4 {
	FONT: bold 1.3em Georgia, "Times New Roman", Times, serif
}
.popup #close A {
	FONT: bold 1em Arial, Helvetica, sans-serif; TEXT-DECORATION: none
}
.video A {
	FONT: 0.8em Arial, Helvetica, sans-serif
}
.video .active A {
	FONT: bold 0.8em Arial, Helvetica, sans-serif; TEXT-DECORATION: none
}

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Location: http://www.dhs.gov/xlibrary/assets/training/cvi/M/css/common_styles.css

@import url( pcii/common_layout.css );
@import url( pcii/common_skin.css );
@import url( pcii/common_typo.css );

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dhs.gov/xlibrary/assets/training/cvi/M/js/common.js

var newWin;

function openPopupWindow(theURL, height, width) {
	if (height =3D=3D undefined && width =3D=3D undefined){=20
		var newWind =3D =
eval("window.open('"+theURL+"','popupwin','width=3D810,height=3D600,scrol=
lbars=3Dyes,resizable=3Dyes')")}
	else {
		var newWind =3D =
eval("window.open('"+theURL+"','popupwin','width=3D"+width+",height=3D"+h=
eight+",scrollbars=3Dyes,resizable=3Dyes')")}
	if (!newWind) {
		alert('Sorry, unable to open window at this time.')
		return;}
	if (!newWind.opener || newWind.opener =3D=3D null) newWind.opener =3D =
window;   =20
	if (newWind) newWind.focus();
}

function populatePageID(data){
	var m =3D data.match(/[^\/\\]+\.\w+.$/);
	var fullfilename =3D m[0];
	var outputHTML =3D "Page ID: " + fullfilename;
	return outputHTML;
}

function goHere(whereto,pagenum,topicid) {
	//alert (document.moveit.moveon.value);
	if (document.moveit.moveon.value=3D=3D1) {
		window.location =3D whereto;
		//if (parent.bottomFrame){
			=
//parent.bottomFrame.location=3D'../../../QA/QAStuff.asp?html=3D1&pageNum=
=3D'+pagenum+'&topicid=3D'+topicid;
		//}
	} else {
		alert('Please answer the question.');
	}
}

 function MM_controlShockwave(objStr,x,cmdName,frameNum) { //v3.0
  var obj=3DMM_findObj(objStr);
  if (obj) =
eval('obj.'+cmdName+'('+((cmdName=3D=3D'GotoFrame')?frameNum:'')+')');
}

function preloadImages() {
	nav_back_over=3D new Image; =
nav_back_over.src=3D"css/skin/nav_back_over.gif";=20
	nav_next_over=3D new Image; =
nav_next_over.src=3D"css/skin/nav_back_over.gif";=20
	nav_glossary_over=3D new Image; =
nav_glossary_over.src=3D"css/skin/nav_glossary_over.gif";=20
	nav_menu_over=3D new Image; =
nav_menu_over.src=3D"css/skin/nav_menu_over.gif";=20
	nav_help_over=3D new Image; =
nav_help_over.src=3D"css/skin/nav_help_over.gif"; =09
}

/*----------------------------------------------------------*/

function MM_swapImgRestore() { //v3.0
  var i,x,a=3Ddocument.MM_sr; =
for(i=3D0;a&&i<a.length&&(x=3Da[i])&&x.oSrc;i++) x.src=3Dx.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=3Ddocument; if(d.M/images){ if(!d.MM_p) d.MM_p=3Dnew Array();
    var i,j=3Dd.MM_p.length,a=3DMM_preloadImages.arguments; for(i=3D0; =
i<a.length; i++)
    if (a[i].indexOf("#")!=3D0){ d.MM_p[j]=3Dnew Image; =
d.MM_p[j++].src=3Da[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=3Ddocument; =
if((p=3Dn.indexOf("?"))>0&&parent.frames.length) {
    d=3Dparent.frames[n.substring(p+1)].document; n=3Dn.substring(0,p);}
  if(!(x=3Dd[n])&&d.all) x=3Dd.all[n]; for =
(i=3D0;!x&&i<d.forms.length;i++) x=3Dd.forms[i][n];
  for(i=3D0;!x&&d.layers&&i<d.layers.length;i++) =
x=3DMM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=3Dd.getElementById(n); return x;
}
function MM_setTextOfLayer(objName,x,newText) { //v4.01
  if ((obj=3DMM_findObj(objName))!=3Dnull) with (obj)
    if (document.layers) {document.write(unescape(newText)); =
document.close();}
    else innerHTML =3D unescape(newText);
}

function MM_swapImage() { //v3.0
  var i,j=3D0,x,a=3DMM_swapImage.arguments; document.MM_sr=3Dnew Array; =
for(i=3D0;i<(a.length-2);i+=3D3)
   if ((x=3DMM_findObj(a[i]))!=3Dnull){document.MM_sr[j++]=3Dx; =
if(!x.oSrc) x.oSrc=3Dx.src; x.src=3Da[i+2];}
}

function resetTopic(lsn,topic){
//alert('resetTopic');
	if (parent.expand =3D=3D topic){
		parent.expand =3D -1;
	}else{
		parent.expand =3D topic;
	}
	parent.expandlsn =3D lsn;
	parent.Content.location =3D 'menupage.htm';
}
function resetLsn(lsn,topic){
	parent.expand =3D topic;
	if (parent.expandlsn =3D=3D lsn){
		parent.expandlsn =3D -1;
	}else{
		parent.expandlsn =3D lsn;
	}
	parent.Content.location =3D 'menupage.htm';
}
function gothere(lsn,top,subtop){
	parent.expand =3D top;
	parent.expandlsn =3D lsn;
//	alert('gothere expand: ' + parent.expand);
	parent.currentSubTopic =3D subtop;
	parent.currentTopic =3D top;
	parent.currentLsn =3D lsn;
//	alert(parent.progress[lsn][top][subtop][2]);
	parent.Content.location =3D parent.progress[lsn][top][subtop][2];
}
function resizeto(w,h) {
	if (parseInt(navigator.appVersion)>3) {=20
		if (navigator.appName=3D=3D"Netscape") {=20
			top.outerWidth=3Dw;=20
			top.outerHeight=3Dh;
		} else {
			top.resizeTo(w,h);=20
		}
	}=20
}

function runMenu(){ //page level links
	var menuText;
	menuText =3D '';
	menuText =3D menuText + '<table width=3D"500" border=3D"0" =
cellpadding=3D"2" cellspacing=3D"0">';
	for (i=3D0;i<parent.progress.length;i++){ //lessons
		//alert(progress[i][0][0]);
		menuText =3D menuText + ' <tr>';
	=09
		// set icon based on status of topic
		if (parent.progress[i][0][0][1] =3D=3D 1) {
			img =3D "images/menu_complete.jpg";
			status =3D "Completed";
		}else if (parent.progress[i][0][0][1] =3D=3D 2){
			img =3D "images/menu_incomplete.jpg";
			status =3D "In progress";
		}else{
			img =3D "images/menu_up.jpg";
			status =3D "Not started";
		}=09

//		menuText =3D menuText + '  <tr>';
//		menuText =3D menuText + '    	<td width=3D"28" align=3D"left"><img =
src=3D"'+img+'" height=3D"28" width=3D"28" alt=3D"'+status+'"></td>';
//		menuText =3D menuText + '  	<td colspan=3D"2"><a href=3D"#" =
onclick=3D"resetLsn('+i+',-1);" =
class=3D"links">'+parent.progress[i][0][0][0]+'</a></td>';
//		menuText =3D menuText + '  </tr>';

//		if (parent.expandlsn =3D=3D i){
			for (j=3D0;j<parent.progress[i].length;j++){ //topics
				menuText =3D menuText +'  <tr>';
				menuText =3D menuText +'    <td width=3D"28">&nbsp;</td>';
		=09
				// set icon based on status of topic
				if (parent.progress[i][j][1][1] =3D=3D 1) {
					img =3D "images/menu_complete.jpg";
					status =3D "Completed";
				}else if (parent.progress[i][j][1][1] =3D=3D 2){
					img =3D "images/menu_incomplete.jpg";
					status =3D "In progress";
				}else{
					img =3D "images/menu_up.jpg";
					status =3D "Not started";
				}=09
			=09
				menuText =3D menuText +'    <td width=3D"28"><img src=3D"'+img+'" =
height=3D"28" width=3D"28" alt=3D"'+status+'"></td>';
				if (parent.progress[i].length =3D=3D 1){
					menuText =3D menuText +'    <td width=3D"100%"><a href=3D"#" =
onclick=3D"gothere('+i+','+j+',2);" class=3D"links">';
				}else{
					menuText =3D menuText +'    <td width=3D"100%"><a href=3D"#" =
onclick=3D"gothere('+i+','+j+',2);" class=3D"links">';
				}
				menuText =3D menuText +parent.progress[i][j][1][0];
				menuText =3D menuText +'</a></td>';
				menuText =3D menuText +'  </tr>';
			=09
			}
//		}
	}
	menuText =3D menuText +'</table>';
	MM_setTextOfLayer('layMenu','',menuText);
//	alert(parent.progress);
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}


------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.dhs.gov/xlibrary/assets/training/cvi/M/js/APIWrapper.js

/************************************************************************=
*******
**
** FileName: SCOPlayerWrapper.js
**
*************************************************************************=
******/

/************************************************************************=
*******
**
** Concurrent Technologies Corporation (CTC) grants you ("Licensee") a =
non-
** exclusive, royalty free, license to use, modify and redistribute this
** software in source and binary code form, provided that i) this =
copyright
** notice and license appear on all copies of the software; and =
ii)Licensee does
** not utilize the software in a manner which is disparaging to CTC.
**
** This software is provided "AS IS," without a warranty of any kind.  =
ALL
** EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, =
INCLUDING ANY
** IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE =
OR NON-
** INFRINGEMENT, ARE HEREBY EXCLUDED.  CTC AND ITS LICENSORS SHALL NOT =
BE LIABLE
** FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING =
OR
** DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES.  IN NO EVENT WILL CTC  =
OR ITS
** LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR =
DIRECT,
** INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, =
HOWEVER
** CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE =
USE OF
** OR INABILITY TO USE SOFTWARE, EVEN IF CTC HAS BEEN ADVISED OF THE =
POSSIBILITY
** OF SUCH DAMAGES.
**
*************************************************************************=
******/

// Define exception/error codes
var NO_ERROR =3D 0;
var NOT_INITIALIZED =3D 301;

// If the API Call is translated and passed on to the LMS for =
processing, then
// the internal error code should be API_CALLED_PASSED_TO_LMS
var API_CALL_PASSED_TO_LMS =3D  0;

// If the API Call is translated and processed by the API Wrapper, then
// the internal error code should be API_CALLED_NOT_PASSED_TO_LMS
var API_CALL_NOT_PASSED_TO_LMS =3D 1;

// Local variable definitions
var apiHandle =3D null;
var api =3D null;
var findAPITries =3D 0;
var _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
var hours =3D 0;
var minutes =3D 0;
var seconds =3D 0;

var statusRequest =3D null;
var objectivesFlag =3D "";
var objectivesStatusRequestArr =3D new Array();
var elementRequestArr =3D new Array();
var keyList =3D new Array(25);
var valueList =3D new Array(25);


/************************************************************************=
*******
**
** Function: LMSInitialize()
** Inputs:  None
** Return:  Returns true if the initialization was successful, or
**          returns false if the initialization failed.
**
** Description:
** Initialize communication with LMS by calling the Initialize() API =
method
**
*************************************************************************=
******/
function LMSInitialize()
{=09
}

/************************************************************************=
*******
**
** Function LMSFinish()
** Inputs:  None
** Return:  Returns true if the termination of communication was =
successful, or
**          returns false if the termination of communication was =
unsuccessful
**
** Description:
** Terminate communication with LMS by calling the Terminate() API =
method
**
*************************************************************************=
******/
function LMSFinish()
{
}

/************************************************************************=
*******
**
** Function LMSGetValue(name)
** Inputs:  name - string representing a data model element=20
**
** Return:  The value presently stored by the LMS for the data model =
element
**
** Description:
** Requests the value for the data model element
**
*************************************************************************=
******/
function LMSGetValue(name)
{
}  =20

/************************************************************************=
*******
**
** Function LMSSetValue(name, value)
** Inputs:  name -string representing the data model defined category or =
element
**          value -the value that the named element or category will be =
assigned
** Return:  true if successful
**          false if failed.
**
** Description:
** Converts the element name to the Updated element name following the
** SCORM 2004 data model. Also converts the value to the appropriate =
format
** when neccessary.
**
*************************************************************************=
******/
function LMSSetValue(name, value)
{
}

/************************************************************************=
*******
**
** Function LMSCommit()
** Inputs:  None
** Return:  None
**
** Description:
** Calls the LMSCommit function=20
**
*************************************************************************=
******/
function LMSCommit()
{
}

/************************************************************************=
*******
**
** Function LMSGetLastError()
** Inputs:  None
** Return:  The error code that was set by the last LMS function call
**
** Description:
** Calls the LMSGetLastError function, if the InternalErrorCode variable =
has
** previously been set to 1 then the returning value is NO_ERROR.=20
** InternalErrorCode is set to 1 upon recieving a value that is not =
passed onto=20
** the LMS and converted internaly by the SCOPlayerWrapper.
**
*************************************************************************=
******/
function LMSGetLastError()
{
}

/************************************************************************=
*******
**
** Function LMSGetErrorString(errorCode)
** Inputs:  errorCode - Error Code
** Return:  The textual description that corresponds to the input error =
code
**
** Description:
** Calls LMSGetErrorString function=20
**
*************************************************************************=
******/
function LMSGetErrorString(errorCode)
{
}

/************************************************************************=
*******
**
** Function LMSGetDiagnostic(errorCode)
** Inputs:  errorCode - Error Code(integer format), or null
** Return:  The vendor specific textual description that corresponds to =
the=20
**          input error code
**
** Description:
** Calls LMSGetDiagnostic function
**
*************************************************************************=
******/
function LMSGetDiagnostic(errorCode)
{
}


/************************************************************************=
*******
**
** Function determineError()
** Inputs:  None
** Return:  The current value of the LMS Error Code
**
** Description:
** Determines if an error was encountered by the previous API call
** and if so, displays a message to the user.  If the error code
** has associated text it is also displayed.
**
*************************************************************************=
******/
function determineError()
{
}

/************************************************************************=
******
**
** Function getAPIHandle()
** Inputs:  None
** Return:  value contained by APIHandle
**
** Description:
** Returns the handle to API object if it was previously set,
** otherwise it returns null
**
*************************************************************************=
******/
function getAPIHandle()
{

}

/************************************************************************=
*******
**
** Function findAPI(win)
** Inputs:  win - a Window Object
** Return:  If an API_1484_11 object is found, it's returned,=20
**          otherwise null is returned
**
** Description:
** This function looks for an object named API in parent and opener =
windows
**
*************************************************************************=
******/
function findAPI(win)
{
   while ( (win.API_1484_11 =3D=3D null)&&(win.parent !=3D =
null)&&(win.parent !=3D win) )
   {
      findAPITries++;
     =20
      if ( findAPITries > 500 )
      {
         alert("Error finding API -- too deeply nested. 1.3");
         return null;
      }
      win =3D win.parent;
   }
  =20
   return win.API_1484_11;
}

/************************************************************************=
*******
**
** Function getAPI()
** Inputs:  none
** Return:  If an API object is found, it's returned, otherwise null is =
returned
**
** Description:
** This function looks for an object named API, first in the current =
window's=20
** frame hierarchy and then, if necessary, in the current window's =
opener window
** hierarchy (if there is an opener window).
**
*************************************************************************=
******/
function getAPI()
{
   var theAPI =3D findAPI(window);
   if ( (theAPI =3D=3D null) && (window.opener !=3D null) && =
(typeof(window.opener)
                                                        !=3D =
"undefined") )
   {
      theAPI =3D findAPI(window.opener);
   }
   if ( theAPI =3D=3D null )
   {
      alert("Unable to find an API adapter");
   }
   return theAPI;
}

/************************************************************************=
*******
**
** Function childrenGetRequest(name, elementRequestArr)
** Inputs:  element name and the elemntRequestArr variable
** Return:  Returns the list of children to the 1.2 SCO
**
** Description:
** The Wrapper acts alone and returns the 1.2 conformant list of =
children for
** the particular element.
*************************************************************************=
******/=20
function childrenGetRequest(name, elementRequestArr)
{
   var childrenListing =3D "";
  =20
   if ( name =3D=3D "cmi.core._children" )
   {
      childrenListing =3D =
"student_id,student_name,lesson_location,credit,"=20
      + "lesson_status,entry, score,total_time,lesson_mode,"=20
      + "exit,session_time";
   }
   else if ( name =3D=3D "cmi.core.score._children" )
   {
      childrenListing =3D "raw,min,max";
   }
   else if ( name =3D=3D "cmi.student_data._children" )
   {
      childrenListing =3D =
"mastery_score,max_time_allowed,time_limit_action";
   }
   else if ( name =3D=3D "cmi.objectives._children" )
   {
      childrenListing =3D "id,score,status";
   }
   else if ( name =3D=3D "cmi.student_preference._children" )
   {
      childrenListing =3D "audio,language,speed,text";
   }
   else if ( name =3D=3D "cmi.interactions._children" )
   {
      childrenListing =3D =
"id,objectives,time,type,correct_responses,weighting," +
                        "student_response,result,latency";
   }
   else if ( name =3D=3D "cmi.objectives." +=20
                                     elementRequestArr[2] + =
".score._children" )
   {

      childrenListing =3D "raw,min,max";
   }

   return childrenListing;
}

/************************************************************************=
******
**
** Function: translateDataModelElement()
** Inputs: SCORM 1.2 datamodel element name=20
** Return: The value of the element retrieving
**
** Description:
** translateDataModelElement take in the name of the SCORM 1.2 datamodel =

** element and converts the element to conformant SCORM 2004 syntax =
before=20
** initiating the actuall communication to the SCORM 2004 LMS. The =
return value
** is then sent back to the SCORM 1.2 calling sco. Three special cases =
exist for
** elements that require additional more complicated conversions, they =
are for
** core elements, objective and interactions.
**
*************************************************************************=
*****/=20
function translateDataModelElement(name)
{
   var DataModelElementReturnVal =3D "";

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }

   var updatedName =3D "";
   arrayOfComponents =3D name.split(".");

   switch ( arrayOfComponents[1] )
   {
   case "core":
      {=20
         DataModelElementReturnVal =3D =
convertCore(name,arrayOfComponents);
         return DataModelElementReturnVal; =20
      }
   case "comments":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "comments_from_lms":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "objectives":
      {
         DataModelElementReturnVal =3D =
convertObjectives(name,arrayOfComponents);
         return DataModelElementReturnVal;     =20
      }
   case "student_data":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "student_preference":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "suspend_data":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "launch_data":
      {
         updatedName =3D getNewValue(name);
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         DataModelElementReturnVal =3D api.GetValue(updatedName);
      }
   case "interactions":
      {
         DataModelElementReturnVal =3D convertInteractions(name,
                                                            =
arrayOfComponents);
         return DataModelElementReturnVal; =20
      }
   }

   return DataModelElementReturnVal;
}

/************************************************************************=
******
**
** Function: convertCore()
** Inputs: core element name =20
** Return: the value of the element retrieving
**
** Description: Special Case 1 of 3 for GetValue
** ConvertCore accepts a SCORM 1.2 datamodel element and then converts =
the
** element to valid SCORM 2004 syntax before passing on the call to the =
SCORM
** 2004 LMS. The function then returns the result to the calling =
function.
**
*************************************************************************=
*****/
function convertCore(name,arrayOfComponents)
{
   var coreReturnValue =3D "";
   var updatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   // Special "core" case for lesson_status
   if ( updatedName =3D=3D "cmi.core.lesson_status" )
   {
      if ( statusRequest =3D=3D null )
      {
         // The cmi.core.lesson_status was never set by the SCO. =20
         // Return the default value of not attempted
         _InternalErrorCode =3D 1;
         coreReturnValue =3D "not attempted";
         return coreReturnValue;
      }
      else if ( statusRequest =3D=3D "browsed" )
      {
         _InternalErrorCode =3D API_CALL_NOT_PASSED_TO_LMS;
         coreReturnValue =3D "browsed";
         return coreReturnValue;
      }
      else
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;=20
         coreReturnValue =3D api.GetValue(statusRequest);
         return coreReturnValue;
      }
   }
   else
   {
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;=20
      coreReturnValue =3D api.GetValue(updatedName);
   }
  =20
   return coreReturnValue;
}

/************************************************************************=
******
**
** Function: convertObjectives()
** Inputs: objectives element name=20
** Return: the value of the element retrieving
**
** Description: Special Case 2 of 3 for GetValue
** convertObjectives accepts a SCORM 1.2 datamodel element and then =
converts the
** element to valid SCORM 2004 syntax before passing on the call to the =
SCORM
** 2004 LMS. The function then returns the result to the calling =
function.
*************************************************************************=
*****/
function convertObjectives(name,arrayOfComponents)
{
   var objReturnValue =3D "";
   var updatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   if ( arrayOfComponents[3] =3D=3D "status" )
   {
      if ( objectivesStatusRequestArr[arrayOfComponents[2]] =3D=3D null =
)
      {
         _InternalErrorCode =3D 1;
         objReturnValue =3D "not attempted";=20
      }
      else if ( objectivesFlag =3D=3D "browsed")
      {
         _InternalErrorCode =3D API_CALL_NOT_PASSED_TO_LMS;
         objReturnValue =3D "browsed";
      }
      else
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         objReturnValue =3D api.GetValue(
                              =
objectivesStatusRequestArr[arrayOfComponents[2]]);=20
      }
   }
   else
   {
      updatedName =3D getNewValue(name);
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      objReturnValue =3D api.GetValue(updatedName);
   }
  =20
   return objReturnValue;
}

/************************************************************************=
******
**
** Function: convertInteractions()
** Inputs: interactions data model name=20
** Return: the value of the element retrieving
**
** Description: Special Case 3 of 3 for GetValue
** convertInteractions accepts a SCORM 1.2 datamodel element and then =
converts=20
** the element to valid SCORM 2004 syntax before passing on the call to =
the=20
** SCORM 2004 LMS. The function then returns the result to the calling =
function.
*************************************************************************=
*****/
function convertInteractions(name,arrayOfComponents)
{
   var interReturnValue =3D "";
   var updatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   if ( arrayOfComponents[3] =3D=3D "time" )
   {
      // Make appropriate call
      InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      var result1 =3D api.GetValue("cmi.interactions." +=20
                                           arrayOfComponents[2] + =
".timestamp");
     =20
      // Convert 2004 format to 1.2 format
      newtimeArray =3D result1.split("T");
     =20
      // Position 0 is thrown out=20
      interReturnValue =3D newtimeArray[1];
   }
   else if ( arrayOfComponents[3] =3D=3D "result" )
   {
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      interReturnValue =3D api.GetValue(name);

      // Check for a return value of "incorrect" can convert to "wrong"
      if ( interReturnValue =3D=3D "incorrect" )
      {
         interReturnValue =3D "wrong";
      }
   }
   else
   {
      updatedName =3D getNewValue(name);
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      interReturnValue =3D api.GetValue(updatedName);
   }
  =20
   return interReturnValue;
}

/************************************************************************=
******
**
** Function: dmElementSetFunction()
** Inputs: data model element name to set and the value attempting to =
set
** Return: boolean value true or false if the value was correctly set
**
** Description:
** dmElementSetFunction takes in the name of the SCORM 1.2 datamodel=20
** element and the desired value to set the element equal to. Prior to =
calling
** the SetValue call to the LMS the function converts the element to =
conformant
** SCORM 2004 syntax and in some cases formats the value data to meet =
SCORM 2004
** standards.  Upon calling the SetValue call the return value of true =
or false=20
** is returned to the originating calling line.Three special cases exist =
for
** elements that require additional more complicated conversions, they =
are for
** core elements, objective and interactions. All other normal calls =
fall into
** the default case.
**
*************************************************************************=
*****/=20
function dmElementSetFunction(name, value)
{
   var setReturnValue =3D "";

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }

   var setNameUpdate =3D getNewValue(name);=20
   arrayOfComponents =3D name.split(".");

   switch ( arrayOfComponents[1] )
   {
   case "core":
      {
         setReturnValue =3D =
setConvertCore(name,value,arrayOfComponents);
         return setReturnValue;
      }
   case "objectives":
      {
         setReturnValue =3D =
setConvertObjectives(name,value,arrayOfComponents);
         return setReturnValue;=20
      }   =20
   case "interactions":
      {
         setReturnValue =3D =
setConvertInteractions(name,value,arrayOfComponents);
         return setReturnValue;=20
      }
   default:
      {
         // Normal setValue() Call
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         setReturnValue =3D api.SetValue(setNameUpdate, value);
      }
   }

   return setReturnValue;
}

/************************************************************************=
******
**
** Function: setConvertCore()
** Inputs: core data model element=20
** Return: boolean true or false depending on success or failure of the =
call
**
** Description: Special Case 1 of 3 for SetValue
** setConvertCore accepts a valid SCORM 1.2 element and value and =
converts the=20
** call into conformant SCORM 2004 syntax. Upon making the conversion =
the=20
** SetValue call is made to the LMS and returns a boolean value upon the =
the=20
** sucess or failure of the call.
**
*************************************************************************=
*****/
function setConvertCore(name,value,arrayOfComponents)
{
   var coreReturnValue =3D "";
   var coreUpdatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   if ( name =3D=3D "cmi.core.lesson_status" )
   {
      // Check setNameUpdate and determine which element to set
      if ( (value =3D=3D "completed") || (value =3D=3D "incomplete") ||=20
           (value =3D=3D "not attempted") )
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         coreReturnValue =3D api.SetValue("cmi.completion_status", =
value);
         statusRequest =3D "cmi.completion_status";
         return coreReturnValue;
      }
      else if ( (value =3D=3D "passed") || (value =3D=3D "failed") )
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         coreReturnValue =3D api.SetValue("cmi.success_status", value);
         statusRequest =3D "cmi.success_status";
         return coreReturnValue;
      }
      else if (value =3D=3D "browsed")
      {
         _InternalErrorCode =3D API_CALL_NOT_PASSED_TO_LMS;
         coreReturnValue =3D true;
         statusRequest =3D "browsed";
         return coreReturnValue;
      }

   }
   else if ( name =3D=3D "cmi.core.session_time" )
   {
      timeArray =3D new Array(4);
      timeArray =3D value.split(":");
     =20
      hours =3D timeArray[0];
      minutes =3D timeArray[1];
      seconds =3D timeArray[2];
     =20
      var newvalue =3D "PT" + hours + "H" + minutes + "M" + seconds + =
"S";
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      setReturnValue =3D api.SetValue(coreUpdatedName, newvalue);
      return coreReturnValue;     =20
   }
   else
   { // Normal core set value call
      // Normal setValue() Call        =20
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      setReturnValue =3D api.SetValue(coreUpdatedName, value);
      return coreReturnValue;
   }
  =20
   return coreReturnValue;
}

/************************************************************************=
******
**
** Function: setConvertObjectives()
** Inputs: objectives data model element=20
** Return: boolean true or false depending on success or failure of the =
call
**
** Description: Special Case 2 of 3 for SetValue
** setConvertObjectives accepts a valid SCORM 1.2 element and value and =
converts =20
** the call into conformant SCORM 2004 syntax. Upon making the =
conversion the=20
** SetValue call is made to the LMS and returns a boolean value upon the =
the=20
** sucess or failure of the call.
**
*************************************************************************=
*****/
function setConvertObjectives(name,value,arrayOfComponents)
{
   var objReturnValue =3D "";
   var objUpdatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   if ( arrayOfComponents[3] =3D=3D "status" )
   {
      if ( (value =3D=3D "passed") || (value =3D=3D "failed") )
      {
         // Reset Objectives Flag
         objectivesFlag =3D "";
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         objReturnValue =3D api.SetValue("cmi.objectives." +=20
                               arrayOfComponents[2] + ".success_status", =
value);
         objectivesStatusRequestArr[arrayOfComponents[2]] =3D =
"cmi.objectives." +=20
                                       arrayOfComponents[2] + =
".success_status";
         return objReturnValue;
      }
      else if ( (value =3D=3D "completed") || (value =3D=3D =
"incomplete") ||=20

                (value =3D=3D "not attempted") )
      {
         // Reset Objectives Flag
         objectivesFlag =3D "";
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         objReturnValue =3D api.SetValue("cmi.objectives." + =
arrayOfComponents[2]+=20
                                       ".completion_status", value);
         objectivesStatusRequestArr[arrayOfComponents[2]] =3D =
"cmi.objectives." +=20
                                    arrayOfComponents[2] + =
".completion_status";
         return objReturnValue;      =20
      }
      else if ( value =3D=3D "browsed")
      {
        _InternalErrorCode =3D API_CALL_NOT_PASSED_TO_LMS;
        // Set objectives flag
        objectivesFlag =3D "browsed";
        objReturnValue =3D true;
        return objReturnValue;
      }
   }
   else
   { // Normal set objective call
      // Normal setValue() Call
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;         =20
      objReturnValue =3D api.SetValue(objUpdatedName, value);
      return objReturnValue;
   }
  =20
   return objReturnValue;
}

/************************************************************************=
******
**
** Function: setConvertInteractions()
** Inputs: interactions data model element=20
** Return: boolean true or false depending on success or failure of the =
call
**
** Description: Special Case 3 of 3 for SetValue
** setConvertInteractions accepts a valid SCORM 1.2 element and value =
and  =20
** converts the call into conformant SCORM 2004 syntax. Upon making the  =

** conversion the SetValue call is made to the LMS and returns a boolean =
value =20
** upon the the sucess or failure of the call.
**
*************************************************************************=
*****/
function setConvertInteractions(name,value,arrayOfComponents)
{
   var interReturnValue =3D "";
   var interUpdatedName =3D getNewValue(name);

   if (api =3D=3D null)
   {
      api =3D getAPIHandle();
   }
  =20
   if ( arrayOfComponents[3] =3D=3D "latency" )
   {
      timeArray =3D new Array(4);
      timeArray =3D value.split(":");
     =20
      hours =3D timeArray[0];
      minutes =3D timeArray[1];
      seconds =3D timeArray[2];
     =20
      var newvalue =3D "PT" + hours + "H" + minutes + "M" + seconds + =
"S";=20
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;       =20
      interReturnValue =3D api.SetValue(name, newvalue);
      return interReturnValue;    =20
   }
   else if ( arrayOfComponents[3] =3D=3D "time" )
   {
      // Convert the time format to correct format
      var now =3D new Date();
      var year =3D now.getYear();
      var month =3D now.getMonth();
     =20
      if ( month <=3D 9 )
      {
         month =3D "0" + month;
      }

      var day =3D now.getDay();
     =20
      if ( day <=3D 9 )
      {
         day =3D "0" + day;
      }

      var newValue =3D year + "-" + month + "-" + day + "T" + value;
     =20
      // Setting interactions.timestamp to updated 2004 time format
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      var result1 =3D api.SetValue("cmi.interactions." + =
arrayOfComponents[2] +=20
                                 ".timestamp", newValue);
      return result1;
   }
   else if ( arrayOfComponents[3] =3D=3D "result" )
   {
      // Check Value sending in to set
      if ( value =3D=3D "wrong" )
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         interReturnValue =3D api.SetValue(interUpdatedName, =
"incorrect");
         return interReturnValue;
      }
      else
      {
         _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
         interReturnValue =3D api.SetValue(interUpdatedName, value);
         return interReturnValue;
      }
   }
   else
   { // Normal core set value call
      // Normal setValue() Call        =20
      _InternalErrorCode =3D API_CALL_PASSED_TO_LMS;
      interReturnValue =3D api.SetValue(interUpdatedName, value);
      return interReturnValue;
   }
  =20
   return interReturnValue;
}

/************************************************************************=
******
**
** Function: fillKeyList()
** Inputs:  None
** Return:  None
**
** Description:
** fillKeyList is called upon initiation of the file and populates a =
list array
** used in the getNewValue function. The finished list contains the =
conformant
** SCORM 1.2 data model elements that may need converted to SCORM 2004.  =

**
*************************************************************************=
*****/=20
function fillKeyList()
{
   // Fill the list of keys (old data model elements)
   keyList[0] =3D "cmi.core.student_id";
   keyList[1] =3D "cmi.core.student_name";
   keyList[2] =3D "cmi.core.lesson_location";
   keyList[3] =3D "cmi.core.credit";
   keyList[4] =3D "cmi.core.entry";
   keyList[5] =3D "cmi.core.score.raw";
   keyList[6] =3D "cmi.core.score.max";
   keyList[7] =3D "cmi.core.score.min";
   keyList[8] =3D "cmi.core.total_time";
   keyList[9] =3D "cmi.core.lesson_mode";
   keyList[10] =3D "cmi.core.exit";
   keyList[11] =3D "cmi.core.session_time";
   keyList[12] =3D "cmi.core.score._children";
   keyList[13] =3D "cmi.student_preference._children";
   keyList[14] =3D "cmi.student_preference.audio";
   keyList[15] =3D "cmi.student_preference.language";
   keyList[16] =3D "cmi.student_preference.speed";
   keyList[17] =3D "cmi.student_preference.text";
   keyList[18] =3D "cmi.student_data.mastery_score";
   keyList[19] =3D "cmi.student_data.max_time_allowed";
   keyList[20] =3D "cmi.student_data.time_limit_action";
   keyList[21] =3D "cmi.comments_from_lms";
   keyList[22] =3D "cmi.comments";
}

/************************************************************************=
******
**
** Function: fillValueList()
** Inputs:  None
** Return:  None=20
**
** Description:
** fillValueList is called upon initiation of the file and populates a =
list array
** used in the getNewValue function. This finished list contains the =
appropriate
** updated SCORM 2004 data model elements.
**
*************************************************************************=
*****/  =20
function fillValueList()
{
   // Fill the list of values (new data model elements)
   valueList[0] =3D "cmi.learner_id";
   valueList[1] =3D "cmi.learner_name";
   valueList[2] =3D "cmi.location";
   valueList[3] =3D "cmi.credit";
   valueList[4] =3D "cmi.entry";
   valueList[5] =3D "cmi.score.raw";
   valueList[6] =3D "cmi.score.max";
   valueList[7] =3D "cmi.score.min";
   valueList[8] =3D "cmi.total_time";
   valueList[9] =3D "cmi.mode";
   valueList[10] =3D "cmi.exit";
   valueList[11] =3D "cmi.session_time";
   valueList[12] =3D "cmi.score._children";
   valueList[13] =3D "cmi.learner_preference._children";
   valueList[14] =3D "cmi.learner_preference.audio_level";
   valueList[15] =3D "cmi.learner_preference.language";
   valueList[16] =3D "cmi.learner_preference.delivery_speed";
   valueList[17] =3D "cmi.learner_preference.audio_captioning";
   valueList[18] =3D "cmi.scaled_passing_score";
   valueList[19] =3D "cmi.max_time_allowed";
   valueList[20] =3D "cmi.time_limit_action";
   valueList[21] =3D "cmi.comments_from_lms.0.comment";
   valueList[22] =3D "cmi.comments_from_learner.0.comment";
}

/************************************************************************=
******
**
** Function: getNewValue()
** Inputs: SCORM 1.2 data model element=20
** Return: corresponding SCORM 2004 data model element
**
** Description:
** getNewValue take in the old SCORM 1.2 datamodel element and by using =
the=20
** previously set list arrays returns the corresponding SCORM 2004 data =
model
** element.
**
*************************************************************************=
*****/  =20
function getNewValue( key )
{
   var keyResult =3D key;
  =20
   // Check to see if result is cmi.interactions
   var checkValue =3D keyResult.substring(0,16);
  =20
   if ( checkValue =3D=3D "cmi.interactions" )
   {
      // Check for cmi.interactions.n.time
      checkValue2 =3D  keyResult.substring(19,23);
     =20
      if ( checkValue2 =3D=3D "time" )
      {
         // Return cmi.interactions.n.timestamp
         var subString1 =3D keyResult.substring(0,19);
         keyResult =3D subString1 + "timestamp";
      }
      else if ( checkValue2 =3D=3D "stud" )
      {
         // Return cmi.interactions.n.learner_response
         var subString1 =3D keyResult.substring(0,19);
         keyResult =3D subString1 + "learner_response";
      }
   }

   for ( i=3D0; i < keyList.length; i++ )
   {
      if ( keyList[i] =3D=3D key )
      {
         keyResult =3D valueList[i];
         break;
      }
   }  =20
   return keyResult;
}

/************************************************************************=
******
**
** Function: fillErrorList()
** Inputs:  None
** Return:  None=20
**
** Description:
** fillErrorList creates a list array of the SCORM 1.2 error codes
** This array is used in converting the error codes.
**
*************************************************************************=
*****/=20
var errorList =3D new Array(25);
var errorStringList =3D new Array(25);
var newErrorList =3D new Array(25);
var errorcodeList =3D new Array(25);

function fillErrorList()
{
   // Fill the list of erorrs (old error codes)
   errorList[0] =3D "0";
   errorList[1] =3D "101";
   errorList[2] =3D "101";
   errorList[3] =3D "101";
   errorList[4] =3D "101";
   errorList[5] =3D "101";
   errorList[6] =3D "301";
   errorList[7] =3D "101";
   errorList[8] =3D "122";
   errorList[9] =3D "101";
   errorList[10] =3D "301";
   errorList[11] =3D "101";
   errorList[12] =3D "301";
   errorList[13] =3D "143";
   errorList[14] =3D "201";
   errorList[15] =3D "101";
   errorList[16] =3D "101";
   errorList[17] =3D "101";
   errorList[18] =3D "401";
   errorList[19] =3D "401";
   errorList[20] =3D "301";
   errorList[21] =3D "403";
   errorList[22] =3D "404";
   errorList[23] =3D "405";
   errorList[24] =3D "405";
   errorList[25] =3D "405";
}

/************************************************************************=
******
**
** Function: fillnewErrorList()
** Inputs:  None
** Return:  None
**
** Description:
** fillnewErrorList creates a list array containing the SCORM 2004 error =
codes
** This array is used in converting the error codes.
**
*************************************************************************=
*****/  =20
function fillnewErrorList()
{
   // Fill the list of values (new error codes)
   newErrorList[0] =3D "0";
   newErrorList[1] =3D "101";
   newErrorList[2] =3D "102";
   newErrorList[3] =3D "103";
   newErrorList[4] =3D "104";
   newErrorList[5] =3D "111";
   newErrorList[6] =3D "112";
   newErrorList[7] =3D "113";
   newErrorList[8] =3D "122";
   newErrorList[9] =3D "123";
   newErrorList[10] =3D "132";
   newErrorList[11] =3D "133";
   newErrorList[12] =3D "142";
   newErrorList[13] =3D "143";
   newErrorList[14] =3D "201";
   newErrorList[15] =3D "301";
   newErrorList[16] =3D "351";
   newErrorList[17] =3D "391";
   newErrorList[18] =3D "401";
   newErrorList[19] =3D "402";
   newErrorList[20] =3D "403";
   newErrorList[21] =3D "404";
   newErrorList[22] =3D "405";
   newErrorList[23] =3D "406";
   newErrorList[24] =3D "407";
   newErrorList[25] =3D "408";
}

/************************************************************************=
******
**
** Function: fillErrorStringList()
** Inputs: none
** Return: none
**
** Description:
** fillErrorStringList creates a list array with SCORM 1.2 error =
strings.
**
*************************************************************************=
*****/
function fillErrorStringList()
{
   // Fill the list of 1.2 erorr strings
   errorStringList[0] =3D "No error";
   errorStringList[1] =3D "General Exception";
   errorStringList[2] =3D "Invalid Augment error";
   errorStringList[3] =3D "Element Cannot have Children";
   errorStringList[4] =3D "Element not an array - cannot have count";
   errorStringList[5] =3D "Not Initialized";
   errorStringList[6] =3D "Not implemented error";
   errorStringList[7] =3D "Invalid set value, element is a keyword";
   errorStringList[8] =3D "Element is read only";
   errorStringList[9] =3D "Element is write only";
   errorStringList[10] =3D "Incorrect Data Type";
}  =20


/************************************************************************=
******
**
** Function: fillErrorCodeList()
** Inputs: none=20
** Return: none=20
**
** Description:
** fillErrorCodeList creates a list array with the SCORM 1.2 error codes
** to create a mapping to the error codes with the errorStrings.
**
*************************************************************************=
*****/  =20
function fillErrorCodeList()
{
   // Fill the list of 1.2 erorr codes
   errorcodeList[0] =3D "0";
   errorcodeList[1] =3D "101";
   errorcodeList[2] =3D "201";
   errorcodeList[3] =3D "202";
   errorcodeList[4] =3D "203";
   errorcodeList[5] =3D "301";
   errorcodeList[6] =3D "401";
   errorcodeList[7] =3D "402";
   errorcodeList[8] =3D "403";
   errorcodeList[9] =3D "404";
   errorcodeList[10] =3D "405";
}  =20

/************************************************************************=
******
**
** Function: initializeConversionTables()
** Inputs: none=20
** Return: none=20
**
** Description:
** initializeConversionTables calls all the functions that create the =
list
** arrays that provide the information for the conversions between SCORM =
1.2
** and SCORM 2004 data model elements and errorcodes.
**
*************************************************************************=
*****/=20
function initializeConversionTables()
{
   fillKeyList();
   fillValueList();
   fillErrorList();
   fillnewErrorList();
   fillErrorCodeList();
   fillErrorStringList();
}

/************************************************************************=
******
**
** Function: getNewErrorValue()
** Inputs: SCORM 1.2 error code=20
** Return: SCORM 2004 Error code
**
** Description:
** getNewErrorValue accepts a SCORM 1.2 error code and using the the key =
and=20
** value list arrays converts the SCORM 1.2 call into a valid SCORM 2004 =
error
** code
**
*************************************************************************=
*****/ =20
function getNewErrorValue( error )
{
   var result =3D error;
  =20
   for ( i=3D0; i < errorList.length; i++ )
   {
      if ( errorList[i] =3D=3D error )
      {
         result =3D newErrorList[i];
         break;
      }
   }
   return result;
}

/************************************************************************=
******
**
** Function: getOldErrorValue()
** Inputs:  SCORM 2004 error code=20
** Return:  SCORM 1.2 error code
**
** Description: Function to retrieve the 1.2 error code
** getOldErrorValue accepts a SCORM 2004 error code and returns the=20
** corresponding SCORM 1.2 error code.
**
*************************************************************************=
*****/=20
function getOldErrorValue( error )
{
   var result =3D error;
  =20
   for ( i=3D0; i < newErrorList.length; i++ )
   {
      if ( newErrorList[i] =3D=3D error )
      {
         result =3D errorList[i];
         break;
      }
   }
   return result;
}

/************************************************************************=
******
**
** Function: getErrorString()
** Inputs: error code=20
** Return: appropriate SCORM 1.2 error string
**
** Description: Function to retrieve the 1.2 error string
** getErrorString accepts an error code value and returns the =
coresponding=20
** SCORM 1.2 error string.
**
*************************************************************************=
*****/   =20
function getErrorString( error )
{
   var result =3D error;
  =20
   for ( i=3D0; i < errorcodeList.length; i++ )
   {
      if ( errorcodeList[i] =3D=3D error )
      {
         result =3D errorStringList[i];
         break;
      }
   }
   return result;
}


// The commented code is an example of one method in using this =
Conversion
// tool to handle multiple states.  For example the default handling of =
status=20
// variables are handled via JavaScript Global Variables inturn lasting =
only=20
// one learner attempt.  If the developer would like to maintain the =
status=20
// variables over multiple learner sessions (within learner attempt) =
this=20
// code could be used.
/************************************************************************=
**
**
** Function: setcookie()
** Inputs:  name - name of the cookie
**          value - value of the cookie
**          expires - value of the expiration date
** Return:  none
**
** Description:
** Used to create a cookie in order for the player to keep track of
** lesson status.
**
*************************************************************************=
*/    =20
//function setCookie(name, value, expires, path, domain, secure)=20
//{
//    document.cookie =3D name + "=3D" + escape(value) +=20
//    ((expires =3D=3D null) ? "" : "; expires=3D" + =
expires.toGMTString()) +
//    ((path =3D=3D null) ? "" : "; path=3D" + path) +
//    ((domain =3D=3D null) ? "" : "; domain=3D" + domain) +
//    ((secure =3D=3D null) ? "" : "; secure");
//}

/************************************************************************=
**
**
** Function: getcookie()
** Inputs:  name - name of the cookie
** Return:  The cookie or Null if it doesnt exist
**
** Description:
** Used to retrieve a cookie in order for the player to keep track of
** lesson status.
**
*************************************************************************=
*/=20
//function getCookie(name)
//{
//      var cname =3D name + "=3D";              =20
//      var dc =3D document.cookie;            =20
//      if (dc.length > 0)=20
//      {             =20
//       begin =3D dc.indexOf(cname);      =20
//       if (begin !=3D -1)=20
//      {          =20
//       begin +=3D cname.length;      =20
//       end =3D dc.indexOf(";", begin);
//       if (end =3D=3D -1) end =3D dc.length;
//       return unescape(dc.substring(begin, end));
//     }=20
//   }
//   return "e";
//}

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0029_01C7DDC0.6835E3D0"


------=_NextPart_001_0029_01C7DDC0.6835E3D0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:file://C:\Documents%20and%20Settings\sabrina.nelson\Local%20Settings\Temporary%20Internet%20Files\OLK76\CVI%20Disclosure%20Page.mht

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META content=3D"MSHTML 6.00.2900.3132" =
name=3DGENERATOR></HEAD><FRAMESET border=3D0=20
frameSpacing=3D0 rows=3D*,0 frameBorder=3D0><FRAME title=3D"Content =
Display Frame"=20
name=3DContent=20
src=3D"mhtml:file://C:\Documents%20and%20Settings\sabrina.nelson\Local%20=
Settings\Temporary%20Internet%20Files\OLK76\CVI%20Disclosure%20Page.mht!h=
ttp://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm"=20
noResize><FRAME title=3D"SCORM Functions Frame" name=3DSCORM=20
src=3D"mhtml:file://C:\Documents%20and%20Settings\sabrina.nelson\Local%20=
Settings\Temporary%20Internet%20Files\OLK76\CVI%20Disclosure%20Page.mht!h=
ttp://www.dhs.gov/xlibrary/assets/training/cvi/scorm.html"=20
noResize><NOFRAMES>
		Your browser does not support frames.  Frames are required to =
successfully execute this courseware.
	</NOFRAMES></FRAMESET></HTML>

------=_NextPart_001_0029_01C7DDC0.6835E3D0
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:file://C:\Documents%20and%20Settings\sabrina.nelson\Local%20Settings\Temporary%20Internet%20Files\OLK76\CVI%20Disclosure%20Page.mht!http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML><HEAD><TITLE>Knowledge Assessment - Congratulations</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META http-equiv=3Dimagetoolbar content=3Dno>
<META http-equiv=3Dimagetoolbar content=3Dfalse>
<SCRIPT language=3DJavaScript=20
src=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/js/common.js"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJavaScript=20
src=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/js/APIWrapper.js=
"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>function exitpage() {
		<!--~~~~~~~~~~~~~~~~~~~~~ Uncomment next line if LAST Page of SCO -->
		LMSSetValue('cmi.core.lesson_status','completed'); LMSCommit(""); =
LMSFinish();
	}

	function exitlesson() {
		LMSFinish(); top.close();
	}
</SCRIPT>

<SCRIPT type=3Dtext/javascript>
	function enterpage() {
		=
LMSSetValue('cmi.core.lesson_location','M/010706----.htm');LMSCommit();pr=
eloadImages();
	}
</SCRIPT>
<LINK=20
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/css/common_hack=
s.css"=20
type=3Dtext/css rel=3Dstylesheet><LINK=20
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/css/common_styl=
es.css"=20
type=3Dtext/css rel=3Dstylesheet><LINK href=3D"css/Pr_fulltext.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<META content=3D"MSHTML 6.00.2900.3132" name=3DGENERATOR></HEAD>
<BODY onload=3Denterpage(); onunload=3Dexitpage();><NOSCRIPT>This site =
has features=20
and functions that require javascript. Please contact your system =
administrator=20
to enable javascript on this computer. </NOSCRIPT><!-- SKIP TO CONTENT =
-->
<P class=3Daccess><A=20
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
content">Skip=20
to content</A></P>
<DIV class=3Dclearfix id=3Dcontainer>
<DIV id=3Dpagecount>Page 6 of 6</DIV>
<DIV id=3Dnav>
<P class=3Dprev><A accessKey=3Db=20
onclick=3D"javascript:if =
(parent.bottomFrame){parent.bottomFrame.location =3D =
'../../../QA/QAStuff.asp?html=3D1&amp;pageNum=3D5&amp;topicid=3D895';}"=20
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010705----.htm"=
>Back</A></P></DIV><!-- END #nav -->
<DIV id=3Dsubnav>
<UL><!--<li id=3D"menu"><a href=3D"#">Menu</a></li>-->
  <LI id=3Dglossary><A=20
  =
onclick=3D"MM_openBrWindow('glossary.htm','gloss','width=3D810,height=3D5=
00,scrollbars=3Dyes,resizable=3Dyes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Glossary</A>=20
  </LI>
  <LI id=3Dresources><A=20
  =
onclick=3D"MM_openBrWindow('resources.htm','gloss','width=3D810,height=3D=
575,scrollbars=3Dyes,resizable=3Dyes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Resources</A>=20
  </LI>
  <LI id=3Dhelp><A=20
  =
onclick=3D"MM_openBrWindow('help.htm','gloss','width=3D810,height=3D575,s=
crollbars=3Dyes,resizable=3Dyes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Help</A>=20
  </LI>
  <LI id=3Dexit><A onclick=3Dtop.close();=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Exit</A>=20
  </LI></UL></DIV><!-- END #subnav -->
<DIV id=3Daudiocontrols><!--<ul>--><!--<li id=3D"play"><a =
href=3D"#">Play</a></li>--><!--<li id=3D"repeat"><a href=3D"#" =
onclick=3D"MM_controlShockwave('audioswf','','GotoFrame','9')" =
>Repeat</a></li>--><!--<li id=3D"mute"><a href=3D"#" =
onclick=3D"javascript:onMuteClick()">Mute</a></li>--><!--<li =
id=3D"transcript"><a href=3D"#" =
onclick=3D"javascript:MM_openBrWindow('010706-aud.htm','audioTranscript',=
'height=3D300,width=3D400,left=3D200,top=3D100,menubar=3Dno,toolbar=3Dno,=
resizable=3Dyes');">Transcript</a></li>--><!--</ul>--></DIV><!-- END =
#audiocontrols -->
<H1>CVI Authorized User Training</H1>
<H2>Knowledge Assessment </H2>
<DIV id=3Dcontent>
<DIV id=3Dtext><FONT size=3D3>
<P><STRONG>Congratulations!</STRONG> You have completed CVI Authorized =
User=20
Training. If you are eligible to become a CVI authorized user, please =
select=20
from the list below the category that best describes you. After making =
your=20
selection, you will be asked to provide the Chemical Security Compliance =

Division with basic contact information and complete a non-disclosure =
agreement=20
as appropriate.</P>
<P>The Chemical Security Compliance Division will review your =
information and=20
conduct a security background check as necessary. At the conclusion of =
these=20
actions, you will receive notification by e-mail regarding your =
status.</P>
<P>
<UL>
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Chemical=20
  Facility Employee or Contractor</A>=20
  <LI><A=20
  =
onclick=3D"MM_openBrWindow('Federal_Info.pdf','gloss','width=3D1200,heigh=
t=3D900,scrollbars=3Dyes,resizable=3Dyes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Federal=20
  Government Employee</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Federal=20
  Government Contractor</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Federal=20
  Government Grantee</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">State=20
  Government Employee</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">State=20
  Government Contractor</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Local=20
  Government Employee</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Local=20
  Government Contractor</A>=20
  <LI><A=20
  onclick=3D"MM_openBrWindow('CVI =
NDA.pdf','gloss','width=3D1200,height=3D900,scrollbars=3Dyes,resizable=3D=
yes,toolbars=3Dno,menubar=3Dno')"=20
  =
href=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/010706----.htm#=
">Private=20
  Third Party with a Vested Interest in a Chemical Facility</A>=20
</LI></UL></FONT></DIV>
<DIV>
<P><STRONG>If you are unable to open the hyperlink above or have other=20
difficulties in submitting information to DHS, please e-mail the <A=20
href=3D"mailto:csat@dhs.gov">CSAT Help Desk</A> or call at 866-323-2957. =
Hours are=20
from 7:00 AM to 7:00 PM ET Monday to Friday.</STRONG></P>
<P>The selection you choose will help you complete the information =
requirements=20
to become a CVI authorized user. After providing the appropriate =
information you=20
will be given instructions to submit this information to the Department =
of=20
Homeland Security's Chemical Security Help Desk. The Help Desk will =
provide you=20
with confirmation and a CVI authorized user number.</P>
<P>Private third parties will not receive an authorized user number. =
Access to=20
CVI for this group is dependent on the chemical facility and Chemical =
Security=20
Compliance Division Director's consent. No further dissemination of CVI =
by=20
private third parties is allowed.</P>
<P><FONT size=3D3><STRONG>Completing this form requires that you have =
Adobe=20
Acrobat Reader 7.0 or later. If you do not have this software, you may =
download=20
it at <A=20
href=3D"http://www.adobe.com/">http://www.adobe.com/</A></STRONG></P></DI=
V>
<P><FONT size=3D3><STRONG>Paperwork Burden Notice</STRONG></P>
<P>The public reporting burden for this form is estimated to be 30 =
minutes. The=20
burden estimate includes time for reviewing instructions, providing =
information=20
to register you as a CVI authorized user, and submitting this =
information to=20
DHS. Send comments regarding the accuracy of the burden estimate and any =

suggestions for reducing the burden to:</P><BR>
<ADDRESS>Attention: Matthew Bettridge, Project Manager<BR>(Paperwork =
Reduction=20
Project (1670_0007)<BR>NPPD/OIP/Chemical Security Compliance =
Division<BR>U.S.=20
Department of Homeland Security<BR>Mail Stop 8100<BR>Washington, DC=20
20528-8100.<BR></ADDRESS><BR>
<P>You are not required to respond to this collection of information =
unless a=20
valid OMB control number is displayed in the upper right corner of the =
form=20
asking for personal information at the conclusion of this training.=20
</FONT></P></DIV><!-- END #text -->
<FORM id=3Dmoveit name=3Dmoveit action=3D"" method=3Dpost><INPUT =
id=3Dmoveon type=3Dhidden=20
value=3D1 name=3Dmoveon> </FORM></DIV><!-- END content -->
<DIV></DIV><!-- END #container --></FONT></BODY></HTML>

------=_NextPart_001_0029_01C7DDC0.6835E3D0--

------=_NextPart_000_001A_01C7DDC0.682EB7E0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: mhtml:file://C:\Documents%20and%20Settings\sabrina.nelson\Local%20Settings\Temporary%20Internet%20Files\OLK76\CVI%20Disclosure%20Page.mht!http://www.dhs.gov/xlibrary/assets/training/cvi/scorm.html

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>CVI User =
Authorized Training</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<SCRIPT language=3Djavascript=20
src=3D"http://www.dhs.gov/xlibrary/assets/training/cvi/M/js/APIWrapper.js=
"></SCRIPT>
<!--<script src=3D"M/js/data.js" language=3D"javascript"></script>-->
<META content=3D"MSHTML 6.00.2900.3132" name=3DGENERATOR></HEAD>
<BODY bgColor=3Dred onload=3DLMSInitialize();></BODY></HTML>

------=_NextPart_000_001A_01C7DDC0.682EB7E0--
