// Jeppesen Form jQuery Plugins // Pravesvuth Uparanukraw // Feb 2009 // 0.8 (function($) { $.JeppForm = { init: function(options) { $.JeppForm.options = $.extend($.JeppForm.options, options); $.JeppForm.bindValidate($.JeppForm.options.validate.element,$.JeppForm.options.validate.callback); }, options: { mandateClass: 'req', disabledClass: 'disabled', emailClass: 'email', numericClass: 'numeric', ignoreClass: 'ignore', dateClass: 'date', hideDisabled: false, mandateApnStr: null, debug: false, highlightBind: false, msgBox: '#msgBox', progressBox: '#progressBox', colors: { isRequired: '#FDD', isEmail: '#FFC', isNumeric: '#DFD' }, validate: { element: ':input[type=submit]', events: 'click', callback: function() { // do nothing } } }, defaultRules: { events: 'onDisable', action: 'disable', values: null, reverseAction: null }, validate: function(method) { var i; var className; switch (method) { case "isRequired" : className = $.JeppForm.options.mandateClass; break; case "isEmail" : className = $.JeppForm.options.emailClass; break; case "isNumeric" : className = $.JeppForm.options.numericClass; break; case "isDate" : className = $.JeppForm.options.dateClass; break; } var valid = true; var fields = $(":input:enabled."+className); fields.removeAttr("style"); for (i = 0; i< fields.length; i++) { var val = fields[i].value; switch (method) { case "isRequired" : if ($.isEmpty(val)) { $(fields[i]).css("background-color",$.JeppForm.options.colors[method]); valid = false; } break; case "isEmail" : if ($(fields[i]).hasClass($.JeppForm.options.mandateClass) && ($.isEmpty(val) || !$.isEmail(val))) { $(fields[i]).css("background-color",$.JeppForm.options.colors[method]); valid = false; } else if (!$.isEmpty(val) && !$.isEmail(val)) { $(fields[i]).css("background-color",$.JeppForm.options.colors[method]); valid = false; } break; } } return valid; }, bindValidate: function (element, callback) { $(element).bind($.JeppForm.options.validate.events, function() { var isRequiredFieldValid = true, isEmailFieldValid = true; isRequiredFieldValid = $.JeppForm.validate('isRequired'); isEmailFieldValid = $.JeppForm.validate('isEmail'); if (isRequiredFieldValid && isEmailFieldValid) { if ($.JeppForm.options.msgBox != null) { $($.JeppForm.options.msgBox).removeClass('cautionBox').empty(); } callback(); } else { if ($.JeppForm.options.msgBox != null) { $($.JeppForm.options.msgBox).empty().addClass('cautionBox'); if (!isRequiredFieldValid) { $($.JeppForm.options.msgBox).append( ""+ "Missing required fields! Red fields are required."+ ""+ "Invalid email! Yellow fields require a valid email."+ "* '); $(this).trigger('onMandate'); if (options.debug) console.log('mandate'); } $.fn.mandateAndBind = function() { $(this).mandate(); $(this).setDependency(this,{events: 'onEnable', action: 'mandate'}); } $.fn.unmandate = function() { var options = $.JeppForm.options; var inputs = $(this).filter(':input'); var labels = $(this).filter('label'); inputs.removeClass(options.mandateClass); inputs.each(function(i) { var input = $(inputs[i]); if (options.mandateApnStr != null && input.attr('name').indexOf(options.mandateApnStr) != -1) { input.attr('name', input.attr('name').substr(0,input.attr('name').indexOf(options.mandateApnStr)) ); } }); $("em.mandatelabel",labels).remove(); $(this).trigger('onUnmandate'); if (options.debug) console.log('unmandate'); } $.fn.unmandateAndUnbind = function() { $(this).unmandate() $(this).releaseDependency(this); } $.fn.format = function(format) { var options = $.JeppForm.options; var inputs = $(this).filter(':input'); if (format.isEmail) inputs.addClass(options.emailClass); if (format.isNumeric) inputs.addClass(options.numericClass); if (format.isDate) inputs.addClass(options.dateClass); } $.isEmpty = function (str) { return (str == null) || (str == undefined) || (str.length == 0) || /^\s.$/.test(str) ; } $.isEmail = function (str) { if(this.isEmpty(str)) return false; var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i return re.test(str); } $.isNumeric = function (str) { if(this.isEmpty(str)) return false; if (isNaN(str)) return false; return true; } })(jQuery);