Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

715 lines
20 KiB

<%@ LANGUAGE = VBScript %>
<% 'Option Explicit %>
<!-- #include file="directives.inc" -->
<% if Session("FONTSIZE") = "" then %>
<!--#include file="iito.inc"-->
<% else %>
<!-- localizable strings for generic wizard functionality -->
<!--#include file="iiwiz.inc"-->
<!--#include file="iiwiz.str"-->
<!-- localizable strings for new node wizard functionality -->
<!--#include file="iiwizsec.inc"-->
<!--#include file="iiwizsec.str"-->
<!-- generic wizard global vars and functions -->
<!--#include file="iiwizfncs.inc"-->
<%
Const MD_PATH_NOT_FOUND = &H80070003
Const STR_FTP_SERVER_U = "IISFTPSERVER"
Const STR_SLASH_ROOT = "/ROOT"
'***************Required custom functions***************
Function sFinish()
On Error Resume Next
Dim oSite, thispath, strTemplate
thispath = Request("ADSPath")
strTemplate = Request("Template")
Dim currentobj, path, dirkeytype
set currentobj = GetObject(thispath)
path = thispath
dirkeytype = sGetKeyType(fixSiteType(Session("stype")), DIR)
' DBG
' Response.write "Session,stype - " & Session("stype") & "<BR>"
' Response.write "dirkeytype - " & dirkeytype & "<BR>"
' Response.write "currentobj.ADsPath - " & currentobj.ADsPath & "<BR>"
%>
<!--#include file="iifixpth.inc"-->
<%
err.clear
set oSite = GetObject(thispath)
' DBG
' Response.write "oSite.ADsPath - " & oSite.ADsPath & "<BR>"
' Response.write "oSite.KeyType - " & oSite.KeyType & "<BR>"
if cInt(Request("HowSet")) = INHERITVALS then
' Handle Web and Ftp cases separately
if InStr( oSite.KeyType, "Web" ) <> 0 then
' All web security settings are on the directory
if InStr(oSite.KeyType,"Server") <> 0 then
set oSite = GetObject( thispath & STR_SLASH_ROOT )
end if
oSite.PutEx ADS_PROPERTY_CLEAR, "AccessFlags", ""
oSite.PutEx ADS_PROPERTY_CLEAR, "IPSecurity", ""
oSite.PutEx ADS_PROPERTY_CLEAR, "AuthFlags", ""
' oSite.PutEx ADS_PROPERTY_CLEAR, "EnableDirBrowsing", ""
oSite.SetInfo
else
if InStr(oSite.KeyType,"Server") <> 0 then
' Ftp authorization set at the server level.
oSite.PutEx ADS_PROPERTY_CLEAR, "AllowAnonymous", ""
oSite.PutEx ADS_PROPERTY_CLEAR, "AnonymousOnly", ""
oSite.SetInfo
set oSite = GetObject( thispath & STR_SLASH_ROOT )
end if
' Ftp access set at the directory
oSite.PutEx ADS_PROPERTY_CLEAR, "AccessFlags", ""
oSite.SetInfo
end if
else
dim frompath, topath, propstr
' Handle Web and Ftp cases separately
if InStr( oSite.KeyType, "Web" ) <> 0 then
if InStr(oSite.Class,"Server") <> 0 then
set oSite = GetObject( thispath & STR_SLASH_ROOT )
end if
frompath = "sFromNode=" & Server.URLEncode(strTemplate & STR_SLASH_ROOT)
topath = "&sToNode=" & Server.URLEncode(oSite.ADsPath)
propstr = "&prop=AuthFlags,AccessFlags" ' ,EnableDirBrowsing
Response.write SCRIPT & "top.hlist.location.href='iiclone.asp?" & frompath & topath & propstr & "';" & CLOSESCRIPT
else
' Because FTP has security settings at both the server and vdir levels the
' generic clone script won't work to copy settings, so we'll set them here
Dim objTemplate
' DBG
' Response.write "Template " & strTemplate & "<BR>"
' Response.write "Site " & oSite.ADsPath & "<BR>"
if STR_FTP_SERVER_U = UCase(oSite.Class) then
' Authentication properties need to be set on the server
set objTemplate = GetObject( strTemplate )
oSite.AllowAnonymous = objTemplate.AllowAnonymous
oSite.AnonymousOnly = objTemplate.AnonymousOnly
oSite.SetInfo
' Set target object to /ROOT for directory specific propeties
set oSite = GetObject( oSite.ADsPath & STR_SLASH_ROOT )
end if
set objTemplate = GetObject( strTemplate & STR_SLASH_ROOT )
oSite.AccessFlags = objTemplate.AccessFlags
oSite.SetInfo
end if
end if
if err = 0 then
%>
<SCRIPT LANGAUGE="JavaScript">
// top.window.close();
</SCRIPT>
<%
else
sHandleErrors(err)
end if
End Function
Function sHandleErrors(errnum)
Response.write L_ERROROCCURED & errnum & "(" & HEX(errnum) & ")"
End Function
Function sWriteWelcome()
Dim sOutputStr
sOutputStr = sFont("2","","",True)
sOutputStr = sOutputStr & "<B>" & L_WELCOME_HEAD & "</B><P>"
sOutputStr = sOutputStr & sFont("","","",True)
sOutputStr = sOutputStr & L_WELCOME1 & "<P>"
sOutputStr = sOutputStr & L_WELCOME2 & "<P>"
sOutputStr = sOutputStr & L_WELCOME3 & "<P>"
sWriteWelcome = sOutputStr
End Function
Function sWriteFinish()
Dim sOutputStr
sOutputStr = sFont("2","","",True)
sOutputStr = sOutputStr & "<B>" & L_FINISH_HEAD & "</B><P>"
sOutputStr = sOutputStr & sFont("","","",True)
sOutputStr = sOutputStr & L_FINISH1 & "<P>"
sOutputStr = sOutputStr & L_FINISH2 & "<P>"
sOutputStr = sOutputStr & L_FINISH3 & "<P>"
sWriteFinish = sOutputStr
End Function
Function sWriteTitle(iThisPage)
Dim sOutputStr, sHead, sDescription, iNodeType
Select Case iThisPage
Case HOW
sHead = L_HOW
sDescription = L_HOW_DESC
Case TEMPLATE
sHead = L_TEMPLATE
sDescription = L_TEMPLATE_DESC
Case ACL
sHead = L_ACL
sDescription = L_ACL_DESC
Case SUMMARY
sHead = L_SUMMARY
sDescription = L_SUMMARY_DESC
End Select
sOutputStr = "<TABLE WIDTH = 100% CELLPADDING = 0 CELLSPACING=0>"
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD ALIGN=left VALIGN=top bgcolor='White'>"
sOutputStr = sOutputStr & "<TABLE CELLPADDING = 0 CELLSPACING=0 >"
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD COLSPAN = 2 bgcolor='White'><BR>"
sOutputStr = sOutputStr & sFont("","","",True)
sOutputStr = sOutputStr & "<B>" & sHead & "</B>"
sOutputStr = sOutputStr & "</FONT>"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD width = 10 bgcolor='White'>&nbsp;</TD>"
sOutputStr = sOutputStr & "<TD bgcolor='White'>"
sOutputStr = sOutputStr & sFont("","","",True)
sOutputStr = sOutputStr & sDescription
sOutputStr = sOutputStr & "</FONT>"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
sOutputStr = sOutputStr & "</TABLE>"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "<TD WIDTH = 74 BGCOLOR='Teal'>"
sOutputStr = sOutputStr & "<IMG SRC='images/websitehd.GIF' WIDTH=74 HEIGHT=59 BORDER=0>"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
sOutputStr = sOutputStr & "</TABLE>"
sWriteTitle = sOutputStr
End Function
Function sWritePage(iThisPage)
'On Error Resume Next
Dim sOutputStr, bCanAddSite, isSite, oParentNode, iNodeTypeDefault, sParentKeyType, sNameText
Dim i
Dim bSelected, sSelDescription, oTemplates, oTemplate
Dim oIPSec, bGrantByDefault, aIPList, aDomainList, sIPRestrict
sOutputStr = sOutputStr & "<TABLE CELLPADDING = 0 CELLSPACING=0 >"
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD WIDTH = 10>&nbsp;</TD>"
sOutputStr = sOutputStr & "<TD>"
sOutputStr = sOutputStr & "<TABLE CELLPADDING = 0 CELLSPACING=0 BORDER=0>"
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD>&nbsp;"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
Select Case iThisPage
Case HOW
iNextPage = SUMMARY
if Request("HowSet") <> "" then
if cInt(Request("HowSet")) = TEMPLATEVALS then
iNextPage=TEMPLATE
end if
end if
if Session("stype")="www" then
sOutputStr = sOutputStr & sRadio("HowSet", INHERITVALS, L_INHERITWEB, INHERITVALS, "clearTemplate();iNextPage=" & SUMMARY)
sOutputStr = sOutputStr & sRadio("HowSet", TEMPLATEVALS, L_TEMPLATESWEB, INHERITVALS, "iNextPage=" & TEMPLATE)
else
sOutputStr = sOutputStr & sRadio("HowSet", INHERITVALS, L_INHERITFTP, INHERITVALS, "clearTemplate();iNextPage=" & SUMMARY)
sOutputStr = sOutputStr & sRadio("HowSet", TEMPLATEVALS, L_TEMPLATESFTP, INHERITVALS, "iNextPage=" & TEMPLATE)
end if
Case TEMPLATE
sOutputStr = sOutputStr & sSelect("Template", 5, "setTemplateDesc(this,document.userform.TemplateSample);", FALSE)
if Session("stype")="www" then
set oTemplates = GetObject("IIS://localhost/w3svc/info/templates")
else
set oTemplates = GetObject("IIS://localhost/MSFTPsvc/info/templates")
end if
bSelected = True
for each oTemplate in oTemplates
if Request("Template") <> "" then
if oTemplate.ADsPath = Request("Template") then
bSelected = True
end if
end if
sOutputStr = sOutputStr & sOption(oTemplate.Name,oTemplate.ADsPath,bSelected)
if bSelected then
sSelDescription = oTemplate.ServerComment
end if
bSelected = False
next
sOutputStr = sOutputStr & closeSelect()
sOutputStr = sOutputStr & "<TR>"
sOutputStr = sOutputStr & "<TD>&nbsp;"
for each oTemplate in oTemplates
sOutputStr = sOutputStr & "<INPUT TYPE='hidden' NAME='" & Replace(oTemplate.Name," ","") & "' VALUE='" & oTemplate.ServerComment & "'>"
next
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
sOutputStr = sOutputStr & sTextArea("TemplateSample", L_SAMPLETEMPLATE, sSelDescription,5,55, not ENABLED)
Case ACL
sOutputStr = sOutputStr & sStaticText(L_RECOMMENDED,not BOLD)
sOutputStr = sOutputStr & sStaticText(RECOMMENDEDACLS1,BOLD)
sOutputStr = sOutputStr & sStaticText(RECOMMENDEDACLS2,BOLD)
sOutputStr = sOutputStr & sRadio("ACLSet", REPLACEACLS, L_REPLACEACLS, REPLACEACLS, "")
sOutputStr = sOutputStr & sSpace(1)
sOutputStr = sOutputStr & sRadio("ACLSet", ADDACLS, L_ADDACLS, REPLACEACLS, "")
sOutputStr = sOutputStr & sSpace(1)
sOutputStr = sOutputStr & sRadio("ACLSet", NOACLS, L_NOCHANGEACLS, REPLACEACLS, "")
if cInt(Request("HowSet")) = INHERITVALS then
iPrevPage = HOW
end if
Case SUMMARY
sOutputStr = sOutputStr & sStaticText(L_SUMMARYWARNING_TEXT, not BOLD)
sTemplatePath = Request("Template")
' DBG
' Response.write " Request,Template - " & Request("Template") & "<BR>"
if sTemplatePath = "" then
sTemplatePath = sGetParentPath(Request("ADsPath"))
else
' The only case when the configuration isn't available at the vdir
' is ftp authentication. Make that a special case, below.
sTemplatePath = sTemplatePath & STR_SLASH_ROOT
end if
set oTemplate = GetObject(sTemplatePath)
' DBG
' Response.write oTemplate.ADsPath & " - " & oTemplate.Class & "<BR>"
' Response.write "ADSPath - " & Request("ADSPath") & "<BR>"
sSummary = ""
' The KeyType for the template\root is not being set. Getting the
' Class will work around the problem, but setup should be changed to set
' the KeyType.
if InStr(oTemplate.Class,"Web")<> 0 then
'Authentication Methods
sSummary = sSummary & sAddSummaryLine(True,L_AUTHENTICATIONMETHODS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AuthAnonymous,INDENT &L_ANONAUTH)
sSummary = sSummary & sAddSummaryLine(oTemplate.AuthBasic,INDENT &L_BASICAUTH)
sSummary = sSummary & sAddSummaryLine(oTemplate.AuthNTLM,INDENT &L_NTLMAUTH)
sSummary = sSummary & sAddSummaryLine(oTemplate.AuthMD5,INDENT &L_DIGESTAUTH)
else
' Ftp authentication only happens on the server node
Dim oTheNode, oTempTemplate
set oTheNode = GetObject( Request("ADSPath") )
' DBG
' Response.write oTheNode.ADsPath & " - " & oTheNode.Class & "<BR>"
if InStr(oTheNode.Class, "Server") <> 0 then
if Request("Template") = "" then
' Using values from the service
set oTempTemplate = oTemplate
else
set oTempTemplate = GetObject( Request("Template") )
end if
sSummary = sSummary & sAddSummaryLine( True, L_AUTHENTICATIONMETHODS )
sSummary = sSummary & sAddSummaryLine( oTempTemplate.AllowAnonymous, INDENT & L_ANONAUTH )
sSummary = sSummary & sAddSummaryLine( oTempTemplate.AnonymousOnly, INDENT & L_ANONONLY )
end if
end if
'Access Control
sSummary = sSummary & sAddSummaryLine(True,L_ACCESSPERMS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessRead,INDENT & L_READACCESS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessWrite,INDENT & L_WRITEACCESS)
if InStr(oTemplate.Class,"Web")<> 0 then
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessSource and oTemplate.AccessRead,INDENT & L_SOURCEREADACCESS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessSource and oTemplate.AccessWrite,INDENT & L_SOURCEWRITEACCESS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessScript, INDENT & L_SCRIPTACCESS)
sSummary = sSummary & sAddSummaryLine(oTemplate.AccessExecute, INDENT & L_EXECUTEACCESS)
' sSummary = sSummary & sAddSummaryLine(oTemplate.EnableDirBrowsing,INDENT & L_DIRBROWSE)
end if
' IP Restrictions
sSummary = sSummary & L_IPSECURITY & L_RETURN
Set oIPSec = oTemplate.IPSecurity
bGrantByDefault = oIPSec.GrantByDefault
if bGrantByDefault then
sSummary = sSummary & INDENT & L_IPSECGRANTDEFAULT & L_RETURN
aIPList = oIPSec.IPDeny
aDomainList = oIPSec.DomainDeny
sIPRestrict = L_IPSECDENIED
else
sSummary = sSummary & INDENT & L_IPSECDENYDEFAULT & L_RETURN
aIPList = oIPSec.IPGrant
aDomainList = oIPSec.DomainGrant
sIPRestrict = L_IPSECGRANTED
end if
if IsArray( aDomainList ) then
for i = LBound(aDomainList) to UBound(aDomainList)
sSummary = sSummary & INDENT & Replace( sIPRestrict, STR_SUBST, aDomainList(i), 1, 1 ) & L_RETURN
next
end if
if IsArray( aIPList ) then
for i = LBound(aIPList) to UBound(aIPList)
sSummary = sSummary & INDENT & Replace( sIPRestrict, STR_SUBST, sGetIPString(aIPList(i)), 1, 1 ) & L_RETURN
next
end if
sOutputStr = sOutputStr & sTextArea("SummaryArea", "", sSummary, L_SUMMARYROWS_NUM, L_SUMMARYCOLS_NUM, not ENABLED)
if cInt(Request("HowSet")) = INHERITVALS then
iPrevPage = HOW
end if
End Select
sOutputStr = sOutputStr + "</TABLE>"
sOutputStr = sOutputStr & "</TD>"
sOutputStr = sOutputStr & "</TR>"
sOutputStr = sOutputStr & "</TABLE>"
sWritePage = sOutputStr
End Function
'***************Optional Custom Functions***************
Function sAddSummaryLine(bAddIt,sText)
Dim sSummLine
sSummLine = ""
if bAddIt then
sSummLine = sText & L_RETURN
end if
sAddSummaryLine = sSummLine
End Function
Function sGetParentPath(sCurPath)
Dim sParentPath
sParentPath = Left(sCurPath,InStrRev(sCurPath,"/")-1)
if len(sParentPath)+1 = len(sCurPath) then
sParentPath = Left(sCurPath,InStrRev(sCurPath,"/")-1)
end if
sGetParentPath = sParentPath
End Function
Function sGetNextInstanceName(iSiteType)
On Error Resume Next
Dim oService,oInst, sInstName
Set oService=GetObject(BASEPATH & SERVICES(iSiteType))
For Each oInst In oService
if isNumeric(oInst.Name) and oInst.Name > sInstName then
sInstName=oInst.Name
end if
Next
sGetNextInstanceName=cInt(sInstName)+1
End Function
'Return an appropriately formated keytype
Function sGetKeyType(iSiteType, iNodeType)
Dim sSvcKey
sSvcKey = SERVICES(iSiteType)
Select Case iNodeType
Case SITE
sGetKeyType=IIS & sSvcKey & SSITE
Case VDIR
sGetKeyType=IIS & sSvcKey & SVDIR
Case DIR
sGetKeyType=IIS & sSvcKey & SDIR
End Select
End Function
'this is a goofy function to fix the session type we get passed in.
'these have gotten really out of hand. Should go through entire
'system and fix this, so that if we are referincing the site type
'it is ALWAYS W3SVC or MSFTPSVC... not sometimes web, sometimes www
'and sometimes w3svc... ick. sorry.
Function fixSiteType(sessionSite)
sessionSite = LCase(sessionSite)
if sessionSite = "ftp" then
fixSiteType = 1
end if
if sessionSite = "www" then
fixSiteType = 0
end if
End Function
Function sGetPhysPath(oParentNode, sDirName)
Dim sParentType, sNewPath, sBasePath
'The physical directory may not currently
'exist in the metabase, so we have
'to find the parent vdir associated with
'the dir and build the path from there.
sParentType = oParentNode.KeyType
sNewPath = sDirName
sBasePath = oParentNode.ADsPath
Do Until Instr(sParentType, SVDIR) <> 0
'we need clear our path not found error..
err = 0
'add our initial whack...
sNewPath = "/" + sNewPath
'and cyle through the baseobj till we find the next whack,
'building up the path in new name as we go
Do Until Right(sBasePath,1) = "/"
sNewPath = Right(sBasePath,1) & sNewPath
sBasePath = Mid(sBasePath,1,Len(sBasePath)-1)
Loop
'once we're out, we need to lop off the last whack...
sBasePath = Mid(sBasePath,1,Len(sBasePath)-1)
'and try to set the object again...
Set oParentNode=GetObject(sBasePath)
if err <> 0 then
sParentType = ""
else
sParentType=oParentNode.KeyType
end if
Loop
sGetPhysPath = oParentNode.Path & "\" & sNewPath
err.clear
End Function
function sGetIPString(bindstr)
dim one, ip, sn
one=Instr(bindstr,",")
if one > 0 then
ip=Trim(Mid(bindstr,1,(one-1)))
sn=Trim(Mid(bindstr,(one+1)))
if sn = "255.255.255.255" then
sn = ""
end if
if sn <> "" then
ip = ip & " (" & sn & ")"
end if
else
ip=bindstr
end if
sGetIPString = ip
end function
'***************End***************
%>
<html>
<head>
<title><%= L_WIZARD_TEXT %></title>
<%= SCRIPT %>
function bNextPageOk()
{
return true;
}
function setTemplateDesc(selControl,descControl)
{
selControlText = new String(selControl.options[selControl.selectedIndex].text)
selControlText = myReplace(selControlText," ","");
descControl.value = document.userform[selControlText].value;
}
function clearTemplate()
{
document.userform.Template.value = "";
}
function myReplace(sCntrl,sToReplace,sReplaceWith)
{
<% 'Jscript 3.0 doesn't support the standard replace funciton... %>
sNew = ""
for (i=0;i<=sCntrl.length;i++)
{
if (sCntrl.substring(i,i+1) == sToReplace)
{
sNew += sReplaceWith;
}
else
{
sNew += sCntrl.substring(i,i+1);
}
}
return sNew;
}
<%= CLOSESCRIPT %>
</head>
<body bgcolor="#CCCCCC" topmargin=0 leftmargin=0>
<% if Session("IsIE") and Session("browserver") < 4 then %>
<table border = 1 width="100%" height="100%" cellpadding=0 cellspacing=0>
<% else %>
<table border = 0 width="100%" height="100%" cellpadding=0 cellspacing=0>
<% end if %>
<form name="userform" method="POST" action="iiwizsec.asp"><!-- data persistences --><!--#include file="iiwizsec.dat"--><!-- end data persistences -->
<% Select Case iThisPage %>
<% Case WELCOME %>
<tr>
<td bgcolor="teal" height=310 width = 163>
<IMG SRC="images/Website.gif" WIDTH=163 HEIGHT=312>
</td>
<td bgcolor="White" ALIGN=left VALIGN=top>
<TABLE CELLPADDING = 2 CELLSPACING=0 >
<TR>
<TD COLSPAN = 2>&nbsp;
</TD>
</TR>
<TR>
<TD WIDTH = 18>&nbsp;
</TD>
<TD>
<%= sWriteWelcome() %>
</TD>
</TR>
</TABLE>
</td>
</tr>
<% Case FINISH %>
<%
' We need to use a finish page not only to make this consistent with MMC,
' but also to allow the iiclone.asp script to execute. If the dialog is
' dismissed in sFinish() the iiclone script may not complete if it is called
' twice.
%>
<tr>
<td height=315 width = 164><IMG SRC="images/website.gif" BORDER=0 HSPACE=0 VSPACE=0></td>
<td bgcolor="White" ALIGN=left VALIGN=top>
<TABLE CELLPADDING = 2 CELLSPACING=0>
<TR>
<TD COLSPAN = 2>&nbsp;
</TD>
</TR>
<TR>
<TD WIDTH = 18>&nbsp;
</TD>
<TD>
<%= sFinish() %>
<%= sWriteFinish() %>
</TD>
</TR>
</TABLE>
</td>
</tr>
<% Case Else %>
<tr>
<TD HEIGHT=315 COLSPAN = 2 VALIGN="top">
<TABLE WIDTH = 100% cellspacing=0 cellpadding=0 cellspacing=0>
<tr bgcolor="#FFFFFF">
<td bgcolor="#FFFFFF" width = 10>&nbsp;</td>
<td bgcolor="#FFFFFF" height = 59 ALIGN=left VALIGN=top>
<%= sWriteTitle(iThisPage) %>
</td>
</tr>
<tr>
<td height = 1 colspan = 2 bgcolor="Gray"></td>
</tr>
<tr>
<td height = 1 colspan = 2 bgcolor="White"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td height=220 ALIGN=left VALIGN=top>
<%= sWritePage(iThisPage) %>
</td>
</tr>
</TABLE>
</TD>
</TR>
<% end Select %>
<% if Session("IsIE") and Session("browserver") < 4 then %>
<% ' IE3 doesn't do the line well... we're using table-borders instead. %>
<% else %>
<tr>
<td height = 1 colspan = 2 bgcolor="Gray"></td>
</tr>
<tr>
<td height = 1 colspan = 2 bgcolor="White"></td>
</tr>
<% end if %>
<!-- generic wizard buttons -->
<!--#include file="iiwizbtns.inc"-->
</table>
</blockquote>
</form>
</body>
</html>
<% end if %>