From: <Zapisane przez program Windows Internet Explorer 7>
Subject: 
Date: Thu, 10 Dec 2009 21:18:34 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01CA79DE.5477ABF0"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
BEHAVIOR: url(btnroll.htc); BORDER-LEFT: 0px; COLOR: #191970; =
BORDER-BOTTOM: 0px; POSITION: absolute; BACKGROUND-COLOR: transparent
}
#framesetApp {
	BORDER-LEFT-COLOR: #848594
}
#framesetAll {
	BEHAVIOR: url(#default#userData)
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
BEHAVIOR: url(btnroll.htc); BORDER-LEFT: 0px; COLOR: #191970; =
BORDER-BOTTOM: 0px; POSITION: absolute; BACKGROUND-COLOR: transparent
}
#framesetApp {
	BORDER-LEFT-COLOR: #848594
}
#framesetAll {
	BEHAVIOR: url(#default#userData)
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_0005_01CA79DE.5479F5E0"


------=_NextPart_001_0005_01CA79DE.5479F5E0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\app.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<!--
		Copyright (c) 2001 General Electric Company

		Version control:
				$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/app.htm $
				$Revision: 16 $
				$Date: 3/04/03 4:11p $
				$Author: Marceld $
--><HTML><HEAD><TITLE></TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250">
<META content=3Dhttp://schemas.microsoft.com/intellisense/ie5=20
name=3Dvs_targetSchema><LINK href=3D"file:///D:/RA/app.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT src=3D"file:///D:/RA/util.js" type=3Dtext/jscript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/debug.js" type=3Dtext/jscript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/config.js" type=3Dtext/jscript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/localedb.js" type=3Dtext/jscript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/locale.js" type=3Dtext/jscript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/app.js" type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3DJScript.Encode =
src=3D"file:///D:/RA/lickey.jse"></SCRIPT>

<SCRIPT language=3DJScript.Encode =
src=3D"file:///D:/RA/licgen.jse"></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" =
name=3DGENERATOR></HEAD><FRAMESET=20
id=3DframesetAll tabIndex=3D-1 frameSpacing=3D0 rows=3D"*, 0"><FRAME =
id=3Dloadframe=20
style=3D"BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; =
BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"=20
marginWidth=3D0 marginHeight=3D0 src=3D"file://D:\RA\loadfrm.htm" =
frameBorder=3D0=20
scrolling=3Dno><FRAMESET id=3DframesetApp tabIndex=3D-1 frameSpacing=3D2 =

borderColor=3D#92a0a0 cols=3D"170, *"><FRAME id=3Ddicomdirframe =
marginWidth=3D0=20
marginHeight=3D0 src=3D"file://D:\RA\dcmdrfrm.htm" frameBorder=3D0 =
scrolling=3Dno><FRAME=20
id=3Dviewframe marginWidth=3D0 marginHeight=3D0 =
src=3D"file://D:\RA\viewfrm.htm"=20
scrolling=3Dno></FRAMESET></FRAMESET></HTML>

------=_NextPart_001_0005_01CA79DE.5479F5E0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\loadfrm.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
		Copyright (c) 2001 General Electric Company

		Version control:
				 $Archive: /dev/src/WebViewer/FreeViewer/HTML/loadfrm.htm $
				$Revision: 7 $
						$Date: 3/11/02 4:56p $
					$Author: Marceld $
--><HTML><HEAD><TITLE>Initializing</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250"><LINK=20
href=3D"file:///D:/RA/app.css" type=3Dtext/css rel=3Dstylesheet>
<SCRIPT type=3Dtext/javascript>
			/*<![CDATA[*/
		=09
			// Inline javascript code to improve the loading speed of the page.
			// This page should load as quickly as possible to give feedback to =
the user.

			function OnLoadComplete()
			{
				divMessage.style.visibility =3D 'hidden';
				pDownloadTime.style.visibility =3D 'hidden';
			}

			function window.onload()
			{
				if (parent =3D=3D null || parent.GetISettings =3D=3D null)
					return null;

				var ISettings =3D parent.GetISettings();
				h2Caption.innerText =3D 'Loading ' + =
ISettings.GetConfigurationItem('APP_NAME');

				if (location.protocol =3D=3D "http:")
				{
					pDownloadTime.style.visibility =3D 'inherit';
				}
			}

			function SetErrorText(strErrorText)
			{
				h2Caption.innerText =3D "Error";
				pErrorText.innerText =3D strErrorText;
				pErrorText.style.visibility =3D 'inherit';
				divMessage.style.visibility =3D 'inherit';
			}
			/*]]>*/
		</SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" name=3DGENERATOR></HEAD>
<BODY style=3D"TEXT-ALIGN: center">
<DIV id=3DdivMessage=20
style=3D"LEFT: 0px; WIDTH: 100%; POSITION: absolute; ; TOP: =
expression((body.clientHeight - this.clientHeight) / 2)">
<H2 id=3Dh2Caption></H2>
<P id=3DpDownloadTime style=3D"VISIBILITY: hidden">4 min @ 56 Kbps</P>
<P id=3DpErrorText style=3D"VISIBILITY: hidden"></P></DIV></BODY></HTML>

------=_NextPart_001_0005_01CA79DE.5479F5E0--

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
BEHAVIOR: url(btnroll.htc); BORDER-LEFT: 0px; COLOR: #191970; =
BORDER-BOTTOM: 0px; POSITION: absolute; BACKGROUND-COLOR: transparent
}
#framesetApp {
	BORDER-LEFT-COLOR: #848594
}
#framesetAll {
	BEHAVIOR: url(#default#userData)
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/dcmdrfrm.css

@import url( app.css );
#divBrowseArea {
	WIDTH: 100%; POSITION: absolute; HEIGHT: 60px
}
#btnBrowse {
	; LEFT: expression((body.clientWidth - this.clientWidth)/2); =
BACKGROUND-IMAGE: url(./images/rumba/B28x130.gif); WIDTH: 130px; ; TOP: =
expression((divBrowseArea.clientHeight - this.clientHeight)/2); HEIGHT: =
28px
}
#activexDicomTreeView {
	BORDER-TOP: black 1px solid; WIDTH: 100%; POSITION: absolute; ; TOP: =
expression(divBrowseArea.clientHeight); ; HEIGHT: =
expression(body.clientHeight - (divBrowseArea.clientHeight + 60))
}
#frameOemLogo {
	BORDER-TOP: black 1px solid; WIDTH: 100%; BOTTOM: 0px; POSITION: =
absolute; ; TOP: expression(body.clientHeight - this.clientHeight); =
HEIGHT: 60px
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
BEHAVIOR: url(btnroll.htc); BORDER-LEFT: 0px; COLOR: #191970; =
BORDER-BOTTOM: 0px; POSITION: absolute; BACKGROUND-COLOR: transparent
}
#framesetApp {
	BORDER-LEFT-COLOR: #848594
}
#framesetAll {
	BEHAVIOR: url(#default#userData)
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/appnotif.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/appnotif.js $
//		$Revision: 7 $
//		$Date: 2/26/03 3:26p $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>


//
// oncontextmenu
//
// Purpose: Forward the oncontextmenu event to the parent document.
//
function document.oncontextmenu()
{
	if (parent !=3D null && parent !=3D this)
	{
		return parent.document.oncontextmenu();
	}
	return false;
}


//
// ShowHelp
//
// Purpose: Forward the onhelp event to the parent window.
//          If the window has no parent the event bubbles as usual.
//
function ShowHelp()
{
	if (parent !=3D null && parent.ShowHelp !=3D null)
	{
		return parent.ShowHelp();
	}
}


//
// onhelp
//
// Purpose: Catch the onhelp event and forward it to 'ShowHelp'.
//          This helper function is needed to trap the 'F1' key.
//
function window.onhelp()
{
	return ShowHelp();
}


//
// GetISettings()
//
function GetISettings()
{
	if (parent =3D=3D null || parent.GetISettings =3D=3D null)
		return null;

	return parent.GetISettings();
}


var app =3D null;

//
// GetApp()
//
function GetApp()
{
	if (app =3D=3D null && parent !=3D null)
	{
		var p =3D parent;
		while (p !=3D null && p.GetApp =3D=3D null)
		{
			p =3D p.parent;
		}
		app =3D p.GetApp();
	}
	return app;
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/oemlogo.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/oemlogo.js $
//		$Revision: 5 $
//		$Date: 3/04/03 11:47a $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>


//
// onload
//
// Purpose: Initialise the 'oemlogo' component.
//
function window.onload()
{
	var settings =3D parent.GetISettings();
	if (settings =3D=3D null)
		return;

	imgOemLogo.src   =3D "images/" + settings.config.ProvidedByPicture();
	imgOemLogo.title =3D GetApp().GetLocaleString('dlgAbout.title') + " " + =
settings.GetConfigurationItem('APP_NAME');
}


//
// OnOemLogoClick
//
function OnOemLogoClick()
{
	parent.ShowAboutDialog();
}



------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\oemlogo.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
		Copyright (c) 2001 General Electric Company

		Version control:
				$Archive: /dev/src/WebViewer/FreeViewer/HTML/oemlogo.htm $
				$Revision: 7 $
				$Date: 3/11/02 4:56p $
				$Author: Marceld $
--><HTML><HEAD><TITLE></TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250"><LINK=20
href=3D"file:///D:/RA/app.css" type=3Dtext/css rel=3Dstylesheet>
<SCRIPT src=3D"file:///D:/RA/appnotif.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/oemlogo.js" =
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" name=3DGENERATOR></HEAD>
<BODY style=3D"TEXT-ALIGN: center" tabIndex=3D-1><IMG id=3DimgOemLogo =
title=3D""=20
style=3D"CURSOR: hand" onclick=3DOnOemLogoClick(); tabIndex=3D-1 =
alt=3DOemLogo src=3D"">=20
</BODY></HTML>

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/dcmdrfrm.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/dcmdrfrm.js $
//		$Revision: 15 $
//		$Date: 3/05/03 6:47p $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>


//
// onload
//
function window.onload()
{
	if (!HasErrors())
	{
		try
		{
			var Index =3D location.href.lastIndexOf("/");
			var strApplicationDataURL =3D unescape(location.href.slice(0, =
Index));
=09
			activexDicomTreeView.strApplicationDataURL =3D strApplicationDataURL;
			activexDicomTreeView.SetLocaleDbAndId(GetApp().localedb.GetXMLDb(), =
GetApp().config.LocaleId())
		}
		catch(e)
		{
		}
	}
}


//
// HasErrors
//
function HasErrors()
{
	try
	{
		return ((typeof(activexDicomTreeView) !=3D 'object') ||
			    (activexDicomTreeView.object =3D=3D null) ||
				(activexDicomTreeView.readyState !=3D 4));
	}
	catch (e)
	{
		return true;
	}
}


//
// GetErrorText
//
// Purpose: Return the error description or an empty string when there =
is no error.
//
function GetErrorText()
{
	if (HasErrors())
	{
		return GetApp().GetLocaleString('msgCannotLoadDicomDirTreeView');
	}
	else
	{
		return '';
	}
}


//
// ShowAboutDialog
//
function ShowAboutDialog()
{
	parent.ShowAboutDialog();
}


//
// GetImagePath
//
function GetImagePath(index)
{
	return activexDicomTreeView.ImagePath(index);
}


//
// FireOnSelectionChanged();
//
function FireOnSelectionChanged()
{
	if (window.onselectionchanged !=3D null)=20
		onselectionchanged();
}


//
// FireOnBrowseMode
//
function FireOnBrowseMode()
{
	if (window.onbrowsemode !=3D null)=20
		onbrowsemode();
}


//
// FireOnNewDicomFileSetLoaded
//
function FireOnNewDicomFileSetLoaded()
{
	if (window.onnewdicomfilesetloaded !=3D null)=20
		onnewdicomfilesetloaded();
}


//
// FireOnStudyChanged
//
function FireOnStudyChanged()
{
	if (window.onstudychanged !=3D null)=20
		onstudychanged();
}


//
// FireOnSeriesChanged
//
function FireOnSeriesChanged()
{
	if (window.onserieschanged !=3D null)=20
		onserieschanged();
}


//
// OnButtonBrowseClick
//
function OnButtonBrowseClick()
{
	// Notify clients that that the user enters the browse dialog.
	FireOnBrowseMode();

	activexDicomTreeView.Browse();
}


//
// OnNewDicomFileSetLoaded
//
// Purpose: use the event that a new dicom file-set is loaded to select =
the first
//          image in this file-set.
//
function OnNewDicomFileSetLoaded()
{
	FireOnNewDicomFileSetLoaded();
	activexDicomTreeView.SelectFirstImageInDicomDir();
}


//
// SetImagesToHighlight
//
function SetImagesToHighlight(cImage)
{
	activexDicomTreeView.ImagesToHighlight =3D cImage;
}


//
// SetDicomDirPath
//
function SetDicomDirPath(strPath)
{
	activexDicomTreeView.DicomDirPath =3D strPath;
	activexDicomTreeView.SelectFirstImageInDicomDir();
}


//
// SelectNextImagesInSeries
//
function SelectNextImagesInSeries(nCount)
{
	activexDicomTreeView.SelectNextImagesInSeries(nCount);
}


//
// SelectPreviousImagesInSeries
//
function SelectPreviousImagesInSeries(nCount)
{
	activexDicomTreeView.SelectPreviousImagesInSeries(nCount);
}

//
// IsImageSelected
//
function IsImageSelected()
{
	return activexDicomTreeView.IsImageSelected;
}


//
// HasNextImageInSeries
//
function HasNextImageInSeries()
{
	return activexDicomTreeView.HasNextImageInSeries;
}


//
// HasPreviousImageInSeries
//
function HasPreviousImageInSeries()
{
	return activexDicomTreeView.HasPreviousImageInSeries;
}


//
// SelectFirstImageInSeries
//
function SelectFirstImageInSeries()
{
	return activexDicomTreeView.SelectFirstImageInSeries();
}


//
// GetSeriesCount
//
function GetSeriesCount()
{
	return activexDicomTreeView.SeriesCount;
}


//
// GetActiveSeriesIndex
//
function GetActiveSeriesIndex()
{
	return activexDicomTreeView.ActiveSeriesIndex;
}


//
// GetPresentationStateCount
//
function GetPresentationStateCount()
{
	return (activexDicomTreeView.PresentationStateCount);
}


//
// GetPresentationStateLabel
//
function GetPresentationStateLabel(index)
{
	return (activexDicomTreeView.GetPresentationStateLabel(index));
}


//
// GetPresentationStateDescription
//
function GetPresentationStateDescription(index)
{
	return (activexDicomTreeView.GetPresentationStateDescription(index));
}


//
// GetPresentationStateFilename
//
function GetPresentationStateFilename(index, uid)
{
	return index ? activexDicomTreeView.GetPresentationStateFilename(index =
- 1, uid) : "";
}

//
// GetImageInstanceUID
//
function GetImageInstanceUID(index)
{
	return activexDicomTreeView.ImageInstanceUID(index);
}

//
// SetActiveImages
//
function SetActiveImages(nSeriesIndex, nViewportIndex, nViewports)
{
	if (nSeriesIndex !=3D -1)
	{
		activexDicomTreeView.SetActiveImages(nSeriesIndex, nViewportIndex, =
nViewports);
	}
}

//
// GetActiveImageIndex
//
function GetActiveImageIndex()
{
	return activexDicomTreeView.ActiveImageIndex;
}

//
// GetActiveModality
//
function GetActiveModality()
{
	return activexDicomTreeView.ActiveModality;
}

//
// SelectPreviousSeries
//
function SelectPreviousSeries()
{
	activexDicomTreeView.SelectPreviousSeriesInStudy();
}

//
// SelectNextSeries
//
function SelectNextSeries()
{
	activexDicomTreeView.SelectNextSeriesInStudy();
}

//
// HasPreviousSeries
//
function HasPreviousSeries()
{
	return activexDicomTreeView.HasPreviousSeriesInStudy;
}

//
// HasNextSeries
//
function HasNextSeries()
{
	return activexDicomTreeView.HasNextSeriesInStudy;
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/vrstrvw.js

//
//  (C) 2001 Applicare Medical Imaging B.V.
//
//  Version control:
//       $Archive: =
/dev/src/WebViewer/FreeViewer/HTML/versionamidicomdirtreeview.js $
//      $Revision: 2 $
//          $Date: 4-07-01 17:51 $
//        $Author: Victord $
//
//  Helper comment to enable syntax coloring in InterDev: <script>

var strVersion =3D "6,0,635,48"; // control version
// do not edit the previous line; edited by the Build script


------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\dcmdrfrm.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
    Copyright (c) 2001 General Electric Company

    Version control:
         $Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/dcmdrfrm.htm $
        $Revision: 16 $
            $Date: 3/05/03 6:47p $
          $Author: Marceld $
--><HTML><HEAD><TITLE>dicomdirframe</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250"><LINK=20
href=3D"file:///D:/RA/dcmdrfrm.css" type=3Dtext/css rel=3Dstylesheet>
<SCRIPT src=3D"file:///D:/RA/appnotif.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/dcmdrfrm.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/vrstrvw.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT language=3Djavascript event=3Donselectionchanged =
for=3DactivexDicomTreeView=20
type=3Dtext/javascript>
      FireOnSelectionChanged();
    </SCRIPT>

<SCRIPT language=3Djavascript event=3Donnewdicomfilesetloaded=20
for=3DactivexDicomTreeView type=3Dtext/javascript>
      OnNewDicomFileSetLoaded();
    </SCRIPT>

<SCRIPT language=3Djavascript event=3Donstudychanged =
for=3DactivexDicomTreeView=20
type=3Dtext/javascript>
      FireOnStudyChanged();
    </SCRIPT>

<SCRIPT language=3Djavascript event=3Donserieschanged =
for=3DactivexDicomTreeView=20
type=3Dtext/javascript>
      FireOnSeriesChanged();
    </SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" name=3DGENERATOR></HEAD>
<BODY tabIndex=3D-1>
<DIV id=3DdivBrowseArea style=3D"POSITION: absolute; TOP: 0px; HEIGHT: =
40px"=20
tabIndex=3D-1><BUTTON id=3DbtnBrowse title=3D"Browse for a different =
DICOM file set"=20
onclick=3DOnButtonBrowseClick()>Browse</BUTTON> </DIV>
<SCRIPT type=3Dtext/javascript>
      /*<![CDATA[*/
      var strDicomTreeViewObject =3D '<object id =
=3D"activexDicomTreeView"' +
                                   '        class =3D =
"classDicomTreeView"' +
                                   '        type    =
=3D"application/x-oleobject"' +
                                   '        classid =
=3D"clsid:FC11A119-C2F7-46f4-9E32-937ABA26816E"' +
                                   '        =
codebase=3D"CdViewer.cab#version=3D' + strVersion + '">' +
                                   '</object>';

      document.writeln(strDicomTreeViewObject);
      /*]]>*/
    </SCRIPT>
<IFRAME id=3DframeOemLogo marginWidth=3D0 marginHeight=3D0=20
src=3D"file://D:\RA\oemlogo.htm" frameBorder=3D0>
    </IFRAME></BODY></HTML>

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp1x1.gif

R0lGODlhFgAWAIAAAP//7wAzMyH5BAAAAAAALAAAAAAWABYAAAIthI+pFu0PIYs0zorDzXRzCXyV
JzZkeYrpt3Jt9mLxGJagfePO3NW65tMthsMCADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp1x2.gif

R0lGODlhFgAWAIAAAP//7wAzMyH5BAAAAAAALAAAAAAWABYAAAI2hI+pFu0OnjzyxdooDhdrv3HM
1lWfGZ5TOoJki77lKqfsbN12Teo97/LAaEIcxBc0LZbMprMAADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp1x3.gif

R0lGODdhFgAWAPcAAP//7wAzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAhfAAEIHEiwoEGBARIqBKBwYcOECB8ylPgwQMSGEzFWvOiQosSMHTV+3EhypEeRGEFCLJmSZciF
Ki26hBiz5kabJ2HOlGkS5UuaO2vi9Ak058qeP3m2NKpUJ1OhB6MaDAgAOw==

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp2x1.gif

R0lGODdhFgAWAPcAAP//7wAzMwAAOAgTAAkAAAB2AHAAMQB4ADIALgBnAGkAZgAAALg5+Hf/////
FPoSABa1/Hcttfx3ZPoSAGz6EgAAAAAAePgSAAACAAA0+hIAlSv4d7g5+Hf/////RPoSABa1/Hct
tfx3AAAAAID6EgBABhMA6wrid0e/4ncYElUAQHAXAEBwFwBMtON3QHAXAAAAAAAAAAAAQHAXAKx+
4ndABhMA6Bc7ABgSVQBEouN3YAZ5AAUAAAAAAAAA5gEbAAUAAADNq7rcPPkSAGJj4XfAuEAAY7L4
dxgAAABU+RIAJAAAAHA5+HcAABMASA0TACQAAABoaxMALPkSAAACAADo+hIAlSv4d7g5+Hf/////
+PoSACey/HdIDRMAAAAAAAAAAACoc0gAKDMUAKD5EgAAAAAA5Tj4dwAAEwBgfxcAAAAAAHz5EgCI
BhMAMPoSAJUr+HcgOfh3/////0D6EgBAt/x32AcTAGh/FwB8fxcAaH8XAAEAAAAIfRcACNRdABh/
FwBcARMAAAAIAgkAAAB2AHgAoVP4d5Dx/HeGU/h3qGYTAIhmEwB8fxcAAAAAAAAAAAA4+hIAlSv4
d0hU+Hf/////SPoSAAAAEwAHAAAAAH8XAGh/FwABAAAAAWYTABDw/Hew+RIAgPoSAID6EgCVK/h3
GDb4d/////+Q+hIAiVfpdwAAEwAAAAAAAQAAAF7P4XcAAAAAAQAAAADg/X92AHgACH0XAGh/FwAA
AAAAMAEAAFT6EgAAAAAAsP8SAGwT7XdoHuh3/////xg2+HdsTkMAaH8XAAAAEwAAAAAAIQAAAASo
Xzhl4sIBACGl+CQAAAAsg2mNYzfCAQAAAABfAAAAOAgTAAkAAAB2cDF4aGsTACABAAAZuUAAIAYu
ACAGLgA0+xIAlSv4dwg2+Hf/////RPsSADaR6HcAABMACAAUABgBAABez+F3AAAAAAAAAAAAAAAA
AAAAAOTCRACgaxMAjMYVAKRrEwDkc0gA/////2hrEwBOw0QAoGsTACH5BAAAAAAALAAAAAAWABYA
QAhNAAEIHEiwoEGBARIqXMhw4cCGEBs+jEgxwMSKEC9iZKhxo8KOHi0iDOlwJMmEID0eXMkSwMmP
Jk+m3DgTY8ubBF+ijEmyZkWfFHHiDAgAOw==

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp2x2.gif

R0lGODlhFgAWAIAAAP//7wAzMyH5BAAAAAAALAAAAAAWABYAAAI2hI+pFu0OnjzyxdooDhdrv3HM
1lWfGZ5TOoJki77LPKdsucq2Tt67B8sBcRZfj+ca0pbMJqAAADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp2x3.gif

R0lGODlhFgAWAIAAAP//7wAzMywAAAAAFgAWAAACQISPqRfd4F4MacJ4XcXWos5hX6h5DCmJZ4lS
Iws/bxq7y41n9G4bYL0BmnwtXc+IHCaLM8pPtuIhm0tN7orNFgAAOw==

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp2x4.gif

R0lGODdhFgAWAPcAAP//7wAzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAhhAAEIHEiwoEGBARIGAKBwYUOGCgc+nBjxIcKKGBNC1HhRI0WPETs6zDiS48aSKE9KJKnSYkuW
Lj+mdHmw5kGZL03ixCkyZ8qeO0P6HAoUptCgIHUaTbqwKFOVNqNKnTowIAA7

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp2x5.gif

R0lGODdhFgAWAPcAAAAzM///7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAheAAMIHEiwoEGBABIGSAhgoUKGDhsifEixIUSIEy1WjMgxI8eLGz2C1Ehy4MiPIVGWPClyI0uV
MDEenDnzpE2FLVemvKlTYkyXOH/2NAl0aE6hRIe+5AmTptOnUAcGBAA7

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp3x1.gif

R0lGODdhFgAWAPcAAP//7wAzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAhKAAEIHEiwoEGBARIqXMiQIcKGEBs+jEgxwMSKEC9idAhgY8SDIEN6zNhxJEeTJ1Eq1GiS5ciQ
MAuqXFlypkuPNzfmxLizYsyfAQEAOw==

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp3x3.gif

R0lGODlhFgAWAIAAAP//7wAzMyH5BAAAAAAALAAAAAAWABYAAAI9hI+pFu3gXmxsQjtDjZfnLWFW
F3rjh47LuqQmR1LuE2szVeefLsK3rWIJQbIe7ZfjvY7Goq8JfC6dtKGwAAA7

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp3x4.gif

R0lGODdhFgAWAPcAAP//7wAzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAhgAAEIHEiwoEGBARIGAKBwYUOGCgc+nBjxIcKKGBNC1HhRI0WPETs6zDiS48aSKE8eXMlS5ceU
Il2SlDjzJU2QOGHKzKkypk2LLYP6rBlyZ0qgP2cO5YmUKM+lR4sKZRkQADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/vp4x5.gif

R0lGODdhFgAWAPcAAAAzM///7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAWABYA
AAhdAAMIHEiwoEGBABIGSAhgoUKGDhsifEixIUSIEy1WjMgxI8eLGw+KHAlSo8mOHzeWHLiypUKP
Lk+OnFkwZkqJN3Ni1KnyJc+TO2nStLkSZk+ZP3MaBRpSqNOnBQMCADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/series11.gif

R0lGODlhFgAWAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/
/////////////////3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393
d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d3
93d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3d393d3
d393d3d393d3d393d3d393d3d393d////////////y8CAQgBASMBeCMBeAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAA0ALAAAAAAWABYA
BwhLABsIHEiwoEGBBxIqXMiQIcKGEBs+jEjxwMSKEC9idNhgY0SNHhOCDDnSY8mNJzGmrLiSYsuP
HUNylDmTpsKXGWPatKjT5sGfPwMCADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/series12.gif

R0lGODlhFgAWAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwNTQyEAgAGAgAIAgAKAgAMAg
AOAgAABAACBAAEBAAGBAAIBAAKBAAMBAAOBAAABgACBgAEBgAGBgAIBgAKBgAMBgAOBgAACAACCA
AECAAGCAAICAAKCAAMCAAOCAAACgACCgAECgAGCgAICgAKCgAMCgAOCgAADAACDAAEDAAGDAAIDA
AKDAAMDAAODAAADgACDgAEDgAGDgAIDgAKDgAMDgAODgAAAAQCAAQEAAQGAAQIAAQKAAQMAAQOAA
QAAgQCAgQEAgQGAgQIAgQKAgQMAgQOAgQABAQCBAQEBAQGBAQIBAQKBAQMBAQOBAQABgQCBgQEBg
QGBgQIBgQKBgQMBgQOBgQACAQCCAQECAQGCAQICAQKCAQMCAQOCAQACgQCCgQECgQGCgQICgQKCg
QMCgQOCgQADAQCDAQEDAQGDAQIDAQKDAQMDAQODAQADgQCDgQEDgQGDgQIDgQKDgQMDgQODgQAAA
gCAAgEAAgGAAgIAAgKAAgMAAgOAAgAAggCAggEAggGAggIAggKAggMAggOAggABAgCBAgEBAgGBA
gIBAgKBAgMBAgOBAgABggCBggEBggGBggIBggKBggMBggOBggACAgCCAgECAgGCAgICAgKCAgMCA
gOCAgACggCCggECggGCggICggKCggMCggOCggADAgCDAgEDAgGDAgIDAgKDAgMDAgODAgADggCDg
gEDggGDggIDggKDggMDggODggAAAwCAAwEAAwGAAwIAAwKAAwMAAwOAAwAAgwCAgwEAgwGAgwIAg
wKAgwMAgwOAgwABAwCBAwEBAwGBAwIBAwKBAwMBAwOBAwABgwCBgwEBgwGBgwIBgwKBgwMBgwOBg
wACAwCCAwECAwGCAwICAwKCAwMCAwOCAwACgwCCgwECgwGCgwICgwKCgwMCgwOCgwADAwCDAwEDA
wGDAwIDAwKDAwP/78DpupYCAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP0ALAAAAAAWABYA
AAhnAPsJHEiwoEGBpBIqTNiPVMOFCgdCjOhwIkOEFhs+nCgxY8WMGDl+5BgSokaLDksuPAlyo8mR
JlVSdLlSJkOYNWnORNlRpM6LPysG7flyqE2hPI+yJDkUZ0SlToHyjJryoNWrWLEGBAA7

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: file:///D:/RA/images/rumba/series21.gif

R0lGODlhFgAWAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwNTQyEAgAGAgAIAgAKAgAMAg
AOAgAABAACBAAEBAAGBAAIBAAKBAAMBAAOBAAABgACBgAEBgAGBgAIBgAKBgAMBgAOBgAACAACCA
AECAAGCAAICAAKCAAMCAAOCAAACgACCgAECgAGCgAICgAKCgAMCgAOCgAADAACDAAEDAAGDAAIDA
AKDAAMDAAODAAADgACDgAEDgAGDgAIDgAKDgAMDgAODgAAAAQCAAQEAAQGAAQIAAQKAAQMAAQOAA
QAAgQCAgQEAgQGAgQIAgQKAgQMAgQOAgQABAQCBAQEBAQGBAQIBAQKBAQMBAQOBAQABgQCBgQEBg
QGBgQIBgQKBgQMBgQOBgQACAQCCAQECAQGCAQICAQKCAQMCAQOCAQACgQCCgQECgQGCgQICgQKCg
QMCgQOCgQADAQCDAQEDAQGDAQIDAQKDAQMDAQODAQADgQCDgQEDgQGDgQIDgQKDgQMDgQODgQAAA
gCAAgEAAgGAAgIAAgKAAgMAAgOAAgAAggCAggEAggGAggIAggKAggMAggOAggABAgCBAgEBAgGBA
gIBAgKBAgMBAgOBAgABggCBggEBggGBggIBggKBggMBggOBggACAgCCAgECAgGCAgICAgKCAgMCA
gOCAgACggCCggECggGCggICggKCggMCggOCggADAgCDAgEDAgGDAgIDAgKDAgMDAgODAgADggCDg
gEDggGDggIDggKDggMDggODggAAAwCAAwEAAwGAAwIAAwKAAwMAAwOAAwAAgwCAgwEAgwGAgwIAg
wKAgwMAgwOAgwABAwCBAwEBAwGBAwIBAwKBAwMBAwOBAwABgwCBgwEBgwGBgwIBgwKBgwMBgwOBg
wACAwCCAwECAwGCAwICAwKCAwMCAwOCAwACgwCCgwECgwGCgwICgwKCgwMCgwOCgwADAwCDAwEDA
wGDAwIDAwKDAwP/78DpupYCAgP8AAAD/AP//AAAA//8A/wD//////yH5BAEAAP0ALAAAAAAWABYA
QAhLAPsJHEiwoEGBpBIqXMhw4cCGEBs+jEiR1MGLGPtVpDhxo0SEHj9mHAkypMOSJhOSXJnypMaW
KlGm7NiS5kyZJm3mxBlSZ8+VGQMCADs=

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/viewctrl.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN-TOP: 5px; FONT-WEIGHT: bold; =
FONT-SIZE: 11px; BACKGROUND-IMAGE: url(./images/rumba/B28x28.gif); =
BEHAVIOR: url(btnroll.htc); MARGIN-LEFT: 5px; BORDER-LEFT: 0px; WIDTH: =
28px; COLOR: #191970; BORDER-BOTTOM: 0px; ; TOP: =
expression((body.clientHeight - this.clientHeight)/2); HEIGHT: 28px; =
BACKGROUND-COLOR: transparent
}
SPAN {
	MARGIN-TOP: 1px; FONT-SIZE: 10px; MARGIN-BOTTOM: 1px
}
BUTTON DIV {
	WIDTH: 23px; HEIGHT: 23px
}
#btnPropagate {
	BACKGROUND-IMAGE: url(./images/rumba/B28x130.gif); WIDTH: 130px
}
#listPresentationStates {
	WIDTH: 160px; ; TOP: expression((body.clientHeight - =
this.clientHeight)/2)
}
#listWindowPreset {
	WIDTH: 140px; ; TOP: expression((body.clientHeight - =
this.clientHeight)/2)
}
#btnHelp {
	RIGHT: 10px; BACKGROUND: url(./images/rumba/ShowHlp.gif); WIDTH: 20px; =
