/////////////////////////////////////////////////////////////////////////////// // Global Variable /////////////////////////////////////////////////////////////////////////////// var DynamicComboBoxServerExists = true; /////////////////////////////////////////////////////////////////////////////// // Public Functions /////////////////////////////////////////////////////////////////////////////// function DynamicComboBoxChangeText(ctrlId, text) { eval(ctrlId + ".changeText(" + text + ")"); } function DynamicComboBoxClear(ctrlId) { eval(ctrlId + ".clearAll()"); } function DynamicComboBoxGetQuery(ctrlId) { return (eval(ctrlId + ".getQuery()")); } function DynamicComboBoxGetSelectedIndex(ctrlId) { return (eval(ctrlId + ".getSelectedIndex()")); } function DynamicComboBoxGetText(ctrlId) { return (eval(ctrlId + ".getText()")); } function DynamicComboBoxGetValue(ctrlId) { return (eval(ctrlId + ".getValue()")); } function DynamicComboBoxHideResults(ctrlId) { eval(ctrlId + ".hideResults()"); } function DynamicComboBoxReQuery(ctrlId) { eval(ctrlId + ".reQuery()"); } function DynamicComboBoxRequestMoreResults(ctrlId) { eval(ctrlId + ".onMoreResultsButtonClick()"); } function DynamicComboBoxSelectAll(ctrlId) { return (eval(ctrlId + ".selectAll()")); } function DynamicComboBoxSelectByPartialText(ctrlId, text) { eval(ctrlId + ".selectByPartialText(" + text + ")"); } function DynamicComboBoxSelectByText(ctrlId, text) { eval(ctrlId + ".selectByText(" + text + ")"); } function DynamicComboBoxSelectByValue(ctrlId, value) { eval(ctrlId + ".selectByValue(" + value + ")"); } function DynamicComboBoxSendRequest(ctrlId) { eval(ctrlId + ".onDropDownButtonClick()"); } function DynamicComboBoxSetCaretToEnd(ctrlId) { eval(ctrlId + ".setCaretToEnd()"); } function DynamicComboBoxShowResults(ctrlId) { eval(ctrlId + ".showResults()"); } function DynamicComboBoxStateChanged(ctrlId) { return (eval(ctrlId + ".stateChanged()")); } /////////////////////////////////////////////////////////////////////////////// // DynamicComboBox /////////////////////////////////////////////////////////////////////////////// function DynamicComboBox(ctrlId, dropDownRows, serverMethod, serverDataTextFormatMethod, serverMethodAssembly, serverMethodType, serverPageUrl, dataTextField, dataValueField, textLoading, textNoResults, latency, clearQueryOnDropDown, closeResultsOnBlur, closeResultsOnClick, closeResultsOnEnter, closeResultsOnTab, autoPostBack, debug, hideAllSelectTags, hideIntersectingSelectTags, clientOnSelectFunction, clientStateFunction, clientOnReQueryFunction, showError, textError, queryAll, selectItemOnPartialMatch, downImageUrl, upImageUrl, reQueryDisabled, selectSingleItemOnEnter, selectSingleItemOnTab, tabToNextFieldOnEnter, queryRows, dropDownButtonDownClass, dropDownButtonUpClass) { DynamicComboBoxDebugWrite(ctrlId, ".ctor"); // Controls var m_CtrlId = ctrlId; var m_QueryTextBox = document.getElementById(m_CtrlId + "_QueryTextBox"); var m_ButtonSpan = document.getElementById(m_CtrlId + "_ButtonSpan"); var m_DropDownButton = document.getElementById(m_CtrlId + "_DropDownButton"); var m_DropDownImage = document.getElementById(m_CtrlId + "_DropDownImage"); var m_HelpButton = document.getElementById(m_CtrlId + "_HelpButton"); var m_ReQueryOnLoadHidden = document.getElementById(m_CtrlId + "_ReQueryOnLoadHidden"); var m_ReQueryRecordsHidden = document.getElementById(m_CtrlId + "_ReQueryRecordsHidden"); var m_QueryHidden = document.getElementById(m_CtrlId + "_QueryHidden"); var m_ValueHidden = document.getElementById(m_CtrlId + "_ValueHidden"); var m_SelectedIndexHidden = document.getElementById(m_CtrlId + "_SelectedIndexHidden"); var m_ResultsSpan = document.getElementById(m_CtrlId + "_ResultsBox"); var m_ResultsInnerSpan = document.getElementById(m_CtrlId + "_ResultsInnerSpan"); var m_Clipper = document.getElementById(m_CtrlId + "_Clipper"); var m_Spacer = document.getElementById(m_CtrlId + "_Spacer"); var m_List = document.getElementById(m_CtrlId + "_SelectListBox"); var m_MoreResultsButton = document.getElementById(m_CtrlId + "_MoreResultsButton"); var m_StatusDisplaySpan = document.getElementById(m_CtrlId + "_StatusDisplayBox"); var m_StatusBar = document.getElementById(m_CtrlId + "_StatusBarBox"); // Member variables var m_XmlHttp = DynamicComboBoxNewXmlHttpRequest(); var m_HiddenSelect = new Array(); var m_DropDownRows = dropDownRows; var m_NumRows = queryRows; var m_QueryRows = queryRows; var m_SkipRecords = 0; var m_KeyPressNumber = 0; var m_ClientStateFunction = clientStateFunction; var m_ClientOnSelectFunction = clientOnSelectFunction; var m_ClientOnReQueryFunction = clientOnReQueryFunction; var m_LastQuery = ""; var m_LastState = new Object(); var m_TmpSelectedIndex = -1; var m_Debug = debug; var m_AutoPostBack = autoPostBack; var m_ReQueryDisabled = reQueryDisabled; var m_ClearQueryOnDropDown = clearQueryOnDropDown; var m_CloseResultsOnBlur = closeResultsOnBlur; var m_CloseResultsOnClick = closeResultsOnClick; var m_CloseResultsOnEnter = closeResultsOnEnter; var m_CloseResultsOnTab = closeResultsOnTab; var m_DropDownButtonDownClass = dropDownButtonDownClass; var m_DropDownButtonUpClass = dropDownButtonUpClass; var m_HideIntersectingSelectTags = hideIntersectingSelectTags; var m_HideAllSelectTags = hideAllSelectTags; var m_Latency = latency; var m_HideLookup = true; var m_QueryAll = queryAll; var m_SelectItemOnPartialMatch = selectItemOnPartialMatch; var m_LastPartialMatchQuery = ""; var m_RequestInProgress = false; var m_ServerMethodAssembly = serverMethodAssembly; var m_ServerMethodType = serverMethodType; var m_ServerMethod = serverMethod; var m_ServerDataTextFormatMethod = serverDataTextFormatMethod; var m_DataValueField = dataValueField; var m_DataTextField = dataTextField; var m_ShowError = showError; var m_TextError = unescape(textError); var m_SelectSingleItemOnEnter = selectSingleItemOnEnter; var m_SelectSingleItemOnTab = selectSingleItemOnTab; var m_TabToNextFieldOnEnter = tabToNextFieldOnEnter; var m_AbortLookup = false; var m_DownImageUrl = downImageUrl; var m_UpImageUrl = upImageUrl; var m_SearchAvailable = false; var m_TextLoading = unescape(textLoading); var m_TextNoResults = unescape(textNoResults); var m_ServerPageUrl = serverPageUrl; var m_PreviousWindowOnResizeFct = null; // Set control handlers m_List.handler = this; m_ResultsSpan.handler = this; m_QueryTextBox.handler = this; m_StatusDisplaySpan.handler = this; m_Spacer.handler = this; m_MoreResultsButton.handler = this; m_StatusBar.handler = this; m_Clipper.handler = this; m_ButtonSpan.handler = this; m_ResultsInnerSpan.handler = this; if (m_HelpButton) m_HelpButton.handler = this; if (m_DropDownButton) m_DropDownButton.handler = this; if (m_DropDownImage) m_DropDownImage.handler = this; // Initialize init(); // Private methods function callClientOnSelectFunction(value, text, selectionType) { if (m_ClientOnSelectFunction == "") return; try { eval(m_ClientOnSelectFunction + "(value, text, " + selectionType + ");"); } catch (e) { } } function changedSelection(selectionType) { DynamicComboBoxDebugWrite(m_CtrlId, "ChangedSelection(" + selectionType + ")"); if (selectionType == 2 || selectionType == 3) { m_SelectedIndexHidden.value = m_List.selectedIndex; callClientOnSelectFunction(m_List[m_List.selectedIndex].value, m_List[m_List.selectedIndex].text, selectionType); doAutoPostBack(); } if (typeof(Page_Validators) != "undefined") { if (typeof(m_QueryTextBox.Validators) == "object") { var vals = m_QueryTextBox.Validators; for (var i = 0; i < vals.length; i++) { ValidatorValidate(vals[i]); } ValidatorUpdateIsValid(); } if (typeof(m_ValueHidden.Validators) == "object") { var vals = m_ValueHidden.Validators; for (var i = 0; i < vals.length; i++) { ValidatorValidate(vals[i]); } ValidatorUpdateIsValid(); } } } function changedSelectionInternal(newSelectedIndex, selectionType, reQuery) { m_List.selectedIndex = newSelectedIndex; if (reQuery) m_SelectedIndexHidden.value = newSelectedIndex; else changedSelection(selectionType); } function clear() { DynamicComboBoxDebugWrite(m_CtrlId, "Clear"); resetClearScheduled(); if (isAbortClear()) { resetAbortClear(); return; } hideResults(); m_List.style.display = "none"; hideStatus(); hideMoreResultsButton(); m_Spacer.style.height = 1 + "px"; if (!m_QueryAll && m_QueryHidden != "") { clearSelect(); m_NumRows = m_QueryRows; m_SkipRecords = 0; m_KeyPressNumber = 0; } m_QueryHidden.value = ""; m_LastQuery = ""; m_LastPartialMatchQuery = ""; clearQuery(); clearedSelection(2); } function clearQuery() { m_QueryTextBox.value = ""; } function clearedSelection(selectionType) { m_List.selectedIndex = -1; m_SelectedIndexHidden.value = "-1"; m_ValueHidden.value = ""; callClientOnSelectFunction('', m_QueryTextBox.value, selectionType); if (selectionType == 2 || selectionType == 3) doAutoPostBack(); } function clearSelect() { DynamicComboBoxDebugWrite(m_CtrlId, "ClearSelect"); var parent = m_List.parentNode; var clone = m_List.cloneNode(false); parent.replaceChild(clone, m_List); updateList(clone); m_SearchAvailable = false; m_ReQueryOnLoadHidden.value = "false"; } function doAutoPostBack() { DynamicComboBoxDebugWrite(m_CtrlId, "DoAutoPostBack(" + m_AutoPostBack.toString() + ")"); if (m_AutoPostBack) __doPostBack(m_CtrlId, "autoPostBack"); } function getMoreResults() { if (stateUnChanged()) { m_NumRows = m_NumRows + m_QueryRows; hideMoreResultsButton(); sendRequest(false, true, false); } } function hiddenSearchIsAvailable() { return (m_SearchAvailable && m_ResultsSpan.style.display == "none"); } function hideMoreResultsButton() { m_MoreResultsButton.style.display = "none"; m_StatusBar.style.display = "none"; } function hideResults() { DynamicComboBoxDebugWrite(m_CtrlId, "HideResults"); if (m_DropDownImage) m_DropDownImage.src = m_DownImageUrl; if (m_DropDownButton) m_DropDownButton.className = m_DropDownButtonDownClass; if (DynamicComboBoxIsIE7()) setTimeout("DynamicComboBoxHideResultsSpan(\"" + m_CtrlId + "\")", 100); else m_ResultsSpan.style.display = "none"; for (var i = 0; i < m_HiddenSelect.length; i = i+2) { m_HiddenSelect[i].style.visibility = m_HiddenSelect[i+1]; } m_HiddenSelect = new Array(); } function hideSelectTags() { DynamicComboBoxDebugWrite(m_CtrlId, "HideSelectTags"); if (m_HideAllSelectTags) { var e = document.getElementsByTagName("select"); for (var i = 0; i < e.length; i++) { if (e[i] != m_List) { var found_one = false; for (var j = 0; j < m_HiddenSelect.length; j = j+2) { if (m_HiddenSelect[j] == e[i]) found_one = true; } if (!found_one) { m_HiddenSelect.push(e[i]); m_HiddenSelect.push(e[i].style.visibility); } /* TODO ! Bug: When DCB1 filters DCB2 and DCB1's OnSelect function changes DCB2's state, DCB2's loadData will hide DCB1's select !!!!! */ e[i].style.visibility = "hidden"; } } } else if (m_HideIntersectingSelectTags) { var e = document.getElementsByTagName("select"); for (var i = 0; i < e.length; i++) { if (e[i] != m_List) { if (intersectionTest(e[i])) { var found_one = false; for (var j = 0; j < m_HiddenSelect.length; j = j+2) { if (m_HiddenSelect[j] == e[i]) found_one = true; } if (!found_one) { m_HiddenSelect.push(e[i]); m_HiddenSelect.push(e[i].style.visibility); } e[i].style.visibility = "hidden"; } } } } } function hideStatus() { m_StatusDisplaySpan.style.display = "none"; } function init() { DynamicComboBoxDebugWrite(m_CtrlId, "Init"); // Preload the up-arrow image var preloadImg1 = new Image(9,6); preloadImg1.src = m_UpImageUrl; // Preload the down-arrow image var preloadImg2 = new Image(9,6); preloadImg2.src = m_DownImageUrl; // Hide results hideResults(); m_List.style.display = "none"; hideStatus(); hideMoreResultsButton(); // Client state if (m_ClientStateFunction != "") { try { m_LastState = eval(m_ClientStateFunction); } catch (e) { } } m_PreviousWindowOnResizeFct = window.onresize; window.onresize = onResize; m_Spacer.style.display = "none"; } function intersectionTest(selectTag) { var resultsSpanStyle = DynamicComboBoxGetComputedStyle(m_ResultsSpan); var selectTagStyle = DynamicComboBoxGetComputedStyle(selectTag); var comboTop = DynamicComboBoxGetDimPage(m_ResultsSpan).y ; var comboBot = DynamicComboBoxGetDimPage(m_ResultsSpan).y + m_ResultsSpan.clientHeight + parseInt(DynamicComboBoxStripNonNumbers(resultsSpanStyle.borderBottomWidth)) + m_ResultsSpan.clientTop; var comboLeft = DynamicComboBoxGetDimPage(m_ResultsSpan).x ; var comboRight = DynamicComboBoxGetDimPage(m_ResultsSpan).x + m_ResultsSpan.clientWidth + parseInt(DynamicComboBoxStripNonNumbers(resultsSpanStyle.borderRightWidth)) + m_ResultsSpan.clientLeft; var selectTop = DynamicComboBoxGetDimPage(selectTag).y ; var selectBot = DynamicComboBoxGetDimPage(selectTag).y + selectTag.clientHeight + parseInt(DynamicComboBoxStripNonNumbers(selectTagStyle.borderBottomWidth)) + selectTag.clientTop; var selectLeft = DynamicComboBoxGetDimPage(selectTag).x ; var selectRight = DynamicComboBoxGetDimPage(selectTag).x + selectTag.clientWidth + parseInt(DynamicComboBoxStripNonNumbers(selectTagStyle.borderRightWidth)) + selectTag.clientLeft; if (comboTop < selectBot && comboBot > selectTop && comboLeft < selectRight && comboRight > selectLeft) return (true); else return (false); } function isReQueryOnLoad() { return (m_ReQueryOnLoadHidden.value == "true" &! m_ReQueryDisabled); } function loadData(clearlist, setFocus, reQuery) { DynamicComboBoxDebugWrite(m_CtrlId, "LoadData"); try { if (!m_AbortLookup) { if (m_XmlHttp.readyState == 4 && m_XmlHttp.responseText != "") { // All xml has been received showStatus(m_TextLoading); var tmpSelectedIndex = m_List.selectedIndex; if (clearlist) { clearSelect(); } if (m_Debug) { var navWindow; navWindow = window.open("","DebugWindow","height=400, width=500, location=0, menubar=0, status=0, toolbar=0, resizable=1, scrollbars=1"); navWindow.document.open(); navWindow.document.write("
Debug Mode

