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.

806 lines
19 KiB

  1. <%@ LANGUAGE = VBScript %>
  2. <% 'Option Explicit %>
  3. <!-- #include file="directives.inc" -->
  4. <%
  5. ' This script is the main container for the admin..
  6. ' It holds the client-cached tree list, stored in cachedList
  7. ' in addition to a variety of global functions & customization
  8. ' flags. This script gets loaded once for the admin and is
  9. ' persistant throughout.
  10. '$
  11. Const STR_SUPPORT_MULTI_SELECT = "hasDHTML"
  12. %>
  13. <!--#include file="iihd.str"-->
  14. <!--#include file="iisetfnt.inc"-->
  15. <!--#include file="iiaspstr.inc"-->
  16. <html>
  17. <head>
  18. <title><%= L_ISM_TEXT %></title>
  19. <script language="JavaScript">
  20. // Create an instance of our Global Variables for reference by other frames...
  21. Global=new globalVars();
  22. // Create the nodeList array
  23. nodeList=new Array();
  24. nodeList[0]="";
  25. <!--#include file="iijsfuncs.inc"-->
  26. function unload_popwindow()
  27. {
  28. if(Global.popwindow != null)
  29. Global.popwindow.close();
  30. }
  31. function helpBox()
  32. {
  33. if (Global.helpFileName==null)
  34. {
  35. alert("<%= L_NOHELP_ERRORMESSAGE %>");
  36. }
  37. else
  38. {
  39. helpfile = Global.helpDir + Global.helpFileName+".htm";
  40. thefile="iihelp.asp?pg=" + helpfile;
  41. <% if Session("hasDHTML") then %>
  42. window.showHelp("http://" + helpfile);
  43. <% else %>
  44. window.open(thefile ,"Help","toolbar=no,scrollbars=yes,directories=no,menubar=yes,width=375,height=500");
  45. <% end if %>
  46. }
  47. }
  48. function aboutBox() {
  49. popbox=window.open("iiabout.asp","about","toolbar=no,scrollbars=yes,directories=no,menubar=no,width="+525+",height="+300);
  50. if(popbox !=null){
  51. if (popbox.opener==null){
  52. popbox.opener=self;
  53. }
  54. }
  55. }
  56. function globalVars(){
  57. // Sets the global variables for the script.
  58. // These may be changed to quickly customize the tree's apperance
  59. // Fonts
  60. this.face="Helv,Arial";
  61. this.fSize=1;
  62. // Spacing
  63. this.vSpace=2;
  64. this.hSpace=4;
  65. this.tblWidth=500;
  66. this.selTColor="#FFCC00";
  67. this.selFColor="#000000";
  68. this.selUColor="<%= Session("BGCOLOR") %>";
  69. // Images
  70. this.imagedir="images/";
  71. this.appIcon = "app";
  72. this.spaceImg=this.imagedir + "space.gif";
  73. this.lineImg=this.imagedir + "line.gif";
  74. this.plusImg=this.imagedir + "plus.gif";
  75. this.minusImg=this.imagedir + "minus.gif";
  76. this.emptyImg=this.imagedir + "blank.gif";
  77. this.plusImgLast=this.imagedir + "plusl.gif";
  78. this.minusImgLast=this.imagedir + "minusl.gif";
  79. this.emptyImgLast=this.imagedir + "blankl.gif";
  80. this.stateImg=new Array();
  81. this.stateImg[0]=this.imagedir + "stop.gif";
  82. this.stateImg[1]=this.imagedir + "go.gif";
  83. this.stateImg[2]=this.imagedir + "pause.gif";
  84. // Instant State
  85. this.displaystate=new Array();
  86. this.displaystate[0]="";
  87. this.displaystate[2]="";
  88. this.displaystate[4]="<%= L_STOPPEDDISP_TEXT %>";
  89. this.displaystate[6]="<%= L_PAUSEDDISP_TEXT %>";
  90. this.state=new Array();
  91. this.state[4]="<%= L_STOPPED_TEXT %>";
  92. this.state[2]="<%= L_STARTED_TEXT %>";
  93. this.state[1]="<%= L_STARTING_TEXT %>";
  94. this.state[3]="<%= L_STOPPING_TEXT %>";
  95. // ID of selected item
  96. this.selId=0;
  97. this.selName="";
  98. this.selSType="";
  99. this.selVType="";
  100. //$ Multi-select
  101. this.selCount = 1;
  102. <% if Session(STR_SUPPORT_MULTI_SELECT) then %>
  103. this.bSupportMultiSelect = true;
  104. this.selList = new Array();
  105. this.selList[0] = 0;
  106. <% else %>
  107. this.bSupportMultiSelect = false;
  108. <% end if %>
  109. //Help
  110. this.helpFileName="iipxmain.htm";
  111. this.helpDir="<%= Request.ServerVariables("SERVER_NAME") %>/iishelp/iis/htm/core/"
  112. // Other Flags
  113. this.showState=false;
  114. this.dontAsk=false;
  115. this.updated=false;
  116. this.homeurl=top.location.href;
  117. this.siteProperties = false;
  118. this.working = false;
  119. //Global var to hold the window object, so we can refer to the current window from a parent frame.
  120. this.popwindow = null;
  121. }
  122. function nodeListInterfaceDef()
  123. {
  124. this.selectItem = selectItem;
  125. <% if Session(STR_SUPPORT_MULTI_SELECT) then %>
  126. this.selectMulti = selectMulti;
  127. <% end if %>
  128. }
  129. var nodeListInterface = new nodeListInterfaceDef();
  130. <% if Session(STR_SUPPORT_MULTI_SELECT) then %>
  131. function selectMulti( index )
  132. {
  133. if( nodeList[index].selected == true )
  134. {
  135. selectRemove( index );
  136. }
  137. else
  138. {
  139. selectAdd( index );
  140. }
  141. Global.selId = Global.selList[0];
  142. }
  143. function selectAdd( index )
  144. {
  145. nodeList[index].selected = true;
  146. Global.selList[Global.selCount++] = index;
  147. }
  148. function selectRemove( index )
  149. {
  150. if( Global.selCount > 0 )
  151. {
  152. var i, j;
  153. for( i = 0; i < Global.selCount; i++ )
  154. {
  155. if( Global.selList[i] == index )
  156. {
  157. break;
  158. }
  159. }
  160. if( i < Global.selCount )
  161. {
  162. nodeList[Global.selList[i]].selected = false;
  163. for( j = i + 1; j < Global.selCount; j++ )
  164. {
  165. Global.selList[j-1] = Global.selList[j];
  166. }
  167. Global.selCount--;
  168. }
  169. }
  170. }
  171. function selectItem( item )
  172. {
  173. // Deselect all currently selected items
  174. for( var i = 0; i < Global.selCount; i++ )
  175. {
  176. nodeList[Global.selList[i]].selected = false;
  177. }
  178. // Select the new item
  179. nodeList[item].selected = true;
  180. Global.selId = Global.selList[0] = item;
  181. Global.selCount = 1;
  182. }
  183. <% else %>
  184. function selectItem(item)
  185. {
  186. nodeList[Global.selId].selected=false;
  187. Global.selId=item;
  188. nodeList[item].selected=true;
  189. }
  190. <% end if %>
  191. function openLocation(){
  192. //opens the property sheet for the selected node,
  193. //regardless of service type or node type. this
  194. //script calls iiset.asp which sets the appropriate
  195. //session variables for server side persistance throughout
  196. //the property sheet
  197. var path;
  198. var sel=Global.selId;
  199. Global.selName=nodeList[sel].title;
  200. Global.selSType=nodeList[sel].stype;
  201. Global.selVType=nodeList[sel].vtype;
  202. top.body.iisstatus.location.href=("iistat.asp?thisState=Loading");
  203. path="stype=" + Global.selSType;
  204. path=path + "&vtype=" + Global.selVType;
  205. path=path + "&title=" +escape(nodeList[sel].title);
  206. if (nodeList[sel].vtype=="server"){
  207. path=path + "&spath=" + escape(nodeList[sel].path);
  208. path=path + "&dpath=" + escape(nodeList[sel].path) + "/Root";
  209. }
  210. else{
  211. path=path + "&spath=";
  212. path=path + "&dpath=" + escape(nodeList[sel].path);
  213. }
  214. page="iiset.asp?"+path;
  215. //iiset.asp sets the serverside session variables...
  216. top.connect.location.href=(page);
  217. }
  218. function sortOrder(a,b){
  219. x=a.id - b.id
  220. return x
  221. }
  222. function sortList(){
  223. nodeList.sort(sortOrder);
  224. }
  225. function insertNode(title,caption,parent,vtype,stype, fIsApp){
  226. //add a new node to the client-cached list
  227. var nodepath;
  228. var indexnum=nodeList.length;
  229. var Nextid=parent+1;
  230. // Clear the current selection before we start monkeying with
  231. // the list.
  232. selectItem( 0 );
  233. if (nodeList[parent].vtype=="server"){
  234. nodepath=nodeList[parent].path + "/Root/" + title;
  235. }
  236. else{
  237. if (nodeList[parent].vtype=="comp"){
  238. if (stype == "www"){
  239. nodepath=nodeList[parent].path + "/W3SVC/" + title;
  240. }
  241. else{
  242. nodepath=nodeList[parent].path + "/MSFTPSVC/" + title;
  243. }
  244. }
  245. else{
  246. nodepath=nodeList[parent].path + "/" + title;
  247. }
  248. }
  249. title=title;
  250. while ((nodeList.length > Nextid) && (nodeList[Nextid].parent >=parent)) {
  251. if(nodeList[Nextid].parent==parent){
  252. if(nodeList[Nextid].title > title){
  253. break;
  254. }
  255. }
  256. Nextid=Nextid +1;
  257. }
  258. if (nodeList.length <=Nextid){
  259. var newid=nodeList.length;
  260. }
  261. else{
  262. var newid=nodeList[Nextid].id;
  263. }
  264. nodeList[indexnum]=nodeList[parent].addNode(new listObj(indexnum,caption,nodepath,vtype,4));
  265. nodeList[indexnum].isCached=false;
  266. nodeList[indexnum].id=newid;
  267. if( fIsApp != 0 )
  268. {
  269. nodeList[indexnum].icon = Global.imagedir + "app";
  270. nodeList[indexnum].isApp = true;
  271. }
  272. for (var i=newid; i < indexnum; i++) {
  273. nodeList[i].id=nodeList[i].id + 1;
  274. if (nodeList[i].parent >=nodeList[indexnum].id){
  275. nodeList[i].parent=nodeList[i].parent +1;
  276. }
  277. }
  278. nodeList[parent].open=true;
  279. nodeList[0].sortList();
  280. nodeList[0].markTerms();
  281. selectItem(newid);
  282. top.body.list.location.href="iisrvls.asp";
  283. }
  284. function browseItem() {
  285. popBox('Browse',640,480, nodeList[Global.selId].loc);
  286. }
  287. function deleteItem() {
  288. // marks items in the client cached list as deleted...
  289. nodeList[Global.selId].deleted=true;
  290. if (Global.selId+1 !=listLength){
  291. deleteChildren(Global.selId);
  292. }
  293. markTerms();
  294. top.body.list.location="iisrvls.asp";
  295. }
  296. function deleteChildren(item){
  297. var z=item+1;
  298. while (nodeList[z].parent >=item) {
  299. nodeList[z].deleted=true;
  300. z=z+1;
  301. if(z >=nodeList.length){
  302. break;
  303. }
  304. }
  305. }
  306. function deCache(){
  307. //marks a node as uncached (forcing a recache when expanded)
  308. //and marks all child nodes as deleted
  309. sel=Global.selId;
  310. nodeList[sel].isCached=false;
  311. nodeList[sel].open=false;
  312. if (sel+1 !=listLength){
  313. deleteChildren(sel);
  314. }
  315. markTerms();
  316. }
  317. function markTerms(){
  318. //marks cached list items as being a terminater (ie, having no siblings)
  319. //this forces an "end" gif in the tree view...
  320. var i
  321. listLength=nodeList.length;
  322. for (i=0; i < listLength; i++) {
  323. nodeList[i].lastChild=isLast(i);
  324. }
  325. }
  326. function isLast(item){
  327. var i;
  328. last=false;
  329. if (item+1==listLength){
  330. last=true;
  331. }
  332. else{
  333. if (nodeList[item].parent==null){
  334. last=true;
  335. for (i=item+1; i < listLength; i++) {
  336. if (nodeList[i].parent==null){
  337. last=false;
  338. break;
  339. }
  340. }
  341. }
  342. else{
  343. last=true;
  344. var y=item+1;
  345. while(nodeList[y].parent >=nodeList[item].parent){
  346. if(nodeList[y].parent==nodeList[item].parent){
  347. if(!nodeList[y].deleted){
  348. last=false;
  349. break;
  350. }
  351. }
  352. y=y+1;
  353. if ((y)==listLength){
  354. break;
  355. }
  356. }
  357. }
  358. }
  359. return last;
  360. }
  361. function addNode(childNode){
  362. //adds a new node to the tree, setting some default parameters
  363. childNode.parent=this.id;
  364. childNode.level=this.level +1;
  365. dir="images/"
  366. if (childNode.vtype=="vdir"){
  367. childNode.loc=nodeList[this.id].loc + childNode.title+"/";
  368. childNode.icon=dir+ "vdir";
  369. }
  370. else{
  371. if (childNode.vtype=="dir"){
  372. childNode.loc=nodeList[this.id].loc + childNode.title+"/";
  373. childNode.icon=dir + "dir";
  374. }
  375. else{
  376. if (childNode.stype=="www"){
  377. childNode.loc="http://"+childNode.title+"/";
  378. childNode.icon=dir +"www";
  379. }
  380. if (childNode.stype=="ftp"){
  381. childNode.loc="ftp://"+childNode.title+"/";
  382. childNode.icon=dir +"ftp";
  383. }
  384. }
  385. }
  386. return childNode;
  387. }
  388. function connect(){
  389. serverurl=prompt("Please enter the URL of the server you wish to connect to:", "http://<%= Request.ServerVariables("SERVER_NAME") %>/iisadmin/")
  390. if (serverurl !=""){
  391. page="iicnct.asp";
  392. top.body.iisstatus.location="iistat.asp?thisState=Loading";
  393. top.connect.location=page;
  394. }
  395. }
  396. function cache(item){
  397. // perftest
  398. // The two lines below call different tree caching scripts. To change between them
  399. // simply uncomment one and comment out the other.
  400. // page="iicache.asp?sname="+escape(nodeList[item].path)+"&Nextid="+nodeList.length+"&currentid="+item;
  401. page="iicache2.asp?sname=" + escape(nodeList[item].path) + "&fspath=" + escape(nodeList[item].fspath);
  402. <% if (browser<>"ns") then %>
  403. top.body.iisstatus.location.href="iistat.asp?thisState=Loading";
  404. <% end if %>
  405. top.connect.location.href=page;
  406. }
  407. function loadPage(){
  408. top.body.location.href='iibody.asp';
  409. }
  410. function inheritenceItem(property, path){
  411. this.property = property;
  412. this.path = path;
  413. }
  414. function iListsortOrder(a,b){
  415. x=((a.property + a.path) - (b.property + b.path));
  416. return x
  417. }
  418. function listObj(id, title, path,vtype,state){
  419. // This is the object that represents each line item
  420. // In the tree structure.
  421. // ID is the id refered to by the parent property
  422. // title is the text string that appears In the list
  423. // parent is the ID of the parent list item
  424. // level is the depth of the list item, 0 being the furthest left on the tree
  425. // href is the location to open when selected
  426. // open is a flag that determines whether children are displayed
  427. // state is a flag to determine the state (4=stopped, 2=running)
  428. // selected is an interenal flag
  429. // openLocation is the function that opens the href file In a frame
  430. //sortby will change to reflect the new sort order when a new item is added to the list.
  431. this.id=id;
  432. this.title=title;
  433. this.path=path;
  434. this.keytype="";
  435. this.fspath="";
  436. this.err="";
  437. this.stype="";
  438. if (path.indexOf("W3SVC") !=-1){
  439. this.stype="www";
  440. }
  441. if (path.indexOf("FTPSVC") !=-1){
  442. this.stype="ftp";
  443. }
  444. this.vtype=vtype;
  445. this.open=false;
  446. this.state=state;
  447. this.displaystate = Global.displaystate[state];
  448. this.isApp = false;
  449. this.isCached=false;
  450. this.isWorkingServer=false;
  451. this.parent=null;
  452. this.level=1;
  453. this.loc="http://"+this.title;
  454. dir="images/";
  455. this.icon=dir +"comp";
  456. this.href="blank.htm";
  457. this.deleted=false;
  458. this.selected=false;
  459. this.lastChild=false;
  460. //methods
  461. this.openLocation=openLocation;
  462. this.addNode=addNode;
  463. this.insertNode=insertNode;
  464. this.deleteItem=deleteItem;
  465. this.deCache=deCache;
  466. this.browseItem=browseItem;
  467. this.markTerms=markTerms;
  468. this.cache=cache;
  469. this.connect=connect;
  470. this.sortList=sortList;
  471. this.restricted ="";
  472. }
  473. // Create a blank array for our set data path inheritence list
  474. inheritenceList = new Array();
  475. // Fill the nodeList array with objects.
  476. // The array items will be displayed In the id # order,
  477. // as Jscript has limited array sorting capabilities.
  478. // Children should always follow their parent item.
  479. <%
  480. On Error Resume Next
  481. Dim newid, computer, thisinstance, currentADsObj, FileSystem
  482. Dim thisname
  483. computer="localhost"
  484. thisinstance=Request.ServerVariables("INSTANCE_ID")
  485. if Session("isAdmin") then
  486. %>
  487. //the localhost
  488. nodeList[0]=new listObj(0,"<%= Request.ServerVariables("SERVER_NAME") %>","IIS://<%= computer %>", "comp",1);
  489. nodeList[0].isCached=true;
  490. nodeList[0].open=true;
  491. nodeList[0].selected=true;
  492. <%
  493. newid=1
  494. %>//FTPSVC<%
  495. Set currentADsObj=GetObject("IIS://" & computer & "/MSFTPSVC")
  496. addInstances currentADsObj,0,"server"
  497. %>//W3SVC<%
  498. Set currentADsObj=GetObject("IIS://" & computer & "/W3SVC")
  499. addInstances currentADsObj,0,"server"
  500. else
  501. Set FileSystem=CreateObject("Scripting.FileSystemObject")
  502. Set currentADsObj=GetObject("IIS://" & computer & "/W3SVC/" & thisInstance)
  503. thisname=currentADsObj.ServerComment
  504. if thisname="" then
  505. thisname="[Web Site #" & currentADsObj.Name & "]"
  506. end if
  507. %>
  508. //the instance
  509. nodeList[0]=new listObj(0,"<%= thisname %>","IIS://<%= computer %>/W3SVC/<%= thisinstance %>", "server",2);
  510. nodeList[0].isWorkingServer=false;
  511. nodeList[0].isCached=true;
  512. nodeList[0].open=true;
  513. nodeList[0].icon="images/www";
  514. nodeList[0].loc="http://<%= Request.ServerVariables("SERVER_NAME") %>/";
  515. <%
  516. newid=1
  517. addNodes currentADsObj,0,"vdir"
  518. end if
  519. Sub addInstances(Container, parentid, vtype)
  520. On Error Resume Next
  521. Dim thisname, Child, thisid, thisstate
  522. For Each Child In Container
  523. if Instr(Child.KeyType,"Server") <> 0 then
  524. thisid=newid
  525. thisname=Child.Name
  526. thisstate=""
  527. thisname=Child.ServerComment
  528. if thisname="" then
  529. if Instr(Child.KeyType,"Ftp") <> 0 then
  530. thisname="[FTP Site #" & Child.Name & "]"
  531. else
  532. thisname="[Web Site #" & Child.Name & "]"
  533. end if
  534. end if
  535. thisstate=Child.ServerState
  536. if err=0 then
  537. SetJscriptObj thisname, Child.ADsPath,parentid, vtype, thisstate, false, "",False
  538. if Child.Name=Request.ServerVariables("INSTANCE_ID") then
  539. if InStr(Child.ADsPath,"W3SVC") then
  540. SetWorkingInstance thisid
  541. end if
  542. end if
  543. if Child.ClusterEnabled then
  544. %>
  545. nodeList[<%= thisid %>].restricted="<%= L_CLUSTERSERVERUI_TEXT %>";
  546. <%
  547. end if
  548. else
  549. if err = &H800401E4 or err = 70 then
  550. Response.Status = "401 access denied"
  551. end if
  552. end if
  553. end if
  554. 'this child may have err'd but we need to enum the rest anyway, so we clear our error...
  555. err.Clear
  556. Next
  557. End Sub
  558. Sub addNodes(Container, parentid, vtype)
  559. On Error Resume Next
  560. Dim thisname, isApp, thisid, thisstate, thisroot, approot
  561. For Each Child In Container
  562. if Instr(Child.KeyType, "VirtualDir") <> 0 then
  563. thisid=newid
  564. thisname=Child.Name
  565. thisstate=2
  566. isApp = False
  567. approot=LCase(Child.AppRoot)
  568. if len(approot) <> 0 then
  569. thisroot = LCase(Child.ADsPath)
  570. approot = Mid(approot,Instr(approot,"w3svc/")+1)
  571. thisroot = Mid(thisroot,Instr(thisroot,"w3svc/")+1) & "/"
  572. if thisroot=approot then
  573. isApp = True
  574. end if
  575. end if
  576. if UCase(thisname) <> "ROOT" then
  577. SetJscriptObj thisname, Child.ADsPath, parentid, vtype, thisstate, true, Child.Path, isApp
  578. addNodes Child, thisid, "vdir"
  579. 'addDirs Child.Path, Child.ADsPath, thisid, "dir"
  580. else
  581. addNodes Child, parentid, "vdir"
  582. 'addDirs Child.Path, Child.ADsPath, parentid, "dir"
  583. end if
  584. end if
  585. Next
  586. End Sub
  587. Sub addDirs(path, adspath, parentid, vtype)
  588. On Error Resume Next
  589. Dim thisid,thisname,thisstate,i,f, thispath
  590. if Instr(UCase(adspath),"W3SVC") <> 0 then
  591. if path <> "" then
  592. if Left(path,2) <> "\\" then
  593. If FileSystem.FolderExists(path) Then
  594. Set f=FileSystem.GetFolder(path)
  595. For Each i In f.SubFolders
  596. thisid=newid
  597. thisstate=2
  598. thispath=adspath & "/" & i.Name
  599. SetJscriptObj i.Name,thispath, parentid, vtype, thisstate, true,i, false
  600. if err=0 then
  601. addDirs i, thispath, thisid, "dir"
  602. end if
  603. Next
  604. End If
  605. end if
  606. end if
  607. end if
  608. End Sub
  609. Sub SetJscriptObj(caption, path, parentid, vtype,state, cached,fspath,isApp)
  610. %>
  611. nodeList[<%= newid %>]=nodeList[<%= parentid %>].addNode(new top.title.listObj(<%= newid %>,"<%= sJSLiteral(caption) %>","<%= sJSLiteral(path) %>","<%= vtype %>",<%= state %>));
  612. <% if cached then %>
  613. nodeList[<%= newid %>].isCached=true;
  614. <% else %>
  615. nodeList[<%= newid %>].isCached=false;
  616. <% end if %>
  617. <% if isApp then %>
  618. nodeList[<%= newid %>].icon = Global.imagedir + "app";
  619. nodeList[<%= newid %>].isApp = true;
  620. <% end if %>
  621. nodeList[<%= newid %>].fspath="<%= replace(fspath,"\","\\") %>";
  622. <%
  623. newid=newid +1
  624. End Sub
  625. Sub SetWorkingInstance(thisid)
  626. %>
  627. nodeList[<%= thisid %>].isWorkingServer=true;
  628. <%
  629. End Sub
  630. %>
  631. markTerms();
  632. </script>
  633. </head>
  634. <body Background="images/cube.gif" text="#FFFFFF" topmargin="0" leftmargin="0" onload="loadPage();" onunload="unload_popwindow();">
  635. <table width="100%" cellpadding="0" cellspacing="0" border="0" align="LEFT">
  636. <tr>
  637. <td>
  638. <IMG SRC="images/Ismhd.gif" WIDTH=189 HEIGHT=19 BORDER=0 alt="<%= L_ISM_TEXT %>" HSPACE=0 VSPACE=0>
  639. </td>
  640. <td align="right" valign="middle">
  641. <%= sFont("","","#FFFFFF",True) %>
  642. <a href="http://<%= Request.ServerVariables("SERVER_NAME") %>/iishelp/iis/misc/default.asp" target="window">
  643. <IMG SRC="images/Doc.gif" WIDTH=16 HEIGHT=16 BORDER=0 ALT="<%= L_DOCS_TEXT %>">
  644. </A>
  645. &nbsp;
  646. <a href="javascript:helpBox();">
  647. <IMG SRC="images/help.gif" WIDTH=16 HEIGHT=16 BORDER=0 ALT="<%= L_HELP_TEXT %>">
  648. </A>
  649. </FONT>
  650. </td>
  651. </tr>
  652. </table>
  653. <form name="hiddenform">
  654. <input type="hidden" name="slash" value="\">
  655. </form>
  656. </body>
  657. </html>