POSITION: absolute; HEIGHT: 20px
}
.classPlayImage {
	BACKGROUND: url(./images/rumba/CineOn.gif)
}
.classStopImage {
	BACKGROUND: url(./images/rumba/CineOff.gif)
}
#divPrevImage {
	BACKGROUND: url(./images/rumba/PvImage.gif)
}
#divNextImage {
	BACKGROUND: url(./images/rumba/NxImage.gif)
}
#divPrevPage {
	BACKGROUND: url(./images/rumba/PvPage.gif)
}
#divNextPage {
	BACKGROUND: url(./images/rumba/NxPage.gif)
}
#divPrevSeries {
	BACKGROUND: url(./images/rumba/PvSeries.gif)
}
#divNextSeries {
	BACKGROUND: url(./images/rumba/NxSeries.gif)
}
#divViewportLayout {
	BACKGROUND: url(./images/rumba/VpTab.gif)
}
#divSeriesLayout {
	BACKGROUND: url(./images/rumba/SeriesTb.gif)
}
#divDecreaseSpeed {
	BACKGROUND: url(./images/rumba/Minus.gif)
}
#divIncreaseSpeed {
	BACKGROUND: url(./images/rumba/Plus.gif)
}
#checkboxAnnotations {
=09
}
#labelAnnotations {
=09
}
#divAnnotations {
	TEXT-ALIGN: right
}
#tblSpeed {
	DISPLAY: inline
}
.classDisabled {
	FILTER: progid:DXImageTransform.Microsoft.Alpha(opacity=3D50)
}
#tblSeriesPopup {
	BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; =
BORDER-LEFT: black 2px solid; BORDER-BOTTOM: black 2px solid
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/util.js

//
//	(C) 1998 Applicare Medical Imaging B.V.
//
//	Version control:
//		 $Archive: /dev/src/WebViewer/Content/NoCache/util.js $
//		$Revision: 77 $
//		    $Date: 6/06/02 5:10p $
//		  $Author: Michaeld $
//
// <SCRIPT>



var rexFnName =3D /function\s(.*)\x28/;


//
// GetFnName
//
function GetFnName(fn)
{
	if (fn =3D=3D null)
		return "";

	rexFnName.exec(fn.toString());
	return RegExp.$1;
}

//
// DeriveFrom
//
function DeriveFrom(ctorDerived, ctorBase)
{
	var prot1 =3D ctorBase.prototype;
	var prot2 =3D ctorDerived.prototype;

	for (var prop in prot1)
	{
		if (prot2[prop] =3D=3D null)
		{
			prot2[prop] =3D prot1[prop];
		}
	}

	var strBaseCTor =3D "Ctor" + GetFnName(ctorBase);
=09
	if (ctorDerived.toString().search(strBaseCTor) < 0)
	{
		// if you get here, ctorDerived does not call the base class CTor
		debugger;
	}
	prot2[strBaseCTor] =3D ctorBase;
}



function GetFrameElement(frame)
{
	var frameElements =3D frame.parent.document.all.tags("IFRAME");
	for (var iframe =3D 0; iframe < frameElements.length; iframe++ )
	{
		var elem =3D frameElements(iframe);

		if (frame.parent.frames(elem.id) =3D=3D frame)
			return elem;
	}
	var frameElements =3D frame.parent.document.all.tags("FRAME");
	for (var iframe =3D 0; iframe < frameElements.length; iframe++ )
	{
		var elem =3D frameElements(iframe);

		if (frame.parent.frames(elem.id) =3D=3D frame)
			return elem;
	}
=09
}

//
// function testHTML
//
// Purpose:=20
// Ret:
function TestHTML(strHTML)
{
	var xmldoc =3D new ActiveXObject("Microsoft.XMLDOM");
	xmldoc.async =3D false;
	if (!xmldoc.loadXML(strHTML))
	{
		alert(xmldoc.parseError.reason +"\n" +
			xmldoc.parseError.srcText);
	}
}


//
// CreateXmlDoc
//
function CreateXmlDoc(oSrc, bShowError /* =3D true */, bResolveExternals =
/*=3Dfalse*/)
{
	if (bShowError =3D=3D null)
	{
		bShowError =3D true;
	}

	var xmlResult =3D new ActiveXObject('MSXML.DOMDocument');
	xmlResult.async =3D false;
	xmlResult.validateOnParse =3D false;
	xmlResult.resolveExternals =3D (bResolveExternals =3D=3D true);

	if (oSrc =3D=3D null)
		return xmlResult;

	var bLoaded =3D false;

	if (typeof(oSrc) =3D=3D 'string' && oSrc.match('\s*<') !=3D null)	// =
oSrc is XML string
	{
		bLoaded =3D xmlResult.loadXML(oSrc);
	}
	else								// oSrc is path or stream or domdocument
	{
		bLoaded =3D xmlResult.load(oSrc);
	}
	if (!bLoaded)
	{
		if (bShowError)
		{
			ShowXmlError(xmlResult);
		}
		return null;
	}
	return xmlResult;
}

//
// ShowXmlError
//
function ShowXmlError(doc)
{
	TRACE('error parsing xml: ' + doc.parseError.reason + '\n' + =
doc.parseError.srcText);
	if (doc.parseError.filepos =3D=3D 0)	// could not load xml file, =
connection to server lost
	{
		_global.ShowUserError(101, this);
	}
	else
	{
		_global.ShowUserErrorText(GetLocaleString('msgUnexpected'), this);
	}
}


//-----------------------------------------------------------------------=
-------
// Date related functions
//-----------------------------------------------------------------------=
-------

//
// ValidateDate
//
// Purpose: Validate a date. Only valid, fully specified dates are =
accepted.
//
function ValidateDate(strDate)
{
	return ToDicomDate(strDate) !=3D null;
}

//
// ToDicomDate
//
// Purpose: Convert a date to Dicom format. Only valid, fully specified
// dates are converted. Return null if the date is invalid.
//
function ToDicomDate(strDate)
{
	var strResult;
	var bValid;
	var nYear;
	var nMonth;
	var nDay;
	var strLocalToday;
	var strLocalYesterday;

	if(strDate =3D=3D null)
	{
		return null;
	}

	bValid =3D false;
	strResult =3D null;
	strLocalToday =3D GetLocaleString('msgToday').toLowerCase();
	strLocalYesterday =3D GetLocaleString('msgYesterday').toLowerCase();
	strDate =3D strDate.toLowerCase();

	// Do not accept month/year combination as valid date (SCR: 3740)
	if (strDate.match(/^([0-9]+)[\.-\/]([0-9]+)$/))=20
		return null;

	// Date with slashes or dashes: yyyy/mm/dd or yyyy-mm-dd or yyyy.mm.dd
	// 1999/12/31 -> 19991231
	if(r =3D strDate.match(/^([0-9]+)[\.-\/]([0-9]+)[\.-\/]([0-9]+)$/))
	{
		// Attempt generic yyyy/mm/dd format.
		nYear =3D parseInt(r[1], 10);
		nMonth =3D parseInt(r[2], 10);
		nDay =3D parseInt(r[3], 10);
		bValid =3D ValidateYearMonthDay(nYear, nMonth, nDay);
		strResult =3D ToDicomDateString(nYear, nMonth, nDay);
	}
	// DICOM dates: yyyymmdd=20
	// no convertion needed, still check ranges.
	else if(r =3D strDate.match(/^([0-9]{4})([0-9]{2})([0-9]{2})$/))
	{
		nYear =3D parseInt(r[1], 10);
		nMonth =3D parseInt(r[2], 10);
		nDay =3D parseInt(r[3], 10);
		bValid =3D ValidateYearMonthDay(nYear, nMonth, nDay);
		strResult =3D strDate;
	}
	else if(strDate =3D=3D strLocalToday)
	{
		strResult =3D DicomToday();
		bValid =3D true;
	}
	else if(strDate =3D=3D strLocalYesterday)
	{
		strResult =3D DicomYesterday();
		bValid =3D true;
	}

	// Try locale format dates if generic convertion fails.
	if(!bValid)
	{
		strResult =3D LocaleToDicomDate(strDate);
		bValid =3D strResult !=3D null;
	}

	return bValid ? strResult : null;
}

//
// DicomToday
//=20
// Return a DICOM format date for today.
//
function DicomToday()
{
	var date =3D new Date;
	return ToDicomDateString(date.getFullYear(), date.getMonth() + 1, =
date.getDate());
}

//
// DicomYesterday
//=20
// Return a DICOM format date for yesterday.
//

function DicomYesterday()
{
	var date =3D new Date;
	var nYear  =3D date.getFullYear();
	var nMonth =3D date.getMonth() + 1;
	var nDay  =3D date.getDate() - 1;=20

	if (nDay =3D=3D 0)
	{
		nMonth--;=09
		if (nMonth =3D=3D 0)
		{
			nYear--;
			nMonth =3D 12;
		}
		nDay =3D DaysInMonth(nYear, nMonth);
	}
	return ToDicomDateString(nYear, nMonth, nDay);
}

//
// ToDicomDateString
//
function ToDicomDateString(nYear, nMonth, nDay)
{
	return ((nYear * 10000) + (nMonth * 100) + nDay).toString();
}

//
// ValidateYearMonthDay
//
function ValidateYearMonthDay(nYear, nMonth, nDay)
{
	bResult =3D=20
		   nYear > 1584  && nYear < 3000
		&& nMonth > 0    && nMonth <=3D 12
		&& nDay > 0      && nDay <=3D DaysInMonth(nYear, nMonth);
	return bResult;
}

//
// IsLeap
//
function IsLeap(nYear)
{
	bResult =3D nYear % 400 =3D=3D 0 || (nYear % 100 !=3D 0 && nYear % 4 =
=3D=3D 0);
	return bResult;
}

//
// DaysInMonth
//
// Return the number of days in a certain month, take care of February =
in leap years.
//
function DaysInMonth(nYear, nMonth)
{
	var daysInMonth =3D new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, =
31, 30, 31);

	return (nMonth =3D=3D 2 && IsLeap(nYear)) ? 29 : daysInMonth[nMonth];
}

//
// LocaleToDicomDate
//
// Convert a string with a date in the locale format
// to a Dicom date. Return NULL if date parsing failed.
//
function LocaleToDicomDate(strDate)
{
	var vtDate =3D _global._viewapp.FromLocaleDate(strDate);
	if(vtDate !=3D null)
	{
		var date =3D new Date(vtDate);
		return ToDicomDateString(date.getFullYear(), date.getMonth() + 1, =
date.getDate());
	}=09
	return null;=09
}

//
// ToLocaleDate
//
function ToLocaleDate(strDate)
{
	return _global._viewapp.ToLocaleDate(strDate);
}

//-----------------------------------------------------------------------=
-------
// Date range related functions
//-----------------------------------------------------------------------=
-------


function ValidateDateFrom(strDate)
{
	return ToDicomDateFrom(strDate) !=3D null;
}


function ValidateDateTo(strDate)
{
	return ToDicomDateTo(strDate) !=3D null;
}

function ToDicomDateFrom(strDate)
{
	if(strDate =3D=3D "")=20
	{
		return "";
	}
	// Handle the case of a year alone.
	if(strDate.match(/^[0-9]{4}$/))
	{
		strDate =3D strDate + "0101";
	}
	return ToDicomDate(strDate);
}

function ToDicomDateTo(strDate)
{
	if(strDate =3D=3D "")
	{
		return "";
	}
	// Handle the case of a year alone.
	if(strDate.match(/^[0-9]{4}$/))
	{
		strDate =3D strDate + "1231";
	}
	return ToDicomDate(strDate);
}


//
// ValidateDateRange
//=20
// Purpose: Validate a date range, format is checked and range are =
checked.
//
function ValidateDateRange(strDateRange)
{
	return ToDicomDateRange(strDateRange) !=3D null;
}