You have set Debug to true.

Below is displayed the raw output from the ServerMethod. This may be an exception, or if the DynamicComboBox is functionning correctly, the XML result.
"); try { var xmlDocDebug = loadXML(m_XmlHttp); var exception = xmlDocDebug.documentElement.getElementsByTagName("exception")[0]; var results = xmlDocDebug.documentElement.getElementsByTagName("results")[0]; navWindow.document.write("
Exception:"); if (exception && exception.childNodes[0] && exception.childNodes[0].nodeValue != "") { navWindow.document.write("
" + exception.childNodes[0].nodeValue); } navWindow.document.write("
Results: " + results.childNodes[0].nodeValue); navWindow.document.write("
Data:
"); for (var i = 0; i < xmlDocDebug.documentElement.getElementsByTagName("data").length; i++) { var data = xmlDocDebug.documentElement.getElementsByTagName("data").item(i); var text = data.getElementsByTagName("text")[0].childNodes[0].nodeValue; var value = data.getElementsByTagName("value")[0].childNodes[0].nodeValue; navWindow.document.write(text + " - " + value + "
"); } } catch (e) { navWindow.document.write(m_XmlHttp.responseText); throw (e); } } var xmlDoc = loadXML(m_XmlHttp); if (xmlDoc == null || xmlDoc.documentElement == null || xmlDoc.documentElement.tagName != "serverResponse") { showError(); DynamicComboBoxDebugWrite(m_CtrlId, "LOAD DATA ERROR - NO SERVER RESPONSE"); DynamicComboBoxDebugWrite(m_CtrlId, m_XmlHttp.responseText); return; } var exception = xmlDoc.documentElement.getElementsByTagName("exception")[0]; if (exception && exception.childNodes[0] && exception.childNodes[0].nodeValue != "") { clearQuery(); showError(); DynamicComboBoxDebugWrite(m_CtrlId, "LOAD DATA ERROR - EXCEPTION"); DynamicComboBoxDebugWrite(m_CtrlId, exception.childNodes[0].nodeValue); return; } else { var results = xmlDoc.documentElement.getElementsByTagName("results")[0]; if (results && results.childNodes[0] && results.childNodes[0].nodeValue == "-1") { // More results showMoreResultsButton(); } else { // No more results hideMoreResultsButton(); showStatus(""); } var count = xmlDoc.documentElement.getElementsByTagName("data").length; if (count == 0 && clearlist) { // Zero results delivered and list has been cleared - e.g. zero results total hideMoreResultsButton(); showStatus(m_TextNoResults); } else { hideStatus(); m_ReQueryOnLoadHidden.value = "true"; } var queryFoundInStream = false; var queryFoundInStreamCount = 0; var valueFoundInStream = false; var valueFoundInStreamCount = 0; var queryValueMatch = false; if (count != 0) { // Some results delivered var parent = m_List.parentNode; var clone = m_List.cloneNode(true); for (var i = 0; i < xmlDoc.documentElement.getElementsByTagName("data").length; i++) { var data = xmlDoc.documentElement.getElementsByTagName("data")[i]; var text = data.getElementsByTagName("text")[0].childNodes[0].nodeValue; var value = data.getElementsByTagName("value")[0].childNodes[0].nodeValue; var newOption = clone.appendChild(document.createElement('option')); newOption.value = value; newOption.text = text; var queryMatchThisRecord = false; if (m_QueryTextBox.value == text && text != "") { queryFoundInStream = true; queryFoundInStreamCount++; queryMatchThisRecord = true; } if (m_ValueHidden.value == value && value != "") { valueFoundInStream = true; valueFoundInStreamCount++; if (queryMatchThisRecord) queryValueMatch = true; } } parent.replaceChild(clone, m_List); updateList(clone); } if (queryValueMatch) { for (var x = 0; x < m_List.options.length; x++) { if (m_List.options[x].text == m_QueryTextBox.value && m_List.options[x].value == m_ValueHidden.value) { changedSelectionInternal(x, 9, reQuery); break; } } } else if (queryFoundInStreamCount == 1 && m_ValueHidden.value == "") { for (var x = 0; x < m_List.options.length; x++) { if (m_List.options[x].text == m_QueryTextBox.value && m_List.options[x].text != "") { m_ValueHidden.value = m_List[x].value; changedSelectionInternal(x, 8, reQuery); break; } } } else if (valueFoundInStreamCount == 1 && m_QueryTextBox.value == "") { for (var x = 0; x < m_List.options.length; x++) { if (m_List.options[x].value == m_ValueHidden.value && m_List.options[x].value != "") { m_QueryTextBox.value = m_List[x].text; changedSelectionInternal(x, 8, reQuery); break; } } } else if (m_SelectItemOnPartialMatch) { partialMatch(m_QueryTextBox.value); } if (clearlist &! setFocus && m_List.selectedIndex == -1 && m_QueryTextBox.value != "") { clearQuery(); clearedSelection(6); } if (reQuery && m_ClientOnReQueryFunction != "") { eval(m_ClientOnReQueryFunction); } if (count != 0) { if (m_List.length <= 1) { m_List.size = 2; } else if (m_List.length < m_DropDownRows) { m_List.size = m_List.length; } else { m_List.size = m_DropDownRows; } } if (m_List.selectedIndex == -1 && m_List.length > m_QueryRows && m_List.length - count > 0) scrollToListItem(m_List.length - count - 1); var hideSelects = !reQuery; if (!setFocus) hideSelects = false; // TODO ! resizeResults(hideSelects); if (!(count == 0 && clearlist)) { if (setFocus) m_QueryTextBox.focus(); if (!clearlist &! queryFoundInStream &! valueFoundInStream) m_List.selectedIndex = tmpSelectedIndex; m_SearchAvailable = true; } else { m_Spacer.style.display = "none"; } } m_RequestInProgress = false; if (reQuery) { m_SkipRecords = parseInt(m_ReQueryRecordsHidden.value); m_NumRows = (parseInt(m_ReQueryRecordsHidden.value) + m_QueryRows)/2; m_ReQueryRecordsHidden.value = m_SkipRecords; } else { m_SkipRecords = m_NumRows; m_ReQueryRecordsHidden.value = m_SkipRecords; } } else { // Xml not yet fully delivered showStatus(m_TextLoading); } } else { m_KeyPressNumber = 0; } } catch (e) { showError(); DynamicComboBoxDebugWrite(m_CtrlId, "LOAD DATA ERROR"); DynamicComboBoxDebugWrite(m_CtrlId, e.message); } } function loadDataStub() { loadData(false, true, false); } function loadDataStubClear() { loadData(true, true, false); } function loadDataStubClearNoFocus() { loadData(true, false, false); } function loadDataStubReQuery() { loadData(true, false, true); } function loadXML(httpRequest) { DynamicComboBoxDebugWrite(m_CtrlId, "LoadXML"); return (DynamicComboBoxNewXmlDocFromHttpRequest(httpRequest)); } function match(text) { for (var x = 0; x < m_List.options.length; x++) { if (m_List.options[x].text == text) { m_List.selectedIndex = x; m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(11); return (true); } } return (false); } function onResize() { DynamicComboBoxDebugWrite(m_CtrlId, "OnResize"); if (m_PreviousWindowOnResizeFct) m_PreviousWindowOnResizeFct(); positionResults(); } function partialMatch(text) { if (!DynamicComboBoxSelectionRangeSupported(m_QueryTextBox)) return (false); if (text.length == 0) { m_LastPartialMatchQuery = ""; m_QueryHidden.value = ""; m_ValueHidden.value = ""; m_SelectedIndexHidden.value = "-1"; m_List.selectedIndex = -1; return (false); } for (var i = 0; i < m_List.options.length; i++) { var substr = m_List.options[i].text.substr(0, text.length); if (substr.toUpperCase() == text.toUpperCase()) { m_LastPartialMatchQuery = text; m_List.selectedIndex = i; var previousText = m_QueryTextBox.value; m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; DynamicComboBoxSetSelectionRange(m_QueryTextBox, previousText.length, m_QueryTextBox.value.length); return (true); } } m_LastPartialMatchQuery = ""; m_QueryHidden.value = ""; m_ValueHidden.value = ""; m_SelectedIndexHidden.value = "-1"; m_List.selectedIndex = -1; return (false); } function positionResults() { m_ResultsSpan.style.left = DynamicComboBoxGetDim(m_QueryTextBox).x + "px"; m_ResultsSpan.style.top = DynamicComboBoxGetDim(m_QueryTextBox).y + m_QueryTextBox.offsetHeight - 1 + "px"; } function resizeResults(hideSelects) { try { DynamicComboBoxDebugWrite(m_CtrlId, "ResizeResults(" + hideSelects.toString() + ")"); if (m_DropDownButton != null) m_DropDownButton.style.height = m_QueryTextBox.offsetHeight + "px"; if (m_HelpButton != null) m_HelpButton.style.height = m_QueryTextBox.offsetHeight + "px"; positionResults(); m_Spacer.style.display = "block"; m_List.style.display = "block"; m_List.style.width = "auto"; var textBoxWidth = parseInt(m_QueryTextBox.offsetWidth) + 2; var dropWidth = parseInt(m_List.clientWidth) - 3; var dropHeight = parseInt(m_List.clientHeight) - 3; var width; if (dropWidth > textBoxWidth) width = dropWidth; else width = textBoxWidth; m_ResultsSpan.style.width = width + "px"; if (m_ResultsSpan.clientWidth + 3 > width) { width = m_ResultsSpan.clientWidth + 3; m_List.style.width = m_ResultsSpan.clientWidth + 6 + "px"; } else { m_List.style.width = width + "px"; } if (m_List.length <= 1) { dropHeight = ((parseInt(m_List.clientHeight)-6)/2)+3; } if (dropHeight > 3 && width > 3) { m_Spacer.style.width = width - 3 + "px"; if (DynamicComboBoxIsIE7()) { m_Spacer.style.height = dropHeight + 3 + "px"; m_Clipper.style.clip = "rect(3px " + width + "px " + (dropHeight + 6) + "px 3px)"; } else if (window.ActiveXObject) // TODO: Fix { m_Spacer.style.height = dropHeight - 3 + "px"; m_Clipper.style.clip = "rect(3px " + width + "px " + dropHeight + "px 3px)"; } else { m_Spacer.style.height = dropHeight + 1 + "px"; m_Clipper.style.clip = "rect(3px " + width + "px " + (dropHeight + 4) + "px 3px)"; } m_Clipper.style.width = width + "px"; } if (m_List.length == 0) { m_Spacer.style.display = "none"; } if (hideSelects) { hideSelectTags(); } } catch (e) { DynamicComboBoxDebugWrite(m_CtrlId, "RESIZE RESULTS ERROR"); DynamicComboBoxDebugWrite(m_CtrlId, e.message); } } function sendRequest(clearlist, setFocus, reQuery) { DynamicComboBoxDebugWrite(m_CtrlId, "SendRequest"); try { if (reQuery) { hideResults(); } m_RequestInProgress = true; hideMoreResultsButton(); var xmlRequest = DynamicComboBoxNewXmlDoc(); var docTag = xmlRequest.getElementsByTagName("doc")[0]; var rowsTag = xmlRequest.createElement("rows"); rowsTag.appendChild(xmlRequest.createTextNode(m_NumRows)); docTag.appendChild(rowsTag); var assemblyTag = xmlRequest.createElement("serverMethodAssembly"); assemblyTag.appendChild(xmlRequest.createTextNode(m_ServerMethodAssembly)); docTag.appendChild(assemblyTag); var clientIDTag = xmlRequest.createElement("clientID"); clientIDTag.appendChild(xmlRequest.createTextNode(m_CtrlId)); docTag.appendChild(clientIDTag); var typeTag = xmlRequest.createElement("serverMethodType"); typeTag.appendChild(xmlRequest.createTextNode(m_ServerMethodType)); docTag.appendChild(typeTag); var methodTag = xmlRequest.createElement("serverMethod"); methodTag.appendChild(xmlRequest.createTextNode(m_ServerMethod)); docTag.appendChild(methodTag); var formatMethodTag = xmlRequest.createElement("serverDataTextFormatMethod"); formatMethodTag.appendChild(xmlRequest.createTextNode(m_ServerDataTextFormatMethod)); docTag.appendChild(formatMethodTag); var dataValueFieldTag = xmlRequest.createElement("dataValueField"); dataValueFieldTag.appendChild(xmlRequest.createTextNode(m_DataValueField)); docTag.appendChild(dataValueFieldTag); var dataTextFieldTag = xmlRequest.createElement("dataTextField"); dataTextFieldTag.appendChild(xmlRequest.createTextNode(m_DataTextField)); docTag.appendChild(dataTextFieldTag); var skipTag = xmlRequest.createElement("skip"); skipTag.appendChild(xmlRequest.createTextNode(m_SkipRecords)); docTag.appendChild(skipTag); var queryTag = xmlRequest.createElement("query"); queryTag.appendChild(xmlRequest.createTextNode(m_QueryHidden.value)); docTag.appendChild(queryTag); var queryAllTag = xmlRequest.createElement("queryAll"); queryAllTag.appendChild(xmlRequest.createTextNode(m_QueryAll.toString())); docTag.appendChild(queryAllTag); var stateTag = xmlRequest.createElement("clientState"); if (m_ClientStateFunction != "") { var state = new Object(); try { state = eval(m_ClientStateFunction); m_LastState = eval(m_ClientStateFunction); } catch (e) { var stateItemTag = xmlRequest.createElement("stateItem"); var stateKeyTag = xmlRequest.createElement("stateKey"); stateKeyTag.appendChild(xmlRequest.createTextNode("clientStateFunctionError")); var stateDataTag = xmlRequest.createElement("stateData"); stateDataTag.appendChild(xmlRequest.createTextNode(e.message)); stateItemTag.appendChild(stateKeyTag); stateItemTag.appendChild(stateDataTag); stateTag.appendChild(stateItemTag); } for (var k in state) { var stateItemTag = xmlRequest.createElement("stateItem"); var stateKeyTag = xmlRequest.createElement("stateKey"); stateKeyTag.appendChild(xmlRequest.createTextNode(k)); var stateDataTag = xmlRequest.createElement("stateData"); stateDataTag.appendChild(xmlRequest.createTextNode(state[k])); stateItemTag.appendChild(stateKeyTag); stateItemTag.appendChild(stateDataTag); stateTag.appendChild(stateItemTag); } } docTag.appendChild(stateTag); m_XmlHttp.open("POST", m_ServerPageUrl + "?COMMAND=GetData", true); m_XmlHttp.setRequestHeader("Content-Type", "text/xml"); m_XmlHttp.setRequestHeader("Accept-Language", "en/us"); if (reQuery) m_XmlHttp.onreadystatechange = loadDataStubReQuery; else if (clearlist) { if (setFocus) m_XmlHttp.onreadystatechange = loadDataStubClear; else m_XmlHttp.onreadystatechange = loadDataStubClearNoFocus; } else { m_XmlHttp.onreadystatechange = loadDataStub; } m_XmlHttp.send(xmlRequest); if (reQuery) m_ReQueryDisabled = true; } catch (e) { showError(); DynamicComboBoxDebugWrite(m_CtrlId, "SEND REQUEST ERROR"); DynamicComboBoxDebugWrite(m_CtrlId, e.message); } } function setCursorToEnd() { DynamicComboBoxSetSelectionRange(m_QueryTextBox, m_QueryTextBox.value.length, m_QueryTextBox.value.length); } function showError() { if (m_ShowError) showStatus(m_TextError); else hideResults(); } function showMoreResultsButton() { m_StatusBar.style.display = "block"; m_MoreResultsButton.style.display = "block"; } function showResults(resize) { DynamicComboBoxDebugWrite(m_CtrlId, "ShowResults"); if (m_DropDownImage) m_DropDownImage.src = m_UpImageUrl; if (m_DropDownButton) m_DropDownButton.className = m_DropDownButtonUpClass; if (m_ResultsSpan.style.display == "none") { m_ResultsSpan.style.display = "block"; if (resize) resizeResults(false); hideSelectTags(); } } function showStatus(text) { m_StatusDisplaySpan.style.display = "block"; m_StatusDisplaySpan.innerHTML = text; // + m_XmlHttp.readyState + "/4"; } function scrollToListItem(index) { var option = m_List.options[index]; option.selected = true; option.selected = false; } function stateOnChange(setFocus) { var stateChanged = false; if (m_ClientStateFunction != "") { var state = new Object(); var lastState = new Object(); try { state = eval(m_ClientStateFunction); lastState = m_LastState; } catch (e) { DynamicComboBoxDebugWrite(m_CtrlId, e.message); return (true); } try { for (var k in state) if (state[k] != lastState[k]) stateChanged = true; for (var k in lastState) if (state[k] != lastState[k]) stateChanged = true; } catch (e) { DynamicComboBoxDebugWrite(m_CtrlId, e.message); stateChanged = true; } if (!stateChanged) return (true); } else return (true); if (stateChanged) { if (hiddenSearchIsAvailable() || m_ResultsSpan.style.display == "block") { clearedSelection(7); m_NumRows = m_QueryRows; m_SkipRecords = 0; m_KeyPressNumber = 0; hideMoreResultsButton(); m_AbortLookup = false; sendRequest(true, setFocus, false); } return (false); } } function stateUnChanged() { return (stateOnChange(true)); } function updateList(clone) { var handler = m_List.handler; m_List = clone; m_List.handler = handler; } // Safari focus handling var m_ResultsShownBeforeBlur = false; function getResultsShownBeforeBlur() { return (m_ResultsShownBeforeBlur); } function initResultsShownBeforeBlur() { m_ResultsShownBeforeBlur = m_ResultsSpan.style.display == "block"; setTimeout("DynamicComboBoxResetResultsShownBeforeBlur(\"" + m_CtrlId + "\")", 500); } this.resetResultsShownBeforeBlur = function() { m_ResultsShownBeforeBlur = false; }; var m_AbortBlur = false; function abortBlur() { if (!DynamicComboBoxSelectionRangeSupported(m_QueryTextBox)) m_AbortBlur = true; } function isBlurAborted() { if (!DynamicComboBoxSelectionRangeSupported(m_QueryTextBox)) return (m_AbortBlur); return (false); } function resetAbortBlur() { if (!DynamicComboBoxSelectionRangeSupported(m_QueryTextBox)) m_AbortBlur = false; } // IE7 list click handling : // Handle IE7 select HTML control which is // taking over control and focus after a list click var m_AbortClear = false; function abortClear() { DynamicComboBoxDebugWrite(m_CtrlId, "AbortClear"); if (DynamicComboBoxIsIE6AndUp()) m_AbortClear = true; } function isAbortClear() { DynamicComboBoxDebugWrite(m_CtrlId, "IsAbortClear"); if (DynamicComboBoxIsIE6AndUp()) return (m_AbortClear); return (false); } function resetAbortClear() { DynamicComboBoxDebugWrite(m_CtrlId, "ResetAbortClear"); if (DynamicComboBoxIsIE6AndUp()) m_AbortClear = false; } m_ClearScheduled = false; function clearScheduled() { DynamicComboBoxDebugWrite(m_CtrlId, "ClearScheduled"); if (DynamicComboBoxIsIE6AndUp()) m_ClearScheduled = true; } function isClearScheduled() { DynamicComboBoxDebugWrite(m_CtrlId, "IsClearScheduled"); if (DynamicComboBoxIsIE6AndUp()) return (m_ClearScheduled); return (false); } function resetClearScheduled() { DynamicComboBoxDebugWrite(m_CtrlId, "ResetClearScheduled"); if (DynamicComboBoxIsIE6AndUp()) m_ClearScheduled = false; } var m_ListClicked = false; function listClicked() { DynamicComboBoxDebugWrite(m_CtrlId, "ListClicked"); if (DynamicComboBoxIsIE6AndUp()) m_ListClicked = true; } function isListClicked() { DynamicComboBoxDebugWrite(m_CtrlId, "IsListClicked"); if (DynamicComboBoxIsIE6AndUp()) return (m_ListClicked); return (false); } function resetListClicked() { DynamicComboBoxDebugWrite(m_CtrlId, "ResetListClicked"); if (DynamicComboBoxIsIE6AndUp()) m_ListClicked = false; } // Public methods this.changeText = function(text) { DynamicComboBoxDebugWrite(m_CtrlId, "ChangeText"); m_QueryTextBox.value = text; var newEvent = DynamicComboBoxCreateKeyEvent(999); this.onTextBoxKeyUp(newEvent); setCursorToEnd(); }; this.clearAll = function() { DynamicComboBoxDebugWrite(m_CtrlId, "ClearAll"); clear(); }; this.getQuery = function() { DynamicComboBoxDebugWrite(m_CtrlId, "GetQuery"); return (m_QueryHidden.value); }; this.getSelectedIndex = function() { DynamicComboBoxDebugWrite(m_CtrlId, "GetSelectedIndex = " + m_SelectedIndexHidden.value); return (m_SelectedIndexHidden.value); }; this.getText = function() { DynamicComboBoxDebugWrite(m_CtrlId, "GetText"); return (m_QueryTextBox.value); }; this.getValue = function() { DynamicComboBoxDebugWrite(m_CtrlId, "GetValue"); return (m_ValueHidden.value); }; this.hideLookup = function() { DynamicComboBoxDebugWrite(m_CtrlId, "HideLookup"); if (m_HideLookup && m_CloseResultsOnBlur) hideResults(); }; this.hideResultsSpan = function() { m_ResultsSpan.style.display = "none"; } this.load = function() { DynamicComboBoxDebugWrite(m_CtrlId, "Load"); resizeResults(false); if (isReQueryOnLoad()) { DynamicComboBoxDebugWrite(m_CtrlId, "Load - ReQueryOnLoad"); m_SkipRecords = 0; m_NumRows = parseInt(m_ReQueryRecordsHidden.value); m_LastQuery = m_QueryHidden.value; showResults(false); sendRequest(true, false, true); } }; this.onBlur = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnBlur"); m_HideLookup = true; m_AbortLookup = true; if (m_CloseResultsOnBlur) setTimeout("DynamicComboBoxHideLookup(\"" + m_CtrlId + "\")", 20); }; this.onDropDownButtonClick = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnDropDownButtonClick"); var resultsWereShownBeforeBlur = getResultsShownBeforeBlur(); this.resetResultsShownBeforeBlur(); m_QueryTextBox.focus(); if (!resultsWereShownBeforeBlur && hiddenSearchIsAvailable()) { showResults(true); setCursorToEnd(); } else if (resultsWereShownBeforeBlur || m_ResultsSpan.style.display == "block") { m_HideLookup = true; m_AbortLookup = true; hideResults(); if (m_DropDownButton) m_DropDownButton.blur(); } else { if (m_ClearQueryOnDropDown) { clearQuery(); clearedSelection(6); } showResults(false); m_QueryHidden.value = m_QueryTextBox.value; m_LastQuery = m_QueryHidden.value; m_NumRows = m_QueryRows; m_SkipRecords = 0; m_KeyPressNumber = 0; sendRequest(true, true, false); setCursorToEnd(); } }; this.onFocus = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnFocus"); m_HideLookup = false; m_AbortLookup = false; this.resetResultsShownBeforeBlur(); }; this.onListBlur = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnListBlur"); this.onBlur(); }; this.onListClick = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnListClick"); listClicked(); resetAbortBlur(); m_QueryTextBox.focus(); if (m_List.selectedIndex != -1) { if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(3); } if (m_CloseResultsOnClick) { m_HideLookup = true; m_AbortLookup = true; setTimeout("DynamicComboBoxHideLookup(\"" + m_CtrlId + "\")", 20); } } }; this.onListFocus = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnListFocus"); if (isClearScheduled()) abortClear(); else resetAbortClear(); this.onFocus(); abortBlur(); if (!isBlurAborted() && !DynamicComboBoxIsIE6AndUp()) m_QueryTextBox.focus(); }; this.onListMouseDown = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnListMouseDown"); abortBlur(); }; this.onMoreResultsButtonBlur = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnMoreResultsButtonBlur"); }; this.onMoreResultsButtonClick = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnMoreResultsButtonClick"); m_HideLookup = false; m_AbortLookup = false; getMoreResults(); }; this.onTextBoxBlur = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnTextBoxBlur"); if (isBlurAborted()) { DynamicComboBoxDebugWrite(m_CtrlId, "OnTextBoxBlur--BlurAborted"); resetAbortBlur(); return; } m_HideLookup = true; m_AbortLookup = true; initResultsShownBeforeBlur(); if (m_List.selectedIndex != -1) { if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(3); } } else if (m_QueryTextBox.value != "") { if (DynamicComboBoxIsIE6AndUp()) { clearScheduled(); setTimeout("DynamicComboBoxClear(\"" + m_CtrlId + "\")", 20); } else { clear(); } } if (m_CloseResultsOnBlur) setTimeout("DynamicComboBoxHideLookup(\"" + m_CtrlId + "\")", 20); }; this.onTextBoxFocus = function() { DynamicComboBoxDebugWrite(m_CtrlId, "OnTextBoxFocus"); if (isListClicked()) { resetListClicked(); return; } this.onFocus(); stateUnChanged(); }; this.onTextBoxKeyDown = function(e) { DynamicComboBoxDebugWrite(m_CtrlId, "OnTextBoxKeyDown"); var keyCode = -1; if (window.event) { keyCode = e.keyCode; } else if (e.which) { keyCode = e.which; } // Down arrow or page down // With the "&! m_RequestInProgress && m_KeyPressNumber == 0" above, // we are trying to disable scrolling through the results during latency or request if ((keyCode == 40 || keyCode == 34) &! m_RequestInProgress && m_KeyPressNumber == 0) { var moveRows = 1; if (keyCode == 34) // page down moveRows = m_DropDownRows; if (m_ResultsSpan.style.display == "block") { if (m_List.selectedIndex == -1) { m_List.selectedIndex = 0; } else { var tmpSelectedIndex = m_List.selectedIndex; if (m_List.selectedIndex + moveRows < m_List.length) { m_List.selectedIndex += moveRows; } else { // Scrolled off the bottom of the list... // More results are available, or downloading data... if (m_MoreResultsButton.style.display == "block" || m_RequestInProgress) { // Get more rows if last cursor position was last row, // but not if during request if (tmpSelectedIndex == m_List.length-1 &! m_RequestInProgress) getMoreResults(); m_List.selectedIndex = m_List.length-1; } else { if (tmpSelectedIndex == m_List.length-1) { m_QueryTextBox.value = m_QueryHidden.value; clearedSelection(5); } else { m_List.selectedIndex = m_List.length-1; } } } } if (m_List.selectedIndex != -1) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(1); } setCursorToEnd(); DynamicComboBoxStopEventPropagation(e); } else { if (hiddenSearchIsAvailable()) { // If we have already done a search, and hidden the results, redisplay them showResults(true); } else { // If not, then do a search m_QueryHidden.value = m_QueryTextBox.value; m_KeyPressNumber = m_KeyPressNumber + 1; if (m_LastQuery != m_QueryHidden.value || m_QueryHidden.value == "") { m_AbortLookup = false; this.sendRequestIfIdle(m_KeyPressNumber); } } } } // Up arrow or page up else if ((keyCode == 38 || keyCode == 33) &! m_RequestInProgress && m_KeyPressNumber == 0) { // With the "&! m_RequestInProgress && m_KeyPressNumber == 0" above, // we are trying to disable scrolling through the results during latency or request var moveRows = 1; // page up if (keyCode == 33) moveRows = m_DropDownRows; if (m_ResultsSpan.style.display == "block") { if (m_List.selectedIndex == -1) m_List.selectedIndex = m_List.length-1; else { var tmpSelectedIndex = m_List.selectedIndex; m_List.selectedIndex -= moveRows; if (m_List.selectedIndex == -1) { if (tmpSelectedIndex != 0) m_List.selectedIndex = 0; else { m_QueryTextBox.value = m_QueryHidden.value; clearedSelection(5); } } } } if (m_List.selectedIndex != -1) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(1); } setCursorToEnd(); DynamicComboBoxStopEventPropagation(e); } // Escape else if (keyCode == 27) { clear(); DynamicComboBoxStopEventPropagation(e); } // Enter else if (keyCode == 13) { if (m_List.selectedIndex != -1) { if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(2); } if (m_CloseResultsOnEnter) hideResults(); if (m_TabToNextFieldOnEnter) DynamicComboBoxInitKeyEvent(e, 9); } else if (m_List.length == 1 && m_SelectSingleItemOnEnter) { m_List.selectedIndex = 0; if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[0].text; m_ValueHidden.value = m_List[0].value; changedSelection(2); } if (m_CloseResultsOnEnter) hideResults(); if (m_TabToNextFieldOnEnter) DynamicComboBoxInitKeyEvent(e, 9); } else if (m_QueryTextBox.value != "") { DynamicComboBoxStopEventPropagation(e); } else DynamicComboBoxInitKeyEvent(e, 9); } // Tab else if (keyCode == 9) { if (m_List.selectedIndex != -1) { if (!m_RequestInProgress && m_KeyPressNumber == 0) { if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(2); } if (m_CloseResultsOnTab) hideResults(); } } else if (m_List.length == 1 && m_SelectSingleItemOnTab) { m_List.selectedIndex = 0; if (m_SelectedIndexHidden.value != m_List.selectedIndex.toString()) { m_QueryTextBox.value = m_List[0].text; m_ValueHidden.value = m_List[0].value; changedSelection(2); } if (m_CloseResultsOnTab) hideResults(); } else if (m_QueryTextBox.value != "") { DynamicComboBoxStopEventPropagation(e); } else { hideResults(); } } }; this.onTextBoxKeyUp = function(e) { DynamicComboBoxDebugWrite(m_CtrlId, "OnTextBoxKeyUp"); var ctrlPressed = (window.Event) ? e.modifiers & Event.CONTROL_MASK : e.ctrlKey; var keyCode = -1; if (window.event) { keyCode = e.keyCode; } else if (e.which) { keyCode = e.which; } // Don't run query on all ctrl keys // except Ctrl-V & Ctrl-X if ( (ctrlPressed &! (keyCode == 86 || keyCode == 88)) || keyCode == 40 || // down arrow keyCode == 38 || // up arrow keyCode == 37 || // left arrow keyCode == 39 || // right arrow keyCode == 34 || // page down keyCode == 33 || // page up keyCode == 27 || // esc keyCode == 16 || // shift keyCode == 17 || // control keyCode == 35 || // end keyCode == 36 || // home keyCode == 36 || // insert keyCode == 20 || // capslock? keyCode == 18 || // alt keyCode == 145 || // scroll lock? keyCode == 19 || // pause? keyCode == 144 || // num lock? keyCode == 13 || // enter keyCode == 116 ) // F5 { // Don't run query - navigating return; } else if (keyCode == 9) // tab { return; } // Backspace else if (m_SelectItemOnPartialMatch && keyCode == 8) { // The original backspace only removed the selected text if (m_QueryTextBox.value.toUpperCase() == m_LastPartialMatchQuery.toUpperCase()) m_QueryTextBox.value = m_QueryTextBox.value.substr(0, m_QueryTextBox.value.length-1); if (m_QueryAll) { partialMatch(m_QueryTextBox.value); return; } } if (m_QueryAll && m_SearchAvailable) { showResults(true); if (m_SelectItemOnPartialMatch) { var query = m_QueryTextBox.value; var sel = DynamicComboBoxGetSelection(m_QueryTextBox); if (sel != null && sel.length != 0) { var pos = query.lastIndexOf(sel); if (pos > 0) m_QueryTextBox.value = query.slice(0, pos); } partialMatch(m_QueryTextBox.value); } else { match(m_QueryTextBox.value); } } else { // Run query m_QueryHidden.value = m_QueryTextBox.value; clearedSelection(4); if (m_LastQuery != m_QueryHidden.value) { m_KeyPressNumber = m_KeyPressNumber + 1; m_SearchAvailable = false; if (m_Latency != -1) { m_AbortLookup = false; setTimeout("DynamicComboBoxSendRequestIfIdle('" + m_CtrlId + "'," + m_KeyPressNumber + ")", m_Latency); } } else { showResults(false); } } }; this.reQuery = function() { DynamicComboBoxDebugWrite(m_CtrlId, "ReQuery"); if (m_QueryTextBox.value == "") { DynamicComboBoxDebugWrite(m_CtrlId, "ReQuery - Empty"); return; } m_SkipRecords = 0; m_NumRows = parseInt(m_ReQueryRecordsHidden.value); m_LastQuery = m_QueryHidden.value; showResults(false); sendRequest(true, false, true); }; this.selectAll = function() { DynamicComboBoxDebugWrite(m_CtrlId, "SelectAll"); DynamicComboBoxSetSelectionRange(m_QueryTextBox, 0, m_QueryTextBox.value.length); }; this.selectByPartialText = function(text) { DynamicComboBoxDebugWrite(m_CtrlId, "SelectByPartialText"); return (partialMatch(text)); }; this.selectByText = function(text) { DynamicComboBoxDebugWrite(m_CtrlId, "SelectByText"); return (match(text)); }; this.selectByValue = function(value) { DynamicComboBoxDebugWrite(m_CtrlId, "SelectByValue"); for (var i = 0; i < m_List.options.length; i++) { if (m_List.options[i].value == value) { m_List.selectedIndex = i; m_QueryTextBox.value = m_List[m_List.selectedIndex].text; m_ValueHidden.value = m_List[m_List.selectedIndex].value; changedSelection(10); return (true); } } return (false); }; this.sendRequestIfIdle = function(keyPressNumber) { DynamicComboBoxDebugWrite(m_CtrlId, "SendRequestIfIdle"); if (m_KeyPressNumber == keyPressNumber &! m_AbortLookup) { showResults(false); m_LastQuery = m_QueryHidden.value; m_NumRows = m_QueryRows; m_SkipRecords = 0; m_KeyPressNumber = 0; sendRequest(true, true, false); } if (m_AbortLookup) { m_KeyPressNumber = 0; } }; this.setCaretToEnd = function() { DynamicComboBoxDebugWrite(m_CtrlId, "SetCaretToEnd"); setCursorToEnd(); }; this.stateChanged = function() { DynamicComboBoxDebugWrite(m_CtrlId, "StateChanged"); return (stateOnChange(false)); }; } /////////////////////////////////////////////////////////////////////////////// // Callback Internal Functions /////////////////////////////////////////////////////////////////////////////// function DynamicComboBoxSendRequestIfIdle(ctrlId, keyPressNumber) { eval(ctrlId + ".sendRequestIfIdle(" + keyPressNumber + ")"); } function DynamicComboBoxHideLookup(ctrlId) { eval(ctrlId + ".hideLookup()"); } function DynamicComboBoxHideResultsSpan(ctrlId) { eval(ctrlId + ".hideResultsSpan()"); } function DynamicComboBoxLoad(ctrlId) { eval(ctrlId + ".load()"); } function DynamicComboBoxResetResultsShownBeforeBlur(ctrlId) { eval(ctrlId + ".resetResultsShownBeforeBlur()"); } /////////////////////////////////////////////////////////////////////////////// // Internal Browser-Specific Functions /////////////////////////////////////////////////////////////////////////////// function DynamicComboBoxStripNonNumbers(txt) { var txtout = ""; for(var i = 0; i < txt.length; i++) { var t = txt.charAt(i); if (t=="0" || t=="1" || t=="2" || t=="3" || t=="4" || t=="5" || t=="6" || t=="7" || t=="8" || t=="9" || t=="." || t=="-") txtout += t; } if (txtout == "") return ("0"); else return (txtout); } function DynamicComboBoxGetDim(el) { var i = 0; for (var lx = 0, ly = 0; el != null ; i++) { var borderLeftWidth = 0; var borderTopWidth = 0; if (el.tagName != "TABLE" && el.tagName != "BODY" && i > 0) { borderLeftWidth = parseInt(el.clientLeft); borderTopWidth = parseInt(el.clientTop); } var elStyle = DynamicComboBoxGetComputedStyle(el); if (elStyle.position == "absolute" || elStyle.position == "relative") break; if ((elStyle.overflow == "scroll" || elStyle.overflowX == "scroll" || elStyle.overflowY == "scroll" || elStyle.overflow == "auto" || elStyle.overflowX == "auto" || elStyle.overflowY == "auto") && (elStyle.height != "auto" || elStyle.width != "auto")) break; if (el.tagName == "MultiPage") break; lx += el.offsetLeft + borderLeftWidth; ly += el.offsetTop + borderTopWidth; el = el.offsetParent; } return ({x:lx,y:ly}); } function DynamicComboBoxGetDimPage(el) { var i = 0; for (var lx = 0, ly = 0; el != null; i++) { var borderLeftWidth = 0; var borderTopWidth = 0; if (el.tagName != "TABLE" && el.tagName != "BODY" && i > 0) { borderLeftWidth = parseInt(el.clientLeft); borderTopWidth = parseInt(el.clientTop); } lx += el.offsetLeft + borderLeftWidth; ly += el.offsetTop + borderTopWidth; el = el.offsetParent; } return ({x:lx,y:ly}); } function DynamicComboBoxGetComputedStyle(el) { // TODO : Safari... if (el.currentStyle) return (el.currentStyle); else if (document.defaultView.getComputedStyle) return (document.defaultView.getComputedStyle(el, null)); else if (window.getComputedStyle) return (window.getComputedStyle(el, null)); else return (null); } function DynamicComboBoxInitKeyEvent(e, keyCode) { if (typeof(event) != "undefined") { event.keyCode = keyCode; return (event); } else { e.keyCode = keyCode; return (e); } return (null); } function DynamicComboBoxCreateKeyEvent(keyCode) { if (event) { event.keyCode = keyCode; return (event); } else if (document.createEvent); { var newEvent = document.createEvent("KeyEvents"); newEvent.which = keyCode; return (newEvent); } return (null); } function DynamicComboBoxStopEventPropagation(e) { if (typeof(event) != "undefined") { event.returnValue = false; event.cancelBubble = true; } else if (e.preventDefault) { e.returnValue = false; e.cancelBubble = true; e.preventDefault(); e.stopPropagation(); } } function DynamicComboBoxSelectionRangeSupported(textBox) { return (textBox.createTextRange || textBox.setSelectionRange) } function DynamicComboBoxSetSelectionRange(textBox, startPosition, endPosition) { if (textBox.setSelectionRange) { textBox.setSelectionRange(startPosition, endPosition); return (true); } else if (textBox.createTextRange) { var range = textBox.createTextRange(); range.moveStart('character', startPosition); range.select(); return (true); } return (false); } function DynamicComboBoxNewXmlHttpRequest() { if (window.ActiveXObject) return (new ActiveXObject("Microsoft.XMLHTTP")); else if (window.XMLHttpRequest) return (new XMLHttpRequest()); else return (null); } function DynamicComboBoxNewXmlDoc() { if (document.implementation && document.implementation.createDocument) { var xmlDoc = document.implementation.createDocument("", "doc", null); var docTag = xmlDoc.getElementsByTagName("doc")[0]; if (docTag == null) xmlDoc.appendChild(xmlDoc.createElement("doc")); return (xmlDoc); } else if (window.ActiveXObject) { var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.appendChild(xmlDoc.createElement("doc")); return (xmlDoc); } else { return (null); } } function DynamicComboBoxNewXmlDocFromHttpRequest(httpRequest) { if (typeof(httpRequest.responseXML) != 'undefined') return (httpRequest.responseXML); else return (DynamicComboBoxNewXmlDocFromString(httpRequest.responseText)); } function DynamicComboBoxNewXmlDocFromString(xmlString) { if (typeof(DOMParser) != 'undefined') { var domParser = new DOMParser(); var xmlDoc = domParser.parseFromString(xmlString, "text/xml"); return (xmlDoc); } else if (window.ActiveXObject) { var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.loadXML(xmlString); return (xmlDoc); } else { return (null); } } function DynamicComboBoxGetSelection(textBox) { var txt = ''; if (textBox.selectionStart) txt = textBox.value.slice(textBox.selectionStart, textBox.selectionEnd); else if (window.getSelection) txt = window.getSelection(); else if (document.selection) txt = document.selection.createRange().text; else if (document.getSelection) txt = document.getSelection(); return (txt); } function DynamicComboBoxIsIE6AndUp() { return (navigator.userAgent.indexOf("MSIE 7.0") != -1 || navigator.userAgent.indexOf("MSIE 6.0") != -1); } function DynamicComboBoxIsIE7() { return (navigator.userAgent.indexOf("MSIE 7.0") != -1); } /////////////////////////////////////////////////////////////////////////////// // Internal Debug Mode Global Variables /////////////////////////////////////////////////////////////////////////////// var DynamicComboBoxInternalDebug = false; var InternalDebugWindow = "undefined"; /////////////////////////////////////////////////////////////////////////////// // Private Internal Debug Mode Helper Functions /////////////////////////////////////////////////////////////////////////////// function DynamicComboBoxDebugWrite(ctrlId, str) { if (!DynamicComboBoxInternalDebug) return; if (InternalDebugWindow == "undefined") { InternalDebugWindow = window.open("","InternalDebugWindow","height=650, width=500, location=0, menubar=0, status=0, toolbar=0, resizable=1, scrollbars=1, left=475, top=0"); InternalDebugWindow.document.write("
Internal Debug Mode

DynamicComboBoxInternalDebug is set to true.

Below are displayed the information about the events of the DynamicComboBox controls.

Note: This window must stay open when Internal Debug Mode is on.
"); } InternalDebugWindow.document.write("
" + "[" + ctrlId + "] - " + str); }