$(function() { var clientes = { properties: { form: $("#frmNew"), fields: { username: { field: 'input[name="username"]', key: 'username', validation: [0, 1, 3] }, password1: { field: 'input[name="password1"]', key: 'password', validation: [0, 1, 3] }, password2: { field: 'input[name="password2"]', key: 'password', validation: [0, 1, 3] }, nome: { field: 'input[name="nome"]', key: 'nome', validation: [0, 1, 3] }, orgao_comunicacao_social: { field: 'input[name="orgao_comunicacao_social"]', key: 'orgao_comunicacao_social', validation: [1] }, empresa: { field: 'input[name="empresa"]', key: 'empresa', validation: [3] }, email: { field: 'input[name="email"]', key: 'email', validation: [0, 1, 3] }, telefone: { field: 'input[name="telefone"]', key: 'telefone', validation: [0] }, telemovel: { field: 'input[name="telemovel"]', key: 'telemovel', validation: [1, 3] }, contribuinte: { field: 'input[name="contribuinte"]', key: 'contribuinte', validation: [3] }, morada1: { field: 'input[name="morada1"]', key: 'morada', validation: [0, 1, 3] }, morada2: { field: 'input[name="morada2"]', key: 'morada', validation: [0, 1, 3] }, codigopostal1: { field: 'input[name="codigopostal1"]', key: 'cp', validation: [0, 1, 3] }, codigopostal2: { field: 'input[name="codigopostal2"]', key: 'cp', validation: [0, 1, 3] }, localidade: { field: 'input[name="localidade"]', key: 'localidade', validation: [0, 1, 3] } }, classNames: { inputError: "input-error" } }, init: function(id_perfil) { // Ini fields for (var i in clientes.properties.fields) { if ($.inArray(id_perfil, clientes.properties.fields[i].validation) >= 0) { clientes.properties.fields[i].field = $(clientes.properties.form).find(clientes.properties.fields[i].field).each(function() { // Tipsy $(clientes.properties.fields[i].field).tipsy({ title: function() { return this.getAttribute('error'); }, trigger: 'focus', gravity: 'w', fade: true, delayIn: 500 }); $(this).bind('blur', {o : clientes.properties.fields[i]}, clientes.validate.methods.validate); $(this).bind('change', {o : clientes.properties.fields[i]}, clientes.validate.methods.validate); $(this).bind('keyup', {o : clientes.properties.fields[i]}, clientes.validate.methods.validate); $(this).bind('focus', {o : clientes.properties.fields[i]}, clientes.validate.methods.validate); $(this).bind('focus', {obj : clientes.properties.fields[i]}, function(e) { if (e.data.obj.field.hasClass('input-error')) { $(e.data.obj.field).tipsy('enable'); } else { $(e.data.obj.field).tipsy('disable'); } }); }); } } clientes.properties.form.bind('submit', {id_perfil: id_perfil}, clientes.validate.submit); $(clientes.properties.form).find('input[name="newsletter"]').bind('click', clientes.methods.toggle_newsletter); }, validate: { submit: function(e) { for (var i in clientes.properties.fields) { if ($.inArray(e.data.id_perfil, clientes.properties.fields[i].validation) >= 0) { if ($(clientes.properties.fields[i].field, clientes.properties.form).length) { clientes.validate.fields[clientes.properties.fields[i].key](); } } } if (clientes.properties.form.find('.' + clientes.properties.classNames.inputError + ':first').length) { clientes.properties.form.find('.' + clientes.properties.classNames.inputError + ':first').focus(); return false; } else { return true; } }, fields: { username: function() { if ($(clientes.properties.fields.username.field).val().length < 9) { clientes.validate.methods.setErrorInput(clientes.properties.fields.username.field, 'O Username tem de ter no mínimo 4 letras/números'); } }, password: function() { if ($(clientes.properties.fields.password1.field).val().length < 9) { clientes.validate.methods.setErrorInput(clientes.properties.fields.password1.field, 'A password deve ter no mínimo 9 caracteres'); } if ($(clientes.properties.fields.password1.field).val() != $(clientes.properties.fields.password2.field).val()) { clientes.validate.methods.setErrorInput(clientes.properties.fields.password2.field, 'As passwords introduzidas não são iguais'); } }, nome: function() { if ($(clientes.properties.fields.nome.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.nome.field, 'Por favor escreva o Nome'); } }, empresa: function() { if ($(clientes.properties.fields.empresa.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.empresa.field, 'Campo de preenchimento obrigatório'); } }, orgao_comunicacao_social: function() { if ($(clientes.properties.fields.orgao_comunicacao_social.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.orgao_comunicacao_social.field, 'Deve preencher o campo: Orgão de comunicação social'); } }, email: function() { if ($(clientes.properties.fields.email.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.email.field, 'Por favor escreva o E-mail'); } }, telefone: function() { if ($(clientes.properties.fields.telefone.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.telefone.field, 'Pelo menos um contacto telefónico é obrigatório'); } }, telemovel: function() { if ($(clientes.properties.fields.telemovel.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.telemovel.field, 'Campo de preenchimento obrigatório'); } }, contribuinte: function() { if ($(clientes.properties.fields.contribuinte.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.contribuinte.field, 'Campo de preenchimento obrigatório'); } }, morada: function() { if ($(clientes.properties.fields.morada1.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.morada1.field, 'Por favor escreva a Morada'); } }, cp: function() { if ($(clientes.properties.fields.codigopostal1.field).val().length < 4) { var re = new RegExp('^\\d{4}(-\\d{3})?$'); if (!$(clientes.properties.fields.codigopostal1.field).val().match(re)) { clientes.validate.methods.setErrorInput(clientes.properties.fields.codigopostal1.field, 'Por favor escreva um Código Postal válido'); } } if ($(clientes.properties.fields.codigopostal2.field).val().length < 3) { var re = new RegExp('^\\d{4}(-\\d{3})?$'); if (!$(clientes.properties.fields.codigopostal2.field).val().match(re)) { clientes.validate.methods.setErrorInput(clientes.properties.fields.codigopostal2.field, 'Por favor escreva um Código Postal válido'); } } }, localidade: function() { if ($(clientes.properties.fields.localidade.field).val().length == 0) { clientes.validate.methods.setErrorInput(clientes.properties.fields.localidade.field, 'Por favor escreva a Localidade'); } } }, methods: { validate: function(obj) { if (typeof obj.data !== "undefined") { obj = obj.data.o; } clientes.validate.methods.cleanErrorInput(obj.field); clientes.validate.fields[obj.key](); }, setErrorInput: function(input, error) { $(input).addClass(clientes.properties.classNames.inputError); if (!$(input).attr('error')) { $(input).attr('error', error); } }, cleanErrorInput: function(input) { $(input).removeClass(clientes.properties.classNames.inputError); } } }, methods: { toggle_newsletter: function(e) { if ($(e.target).val() == 1) { $('fieldset.toggle_newsletter').show(); } else { $('fieldset.toggle_newsletter').hide(); } } } } clientes.init(0); });