function WebForm_FindFirstFocusableChild(control) { if (!control || !(control.tagName)) { return null; } var tagName = control.tagName.toLowerCase(); if (tagName == "undefined") { return null; } var children = control.childNodes; if (children) { for (var i = 0; i < children.length; i++) { try { if (WebForm_CanFocus(children[i])) { return children[i]; } else { var focused = WebForm_FindFirstFocusableChild(children[i]); if (WebForm_CanFocus(focused)) { return focused; } } } catch (e) { } } } return null; } function WebForm_AutoFocus(focusId) { var targetControl; if (__nonMSDOMBrowser) { targetControl = document.getElementById(focusId); } else { targetControl = document.all[focusId]; } var focused = targetControl; if (targetControl && (!WebForm_CanFocus(targetControl)) ) { focused = WebForm_FindFirstFocusableChild(targetControl); } if (focused) { try { focused.focus(); if (__nonMSDOMBrowser) { focused.scrollIntoView(false); } if (window.__smartNav) { window.__smartNav.ae = focused.id; } } catch (e) { } } } function WebForm_CanFocus(element) { if (!element || !(element.tagName)) return false; var tagName = element.tagName.toLowerCase(); return (!(element.disabled) && (!(element.type) || element.type.toLowerCase() != "hidden") && WebForm_IsFocusableTag(tagName) && WebForm_IsInVisibleContainer(element) ); } function WebForm_IsFocusableTag(tagName) { return (tagName == "input" || tagName == "textarea" || tagName == "select" || tagName == "button" || tagName == "a"); } function WebForm_IsInVisibleContainer(ctrl) { var current = ctrl; while((typeof(current) != "undefined") && (current != null)) { if (current.disabled || ( typeof(current.style) != "undefined" && ( ( typeof(current.style.display) != "undefined" && current.style.display == "none") || ( typeof(current.style.visibility) != "undefined" && current.style.visibility == "hidden") ) ) ) { return false; } if (typeof(current.parentNode) != "undefined" && current.parentNode != null && current.parentNode != current && current.parentNode.tagName.toLowerCase() != "body") { current = current.parentNode; } else { return true; } } return true; }