//
// ValidateDateRangeRestriction
//=20
// Purpose: Validate a date range, format is checked and ranges are =
checked.
// against the restricted range. The range should fit in the =
restriction. Open
// ranges are optionally allowed, as they can be restricted to the range =
anyway.
// Since a date range can be a single date, this function can also be =
used to
// check single dates against the date range.
//
function ValidateDateRangeRestriction(strDateRange, strDateRestriction, =
bAllowOpen)
{
	strDateRange =3D ToDicomDateRange(strDateRange);
	strDateRestriction =3D ToDicomDateRange(strDateRestriction);

	if(strDateRange =3D=3D null || strDateRestriction =3D=3D null)
	{
		return false;
	}
	if(strDateRange =3D=3D '')
	{
		return strDateRestriction =3D=3D '';
	}

	var r =3D SplitDateRange(strDateRestriction);
	var strFromRestriction =3D r[0];
	var strToRestriction   =3D r[1];
=09
	r =3D SplitDateRange(strDateRange);
	var strFrom =3D r[0];
	var strTo   =3D r[1];

	var bResult =3D true;
	if(strFrom && strFromRestriction)
	{
		bResult =3D bResult && strFrom >=3D strFromRestriction;
	}
	if(strFrom && strToRestriction)
	{
		bResult =3D bResult && strFrom <=3D strToRestriction;
	}=09
	if(strTo && strToRestriction)
	{
		bResult =3D bResult && strTo <=3D strToRestriction;
	}=09
	if(strTo && strFromRestriction)
	{
		bResult =3D bResult && strTo >=3D strFromRestriction;
	}=09
	if(!bAllowOpen && (strFrom =3D=3D null || strFrom =3D=3D "") && =
strFromRestriction && strFromRestriction !=3D "")
	{
		return false;
	}
	if(!bAllowOpen && (strTo =3D=3D null || strTo =3D=3D "") && =
strToRestriction && strToRestriction !=3D "")
	{
		return false;
	}

	return bResult;
}

//
// SplitDateRange
//
// Purpose: split a date range into two parts, return an
// array with the from date in [0] and the to date in [1].
//
function SplitDateRange(strDateRange)
{
	var strTo =3D '';
	var strFrom =3D '';
	var strDash =3D '-';
=09
	// Remove all space characters
	strDateRange =3D strDateRange.replace(/ /g, '')

	// Split date with dashes
	// 4 Digit year last.
	if(r =3D =
strDateRange.match(/^([0-9]+[-\.\/][0-9]+[-\.\/][0-9]+)-([0-9]{4})$/))
	{
		strFrom =3D r[1];
		strTo =3D r[2];
	}
	// 4 Digit year first
	else if(r =3D =
strDateRange.match(/^([0-9]{4})-([0-9]+[-\.\/][0-9]+[-\.\/][0-9]+)$/))
	{
		strFrom =3D r[1];
		strTo =3D r[2];
	}
	// Dashed date first
	else if(r =3D =
strDateRange.match(/^([0-9]+[-\.\/][0-9]+[-\.\/][0-9]+)-(.*)$/))
	{
		strFrom =3D r[1];
		strTo =3D r[2];
	}
	// Dashed date last
	else if(r =3D =
strDateRange.match(/^(.*)-([0-9]+[-\.\/][0-9]+[-\.\/][0-9]+)$/))
	{
		strFrom =3D r[1];
		strTo =3D r[2];
	}
	// SCR: 2822 - Check for two dashed date.=20
	else if(r =3D strDateRange.match(/^(.*)-(.*)-(.*)$/))
	{
		strTo =3D strFrom =3D strDateRange;
		strDash =3D '';
	}
	// Split on dash.
	else if(r =3D strDateRange.match(/^(.*)-(.*)$/))
	{
		strFrom =3D r[1];
		strTo =3D r[2];
	}
	// Cannot split, assume to is same as from.
	else
	{
		strTo =3D strFrom =3D strDateRange;
		strDash =3D '';
	}

	var result =3D new Array();
	result[0] =3D strFrom;
	result[1] =3D strTo;
	result[2] =3D strDash; // remember that we had a dash.
	return result;
}

//
// ToDicomDateRange
//=20
// Purpose: Convert date range to DICOM date range, format and range is =
checked.
// Return null if the date range cannot be parsed or is invalid.
// The date range has the format yyyymmdd-yyyymmdd, -yyyymmdd, or =
yyyymmdd-
//
function ToDicomDateRange(strDateRange)
{
	if(strDateRange =3D=3D "" || strDateRange =3D=3D null)
	{
		return strDateRange;
	}

	var r =3D _global.SplitDateRange(strDateRange);
	var strFrom =3D ToDicomDateFrom(r[0]);
	var strTo   =3D ToDicomDateTo(r[1]);
=09
	// Smallest date first please.
	if(strFrom !=3D "" && strTo !=3D "" && strFrom > strTo)
	{
		strFrom =3D ToDicomDateFrom(r[1]);
		strTo   =3D ToDicomDateTo(r[0]);
	}

	if(strFrom =3D=3D null || strTo =3D=3D null)
	{
		return null;
	}

	return strFrom + "-" + strTo;
}

//-----------------------------------------------------------------------=
-------
// Validate functions
//-----------------------------------------------------------------------=
-------


//
// ValidateValue
//
function ValidateValue(strType, strValue, strRestrValue, strRestr)
{
	// when field is mandatory, no ? wildcards may be used
	if ((strRestr =3D=3D 'mandatory') &&
		(strValue.search(/\?/) !=3D -1))
	{
		return false;
	}

	switch (strType)
	{
	case 'name':
	case 'string':
	case 'number':
	case 'sex':

		if ((strRestrValue !=3D null) && (strRestr !=3D 'open'))
		{
			// TODO: Check against the restriction, using another function:
			// _global.ValidateRestriction(strValue, strRestrValue);

			var rgstrValues =3D strValue.split('\\');
			for (var i =3D 0; i < rgstrValues.length; i++)
			{

				if (!_global.MatchWildcardConcat(rgstrValues[i], strRestrValue))
				{
					return false;
				}
			}
		}
		break;

	case 'date':
		var bResult =3D _global.ValidateDateRange(strValue);
		if(bResult && strRestrValue !=3D null)
		{
			bResult =3D _global.ValidateDateRangeRestriction(strValue, =
strRestrValue);
		}
		return bResult;
		break;

	default:
		_global.ASSERT(false);
		break;
	}

	return true;
}

//-----------------------------------------------------------------------=
----------------


//
// CRowCol ctor
//
function CRowCol(row, col)
{
	this._row =3D	row;
	this._col =3D	col;

	return this;
}


