9 $parameters = array(
"a" => array(
"templateId" =>
"",
"testAddress" =>
"",
"body" =>
"",
"fromEmail" =>
"",
"fromName" =>
"",
"subject" =>
"",
"optin" =>
"",
10 "inputList" =>
"",
"select" =>
"",
"templateName" =>
"",
"encoded" =>
""));
11 $string = array(
"filter" => FILTER_SANITIZE_STRING);
12 $stringNoEncodeQuote = array(
"filter" => FILTER_SANITIZE_STRING,
"options" => array(
"flags" => FILTER_FLAG_NO_ENCODE_QUOTES));
13 $unSanitized = array(
"filter" => FILTER_DEFAULT);
14 $html = array(
"filter" => FILTER_SANITIZE_SPECIAL_CHARS);
15 HCU_ImportVars($parameters,
"a", array(
"templateId" => $string,
"testAddress" => $string,
"body" => $html,
"fromEmail" => $string,
"fromName" => $stringNoEncodeQuote,
16 "subject" => $stringNoEncodeQuote,
"optin" => $string,
"select" => $string,
"templateName" => $stringNoEncodeQuote,
17 "encoded" => $unSanitized));
18 extract($parameters[
"a"]);
20 $templateId = isset($templateId) ? intval($templateId) : 0;
21 $testAddress = isset($testAddress) ? trim($testAddress) :
"";
22 $body = isset($body) ? htmlspecialchars_decode(trim($body)) :
"";
23 $fromEmail = isset($fromEmail) ? trim($fromEmail) :
"";
24 $fromName = isset($fromName) ? trim($fromName) :
"";
25 $subject = isset($subject) ? trim($subject) :
"";
26 $optin = isset($optin) ? trim($optin) :
"";
27 $select = isset($select) ? trim($select) :
"";
28 $templateName = isset($templateName) ? trim($templateName) :
"";
29 $encoded = isset($encoded) ? trim($encoded) :
"";
31 $self =
"$menu_link?ft=$ft";
32 require_once(dirname(__FILE__) .
"/aSendEmail.data");
34 if ($operation !=
"") {
37 $returnArray = ReadSetup($dbh, $Cu);
40 $returnArray = PrepareEmail($dbh, $Cu, $testAddress, $body, $fromEmail, $fromName, $subject, $optin, $select, $templateId);
43 $returnArray = SendEmail($dbh, $Cu, $logger, $encoded);
46 $returnArray = SaveTemplate($dbh, $Cu, $Cn, $testAddress, $body, $fromEmail, $fromName, $subject, $optin, $select, $templateName, $templateId);
48 case "removeTemplate":
49 $returnArray = RemoveTemplate($dbh, $Cu, $Cn, $templateId);
51 case "updateEmailList":
52 $returnArray = updateEmailList($dbh, $Cu);
55 $returnArray = array(
"sql" => array(),
"error" => array(
"Operation is not recognized: $operation."));
58 header(
'Content-type: application/json');
59 print HCU_JsonEncode($returnArray);
61 PrintSendEmailPage($self);
70 function PrintSendEmailPage($self) {
71 $cloudfrontDomainName = GetCloudFrontDomainName();
72 $tinymceVersion = GetTinyMCEVersion ();
74 <script type=
"text/javascript" src=
"https://<?php echo $cloudfrontDomainName; ?>/homecu/js/tinymce/<?php echo $tinymceVersion; ?>/tinymce.min.js"></script>
75 <script type=
"text/javascript" src=
"https://<?php echo $cloudfrontDomainName; ?>/homecu/js/tinymce/homecuchar.plugin.js"></script>
82 <script type=
"text/javascript">
85 getShowWaitFunctions();
93 var previousDataItem =
null;
103 $.homecuValidator.setup({formValidate:
'form', formStatusField:
'formValidateDiv'});
104 var tinyFocused =
false;
112 selector:
"#emailBody",
113 relative_urls:
false,
114 remove_script_host :
false,
116 "advlist autolink link image lists preview anchor pagebreak",
117 "searchreplace visualblocks visualchars code insertdatetime nonbreaking",
118 "table contextmenu directionality template textcolor homecuchar paste textcolor" 120 toolbar1:
"code newdocument | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | fontselect fontsizeselect | bullist numlist",
121 toolbar2:
"outdent indent blockquote | undo redo | link unlink image | preview | forecolor backcolor | removeformat | homecuchar | nonbreaking",
124 toolbar_items_size:
"small",
125 valid_children :
"+body[style]",
126 auto_focus:
"emailBody",
127 init_instance_callback:
function (editor) {
128 $(
"#emailBody_ifr").attr(
"tabindex", -1); <?php
130 editor.on(
"click",
function(e) {
131 tinymce.execCommand(
'mceFocus',
true,
'emailBody');
142 var selectDDL = $(
"#selectDDL").kendoDropDownList({
145 {text:
"All Members", value:
"all"},
146 {text:
"Members with eStatements", value:
"withE"},
147 {text:
"Members without eStatements", value:
"withoutE"},
150 if (
false) { ?> {text:
"Members with BillPay", value:
"withBP"}, <?php } ?>
151 {text:
"Members using Text Banking", value:
"withText"}]
153 dataTextField:
"text",
154 dataValueField:
"value",
155 filter:
"startswith",
157 var dataItem = templateDDL.dataItem();
158 if (dataItem !=
null) {
159 dataItem.select = this.value();
162 }).data(
"kendoDropDownList");
170 $(
"#emailBodyDiv").focus(
function() {
172 tinymce.execCommand(
'mceFocus',
true,
'emailBody');
183 $(
"#emailBodyDiv").blur(
function() {
185 tinymce.execCommand(
'mceFocus',
false,
'emailBody');
196 $(
"#optinRequired").click(
function() {
197 var dataItem = templateDDL.dataItem();
199 if (dataItem !=
null) {
200 dataItem.optin = $(
this).prop(
"checked") ?
"Y" :
"N";
211 $(
"#sendTestEmail").click(
function() {
212 if ($(
this).prop(
"checked")) {
213 $(
"#emailAddressRow").show();
214 $(
"[name='testEmail']").prop(
"required",
true);
216 $(
"#emailAddressRow").hide();
217 $(
"[name='testEmail']").prop(
"required",
false).removeClass(
"k-invalid").val(
null);
218 $(
".k-invalid-msg[data-for='testEmail']").hide();
228 $(
"[name='fromName']").blur(
function() {
229 var dataItem = templateDDL.dataItem();
231 if (dataItem !=
null) {
232 dataItem.fromname = $(
this).val();
242 $(
"[name='subject']").blur(
function() {
243 var dataItem = templateDDL.dataItem();
245 if (dataItem !=
null) {
246 dataItem.subject = $(
this).val();
255 var fromEmailDDL = $(
"#fromEmailDDL").kendoDropDownList({
257 dataTextField:
"email",
258 dataValueField:
"email",
259 optionLabel:
"Select email...",
260 select:
function (e) {
261 var dataItem = templateDDL.dataItem();
263 if (dataItem !=
null) {
264 dataItem.fromemail = e.dataItem.email;
267 }).data(
"kendoDropDownList");
274 var templateDDL = $(
"#templateDDL").kendoComboBox({
281 value: {type:
"number"},
282 text: {type:
"string"},
283 fromemail: {type:
"string"},
284 fromname: {type:
"string"},
285 subject: {type:
"string"},
286 body: {type:
"string"},
287 optin: {type:
"number"},
288 select: {type:
"string"}
293 dataTextField:
"text",
294 dataValueField:
"value",
295 filter:
"startswith",
297 var dataItem = this.dataItem();
298 if (dataItem !=
null) { <?php
299 $(this.wrapper).find(
".k-dropdown-wrap.k-invalid").removeClass(
"k-invalid");
300 if (dataItem.value == 0) {
301 $(
".removeBtn").hide();
303 $(
".removeBtn").show();
306 $(
"[name='fromName']").val(dataItem.fromname).removeClass(
"k-invalid");
307 $(
"#fromEmailDDL").data(
"kendoDropDownList").value(dataItem.fromemail);
308 $(
"[name='subject']").val(dataItem.subject).removeClass(
"k-invalid");
310 $(
"#optinRequired").prop(
"checked", dataItem.optin ==
"Y");
311 $(
"#selectDDL").data(
"kendoDropDownList").value(dataItem.select);
313 if (previousDataItem !=
null) {
314 previousDataItem.body = tinyMCE.activeEditor.getContent();
317 tinyMCE.activeEditor.setContent(dataItem.body, {format:
"raw"});
319 $(
".removeBtn").hide();
320 if (this.value() !=
null && this.value().trim() !=
"") {
321 $(this.wrapper).find(
".k-dropdown-wrap.k-invalid").removeClass(
"k-invalid");
325 if (dataItem !=
null) {
326 previousDataItem = dataItem;
329 dataBound:
function() {
330 previousDataItem = this.dataItem(); <?php
332 placeholder:
"Select an item from the list or type",
333 noDataTemplate:
"On save, new template will be created." 334 }).data(
"kendoComboBox");
337 $(
".templateRow .k-combobox .k-input[type='text']").attr({
"data-required-msg":
"Template is required",
"maxlength":
"50",
"name":
"templateInput"});
339 everythingDataSource.read({operation:
"readSetup"});
341 $(
".previewBtn").click(
function() {
342 $(
".k-dropdown-wrap.k-invalid").removeClass(
"k-invalid");
343 $.homecuValidator.validate();
345 if ($(
"#formValidateDiv li:visible").length == 0) {
347 if ($(
"#sendTestEmail").prop(
"checked")) {
348 parameters.testAddress = $(
"[name='testEmail']").val();
350 parameters.body = tinyMCE.activeEditor.getContent();
351 parameters.fromEmail = $(
"#fromEmailDDL").data(
"kendoDropDownList").value();
352 parameters.fromName = $(
"[name='fromName']").val();
353 parameters.subject = $(
"[name='subject']").val();
354 parameters.optin = $(
"#optinRequired").prop(
"checked") ?
"Y" :
"N";
355 parameters.select = selectDDL.value();
357 var combobox = $(
"#templateDDL").data(
"kendoComboBox");
358 var dataItem = combobox.dataItem();
359 parameters.templateId = dataItem ==
null ? 0 : dataItem.value;
360 parameters.operation =
"prepareEmail";
362 everythingDataSource.read(parameters);
364 $(
"#homecu-container").animate({ scrollTop: 0 }, { duration: 500 } );
376 $(
".saveBtn").click(
function() {
377 var input = $(
"[name='templateInput']");
378 $(input).prop(
"required",
true);
379 $(
"[name='testEmail']").attr(
"data-validate",
false); <?php
380 $.homecuValidator.validate();
381 $(input).prop(
"required",
false);
382 $(
"[name='testEmail']").attr(
"data-validate",
true);
384 $(input).hasClass(
"k-invalid") ? $(input).closest(
".k-dropdown-wrap").addClass(
"k-invalid") : $(input).closest(
".k-dropdown-wrap").removeClass(
"k-invalid");
386 if ($(
"#formValidateDiv li:visible").length == 0) {
388 parameters.body = tinyMCE.activeEditor.getContent();
389 parameters.fromEmail = $(
"#fromEmailDDL").data(
"kendoDropDownList").value();
390 parameters.fromName = $(
"[name='fromName']").val();
391 parameters.subject = $(
"[name='subject']").val();
392 parameters.optin = $(
"#optinRequired").prop(
"checked") ?
"Y" :
"N";
393 parameters.select = selectDDL.value();
395 var templateDDL = $(
"#templateDDL").data(
"kendoComboBox");
396 var dataItem = templateDDL.dataItem();
397 if (dataItem ==
null) {
398 parameters.templateId = 0;
399 parameters.templateName = templateDDL.value();
401 parameters.templateId = dataItem.value;
402 parameters.templateName = dataItem.text;
405 OpenConfirm(
false, parameters);
407 $(
"#homecu-container").animate({ scrollTop: 0 }, { duration: 500 } );
419 $(
".removeBtn").click(
function() {
420 $(
".k-dropdown-wrap.k-invalid").removeClass(
"k-invalid");
421 var input = $(
"[name='templateInput']");
422 $(input).prop(
"required",
true);
423 $(
"[name='testEmail']").attr(
"data-validate",
false); <?php
424 $.homecuValidator.validate();
425 $(input).prop(
"required",
false);
426 $(
"[name='testEmail']").attr(
"data-validate",
true);
427 if ($(
"#formValidateDiv li:visible").length == 0) {
429 var templateDDL = $(
"#templateDDL").data(
"kendoComboBox");
430 parameters.templateId = templateDDL.value();
432 OpenConfirm(
true, parameters);
434 $(
"#homecu-container").animate({ scrollTop: 0 }, { duration: 500 } );
439 var everythingDataSource =
null;
447 function InitDataSource() {
454 everythingDataSource =
new kendo.data.DataSource({
457 url:
"<?php echo $self; ?>",
461 parameterMap:
function(data, type) {
462 if (data.operation !=
"updateEmailList") {
469 parse:
function(results) {
470 if (results.operation !=
"updateEmailList") {
473 if (results.error && results.error.length > 0) {
474 $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError );
476 }
else if (results.info && results.info.length > 0) {
477 $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusInfo );
480 switch(results.operation) {
482 $(
"[name='fromName']").val(
"");
483 $(
"[name='subject']").val(
"");
484 $(
"#templateDDL").data(
"kendoComboBox").dataSource.data(results.data.templateDDL);
485 $(
"#fromEmailDDL").data(
"kendoDropDownList").dataSource.data(results.data.emailList);
486 if (results.data.hasUnverified) {
487 everythingDataSource.read({operation:
"updateEmailList"});
491 OpenPreviewWindow(results.data);
494 var templateDDL = $(
"#templateDDL").data(
"kendoComboBox");
495 templateDDL.dataSource.data(results.data.templateDDL);
496 templateDDL.value(results.data.templateId);
497 $(
".removeBtn").show();
499 $(
"#homecu-container").animate({ scrollTop: 0 }, { duration: 500 } );
501 case "removeTemplate":
502 var templateDDL = $(
"#templateDDL").data(
"kendoComboBox");
503 var selectDDL = $(
"#selectDDL").data(
"kendoDropDownList");
504 templateDDL.dataSource.data(results.data.templateDDL);
505 templateDDL.value(
"");
507 $(
".removeBtn").hide();
508 $(
"[name='templateName']").val(
"");
509 $(
"[name='fromName']").val(
"");
510 $(
"#fromEmailDDL").data(
"kendoDropDownList").select(0);
511 $(
"[name='subject']").val(
"");
512 tinyMCE.activeEditor.setContent(
"");
513 $(
"#optinRequired").prop(
"checked",
true);
516 $(
"#homecu-container").animate({ scrollTop: 0 }, { duration: 500 } );
519 var dialog = $(
"#previewWindow").data(
"kendoDialog");
522 case "updateEmailList":
523 $(
"#fromEmailDDL").data(
"kendoDropDownList").dataSource.data(results.data.emailList);
542 function OpenConfirm(isDelete, parameters) {
543 var confirmDialog = $(
"#confirmDialog").data(
"kendoDialog");
545 if (confirmDialog ==
null) {
552 confirmDialog = $(
"<div id='confirmDialog'></div>").appendTo(
"body").kendoDialog({
553 actions: [{text:
"No", action:
function() {
554 confirmDialog.close();
556 }}, {text:
"Yes", primary:
true, action:
function() {
557 confirmDialog.close();
559 var parameters = $(
"#confirmDialog").data(
"parameters");
560 var isDelete = $(
"#confirmDialog").data(
"isDelete");
563 parameters.operation =
"removeTemplate";
564 everythingDataSource.read(parameters);
567 parameters.operation =
"saveTemplate";
568 everythingDataSource.read(parameters);
575 if (window.activeWindows !=
null) {
576 window.activeWindows.push(
this);
580 if (window.activeWindows !=
null) {
581 window.activeWindows.pop();
587 }).data(
"kendoDialog");
590 $(
"#confirmDialog").data(
"parameters", parameters);
591 $(
"#confirmDialog").data(
"isDelete", isDelete);
593 var content =
"<p>You are about to " + (isDelete ?
"delete" :
"save") +
" this email template.</p><p>Do you wish to continue?</p>";
594 var title =
"Confirm " + (isDelete ?
"Delete" :
"Save");
596 confirmDialog.title(title).content(content).open();
607 function OpenPreviewWindow(previewData) {
608 var dialog = $(
"#previewWindow").data(
"kendoDialog");
610 if (dialog ==
null) {
617 dialog = $(
"<div id='previewWindow'></div>").appendTo(
"body").kendoDialog({
620 {text:
"Send Email", primary:
true, action:
function() {
622 var encoded = $(
"#previewWindow").data(
"encoded");
623 $(
"#previewWindow").data(
"encoded",
null);
624 everythingDataSource.read({encoded: encoded, operation:
"sendEmail"});
630 if (window.activeWindows !=
null) {
631 window.activeWindows.push(
this);
633 var maxHeight1 = 600;
634 var maxHeight2 = $(window).height() - 150;
635 var maxHeight = maxHeight2 >= maxHeight1 ? maxHeight1 : maxHeight2;
637 var maxWidth2 = $(window).width() - 75;
638 var maxWidth = maxWidth2 >= maxWidth1 ? maxWidth1 : maxWidth2;
639 $(
"#previewWindow").css({maxHeight: maxHeight, maxWidth: maxWidth});
642 if (window.activeWindows !=
null) {
643 window.activeWindows.pop();
646 }).data(
"kendoDialog");
649 var
template = kendo.template($(
"#previewTemplate").html());
650 $(
"#previewWindow").data(
"encoded", previewData.encoded);
651 delete previewData.encoded;
653 previewData.testEmail = $(
"[name='testEmail']").val();
654 previewData.optinRequired = $(
"#optinRequired").prop(
"checked");
655 previewData.selectedOption = $(
"#selectDDL").data(
"kendoDropDownList").text();
656 previewData.fromEmail = $(
"#fromEmailDDL").data(
"kendoDropDownList").value();
657 previewData.fromName = $(
"[name='fromName']").val();
658 previewData.subject = $(
"[name='subject']").val();
659 previewData.emailBody = tinyMCE.activeEditor.getContent();
661 dialog.content(
template(previewData)).open();
664 var activeWindows = [];
665 $(document).ready(
function() {
668 <?php printClickOverlayEvent(); ?>
678 <script type=
"text/x-kendo-template" id=
"previewTemplate">
679 <div
class=
"container hcu-all-100 hcu-no-padding">
681 <div
class=
"col-xs-12 hcu-no-padding">
682 <label
class=
"col-xs-12 k-info-colored">Check email for <b>#: testEmail #</b> to view test message.</label>
684 <div
class=
"col-xs-12"> </div>
686 <div
class=
"col-xs-12 hcu-no-padding">
687 <div
id=
'previewValidateDiv' class=
'k-block k-error-colored col-xs-12' style=
'display:none;'></div>
689 <div
class=
'col-xs-12 col-sm-4 hcu-no-padding'>
690 <label
class=
'col-xs-4 col-sm-12'>To</label>
691 <div
class=
'col-xs-8 col-sm-12'><div
class=
"admIndent">#= optinRequired ?
"Opted-in Members" :
"All Members" #</div></div>
693 <div
class=
"visible-xs-block col-xs-12"> </div>
694 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding hcuSpacer">
695 <label
class=
"col-xs-4 col-sm-12">Selecting</label>
696 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: selectedOption #</div></div>
698 <div
class=
"visible-xs-block col-xs-12"> </div>
699 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding">
700 <label
class=
"col-xs-4 col-sm-12">No. Emails</label>
701 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: numEmails #</div></div>
703 <div
class=
"col-xs-12"> </div>
704 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding">
705 <label
class=
"col-xs-4 col-sm-12">From</label>
706 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: fromName # <div
class=
"visible-xs-block"><br></div> (#: fromEmail #)</div></div>
708 <div
class=
"visible-xs-block col-xs-12"> </div>
709 <div
class=
"visible-xs-block col-xs-12"> </div>
710 <div
class=
"col-xs-12 col-sm-4 hcu-no-padding">
711 <label
class=
"col-xs-4 col-sm-12">Subject</label>
712 <div
class=
"col-xs-8 col-sm-12"><div
class=
"admIndent">#: subject #</div></div>
714 <div
class=
"col-xs-12"> </div>
715 <div
class=
"col-xs-12 hcu-no-padding">
716 <label
class=
"col-xs-12">Body of Email</label>
717 <div
class=
"col-xs-12"><div
id=
"previewEmailDiv">#= emailBody #</div></div>
727 <form
id=
"form" class=
"broadcastEmailsForm">
728 <div
class=
"container hcu-all-100 hcu-template vsgPrimary">
730 <div
class=
"col-xs-12 notificationRow"></div>
732 <div
class=
"col-xs-12">
734 <div
id=
"formValidateDiv" class=
"k-block k-error-colored formValidateDiv" style=
"display:none;"></div>
737 <div
class=
"well sm-well col-xs-12">
738 <div
class=
"toTheMax">
739 <div
class=
"row hcuSpacer templateRow">
740 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
741 <label
class=
"col-xs-12">Template</label>
743 <div
class=
"col-xs-12 col-sm-11 col-lg-5">
744 <div
class=
"col-xs-12 col-md-12">
745 <div
id=
"templateDDL" class=
"hcu-all-100"></div>
750 <div
class=
"row hcuSpacer">
751 <hr
class=
"col-xs-12">
753 <div
class=
"toTheMax">
754 <div
class=
"row hcuSpacer">
755 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
756 <label
class=
"col-xs-12">Email</label>
758 <div
class=
"col-xs-12 col-sm-5">
759 <div
class=
"col-xs-12">
760 <div
id=
"fromEmailDDL" class=
"hcu-all-100"></div>
761 <p
class=
"small vsgSecondary">Manage emails on the <a href=
"main.prg?ft=46">CU Email Notifications</a> screen.</p>
765 <div
class=
"visible-xs-block col-xs-12">
769 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
770 <label
class=
"col-xs-12">Name</label>
772 <div
class=
"col-xs-12 col-sm-5">
773 <div
class=
"col-xs-12">
774 <input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"fromName" required data-required-msg=
"Name is required" maxlength=
"100">
778 <div
class=
"col-xs-12">
782 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
783 <label
class=
"col-xs-12">Subject</label>
785 <div
class=
"col-xs-12 col-sm-5">
786 <div
class=
"col-xs-12">
787 <input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"subject" required data-required-msg=
"Subject is required" maxlength=
"255">
791 <div
class=
"visible-xs-block col-xs-12">
795 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
796 <label
class=
"col-xs-12">Select</label>
798 <div
class=
"col-xs-12 col-sm-5">
799 <div
class=
"col-xs-12">
800 <div
id=
"selectDDL" class=
"hcu-all-100"></div>
804 <div
class=
"col-xs-12">
808 <div
class=
"col-xs-12 col-sm-6 hcu-no-padding-nonmobile">
809 <div
class=
"col-xs-12">
810 <label>Only opt-in members </label><input type=
"checkbox" id=
"optinRequired" checked>
814 <div
class=
"visible-xs-block col-xs-12">
818 <div
class=
"col-xs-12 col-sm-6 hcu-no-padding-nonmobile">
819 <div
class=
"col-xs-12">
820 <label>Send Test Email </label><input type=
"checkbox" id=
"sendTestEmail">
824 <div
class=
"col-xs-12">
828 <div
id=
"emailAddressRow" style=
"display:none;">
829 <div
class=
"hidden-xs col-sm-1 hcu-no-padding-nonmobile">
830 <label
class=
"col-xs-12"> </label>
832 <div
class=
"hidden-xs col-sm-5">
833 <div
class=
"col-xs-12">
837 <div
class=
"col-xs-12 col-sm-1 hcu-no-padding-nonmobile">
838 <label
class=
"col-xs-12">Email</label>
840 <div
class=
"col-xs-12 col-sm-5">
841 <div
class=
"col-xs-12">
842 <input type=
"email" class=
"k-input k-textbox hcu-all-100" name=
"testEmail" data-required-msg=
"Test Email is required" 843 data-email-msg=
"Test Email is not valid" placeholder=
"Test email recipient">
848 <div
class=
"visible-xs-block col-xs-12">
854 <div
class=
"well sm-well col-xs-12">
855 <div
class=
"row hcuSpacer">
856 <div
class=
"h4">Email Body</div>
858 <div
class=
"row hcuSpacer" id=
"emailBodyDiv" tabindex=
"0">
859 <textarea
id=
"emailBody" name=
"emailBody" class=
"hcu-all-100"></textarea>
862 <div
class=
"col-xs-12">
863 <div
class=
"hcu-edit-buttons k-state-default row">
864 <span
class=
"hcu-icon-delete">
865 <a
class=
"removeBtn" href=
"#" style=
"display:none;"><i
class=
"fa fa-trash-o fa-lg"></i></a>
867 <a
class=
"previewBtn" href=
"#">Preview & Send</a>
869 <a
class=
"saveBtn k-button k-primary" href=
"#"><i
class=
"fa fa-check"></i>Save</a>