///////////////////////////////////////////////////////////////////////////////
// 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);
}