//////////////////////////////////////////////////////////////////////////////// // Constants //////////////////////////////////////////////////////////////////////////////// var __CFFORM_WARNING_DOCUMENT_FORMS = "document.forms is not supported"; //////////////////////////////////////////////////////////////////////////////// // Static variables //////////////////////////////////////////////////////////////////////////////// var __cfFormSubmitHandlerSet = new CFEventHandlerExpandedSet(); //////////////////////////////////////////////////////////////////////////////// // Event handlers //////////////////////////////////////////////////////////////////////////////// function __cfFormHandleLoadEvent() { var forms = document.forms; if (typeof(forms) == "undefined") { return cfWarningTrigger("__cfFormHandleLoadEvent: " + __CFFORM_WARNING_DOCUMENT_FORMS); } for (var i = 0; i < forms.length; i++) { var form = forms[i]; if (! form.onsubmit) { form.onsubmit = __cfFormHandleSubmitEvent; } cfFormEnableSubmitButtons(form); } } function __cfFormHandleSubmitEvent() { cfFormDisableSubmitButtons(this); var results = __cfFormSubmitHandlerSet.execute(this.id || this.name); for (var i = 0; i < results.length; i++) { var result = results[i]; if (! result) { cfFormEnableSubmitButtons(this); return false; } } return true; } //////////////////////////////////////////////////////////////////////////////// // Public API //////////////////////////////////////////////////////////////////////////////// function cfFormAddSubmitCallback(id) { __cfFormSubmitHandlerSet.add.apply(__cfFormSubmitHandlerSet, arguments); } function cfFormDeselectAllCheckboxes(form, name) { var elements = form.elements[name]; for (var i = 0; i < elements.length; i++) { elements[i].checked = false; } } function cfFormDisableSubmitButtons(form) { var buttons = cfFormGetSubmitButtons(form); for (var i = 0; i < buttons.length; i++) { buttons[i].disabled = true; } } function cfFormEnableSubmitButtons(form) { var buttons = cfFormGetSubmitButtons(form); for (var i = 0; i < buttons.length; i++) { buttons[i].disabled = false; } } function cfFormGetParameters(form) { var data = {}; var elements = form.elements; for (var i = 0; i < elements.length; i++) { var element = elements[i]; var name = element.name; if (! name) { continue; } var values = data[name]; if (typeof(values) == "undefined") { values = new Array(); data[name] = values; } var valueData; switch (element.tagName) { case "input": switch (element.type) { case "checkbox": case "radio": if (element.checked) { valueData = [element.value || '1']; } else { valueData = []; } break; default: valueData = [element.value || '']; } break; case "select": var options = element.options; var valueData = []; if (element.multiple) { for (var i = 0; i < options.length; i++) { var option = options[i]; if (option.selected) { valueData.push(option.value || option.text || ''); } } } else { var index = element.selectedIndex; if (index != -1) { var option = options[index]; valueData.push(option.value || option.text || ''); } } break; default: valueData = [element.value || '']; } values.extend(valueData); } return data; } function cfFormGetSubmitButtons(form) { var buttons = new Array(); var elements = form.elements; for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (element.type == "submit") { buttons.push(element); } } return buttons; } function cfFormSelectAllCheckboxes(form, name) { var elements = form.elements[name]; for (var i = 0; i < elements.length; i++) { elements[i].checked = true; } } //////////////////////////////////////////////////////////////////////////////// // Initialization //////////////////////////////////////////////////////////////////////////////// cfDocumentAddOnLoadCallback(__cfFormHandleLoadEvent);