All Downloads are FREE. Search and download functionalities are using the official Maven repository.

resources.tools_javascript_ait_form.js Maven / Gradle / Ivy

function form(formSelector, options){
    
	this.c = {
		isSkinning: false,
		element: {
			classNameByError: 'error',
			selectorMarkContainer: '.mark-container',
			tipText: ''
		},
		localization: {
			date: {
				shortYearCutoff: '+10',
				dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
				dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
				monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
				monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'],
				dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
				prevText: 'Prev', // Display text for previous month link
				nextText: 'Next', // Display text for next month link
				weekHeader: 'Wk', // Column header for week of the year
				dateFormat: 'mm/dd/yy', // See format options on parseDate
				firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
				isRTL: false, // True if right-to-left language, false if left-to-right
				showMonthAfterYear: false, // True if the year select precedes month, false for month then year
				yearSuffix: '' // Additional text to append to the year in the month headers
			},
			time: {
				currentText: 'Now',
				closeText: 'Done',
				ampm: false,
				amNames: ['AM', 'A'],
				pmNames: ['PM', 'P'],
				timeFormat: 'hh:mm tt',
				timeSuffix: '',
				timeOnlyTitle: 'Choose Time',
				timeText: 'Time',
				hourText: 'Hour',
				minuteText: 'Minute',
				secondText: 'Second',
				millisecText: 'Millisecond',
				timezoneText: 'Time Zone'											
			},			
			number: {
				format: '#.##',
				groupingSeparator: ',',
				decimalSeparator: '.'			
			}
		},
		
		markup: {
			errorMessage: '\
				
\ \ \ \ \
\
\

<#error-message#>

\
\
\
\ ' }, message: { valueIsEmpty: 'Error: Value is empty', dateInvalid: 'Error: Date value is invalid', intInvalid: 'Error: Integer value is invalid', decimalInvalid: 'Error: Decimal value is invalid' } }; this.obj = null; this.element = new Array(); this.group = new Array(); this.init = function(formSelector, options){ var self = this; var objLastElement = function(obj){ var len=0; for (var i in obj) len++; return {index:len-1, name: i}; }; //Localization if (typeof(options.localization) == 'object') { //Date jQuery(function($){ var lastElement = objLastElement($.datepicker.regional); if (lastElement.index>=1) $.extend(self.c.localization.date, $.datepicker.regional[lastElement.name]); if (typeof(options.localization.date) == 'object') $.extend(self.c.localization.date, options.localization.date); $.datepicker.setDefaults(self.c.localization.date); }); //Time (function($){ var lastElement = objLastElement($.timepicker.regional); if (lastElement.index>=1) $.extend(self.c.localization.time, $.timepicker.regional[lastElement.name]); if (typeof(options.localization.time) == 'object') jQuery.extend(self.c.localization.time, options.localization.time); $.timepicker.setDefaults(self.c.localization.time); })(jQuery); //Number if (typeof(options.localization.number) == 'object') jQuery.extend(this.c.localization.number, options.localization.number); } if (typeof(options.element) == 'object') jQuery.extend(this.c.element, options.element); this.c.isSkinning = (typeof(options.isSkinning) != 'undefined') ? options.isSkinning : this.c.isSkinning; this.element = new Array(); this.obj = jQuery(formSelector).get(0); }; this.addElement = function(selector, type, options){ options.mandatory = (typeof(options.mandatory)!='undefined') ? options.mandatory : false; options.tipText = (typeof(options.tipText)!='undefined') ? options.tipText : this.c.element.tipText; var defaultLocalization = {}; jQuery.extend(defaultLocalization, this.c.localization); options.localization = (typeof(options.localization)!='undefined') ? jQuery.extend(defaultLocalization, options.localization) : defaultLocalization; options.localization = defaultLocalization; var defaultMarkup = {}; jQuery.extend(defaultMarkup, this.c.markup); options.markup = (typeof(options.markup)!='undefined') ? Query.extend(defaultMarkup, options.markup) : this.c.markup; options.markup = defaultMarkup var defaultMessage = {}; jQuery.extend(defaultMessage, this.c.message); options.message = (typeof(options.message)!='undefined') ? Query.extend(defaultMessage, options.message) : this.c.message; options.message = defaultMessage; if ((type == 'date') && (typeof(options.datetimepickerCongif) == 'object')) { $(selector).datetimepicker(options.datetimepickerCongif); } var elm = new formElement(this, selector, type, options); if (elm) this.element.push(elm); }; this.validateForm = function(){ var valid = true; if (this.element != null) for(var i=0; i < this.element.length; i++){ if (this.element[i].checkElement() == false) valid = false; } if (this.group != null) for(var i=0; i < this.group.length; i++){ if (this.group[i].checkGroup() == false) valid = false; } if (valid) this.removeTipTextValues(); return valid; }; this.addGroup = function(groupName, options){ var mandatory = (typeof(options.mandatory) != 'undefined') ? options.mandatory : false; var rule = (typeof(options.rule) != 'undefined') ? options.rule : 'OR'; var group = new formGroup(this, groupName, mandatory, rule); this.group.push(group); }; this.addElementToGroup = function(groupName, elementSelector, elementType, options){ for(var i=0; i 0) ? jQuery(this.obj.get(0)).parents(this.form.c.element.selectorMarkContainer).get(0) : null; break; case "boolean" : case "checkbox" : case "list:checkbox" : this.markObj = (jQuery(this.selector).parents(this.form.c.element.selectorMarkContainer).length > 0) ? jQuery(this.selector).parents(this.form.c.element.selectorMarkContainer).get(0) : null; break; case "text" : case "list:text" : case "longtext" : this.markObj = this.obj; if (this.tipText != null) { var self = this; if (this.obj.value == '') this.obj.value = this.tipText; jQuery(this.obj).bind('focus', function(){ if (this.value == self.tipText) this.value = '' }); jQuery(this.obj).bind('blur', function(){ if (jQuery.trim(this.value) == '') this.value = self.tipText }); } break; default : this.markObj = this.obj; break; } //Dependencies if (typeof(options.dependencies) != 'undefined') { var dependenciesProcessor = new DependenciesProcessor(selector, type, options.dependencies); } //validationRules this.options.mandatory = false; if (typeof(options.validationRules) != 'undefined') { this.options.validationRules = new Array; for (var i=(options.validationRules.length-1); i>=0; i--) { if (options.validationRules[i].type.toLowerCase() != 'notnull') this.options.validationRules.push(options.validationRules[i]); else { this.options.mandatory = true; this.options.message.valueIsEmpty = options.validationRules[i].errorMessage; } } } else { this.options.validationRules = new Array(); } //Functions this.checkElement = function(){ var valid = this.isValid(); if (valid) this.clearLabelElement(); else this.markLabelElement(); return valid; }; this.isValid = function(){ var valid = true; this.errorMessages = new Array(); switch(this.type){ case "date": valid = this.checkDateTimeElement(); break; case "coordinate": case "long": case "decimal": case "int": case "text": case "list:text": case "file": case "file-multiple": case "password": valid = this.checkTextElement(); break; case "radio": case "list:radio": valid = this.checkRadioElement(); break; case "boolean": case "checkbox": case "list:checkbox": valid = this.checkCheckboxElement(); break; case "longtext": valid = this.checkTextareaElement(); break; case "select": case "list:select": valid = this.checkSelectElement(); break; case "richtext": //markObj kann nur nach RichText Editor Initialisierung ermittelt werden var markSelector = '#'+jQuery(self.selector).attr('id') + '_parent'; self.markObj = (jQuery(markSelector).length > 0) ? jQuery(markSelector).get(0) : null; valid = this.checkTextareaElement(); break; default: valid = false; break; }; return valid; }; this.checkTextElement = function(){ var self = this; //is empty & mandatory if (jQuery.trim(this.obj.value) == '') { if (this.options.mandatory == false) return true; else { this.errorMessages.push(this.options.message.valueIsEmpty); return false; } } //data type validation var isInt = function(value){ var intRegex = /^[\+|-]{0,1}\d*[.]{0,1}\d+$/; return (intRegex.test(value.toString()) && !isNaN(parseInt(value.toString())) && (parseFloat(value.toString()) == parseInt(value.toString()))); }; var isDecimal = function(value){ var intRegex = /^[\+|-]{0,1}\d*[.]{0,1}\d+$/; return intRegex.test(value.toString()); }; var isFormatValid = function(value){ var numberValue = $.format.number(value); var formatedValue = $.format.number(numberValue); return (formatedValue == value) ? true : false; }; $.format.locale({ number: this.options.localization.number }); var typeValid = true; var elementValue = this.obj.value; switch(this.type){ case "coordinate": case "decimal": elementValue = $.format.number(this.obj.value).toString(); var typeError = false; if ((this.options.localization.number.groupingSeparator != '.') && (this.options.localization.number.decimalSeparator != '.')) { if ((this.obj.value.indexOf('.') != -1) || (!isDecimal(elementValue))) typeError = true; } else if (!isDecimal(elementValue)) typeError = true; if (typeError) { var errorMessage = (typeof(this.options.typeErrorMessage) != 'undefined') ? this.options.typeErrorMessage : this.options.message.decimalInvalid; this.errorMessages.push(errorMessage); return false; } var numberValue = $.format.number(this.obj.value); this.obj.value = $.format.number(numberValue, this.options.localization.number.format); elementValue = numberValue; break; case "long": case "int": elementValue = $.format.number(this.obj.value).toString(); var typeError = false; if ((this.options.localization.number.groupingSeparator != '.') && (this.options.localization.number.decimalSeparator != '.')) { if ((this.obj.value.indexOf('.') != -1) || (!isInt(elementValue))) typeError = true; } else if (!isInt(elementValue)) typeError = true; if (typeError) { var errorMessage = (typeof(this.options.typeErrorMessage) != 'undefined') ? this.options.typeErrorMessage : this.options.message.intInvalid; this.errorMessages.push(errorMessage); return false; } var numberValue = $.format.number(this.obj.value); this.obj.value = $.format.number(numberValue, this.options.localization.number.format); elementValue = numberValue; break; } //rules validation var vResult = validationRulesProcessor.validate(elementValue, this.options.validationRules); if ((vResult.valid) && (jQuery.trim(elementValue) != this.tipText)) return true; else { this.errorMessages = vResult.errorMessages; return false; } }; this.checkRadioElement = function(){ //value var value = null; for (var i=0; i< this.obj.length; i++){ value = (this.obj.get(i).checked == true) ? this.obj.get(i).value : value; } //is empty & mandatory if (value == null) { if (this.options.mandatory == false) return true; else { this.errorMessages.push(this.options.message.valueIsEmpty); return false; } } //data type validation //not necessarily //rules validation vResult = validationRulesProcessor.validate(value, this.options.validationRules); if (vResult.valid) return true; else { this.errorMessages = vResult.errorMessages; return false; } }; this.checkCheckboxElement = function(){ //value var value = (this.obj.checked == true) ? this.obj.value : null; //is empty & mandatory if (value == null) { if (this.options.mandatory == false) return true; else { this.errorMessages.push(this.options.message.valueIsEmpty); return false; } } //data type validation //not necessarily //rules validation vResult = validationRulesProcessor.validate(value, this.options.validationRules); if (vResult.valid) return true; else { this.errorMessages = vResult.errorMessages; return false; } }; this.checkTextareaElement = function(){ //is empty & mandatory if (jQuery.trim(this.obj.value) == '') { if (this.options.mandatory == false) return true; else { this.errorMessages.push(this.options.message.valueIsEmpty); return false; } } //data type validation //not necessarily //rules validation var vResult = validationRulesProcessor.validate(this.obj.value, this.options.validationRules); if ((vResult.valid) && (jQuery.trim(this.obj.value) != this.tipText)) return true; else { this.errorMessages = vResult.errorMessages; return false; } }; this.checkSelectElement = function(){ return this.checkTextareaElement(); }; this.checkDateTimeElement = function(){ //is empty ? if (jQuery.trim(this.obj.value) == '') { if (this.options.mandatory == false) return true; else { this.errorMessages.push(this.options.message.valueIsEmpty); return false; } } //data type validation var separatorPosition = dateTimePattern.getSeparatorPosition(options.format); var formatParts = new Array(); formatParts[0] = options.format.slice(0,separatorPosition+1); formatParts[1] = options.format.slice(separatorPosition+1, options.format.length); var dateValue = ''; var timeValue = ''; if ((formatParts[0].indexOf('a') != -1) || (formatParts[0].indexOf('H') != -1) || (formatParts[0].indexOf('k') != -1) || (formatParts[0].indexOf('K') != -1) || (formatParts[0].indexOf('h') != -1) || (formatParts[0].indexOf('m') != -1) || (formatParts[0].indexOf('s') != -1) || (formatParts[0].indexOf('S') != -1) || (formatParts[0].indexOf('z') != -1) || (formatParts[0].indexOf('Z') != -1)) { dateValue = $.trim(this.obj.value.slice(separatorPosition+1, options.format.length)); timeValue = $.trim(this.obj.value.slice(0,separatorPosition+1)); } else { timeValue = $.trim(this.obj.value.slice(separatorPosition+1, options.format.length)); dateValue = $.trim(this.obj.value.slice(0,separatorPosition+1)); } var dateFormat = dateTimePattern.get({pattern: options.format, type: 'date'}); var timeFormat = dateTimePattern.get({pattern: options.format, type: 'time'}); //Date var replaceTableData = [ {s: /-/, r: '<#HYPHEN#>'}, {s: /\./, r: '<#POINT#>'}, {s: /\//, r: '<#SLASH#>'}, {s: /\\/, r: '<#BACKSLASH#>'}, {s: /\ /, r: '<#SPACE#>'}, {s: /\$/, r: '<#DOLLAR#>'}, {s: /yy/, r: '\\<#D#>{1,4}'}, {s: /y/, r: '\\<#D#>{1,2}'}, {s: /MM/, r: '\\w+'}, {s: /M/, r: '\\w+'}, {s: /mm/, r: '\\<#D#>{1,2}'}, {s: /m/, r: '\\<#D#>{1,1}'}, {s: /dd/, r: '\\<#D#>{1,2}'}, {s: /d/, r: '\\d{1,1}'}, {s: /<#D#>/, r: 'd'}, {s: /<#DOLLAR#>/, r: '\\$'}, {s: /<#SPACE#>/, r: '\\ '}, {s: /<#BACKSLASH#>/, r: '\\\\'}, {s: /<#SLASH#>/, r: '\/'}, {s: /<#POINT#>/, r: '\.'}, {s: /<#HYPHEN#>/, r: '\-'} ]; var dateRegExpString = string.replaceAllFromArray(dateFormat, replaceTableData); var dateValue = this.obj.value.match(new RegExp(dateRegExpString)); dateValue = dateValue ? dateValue.toString() : ''; //Time var replaceTableTime = [ {s: /S/, r: ''}, {s: /-/, r: '<#HYPHEN#>'}, {s: /\./, r: '<#POINT#>'}, {s: /\//, r: '<#SLASH#>'}, {s: /\\/, r: '<#BACKSLASH#>'}, {s: /\ /, r: '<#SPACE#>'}, {s: /\$/, r: '<#DOLLAR#>'}, {s: /hh/, r: '\\d{1,2}'}, {s: /h/, r: '\\d{1,2}'}, {s: /HH/, r: '\\d{1,2}'}, {s: /H/, r: '\\d{1,2}'}, {s: /mm/, r: '\\d{1,2}'}, {s: /m/, r: '\\d{1,2}'}, {s: /ss/, r: '\\d{1,2}'}, {s: /s/, r: '\\d{1,2}'}, {s: /tt/, r: '\\w+'}, {s: /<#DOLLAR#>/, r: '\\$'}, {s: /<#SPACE#>/, r: '\\ '}, {s: /<#BACKSLASH#>/, r: '\\\\'}, {s: /<#SLASH#>/, r: '\/'}, {s: /<#POINT#>/, r: '\.'}, {s: /<#HYPHEN#>/, r: '\-'} ]; var timeRegExpString = string.replaceAllFromArray(timeFormat, replaceTableTime); var timeValue = this.obj.value.match(new RegExp(timeRegExpString)); timeValue = timeValue ? timeValue.toString() : ''; var timeTypeIsValid = ($.datepicker.parseTime(timeFormat, timeValue, null) == false) ? false : true ; var dateTypeIsValid = this.validateDateType(dateFormat, dateValue, this.options.localization.date); if (!dateTypeIsValid || !timeTypeIsValid) { var errorMessage = (typeof(this.options.typeErrorMessage) != 'undefined') ? this.options.typeErrorMessage : this.options.message.dateInvalid; this.errorMessages.push(errorMessage); return false; } //rules validation var oDate = this.getDate(dateFormat, dateValue, this.options.localization.date); var oTime = $.datepicker.parseTime(timeFormat, timeValue, null); var value = oDate; jQuery.extend(value, oTime); vResult = validationRulesProcessor.validate(value, this.options.validationRules); if (vResult.valid) return true; else { this.errorMessages = vResult.errorMessages; return false; } }; this.validateDateType = function(format, value, settings){ var date = this.getDate(format, value, settings); if (typeof(date) != 'object') return false; return true; }; this.getDate = function(format, value, settings){ if (format == null || value == null) return null; value = (typeof value == 'object' ? value.toString() : value + ''); if (value == '') return null; var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this.options.localization.date.shortYearCutoff; shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); var dayNamesShort = (settings ? settings.dayNamesShort : null) || this.options.localization.date.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this.options.localization.date.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this.options.localization.date.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this.options.localization.date.monthNames; var year = -1; var month = -1; var day = -1; var doy = -1; var literal = false; // Check whether a format character is doubled var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches; }; // Extract a number from the string value var getNumber = function(match) { var isDoubled = lookAhead(match); var size = (match == '@' ? 14 : (match == '!' ? 20 : (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); var digits = new RegExp('^\\d{1,' + size + '}'); var num = value.substring(iValue).match(digits); if (!num) return false; iValue += num[0].length; return parseInt(num[0], 10); }; // Extract a name from the string value and convert to an index var getName = function(match, shortNames, longNames) { var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { return [ [k, v] ]; }).sort(function (a, b) { return -(a[1].length - b[1].length); }); var index = -1; $.each(names, function (i, pair) { var name = pair[1]; if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { index = pair[0]; iValue += name.length; return false; } }); if (index != -1) return index + 1; else return false; }; // Confirm that a literal character matches the string value var checkLiteral = function() { if (value.charAt(iValue) != format.charAt(iFormat)) return false; iValue++; }; var getDaysInMonth = function(year, month) { return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); }; var daylightSavingAdjust = function(date) { if (!date) return null; date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date; }; var iValue = 0; for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else if (!checkLiteral()) return false; } else { switch (format.charAt(iFormat)) { case 'd': day = getNumber('d'); break; case 'D': getName('D', dayNamesShort, dayNames); break; case 'o': doy = getNumber('o'); break; case 'm': month = getNumber('m'); break; case 'M': month = getName('M', monthNamesShort, monthNames); break; case 'y': year = getNumber('y'); break; case '@': var date = new Date(getNumber('@')); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case '!': var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "'": if (lookAhead("'")) checkLiteral(); else literal = true; break; default: checkLiteral(); } } } if (iValue < value.length){ //Extra/unparsed characters found in date return false; } if (year == -1) year = new Date().getFullYear(); else if (year < 100) year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100); if (doy > -1) { month = 1; day = doy; do { var dim = getDaysInMonth(year, month - 1); if (day <= dim) break; month++; day -= dim; } while (true); } var date = daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) return false; return {year: year, month: month, day: day}; }; this.markLabelElement = function(){ if (!form.c.isSkinning) jQuery(this.markObj).addClass(form.c.element.classNameByError); else { switch(this.type){ case "string" : case "text" : case "email": case "pattern": case "date": case "coordinate": case "decimal": case "int": case "long": case "list:text": case "file": case "file-multiple": jQuery(this.markObj).parents('.jqTransformInputWrapper').addClass(form.c.element.classNameByError); break; case "textarea": case "longtext": jQuery(this.markObj).parents('.jqTransformTextarea').addClass(form.c.element.classNameByError); break; case "select": case "list:select": jQuery(this.markObj).parents('.jqTransformSelectWrapper').addClass(form.c.element.classNameByError); break; case "radio": case "checkbox": case "list:radio": case "list:checkbox": case "boolean": jQuery(this.markObj).addClass(form.c.element.classNameByError); break; } } this.showMessage(); }; this.clearLabelElement = function(){ if (!form.c.isSkinning) jQuery(this.markObj).removeClass(form.c.element.classNameByError); else { switch(this.type){ case "string" : case "text" : case "email": case "pattern": case "date": case "coordinate": case "decimal": case "int": case "long": case "list:text": case "file": case "file-multiple": jQuery(this.markObj).parents('.jqTransformInputWrapper').removeClass(form.c.element.classNameByError); break; case "textarea": case "longtext": jQuery(this.markObj).parents('.jqTransformTextarea').removeClass(form.c.element.classNameByError); break; case "select": case "list:select": jQuery(this.markObj).parents('.jqTransformSelectWrapper').removeClass(form.c.element.classNameByError); break; case "radio": case "checkbox": case "list:radio": case "list:checkbox": case "boolean": jQuery(this.markObj).removeClass(form.c.element.classNameByError); break; } } this.hideMessage(); }; this.showMessage = function(){ this.hideMessage(); var message = ''; for (var i=0; i'; } var messageElement = string.replaceAll(this.options.markup.errorMessage, /<#error-message#>/ , message); jQuery(this.options.errorMessageContainer).append(messageElement); }; this.hideMessage = function(){ jQuery(this.options.errorMessageContainer).find('*').remove(); }; if (this.obj) return this; else return false; } function DependenciesProcessor(selector, elementType, dependencies){ this.selector = selector; this.elementType = elementType; this.dependencies = dependencies; this.init = function(){ var self = this; switch (elementType) { case "radio": case "list:radio": var jMaster = jQuery('input[type="radio"][name="'+this.selector+'"]'); break; default: var jMaster = jQuery(this.selector); break; } jMaster.bind('change', function(){ for (var i in self.dependencies) { switch (self.dependencies[i].type) { case 'visibility': //set default state self.changeSlaveState(self.dependencies[i].slaveSelector,self.dependencies[i].defaultSlaveState); for (var dataIndex in self.dependencies[i].data) { if (typeof(self.dependencies[i].data[dataIndex].masterValue) != 'object') { self.dependencies[i].data[dataIndex].masterValue = new Array(self.dependencies[i].data[dataIndex].masterValue); } switch (self.elementType) { case "radio": case "list:radio": if ((this.checked) && (jQuery.inArray(this.value, self.dependencies[i].data[dataIndex].masterValue) != -1)) self.changeSlaveState(self.dependencies[i].slaveSelector, self.dependencies[i].data[dataIndex].slaveState); break; case "checkbox": case "list:checkbox": case "boolean": var value = (this.checked) ? this.value : ''; if (jQuery.inArray(value, self.dependencies[i].data[dataIndex].masterValue) != -1) self.changeSlaveState(self.dependencies[i].slaveSelector, self.dependencies[i].data[dataIndex].slaveState); break; default: if (jQuery.inArray(this.value,self.dependencies[i].data[dataIndex].masterValue) != -1) self.changeSlaveState(self.dependencies[i].slaveSelector, self.dependencies[i].data[dataIndex].slaveState); break; } } break; case 'changeValue': for (var dataIndex in self.dependencies[i].data) { if (typeof(self.dependencies[i].data[dataIndex].masterValue) != 'object') { self.dependencies[i].data[dataIndex].masterValue = new Array(self.dependencies[i].data[dataIndex].masterValue); } switch (self.elementType) { case "radio": case "list:radio": if ((this.checked) && (jQuery.inArray(this.value, self.dependencies[i].data[dataIndex].masterValue) != -1 )) self.changeSlaveValue(self.dependencies[i].slaveSelector, self.dependencies[i].slaveType, self.dependencies[i].data[dataIndex]); break; case "checkbox": case "list:checkbox": case "boolean": var value = (this.checked) ? this.value : ''; if (jQuery.inArray(value, self.dependencies[i].data[dataIndex].masterValue) != -1) self.changeSlaveValue(self.dependencies[i].slaveSelector, self.dependencies[i].slaveType, self.dependencies[i].data[dataIndex]); break; default: if (jQuery.inArray(this.value, self.dependencies[i].data[dataIndex].masterValue) != -1) self.changeSlaveValue(self.dependencies[i].slaveSelector, self.dependencies[i].slaveType, self.dependencies[i].data[dataIndex]); break; } } break; case 'changeValueSet': for (var dataIndex in self.dependencies[i].data) { if (typeof(self.dependencies[i].data[dataIndex].masterValue) != 'object') { self.dependencies[i].data[dataIndex].masterValue = new Array(self.dependencies[i].data[dataIndex].masterValue); } if ((jQuery.inArray(this.value, self.dependencies[i].data[dataIndex].masterValue) != -1) && (this.checked)) { self.changeSlaveValueSet(self.dependencies[i].slaveSelector, self.dependencies[i].slaveType, self.dependencies[i].data[dataIndex].slaveSet); } } break; } } }); jQuery(document).ready(function(){ switch (self.elementType) { case 'radio': case "list:radio": var jMaster = jQuery('input[type="radio"][name="'+self.selector+'"]'); var isChecked = false; for (var i=0;i=1)) jQuery(jMaster.get(0)).change(); break; default: var jMaster = jQuery(self.selector); jMaster.change(); break; } }); }; this.changeSlaveState = function(slaveSelector, slaveState){ if ((typeof(slaveState) != 'object') && (typeof(slaveState) != 'array')) return; for (var stateIndex in slaveState) { var state = slaveState[stateIndex]; for (var propertyName in state) { switch (propertyName) { case 'display': jQuery(slaveSelector).css('display', state[propertyName]); break; case 'readonly': if (state[propertyName] == 'true') jQuery(slaveSelector).attr('readonly','readonly'); else jQuery(slaveSelector).removeAttr('readonly'); break; case 'disabled': if (state[propertyName] == 'true') jQuery(slaveSelector).attr('disabled','disabled'); else jQuery(slaveSelector).removeAttr('disabled'); break; } } } }; this.changeSlaveValue = function(slaveSelector, slaveType, data){ switch (slaveType) { case "text": case "string": case "email": case "date": case "textarea": case "pattern": case "coordinate": case "decimal": case "int": case "long": case "list:text": case "longtext": var currentValue = jQuery(slaveSelector).attr('value'); if (currentValue != data.slaveValue){ jQuery(slaveSelector).attr('value', data.slaveValue).trigger('change').trigger('blur'); } break; case "radio": case "list:radio": jQuery('input[type="radio"][name="'+slaveSelector+'"]').each(function(){ if ((this.value == data.slaveValue) && !this.checked) { this.checked = true; jQuery(this).trigger('change').trigger('blur'); } }); break; case "select": case "list:select": jQuery(slaveSelector).each(function(){ var selectedIndex = null; for (var i=0; i= 0) || !(value.search(/.+@..+\...+/) >= 0) || !(value.length >= 8)) { valid = false; message = errorMessage; } break; case "size": if ((value.length < parseInt(options.min)) || (value.length > parseInt(options.max))) { valid = false; message = errorMessage; } break; case "min": if (parseFloat(value) < parseFloat(options.value)){ valid = false; message = errorMessage; } break; case "max": if (parseFloat(value) > parseFloat(options.value)){ valid = false; message = errorMessage; } break; case "pattern": var pattern = new RegExp(options.regexp); if (!pattern.test(value)) { valid = false; message = errorMessage; } break; case "future": var current = new Date(); current = Date.UTC(current.getFullYear(), current.getMonth(), current.getDate(), current.getHours(), current.getMinutes(), current.getSeconds()); value = Date.UTC(value.year,(value.month-1),value.day,value.hour,value.minute,value.second); if (value <= current) { valid = false; message = errorMessage; } break; case "past": var current = new Date(); current = Date.UTC(current.getFullYear(), current.getMonth(), current.getDate(), current.getHours(), current.getMinutes(), current.getSeconds()); value = Date.UTC(value.year,(value.month-1),value.day,value.hour,value.minute,value.second); if (value >= current) { valid = false; message = errorMessage; } break; case "digits": var intRegex = /^[\+|-]{0,1}\d+[.]{0,1}\d+$/; value = value.toString(); if (!intRegex.test(value)) { valid = false; message = errorMessage; } else { numberPart = value.split('.'); if (numberPart[0].length > parseInt(options.integer)) { valid = false; message = errorMessage; } else if ((typeof(numberPart[1]) != 'undefined' ) && (numberPart[1].length>parseInt(options.fraction))) { valid = false; message = errorMessage; } } break; } return {valid: valid, errorMessage: message}; } };




© 2015 - 2025 Weber Informatics LLC | Privacy Policy