validate form
//
// Global Variables
//
var errorMessages = {};
var valuechecks = {};
var validatedArray = new Array();
var url = 'validateField';
// -----------------------------------------------------------------------------------
$(function () {
// initialize()
// Constructor runs on completion of the DOM loading. Loops through anchor tags looking for
// 'validating' references and applies onclick events to appropriate links. The 2nd section of
// the function inserts html at the bottom of the page which is used to display the shadow
// overlay and the image container.
//
window.initValitating = function() {
if (!document.getElementsByTagName){ return; }
//var inputs = document.getElementsByTagName('input');
var inputs = document.querySelectorAll('input,select');
// loop through all inputs
for (var i=0; i<inputs.length; i++){
var input = inputs[i];
var validateAttribute = String(input.getAttribute('validate'));
var inputId = String(input.getAttribute('id'));
if (validateAttribute.indexOf('true') > -1 || validateAttribute.indexOf('required') > -1 || validateAttribute.indexOf('matches') > -1){
input.onblur = function (e) {
var e=window.event || e;
start(this);
}
input.onkeydown = function (e) {
var e=window.event || e;
var keyNum;
if(window.event) keyNum = e.keyCode;
else if(e.which) keyNum = e.which;
}
//input.onclick = function () {displayError(this);}
input.onfocus = function () {
addValueCheck(this);
clearOnFocusIcon(String(this.getAttribute('id')));
}
}
}
};
//
// start()
// Display validate_dialog.
//
var start = function(inputObj) {
var inputId = String(inputObj.getAttribute('id'));
var validateAttribute = String(inputObj.getAttribute('validate'));
var fieldTitle = String(inputObj.getAttribute('data-name'));
var matchId = "";
if(validateAttribute.indexOf('matches') > -1)
{
var matches = validateAttribute.match(/matches\((.*)\)/);
if(matches.length > 0) matchId = matches[1];
}
if(inputObj.value == '' && validateAttribute.indexOf('required') > -1)
{
var errorMessage = "The <strong>" + fieldTitle + "</strong> is required.";
colorFieldAndSaveMessage(errorMessage, inputObj);
}
else if(matchId != '' && matchId.length > 0 && validateAttribute.indexOf('matches') > -1 && document.getElementById(matchId).value != inputObj.value)
{
var matchField = document.getElementById(matchId);
var fieldTitle2 = matchField.getAttribute('data-name');
var errorMessage = "The <strong>" + fieldTitle + "</strong> doesn't match the <strong>" + fieldTitle2 + "</strong>.";
colorFieldAndSaveMessage(errorMessage, inputObj);
}
else if (validateAttribute.indexOf('true') > -1){
if (hasValueChanged(inputObj)) {
var validateName = String(inputObj.getAttribute('name'));
validatedArray.push(inputId);
$.ajax({
url: url,
type: "POST",
data: {name : validateName, value : inputObj.value},
dataType: "html",
success: function(data){
colorFieldAndSaveMessageRequest(data, inputObj);
}
});
}
else
{
showOnBlurNoChange(inputId);
}
}
else
{
if(validateAttribute.indexOf('display_OK') > -1 && inputObj.value.length > 0)
{
displayOK(inputId);
}
else
{
clearValidateMessage(inputId);
}
}
},
colorFieldAndSaveMessageRequest = function(data, inputObj) {
colorFieldAndSaveMessage(data, inputObj);
},
colorFieldAndSaveMessage = function(responseText, inputObj) {
var inputId = String(inputObj.getAttribute('id'));
var validateMessage = responseText;
if(validateMessage != null && validateMessage != '') {
displayValidateMessage(inputId, validateMessage);
var ele = $("#"+inputId);
}
else {
var validateAttribute = String(inputObj.getAttribute('validate'));
if(validateAttribute.indexOf('display_OK') > -1 && inputObj.value.length > 0)
{
displayOK(inputId);
}
else
{
clearValidateMessage(inputId);
}
}
},
displayOK = function(inputId) {
var ele = $('#'+inputId);
if ( ele instanceof jQuery ) {
ele = ele[0]; //get the DOM element from the jQuery object
}
ele.style.borderColor = "#b7b7b7";
$(ele).removeClass('field_error');
var eleType = ele.type.toUpperCase();
var parentDiv = ele.parentNode;
if (parentDiv) {
if (parentDiv.className != "status_group") {
$(ele).wrap('<div class="status_group"></div>');
parentDiv = ele.parentNode;
}
if (parentDiv.className == "status_group") {
if (eleType != "SELECT-ONE" && eleType != "SELECT-MULTIPLE") {
if ($(parentDiv).find($('.field_status')).length > 0) {
$(parentDiv).find($('.field_status')).removeClass('error').addClass('ok');
$(parentDiv).find($('.field_status')).removeClass('hide');
}
else {
var errorSpan = document.createElement('span');
errorSpan.setAttribute('id', inputId + '_status');
errorSpan.setAttribute('class', 'field_status ok');
parentDiv.appendChild(errorSpan);
}
}
if ($(parentDiv).find($('.validate_error')).length > 0) {
$(parentDiv).find($('.validate_error')).remove();
}
}
}
},
clearOnFocusIcon = function(inputId) {
var ele = $('#' + inputId);
if (ele instanceof jQuery) {
ele = ele[0]; //get the DOM element from the jQuery object
}
var parentDiv = ele.parentNode;
if (parentDiv) {
if (parentDiv.className == "status_group") {
if ($(parentDiv).find($('.field_status')).length > 0) {
$(parentDiv).find($('.field_status')).addClass('hide');
}
if ($(parentDiv).find($('.validate_error')).length > 0) {
$(parentDiv).find($('.validate_error')).addClass('hide');
}
}
}
},
showOnBlurNoChange = function(inputId) {
var ele = $('#' + inputId);
if (ele instanceof jQuery) {
ele = ele[0]; //get the DOM element from the jQuery object
}
var parentDiv = ele.parentNode;
if (parentDiv) {
if (parentDiv.className == "status_group") {
if ($(parentDiv).find($('.field_status')).length > 0) {
$(parentDiv).find($('.field_status')).removeClass('hide');
}
if ($(parentDiv).find($('.validate_error')).length > 0) {
$(parentDiv).find($('.validate_error')).removeClass('hide');
}
}
}
},
clearValidateMessage = function(inputId) {
var ele = $('#' + inputId);
if (ele instanceof jQuery) {
ele = ele[0]; //get the DOM element from the jQuery object
}
ele.style.borderColor = "#b7b7b7"; //none
$(ele).removeClass('field_error');
var parentDiv = ele.parentNode;
if (parentDiv) {
if (parentDiv.className == "status_group") {
if ($(parentDiv).find($('.field_status')).length > 0) {
$(parentDiv).find($('.field_status')).addClass('hide');
}
if ($(parentDiv).find($('.validate_error')).length > 0) {
$(parentDiv).find($('.validate_error')).remove();
}
}
}
},
displayValidateMessage = function(inputId, validateMessage) {
var ele = $('#'+inputId);
if ( ele instanceof jQuery ) {
ele = ele[0]; //get the DOM element from the jQuery object
}
var isWarning = validateMessage && validateMessage.indexOf('<!--warning-->') > -1;
if(isWarning)
{
ele.style.borderColor = "#f8b000";
}
else
{
ele.className = ele.className + " field_error";
//ele.style.bkColor = ele.style.backgroundColor;
//ele.style.backgroundColor = "#ebc6ca";
ele.style.borderColor = "#A10E1E";
}
var eleType = ele.type.toUpperCase();
var parentDiv = ele.parentNode;
if (parentDiv) {
if (parentDiv.className != "status_group") {
$(ele).wrap('<div class="status_group"></div>');
parentDiv = ele.parentNode;
}
if (parentDiv.className == "status_group") {
if (eleType != "SELECT-ONE" && eleType != "SELECT-MULTIPLE") {
if ($(parentDiv).find($('.field_status')).length > 0) {
if(isWarning) {
$(parentDiv).find($('.field_status')).removeClass('lock_fail').removeClass('lock_secure').removeClass('lock').removeClass('ok').removeClass('error').addClass('warning');
}
else
{
$(parentDiv).find($('.field_status')).removeClass('lock_fail').removeClass('lock_secure').removeClass('lock').removeClass('ok').removeClass('warning').addClass('error');
}
$(parentDiv).find($('.field_status')).removeClass('hide');
}
else {
var errorSpan = document.createElement('span');
errorSpan.setAttribute('id', inputId + '_status');
if(isWarning)
errorSpan.setAttribute('class', 'field_status warning');
else
errorSpan.setAttribute('class', 'field_status error');
parentDiv.appendChild(errorSpan);
}
}
if ($(parentDiv).find($('.validate_error')).length > 0) {
if(isWarning) {
$(parentDiv).find($('.validate_error')).addClass('warning');
}
else
{
$(parentDiv).find($('.validate_error')).removeClass('warning');
}
$(parentDiv).find($('.validate_error')).removeClass('hide');
$(parentDiv).find($('.validate_error')).html(validateMessage);
}
else {
//<span id="user_name_error" class="block_message validate_error" for="user_name" role="alert">This Username is already taken.</span>
var validationSpan = document.createElement('span');
validationSpan.setAttribute('id', inputId + '_error');
if(isWarning) {
validationSpan.setAttribute('class', 'block_message validate_error warning');
}
else
{
validationSpan.setAttribute('class', 'block_message validate_error');
}
validationSpan.setAttribute('for', inputId);
validationSpan.setAttribute('role', "alert");
validationSpan.innerHTML = validateMessage;
parentDiv.appendChild(validationSpan);
}
}
}
},
addValueCheck = function(inputObj) {
var inputId = String(inputObj.getAttribute('id'));
addValuecheck(inputId,inputObj.value);
},
addValuecheck = function (id, value)
{
if (id in valuechecks) {
valuechecks[id] = value;
} else {
valuechecks[id] = value;
}
},
getValuecheck = function (id)
{
if (id in valuechecks) {
return valuechecks[id];
} else {
return "";
}
},
hasValueChanged = function(inputObj) {
var inputId = String(inputObj.getAttribute('id'));
var value = getValuecheck(inputId);
if(value != inputObj.value)
return true;
return false;
}
});
// ----------------------------------------------------------------------------------
jQuery(document).ready(function() {
initValitating();
});