//
// MakeStringSafe
//
function MakeStringSafe(strInput)
{
	var strOutput =3D strInput;=20
	strOutput =3D strOutput.replace(/\\/g, '\\\\');
	strOutput =3D strOutput.replace(/\"/g, '\\"')
	strOutput =3D strOutput.replace(/\'/g, "\\'")

	for	(var ich =3D 0; ich !=3D strInput.length; ich++)
	{
		var ch =3D strInput.charCodeAt(ich);
		if	(ch < 32 || ch > 126)
		{
			var	strHex =3D ch.toString(16);
			if (strHex.length <	2)
			{
				strHex =3D '0' + strHex;
			}
			strOutput =3D strOutput.replace(strInput.charAt(ich), '\\x' + =
strHex);
		}
	}

	return strOutput;
}

DeriveFrom(AttributeSubjectImpl, SubjectImpl);

//
// AttributeSubjectImpl
//
function AttributeSubjectImpl(strFunctionName)
{
	this.CtorSubjectImpl(strFunctionName);

	this.NotifyObservers =3D AttributeSubjectImpl__NotifyObservers;
	this._rgsetting	=3D new Array();
}


//
// AttributeSubjectImpl__NotifyObservers
//
function AttributeSubjectImpl__NotifyObservers(iattribute, setting)
{ with (this) {

	if (_rgsetting[iattribute] =3D=3D=3D setting)
		return;

	TRACE('enter: notify observers of: ' + _strFunctionName);

	for	(var iobserver in _rgobserver)
	{
		_rgobserver[iobserver][_strFunctionName](iattribute, setting, null);
	}

	TRACE('leave: notify observers of: ' + _strFunctionName);

	_rgsetting[iattribute] =3D setting;
}}


//
// SubjectImpl
//
function SubjectImpl(strFunctionName)
{
	if (strFunctionName =3D=3D null)
		this._strFunctionName	=3D "OnNotify";
	else
		this._strFunctionName	=3D strFunctionName;
	this._rgobserver		=3D new Array();
	this.AddObserver		=3D SubjectImpl__AddObserver;
	this.RemoveObserver		=3D SubjectImpl__RemoveObserver;
	this.NotifyObservers	=3D SubjectImpl__NotifyObservers;
}

//
// SubjectImpl__AddObserver
//
function SubjectImpl__AddObserver(observer)
{ with (this) {
	ASSERT(observer[_strFunctionName] !=3D null, window);
	_rgobserver[_rgobserver.length] =3D	observer;
}}

//
// SubjectImpl__RemoveObserver
//
function SubjectImpl__RemoveObserver(observer)
{ with (this) {
	_rgobserver =3D RemoveElem(_rgobserver, observer);
}}


//
// SubjectImpl__NotifyObservers
//
function SubjectImpl__NotifyObservers(p1, p2, p3)
{ with (this) {

	TRACE('enter: notify observers of: ' + _strFunctionName);

	for	(var iobserver in _rgobserver)
	{
		try=20
		{
			_rgobserver[iobserver][_strFunctionName](p1, p2, p3);
		}
		catch (e) { ASSERT(false); }
	}

	TRACE('leave: notify observers of: ' + _strFunctionName);
}}

//
// Observer__OnNotify
//
function Observer__OnNotify(p1, p2, p3)
{ with (this) {
	_observer[_strFnNotify](p1, p2, p3);
}}

//
// ParseURL()
//
function ParseURL(strURL)
{
	var	ichQM	=3D strURL.indexOf('?');
	var	strArgs	=3D ichQM	!=3D -1 ?	strURL.substring(ichQM + 1)	: '';
	var	rgstr	=3D strArgs.split('&');

	var	mpstrNameValue =3D new Object();
	ParseNameValueString(mpstrNameValue, strArgs, '&', '=3D');
	return mpstrNameValue;
}


//
// EscapeParam()
//
// Stolen from RadStore, do we need a stdami.js?
function EscapeParam(param)
{
	if (typeof(param) =3D=3D 'string')
	{
		var s =3D escape(param);
		s =3D s.replace(/\+/g, "%2B");
		s =3D s.replace(/\\/g, '\\\\');
		return s;
	}
	return param;
}



//
//	TrimWS()
//
function TrimWS(str)
{
	for	(var ichL =3D	0; ichL	< str.length; ichL++)
	{
		if (str.charAt(ichL) !=3D	' ')
			break;
	}

	for	(var ichR =3D	str.length;	ichR-- > ichL; )
	{
		if (str.charAt(ichR) !=3D	' ')
			break;
	}

	return str.substring(ichL, ichR	+ 1);
}


//
// MsgFormat
//
function MsgFormat()
{
    var rgArg =3D MsgFormat.arguments;
    var str =3D rgArg[0];

	// note: arguments are 1-based
    for (iarg =3D 1; iarg < rgArg.length; ++iarg)
		str =3D str.replace( new RegExp( "%" + iarg, "g"), rgArg[iarg]);
	return str;
}


//
// ArrayCopy()
//
function ArrayCopy(rgSrc)
{
	return rgSrc.slice(0);
}


//
// RGOptionFromStr()
//
function RGOptionFromStr(str)
{
	if (str.indexOf(s_strDelimRGOption)	!=3D 0)
		return null;

	str	=3D str.substr(s_strDelimRGOption.length,	str.length - 2 * =
s_strDelimRGOption.length); //	strip leading and trailing delimiter

	var	mpstrNameValue =3D new Array();
	ParseNameValueString(mpstrNameValue, str, ',', s_strDelimItem);

	var	rg =3D new Array();
	for	(var strName in	mpstrNameValue)
	{
		rg[rg.length] =3D	new	Option(strName,	mpstrNameValue[strName]);
	}
	return rg;
}


//
// RGRowColFromStr()
//
function RGRowColFromStr(str)
{
	if (str.indexOf(s_strDelimRGRowCol)	!=3D 0)
		return null;

	str	=3D str.substr(s_strDelimRGRowCol.length,	str.length - 2 * =
s_strDelimRGRowCol.length); //	strip leading and trailing delimiter

	var	mpstrNameValue =3D new Array();
	ParseNameValueString(mpstrNameValue, str, ',', s_strDelimItem);

	var	rg =3D new Array();
	for	(var strName in	mpstrNameValue)
	{
		var	strVal =3D mpstrNameValue[strName];
		var	rgval =3D	strVal.split(' ');
		if (rgval.length > 1)
			rg[strName]	=3D new CRowCol(parseInt(rgval[0], 10), =
parseInt(rgval[1], 10));
	}
	return rg;
}


//
// RGFromStr()
//
function RGFromStr(str)
{=20
	if (str.indexOf(s_strDelimRG) !=3D 0)
		return null;

	str	=3D str.substr(s_strDelimRG.length, str.length - 2 * =
s_strDelimRG.length); //	strip leading and trailing delimiter

	var	mpstrNameValue =3D new Array();
	ParseNameValueString(mpstrNameValue, str, ',', s_strDelimItem);

	var	rg =3D new Array();
	for	(var strName in	mpstrNameValue)
	{
		rg[strName]	=3D mpstrNameValue[strName];
	}
	return rg;
}

//
// ParseNameValueString()
//
function ParseNameValueString(mp, str, strDelim, strDelimItem)
{
	var	rg =3D str.split(strDelim);

	for	(var iitem in rg)
	{
		var	strNameValue =3D rg[iitem];
		var	ichEQ =3D	strNameValue.indexOf(strDelimItem);

		var	strName	 =3D ichEQ !=3D	-1 ? strNameValue.substr(0,	ichEQ)	: =
strNameValue;
		strName	=3D strName.replace(/^\s/g, '');

		var	strValue =3D ichEQ !=3D	-1 ? strNameValue.substr(ichEQ + =
strDelimItem.length) :	'';

		if (strName	!=3D '')
		{
			mp[strName]	=3D strValue;
		}
	}
}


var _mpstrimgCache =3D new Array();

//
// CacheImage
//
// Purpose:=20
// Ret:
function CacheImage(strURLImage)
{
	if (_mpstrimgCache[strURLImage] =3D=3D null)
	{
		_mpstrimgCache[strURLImage] =3D new Image();
		_mpstrimgCache[strURLImage].src =3D strURLImage;
	}
}



//
// FindElemIndex
//
function FindElemIndex(rg, obj)	=09
{
    for (var iindex in rg)
    {
		if (rg[iindex] =3D=3D obj)
		{
			return parseInt(iindex, 10);
		}
	}
	return -1;
}




//
// AddUnique
//
function AddUnique(rg, obj)	=09
{
	if (FindElemIndex(rg, obj) > 0)=20
		return;
=09
	rg[rg.length] =3D obj;
}



//
// RemoveAt
//
function RemoveAt(rg, iRemove)
{
	var	rgNew =3D	new	Array();
	for	(var i in rg)
	{
		if (i !=3D iRemove)
			rgNew[rgNew.length]	=3D rg[i];
	}
	return rgNew;
}

//
// RemoveElem
//
function RemoveElem(rg, elemRemove)
{
	var	rgNew =3D	new	Array();
=09
	if (typeof(elemRemove.Equals) !=3D 'unknown' && elemRemove.Equals !=3D =
null)
	{
		for	(var i in rg)
		{
			if (!elemRemove.Equals(rg[i]))
				rgNew[rgNew.length]	=3D rg[i];
		}
	}
	else
	{
		for	(var i in rg)
		{
			if (rg[i] !=3D elemRemove)
				rgNew[rgNew.length]	=3D rg[i];
		}
	}
	return rgNew;
}



// =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D


var _mpstrobj =3D new Array();
var idlast =3D 0;

//
// GetPeer
//
function GetPeer(str, frame)
{
	return _mpstrobj[str];=09
}

//
// FrameConnector
//
// Purpose:=20
// Ret:
function FrameConnector(peer, strURL)
{
	this._frame =3D null;
	this._peer =3D peer;
	this._strID =3D "";
	this._strURL =3D strURL;
=09
	this.PublishPeerObject(this._peer);
}

//
// PublishPeerObject
//
function FrameConnector.prototype.PublishPeerObject()
{ with (this) {
	++idlast;
	var str =3D "object" + idlast;
	_mpstrobj[str] =3D this;
	_strID =3D str;
}}


//
// UnPublishPeerObject
//
function FrameConnector.prototype.UnPublishPeerObject()
{ with (this) {
	_mpstrobj[_strID] =3D null;
	if (_frame !=3D null)
		DisconnectPeer(_frame);
}}

//
// Url
//
function FrameConnector.prototype.Url()
{ with (this) {
	return _strURL;
}}

//
// ConnectPeer
//
function FrameConnector.prototype.ConnectPeer(frame)
{ with (this) {
	if (_mpstrobj[_strID] =3D=3D null)
		return false;

	this._frame =3D frame;
	return true;
}}

//
// DisconnectPeer
//
function FrameConnector.prototype.DisconnectPeer(frame)
{ with (this) {
	if (_frame =3D=3D null)
		return;

	if (_peer.OnUnloadFrame !=3D null)
		_peer.OnUnloadFrame(frame);
=09
	_global.ASSERT(_frame =3D=3D frame);
	_mpstrobj[_strID] =3D null;
	_frame =3D null;
	frame._peer =3D null;
}}


//
// ReloadHtml
//
function FrameConnector.prototype.ReloadHtml()
{ with (this) {
	if (_frame =3D=3D null)
		return;
=09
	var frame =3D _frame;

	// make sure no pages currently loading will connect to our peer
	UnPublishPeerObject();
	PublishPeerObject();

	GetFrameElement(frame).objectID =3D _strID;
	frame.document.location.reload(false);
}}


//
// LoadHtml
//
function FrameConnector.prototype.LoadHtml(frame)
{ with (this) {
	if (_frame !=3D null)
	{
		ASSERT(false);	=09
		return;
	}

	_frame =3D frame;

	// make sure no pages currently loading will connect to our peer
	UnPublishPeerObject();
	PublishPeerObject();

	GetFrameElement(frame).objectID =3D _strID;
	frame.document.location.replace(Url());
}}



// =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D


//
// CreateStaticFunction
//
// Purpose: Create static function wrappers for JScript member functions =

// Ret: returns a pointer to a new static function=20
function CreateStaticFunction(object, strFn)
{
	var pfn =3D new Function("arguments.callee._obj." + strFn + "();");
	pfn._obj =3D object;
	return pfn;
}

// =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D


//
// CClassSet c'tor
//
function CClassSet()
{
	this._rgFlag =3D arguments;

	with (this)=20
	{
		for (var iFlag =3D 0; iFlag !=3D _rgFlag.length; iFlag++)
		{
			this[_rgFlag[iFlag]] =3D false;
		}
	}
}

//
// ReadElement
//
function CClassSet.prototype.ReadElement(el)
{ with (this) {
	var strClass =3D el.className;
	var rgClass =3D strClass.split(' ');

	for (var iFlag =3D 0; iFlag !=3D _rgFlag.length; iFlag++)
	{
		this[_rgFlag[iFlag]] =3D FindElemIndex(rgClass, _rgFlag[iFlag]) !=3D =
-1;
	}

}}

//
// WriteElement
//
function CClassSet.prototype.WriteElement(el)
{ with (this) {

	var strClass =3D el.className;
	var rgClass =3D strClass.split(' ');

	for (var iFlag =3D 0; iFlag !=3D _rgFlag.length; iFlag++)
	{
		var strFlag =3D _rgFlag[iFlag];
		if (this[strFlag])
		{
			if (FindElemIndex(rgClass, strFlag) =3D=3D -1)
			{
				rgClass[rgClass.length] =3D strFlag;
			}
		}
		else
		{
			var iClass =3D FindElemIndex(rgClass, strFlag);
			if (iClass !=3D -1)
			{
				rgClass =3D RemoveElem(rgClass, strFlag);
			}

		}
	}

	strClass =3D rgClass.join(' ');
	if (el.className !=3D strClass)
	{
		el.className =3D strClass;
	}
}}

//
// OffsetToWindow
//
function OffsetToWindow(htmlElement)
{
	var point =3D new Object;
	point.left =3D 0;
	point.top  =3D 0;
=09
	var node =3D htmlElement;
=09
	while (node.offsetParent !=3D null)
	{
		point.left +=3D node.offsetLeft;
		point.top  +=3D node.offsetTop;

		node =3D node.offsetParent;
	}

	return point;
}


//
// DicomToDate
//
function DicomToDate(strDate, strTime)
{
	var date =3D new Date(0,0,0);
	if (strDate !=3D null && strDate.length =3D=3D 8)
	{
		// note that months are zero based!
		date =3D new Date(strDate.substr(0, 4), strDate.substr(4,2).valueOf() =
- 1, strDate.substr(6,2));
	}
	if (strTime !=3D null && strTime.length >=3D 4)
	{
		date.setHours(strTime.substr(0, 2));
		date.setMinutes(strTime.substr(2, 2));
		date.setSeconds(strTime.substr(4, 2));
	}
	return date;
}

//
// SetElemAttribute
//
function SetElemAttribute(elem, name, value)
{
	if (name.substr(0, 2).toLowerCase() =3D=3D 'on')
	{
		return false;	// cannot change events
	}

	switch(name.toLowerCase())
	{
		case 'class':
			elem.className =3D value;
			break;

		case 'style':
			elem.STYLE =3D value;
			break;

		default:
			elem.setAttribute(name, value);		=09
			break;
	}
	return true;
}

//
// UpdateElementFromXHtml
//
function UpdateElementFromXHtml(doc, elem, nodeOld, nodeNew)
{

	RecurseElementFromXHtml(doc, elem, nodeOld, nodeNew);
}

//
// CopyAttributes
//
function CopyAttributes(doc, elem, nodeOld, nodeNew)
{
	var attrs =3D nodeNew.attributes;
	for (var iattr =3D 0; iattr !=3D attrs.length; iattr++)
	{
		var attr =3D attrs.item(iattr);
		if (attr.value =3D=3D nodeOld.getAttribute(attr.name))
			continue;
		if (SetElemAttribute(elem, attr.name, attr.value))
			continue;

		// give up, create new node
		var elemNew =3D doc.createElement(nodeNew.cloneNode(false).xml);
		elem.replaceNode(elemNew);
		elem =3D elemNew;
		break;
	}

	var attrsOld =3D nodeOld.attributes;
	for (var iattr =3D 0; iattr !=3D attrsOld.length; iattr++)
	{
		var attr =3D attrsOld.item(iattr);
		if (nodeNew.getAttribute(attr.name) =3D=3D null)
		{
			SetElemAttribute(elem, attr.name, null);
		}
	}
	return elem;
}

//
// InsertChildAt
//
function InsertChildAt(ichildNode, doc, elem, itnodeNew)
{
	if (itnodeNew.nodeTypeString =3D=3D 'text')
	{

		var node =3D doc.createTextNode(itnodeNew.nodeValue);
		if (ichildNode =3D=3D elem.childNodes.length)
		{
			elem.appendChild(node);
		}
		else
		{
			elem.insertBefore(node, elem.childNodes.item(ichildNode));
		}
	}
	else
	{
		var node =3D doc.createElement(itnodeNew.cloneNode(false).xml);
		RecurseElementFromXHtml(doc, node, null, itnodeNew);

		if (ichildNode =3D=3D elem.childNodes.length)
		{
			elem.appendChild(node);
		}
		else
		{
			elem.insertBefore(node, elem.childNodes.item(ichildNode));
		}
	}
}

//
// UpdateChildren
//
function UpdateChildren(doc, elem, nodeOld, nodeNew)
{
	var childrenNew =3D nodeNew.selectNodes('*|text()');
	var itnodeNew =3D childrenNew.nextNode();

	var itnodeOld =3D null;
	var childrenOld =3D null;
=20
	if (nodeOld !=3D null)
	{
		childrenOld =3D nodeOld.selectNodes('*|text()');
		itnodeOld =3D childrenOld.nextNode();
	}

	var ichildNode =3D 0;
	while (itnodeNew !=3D null && itnodeOld !=3D null)
	{
		var bMatch =3D false;

		if (itnodeNew.xml =3D=3D itnodeOld.xml)
		{
			bMatch =3D true;
		}
		else if (itnodeNew.nodeTypeString =3D=3D 'text' && =
itnodeOld.nodeTypeString =3D=3D 'text')
		{
			bMatch =3D true;
			if (itnodeNew.nodeValue !=3D itnodeOld.nodeValue)
				elem.childNodes.item(ichildNode).nodeValue =3D itnodeNew.nodeValue;
		}
		else if (itnodeNew.nodeName =3D=3D itnodeOld.nodeName)
		{
			if (itnodeNew.getAttribute('id') =3D=3D null ||
				itnodeNew.getAttribute('id') =3D=3D itnodeOld.getAttribute('id'))
			{
				bMatch =3D true;
				try
				{
			=09
					if (itnodeNew.nodeName =3D=3D 'table' &&=20
						itnodeNew.firstChild.childNodes.length !=3D =
itnodeOld.firstChild.childNodes.length)
					{
						elem.childNodes.item(ichildNode).outerHTML =3D itnodeNew.xml;
					}
					else
					{
						RecurseElementFromXHtml(doc, elem.childNodes.item(ichildNode), =
itnodeOld, itnodeNew);
					}
				}
				catch(e)
				{
					if (e.description =3D=3D "unexpected element")
					{
						bMatch =3D false;
					=09
						// remove unexpected child node and try again
						elem.removeChild(elem.childNodes.item(ichildNode));
						continue;
					}
				}
			}
		}

		if (bMatch)
		{
			itnodeNew =3D childrenNew.nextNode();
			itnodeOld =3D childrenOld.nextNode();
			ichildNode++;
			continue;
		}

		if (childrenNew.length > childrenOld.length)
		{	// insert new node
			InsertChildAt(ichildNode, doc, elem, itnodeNew);
			itnodeNew =3D childrenNew.nextNode();
			ichildNode++;
		}
		else
		{	// remove old node
			itnodeOld =3D childrenOld.nextNode();
			elem.childNodes.item(ichildNode).removeNode(true);=09
//TODO: replace node if new and old equal size
		}
	}

	while (itnodeOld !=3D null)
	{
		elem.childNodes.item(ichildNode).removeNode(true);=09
		itnodeOld =3D childrenOld.nextNode();
	}

	while (itnodeNew !=3D null)
	{
		InsertChildAt(ichildNode, doc, elem, itnodeNew);
		itnodeNew =3D childrenNew.nextNode();
		ichildNode++;
	}

	return elem;
}
//
// RecurseElementFromXHtml
//
function RecurseElementFromXHtml(doc, elem, nodeOld, nodeNew)
{
	if (elem.tagName =3D=3D null)
	{
		// SCR: 2822
		// unexpected text node found
		var e =3D new Exception;
		e.description =3D "unexpected element";
		throw e;
	}

	if (nodeOld =3D=3D null)
	{
		nodeOld =3D =
nodeNew.ownerDocument.createElement(nodeNew.cloneNode(false).xml);
		return UpdateChildren(doc, elem, nodeOld, nodeNew);
	}

	ASSERT(elem.tagName.toLowerCase() =3D=3D =
nodeOld.nodeName.toLowerCase());
	if (nodeNew =3D=3D null)
	{
		elem.removeNode(true);
		return elem;
	}

	elem =3D CopyAttributes(doc, elem, nodeOld, nodeNew);
	elem =3D UpdateChildren(doc, elem, nodeOld, nodeNew);

	return elem;
}


//
//  Format
//
function Format(value, nDigits)
{
	return _global._viewapp.FormatNumber(value, nDigits);
}


//
// MakeAbsoluteUrl
//
// Purpose: Create absolute url with correct protocol prefix
// Ret:
//
function MakeAbsoluteUrl(strUrl, strUrlBase)
{
	if (strUrl.substr(0,4).toLowerCase() =3D=3D 'http')
		return strUrl;
=09
	if (strUrl.substr(0,1) =3D=3D '/')
	{
		var re =3D /[^\/]\/[^\/]/;
		strUrlBase =3D strUrlBase.substr(0, strUrlBase.search(re)+1);
	}

	return strUrlBase + strUrl;
}


//
// GetNodeString
//
// Purpose: Get string from node using pattern query
// Ret:
//
function GetNodeString(node, strPattern)
{
	var nodeFound =3D node.selectSingleNode(strPattern);
	if (nodeFound =3D=3D null)
		return '';

	return nodeFound.text;
}


// Async request class =
-------------------------------------------------------------------------=
---

//
// CAsyncRequest
//
// Purpose: Asynchronious server request
// Ret:
//
function CAsyncRequest()
{
	this._xmlResponse	=3D null;
	this._fnCallBack	=3D null;
	this._bAborting		=3D false;
}


//
// CAsyncRequest.prototype.GetReponseDoc
//
// Purpose: Create response document
// Ret:
//
function CAsyncRequest.prototype.GetResponseDoc()
{ with (this) {

	if (_xmlResponse =3D=3D null)
	{
		_xmlResponse =3D CreateXmlDoc();
		_xmlResponse.async				=3D true;
		_xmlResponse.validateOnParse	=3D false;
		_xmlResponse.resolveExternals	=3D false;
		_xmlResponse.onreadystatechange	=3D CreateStaticFunction(this, =
"OnReadyStateChange");
	}

	return _xmlResponse;
}}


//
// CAsyncRequest.prototype.Post
//
// Purpose: Post server request
// Ret:
//
function CAsyncRequest.prototype.Post(xmlRequest, fnCallBack)
{ with (this) {

	_fnCallBack =3D fnCallBack;

	var xmlResponse =3D GetResponseDoc();
	if (xmlResponse.readyState !=3D 4)
	{
		_bAborting =3D true;
		xmlResponse.abort();
		_bAborting =3D false;
	}

	xmlResponse.load(_baseBin + "?" + EscapeParam(xmlRequest.xml));
}}


//
// CAsyncRequest.prototype.OnReadyStateChange
//
// Purpose: OnReadyStateChange event handler
// Ret:
//
function CAsyncRequest.prototype.OnReadyStateChange()
{ with (this) {

	var xmlResponse =3D GetResponseDoc();
	if (xmlResponse.readyState !=3D 4)
		return;

	if (_bAborting)
		return;

	_fnCallBack();
}}
=09

//
// IsMsXmlReplaceMode
//
function IsMsXmlReplaceMode()
{
	var strXml =3D "<?xml version=3D\"1.0\" =
encoding=3D\"UTF-16\"?><cjb></cjb>";
	var strXsl =3D "<?xml version=3D\"1.0\" =
encoding=3D\"UTF-16\"?><x:stylesheet version=3D\"1.0\" =
xmlns:x=3D\"http://www.w3.org/1999/XSL/Transform\" =
xmlns:m=3D\"urn:schemas-microsoft-com:xslt\"><x:template =
match=3D\"/\"><x:value-of select=3D\"system-property('m:version')\" =
/></x:template></x:stylesheet>";

	try
	{
	    var xmldoc =3D new ActiveXObject("Microsoft.XMLDOM"); =20
	    xmldoc.async =3D false;
	    if (!xmldoc.loadXML(strXml))
		{
			return false;
		}

		var xsldoc =3D new ActiveXObject("Microsoft.XMLDOM");=20
		xsldoc.async =3D false;
		if (!xsldoc.loadXML(strXsl))
		{
			return false;
		}

		var op =3D xmldoc.transformNode(xsldoc);
		if (op.indexOf("stylesheet") =3D=3D -1)
		{
			return true;
		}
	}
	catch(e)
	{
	}

	return false;
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/wlpreset.js

//
//	Copyright (c) 2003 General Electric Medical Systems IT
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/wlpreset.js $
//		$Revision: 3 $
//		$Date: 3/06/03 2:59p $
//		$Author: Marceld $
//

// -------------------- WindowLevelPreset ------------------------------
//
// WindowLevelPreset C'tor
//
function WindowLevelPreset(strPresetName, strPresetValue)
{
	this._strPresetName =3D strPresetName;
	this._strPresetValue =3D strPresetValue;
}

//
// GetName
//
function WindowLevelPreset.prototype.GetName()
{ with(this) {
	return _strPresetName;
}}

//
// GetValue
//
function WindowLevelPreset.prototype.GetValue()
{ with(this) {
	return _strPresetValue;
}}

// -------------------- ModalityPresetList =
------------------------------
//
// ModalityPresetList
//
function ModalityPresetList(strMod)
{
	this._strMod =3D strMod;
	this._rgPresets =3D new Array;
}

//
// Initialize
//
function ModalityPresetList.prototype.Initialize(rgnode)
{ with(this) {
	for (var i =3D 0; i < rgnode.length; i++)
	{
		_rgPresets[_rgPresets.length] =3D new =
WindowLevelPreset(rgnode[i].getAttribute('name'), =
rgnode[i].getAttribute('value'));
	}
}}

// -------------------- WLPresetListControl =
------------------------------
//
// WLPresetListControl C'tor
//
function WLPresetListControl(elemSelect)
{
	elemSelect.onchange =3D CreateStaticFunction(this, =
'OnWindowLevelPresetChange');
	this._elemSelect =3D elemSelect;
	this._mpModPresets =3D new Object;
	this._strMod =3D '';
}


//
// Initialize
//
function WLPresetListControl.prototype.Initialize(nodeXML)
{ with(this) {
	if (nodeXML =3D=3D null)
		return;

	var rgnode =3D nodeXML.selectNodes('modality');
	for (var i =3D 0; i < rgnode.length; i++)
	{
		var strMod =3D rgnode[i].getAttribute('value');
		var modpresetlist =3D new ModalityPresetList(strMod);
		modpresetlist.Initialize(rgnode[i].selectNodes('wlpreset'));
		_mpModPresets[strMod] =3D modpresetlist;
	}
}}

//
// OnWindowLevelPresetChange
//
function WLPresetListControl.prototype.OnWindowLevelPresetChange()
{ with(this) {
	parent.ChangeWindowLevelPreset(_elemSelect.value);
}}


//
// OnModalityChange
//
function WLPresetListControl.prototype.OnModalityChange(strMod)
{ with(this) {
	if (_strMod =3D=3D strMod)
		return;

	ClearPresets();
	AddPresets(_mpModPresets[strMod]);
	_strMod =3D strMod;
}}

//
// ClearPresets
//
function WLPresetListControl.prototype.ClearPresets()
{ with(this) {
	var len =3D _elemSelect.options.length;
	for (var i =3D 0; i < len; i++)
	{
		_elemSelect.options.remove(0);
	}
}}

//
// AddOption
//
function WLPresetListControl.prototype.AddOption(strValue, strText, =
nPosition)
{ with(this) {
	for (var i =3D 0; i < _elemSelect.options.length; i++)
	{
		if (_elemSelect.options[i].text =3D=3D strText)	// preset already =
exists
		{
			if (_elemSelect.options[i].value =3D=3D strValue)	// value already =
exists
				return;
			else
			{
				_elemSelect.options.remove(i);
				break;
			}
		}
	}

	var oOption =3D document.createElement("OPTION");
	oOption.text =3D strText;
	oOption.value =3D strValue;
	_elemSelect.options.add(oOption, nPosition);
}}

//
// AddPresets
//
function WLPresetListControl.prototype.AddPresets(rgpresets)
{ with(this) {
	if (rgpresets =3D=3D null)
		return;
	var rgPresets =3D rgpresets._rgPresets;
	for (var i =3D 0; i < rgPresets.length; i++)
	{
		AddOption(rgPresets[i].GetValue(), rgPresets[i].GetName());
	}
}}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/viewctrl.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/viewctrl.js $
//		$Revision: 20 $
//		$Date: 3/11/03 3:30p $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>

var _oWLPresetList =3D null;
var oPopup =3D window.createPopup();

//
// onload
//
function window.onload()
{
	checkboxAnnotations.checked =3D parent.GetShowAnnotations();
	OnCineSpeedChange();

	var settings =3D GetISettings();
	if (settings =3D=3D null)
		return;

	=
Feed2PresentationStateListbox(GetApp().GetLocaleString('strEmptyPresentat=
ionState'), 0);

	_oWLPresetList =3D new WLPresetListControl(listWindowPreset);
	_oWLPresetList.Initialize(GetApp().config.GetWindowLevelPresetNode());
}

//
// onresize
//
function window.onresize()
{
	parent.frmsetViewing.rows =3D (document.body.scrollHeight + =
2).toString() + ', *';
}

//
// OnViewportLayoutChange
//
function OnViewportLayoutChange(value)
{
	oPopup.hide();
	var nRows =3D parseInt(value.substr(0,1));
	var nColumns =3D parseInt(value.substr(2,1));
	parent.SetViewportLayout(nRows, nColumns);
}

//
// OnSeriesLayoutChange
//
function OnSeriesLayoutChange(value)
{
	oPopup.hide();
	var nRows =3D parseInt(value.substr(0,1));
	var nColumns =3D parseInt(value.substr(2,1));
	parent.SetSeriesLayout(nRows, nColumns);
}

//
// HasErrors
//
function HasErrors()
{
	return false;
}


//
// GetErrorText
//
function GetErrorText()
{
	return '';
}


//
// OnPageBack
//
function OnPageBack()
{
	parent.PageBack();
}


//
// OnPageForward
//
function OnPageForward()
{
	parent.PageForward();
}

//
// OnImageBack
//
function OnImageBack()
{
	parent.ImageBack();
}


//
// OnImageForward
//
function OnImageForward()
{
	parent.ImageForward();
}


//
// OnSeriesBack
//
function OnSeriesBack()
{
	parent.SeriesBack();
}


//
// OnSeriesForward
//
function OnSeriesForward()
{
	parent.SeriesForward();
}


//
// OnCineSpeedDown
//
function OnCineSpeedDown()
{
	parent.CineSpeedDecrease();
}


//
// OnCineSpeedUp
//
function OnCineSpeedUp()
{
	parent.CineSpeedIncrease();
}


//
// OnButtonPlayStop
//
// Purpose: Forward a click on the 'play/stop' button to our parent.
//
function OnButtonPlayStop()
{
	parent.ImagePlayStop();
}


//
// OnButtonPropagateClick
//
function OnButtonPropagateClick()
{
	parent.OnPropagateClicked();
}


//
// OnClickCheckboxAnnotations
//
function OnClickCheckboxAnnotations()
{
	parent.SetShowAnnotations(checkboxAnnotations.checked);
}


//
// NotifyPlayMode
//
// Purpose: Handle the 'play mode' event by disabling/enabling buttons
//          that can/cannot be used in play/stop mode.
//
function NotifyPlayMode(bPlaying)
{
	btnPrevImage.Enable(!bPlaying);
	btnNextImage.Enable(!bPlaying);
	btnPrevSeries.Enable(!bPlaying);
	btnNextSeries.Enable(!bPlaying);
	btnPropagate.Enable(!bPlaying);

	// Change the image on the button to indicate the play state.
	if (bPlaying)
	{
		divPlayStopImage.className =3D 'classStopImage';
	}
	else
	{
		divPlayStopImage.className =3D 'classPlayImage';
	}
}


//
// OnCineSpeedChange
//
function OnCineSpeedChange(s_nCineSpeedMin, nCineSpeed, s_nCineSpeedMax)
{
	if (nCineSpeed =3D=3D s_nCineSpeedMin)
	{
		btnSpeedDown.Enable(false);
	}
	else if (nCineSpeed =3D=3D s_nCineSpeedMax)
	{
		btnSpeedUp.Enable(false);
	}
	else
	{
		btnSpeedDown.Enable(true);
		btnSpeedUp.Enable(true);
	}
	spanSpeedValue.innerText =3D nCineSpeed;
}


//
// UpdateControls
//
// Purpose: Update the state of the controls to reflect what=20
//          the user is allowed to do.
//
function UpdateControls(IDicomDirView)
{
	var bSingleImage =3D (IDicomDirView.GetActiveSeriesIndex() =3D=3D -1);

	btnSpeedDown.Enable(!bSingleImage);
	btnSpeedUp.Enable(!bSingleImage);

	if (IDicomDirView.IsImageSelected())
	{
		if (parent.IsSelectedImageMultiFrame())
		{
			btnPrevImage.Enable(true);
			btnNextImage.Enable(true);
			btnPrevPage.Enable(false);
			btnNextPage.Enable(false);
			btnPlayStop.Enable(true);
		}
		else
		{
			var bHasPrevImages =3D IDicomDirView.HasPreviousImageInSeries();
			var bHasNextImages =3D IDicomDirView.HasNextImageInSeries();
			var bMultipleViewports =3D (parent.viewlayout.GetLayout() !=3D =
'1x1');
			btnPrevImage.Enable(bHasPrevImages);
			btnNextImage.Enable(bHasNextImages);
			btnPlayStop.Enable(bHasPrevImages || bHasNextImages);
			btnPrevPage.Enable(bHasPrevImages && bMultipleViewports);
			btnNextPage.Enable(bHasNextImages && bMultipleViewports);
		}
		btnNextSeries.Enable(IDicomDirView.HasNextSeries());
		btnPrevSeries.Enable(IDicomDirView.HasPreviousSeries());
		if (!bSingleImage)
		{
			btnPropagate.Enable(true);
			btnViewportLayout.Enable(true);
			btnSeriesLayout.Enable(true);
			listPresentationStates.disabled =3D false;
			listWindowPreset.disabled =3D false;
		}
	}
	else
	{
		// No image is selected: disable all image control buttons.
		btnPrevImage.Enable(false);
		btnNextImage.Enable(false);
		btnPrevPage.Enable(false);
		btnNextPage.Enable(false);
		btnNextSeries.Enable(false);
		btnPrevSeries.Enable(false);
		btnPlayStop.Enable(false);
		btnPropagate.Enable(false);
		btnViewportLayout.Enable(false);
		btnSeriesLayout.Enable(false);
		listPresentationStates.disabled =3D true;
		listWindowPreset.disabled =3D true;
	}
}


//
// Feed2PresentationStateListbox
//
function Feed2PresentationStateListbox(str, val)
{
	var oOption =3D document.createElement("OPTION");
	oOption.text =3D str;
	oOption.value =3D new String(val);
	listPresentationStates.options.add(oOption);
}


//
// ClearPresentationStateListbox
function ClearPresentationStateListbox()
{
	var len =3D listPresentationStates.options.length;
	for (var i =3D 0; i < len; i++)
	{
		listPresentationStates.options.remove(0);
	}
}


//
// OnPresentationStateChange
//
function OnPresentationStateChange(value)
{
	parent.OnPresentationStateChange(value);
	parent.p_dicomdirview.onselectionchanged();	// force viewport update
}


//
// SelectPresentationState
//
function SelectPresentationState(cnt)
{
	listPresentationStates.selectedIndex =3D cnt;
}

//
// RefreshWLPresetList
function RefreshWLPresetList(strMod)
{
	_oWLPresetList.OnModalityChange(strMod);
}

//
// OnSeriesLayout
//
function OnSeriesLayout()
{
    oPopup.document.createStyleSheet('popup.css');
	oPopup.document.body.innerHTML =3D divSerieslayoutPopup.innerHTML;=20
	//oPopup.document.body.onload =3D test;
	oPopup.show(2, btnSeriesLayout.offsetHeight, 105, 38, btnSeriesLayout);
}

//
// OnViewportLayout
//
function OnViewportLayout()
{
    oPopup.document.createStyleSheet('popup.css');
	oPopup.document.body.innerHTML =3D divViewportLayoutPopup.innerHTML;=20
	oPopup.show(2, btnViewportLayout.offsetHeight, 140, 105, =
btnViewportLayout);
}

//
// AddDefaultPreset
//
function AddDefaultPreset(strValue)
{
	_oWLPresetList.AddOption(strValue, =
GetApp().GetLocaleString('strNoWindowLevel'), 0);
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\viewctrl.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
		Copyright (c) 2001 General Electric Company

		Version control:
				$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/viewctrl.htm $
				$Revision: 22 $
				$Date: 3/07/03 1:12p $
				$Author: Marceld $
--><HTML><HEAD><TITLE></TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250">
<META content=3Dhttp://schemas.microsoft.com/intellisense/ie5=20
name=3Dvs_targetSchema><LINK href=3D"file:///D:/RA/viewctrl.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT src=3D"file:///D:/RA/util.js" type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/appnotif.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/wlpreset.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/viewctrl.js" =
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" name=3DGENERATOR></HEAD>
<BODY tabIndex=3D-1><BUTTON id=3DbtnPrevPage onclick=3DOnPageBack();>
<DIV id=3DdivPrevPage></DIV></BUTTON><BUTTON id=3DbtnPrevImage=20
onclick=3DOnImageBack();>
<DIV id=3DdivPrevImage></DIV></BUTTON><BUTTON id=3DbtnNextImage=20
onclick=3DOnImageForward();>
<DIV id=3DdivNextImage></DIV></BUTTON><BUTTON id=3DbtnNextPage=20
onclick=3DOnPageForward();>
<DIV id=3DdivNextPage></DIV></BUTTON><BUTTON id=3DbtnPrevSeries=20
onclick=3DOnSeriesBack();>
<DIV id=3DdivPrevSeries></DIV></BUTTON><BUTTON id=3DbtnNextSeries=20
onclick=3DOnSeriesForward();>
<DIV id=3DdivNextSeries></DIV></BUTTON><BUTTON id=3DbtnSeriesLayout=20
onclick=3DOnSeriesLayout();>
<DIV id=3DdivSeriesLayout></DIV></BUTTON><BUTTON id=3DbtnViewportLayout=20
onclick=3DOnViewportLayout();>
<DIV id=3DdivViewportLayout></DIV></BUTTON><BUTTON id=3DbtnPlayStop=20
onclick=3DOnButtonPlayStop();>
<DIV class=3DclassPlayImage id=3DdivPlayStopImage></DIV></BUTTON><BUTTON =

id=3DbtnSpeedDown onclick=3DOnCineSpeedDown();>
<DIV id=3DdivDecreaseSpeed></DIV></BUTTON><BUTTON id=3DbtnSpeedUp=20
onclick=3DOnCineSpeedUp();>
<DIV id=3DdivIncreaseSpeed></DIV></BUTTON> <SPAN =
id=3DspanSpeedValue>nn</SPAN> <SPAN=20
id=3DspanSpeed>fps</SPAN><BUTTON id=3DbtnPropagate=20
onclick=3DOnButtonPropagateClick()>Propagate</BUTTON> <SELECT=20
id=3DlistPresentationStates =
onchange=3DOnPresentationStateChange(value)></SELECT>=20
<SELECT id=3DlistWindowPreset></SELECT> <NOBR><INPUT =
id=3DcheckboxAnnotations=20
onclick=3DOnClickCheckboxAnnotations() type=3Dcheckbox> <LABEL =
id=3DlabelAnnotations=20
for=3DcheckboxAnnotations>Annotations </LABEL></NOBR><BUTTON =
id=3DbtnHelp=20
onclick=3DShowHelp();></BUTTON>=20
<DIV id=3DdivViewportLayoutPopup style=3D"DISPLAY: none">
<TABLE id=3DtblViewportPopup border=3D1>
  <TBODY>
  <TR>
    <TD><BUTTON id=3Dbtn1x1 =
onclick=3D"parent.OnViewportLayoutChange('1x1');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp1x1.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn1x2 =
onclick=3D"parent.OnViewportLayoutChange('1x2');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp1x2.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn1x3 =
onclick=3D"parent.OnViewportLayoutChange('1x3');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp1x3.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn2x1 =
onclick=3D"parent.OnViewportLayoutChange('2x1');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp2x1.gif"></BUTTON></TD></TR>
  <TR>
    <TD><BUTTON id=3Dbtn2x2 =
onclick=3D"parent.OnViewportLayoutChange('2x2');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp2x2.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn2x3 =
onclick=3D"parent.OnViewportLayoutChange('2x3');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp2x3.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn2x4 =
onclick=3D"parent.OnViewportLayoutChange('2x4');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp2x4.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn2x5 =
onclick=3D"parent.OnViewportLayoutChange('2x5');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp2x5.gif"></BUTTON></TD></TR>
  <TR>
    <TD><BUTTON id=3Dbtn3x1 =
onclick=3D"parent.OnViewportLayoutChange('3x1');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp3x1.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn3x3 =
onclick=3D"parent.OnViewportLayoutChange('3x3');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp3x3.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn3x4 =
onclick=3D"parent.OnViewportLayoutChange('3x4');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/vp3x4.gif"></BUTTON></TD>
    <TD><BUTTON id=3Dbtn4x5 =
onclick=3D"parent.OnViewportLayoutChange('4x5');"><IMG=20
      =
src=3D"file:///D:/RA/images/rumba/vp4x5.gif"></BUTTON></TD></TR></TBODY><=
/TABLE></DIV>
<DIV id=3DdivSerieslayoutPopup style=3D"DISPLAY: none">
<TABLE id=3DTable1 border=3D1>
  <TBODY>
  <TR>
    <TD><BUTTON id=3DbtnS1x1 =
onclick=3D"parent.OnSeriesLayoutChange('1x1');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/series11.gif"></BUTTON></TD>
    <TD><BUTTON id=3DbtnS1x2 =
onclick=3D"parent.OnSeriesLayoutChange('1x2');"><IMG=20
      src=3D"file:///D:/RA/images/rumba/series12.gif"></BUTTON></TD>
    <TD><BUTTON id=3DbtnS2x1 =
onclick=3D"parent.OnSeriesLayoutChange('2x1');"><IMG=20
      =
src=3D"file:///D:/RA/images/rumba/series21.gif"></BUTTON></TD></TR></TBOD=
Y></TABLE></DIV></BODY></HTML>

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.css

BODY {
	FONT-SIZE: 12px; FONT-FAMILY: Verdana, Arial; BACKGROUND-COLOR: #92a0a0
}
BUTTON {
	BORDER-RIGHT: 0px; BORDER-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; =
BEHAVIOR: url(btnroll.htc); BORDER-LEFT: 0px; COLOR: #191970; =
BORDER-BOTTOM: 0px; POSITION: absolute; BACKGROUND-COLOR: transparent
}
#framesetApp {
	BORDER-LEFT-COLOR: #848594
}
#framesetAll {
	BEHAVIOR: url(#default#userData)
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/css;
	charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/viewport.css

@import url( app.css );
#idTable {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
OBJECT {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; MARGIN: 0px; WIDTH: 100%; HEIGHT: 100%; BORDER-RIGHT-WIDTH: 0px
}
TD DIV {
	BORDER-RIGHT: 5px solid; BORDER-TOP: 5px solid; MARGIN: 0px; =
BORDER-LEFT: 5px solid; WIDTH: 100%; BORDER-BOTTOM: 5px solid; HEIGHT: =
100%
}
.classContainer {
	BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: =
none; BORDER-BOTTOM-STYLE: none
}
.classFocus {
	BORDER-LEFT-COLOR: red; BORDER-BOTTOM-COLOR: red; BORDER-TOP-COLOR: =
red; BORDER-RIGHT-COLOR: red
}
.classNoFocus {
	BORDER-LEFT-COLOR: black; BORDER-BOTTOM-COLOR: black; BORDER-TOP-COLOR: =
black; BORDER-RIGHT-COLOR: black
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/vrsvwlt.js

/*
    (C) 1998 Applicare Medical Imaging B.V.


    Version control:
         $Archive: =
/dev/src/WebViewer/FreeViewer/HTML/versionamiviewerlite.js $
        $Revision: 4 $
            $Date: 6-07-01 17:22 $
          $Author: Victord $
*/
// <SCRIPT>=20

var strVersion =3D "6,0,635,45"; // control version
// do not edit the previous line; edited by the Build script


------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/debug.js

//
// (c)1998 Applicare Medical Imaging B.V.
//
// Version control:
//		 $Archive: /dev/src/WebViewer/FreeViewer/HTML/debug.js $
//		$Workfile: debug.js $
//		$Revision: 1 $
//		    $Date: 6/26/02 4:21p $
//		  $Author: Marceld $
//
// Description: Debugging functions
//

//
// Logging functions
//
function AMIL_LOG_INFO(strLog, strCaller)		{ _debug.Log("I", strLog, =
strCaller); }
function AMIL_LOG_WARNING(strLog, strCaller)	{ _debug.Log("W", strLog, =
strCaller); }
function AMIL_LOG_ERROR(strLog, strCaller)		{ _debug.Log("E", strLog, =
strCaller); }
function AMIL_LOG_ALWAYS(strLog, strCaller)		{ _debug.Log("A", strLog, =
strCaller); }
function AMIL_LOG_LINK(strLog, strCaller)		{ _debug.Log("L", strLog, =
strCaller); }
function AMIL_LOG_PERFORMANCE(strLog, strCaller){ _debug.Log("P", =
strLog, strCaller); }
function TRACE(strTrace, strCaller)				{ return _debug.Trace(strTrace, =
strCaller); }






//
// Debug c'tor
//
function Debug()
{ with(this) {
	this.p_wndLog =3D null;
	this._rdocLog =3D null;
	this._bTrace  =3D false;
}}

//
// IsNull
//
function Debug.prototype.IsNull()
{
	return false;
}


//
// CreateXmlDoc
//
function Debug.prototype.CreateXmlDoc(oSrc)
{
	var xmlResult =3D new ActiveXObject('MSXML.FreeThreadedDOMDocument');
	xmlResult.async =3D false;
	xmlResult.validateOnParse =3D false;
	xmlResult.resolveExternals =3D false;

	if (oSrc =3D=3D null)
		return xmlResult;

	var bLoaded =3D false;

	if (typeof(oSrc) =3D=3D 'string' && oSrc.match('\s*<') !=3D null)	// =
oSrc is XML string
	{
		bLoaded =3D xmlResult.loadXML(oSrc);
	}
	else								// oSrc is path or stream or domdocument
	{
		bLoaded =3D xmlResult.load(oSrc);
	}
	if (xmlResult =3D=3D null || !bLoaded)
	{
		alert("Error creating Xml document");
		return null;
	}

	return xmlResult;
}


//
// StartLog
//
function Debug.prototype.StartLog()
{
}=09


//
// EndLog
//
function Debug.prototype.EndLog()
{ with (this) {
	if (p_wndLog)
	{
		p_wndLog.DetachSubject();
	}
}}


//
// SetLogWnd
//
function Debug.prototype.SetLogWnd(wnd)
{ with (this) {
	if (wnd =3D=3D null)
	{
		_debug =3D new DebugNull();
	}
	else
	{
		this.p_wndLog =3D wnd;
	}
}}


//
// Log
//
function Debug.prototype.Log(strKind, strLog, strCaller)
{ with (this) {

	if (_rdocLog =3D=3D null)
		return false;

	if (strCaller =3D=3D null)
	{
		ASSERT(Log.caller !=3D null);
		strCaller =3D GetFnName(Log.caller.caller);
	}

	var elem =3D _rdocLog.createElement('item');
	elem.setAttribute('date', =
Math.floor(_viewapp.GetQueryPerformanceCounter()));
	elem.setAttribute('caller', strCaller =3D=3D null || strCaller =3D=3D =
"" ? "?" : strCaller);
	elem.setAttribute('kind', strKind);
	elem.text =3D strLog;
	_rdocLog.selectSingleNode('wvlog').appendChild(elem);
	return true;
}}


//
// Trace
//
function Debug.prototype.Trace(strTrace, strCaller)
{ with (this) {

	if (!_bTrace || _rdocLog =3D=3D null)
		return false;

	if (strCaller =3D=3D null)
	{
		ASSERT(Trace.caller !=3D null);
		strCaller =3D GetFnName(Trace.caller.caller);=09
	}

	var elem =3D _rdocLog.createElement('item');
	elem.setAttribute('date', new Date().toLocaleTimeString());
	elem.setAttribute('caller', strCaller =3D=3D null || strCaller =3D=3D =
"" ? "?" : strCaller);
	elem.setAttribute('kind', "T");
	elem.text =3D strTrace;
	_rdocLog.selectSingleNode('wvlog').appendChild(elem);
	return true;
}}


//
// SetTrace
//
function Debug.prototype.SetTrace(bEnable)
{ with (this) {
	_bTrace =3D bEnable;
}}


//
// DebugShowGlobals
//
function DebugShowGlobals()
{
	// This code helps you to find the variables declared on _global.=20
	// You will find them on the "Local" debug window in Interdev.
	eval('debugger; //  (F5 to continue) ');
}


//-----------------	DebugNull -----------------------------

//
// DebugNull c'tor
//
function DebugNull()
{
}


//
// Trace
//
function DebugNull.prototype.Trace()
{
	return false;
}


//
// Log
//
function DebugNull.prototype.Log()
{
	return false;
}

//
// IsNull
//
function DebugNull.prototype.IsNull()
{
	return true;
}



//
//	ASSERT()
//
function ASSERT(bCond)
{
	if (bCond)
		return;

	var	strMsg =3D "error: ASSERT fired! (Callstack follows) \n" +  =
GetCallStack(ASSERT.caller, 20) +"\nDebug?";
	AMIL_LOG_ERROR(strMsg);

	if (/* !_debug.IsNull() && */ confirm(strMsg))
		debugger;
}


//
// GetCallStack
//
function GetCallStack(fn, depth)
{
	if (fn =3D=3D null || depth <=3D 0)
		return "";

	var str =3D "";

	for (var i=3D 0; i<fn.arguments.length; i++)
	{
		var arg =3D fn.arguments[i];
		str +=3D ", " + ((arg + "" =3D=3D=3D arg) ? '"' + arg + '"' : arg);
	}
	return GetFnName(fn) + "(" + str.substr(2) + ") \n" + =
GetCallStack(fn.arguments.callee.caller, depth - 1);
}


//-----------------	CStopWatch ----------------------------

//
// CStopWatch ctor
//
function CStopWatch(strDescr, bAutoStart /*true*/)=20
{=20
	this._strDescr =3D strDescr =3D=3D null ? GetFnName(CStopWatch.caller) =
: strDescr;
	this._cLapTime   =3D 0;
	this._cTotalTime =3D 0;
	this._bRunning   =3D false;
	this._cStartTime =3D 0;

	if (bAutoStart =3D=3D null || (bAutoStart !=3D null && bAutoStart))
	{
		this.Start();
	}
}


//
// Stop
//
function CStopWatch.prototype.Stop(strCaller)
{ with (this) {
	RecordTime(false, true, null, strCaller =3D=3D null ? =
GetFnName(Stop.caller) : strCaller);
}}


//
// Reset()
//
function CStopWatch.prototype.Reset()
{ with (this) {
	_cLapTime   =3D 0;
	_cTotalTime =3D 0;

	_bRunning   =3D false;
	_cStartTime =3D 0;
}}


//
// Lap
//
function CStopWatch.prototype.Lap(strLap, bLog, strCaller)
{ with (this) {
	RecordTime(true, bLog, strLap, strCaller =3D=3D null ? =
GetFnName(Lap.caller) : strCaller);
}}


var g_swInitialImageDisplay =3D new CStopWatch("Initial Image Display", =
false);



function TestForScrollErrors(doc)
{
	if (_debug.IsNull())
		return;

	for (var i =3D 0; i < doc.all.length; ++i)
	{
		var elem =3D doc.all(i);
		elem.scrollTop =3D 1;
		elem.scrollLeft =3D 1;
		if (elem.scrollTop =3D=3D 1 )
		{
			if (elem.scrollHeight =3D=3D elem.offsetHeight)
			{
				elem.style.border =3D "3px solid white";
				elem.style.visibility =3D "visible;"
				AMIL_LOG_INFO( doc.title + " " + elem.tagName + elem.id + " " + =
elem.offsetWidth + " "  + elem.offsetHeight,"TestForScrollErrors");
				continue;
			}
		}
		if (elem.scrollLeft =3D=3D 1 )
		{
			if (elem.scrollWidth =3D=3D elem.offsetWidth)
			{
				AMIL_LOG_INFO( doc.title + " " + elem.tagName + elem.id + " " + =
elem.offsetWidth + " "  + elem.offsetHeight,"TestForScrollErrors");
				elem.style.border =3D "3px solid white";
				elem.style.visibility =3D "visible";
			}
		}
		elem.scrollTop =3D 0;
		elem.scrollLeft =3D 0;
	}
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/tablemn.js

//
// (C) 2003 General Electric Medical Systems IT
//
// Version control:
//		 $Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/tablemn.js $
//		$Revision: 3 $
//		    $Date: 3/10/03 3:01p $
//		  $Author: Marceld $
//

TableLayoutManager.prototype._nRows =3D 0;
TableLayoutManager.prototype._nColumns =3D 0;

//
// TableLayoutManager Ctor
//
function TableLayoutManager(oTableContentProvider, elemContainer, nRows, =
nColumns)
{
	this._oTableContentProvider =3D oTableContentProvider;
	this._elemContainer =3D elemContainer;
	var strTable =3D '<table id=3D\"idTable\">\n</table>\n';
	this._elemContainer.innerHTML =3D strTable;
	this._oTable =3D this._elemContainer.childNodes[0];
	if (nRows !=3D null && nColumns !=3D null)
	{
		this.ChangeLayout(nRows, nColumns);
	}
}

//
// GetRowCount
//
function TableLayoutManager.prototype.GetRowCount()
{ with(this) {
	return _nRows;
}}

//
// GetColCount
//
function TableLayoutManager.prototype.GetColCount()
{ with(this) {
	return _nColumns;
}}

//
// GetCellCount
//
function TableLayoutManager.prototype.GetCellCount()
{ with(this) {
	return _nRows * _nColumns;
}}

//
// GetTableCell
//
function TableLayoutManager.prototype.GetTableCell(iIdx)
{ with(this) {
	return _oTable.cells[iIdx];
}}

//
// ChangeLayout
//
function TableLayoutManager.prototype.ChangeLayout(nNewRowCnt, =
nNewColumnCnt)
{ with(this) {

	if (nNewRowCnt =3D=3D 0 || nNewColumnCnt =3D=3D 0 || (nNewRowCnt =3D=3D =
_nRows && nNewColumnCnt =3D=3D _nColumns))
		return;

	_nRows    =3D nNewRowCnt;
	_nColumns =3D nNewColumnCnt;

	var strTable =3D '<table id=3D\"idTable\" width=3D\"100%\" =
height=3D\"100%\" cols=3D' + _nColumns + '>\n';
	for (var iRows =3D 0; iRows < _nRows; iRows++)
	{
		strTable +=3D '<tr>';
		for (var iColumns =3D 0; iColumns < _nColumns; iColumns++)
		{
			var percentage =3D 100/_nColumns;
			var iCell =3D iRows * _nColumns + iColumns;
			strTable +=3D '<td width=3D"' + percentage.toString() + '%">' + =
_oTableContentProvider.CreateCellContent(iCell); + '</td>';
		}
		strTable +=3D '</tr>';
	}
	strTable +=3D '</table>\n';
=09
	_elemContainer.innerHTML =3D strTable;
	_oTable =3D _elemContainer.childNodes[0];
}}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/seriesmn.js

//
//	Copyright (c) 2003 General Electric Medical Systems IT
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/seriesmn.js $
//		$Revision: 3 $
//		$Date: 3/04/03 11:59a $
//		$Author: Marceld $
//

DeriveFrom(SeriesLayoutManager, TableLayoutManager);

//
// SeriesLayoutManager C'tor
//
function SeriesLayoutManager(elemContainer)
{
	this._activeseriesindex =3D 0;	// index of the series with the active =
viewport (0 or 1)
	this._rgSeries =3D null;
	this.CtorTableLayoutManager(this, elemContainer);
	this.SetSeriesLayout(1, 1);
}

//
// CreateCellContent
//
function SeriesLayoutManager.prototype.CreateCellContent(iCell)
{ with(this) {
	return '<div class=3D\"classContainer\" id=3D\"series' + iCell + =
'"></div>';
}}

//
// SetSeriesLayout
//
function SeriesLayoutManager.prototype.SetSeriesLayout(newRowCnt, =
newColCnt)
{ with(this) {
	if (newRowCnt =3D=3D GetRowCount() && newColCnt =3D=3D GetColCount())
		return false;

	_rgSeries =3D new Array();
	ChangeLayout(newRowCnt, newColCnt);
	if (_activeseriesindex >=3D GetSeriesCount())
	{
		_activeseriesindex =3D 0;
	}
	InitSeriesAreas();
	return true;
}}

//
// InitSeriesAreas
//
function SeriesLayoutManager.prototype.InitSeriesAreas()
{ with(this) {
	var nCellCnt =3D GetCellCount();
	for (var i =3D 0; i < nCellCnt; i++)
	{
		_rgSeries[_rgSeries.length] =3D new =
ViewportLayoutManager(GetTableCell(i).children[0], i);
	}
}}

//
// GetActiveSeries
//
function SeriesLayoutManager.prototype.GetActiveSeries()
{ with(this) {
	return GetSeries(_activeseriesindex);
}}

//
// SetActiveSeries
//
function SeriesLayoutManager.prototype.SetActiveSeries(nSeriesIndex)
{ with(this) {
	if (_activeseriesindex !=3D nSeriesIndex)
	{
		GetActiveViewport().MakeInactive();
		_activeseriesindex =3D nSeriesIndex;
	}
	return GetSeries(_activeseriesindex);
}}

//
// GetSeries
//
function SeriesLayoutManager.prototype.GetSeries(iIdx)
{ with(this) {
	return _rgSeries[iIdx];
}}

//
// GetSeriesCount
//
function SeriesLayoutManager.prototype.GetSeriesCount()
{ with(this) {
	return GetCellCount();
}}

//
// GetActiveSeriesIndex
//
function SeriesLayoutManager.prototype.GetActiveSeriesIndex()
{ with (this) {
	return _activeseriesindex;
}}

//
// GetSeriesLayout
//
function SeriesLayoutManager.prototype.GetSeriesLayout()
{ with (this) {
	return GetRowCount().toString() + 'x' + GetColCount().toString();
}}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/layoutmn.js

//
//	Copyright (c) 2003 General Electric Medical Systems IT
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/layoutmn.js $
//		$Revision: 3 $
//		$Date: 3/04/03 11:38a $
//		$Author: Marceld $
//

DeriveFrom(ViewportLayoutManager, TableLayoutManager);

//
// ViewportLayoutManager C'tor
//
function ViewportLayoutManager(elemContainer, nSeriesIdx)
{
	this._nSeriesIndex =3D nSeriesIdx;
	this._activeviewport =3D 0;		// index of the viewport with the red =
border in the layout
	this._dicomdirseriesnr =3D 0;		// index of the series in the dicomdir
	this._dicomdirimagenr =3D 0;			// index of the first image of the =
series in the DDTV control
	this._rgViewports =3D null;
	this.CtorTableLayoutManager(this, elemContainer);
	this.SetViewportLayout(1, 1);
}

//
// CreateCellContent
//
function ViewportLayoutManager.prototype.CreateCellContent(iCell)
{ with(this) {
	var objViewport =3D new Viewport(iCell, _nSeriesIndex);
	_rgViewports[_rgViewports.length] =3D objViewport;
	return '<div class=3D\"classNoFocus">' + =
objViewport.GetObjectElementString() + '</div>';
}}

//
// SetViewportLayout
//
function ViewportLayoutManager.prototype.SetViewportLayout(newRowCnt, =
newColCnt)
{ with(this) {
	if (newRowCnt =3D=3D GetRowCount() && newColCnt =3D=3D GetColCount())
		return;

	_rgViewports =3D new Array();
	ChangeLayout(newRowCnt, newColCnt);
	InitViewports();
}}

//
// GetViewportCount
//
function ViewportLayoutManager.prototype.GetViewportCount()
{ with(this) {
	return GetCellCount();
}}

//
// SetActiveViewport
//
function =
ViewportLayoutManager.prototype.SetActiveViewport(nViewportIndex)
{ with(this) {
	var oActiveViewport =3D GetActiveViewport();
	if (oActiveViewport !=3D null)
	{
		oActiveViewport.MakeInactive();
	}

	_activeviewport =3D nViewportIndex;

	oActiveViewport =3D GetActiveViewport();
	oActiveViewport.MakeActive();

	return oActiveViewport;
}}


//
// GetActiveViewport
//
function ViewportLayoutManager.prototype.GetActiveViewport()
{ with(this) {
	return GetViewport(_activeviewport);
}}

//
// GetViewport
//
function ViewportLayoutManager.prototype.GetViewport(iIdx)
{ with(this) {
	return _rgViewports[iIdx];
}}

//
// GetLayout
//
function ViewportLayoutManager.prototype.GetLayout()
{ with(this) {
	return GetRowCount().toString() + 'x' + GetColCount().toString();
}}

//
// InitViewports
//
function ViewportLayoutManager.prototype.InitViewports()
{ with(this) {
	var nViewportCnt =3D GetViewportCount();
	for (var i =3D 0; i < nViewportCnt; i++)
	{
		GetViewport(i).Init(GetTableCell(i).children[0].children[0]);
	}
}}

//
// SetImageNr
//
function ViewportLayoutManager.prototype.SetImageNr(nImageIndex)
{ with(this) {
	_dicomdirimagenr =3D nImageIndex;
}}

//
// GetImageNr
//
function ViewportLayoutManager.prototype.GetImageNr()
{ with(this) {
	return _dicomdirimagenr;
}}

//
// GetSeriesNr
//
function ViewportLayoutManager.prototype.GetSeriesNr()
{ with(this) {
	return _dicomdirseriesnr;
}}

//
// SetSeriesNr
//
function ViewportLayoutManager.prototype.SetSeriesNr(nSeriesIndex)
{ with(this) {
	_dicomdirseriesnr =3D nSeriesIndex
}}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/vlayout.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/vlayout.js $
//		$Revision: 22 $
//		$Date: 3/11/03 9:26a $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>

var _serieslayoutman =3D null;
var _bUpdateViewports =3D true;

//
// HasErrors
//
function HasErrors()
{
	var nSeries =3D _serieslayoutman.GetSeriesCount();
	for (var j =3D 0; j < nSeries; j++)
	{
		var oSeries =3D _serieslayoutman.GetSeries(j);
		var nViewports =3D oSeries.GetViewportCount();
		for (var i =3D 0; i < nViewports; i++)
		{
			// Ask all the viewports if they have an error.
			if (oSeries.GetViewport(i).HasErrors())
			{
				return true;
			}
		}
	}

	return false;
}


//
// GetErrorText
//
function GetErrorText()
{
	var nSeries =3D _serieslayoutman.GetSeriesCount();
	for (var j =3D 0; j < nSeries; j++)
	{
		var oSeries =3D _serieslayoutman.GetSeries(j);
		var nViewports =3D oSeries.GetViewportCount();
		for (var i =3D 0; i < nViewports; i++)
		{
			// Ask all the viewports if they have an error.
			if (oSeries.GetViewport(i).HasErrors())
			{
				return oSeries.GetViewport(i).GetErrorText();
			}
		}
	}

	return '';
}


//
// UpdateAllViewports
//
// update all viewport in the current series
function UpdateAllViewports(IDicomDirView, attributes)
{
	if (!_bUpdateViewports)
		return;

	if (!parent.LayoutHasChanged())
	{
		SaveImageAnnotations();
	}

	var oSeries =3D _serieslayoutman.GetActiveSeries();
	for (var i =3D 0; i < oSeries.GetViewportCount(); i++)
	{
		// Forward the update event to all viewports.
		oSeries.GetViewport(i).UpdateViewport(IDicomDirView, i, attributes);
	}
}


//
// UnlockViewports
//
function UnlockViewports(LicenseKey)
{
	for (var j =3D 0; j < _serieslayoutman.GetSeriesCount(); j++)
	{
		var oSeries =3D _serieslayoutman.GetSeries(j);
		for (var i =3D 0; i < oSeries.GetViewportCount(); i++)
		{
			// Set all license keys of the viewports.
			oSeries.GetViewport(i).UnlockViewport(LicenseKey);
		}
	}
}


//
// OnShowAnnotationsChange
//
function OnShowAnnotationsChange()
{
	for (var j =3D 0; j < _serieslayoutman.GetSeriesCount(); j++)
	{
		var oSeries =3D _serieslayoutman.GetSeries(j);
		for (var i =3D 0; i < oSeries.GetViewportCount(); i++)
		{
			// Forward the 'OnShowAnnotationsChange' event to all viewports.
			oSeries.GetViewport(i).OnShowAnnotationsChange();
		}
	}
}


//
// NotifyPlayMode
//
function NotifyPlayMode(bCineMode)
{
	var oSeries =3D _serieslayoutman.GetActiveSeries();
	for (var i =3D 0; i < oSeries.GetViewportCount(); i++)
	{
		oSeries.GetViewport(i).SetCineMode(bCineMode);
	}
}


//
// GetViewportCount
//
function GetViewportCount()
{
	return GetActiveSeries().GetViewportCount();
}


//
// IsSelectedImageMultiFrame
//
function IsSelectedImageMultiFrame()
{
	return (GetActiveViewport().GetFrameCount() > 1);
}


//
// SelectPreviousFrame
//
function SelectPreviousFrame()
{
	var oActiveViewport =3D GetActiveViewport();
	=
oActiveViewport.SelectPreviousFrame(oActiveViewport.GetViewportIndex());
}


//
// SelectNextFrame
//
function SelectNextFrame()
{
	var oActiveViewport =3D GetActiveViewport();
	oActiveViewport.SelectNextFrame(oActiveViewport.GetViewportIndex());
}


//
// SetActiveViewport
//
function SetActiveViewport(nViewportIndex, nSeriesIndex)
{
	if (nSeriesIndex !=3D null && _serieslayoutman.GetActiveSeriesIndex() =
!=3D nSeriesIndex)
	{
		SaveImageAnnotations();
	=09
		var oSeries =3D _serieslayoutman.GetActiveSeries();
		oSeries.SetSeriesNr(parent.GetDicomDirSeriesIndex());
		oSeries.SetImageNr(parent.GetDicomDirImageIndex());

		_bUpdateViewports =3D false;	// ignore OnSelectionChanged event
		oSeries =3D _serieslayoutman.SetActiveSeries(nSeriesIndex);
		parent.SetDicomDirActiveImages(oSeries.GetSeriesNr(), =
oSeries.GetImageNr());
		_bUpdateViewports =3D true;
	}
	var oActiveViewport =3D =
GetActiveSeries().SetActiveViewport(nViewportIndex);
	=
parent.viewcontrol.AddDefaultPreset(oActiveViewport.GetInitialWindowLevel=
());
	parent.viewcontrol.listPresentationStates.value =3D =
oActiveViewport.GetPresentationStateIndex();
	parent.viewcontrol.listWindowPreset.value =3D =
oActiveViewport.GetWindowLevel();
}


//
// GetActiveSeries
//
function GetActiveSeries()
{
	return _serieslayoutman.GetActiveSeries();
}

//
// GetActiveSeriesIndex
//
function GetActiveSeriesIndex()
{
	return _serieslayoutman.GetActiveSeriesIndex();
}

//
// GetActiveViewport
//
function GetActiveViewport()
{
	return GetActiveSeries().GetActiveViewport();
}


//
// GetActiveAttributes
//
function GetActiveAttributes()
{
	return =
_serieslayoutman.GetActiveSeries().GetActiveViewport().GetAttributes();
}


//
// PropagateAttributes
//
function PropagateAttributes(attribs)
{
	var oSeries =3D _serieslayoutman.GetActiveSeries();
	for (var i =3D 0; i < oSeries.GetViewportCount(); i++)
	{
		var viewport =3D oSeries.GetViewport(i);
		if (viewport =3D=3D oSeries.GetActiveViewport())
			continue;
		oSeries.GetViewport(i).SetAttributes(attribs);
	}
}


//
// SetPresentationState
//
function SetPresentationState(fname)
{
	=
_serieslayoutman.GetActiveSeries().GetActiveViewport().SetPresentationSta=
te(fname);
}


//
// SaveImageAnnotations
//
function SaveImageAnnotations()
{
	var oSeries =3D _serieslayoutman.GetActiveSeries();
	var nViewports =3D oSeries.GetViewportCount();
	for (var i =3D 0; i < nViewports; i++)
	{
		oSeries.GetViewport(i).SaveImageAnnotations(i);
	}
}


//
// SetViewportLayout
//
function SetViewportLayout(nRows, nColumns)
{
	_serieslayoutman.GetActiveSeries().SetViewportLayout(nRows, nColumns);	=
// change currently selected series area
}


//
// SetSeriesLayout
//
function SetSeriesLayout(nRows, nColumns)
{
	return _serieslayoutman.SetSeriesLayout(nRows, nColumns);
}


//
// GetLayout
//
function GetLayout()
{
	return _serieslayoutman.GetActiveSeries().GetLayout();
}

//
// GetSeriesLayout
//
function GetSeriesLayout()
{
	return _serieslayoutman.GetSeriesLayout();
}

//
// SelectPresentationState
//
function SelectPresentationState(cnt)
{
	var oSeries =3D GetActiveSeries();
	var nViewports =3D oSeries.GetViewportCount();
	for (var i =3D 0; i < nViewports; i++)
	{
		oSeries.GetViewport(i).SetPresentationStateIndex(cnt);
	}
}

//
// OnLoad
//
function OnLoad()
{
	_serieslayoutman =3D new SeriesLayoutManager(divViewportTable);
	_serieslayoutman.SetSeriesLayout(1, 1);
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/viewport.js

//
//  Copyright (c) 2001 General Electric Company
//
//  Version control:
//      $Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/viewport.js $
//      $Revision: 32 $
//      $Date: 3/11/03 9:26a $
//      $Author: Marceld $
//
//  Helper comment to enable syntax coloring in InterDev: <script>

var strDicomTreeViewObject =3D '<object id =3D "activexviewerlite"' +
									' name =3D "%VIEWPORTID%"' +
									' series =3D "%SERIESID%"' +
							        ' type =3D "application/x-oleobject"' +
							        ' classid =3D =
"clsid:F2ECA3B1-783D-4f90-9CA5-9498FC88C267"' +
							        ' codebase =3D "CdViewer.cab#version=3D' + strVersion + =
'"' +
							        ' class =3D "classNoFocus">' +
							 '</object>';

//
// Viewport C'tor
//
function Viewport(_strViewportId, _strSeriesId)
{
	this._nFrameIndex =3D 0;
	this._viewframe =3D parent;
	this._dicomdirframe =3D null;
	this._strViewportId =3D _strViewportId;
	this._strSeriesId =3D _strSeriesId;
	this._activexviewer =3D null;
	this._strInitWL =3D '';
	this._presstateidx =3D 0;	// no presentation state applied
}

//
// GetObjectElementString
//
function Viewport.prototype.GetObjectElementString()
{ with(this) {
	var re =3D /%VIEWPORTID%/g;
	var strElement =3D strDicomTreeViewObject.replace(re, _strViewportId);
	re =3D /%SERIESID%/g;
	return strElement.replace(re, _strSeriesId);
}}

//
// Init
//
function Viewport.prototype.Init(oActiveXViewer)
{ with(this) {
	_activexviewer =3D oActiveXViewer;
=09
	if (_activexviewer.readyState =3D=3D 4)
	{
		InitImpl();
	}
	else
	{
		_activexviewer.onreadystatechange =3D CreateStaticFunction(this, =
'InitImpl');
	}
}}

=09
//
// InitImpl
//
function Viewport.prototype.InitImpl()
{ with(this) {
	if (_activexviewer.readyState !=3D 4)=09
		return;
=09
	_activexviewer.onreadystatechange =3D null;
	_activexviewer.onfocus =3D OnFocusViewControl;
	_activexviewer.attachEvent('OnMouseWheel', =
_viewframe.OnMouseWheelViewControl);
	if (HasErrors())
	{
		return;
	}

	try
	{
		// Initialise the annotation format of the viewport control.
		_activexviewer.SetAnnotFormat("Default",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("CT",=20
									  "DerivePatientOrientation=3D1 ## =
BottomLeft=3DSP:@00201041%5.1f@mm\nST:@00180050%5.1f@mm\nC@00281050@\nW@0=
0281051@ ## BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("SC",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("MR",=20
									  "DerivePatientOrientation=3D1 ## =
BottomLeft=3DSP:@00201041%5.1f@mm\nST:@00180050%5.1f@mm\nC@00281050@\nW@0=
0281051@ ## BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("RG",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("XA",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ (F@frame@/@00280008@) ## =
TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("US",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("CR",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ ## TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");
		_activexviewer.SetAnnotFormat("NM",=20
									  "BottomLeft=3DC@00281050@\nW@00281051@ ## =
BottomMiddle=3D@00200020@ ## BottomRight=3D@00080070@ ## =
MiddleLeft=3D@00200020@ ## MiddleRight=3D@00200020@ ## =
TopLeft=3D@00100010@\n@00200013%i@ (F@frame@/@00280008@) ## =
TopMiddle=3D@00200020@ ## =
TopRight=3D@00081030@\n@00080020@\n@00080030@\n@00080050@ ## =
MiddlePercentageSize=3D20 ## ",
									  "");

		_activexviewer.SetViewportProperty('imageannotations', =
GetApp().config.ImageAnnotationOptionsString());
		_activexviewer.SetViewportProperty('viewportannotations', =
GetApp().config.ViewportAnnotationOptionsString());

		OnShowAnnotationsChange();
		_activexviewer.SetLocaleDbAndId(GetApp().localedb.GetXMLDb(), =
GetApp().config.LocaleId())

		var Index =3D location.href.lastIndexOf("/");
		var strApplicationDataURL =3D unescape(location.href.slice(0, Index));
		_activexviewer.strApplicationDataURL =3D strApplicationDataURL;
	}
	catch (e)
	{
	}
}}


//
// HasErrors
//
function Viewport.prototype.HasErrors()
{ with (this) {
	try
	{
		return ((typeof(_activexviewer) !=3D 'object') ||
			    (_activexviewer.object =3D=3D null) ||
				(_activexviewer.readyState !=3D 4));
	}
	catch (e)
	{
		return true;
	}
}}


//
// GetErrorText
//
function Viewport.prototype.GetErrorText()
{ with (this) {
	return GetApp().GetLocaleString('msgCannotLoadAmiViewerLite');
}}


//
// UnlockViewport
//
function Viewport.prototype.UnlockViewport(LicenseKey)
{ with(this) {
	LicenseKey.Unlock(_activexviewer);
}}


//
// SaveImageAnnotations
//
function Viewport.prototype.SaveImageAnnotations(index, frameindex)
{ with(this) {
	if (frameindex =3D=3D null)
		frameindex =3D 0;

	var strUID =3D _viewframe.GetImageUID(_strSeriesId + index.toString());
	if (strUID !=3D null)
	{
		var strAnnot =3D _activexviewer.GetImageAnnotations();	// if the =
current image has image annotations
		if ((strAnnot !=3D "") || (strUID !=3D "" && =
_viewframe.GetImageAnnotation(_strSeriesId, strUID + frameindex) !=3D =
""))
		{
			_viewframe.AddToImageAnnotations(_strSeriesId, =
_viewframe.GetImageUID(_strSeriesId + index.toString()) + frameindex, =
strAnnot);
		}
	}
}}


//
// ApplyPresentationState
//
function Viewport.prototype.ApplyPresentationState(uid)
{ with(this) {
	var index =3D _viewframe.GetPresentationStateIndex();
	// apply presentation state
	var fname =3D _dicomdirframe.GetPresentationStateFilename(index, uid);
	if (fname !=3D "")
	{
		_presstateidx =3D index;
		SetPresentationState(fname);
	}
}}


//
// ApplyImageAnnotations
//
function Viewport.prototype.ApplyImageAnnotations(strUID, frameindex)
{ with(this) {
	if (frameindex =3D=3D null)
		frameindex =3D 0;

	var strAnnot =3D _viewframe.GetImageAnnotation(_strSeriesId, strUID + =
frameindex);
	if (strAnnot !=3D null && strAnnot !=3D "")
	{
		_activexviewer.SetImageAnnotations(frameindex, strAnnot);
	}
}}


//
// ApplyImageAtributes
//
function Viewport.prototype.ApplyImageAtributes(attributes)
{ with(this) {
	if (attributes !=3D null)
	{
		SetAttributes(attributes);
	}
}}

//
// UpdateViewport
//
// Purpose: Updates the image in the viewport control.
//
function Viewport.prototype.UpdateViewport(IDicomDirView, index, =
attributes)
{ with(this) {
	_dicomdirframe =3D IDicomDirView;
	//SaveImageAnnotations(index);

	var strUID =3D _dicomdirframe.GetImageInstanceUID(index);	// get =
instance UID of the image to be shown

	_viewframe.SetImageUID(_strSeriesId + index.toString(), strUID);
	_viewframe.SetSeriesIndex(_strSeriesId, =
_dicomdirframe.GetActiveSeriesIndex());

	// Display the current selected image.
	_activexviewer.strDataPath =3D _dicomdirframe.GetImagePath(index);

	_strInitWL =3D _activexviewer.GetViewportProperty('windowlevel');
	_viewframe.viewcontrol.AddDefaultPreset(_strInitWL);

	ApplyPresentationState(strUID);
	ApplyImageAnnotations(strUID, 0);
	ApplyImageAtributes(attributes);

	_nFrameIndex =3D 0;
}}


//
// SelectPreviousImage
//
function Viewport.prototype.SelectPreviousFrame(index)
{ with(this) {
	SaveImageAnnotations(index, _nFrameIndex);
	_nFrameIndex--;
	if (_nFrameIndex < 0)
	{
		_nFrameIndex =3D GetFrameCount() - 1;
	}
	_activexviewer.SetFrame(_nFrameIndex);

	var strUID =3D _viewframe.GetImageUID(_strSeriesId + index.toString());
	var attributes =3D _viewframe.GetActiveSeriesAttributes();

	ApplyPresentationState(strUID);
	ApplyImageAnnotations(strUID, _nFrameIndex);
	ApplyImageAtributes(attributes);
}}


//
// GetFrameCount
//
function Viewport.prototype.GetFrameCount()
{ with(this) {
	return _activexviewer.FrameCount;
}}


//
// SelectNextImage
//
function Viewport.prototype.SelectNextFrame(index)
{ with(this) {
	SaveImageAnnotations(index, _nFrameIndex);
	_nFrameIndex++;
	if (_nFrameIndex >=3D GetFrameCount())
	{
		_nFrameIndex =3D 0;
	}
	_activexviewer.SetFrame(_nFrameIndex);

	var strUID =3D _viewframe.GetImageUID(_strSeriesId + index.toString());
	var attributes =3D _viewframe.GetActiveSeriesAttributes();

	ApplyPresentationState(strUID);
	ApplyImageAnnotations(strUID, _nFrameIndex);
	ApplyImageAtributes(attributes);
}}


//
// OnFocusViewControl
//
function Viewport.prototype.OnFocusViewControl()
{ with(this) {
	SetActiveViewport(parseInt(this.name), parseInt(this.series));
}}


//
// OnShowAnnotationsChange
//
// Purpose: Updates the annotations in the viewport depending on the =
current state
//          of 'show-annotations' of the viewframe component.
//
function Viewport.prototype.OnShowAnnotationsChange()
{ with(this) {
	var nNone  =3D 0;
	var nBasic =3D 1;

	if (_viewframe.GetShowAnnotations())
	{
		_activexviewer.AnnotationLevel =3D nBasic;
	}
	else
	{
		_activexviewer.AnnotationLevel =3D nNone;
	}
}}


//
// SetCineMode
//
function Viewport.prototype.SetCineMode(bCineMode)
{ with(this) {
	_activexviewer.CineMode =3D bCineMode;
}}


//
// GetAttributes
//
function Viewport.prototype.GetAttributes()
{ with(this) {
	return _activexviewer.GetImageAttributes();
}}

//
// SetAttributes
//
function Viewport.prototype.SetAttributes(attributes)
{ with(this) {
	_activexviewer.SetImageAttributes(attributes);
}}


//
// GetPresentationStateCount
//
function Viewport.prototype.GetPresentationStateCount()
{ with(this) {
	return _activexviewer.PresentationStateCount;
}}


//
// SetPresentationState
//
function Viewport.prototype.SetPresentationState(strFilename)
{ with(this) {
	_activexviewer.strPresentationStatePath =3D strFilename;
}}

//
// GetViewportIndex
//
function Viewport.prototype.GetViewportIndex()
{ with(this) {
	return parseInt(_strViewportId);
}}

//
// MakeActive
//
function Viewport.prototype.MakeActive()
{ with(this) {
	_activexviewer.parentElement.className =3D "classFocus";
}}

//
// MakeInactive
//
function Viewport.prototype.MakeInactive()
{ with(this) {
	_activexviewer.parentElement.className =3D "classNoFocus";
}}

//
// SetWindowLevel
//
function Viewport.prototype.SetWindowLevel(strValue)
{ with(this) {
	_activexviewer.SetViewportProperty('windowlevel', strValue);
}}

//
// GetWindowLevel
//
function Viewport.prototype.GetWindowLevel()
{ with(this) {
	return _activexviewer.GetViewportProperty('windowlevel');
}}

//
// GetInitialWindowLevel
//
function Viewport.prototype.GetInitialWindowLevel()
{ with(this) {
	return _strInitWL;
}}

//
// IsStaticPaletteMonitor
//
function Viewport.prototype.IsStaticPaletteMonitor()
{ with(this) {
	return _activexviewer.IsStaticPaletteMonitor();
}}

//
// GetPresentationStateIndex
//
function Viewport.prototype.GetPresentationStateIndex()
{ with(this) {
	return _presstateidx;
}}

//
// SetPresentationStateIndex
//
function Viewport.prototype.SetPresentationStateIndex(nVal)
{ with(this) {
	_presstateidx =3D nVal;
}}
------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\vlayout.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE></TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250">
<META content=3D"MSHTML 6.00.6000.16945" name=3DGENERATOR>
<META content=3Dhttp://schemas.microsoft.com/intellisense/ie5=20
name=3Dvs_targetSchema><LINK href=3D"file:///D:/RA/viewport.css" =
type=3Dtext/css=20
rel=3Dstylesheet>
<SCRIPT src=3D"file:///D:/RA/appnotif.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/vrsvwlt.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/debug.js" type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/util.js" type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/tablemn.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/seriesmn.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/layoutmn.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/vlayout.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/viewport.js" =
type=3Dtext/javascript></SCRIPT>
</HEAD>
<BODY onload=3DOnLoad()>
<DIV class=3DclassContainer id=3DdivViewportTable></DIV></BODY></HTML>

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/viewfrm.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/viewfrm.js $
//		$Revision: 24 $
//		$Date: 3/11/03 9:26a $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>


var p_dicomdirview =3D null;
var p_licensekey =3D null;
var p_bPlayMode =3D false;
var p_timerID;
var p_bMultiFrameCine;
var p_bStartCineInProgress =3D false;
var p_bShowAnnotations =3D true;
var p_nCineSpeed    =3D 10; // in frames per second.
var s_nCineSpeedMax =3D 15;
var s_nCineSpeedMin =3D  1;
var p_rgSeriesAttributes =3D new Array();
var p_AnnotationContainer =3D new Object();
var p_ImageUIDs =3D new Object();
var p_cineattributes =3D null;
var _bLayoutChanging =3D false;
var _rgDicomdirSeriesIndex =3D new Array;

//
// HasErrors
//
function HasErrors()
{
	return (viewlayout.HasErrors() || viewcontrol.HasErrors());
}


//
// GetErrorText
//
function GetErrorText()
{
	if (viewlayout.HasErrors())
		return viewlayout.GetErrorText();

	if (viewcontrol.HasErrors())
		return viewcontrol.GetErrorText();
}


//
// AttachDicomDirView
//
function AttachDicomDirView(IDicomDirView)
{
	// Store the reference to the IDicomDirView interface.
	p_dicomdirview =3D IDicomDirView;
=09
	// Take a subscription on 'change selected image' events.
	p_dicomdirview.onselectionchanged =3D OnUpdateInNormalMode;
	p_dicomdirview.onnewdicomfilesetloaded =3D OnNewDicomFileSetLoaded;
	p_dicomdirview.onstudychanged =3D OnStudyChanged;
	p_dicomdirview.onserieschanged =3D OnSeriesChanged;

	// Stop the cine if the user goes to the browse dialog.
	p_dicomdirview.onbrowsemode =3D StopCine;

	p_dicomdirview.SetImagesToHighlight(viewlayout.GetViewportCount());

	// Trigger the first initial update.
	p_dicomdirview.onselectionchanged();
}


//
// SetLicenseKey
//
// Purpose: Receive the license key for the viewport control.=20
//          Key is cached to handle viewlayout reloads.
//
function SetLicenseKey(LicenseKey)
{
	p_licensekey =3D LicenseKey;
	viewlayout.UnlockViewports(p_licensekey);
}

//
// OnSeriesLayoutChange
//
function OnSeriesLayoutChange()
{
	_bLayoutChanging =3D true;
	if (p_licensekey !=3D null)
	{
		viewlayout.UnlockViewports(p_licensekey);
	}
	if (p_dicomdirview !=3D null)
	{
		var nSeriesIndex =3D p_dicomdirview.GetActiveSeriesIndex();
		var nImageIndex =3D p_dicomdirview.GetActiveImageIndex()
		var nSeriesCount =3D viewlayout._serieslayoutman.GetSeriesCount();
		_rgDicomdirSeriesIndex =3D new Array(nSeriesCount)
		for (var i =3D nSeriesCount - 1; i >=3D 0; i--)
		{
			_rgDicomdirSeriesIndex[i] =3D nSeriesIndex;
			var oSeries =3D viewlayout._serieslayoutman.SetActiveSeries(i);
			oSeries.SetSeriesNr(nSeriesIndex);
			oSeries.SetImageNr(nImageIndex);
			p_dicomdirview.SetActiveImages(nSeriesIndex, nImageIndex, =
viewlayout.GetViewportCount());
		}
	}
	_bLayoutChanging =3D false;
}


//
// OnLayoutChange
//
// Purpose: Handles the event 'layout change'. This event is sent by
//          the viewlayout when it is (re)loaded.
//
function OnLayoutChange()
{
	_bLayoutChanging =3D true;
	if (p_licensekey !=3D null)
	{
		viewlayout.UnlockViewports(p_licensekey);
	}
	if (p_dicomdirview !=3D null)
	{
		p_dicomdirview.SetActiveImages(p_dicomdirview.GetActiveSeriesIndex(), =
p_dicomdirview.GetActiveImageIndex(), viewlayout.GetViewportCount());
	}
	if (p_bStartCineInProgress)
	{
		p_bStartCineInProgress =3D false;
		StartCine();
	}
	_bLayoutChanging =3D false;
}


//
// GetActiveSeriesAttributes
//
function GetActiveSeriesAttributes()
{
	var seriesindex =3D p_dicomdirview.GetActiveSeriesIndex();
	if (seriesindex =3D=3D -1)
		return null;
	return p_rgSeriesAttributes[seriesindex];
}

//
// OnUpdateInNormalMode
//
function OnUpdateInNormalMode()
{
	// Forward the command to the 'viewlayout' frame.
	viewlayout.UpdateAllViewports(p_dicomdirview, =
GetActiveSeriesAttributes());

	// Stop the cine if playing.
	if (p_bPlayMode)
	{
		StopCine();
	}

	if (p_dicomdirview.GetActiveSeriesIndex() !=3D -1)
	{
		var oActiveViewport =3D viewlayout.GetActiveViewport();
		if (oActiveViewport =3D=3D null)
		{
			viewlayout.SetActiveViewport(0);
		}
		viewlayout.GetActiveViewport().MakeActive();
	}
	viewcontrol.UpdateControls(p_dicomdirview);
	viewcontrol.listWindowPreset.value =3D =
viewlayout.GetActiveViewport().GetWindowLevel();
}


//
// OnUpdateInCineControlMode
//
function OnUpdateInCineControlMode()
{
	viewlayout.UpdateAllViewports(p_dicomdirview, p_cineattributes);
}


//
// SetViewportLayout
//
function SetViewportLayout(nRows, nColumns)
{
	viewlayout.SaveImageAnnotations();
	viewlayout.SetViewportLayout(nRows, nColumns);	// change currently =
selected series area
	OnLayoutChange();
}

//
// SetSeriesLayout
//
function SetSeriesLayout(nRows, nColumns)
{
	if (viewlayout.SetSeriesLayout(nRows, nColumns))
	{
		OnSeriesLayoutChange();
	}
}

//
// ImageBack
//
function ImageBack()
{
	if (viewlayout.IsSelectedImageMultiFrame())
	{
		viewlayout.SelectPreviousFrame();
	}
	else
	{
		p_dicomdirview.SelectPreviousImagesInSeries(1);
	}
}


//
// ImageForward
//
function ImageForward()
{
	if (viewlayout.IsSelectedImageMultiFrame())
	{
		viewlayout.SelectNextFrame();
	}
	else
	{
		p_dicomdirview.SelectNextImagesInSeries(1);
	}
}

//
// PageBack
//
function PageBack()
{
	ASSERT(!viewlayout.IsSelectedImageMultiFrame());
	=
p_dicomdirview.SelectPreviousImagesInSeries(viewlayout.GetViewportCount()=
);
}

//
// PageForward
//
function PageForward()
{
	ASSERT(!viewlayout.IsSelectedImageMultiFrame());
	p_dicomdirview.SelectNextImagesInSeries(viewlayout.GetViewportCount());
}

//
// SeriesBack
//
function SeriesBack()
{
	p_dicomdirview.SelectPreviousSeries();
}

//
// SeriesForward
//
function SeriesForward()
{
	p_dicomdirview.SelectNextSeries();
}

//
// ImageRewind
//
function ImageRewind()
{
	if (viewlayout.IsSelectedImageMultiFrame())
	{
		viewlayout.SelectFirstImage();
	}
	else
	{
		p_dicomdirview.SelectFirstImageInSeries();
	}
}


//
// ImagePlayStop
//
// Purpose: Toggle the state of the cine: play <-> stop>
//
function ImagePlayStop()
{
	if (p_bPlayMode)
	{
		StopCine();
	}
	else
	{
		if (viewlayout.GetLayout() =3D=3D "1x1")
		{
			StartCine();
		}
		else
		{
			p_bStartCineInProgress =3D true;
			SetViewportLayout(1, 1);
		}
	}
}


//
// SetCineSpeed
//
// Purpose: Update the cine speed. It is legal to change the speed while =
in playmode.
//
function SetCineSpeed(nCineSpeed)
{
	p_nCineSpeed =3D nCineSpeed;
	if (p_bPlayMode)
	{
		clearInterval(p_timerID);
		p_timerID =3D setInterval(OnCineTimerTick, 1000 / p_nCineSpeed);
	}
}


//
// GetCineSpeed
//
function GetCineSpeed()
{
	return p_nCineSpeed;
}

//
// CineSpeedChange
//
function CineSpeedChange(nCineSpeed)
{
	SetCineSpeed(nCineSpeed);
	viewcontrol.OnCineSpeedChange(s_nCineSpeedMin, nCineSpeed, =
s_nCineSpeedMax);
}

//
// CineSpeedDecrease
//
// Purpose: Decrease the cine speed with a stepsize of 1 fps.
//          Lower bound is 1 fps.
//
function CineSpeedDecrease()
{
	var nCineSpeed =3D GetCineSpeed();
	if (nCineSpeed > s_nCineSpeedMin)
	{
		nCineSpeed -=3D 1;
		CineSpeedChange(nCineSpeed);
	}
}


//
// CineSpeedIncrease
//
// Purpose: Increase the cine speed with a stepsize of 1 fps.
//          Upper bound is 25 fps.
//
function CineSpeedIncrease()
{
	var nCineSpeed =3D GetCineSpeed();
	if (nCineSpeed < s_nCineSpeedMax)
	{
		nCineSpeed +=3D 1;
		CineSpeedChange(nCineSpeed);
	}
}


//
// StartCine
//=20
function StartCine()
{
	p_bMultiFrameCine =3D viewlayout.IsSelectedImageMultiFrame();
	p_bPlayMode =3D true;
=09
	// Notify others that a cine is started.
	viewcontrol.NotifyPlayMode(p_bPlayMode);
	viewlayout.NotifyPlayMode(p_bPlayMode);

	p_cineattributes =3D viewlayout.GetActiveAttributes();
	p_timerID =3D setInterval(OnCineTimerTick, 1000 / p_nCineSpeed);
}


//
// StopCine
//
function StopCine()
{
	clearInterval(p_timerID);
	p_bPlayMode =3D false;

	// Notify others that a cine is stopped.
	viewcontrol.NotifyPlayMode(p_bPlayMode);
	viewlayout.NotifyPlayMode(p_bPlayMode);
	p_cineattributes =3D null;
	p_dicomdirview.onselectionchanged();	// force update
}


//
// OnCineTimerTick
//
// Purpose: Handles timer events by selecting the next image.
//
function OnCineTimerTick()
{
	if (p_bMultiFrameCine)
	{
		viewlayout.SelectNextFrame();
	}
	else
	{
		// Switch to the cine update event handler. The default event handler =
will stop the cine.
		var OrginalEventHandler =3D p_dicomdirview.onselectionchanged;
		p_dicomdirview.onselectionchanged =3D OnUpdateInCineControlMode;

		if (p_dicomdirview.HasNextImageInSeries())
		{
			p_dicomdirview.SelectNextImagesInSeries(1);
		}
		else
		{
			p_dicomdirview.SelectFirstImageInSeries();
		}

		p_dicomdirview.onselectionchanged =3D OrginalEventHandler;
	}
}


//
// IsSelectedImageMultiFrame
//
function IsSelectedImageMultiFrame()
{
	return viewlayout.IsSelectedImageMultiFrame();
}


//
// SetShowAnnotations
//=20
function SetShowAnnotations(bShowAnnotations)
{
	p_bShowAnnotations =3D bShowAnnotations;
	viewlayout.OnShowAnnotationsChange();
}


//
// GetShowAnnotations
//=20
function GetShowAnnotations()
{
	return p_bShowAnnotations;
}


//
// OnMouseWheelViewControl
//
// Purpose: Receives mouse wheel events from the viewport control that =
has the focus.
//          Normal mode: select the next or previous image in a series.
//          Cine   mode: increase or decrease the cine speed.
//
function OnMouseWheelViewControl(nTicks)
{
	if (nTicks < 0)
	{
		nTicks =3D Math.abs(nTicks);
		if (p_bPlayMode)
		{
			for (var i =3D 0; i < nTicks; i++)
			{
				CineSpeedDecrease()
			}
		}
		else
		{
			for (var i =3D 0; i < nTicks; i++)
			{
				ImageForward()
			}
		}
	}
	else
	{
		if (p_bPlayMode)
		{
			for (var i =3D 0; i < nTicks; i++)
			{
				CineSpeedIncrease()
			}
		}
		else
		{
			for (var i =3D 0; i < nTicks; i++)
			{
				ImageBack()
			}
		}
	}
}



//
// ClearSeriesAttributes
//
function ClearSeriesAttributes()
{
	var seriesindex =3D p_dicomdirview.GetActiveSeriesIndex();
	if (seriesindex =3D=3D -1)
		return;
	p_rgSeriesAttributes[seriesindex] =3D null;
}

//
// OnPropagateClicked
//
function OnPropagateClicked()
{
	var seriesindex =3D p_dicomdirview.GetActiveSeriesIndex();
	if (seriesindex =3D=3D -1)
		return;

	p_rgSeriesAttributes[seriesindex] =3D viewlayout.GetActiveAttributes();
	if (viewlayout.GetLayout() !=3D "1x1")
	{
		viewlayout.PropagateAttributes(p_rgSeriesAttributes[seriesindex]);
	}
}


//
// OnNewDicomFileSetLoaded
//
function OnNewDicomFileSetLoaded()
{
	var cnt =3D p_dicomdirview.GetSeriesCount();
	p_rgSeriesAttributes =3D new Array(cnt);
	for (var i =3D 0; i < cnt; i++)
	{
		p_rgSeriesAttributes[i] =3D null;
	}
	SetSeriesLayout(1, 1);
}


//
// OnStudyChanged
//
function OnStudyChanged()
{
	viewcontrol.ClearPresentationStateListbox();
	=
viewcontrol.Feed2PresentationStateListbox(GetApp().GetLocaleString('strEm=
ptyPresentationState'), 0);
	// fill dropdown list with presentation states from DICOMDIR
	var cnt =3D p_dicomdirview.GetPresentationStateCount();
	if (cnt > 0)
	{
		for (var i =3D 0; i < cnt; i++)
		{
			var str =3D p_dicomdirview.GetPresentationStateDescription(i);
			if (str =3D=3D "")
			{
				str =3D p_dicomdirview.GetPresentationStateLabel(i);
			}
			viewcontrol.Feed2PresentationStateListbox(str, i+1);
		}
	}

	viewcontrol.SelectPresentationState(cnt);
	viewlayout.SelectPresentationState(cnt);
}

//
// OnSeriesChanged
//
function OnSeriesChanged()
{
	viewcontrol.RefreshWLPresetList(p_dicomdirview.GetActiveModality());
}

//
// OnPresentationStateChange
//
function OnPresentationStateChange(value)
{
	ClearImageAnnotations();
	ClearSeriesAttributes();
}

//
// GetPresentationStateIndex
//
function GetPresentationStateIndex()
{
	return viewcontrol.listPresentationStates.value;
}


//
// ClearImageAnnotations
//
function ClearImageAnnotations()
{
	var nSeriesIndex =3D =
_rgDicomdirSeriesIndex[viewlayout.GetActiveSeriesIndex()];
	if (nSeriesIndex =3D=3D -1)
		return;

	p_AnnotationContainer[nSeriesIndex] =3D new Object();

	p_ImageUIDs =3D new Object();
}


//
// AddToImageAnnotations
//
function AddToImageAnnotations(seriesindex, uid, strAnnot)
{
	var nSeriesIndex =3D _rgDicomdirSeriesIndex[seriesindex];
	if (nSeriesIndex =3D=3D -1)
		return;

	if (p_AnnotationContainer[nSeriesIndex] =3D=3D null)
	{
		p_AnnotationContainer[nSeriesIndex] =3D new Object;
	}
	p_AnnotationContainer[nSeriesIndex][uid] =3D strAnnot;
}


//
// GetImageAnnotation
//
function GetImageAnnotation(seriesindex, uid)
{
	var nSeriesIndex =3D _rgDicomdirSeriesIndex[seriesindex];
	if (nSeriesIndex =3D=3D -1)
		return;

	return p_AnnotationContainer[nSeriesIndex] ? =
p_AnnotationContainer[nSeriesIndex][uid] : null;
}


//
// GetImageUID
//
function GetImageUID(index)
{
	return p_ImageUIDs[index];
}


//
// SetImageUID
//
function SetImageUID(index, uid)
{
	p_ImageUIDs[index] =3D uid;
}

//
// SetDicomDirActiveImages
//
function SetDicomDirActiveImages(nSeriesIndex, nImageIndex)
{
	p_dicomdirview.SetActiveImages(nSeriesIndex, nImageIndex, =
viewlayout.GetViewportCount());
}

//
// GetDicomDirImageIndex
//
function GetDicomDirImageIndex()
{
	return p_dicomdirview.GetActiveImageIndex();
}

//
// GetDicomDirSeriesIndex
//
function GetDicomDirSeriesIndex()
{
	return p_dicomdirview.GetActiveSeriesIndex();
}

//
// ChangeWindowLevelPreset
//
function ChangeWindowLevelPreset(strValue)
{
	viewlayout.GetActiveViewport().SetWindowLevel(strValue);
}

//
// IsStaticPaletteMonitor
//
function IsStaticPaletteMonitor()
{
	return viewlayout.GetActiveViewport().IsStaticPaletteMonitor();
}

//
// LayoutHasChanged
//
function LayoutHasChanged()
{
	return _bLayoutChanging;
}

//
// SetSeriesIndex
//
function SetSeriesIndex(seriesidx, dicomdirseriesidx)
{
	_rgDicomdirSeriesIndex[seriesidx] =3D dicomdirseriesidx;
}

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: text/html;
	charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
Content-Location: file://D:\RA\viewfrm.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<!--
		Copyright (c) 2001 General Electric Company

		Version control:
				$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/viewfrm.htm $
				$Revision: 10 $
				$Date: 3/06/03 2:59p $
				$Author: Marceld $
--><HTML><HEAD><TITLE>viewframe</TITLE>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dwindows-1250">
<META content=3Dhttp://schemas.microsoft.com/intellisense/ie5=20
name=3Dvs_targetSchema>
<SCRIPT src=3D"file:///D:/RA/debug.js" type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/appnotif.js" =
type=3Dtext/javascript></SCRIPT>

<SCRIPT src=3D"file:///D:/RA/viewfrm.js" =
type=3Dtext/javascript></SCRIPT>

<META content=3D"MSHTML 6.00.6000.16945" =
name=3DGENERATOR></HEAD><FRAMESET=20
id=3DfrmsetViewing border=3D0 frameSpacing=3D0 rows=3D"35px, *" =
frameBorder=3D0><FRAME=20
id=3Dviewcontrol marginWidth=3D0 marginHeight=3D0 =
src=3D"file://D:\RA\viewctrl.htm"=20
frameBorder=3D0 noResize scrolling=3Dno><FRAME id=3Dviewlayout =
marginWidth=3D0=20
marginHeight=3D0 src=3D"file://D:\RA\vlayout.htm" =
scrolling=3Dno></FRAMESET></HTML>

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/config.js

//
//	Copyright (c) 2003 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/config.js $
//		$Revision: 1 $
//		$Date: 3/04/03 3:43p $
//		$Author: Marceld $
//

//
// ConfigFile C'tor
//
function ConfigFile()
{
	this._xmlCfg =3D CreateXmlDoc('config.xml');
}

function ConfigFile.prototype.GetItem(strXPath, strDefault)
{ with(this) {
	if (strDefault =3D=3D null)
	{
		strDefault =3D '';
	}
	var node =3D _xmlCfg.selectSingleNode(strXPath);
	return node ? node.text : strDefault;
}}

//
// ProvidedByTitle
//
function ConfigFile.prototype.ProvidedByTitle()
{ with(this) {
	return GetItem('/cdviewer/providedBy/title');
}}

//
// ProvidedByText
//
function ConfigFile.prototype.ProvidedByText()
{ with(this) {
	return GetItem('/cdviewer/providedBy/text');
}}

//
// ProvidedByUrl
//
function ConfigFile.prototype.ProvidedByUrl()
{ with(this) {
	return GetItem('/cdviewer/providedBy/url');
}}

//
// ProvidedByPicture
//
function ConfigFile.prototype.ProvidedByPicture()
{ with(this) {
	return GetItem('/cdviewer/providedBy/picture');
}}

//
// LocaleId
//
function ConfigFile.prototype.LocaleId()
{ with(this) {
	return GetItem('/cdviewer/config/locale', 'en');
}}

//
// LocalFormatFontOptions
//
function ConfigFile.prototype.LocalFormatFontOptions(rgnode)
{
	var strResult =3D '';
	for (var i =3D 0; i < rgnode.length; i++)
	{
		switch(rgnode[i].nodeName)
		{
			case 'color':
				strResult +=3D 'Color=3D"' + rgnode[i].text + '";';
				break;
			case 'size':
				strResult +=3D 'FontSize=3D"' + rgnode[i].text + '";';
				break;
			case 'relsize':
				strResult +=3D 'FontRelSize=3D"' + rgnode[i].text + '";';
				break;
			case 'maxsize':
				strResult +=3D 'FontMaxSize=3D"' + rgnode[i].text + '";';
				break;
			case 'minsize':
				strResult +=3D 'FontMinSize=3D"' + rgnode[i].text + '";';
				break;
			case 'font':
				strResult +=3D 'Font=3D"' + rgnode[i].text + '";';
				break;
		}
	}
	return strResult;
}

//
// ImageAnnotationOptionsString
//
function ConfigFile.prototype.ImageAnnotationOptionsString()
{ with(this) {
	var rgnode =3D =
_xmlCfg.selectNodes('/cdviewer/config/imageannotations/*');
	return LocalFormatFontOptions(rgnode);
}}

//
// ViewportAnnotationOptionsString
//
function ConfigFile.prototype.ViewportAnnotationOptionsString()
{ with(this) {
	var rgnode =3D =
_xmlCfg.selectNodes('/cdviewer/config/viewportannotations/*');
	return LocalFormatFontOptions(rgnode);
}}

//
// GetWindowLevelPresetNode
//
function ConfigFile.prototype.GetWindowLevelPresetNode()
{ with(this) {
	return _xmlCfg.selectSingleNode('/cdviewer/windowpresets');
}}


------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/localedb.js

/*
	(C) 2001 Applicare Medical Imaging B.V.


	Version control:
		$Archive: /dev/src/WebViewer/FreeViewer/HTML/localedb.js $
		$Revision: 15 $
		$Date: 7/15/02 4:54p $
		$Author: Marceld $
*/
//<SCRIPT>


//
// CLocaleDb
//
// Purpose: Constructor. Argument 'strLocaleId' contains the locale to =
use in RFC 1766 format.
//
function CLocaleDb(strXmlFilenameBase)
{
	this._strLocaleId =3D '';
	this._xmlDb       =3D null;
	this._strXmlFilenameBase =3D strXmlFilenameBase;
}


//
// IsValidLocale
//
// Purpose: Verifies that locale db supports the current locale id
function CLocaleDb.prototype.IsValidLocale()
{ with (this) {
	return _xmlDb !=3D null && FindString('msgIsValidLocale').bFound;
}}


//
// GetLocaleId
//
function CLocaleDb.prototype.GetLocaleId()
{ with (this) {
	return _strLocaleId;
}}


//
// GetXmlFilename()
//
function CLocaleDb.prototype.GetXmlFilename(strLocaleId)
{ with (this) {
	return _strXmlFilenameBase +  "-" + strLocaleId + ".xml";
}}


//
// SetLocaleId
//
// Purpose: Set a new locale ID. Will return false if XML database needs =
to be reloaded and its fails.
//
function CLocaleDb.prototype.SetLocaleId(strLocaleId, strDelim)
{ with (this) {
	if (strDelim =3D=3D null)
		strDelim =3D '-';

	var strNewLocaleId =3D strLocaleId.toLowerCase();
	if (strNewLocaleId =3D=3D _strLocaleId)
		return true;

	try
	{
		var strXmlDoc =3D _strXmlFilenameBase +  strDelim + strNewLocaleId + =
".xml";
		var xmlDb =3D CreateXmlDoc(strXmlDoc, false, true);
	}
	catch (e)
	{
		return false;
	}

	_strLocaleId =3D strNewLocaleId;
	_xmlDb =3D xmlDb;
	return true;=20
}}


//
// GetXMLDb
//
function CLocaleDb.prototype.GetXMLDb()
{ with (this) {
	return _xmlDb;
}}


//
// FindString
//
// Purpose: Tries to find a string that matches the requested ID in the =
configured locale.
//          The functions returns a small 'result' object that contains =
the properties:
//          strText: containing the found string or 'strStringId' when =
the string could not be found.
//          bFound:  result of the find operation.
//
function CLocaleDb.prototype.FindString(strStringId)
{ with (this) {
	var result =3D new Object;
	var strMatch =3D "id('" + strStringId + "')/tuv[@lang =3D '" + =
_strLocaleId + "']";
=09
	if (_xmlDb !=3D null)
	{
		var nodeTranslationUnitVariant =3D _xmlDb.selectSingleNode(strMatch);
		if (nodeTranslationUnitVariant !=3D null)
		{
			result.strText =3D nodeTranslationUnitVariant.text;
			result.bFound  =3D true;
			return result;
		}
	}

	result.strText =3D strStringId;
	result.bFound  =3D false;
	return result;
}}




------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/locale.js

/*
	(C) 1998 Applicare Medical Imaging B.V.


	Version control:
		$Archive: /dev/src/WebViewer/Content/HTML/locale.js $
		$Revision: 11 $
		$Date: 10-07-02 11:20 $
		$Author: Gerardb $

	This file containts support functions to translate strings and =
elements.
*/
// <SCRIPT>


// Create a private reference to 'localedb' to be able to use 'localedb' =
when the
// the parent is already unloaded (during the shutdown process for =
example).
var localedb =3D parent.localedb;


//
// SetLocaleDB
//
function SetLocaleDB(newlocaledb)
{
	localedb =3D newlocaledb;
}

//
// GetLocaleDB
//
function GetLocaleDB()
{
	return localedb;
}

//
// GetLocaleString
//
function GetLocaleString(strStringID)
{
	return localedb.FindString(strStringID).strText;
}

//
// FindString
//
function FindString(strStringID)
{
	return localedb.FindString(strStringID);
}

//
// SetElemText
//
function SetElemText(elem, str)
{
	for (var i =3D 0; i < elem.childNodes.length; i++)
	{
		var node =3D elem.childNodes.item(i);
		if (node.nodeType =3D=3D 3)
		{
			node.data =3D str;
			return;
		}
	}
	elem.insertAdjacentText('afterBegin', str);
}


//
// TranslateElements
//
function TranslateElements(objectContainer, strTag)
{=20
	ASSERT(strTag !=3D 'INPUT'); // cannot update with innerText!
	var rgElem =3D objectContainer.all.tags(strTag);

	for (var i =3D 0; i < rgElem.length; i++)
	{
		var elem =3D rgElem[i];
	=09
		if (elem.captionid !=3D null && elem.captionid !=3D "")
		{
			SetElemText(elem, GetLocaleString(elem.captionid));
		}
		if (elem.tooltipid !=3D null && elem.tooltipid !=3D "")
		{
			elem.title =3D GetLocaleString(elem.tooltipid);
		}
	}
}


//
// TranslateNode
//
function TranslateNode(xmlnode)
{
	if (xmlnode.getAttribute('descrid') !=3D '')
	{
		return GetLocaleString(xmlnode.getAttribute('descrid'));
	}
	if (xmlnode.getAttribute('nameid') !=3D '')
	{
		return GetLocaleString(xmlnode.getAttribute('descrid'));
	}
	if (xmlnode.getAttribute('descr') !=3D '')
	{
		return xmlnode.getAttribute('descrid');
	}
	return xmlnode.getAttribute('name');
}



//
// TranslateChilderenByID
//
function TranslateChilderenByID(elemParent, strTag)
{
	var rgElem =3D elemParent.all.tags(strTag);

	var bLabel   =3D strTag =3D=3D "LABEL";
	var bLegend	 =3D strTag =3D=3D "LEGEND";

	for (var i =3D 0; i < rgElem.length; i++)
	{
		var elem =3D rgElem[i];
		var strId =3D elem.id;

		if (elem.getAttribute('CAPTION') !=3D 'false')
		{		=09
			elem.innerText =3D GetLocaleString( (bLabel || bLegend) ? strId : =
(strId + '.Caption'));
		}

		if (!bLegend && (elem.getAttribute('TOOLTIP') !=3D 'false'))
		{
			var elemFor =3D null;
			var result =3D null;
			if (bLabel)
			{
				elemFor =3D elem.parentElement.all[elem.htmlFor];
				if ((elemFor !=3D null) && (elemFor.getAttribute('TOOLTIP') !=3D =
'false'))
				{
					result =3D FindString(elemFor.id + '.Tooltip');
				}
			}
		=09
			if (result =3D=3D null)
			{
				result =3D FindString(elem.id + '.Tooltip');
			}

			if (result.bFound)
			{
				elem.title =3D result.strText;
				if (elemFor !=3D null)
				{
					elemFor.title =3D result.strText;
				}
			}
		}
	}
}


------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/app.js

//
//	Copyright (c) 2001 General Electric Company
//
//	Version control:
//		$Archive: =
/releases/FreeViewer_2.0/src/WebViewer/FreeViewer/HTML/app.js $
//		$Revision: 22 $
//		$Date: 3/10/03 8:47a $
//		$Author: Marceld $
//
//	Helper comment to enable syntax coloring in InterDev: <script>


// Configuration variabled not exported to config.txt
var APP_NAME      =3D "Centricity DICOM Viewer";
var APP_VERSION   =3D "2.1";
var APP_COPYRIGHT =3D "Copyright (c) 2001-2003 General Electric =
Company";


var p_LicenseKey =3D null;

var localedb =3D null;
var config =3D null;
var _strErrorMsg =3D null;

var SYSERROR_UNABLE_TO_OPEN_LOCALE_DATABASE   =3D '-3';
var SYSERROR_INVALID_LOCALE                   =3D '-4';
var SYSERROR_INCORRECT_BROWSER                =3D '-5';
var SYSERROR_BROWSER_UNTESTED                 =3D '-6';
var SYSERROR_EXISTING_WEBVIEWER               =3D '-7';

var mpSysErrors =3D new Object();
mpSysErrors[SYSERROR_UNABLE_TO_OPEN_LOCALE_DATABASE]   =3D 'Unable to =
open the locale database.';
mpSysErrors[SYSERROR_INVALID_LOCALE]                   =3D 'Locale ID =
not supported.';
mpSysErrors[SYSERROR_INCORRECT_BROWSER]                =3D 'Centricity =
Web requires Internet Explorer 5.5 Service Pack 2 or Internet Explorer =
6.0.';
mpSysErrors[SYSERROR_BROWSER_UNTESTED]                 =3D 'Centricity =
Web has been tested with Internet Explorer 5.5 Service Pack 2 and =
Internet Explorer 6.0.\nCentricity Web is not guaranteed to work with =
the currently installed version.';
mpSysErrors[SYSERROR_EXISTING_WEBVIEWER]               =3D 'Cannot start =
Centricity Web twice in one Internet Explorer.';


//
// onload
//
// Purpose: Initialise the 'app'.
//
function window.onload()
{
	BrandTitle();
	loadframe.OnLoadComplete();

	// Check if the appframe could be loaded.
	if (HasErrors())
	{
		loadframe.SetErrorText(_strErrorMsg);
		return;
	}

	// Check if the dicomdirframe could be loaded.
	if (dicomdirframe.HasErrors())
	{
		loadframe.SetErrorText(dicomdirframe.GetErrorText());
		return;
	}

	// Check if the viewframe could be loaded.
	if (viewframe.HasErrors())
	{
		loadframe.SetErrorText(viewframe.GetErrorText());
		return;
	}
	if (viewframe.IsStaticPaletteMonitor())
	{
		loadframe.SetErrorText('This monitor configuration is not supported');
		return;
	}

	// Connect the dicomdirframe to the viewframe component.
	var IDicomDirView =3D dicomdirframe;
	viewframe.AttachDicomDirView(IDicomDirView);

	var licensekey =3D ShowLicenseDialog(new LicenseKey());
	if (licensekey !=3D null)
	{
		viewframe.SetLicenseKey(licensekey);
	=09
		// Hide the 'loadframe' and show the 'application' frames.
		framesetAll.rows =3D '0, *';

		// Open the dicomdir at the root if opened with the file protocol.
		if (location.protocol =3D=3D "file:")
		{
			var strRootDir =3D location.pathname.substr(1, 3);
	=09
			IDicomDirView.SetDicomDirPath(strRootDir);
		}
	}
	TranslateUIElements(dicomdirframe.document, "BUTTON");			// translate =
buttons in dicomdir frame
	TranslateUIElements(viewframe.viewcontrol.document, "BUTTON");	// =
translate buttons in viewcontrol frame
=09
	viewframe.viewcontrol.labelAnnotations =3D =
GetLocaleString('labelAnnotations.caption');
	viewframe.viewcontrol.spanSpeed =3D =
GetLocaleString('spanSpeed.caption');

	viewframe.CineSpeedChange(viewframe.GetCineSpeed());

	focus();
}


//
// TranslateUIElements
//
function TranslateUIElements(objectContainer, strTag)
{=20
	ASSERT(strTag !=3D 'INPUT'); // cannot update with innerText!
	var rgElem =3D objectContainer.all.tags(strTag);

	for (var i =3D 0; i < rgElem.length; i++)
	{
		var elem =3D rgElem[i];

		if (elem.id !=3D null && elem.id !=3D "")
		{
			var obj =3D FindString(elem.id + '.caption');
			if (obj.bFound)
			{
				SetElemText(elem, obj.strText);
			}
			elem.title =3D GetLocaleString(elem.id + '.title');
		}
	}
}

//
// BrandTitle
//
// Purpose: This function brands the title displayed in the caption bar =
with the text=20
//          provided in the configuration file.
//
function BrandTitle()
{
	var strProvidedByTitle =3D config.ProvidedByTitle();
	if (strProvidedByTitle.length > 0)
	{
		document.title =3D APP_NAME + " - " + strProvidedByTitle;
	}
	else
	{
		document.title =3D APP_NAME;
	}
}


//
// ShowAboutDialog
//
// Purpose: Shows the modal dialog with version, copyright info and a =
link
//          to the Applicare website.
//
function ShowAboutDialog()
{
	showModalDialog("aboutdlg.htm", window,
	                "dialogHeight:300px; help:no; edge:raised; status:no; =
unadorned:yes" );
}


//
// oncontextmenu
//
// Purpose: Mark oncontextmenu events as handled to prevent that IE
//          displays its default menu.
//
function document.oncontextmenu()
{
	return false;
}


//
// ShowHelp
//
function ShowHelp()
{
	showModalDialog("help.htm", window,=20
	                "help:no; edge:sunken; status:no; resizable:yes");
	return false;
}


//
// GetISettings()
//
function GetISettings()
{
	return window;
}


//
// GetConfiguration
//
function GetConfigurationItem(strKey)
{
	return window[strKey];
}


//
// GetApp
//
function GetApp()
{
  return self;
}


//
// ShowMessageID
//=20
function ShowMessageID(strMsgId)
{
	//ShowMessageStr(mpSysErrors[strMsgId]);
	alert(mpSysErrors[strMsgId]);
}


//
// HasErrors
//
function HasErrors()
{
	try
	{
		return (typeof(localedb) !=3D 'object');
	}
	catch (e)
	{
		return true;
	}
}


//
// LoadConfigurationFile
//
function LoadConfigurationFile()
{
	if (config =3D=3D null)
	{
		config =3D new ConfigFile();
	}
}


//
// SetLocaleDB
//
function CreateLocaleDB(strLocale)
{
	if (localedb =3D=3D null)
	{
		localedb =3D new CLocaleDb('lang');
	}

	if (!localedb.SetLocaleId(strLocale, '_') || localedb.GetXMLDb() =3D=3D =
null)
	{
		_strErrorMsg =3D mpSysErrors[SYSERROR_UNABLE_TO_OPEN_LOCALE_DATABASE];
		return false;
	}

	if (!localedb.IsValidLocale())
	{
		_strErrorMsg =3D mpSysErrors[SYSERROR_INVALID_LOCALE];
		return false;
	}
	SetLocaleDB(localedb)

	return true;
}

LoadConfigurationFile();
CreateLocaleDB(config.LocaleId());

------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/lickey.jse

#@~^cAMAAA=3D=3D&J@#@&Jz,P`;#,+!ZF~bawsr1lD=7F~H=7FNk1CsP&:morxL~~R#R@#@&=
zJ@#@&&JPP#nM/rW	~1WUDDKV)@#@&J&P,P~P,Py)Mmtb-+=3DPz9n-zkD1z	=
+8#b+A+M&sM+n#b+hn.JCPHd&^k^=7Fxk+3=7FXc%/,^@#@&Jz~~,PP,yI=7F\kkrGx=3DPyP=
y@#@&&JP~P,~P,P~~fflOn=3DP+, =
T+OT8P8G)yF,y@#@&z&P,P~~,PPf)EDtWMl~.bmDW.N~y@#@&&z@#@&zJP~u=7FVwn.,mG:sn=
	Y~DW,+xm4^nPkXUYm6~^KVWMrxTPk	=
~(xD+Mfn\l~@!/^Db2Y@*@#@&@#@&@#@&&&@#@&&z,/KxdDD!mYKD@#@&zJ@#@&0!x^ObWx,J=
k1+xknF+H`*@#@&	=
@#@&,P~PD4kkRm/KwX.rTtOP,x,JEp@#@&PP,PD4kkRmKb:nG!YP,~P{P!p@#@&P,P,Y4kd =
|?nmMnY;W[n,'P*08i~zJ~9k-=7FDkkW	=
@#@&N@#@&@#@&@#@&z&@#@&zz,(xbY@#@&&&@#@&0!x^YrG	=
PJk1nxk+FnHRw.GDWOXancqUbYv/YMnm.Y8~~xhl.Oy#@#@&`hbYt,cOtb/*P`@#@&~,P~{;G=
wHDrL4YPx~kY.nm.DFI@#@&,PP,{:r:=7FW;Y,P~x,xnm.Yyi@#@&NN@#@&@#@&@#@&z&@#@&=
z&P`UVKmV@#@&zz@#@&6EUmDrKx~dk1+xk+nnXcw.WDWOza+R`UVKm3vG8L=7FmDKCDLnD#@#=
@&P~hbY4~vYtrd*P`@#@&~,P~K4N+mDKm.o=7FY =
?=7FYJr1+xkn`|ZWaz.kTtDPQPE/KwzDbLtDP)2aVk^CM+E~,m:kh=7FW!YP3PFfF*i@#@&)8=
@#@&@#@&@#@&auYAAA=3D=3D^#~@=00
------=_NextPart_000_0000_01CA79DE.5477ABF0
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///D:/RA/licgen.jse

#@~^swcAAA=3D=3D&J@#@&Jz,`Z*PyT!2P!+	=
+.C^P2^nmDDk1~\+9k1lsPjzkYn:k~q:@#@&&J@#@&&&,.nDkrKx~1W	=
YDKV=3D@#@&Jz7d,^).1tk7n),zD=7Fsnlk+kzoDnnjknh=7F.{yRT&kDm&	=
=7F4#k=7FA=7FD&wD=7F+.b+SnDJCPHdzsr1o+	 =
LkP^@#@&&zidfIn\rdbWU),qPf@#@&&Jdd~~,PyfmO=7F)~2zZczZ&,*)8F2Pf@#@&&Jdd,~^=
zEY4G.),HmD^+s[,^@#@&J&@#@&@#@&-mDPmdDDF+H~{PE;WaXDbo4OPvmbPy!Tq,M+	=
nDmVPAsnmDDbm~ZGhalUX'UJ,_@#@&iPP~~,P~P,~rOR,I=7F\+M/=7F~+	orx=7F+.r	=
oPbdP	=
WY,CsVKh=7FNZPRR,-UJp@#@&@#@&&&@#@&z&~UtGhdr1+Uk+Gkl^WT@#@&Jz@#@&Jz~K!DwK=
d+=3DP?4GA/,Y4+~:G[mV~NbCVKo~AbYt~O4+~Vb^=7Fxd=7FPmoD=7F+snxDR@#@&Jz@#@&6=
Ex1OkKxPU4Ghdk1+U/n9blsWTcVbmnUk+3nz*@#@&	=
@#@&ikW,`V+YUtKASbmnxk+9rmVWTc#,'',vWl^/=7FBb@#@&7P@#@&di.+DE.U,MDCUDSrm=7F=
Uk+c^k1+xk+0nX*i@#@&i8@#@&@#@&d7CD,xfbCsWT=7FbNOt~x,*T!p@#@&i\C.,xfrC^WLC=
=7FrTtO{PW!!p@#@&7\mD~xGkCsKoS=7FWY,P',d^D=7F+	=
Sn0O~3PcNK^Es+UOc4W[zcWW0knD=7Fr9Y4PO,xGrl^WL=7FbNO4*Pz,+i@#@&d7C.P	=
fblsWLPKw~P,xPkm.n=7FxKG2,PQPv[Km;s+	=
YR(W9zRK0W/=7FYunbotD~O,xfbCsWTC=7FkLtOb,z~ p@#@&@#@&7-mDP.LzDLEsn	=
Yd,',x+SPz.DmXc#p@#@&7MobMLEs+xDd,!YP{PAkU[KhI@#@&7DTb.L!:+UOk$qT,x,Vr1+	=
/+0+HI@#@&@#@&dM+O;MxPk4WSHW9Csfbl^WL`Esbm[VT tD:ES,Do).TEh+	=
Ok~@#@&d,PP,P,~P,P~P,P~~,PP,~P,JNbCsWTC=7FkLtOlrPQP	=
9kmVGL_+kL4DPQPr2XiE,_@#@&d,P,~P,P~P,P~~,PP,~P,PP,E[kmVKo	=
k[O4)EP3~xGkCsKo=7Fr[Dt~_,Ea6IrP3@#@&iP,~P,P~P,P~~,PP,~P,PP,~ENbl^WLSnWD)=
EP3~xGkCsKoSnWDPQPr2XiE,_@#@&d,P,~P,P~P,P~~,PP,~P,PP,E[kmVKoPW2lrPQP	=
9kmVGL:Ww~Q,J26pE,_@#@&d,PP,P,~P,P~P,P~~,PP,~P,Jt=7Fs2)	=
WpPnNLn=3DDCkknNpPdOmYEdl	WE#p@#@&8@#@&@#@&zz@#@&J&PV+O?4WAJbm+	=
d+Gkl^GL@#@&zJ@#@&0;U1YrW	=
~M=7FYj4KhSr^=7Fxd+GrmVGT`*@#@&P@#@&~P,\CD,WKnM/kkO'6Dlsnd+Db^VI@#@&~,PGn=
=7F./b/O ^Wl[crW/fjr=7FhnMJ*i@#@&P,~D=7FY;D	=
PGK=7FD/bdYco+D)OYMk(EO+cEk?4WSJk1+Ud=7FJ#I@#@&8@#@&@#@&Jz@#@&zJPMMl	=
OSbmnxk+@#@&Jz@#@&WE	=
mYbGUPVDmxOSr^=7Fxd+vsk1+Ud=7F3+zb@#@&`@#@&7Jz~`/=7FPY4+,rx	=
+.CD:s~K0PD4+,NkmsGo(WXPCx[~DtnP^rm=7FxdnD+6O@#@&d&z,WKD~Dt=7FP3=7FXc~K4k=
dPSkss,kY,[k60k1;sY,YKPhW[r6X~Y4nPD+aOc@#@&7r6PcVb^=7Fxd=7F3=7FXP{',UE^Vb=
@#@&d`@#@&dd^rm=7Fx/=7FVnX,',hrx[GSR[kmsWTb.L!:+UOk$qTp@#@&dN@#@&iVk1+	=
d+0+zR&xrOv{/D.|=7FX~,R1cF&8&*&qbp@#@&@#@&7hbx[GSRDnO!DU.ms!+~{P^km=7Fxkn=
3=7FXI@#@&d.nDED	~Vbm+	dn3=7FXp@#@&8@#@&0CMCAA=3D=3D^#~@=00
------=_NextPart_000_0000_01CA79DE.5477ABF0--
