/**
* @module managers/form-manager
* @description This module manages forms for email or SMS submission
*/
define([
],
function ()
{
// ---------------------------------------------------------------
//
// FORM MANAGER
//
// ---------------------------------------------------------------
var Form = function ()
{
console.log(" * <form>");
this.CLASS_IS_REQUIRED = "js-is-required";
this.ui = {
eventBtn : ".js-btn-event",
submitBtn : ".js-btn-submit",
input : ".js-form-input",
inputLabel : ".js-input-label",
loadingIcon : ".js-loading-icon",
fadeOverlay : ".js-fade-overlay",
form : ".js-form"
};
this.init();
};
Form.prototype =
{
// ______________________________________________________________
// init
/**
* init
* @description Initializes class
* @fires init()
* @memberOf module:managers/form-manager
* @instance
*/
init: function()
{
this.assignListeners();
},
// ______________________________________________________________
// assignListeners
/**
* assignListeners
* @description Assigns listeners to events used in this class.
* @listens EVENT_MODEL_READY
* @memberOf module:managers/form-manager
* @instance
*/
assignListeners: function()
{
var self = this;
// page is loaded, check for anchor and scroll to anchor
if (typeof window.oModel === "undefined" || window.oModel.jConfig === -1){
window.tEvent.addListener("EVENT_MODEL_READY", function(evt, data) {
});
} else {
}
/*
$("body").hammer().on("click", this.ui.submitBtn, function(e){
var data = {
successEvt: $(this).attr("data-success"),
errorEvt: $(this).attr("data-error"),
$target: $(e.target)
}
self.onSubmitBtnClick(data);
});
*/
},
// --------------------------------------------------------------
// HELPERS
// --------------------------------------------------------------
// ______________________________________________________________
// prepareBodyCopy
/**
* prepareBodyCopy
* @description Returns generic copy for email and sms
* @param {Object} formData - Form data
* @returns {Object}
* @example
* {
* email: ""
* sms: ""
* }
* @memberOf module:managers/form-manager
* @instance
*/
prepareBodyCopy: function(formData) {
var returnObj = {};
if (typeof window.oIha === "undefined") {
return (returnObj);
}
returnObj = {
email: "",
sms: ""
};
for (var key in formData.data){
returnObj.email += key + ": " + formData.data[key] + "<br>";
returnObj.sms += key + ": " + formData.data[key] + "; ";
}
return (returnObj);
},
// ______________________________________________________________
// getFormData
/**
* getFormData
* @description Collects form data from Jquery object. Lopps through inputs.
* @param {JqueryObject} $form - Form data
* @returns {Object} Inputs compiled into an object
* @memberOf module:managers/form-manager
* @instance
*/
getFormData: function($form) {
var self = this;
var def = window.oModel.def;
var formObj = {
isComplete: true,
data: {
}
};
var $this;
var val = "";
var incomplete = [];
var $inputContainer;
$(this.ui.loadingIcon).css("display", "block");
$(this.ui.fadeOverlay).css("display", "block");
$(this.ui.input, $form).each(function(){
$this = $(this);
$inputContainer = $this.parent();
// clear incomplete
$inputContainer.removeClass(def.CLASS_INCOMPLETE);
switch($this[0].tagName){
case "INPUT":
switch($this.attr("type")){
case "radio":
var val = $(self.ui.input + "[name='" + $this.attr("name") + "']:checked", $form).val();
formObj.data[$this.attr("name")] = val;
if ($this.hasClass(self.CLASS_IS_REQUIRED) && $this.val() === "") {
formObj.isComplete = false;
// add color to label
$inputContainer.addClass(def.CLASS_INCOMPLETE);
}
break;
case "checkbox":
var li = [];
$(self.ui.input + "[name='" + $this.attr("name") + "']:checked", $form).each(function(){
li.push($(this).val());
});
formObj.data[$this.attr("name")] = li;
if ($this.hasClass(self.CLASS_IS_REQUIRED) && $this.val() === "") {
formObj.isComplete = false;
// add color to label
$inputContainer.addClass(def.CLASS_INCOMPLETE);
}
break;
default:
val = $this.val().trim();
formObj.data[$this.attr("name")] = val;
if ($this.hasClass(self.CLASS_IS_REQUIRED) && val === "") {
formObj.isComplete = false;
// add color to label
$inputContainer.addClass(def.CLASS_INCOMPLETE);
}
}
break;
default:
val = $this.val();
if ($this.hasClass(self.CLASS_IS_REQUIRED) && val === "") {
// add color to label
/*
if ($this.hasClass("m-form-select__option")){
$this.parents(self.ui.inputLabel).addClass("field-incomplete");
} else {
$this.siblings(self.ui.inputLabel).addClass("field-incomplete");
} */
// add color to label
formObj.isComplete = false;
$inputContainer.addClass(def.CLASS_INCOMPLETE);
}
formObj.data[$this.attr("name")] = val;
}
/*console.log("_____", $(this)[0].tagName );
console.log("val ->", $(this).val());*/
});
return(formObj);
},
// --------------------------------------------------------------
// EVENTS
// --------------------------------------------------------------
// ______________________________________________________________
// onFormSubmit
/**
* onFormSubmit
* @description On form submit
* @param {Object} formData - Form data
* @param {"email"|"sms"} submissionType - Submission type
* @fires oServices.sendEmail()
* @fires oServices.sendSms()
* @memberOf module:managers/form-manager
* @instance
*/
onFormSubmit: function(formData, submissionType)
{
if (typeof window.oIha === "undefined") {
return;
}
switch(submissionType){
case "email":
window.oModel.oIha.oIhaServices.sendEmail(formData);
break;
case "sms":
window.oModel.oIha.oIhaServices.sendSms(formData);
break;
}
}
};
/**
* @global
*/
window.oForm = new Form();
});