home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 November / APC5112K.ISO / patch / microsoft / i386 / appwiz.cp_ / appwiz.cpl / HTML / LISTBOX.HTC < prev    next >
Encoding:
Text File  |  2000-07-21  |  18.4 KB  |  823 lines

  1. <PUBLIC:HTC URN="shellctls"><METHOD name="ResetSelection" /><METHOD name="EnableTemplate" /><METHOD name="Refresh" /><METHOD name="focus" /><METHOD name="blur" /><EVENT id=onSelectItem name="onSelectItem" /><EVENT id=onCustomDraw name="onCustomDraw" /><EVENT id=onSetFocus name="onSetFocus" /><EVENT id=onListComplete name="onListComplete" /><ATTACH event="oncontentready" handler=_OnContentReady /><SCRIPT language="javascript">
  2. var _bLoading = true; 
  3. var _tblList = null; 
  4. var _idDisplayName; 
  5. var _divScroll = null; 
  6. var _iSelCur = -1; 
  7. var _iSelDefault = -1; 
  8. var _nItemsPerPage = 0; 
  9. var _idDataSource; 
  10. var _ctlDataSource = null; 
  11. var _szRecordSetName = ""; 
  12. var _idTemplateSource; 
  13. var _cRowsExpand = 0; 
  14. var _cRowsAdded = 0; 
  15. var _bAutoExpand = false; 
  16. var _rgTemplateRows = new Array();
  17. var _htmlRow; 
  18. var _bHasFocus = false; 
  19. var _bFreeze = false; 
  20. var _bTableComplete = false; 
  21. var _bInternalFocusChange = false; 
  22. var _szFeedBack = ""; 
  23. var _dvFeedBack = null; 
  24. var c_szStyle_Background = 
  25. 'style = "' +
  26.         'position:relative; '           +
  27.         'width:100%; '                  +
  28.         'height:100%; '                 +
  29.         'overflow-y:scroll; '           +
  30.         'border: 1px solid buttonface; '+
  31.         '"';
  32. var c_szStyle_Table = 
  33. 'style = "' +
  34.         'table-layout:fixed; '          +
  35.         'width:100%; '                  +
  36.         'height:auto; '                 +
  37.         '"';
  38. var c_szStyle_Feedback =
  39. 'style = "' +
  40.         'position:relative; '           +
  41.         'width:100%; '                  +
  42.         'height:100%; '                 +
  43.         'border: 1px solid buttonface; '+
  44.         '"';
  45. element.attachEvent("onkeydown", _OnKeyDown);
  46. element.attachEvent("onerror", _OnError);
  47. _GetPropertyDefaults();
  48. function get_selIndex() { return _iSelCur; }
  49. function put_selIndex(iSel) 
  50. if (_bLoading)
  51. return;
  52. _SelectItem(parseInt(iSel), true);
  53. }
  54. function get_defaultSel() { return _iSelDefault; }
  55. function put_defaultSel(iSel) 
  56. if (_bLoading)
  57. return;
  58. _iSelDefault = parseInt(iSel);
  59. }
  60. function get_dataSource() { return _idDataSource; }
  61. function put_dataSource(szDatasrc) 
  62. if (_bLoading)
  63. return;
  64. if (_ctlDataSource)
  65. {
  66. _ctlDataSource.detachEvent("onrowsdelete", _OnRowsDelete);
  67. if (_tblList)
  68. _tblList.detachEvent("onreadystatechange", _OnTableReady);
  69. }
  70. if ("" == szDatasrc)
  71. {
  72. _idDataSource = null;
  73. _ctlDataSource = null;
  74. }
  75. else
  76. {
  77. _idDataSource = szDatasrc;
  78. _SetDataSourceObject(szDatasrc);
  79. }
  80. if (_ctlDataSource)
  81. {
  82. _ctlDataSource.attachEvent("onrowsdelete", _OnRowsDelete);
  83. if (_tblList)
  84. _tblList.attachEvent("onreadystatechange", _OnTableReady);
  85. }
  86. }
  87. function get_autoExpand() { return _bAutoExpand; }
  88. function put_autoExpand(bAutoExpand) 
  89. if (_bLoading)
  90. return;
  91. _bAutoExpand = (bAutoExpand) ? true : false;
  92. }
  93. function get_freeze() { return _bFreeze; }
  94. function put_freeze(bFreeze)
  95. if (_bLoading)
  96. return;
  97. _bFreeze = (bFreeze) ? true : false;
  98. }
  99. function get_templateSource() { return _idTemplateSource; }
  100. function put_templateSource(szId)
  101. if (_bLoading)
  102. return;
  103. _idTemplateSource = szId;
  104. _ResetTemplateStore();
  105. }
  106. function get_feedBack() { return _szFeedBack; }
  107. function put_feedBack(szText)
  108. {
  109. _szFeedBack = szText;
  110. if (_szFeedBack == "")
  111. {
  112. if (_dvFeedBack != null) 
  113. _dvFeedBack.style.display = 'none';
  114. }
  115. else
  116. {
  117. if (_dvFeedBack != null)
  118. {
  119. _dvFeedBack.style.display = '';
  120. _dvFeedBack.innerHTML = _szFeedBack;
  121. }
  122. if (_tblList != null)
  123. {
  124. _tblList.style.display = 'none';
  125. }
  126. }
  127. }
  128. function _OnContentReady()
  129. {
  130. _bLoading = false;
  131. _PrepHTML();
  132. }
  133. function _OnTableReady()
  134. {
  135. var tblElem = window.event.srcElement;
  136. if ("complete" == tblElem.readyState)
  137. {
  138. if ((null != _tblList) && (_szFeedBack == "") && _tblList.style.display == 'none')
  139. {
  140. _tblList.style.display = '';
  141. }
  142. var recordset = _GetRecordset();
  143. if (recordset && recordset.state != 0)
  144. {
  145. evt = createEventObject();
  146. evt.tableList = tblElem;
  147. onListComplete.fire(evt);
  148. if (-1 != _iSelDefault && _iSelDefault < _tblList.rows.length)
  149. {
  150. _SelectItem(_iSelDefault, true);
  151. }
  152. _bTableComplete = true;
  153. _CalcItemsPerPage();
  154. }
  155. }
  156. else if ("loading" == tblElem.readyState)
  157. {
  158. if (_bTableComplete)
  159. {
  160. _InternalResetSelection();
  161. }
  162. else
  163. {
  164. _tblList.style.display = '';
  165. }
  166. }
  167. else if ("interactive" == tblElem.readyState)
  168. {
  169. _tblList.style.display = '';
  170. }
  171. }
  172. function _OnDocumentLoad()
  173. {
  174. _ScanSpecialElements();
  175. _CreateHTML();
  176. }
  177. function _ResetTemplateStore()
  178. {
  179. _cRowsExpand = 0;
  180. _rgTemplateRows = new Array();
  181. }
  182. function _GetPropertyDefaults()
  183. {
  184. if (element.dataSource)
  185. {
  186. _idDataSource = element.dataSource;
  187. _SetDataSourceObject(_idDataSource);
  188. if (_ctlDataSource)
  189. _ctlDataSource.attachEvent("onrowsdelete", _OnRowsDelete);
  190. }
  191. if (element.selectionIndex)
  192. _iSelCur = parseInt(element.selectionIndex);
  193. if (element.defaultSelection)
  194. _iSelDefault = parseInt(element.defaultSelection);
  195. if (element.autoExpand)
  196. _bAutoExpand = ('false' != element.autoExpand) ? true : false;
  197. if (element.freeze)
  198. _bFreeze = ('false' != element.freeze) ? true : false;
  199. if (element.feedBack)
  200. _szFeedBack = element.feedBack;
  201. if (element.templateSource)
  202. _idTemplateSource = element.templateSource;
  203. }
  204. function _SetDataSourceObject(szDatasrc)
  205. {
  206. var rgszDatasrc = szDatasrc.split('.');
  207. _ctlDataSource = window.document.applets(rgszDatasrc[0])
  208. if (rgszDatasrc.length > 1)
  209. {
  210. _szRecordSetName = rgszDatasrc[1];
  211. }
  212. else
  213. _szRecordSetName = "";
  214. }
  215. function _GetRecordset()
  216. {
  217. var recordset = null;
  218. if (_ctlDataSource)
  219. recordset = _ctlDataSource.namedRecordset(_szRecordSetName);
  220. return recordset;
  221. }
  222. function _CalcItemsPerPage()
  223. {
  224. if (null == _tblList || 0 == _tblList.rows.length)
  225. {
  226. _nItemsPerPage = 0;
  227. return;
  228. }
  229. var iItem = (_iSelCur != 0) ? 0 : _tblList.rows.length - 1;
  230. var dySelItem = 0;
  231. if (-1 != _iSelCur)
  232. dySelItem = _tblList.rows(_iSelCur).offsetHeight;
  233. if (0 <= iItem)
  234. {
  235. var dyItem = _tblList.rows(iItem).offsetHeight;
  236. if (0 != dyItem)
  237. {
  238. _nItemsPerPage = Math.round((_divScroll.offsetHeight - dySelItem) / dyItem);
  239. }
  240. }
  241. }
  242. function _ScanSpecialElements()
  243. {
  244. var i;
  245. var elem;
  246. if (_idTemplateSource)
  247. {
  248. elem = window.document.all(_idTemplateSource);
  249. }
  250. else
  251. {
  252. elem = element;
  253. }
  254. var rgspan = elem.all.tags("SPAN");
  255. var cspan = rgspan.length;
  256. for (i = 0; i < cspan; i++)
  257. {
  258. var span = rgspan[i];
  259. if (null != span.lbDisplayName)
  260. _idDisplayName = span.id; 
  261. }
  262. var rgtr = elem.all.tags("TR");
  263. var ctr = rgtr.length;
  264. for (i = ctr - 1; i >= 0; i--)
  265. {
  266. var trElem = rgtr[i];
  267. if (null != trElem.lbExpandedRow)
  268. {
  269. var bEnable = (null != trElem.lbDisable) ? false : true;
  270. _StoreTemplateRow(trElem, _cRowsExpand++, bEnable);
  271. trElem.parentElement.deleteRow(trElem.rowIndex);
  272. }
  273. }
  274. _htmlRow = elem.innerHTML;
  275. if (_idTemplateSource)
  276. {
  277. elem.innerHTML = "";
  278. }
  279. }
  280. function _PrepHTML()
  281. {
  282. if (false == _bFreeze)
  283. {
  284. window.attachEvent("onload", _OnDocumentLoad);
  285. element.style.display = 'none';
  286. }
  287. }
  288. function _CreateHTML()
  289. {
  290. if (_idDataSource)
  291. {
  292. element.innerHTML = 
  293. '<DIV ' + c_szStyle_Background + '> ' +
  294. '   <DIV ' + c_szStyle_Feedback + '> ' + 
  295. _szFeedBack +
  296. '   </DIV>' + 
  297. '   <TABLE id=idTbl_' + uniqueID + ' ' + c_szStyle_Table + ' datasrc=#' + _idDataSource + ' cellpadding=0 cellspacing=0 style="display:none"> ' +
  298. '       <TBODY>                     ' +
  299. '           <TR> ' +
  300. '               <TD width=100%>     ' +
  301. _htmlRow +
  302. '               </TD> ' +
  303. '           </TR> ' +
  304. '       </TBODY> ' +
  305. '   </TABLE> ' +
  306. '</DIV';
  307. _dvFeedBack = element.children[0].children[0];
  308. _tblList = element.children[0].children[1];
  309. if (_szFeedBack == "")
  310. _dvFeedBack.style.display = 'none';
  311. else 
  312. _tblList.style.display = 'none';
  313. _tblList.attachEvent("onreadystatechange", _OnTableReady);
  314. }
  315. else
  316. {
  317. if ("" == _htmlRow)
  318. {
  319. _htmlRow = '<TABLE></TABLE>';
  320. }
  321. element.innerHTML = 
  322. '<DIV ' + c_szStyle_Background + '> ' +
  323. _htmlRow +
  324. '</DIV';
  325. _tblList = element.children[0].children[0];
  326. element.style.display = '';
  327. }
  328. _divScroll = element.children[0];
  329. _divScroll.attachEvent("onresize", _OnResize);
  330. _tblList.attachEvent("onclick", _OnClick);
  331. }
  332. function InheritProperties(elemTo, elemFrom)
  333. {
  334. elemTo['id'] = elemFrom['id'];
  335. elemTo['className'] = elemFrom['className'];
  336. if (elemTo._bStore)
  337. elemTo['tagName'] = elemFrom['tagName'];
  338. if ('TR' != elemFrom['tagName'])
  339. elemTo['innerHTML'] = elemFrom['innerHTML'];
  340. elemTo['colSpan'] = elemFrom['colSpan'];
  341. }
  342. function _StoreTemplateRow(trTemplate, iRowStore, bEnable)
  343. {
  344. var ctd = trTemplate.cells.length;
  345. var i;
  346. var rowStore = new Array(ctd);
  347. rowStore._ctd = ctd;
  348. rowStore._bStore = true;
  349. rowStore._bEnable = bEnable;
  350. InheritProperties(rowStore, trTemplate);
  351. for (i = 0; i < ctd; i++)
  352. {
  353. rowStore[i] = new Object();
  354. rowStore[i]._bStore = true;
  355. InheritProperties(rowStore[i], trTemplate.cells(i));
  356. }
  357. _rgTemplateRows[iRowStore] = rowStore;
  358. }
  359. function _CollapseRow(tblElem)
  360. {
  361. var cRow = _cRowsAdded;
  362. for (; 0 < cRow; cRow--)
  363. {
  364. tblElem.deleteRow();
  365. }
  366. _cRowsAdded = 0;
  367. }
  368. function _ExpandRow(tblElem)
  369. {
  370. var iRow;
  371. _cRowsAdded = 0;
  372. for (iRow = _cRowsExpand - 1; iRow >= 0; iRow--)
  373. {
  374. var rowTemplate = _rgTemplateRows[iRow];
  375. if (rowTemplate._bEnable)
  376. {
  377. var trNew = tblElem.insertRow();
  378. if (trNew)
  379. {
  380. var cCol = rowTemplate._ctd;
  381. var iCol;
  382. InheritProperties(trNew, rowTemplate);
  383. for (iCol = 0; iCol < cCol; iCol++)
  384. {
  385. var tdNew = trNew.insertCell();
  386. if (tdNew)
  387. InheritProperties(tdNew, rowTemplate[iCol]);
  388. }
  389. _cRowsAdded++;
  390. }
  391. }
  392. }
  393. }
  394. var ASF_SELECT = 0x01;
  395. var ASF_FOCUS = 0x02;
  396. function _ApplySelectionStyle(tblElem, state)
  397. {
  398. var elemDisplayName = tblElem.all(_idDisplayName);
  399. var trDisplayName = _GetParentElem(elemDisplayName, "TR");
  400. if (state & ASF_SELECT)
  401. {
  402. if (state & ASF_FOCUS)
  403. {
  404. trDisplayName.style.backgroundColor = 'highlight';
  405. trDisplayName.style.color = 'highlighttext';
  406. elemDisplayName.style.fontWeight = 'bold';
  407. tblElem.style.backgroundColor = 'highlight';
  408. tblElem.style.color = 'highlighttext';
  409. }
  410. else
  411. {
  412. trDisplayName.style.backgroundColor = 'buttonface';
  413. trDisplayName.style.color = '';
  414. elemDisplayName.style.fontWeight = 'bold';
  415. tblElem.style.backgroundColor = 'buttonface';
  416. tblElem.style.color = '';
  417. }
  418. }
  419. else
  420. {
  421. trDisplayName.style.backgroundColor = '';
  422. trDisplayName.style.color = '';
  423. elemDisplayName.style.fontWeight = '';
  424. tblElem.style.backgroundColor = '';
  425. tblElem.style.color = '';
  426. }
  427. }
  428. function _MakeRowVisible(trSel)
  429. {
  430. var yTop = trSel.offsetTop - _divScroll.scrollTop;
  431. var yBottom = trSel.offsetTop + trSel.offsetHeight - _divScroll.scrollTop;
  432. if (yBottom > _divScroll.offsetHeight)
  433. {
  434. _divScroll.scrollTop += yBottom - _divScroll.offsetHeight;
  435. }
  436. else if (yTop < 0)
  437. {
  438. _divScroll.scrollTop += yTop;
  439. }
  440. }
  441. function _SetTabIndex(elem, bSet, bFireFocus)
  442. {
  443. if (elem)
  444. {
  445. if (bSet)
  446. {
  447. elem.tabIndex = 0;
  448. if (bFireFocus && _bHasFocus && !elem._bFocus)
  449. {
  450. _bInternalFocusChange = true;
  451. elem.focus();
  452. }
  453. }
  454. else
  455. elem.tabIndex = -1;
  456. }
  457. }
  458. function _AttachItemEvents(elem)
  459. {
  460. if (elem)
  461. {
  462. if (null == elem._lbEventsBound)
  463. {
  464. elem._lbEventsBound = true;
  465. elem.attachEvent("onkeydown", _OnKeyDownItem);
  466. elem.attachEvent("onblur", _OnBlurItem);
  467. elem.attachEvent("onfocus", _OnFocusItem);
  468. }
  469. }
  470. }
  471. function _GetItemSrcChild(trElem)
  472. {
  473. if (trElem)
  474. {
  475. return trElem.children[0].children[0];
  476. }
  477. return null;
  478. }
  479. function _GetItemDisplayNameElem(trElem)
  480. {
  481. var srcChild = _GetItemSrcChild(trElem);
  482. if (srcChild)
  483. return srcChild.all(_idDisplayName);
  484. return null;
  485. }
  486. function _SelectItem(iSelNew, bFireFocus)
  487. {
  488. var bRet = false;
  489. var trElem;
  490. var srcChild;
  491. var elemDisplayName;
  492. var stateFocus = _bHasFocus ? ASF_FOCUS : 0;
  493. if (-1 != _iSelCur)
  494. {
  495. if (iSelNew == _iSelCur)
  496. {
  497. return false;
  498. }
  499. trElem = _tblList.rows(_iSelCur);
  500. srcChild = _GetItemSrcChild(trElem);
  501. elemDisplayName = srcChild.all(_idDisplayName);
  502. _FireCustomDraw(trElem, srcChild, false, 'prepaint');
  503. _FireSelectItem(trElem, srcChild, 'deselected');
  504. _ApplySelectionStyle(srcChild, stateFocus);
  505. if (_bAutoExpand)
  506. _CollapseRow(srcChild);
  507. _FireCustomDraw(trElem, srcChild, false, 'postpaint');
  508. _SetTabIndex(elemDisplayName, false, false);
  509. }
  510. if (0 == _tblList.rows.length)
  511. iSelNew = -1;
  512. else if (iSelNew >= _tblList.rows.length)
  513. iSelNew = _tblList.rows.length - 1;
  514. _iSelCur = iSelNew;
  515. if (-1 != _iSelCur)
  516. {
  517. var recordset = _GetRecordset();
  518. trElem = _tblList.rows(_iSelCur);
  519. srcChild = _GetItemSrcChild(trElem);
  520. elemDisplayName = srcChild.all(_idDisplayName);
  521. if (recordset && recordset.state != 0)
  522. recordset.AbsolutePosition = trElem.recordNumber;
  523. _FireCustomDraw(trElem, srcChild, true, 'prepaint');
  524. _ApplySelectionStyle(srcChild, ASF_SELECT | stateFocus);
  525. if (_bAutoExpand)
  526. _ExpandRow(srcChild);
  527. _MakeRowVisible(trElem);
  528. _FireCustomDraw(trElem, srcChild, true, 'postpaint');
  529. _FireSelectItem(trElem, srcChild,'selected');
  530. _SetTabIndex(elemDisplayName, true, bFireFocus);
  531. _AttachItemEvents(elemDisplayName);
  532. bRet = true;
  533. }
  534. return bRet;
  535. }
  536. function _PaintSelectedItem(stateFocus)
  537. {
  538. if (-1 < _iSelCur)
  539. {
  540. var trElem = _tblList.rows(_iSelCur);
  541. if (trElem)
  542. {
  543. var srcChild = _GetItemSrcChild(trElem);
  544. if (srcChild)
  545. {
  546. var elemDisplayName = srcChild.all(_idDisplayName);
  547. _ApplySelectionStyle(srcChild, ASF_SELECT | stateFocus);
  548. _FireSetFocus(trElem, srcChild, stateFocus & ASF_FOCUS);
  549. }
  550. }
  551. }
  552. }
  553. function _FireSelectItem(trElem, srcChild, szState)
  554. {
  555. var evt = createEventObject();
  556. evt.srcIndex = _iSelCur;
  557. evt.srcRow = trElem;
  558. evt.selState = szState;
  559. evt.srcChild = srcChild;
  560. evt.Recordset = _GetRecordset();
  561. onSelectItem.fire(evt);
  562. }
  563. function _FireCustomDraw(trElem, srcChild, bSelected, drawStage)
  564. {
  565. var evt = createEventObject();
  566. evt.srcIndex = _iSelCur;
  567. evt.srcRow = trElem;
  568. evt.srcChild = srcChild;
  569. evt.Recordset = _GetRecordset();
  570. evt.drawStage = drawStage; 
  571. evt.bSelected = bSelected;
  572. evt.bFocus = _bHasFocus;
  573. onCustomDraw.fire(evt);
  574. }
  575. function _FireSetFocus(trElem, srcChild, bFocus)
  576. {
  577. var evt = createEventObject();
  578. evt.srcIndex = _iSelCur;
  579. evt.srcRow = trElem;
  580. evt.srcChild = srcChild;
  581. evt.bFocus = bFocus;
  582. onSetFocus.fire(evt);
  583. }
  584. function _FindTemplateByID(id)
  585. {
  586. var i;
  587. for (i = 0; i < _cRowsExpand; i++)
  588. {
  589. if (_rgTemplateRows[i].id == id)
  590. return _rgTemplateRows[i];
  591. }
  592. return null;
  593. }
  594. function EnableTemplate(idTemplate, bEnable)
  595. {
  596. var rowTemplate = _FindTemplateByID(idTemplate);
  597. if (rowTemplate)
  598. rowTemplate._bEnable = bEnable ? true : false;
  599. }
  600. function Refresh()
  601. {
  602. _ScanSpecialElements();
  603. _CreateHTML();
  604. }
  605. function focus()
  606. {
  607. if (_tblList && -1 != _iSelCur)
  608. {
  609. var trElem = _tblList.rows(_iSelCur);
  610. var elem = _GetItemDisplayNameElem(trElem);
  611. if (elem)
  612. elem.focus();
  613. }
  614. else
  615. {
  616. _bHasFocus = true;
  617. }
  618. }
  619. function blur()
  620. {
  621. if (_tblList && -1 != _iSelCur)
  622. {
  623. var trElem = _tblList.rows(_iSelCur);
  624. var elem = _GetItemDisplayNameElem(trElem);
  625. if (elem)
  626. elem.blur();
  627. }
  628. else
  629. {
  630. _bHasFocus = false;
  631. }
  632. }
  633. function _OnRowsDelete()
  634. {
  635. if (window.event.qualifier == _szRecordSetName)
  636. {
  637. if (-1 != _iSelCur)
  638. {
  639. var trSelCur = _tblList.rows(_iSelCur);
  640. var recordset = _GetRecordset();
  641. var rsClone = recordset.Clone();
  642. if (null != rsClone)
  643. {
  644. var rgbkmk = window.event.bookmarks;
  645. var cbkmk = rgbkmk.length;
  646. var i;
  647. for (i = 0; i < cbkmk; i++)
  648. {
  649. rsClone.Bookmark = rgbkmk(i);
  650. if (rsClone.AbsolutePosition == trSelCur.recordNumber)
  651. {
  652. var iSelT = _iSelCur + 1;
  653. var bDec = true;
  654. if (_iSelCur == _tblList.rows.length - 1)
  655. {
  656. iSelT = _iSelCur - 1; 
  657. bDec = false;
  658. }
  659. _SelectItem(iSelT, true);
  660. if (bDec)
  661. {
  662. _iSelCur--;
  663. }
  664. }
  665. }
  666. }
  667. }
  668. }
  669. }
  670. function _InternalResetSelection()
  671. {
  672. _iSelCur = -1;
  673. _cRowsAdded = 0;
  674. }
  675. function ResetSelection()
  676. {
  677. _SelectItem(-1, true);
  678. }
  679. var KC_UP = 38;
  680. var KC_DOWN = 40;
  681. var KC_END = 35;
  682. var KC_HOME = 36;
  683. var KC_PGUP = 33;
  684. var KC_PGDOWN = 34;
  685. function _OnKeyDown()
  686. {
  687. var keyCode = window.event.keyCode;
  688. switch (keyCode)
  689. {
  690. case KC_UP:
  691. case KC_DOWN:
  692. case KC_END:
  693. case KC_HOME:
  694. case KC_PGUP:
  695. case KC_PGDOWN:
  696. window.event.returnValue = false;
  697. break;
  698. }
  699. }
  700. function _OnKeyDownItem()
  701. {
  702. var keyCode = window.event.keyCode;
  703. var iSelT = _iSelCur;
  704. var bDoSomething = false;
  705. switch (keyCode)
  706. {
  707. case KC_UP:
  708. if (iSelT > 0)
  709. iSelT--;
  710. break;
  711. case KC_DOWN:
  712. if (iSelT < _tblList.rows.length - 1)
  713. iSelT++;
  714. break;
  715. case KC_HOME:
  716. iSelT = 0;
  717. break;
  718. case KC_END:
  719. iSelT = _tblList.rows.length - 1;
  720. break;
  721. case KC_PGUP:
  722. iSelT = _iSelCur - _nItemsPerPage;
  723. if (iSelT < 0)
  724. iSelT = 0;
  725. break;
  726. case KC_PGDOWN:
  727. iSelT = _iSelCur + _nItemsPerPage;
  728. if (iSelT > _tblList.rows.length - 1)
  729. iSelT = _tblList.rows.length - 1;
  730. break;
  731. }
  732. if (iSelT != _iSelCur)
  733. {
  734. _SelectItem(iSelT, true);
  735. window.event.returnValue = false;
  736. }
  737. }
  738. function _OnResize()
  739. {
  740. _CalcItemsPerPage();
  741. }
  742.  
  743. function _OnClick()
  744. {
  745. var elem = window.event.srcElement;
  746. var trTopParent = _GetTopmostElem(elem, "TR");
  747. if (trTopParent)
  748. {
  749. var elemDisplayName = trTopParent.all(_idDisplayName);
  750. var iRow = trTopParent.rowIndex;
  751. var bFireFocus = true;
  752. var bOldFocus = _bHasFocus;
  753. if (elem == elemDisplayName && iRow == _iSelCur)
  754. {
  755. bFireFocus = false;
  756. }
  757. _bHasFocus = true;
  758. if (false == _SelectItem(iRow, bFireFocus) && 
  759. bOldFocus != _bHasFocus)
  760. {
  761. _PaintSelectedItem(ASF_FOCUS);
  762. if (bFireFocus)
  763. {
  764. _SetTabIndex(elemDisplayName, true, true);
  765. }
  766. }
  767. }
  768. }
  769. function _OnBlurItem()
  770. {
  771. var elem = window.event.srcElement;
  772. elem._bFocus = false;
  773. if (true == _bHasFocus && false == _bInternalFocusChange)
  774. {
  775. _bHasFocus = false;
  776. _PaintSelectedItem(0);
  777. }
  778. _bInternalFocusChange = false;
  779. }
  780. function _OnFocusItem()
  781. {
  782. var elem = window.event.srcElement;
  783. elem._bFocus = true;
  784. if (false == _bHasFocus)
  785. {
  786. _bHasFocus = true;
  787. _PaintSelectedItem(ASF_FOCUS);
  788. }
  789. _bInternalFocusChange = false;
  790. }
  791. function _OnError(szMsg, szUrl, iLine)
  792. {
  793. alert("An unexpected error occurred.\n\n" + szMsg + "\n" + szUrl + "\nLine: " + iLine);
  794. return true; 
  795. }
  796. function _GetTopmostElem(elem, tagFind)
  797. {
  798. var elemLast = null;
  799. while (elem != element)
  800. {
  801. if (tagFind == elem.tagName.toUpperCase())
  802. elemLast = elem;
  803. elem = elem.parentElement;
  804. }
  805. return elemLast;
  806. }
  807. function _GetParentElem(elem, tagFind)
  808. {
  809. while (elem != element)
  810. {
  811. if (tagFind == elem.tagName.toUpperCase())
  812. return elem;
  813. elem = elem.parentElement;
  814. }
  815. return null;
  816. }
  817. </SCRIPT><PROPERTY name="dataSource" get=get_dataSource put=put_dataSource /><PROPERTY name="selectionIndex" get=get_selIndex put=put_selIndex /><PROPERTY name="defaultSelection" get=get_defaultSel put=put_defaultSel /><PROPERTY name="autoExpand" get=get_autoExpand put=put_autoExpand /><PROPERTY name="freeze" get=get_freeze put=put_freeze /><PROPERTY name="feedBack" get=get_feedBack put=put_feedBack /><PROPERTY name="templateSource" get=get_templateSource put=put_templateSource /></PUBLIC:HTC>