252 lines
6.6 KiB
JavaScript

/*+********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
********************************************************************************/
function MessageBoxPopup(){
function center(el){
el.css({
position: 'absolute'
});
el.width("400px");
placeAtCenter(el.get(0));
}
function close(){
jQuery('#error_message_box').css('display', 'none');
}
function show(module){
if(typeof('VtigerJS_DialogBox') != 'undefined') VtigerJS_DialogBox.unblock();
jQuery('#error_message_box').css('display', 'block');
center(jQuery('#error_message_box'));
}
jQuery('#error_message_box_close').click(close);
jQuery('#error_message_box_cancel').click(close);
return {
close:close,
show:show
};
}
var validateMandatoryFields = {
init: function(){
this.mandatoryFields = [];
},
validator: function (){
var emptyFields = [];
jQuery('#empty_fields_message').css('display', 'none');
var result;
var mandatoryFields = this.mandatoryFields;
for(var i = 0; i < mandatoryFields.length; i++){
var fieldName = mandatoryFields[i];
if(typeof this.fieldValue(fieldName) == 'undefined' || this.fieldValue(fieldName)==""){
emptyFields.push(fieldName);
}
}
if(emptyFields.length!=0){
result = [false, 'empty_fields_message', emptyFields];
}else{
result = [true];
}
return result;
}
};
var validateFieldData = {
init: function(){
this.validateFieldData = {};
this.validateDateTime= function (value){
value = trim(value);
var dateTimeElements = value.split(' ');
var datePart = dateTimeElements[0];
var timePart = dateTimeElements[1];
if(this.validateDate(datePart) == false) {
return false;
}
if(this.validateTime(timePart) == false) {
return false;
}
return true;
};
this.validateDate = function (value) {
value = trim(value);
var dateParts = value.split('-');
var yyyy = dateParts[0];
var mm = dateParts[1];
var dd = dateParts[2];
if (dd<1 || dd>31 || mm<1 || mm>12 || yyyy<1 || yyyy<1000) {
return false
}
if ((mm==2) && (dd>29)) {
return false
}
if ((mm==2) && (dd>28) && ((yyyy%4)!=0)) {
return false
}
switch (parseInt(mm)) {
case 2 :
case 4 :
case 6 :
case 9 :
case 11 :
if (dd>30) {
return false
}
}
return true;
};
this.validateTime = function (value) {
value = trim(value);
var re = /^\d{1,2}\:\d{2}:\d{2}$|^\d{1,2}\:\d{2}$/
if (!re.test(value)) {
return false;
}
var timeParts = value.split(':');
var hourval = timeParts[0];
var minval = timeParts[1];
if (hourval>23 || minval>59) {
return false
}
return true;
};
this.validateInteger= function (value) {
value = trim(value);
if (isNaN(value) || value.indexOf(".")!=-1) {
return false;
}
if(value < -2147483648 || value > 2147483647) {
return false;
}
return true;
};
this.validateNumeric= function (value) {
value = trim(value);
if (isNaN(value)) {
return false;
}
return true;
},
this.validateEmail= function (value) {
value = trim(value);
var re=new RegExp(/^[a-zA-Z0-9]+([\_\-\.]*[a-zA-Z0-9]+[\_\-]?)*@[a-zA-Z0-9]+([\_\-]?[a-zA-Z0-9]+)*\.+([\-\_]?[a-zA-Z0-9])+(\.?[a-zA-Z0-9]+)*$/);
if (!re.test(value)) {
return false;
}
return true;
}
},
validator: function (){
var invalidFieldValues = {};
jQuery('#invalid_field_values_message').css('display', 'none');
var result = [true];
var validationFailed = false;
var fieldInfo = this.validateFieldData;
for(var fieldName in fieldInfo){
var fieldDetails = fieldInfo[fieldName];
var fieldType = fieldDetails['type'];
var fieldValue = this.fieldValue(fieldName);
if(typeof fieldValue == 'undefined' || fieldValue == ''
|| fieldValue.replace(/^\s+/g, '').replace(/\s+$/g, '').length == 0) {
// Empty value, no value validation required.
} else if(fieldType == 'email') {
if(!this.validateEmail(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
} else if(fieldType == 'integer') {
if(!this.validateInteger(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
} else if(fieldType == 'double' || fieldType == 'currency') {
if(!this.validateNumeric(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
} else if(fieldType == 'datetime') {
if(!this.validateDateTime(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
} else if(fieldType == 'date') {
if(!this.validateDate(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
} else if(fieldType == 'time') {
if(!this.validateTime(fieldValue)) {
invalidFieldValues[fieldName] = fieldDetails;
validationFailed = true;
}
}
}
if(validationFailed == true) {
var errorMessageDetails = '';
for(fieldName in invalidFieldValues){
errorMessageDetails += '<li>' + invalidFieldValues[fieldName]['label'] + ' (' + invalidFieldValues[fieldName]['type'] + ') </li>';
}
var errorMessageElement = jQuery('#invalid_field_values_fieldlist');
errorMessageElement.html(errorMessageDetails);
result = [false, 'invalid_field_values_message', invalidFieldValues];
}
return result;
}
}
var VTFieldValidatorPrototype = {
validate: function(){
var isValid = true;
var validators = this.validators;
for(var i = 0; i < validators.length; i++){
var validator = validators[i];
var result = validator.call(this);
if(result[0]==false){
jQuery('#'+result[1]).css('display', 'block');
isValid = false;
}
}
if(!isValid){
this.messageBoxPopup.show();
}
return isValid;
},
addValidator: function(name, validator){
validator.init.call(this);
this.validators.push(validator.validator);
},
fieldValue: function(fieldName){
return this.form.find('[name='+fieldName+']').val();
}
};
function VTFieldValidator(form){
var _this = this;
_this.form = form;
_this.messageBoxPopup = MessageBoxPopup();
form.submit(function(){
return _this.validate();
});
_this.validators = [];
_this.addValidator('mandatoryFields', validateMandatoryFields);
_this.addValidator('validateFieldData', validateFieldData);
}
VTFieldValidator.prototype = VTFieldValidatorPrototype;