//Javascript UniVAL Module /* * ADOBE SYSTEMS INCORPORATED * Copyright 2007 Adobe Systems Incorporated * All Rights Reserved * * NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the * terms of the Adobe license agreement accompanying it. If you have received this file from a * source other than Adobe, then your use, modification, or distribution of it requires the prior * written permission of Adobe. */ if (typeof KT_FVO == 'undefined') { KT_FVO = {}; KT_FVO_properties = { noTriggers: 0, noTransactions: 0 } } //configuration variables $UNI_GLOBALVARNAME = 'KT_FVO'; $UNI_GLOBALVARNAME_MESSAGES = 'UNI_Messages'; $UNI_ATTRNAME_ERRORMESSAGE = 'errormessage'; $UNI_DEFAULTERRORMESSAGE = 'The field \'%s\' has an invalid value !'; $UNI_FORM_SUBMIT_PRIORITY = 10; $UNI_CLASSNAME_ERROR_LABEL = 'form_validation_field_error_label'; $UNI_CLASSNAME_ERROR_CONTAINER = 'form_validation_field_error_container'; $UNI_CLASSNAME_ERROR_ELEMENT = 'form_validation_field_error_text'; $UNI_CLASSNAME_ERROR_ERROR_ELEMENT = 'form_validation_field_error_error_message'; $UNI_CLASSNAME_ERROR_SS = 'KT_field_error'; $UNI_CLASSNAME_ERROR_FORM = 'form_validation_form_error'; $UNI_DELETE_BUTTON_NAME = /delete/i; $UNI_INSERT_BUTTON_NAME = /insert/i; $UNI_UPDATE_BUTTON_NAME = /update/i; $UNI_CANCEL_BUTTON_NAME = /cancel/i; $UNI_LOGIN_BUTTON_NAME = /login/i; /* Recognized date time masks: Date m/d/yy d/m/yy d.m.yy mm/dd/yyyy dd/mm/yyyy dd.mm.yyyy yyyy-mm-dd Time h:ii:ss t HH:ii:ss H:ii:ss hh:ii:ss tt */ function UNI_isktml(el) { var is_ktml = false; if (typeof el.name != 'undefined') { if (typeof ktmls != 'undefined' && ktmls != null && ktmls.length) { var is_ktml = false; Array_each(ktmls, function(ktml) { if (ktml.name == el.name) { is_ktml = ktml; } }); } } return is_ktml; } function UNI_date2regexp(txt) { return utility.date.date2regexp(txt); } function UNI_mask2regexp(txt) { txt = txt.replace(/([-\/\[\]()\*\+])/g, '\\$1'); txt = txt.replace(/9/g, '\\d'); txt = txt.replace(/\?/g, '.'); txt = txt.replace(/X/g, '\\w'); txt = txt.replace(/A/g, '[A-Za-z]'); var re = new RegExp('^' + txt + '$'); return re; } function UNI_regexp2regexp(txt) { var sep = txt.substring(0, 1); var pos = txt.lastIndexOf(sep); var reg = txt.substring(1, pos); var mods = ''; if (pos+1 <= txt.length-1) { var mods = txt.substring(pos+1, txt.length); } var re = new RegExp(reg, mods); return re; } function UNI_init_error_elements(el) { var ret = {}; var el_name = el.name; var allLabels = document.getElementsByTagName("LABEL"); for(var i=0; i < allLabels.length; i++) { if (allLabels[i].htmlFor == el.id) { ret['label'] = allLabels[i]; break; } } var is_widget = el.getAttribute("wdg:type")!=null; if (is_widget) { var zel = el; while(zel) { if(typeof(zel.className) != "undefined" && zel.className.indexOf("widget_container")>=0) { break; } zel = zel.parentNode; } if (zel) { el = zel; } } ret['container'] = el.parentNode; while(ret['container'].nodeType != 1) { ret['container'] = ret['container'].parentNode; } var dv = document.getElementById(el_name + '_error_element'); if (dv != null) { ret['error_element'] = dv; } else { ret['error_element'] = utility.dom.createElement("DIV", { 'id': el_name + '_error_element' }); var server_side = utility.dom.getElementsByClassName(el.parentNode, $UNI_CLASSNAME_ERROR_SS); if (server_side.length > 0) { el.parentNode.removeChild(server_side[0]); } var spn = utility.dom.getElementsByClassName(el.parentNode, 'KT_field_hint')[0]; if (typeof spn == 'undefined') { spn = el; if (el.type) { if (el.type.toString().toLowerCase() == 'radio') { try { spn = el.parentNode; } catch(e) { spn = el; } } } } //find the last element in the container element to insert the error_element after (it should be the last) while (spn.nextSibling) { spn = spn.nextSibling; } ret['error_element'] = utility.dom.insertAfter(ret['error_element'], spn); } return ret; } function UNI_fieldok_action(el, props) { var errorElements = UNI_init_error_elements(el); try { utility.dom.classNameRemove(errorElements['label'], $UNI_CLASSNAME_ERROR_LABEL); utility.dom.classNameRemove(errorElements['container'], $UNI_CLASSNAME_ERROR_CONTAINER); utility.dom.classNameRemove(el, $UNI_CLASSNAME_ERROR_ELEMENT); errorElements['error_element'].parentNode.removeChild(errorElements['error_element']); } catch(e) { } errorElements = undefined; } function UNI_required_action(el, props) { var errorElements = UNI_init_error_elements(el); if (errorElements.label) utility.dom.classNameAdd(errorElements.label, $UNI_CLASSNAME_ERROR_LABEL); if (errorElements.container) utility.dom.classNameAdd(errorElements.container, $UNI_CLASSNAME_ERROR_CONTAINER); if (el) utility.dom.classNameAdd(el, $UNI_CLASSNAME_ERROR_ELEMENT); var errorMessage = props['errorMessage']; if (errorMessage == '') { //TODO : the required message has ONE %s : the element name errorMessage = utility.string.sprintf(window[$UNI_GLOBALVARNAME_MESSAGES]["required"], el.name); } try { errorElements['error_element'].innerText = errorMessage; errorElements['error_element'].innerHTML = errorMessage; } catch(e) { } if (errorElements.error_element) utility.dom.classNameAdd(errorElements.error_element, $UNI_CLASSNAME_ERROR_ERROR_ELEMENT); } function UNI_format_action(el, props) { var errorElements = UNI_init_error_elements(el); if (errorElements.label) utility.dom.classNameAdd(errorElements.label, $UNI_CLASSNAME_ERROR_LABEL); if (errorElements.container) utility.dom.classNameAdd(errorElements.container, $UNI_CLASSNAME_ERROR_CONTAINER); if (el) utility.dom.classNameAdd(el, $UNI_CLASSNAME_ERROR_ELEMENT); var errorMessage = props['errorMessage']; if (errorMessage == '') { //TODO : the format message has ONE %s : the format name //TODO : we only get the interned format name, but we should have the screen format name var mesg1 = window[$UNI_GLOBALVARNAME_MESSAGES][props['type'] + '_' + props['format'] ]; var mesg2 = window[$UNI_GLOBALVARNAME_MESSAGES][props['type'] + '_']; if (typeof mesg1 != 'undefined') { errorMessage = utility.string.sprintf(window[$UNI_GLOBALVARNAME_MESSAGES]['format'], mesg1); } else if (typeof mesg2 != 'undefined') { errorMessage = utility.string.sprintf(window[$UNI_GLOBALVARNAME_MESSAGES]['format'], mesg2);; } else { errorMessage = utility.string.sprintf(window[$UNI_GLOBALVARNAME_MESSAGES]['format'], props['format']); } } try { errorElements['error_element'].innerText = errorMessage; errorElements['error_element'].innerHTML = errorMessage; } catch(e) { } if (errorElements.error_element) utility.dom.classNameAdd(errorElements.error_element, $UNI_CLASSNAME_ERROR_ERROR_ELEMENT); } function UNI_boundary_action(el, props, test_min, test_max) { sprintf = utility.string.sprintf; var errorElements = UNI_init_error_elements(el); if (errorElements.label) utility.dom.classNameAdd(errorElements.label, $UNI_CLASSNAME_ERROR_LABEL); if (errorElements.container) utility.dom.classNameAdd(errorElements.container, $UNI_CLASSNAME_ERROR_CONTAINER); if (el) utility.dom.classNameAdd(el, $UNI_CLASSNAME_ERROR_ELEMENT); var prefix = (props['type'] == 'text') ? 'text' : 'other'; var errorMessage = props['errorMessage']; if (errorMessage == '') { //TODO : we only get the interned format name, but we should have the screen format name if (test_min != null && test_max != null) { errorMessage = sprintf(window[$UNI_GLOBALVARNAME_MESSAGES][prefix + '_between'], props['min'], props['max']); } else { if (test_min != null) { errorMessage = sprintf(window[$UNI_GLOBALVARNAME_MESSAGES][prefix + '_min'], props['min']); } else { errorMessage = sprintf(window[$UNI_GLOBALVARNAME_MESSAGES][prefix + '_max'], props['max']); } } } try { errorElements['error_element'].innerText = errorMessage; errorElements['error_element'].innerHTML = errorMessage; } catch(e) { } if (errorElements.error_element) utility.dom.classNameAdd(errorElements.error_element, $UNI_CLASSNAME_ERROR_ERROR_ELEMENT); } function UNI_validateRegExp(el, props) { var toret = true; var re = UNI_regexp2regexp(props['additional_params']); if (!re.exec(el.value)) { toret = false; } return toret; } function UNI_validateMask(el, props) { var toret = true; var re = UNI_mask2regexp(props['additional_params']); if (!re.exec(el.value)) { toret = false; } return toret; } function UNI_parse_date(arr, dateMask) { return utility.date.parse_date(arr, dateMask); } function UNI_dateBuilder(year, month, day, hour, minutes, seconds) { var month_length = [31,28,31,30,31,30,31,31,30,31,30,31]; if (! (parseInt(year) > 0)) { return false; } if (! (parseInt(month) > 0 && parseInt(month) <= 12)) { return false; } if (( (parseInt(year) % 4 == 0) && (parseInt(year) % 100 != 0) ) || (parseInt(year) % 400 == 0) ) { month_length[1] = 29; } if (! (parseInt(day) > 0 && parseInt(day) <= month_length[parseInt(month)-1])) { return false; } month_length[1] = 28; if (! (parseInt(hour) >= 0 && parseInt(hour) <= 23)) { return false; } if (! (parseInt(minutes) >= 0 && parseInt(minutes) <= 59)) { return false; } if (! (parseInt(seconds) >= 0 && parseInt(seconds) <= 59)) { return false; } year = utility.math.zeroPad(year, 4); month = utility.math.zeroPad(month, 2); day = utility.math.zeroPad(day, 2); hour = utility.math.zeroPad(hour, 2); minutes = utility.math.zeroPad(minutes, 2); seconds = utility.math.zeroPad(seconds, 2); return year + month + day + hour + minutes + seconds; } function UNI_validateDate(el, props) { var toret = true; var dateMask = props['additional_params']; var re = utility.date.date2regexp(dateMask); var arr = re.exec(el.value); if (!arr) { toret = false; } else { var o = utility.date.parse_date(arr, dateMask); var newDate = UNI_dateBuilder(o['year'], o['month'], o['day'], o['hour'], o['minutes'], o['seconds']); if (newDate == false) { toret = false; } } return toret; } function UNI_validate_format_text_color_generic(el, props) { var toret = false; var validColors = [ "black", "green", "silver", "lime", "gray", "olive", "white", "yellow", "maroon", "navy", "red", "blue", "purple", "teal", "fuchsia", "aqua" ]; var userColor = el.value.toString().toLowerCase(); Array_each(validColors, function(color, i) { if(userColor == color) { toret = true; } }); if(toret == false) { UNI_format_action(el, props); } return toret; } function UNI_validate_required(el, props) { var toret = true; if (el.type.toString().toLowerCase() == 'radio') { var arr = []; Array_each(el.form.elements, function(el2, i2) { if (el2.name == el.name) { Array_push(arr, el2); } }); toret = false; Array_each(arr, function(el, i) { if (el.checked) { toret = true; } }); if (!toret) { UNI_required_action(el, props); } } else if ( el.value == '' || el.value.match(/^]*>$/gi) || el.value.match(/^]*>( |)<\/p>$/gi) || el.value.match(/^]*>( |)<\/div>$/gi) || el.value.match(/^]*>( |)<\/span>$/gi) || (el.type.toLowerCase() == 'checkbox' && el.checked == false) ) { UNI_required_action(el, props); toret = false; } return toret; } function UNI_validate_generic(el, props) { var toret = true; if (el.value != '') { if (props['additional_params'] != '') { var is_a_regexp =/^([^0-9A-Za-z]).*\1[gism]*$/; if (props['additional_params'].match(is_a_regexp)) { var validator = UNI_validateRegExp; } else { var validator = UNI_validateMask; } if (!validator(el, props)) { UNI_format_action(el, props); toret = false; } } } return toret; } function UNI_validate_format_regexp(el, props) { var toret = true; if (el.value != '') { if (!UNI_validateRegExp(el, props)) { UNI_format_action(el, props); toret = false; } } return toret; } function UNI_validate_format_mask(el, props) { var toret = true; if (el.value != '') { if (!UNI_validateMask(el, props)) { UNI_format_action(el, props); toret = false; } } return toret; } function UNI_validate_format_date(el, props) { var toret = true; if (el.value != '') { if (!UNI_validateDate(el, props)) { UNI_format_action(el, props); toret = false; } } return toret; } function UNI_validate_format_text_ip(el, props) { var toret = true; if (el.value != '') { if (!UNI_validateRegExp(el, props)) { UNI_format_action(el, props); toret = false; } else { Array_each(el.value.toString().split('.'), function(match) { if (parseInt(match) > 255) { UNI_format_action(el, props); toret = false; return; } }); } } return toret; } function UNI_validate_minmax(el, props) { var toret = true, test_max = true, test_min = true; if (el.value != '') { if (props['min'] != '') { test_min = el.value >= props['min']; toret = toret && test_min; } if (props['max'] != '') { test_max = el.value <= props['max']; toret = toret && test_max; } if (! (test_max && test_min)) { UNI_boundary_action(el, props, test_min, test_max); } } return toret; } function UNI_validate_minmax_text(el, props) { var toret = true, test_max = null, test_min = null; if (props['min'] != '') { var test_min = (el.value.length >= parseInt(props['min'])); toret = toret && test_min; } if (props['max'] != '') { var test_max = (el.value.length <= parseInt(props['max'])); toret = toret && test_max; } if (! (test_max && test_min)) { UNI_boundary_action(el, props, test_min, test_max); } return toret; } function UNI_validate_minmax_numeric(el, props) { var toret = true, test_max = null, test_min = null; if (props['min'] != '') { var test_min = (parseFloat(el.value) >= parseFloat(props['min'])); toret = toret && test_min; } if (props['max'] != '') { var test_max = (parseFloat(el.value) <= parseFloat(props['max'])); toret = toret && test_max; } if (! (test_max && test_min)) { UNI_boundary_action(el, props, test_min, test_max); } return toret; } function UNI_validate_minmax_double(el, props) { var toret = true, test_max = null, test_min = null; if (props['min'] != '') { var test_min = (parseFloat(el.value) >= parseFloat(props['min'])); toret = toret && test_min; } if (props['max'] != '') { var test_max = (parseFloat(el.value) <= parseFloat(props['max'])); toret = toret && test_max; } if (! (test_max && test_min)) { UNI_boundary_action(el, props, test_min, test_max); } return toret; } function UNI_validate_minmax_date(el, props) { var toret = true, test_max = null, test_min = null; var dateMask = props['additional_params']; var re = utility.date.date2regexp(dateMask); var arr = re.exec(el.value); var date1 = utility.date.parse_date(arr, dateMask); date1 = UNI_dateBuilder(date1['year'], date1['month'], date1['day'], date1['hour'], date1['minutes'], date1['seconds']); if (props['min'] != '') { var arr = re.exec(props['min']); var date_min = utility.date.parse_date(arr, dateMask); var date_min = UNI_dateBuilder(date_min['year'], date_min['month'], date_min['day'], date_min['hour'], date_min['minutes'], date_min['seconds']); var test_min = (parseInt(date1) >= parseInt(date_min)); toret = toret && test_min; } if (props['max'] != '') { var arr = re.exec(props['max']); var date_max = utility.date.parse_date(arr, dateMask); var date_max = UNI_dateBuilder(date_max['year'], date_max['month'], date_max['day'], date_max['hour'], date_max['minutes'], date_max['seconds']); var test_max = (parseInt(date1) <= parseInt(date_max)); toret = toret && test_max; } if (! (test_max && test_min)) { UNI_boundary_action(el, props, test_min, test_max); } return toret; } //Attaches itself to the form submit buttons and sets checking = on/off, depending on the button name //TODO : redo insert / update / delete logic ??? function UNI_buttonHandler(e) { var o = utility.dom.setEventVars(e); if (o.targ.name.match($UNI_DELETE_BUTTON_NAME) ||o.targ.name.match($UNI_INSERT_BUTTON_NAME) ||o.targ.name.match($UNI_UPDATE_BUTTON_NAME) ||o.targ.name.match($UNI_LOGIN_BUTTON_NAME) ||(typeof o.targ.tagName != 'undefined' && o.targ.type.toLowerCase() == 'submit')) { o.targ.form.removeAttribute('haschanged'); } if (o.targ.name.match($UNI_DELETE_BUTTON_NAME) || o.targ.name.match($UNI_CANCEL_BUTTON_NAME)) { o.targ.form.setAttribute('donotcheck', '1'); window.UNI_buttonpressed = o.targ.name; } else if((o.targ.name.match($UNI_INSERT_BUTTON_NAME) || o.targ.name.match($UNI_UPDATE_BUTTON_NAME))) { o.targ.form.setAttribute('donotcheck', '0'); window.UNI_buttonpressed = o.targ.name; } else { o.targ.form.setAttribute('donotcheck', '0'); window.UNI_buttonpressed = o.targ.name; } } function UNI_navigateCancel(event, str) { var o = utility.dom.setEventVars(event); if (o.targ.form.getAttribute('haschanged') != null) { if (confirm(utility.string.getInnerText(UNI_Messages['form_was_modified']))) { o.targ.form.removeAttribute('haschanged'); var loc = str; try { if (loc.indexOf("/") == 0) { //use the absolute path } else if (!loc.match(/\w+:\/\//)) { loc = document.getElementsByTagName('base')[0].href.toString() + loc; } } catch(e) { loc = str }; if (typeof $ctrl != 'undefined') { $ctrl.loadPanels(loc); } else { window.location.href = loc; } return true; } else { utility.dom.stopEvent(o.e); return false; } } else { var loc = str; try { if (loc.indexOf("/") == 0) { //use the absolute path } else if (!loc.match(/\w+:\/\//)) { loc = document.getElementsByTagName('base')[0].href.toString() + loc; } } catch(e) { loc = str }; if (typeof $ctrl != 'undefined') { $ctrl.loadPanels(loc); } else { window.location.href = loc; } return true; } } var UNI_navigateAway_locked = false; function UNI_navigateAway(e) { if (UNI_navigateAway_locked) { UNI_navigateAway_locked = false; } else { var frms = document.forms; var toret = false; for ( var i = 0; i < frms.length; i++) { var frm = frms[i]; if (frm.getAttribute('haschanged') != null) { toret = true; } } if (toret == true) { return utility.string.getInnerText(UNI_Messages['form_was_modified']); } } } //attach events to form submittal buttons //TODO : redo insert / update / delete logic ??? function UNI_attachToButtons() { if (is.ie && is.mac) { return; } var frms = document.getElementsByTagName('form'); for (var i = 0; i < frms.length; i++) { var frm = frms[i]; for (var j = 0; frm.elements.length; j++) { var el = frm.elements[j]; if (el != null) { if (el.name) { var attached = false; //var str = 'on' + (is.safari?'mousedown':'focus'); //alert(str); if (el.name.toString().match($UNI_DELETE_BUTTON_NAME) || el.name.toString().match($UNI_CANCEL_BUTTON_NAME) ) { attached = true; el['on' + (is.safari?'mousedown':'focus')] = UNI_buttonHandler; } if (el.name.toString().match($UNI_INSERT_BUTTON_NAME) || el.name.toString().match($UNI_UPDATE_BUTTON_NAME) ) { attached = true; el['on' + (is.safari?'mousedown':'focus')] = UNI_buttonHandler; } if (el.type.toLowerCase() == 'submit' && !attached) { el['on' + (is.safari?'mousedown':'focus')] = UNI_buttonHandler; } } } else { break; } } } } //attach to all the forms in the page, called on "onload" function UNI_attachToForm() { GLOBAL_registerFormSubmitEventHandler('UNI_formSubmittalHandler', $UNI_FORM_SUBMIT_PRIORITY); if (is.windows && is.ie) { GLOBAL_registerFormSubmitEventHandler('UNI_enableButtonsIEBug', $UNI_FORM_SUBMIT_PRIORITY+1); } UNI_attachToButtons(); } function UNI_attachEmptyProps(props) { Array_each(['colname', 'required', 'type', 'format', 'additional_params', 'min', 'max', 'errorMessage'], function(prop_name) { if (typeof props[prop_name] == 'undefined') { props[prop_name] = ''; } }); return props; } // for the moment : error 0 : no error, error 1 : required, error 2 : illegal value function UNI_workOnElement(el) { var toret = true; if (el && el.type && el.type.toLowerCase() == 'hidden') { if (!UNI_isktml(el)) { return true; } } if (typeof window[$UNI_GLOBALVARNAME] == 'undefined') { return true; } var elname = el.name; if (!window[$UNI_GLOBALVARNAME][el.name]) { elname = elname.replace(/_\d+$/, ''); } var props = UNI_attachEmptyProps(window[$UNI_GLOBALVARNAME][elname]); // Validation Step 1 : REQUIRED if (props['required']) { toret = toret && UNI_validate_required(el, props); } if (!toret) { return toret; } // Validation Step 2 : FORMAT UNI_validate_[type]_format //UNI_validate_text_ip, UNI_validate_text_cc_generic //if they don't exist, try to exec UNI_validate_text //if they don't exist, try to exec UNI_validate_generic if (props['format'] != '' || props['type'] == 'mask' || props['type'] == 'regexp') { var functor_specific = window['UNI_validate_format_' + props['type'] + '_' + props['format']]; var functor_type = window['UNI_validate_format_' + props['type']]; var functor_generic = UNI_validate_generic; if (typeof functor_specific == 'function') { toret = toret && functor_specific(el, props); } else if (typeof functor_type == 'function') { toret = toret && functor_type(el, props); } else { toret = toret && functor_generic(el, props); } } if (!toret) { return toret; } //Validation Step 3 : min, max if (el.value != '') { if (props['min'] != '' || props['max'] != '') { var functor_specific = window['UNI_validate_minmax_' + props['type']]; var functor_generic = UNI_validate_minmax; if (typeof functor_specific == 'function') { toret = toret && functor_specific(el, props); } else if (typeof functor_generic == 'function') { toret = toret && functor_generic(el, props); } } } if (!toret) { return toret; } //Validation Step 4 : delete errors from old fields that have them if (toret == true) { UNI_fieldok_action(el, props); } return toret; } function UNI_disableButtons(frm, regexp, flag) { Array_each(frm.getElementsByTagName('input'), function(button, i) { if (button.type && Array_indexOf(['submit', 'button'], button.type.toLowerCase()) >= 0) { if (button.className == 'mxw_v' || button.className == 'mxw_add') { return true; } if (button.name.match(regexp)) { button.disabled = flag; } } }); } //what to do when form is submitted function UNI_formSubmittalHandler(e) { if (is.ie && is.mac) { return true; } focus_happened = false; var o = utility.dom.setEventVars(e); var frm = o.targ; frm = utility.dom.getParentByTagName(frm, 'form'); var returnHandler = true; frm.removeAttribute('haschanged'); //this code "gets" the depressed button in the form, //or finds it, if the enter key has been pressed (no button defined) if (typeof window.UNI_buttonpressed != 'undefined') { var button_regexp = window.UNI_buttonpressed; } else { var form_buttons = []; Array_each(frm.getElementsByTagName('input'), function(button, i) { if (button.type && ( button.type.toLowerCase() == 'submit' || button.type.toLowerCase() == 'button' )) { Array_push(form_buttons, button); } }); if (form_buttons.length == 1) { var button_regexp = form_buttons[0].name; } else { var update = false; var insert = false; var login = false; for (var i = 0; i < form_buttons.length; i++) { var button = form_buttons[i]; if (button.name.toString().match($UNI_UPDATE_BUTTON_NAME)) { update = true; } if (button.name.toString().match($UNI_INSERT_BUTTON_NAME)) { insert = true; } if (button.name.toString().match($UNI_LOGIN_BUTTON_NAME)) { login = true; } } if (update) { var button_regexp = $UNI_UPDATE_BUTTON_NAME; } else { if (insert) { var button_regexp = $UNI_INSERT_BUTTON_NAME; } else { if (login) { var button_regexp = $UNI_LOGIN_BUTTON_NAME; } } } } } // Array_each(frm.getElementsByTagName('input'), function(button, i) { if (button.type && ( button.type.toLowerCase() == 'submit' || button.type.toLowerCase() == 'button' )) { if (button.className == 'mxw_v' || button.className == 'mxw_add') { return true; } if (button.name.match(button_regexp)) { var hd = utility.dom.createElement('input', { 'type' : 'hidden', 'name': button.name, 'value': button.value }); hd = frm.appendChild(hd); } } }); if (frm.getAttribute('donotcheck') == '1') { return true; } var is_update_form = true; Array_each(utility.dom.getElementsByTagName(document, 'input'), function(input) { if (typeof input.type != 'undefined' && typeof input.name != 'undefined') { if (input.type.toLowerCase() == 'hidden' && input.name.toString().match(/^kt_pk/)) { if (input.value && input.value == 'KT_NEW') { is_update_form = false; } } } }); var arr = frm.elements; var already_checked = []; Array_each(arr, function(el, i) { if (Array_indexOf(already_checked, el) >= 0) { return; } if (typeof el.tagName != 'undefined' && el.tagName.toLowerCase() == 'fieldset') { return; } if (el.type.toString().toLowerCase() == 'radio') { Array_each(frm.elements, function(el2, i2) { if (el2.name == el.name) { Array_push(already_checked, el2); } }); } var tagname = el.tagName; var elname = el.name; if (!elname) return; if (typeof window[$UNI_GLOBALVARNAME] != 'undefined' && typeof window[$UNI_GLOBALVARNAME][elname] == 'undefined') { if (!is_update_form) { elname = elname.replace(/_1$/, ''); } else { elname = elname.replace(/_\d+$/, ''); } } if (typeof window[$UNI_GLOBALVARNAME] != 'undefined' && typeof window[$UNI_GLOBALVARNAME][elname] != 'undefined') { var tmp = UNI_workOnElement(el); if (!tmp) { if (!focus_happened) { try { el.focus(); focus_happened = true;} catch(e) { focus_happened = false; } } } returnHandler = returnHandler && tmp; } }); if (!returnHandler) { frm.setAttribute('fvo_error', '1'); button_regexp = ''; if (Array_indexOf(utility.dom.getClassNames(frm), 'KT_tngformerror') >= 0) { utility.dom.classNameAdd(frm, $UNI_CLASSNAME_ERROR_FORM); } return false; } try { utility.dom.classNameRemove(frm, $UNI_CLASSNAME_ERROR_FORM); } catch(e) { } return returnHandler; } function UNI_enableButtonsIEBug(e) { var o = utility.dom.setEventVars(e); var frm = o.targ; frm = utility.dom.getParentByTagName(frm, 'form'); var regexps = [/[a-z]:\\.*$/i, /\\\\.*$/i]; var invalid_file = true; Array_each(frm.getElementsByTagName('input'), function(el) { if (el.type) { if (el.type.toLowerCase() == 'file') { var flag = false; for (var i = 0; i < regexps.length; i++) { if (el.value.match(regexps[i])) { flag = true; } } invalid_file = invalid_file && flag; } } }); if (!invalid_file) { UNI_disableButtons(frm, /.*/, false); } return true; } function UNI_handle_required(form_label) { var htmlFor = form_label.htmlFor; var focus_happened = false; if (htmlFor) { var el = (is.ie&&htmlFor.toLowerCase()=="description")?document.body.all(htmlFor):document.getElementById(htmlFor); if (typeof el != 'undefined' && el != null && typeof window[$UNI_GLOBALVARNAME] != 'undefined') { if (typeof el.name == 'undefined' || el.name == null) { return; } var elname = el.name; if (!window[$UNI_GLOBALVARNAME][el.name]) { elname = elname.replace(/_\d+$/, ''); } var validate_object = window[$UNI_GLOBALVARNAME][elname]; var ignore_this = false; if (el.type.toLowerCase() == 'radio') { if (form_label && form_label.parentNode && el && el.parentNode && form_label.parentNode == el.parentNode) { var ignore_this = true; } } if ( typeof validate_object != 'undefined' && typeof validate_object.required != 'undefined' && validate_object.required && !ignore_this ) { var txt = utility.dom.createElement("SPAN", {className: 'KT_required'}); txt.innerHTML = "*"; form_label.appendChild(txt); } var server_side = utility.dom.getElementsByClassName(el.parentNode, $UNI_CLASSNAME_ERROR_SS); if (server_side.length > 0 && !focus_happened) { try { el.focus(); } catch(e) { } focus_happened = true; //login form if (Array_indexOf(utility.dom.getClassNames(el.form), 'KT_tngformerror') >= 0) { //this is a login form utility.dom.classNameAdd(el.form, $UNI_CLASSNAME_ERROR_FORM); } } } } } function UNI_handle_changed(form_label) { var htmlFor = form_label.htmlFor; var focus_happened = false; if (htmlFor) { var el = (is.ie&&htmlFor.toLowerCase()=="description")?document.body.all(htmlFor):document.getElementById(htmlFor); if (typeof el != 'undefined' && el != null) { if (typeof el.name == 'undefined' || el.name == null) { return; } var elname = el.name; var ignore_this = false; if (el.type.toLowerCase() == 'radio') { if (form_label && form_label.parentNode && el && el.parentNode && form_label.parentNode == el.parentNode) { var ignore_this = true; } } if (!ignore_this) { utility.dom.attachEvent(el, 'change', function(e) { try { var form = utility.dom.getParentByTagName(this, 'form'); form.setAttribute('haschanged', '1'); } catch(e) { } }); } } } } function UNI_form_attach() { var tmp, has_update = false; var div = utility.dom.getElementsByClassName(document, 'KT_tng', 'div'); var start_el = null; if (div.length == 1) { start_el = div[0]; } else { start_el = utility.dom.getElementsByClassName(document, 'KT_tngtable', 'table')[0]; } if (typeof start_el != 'undefined') { Array_each(start_el.getElementsByTagName('input'), function(button, i) { if (button.type && Array_indexOf(['submit', 'button'], button.type.toLowerCase()) >= 0) { if (button.className == 'mxw_v' || button.className == 'mxw_add') { return; } if (button.name.match($UNI_UPDATE_BUTTON_NAME)) { has_update = true; } } }); if (has_update) { var forms = document.getElementsByTagName('form'); if (typeof KT_FVO_properties != 'undefined' && typeof KT_FVO_properties['noTriggers'] && typeof KT_FVO_properties['noTransactions'] != 'undefined') { var noTriggers = parseInt(KT_FVO_properties['noTriggers'], 10); var noTransactions = parseInt(KT_FVO_properties['noTransactions'], 10); if (noTriggers == 1 && noTransactions > 1) { for (i in KT_FVO) { var re = new RegExp('^' + i, 'g'); Array_each(forms, function(form) { Array_each(form.elements, function(el) { if (el && el.name && el.name.match(re)) { if (el.tagName.toLowerCase() == 'input' && el.type) { if (Array_indexOf(['file', 'password'], el.type.toLowerCase())>= 0) { KT_FVO[i]['required'] = false; } } } }); }); } } } } } try { if (typeof KT_FVO['kt_login_user']!='undefined') { var user_name_ctrl = document.getElementById("kt_login_user"); if (user_name_ctrl) { user_name_ctrl.focus(); } } } catch(err) {} Array_each(utility.dom.getElementsByClassName(document, 'KT_tngtable', 'TABLE'), function(table, table_index){ if (table.getAttribute('kt_uni_attached') == null) { table.setAttribute('kt_uni_attached', 'true'); // add classes to containers Array_each(utility.dom.getElementsByTagName(table, 'label'), function(form_label) { UNI_handle_required(form_label); UNI_handle_changed(form_label); }); } }); window["UNI_uniqueid"] = new UIDGenerator(); UNI_attachToForm(); } if (typeof UNI_form_attach_executed == 'undefined') { utility.dom.attachEvent2(window, 'onload', UNI_form_attach); UNI_form_attach_executed = true; } window.onbeforeunload = UNI_navigateAway;