function CheckValidationErrors(ValidatingForm) { var wValidationFormID = ""; if (ValidatingForm != "") { wValidationFormID = "#" +ValidatingForm + " "; } if ($(wValidationFormID + ".field-validation-error").length > 0 || $(wValidationFormID + ".input-validation-error").length > 0) { var wErrorMessage = wThefollowingerrorsmustbecorrected + "\n\n";//"The following errors must be corrected:\n\n"; var wFirstErrorField = ""; var wScrollTarget = null; var wFirstErrorFields =[]; for (var i = 0; i < $(wValidationFormID + ".field-validation-error").length; i++) { var wParentNode = $(wValidationFormID + ".field-validation-error")[i].parentNode; wFirstErrorFields.push($(wValidationFormID + ".field-validation-error")[i].innerText); while (wParentNode != null) { if ($(wParentNode).hasClass('form-group')) { break; } wParentNode = wParentNode.parentNode; } if (wScrollTarget == null) { wScrollTarget = $(wParentNode).closest('.form-group'); $(wScrollTarget)[0].scrollIntoView(); } if (wParentNode != null) { $(wParentNode).addClass('has-feedback'); $(wParentNode).addClass('has-error'); } } if (wFirstErrorFields.length > 0) { var validation_summary_area = $('.validation-summary', $('#' +ValidatingForm)) //$(ValidatingForm)(".validation-summary"); if (validation_summary_area != null && validation_summary_area.length > 0) { var wValidationFieldArea = $(validation_summary_area[0]); if(!wValidationFieldArea.hasClass('alert')) { wValidationFieldArea.addClass("alert"); } if (!wValidationFieldArea.hasClass('alert-danger')) { wValidationFieldArea.addClass("alert-danger"); } $(validation_summary_area)[0].scrollIntoView(); } } if (wValidationFormID != "") { $(wValidationFormID).find(":submit").removeClass('disabled submit-disabled'); } else { $('.submit-disabled').removeClass('disabled submit-disabled'); } } } function RegisterFormValidation(JQueryFormCtrl) { $.validator.unobtrusive.parse(JQueryFormCtrl); JQueryFormCtrl.submit(function (e) { var wFormID = e.target.id; //if (wFormID != "") { $(this).find(".form-group.has-feedback").removeClass("has-feedback"); $(this).find(".form-group.has-error").removeClass("has-error"); var wForm = "#" +wFormID; //$(wForm).validate().form(); $(this).find(":submit:not(.no-disable)").addClass('disabled submit-disabled') $(this).validate().form(); CheckValidationErrors(wFormID); } //return false; }); } var LinkHasChangesSelecter = 'a[href]:not([href^="javascript"], [href^="#"], [btn-type^="redirect"])'; var tempTab; var wLostFocusClickedTabEvent; function ApplyHasChangesCheck() { var ClickedTab = null; var mContinuewithTabClickEvent = false; function CheckAppropriateAction(aButton) { var wResettingForm = null; var wClickEvent = aButton.attr("onclick"); var wHREFValue = aButton.attr("href"); var wBtnTypeValue = aButton.attr("btn-type"); if (wClickEvent == null ){ if (wHREFValue == "#" || wHREFValue == "javascript:void(0)") { wResettingForm = $(aButton).parents('form:first'); } else if (wBtnTypeValue == "redirect" && wHREFValue != "") { $(window).off('beforeunload'); return; } } return wResettingForm; } function ActiveTabHasChanges() { if (tempTab != null) { this.ActiveTab = TabInfo(tempTab); } else { this.ActiveTab = TabInfo($('a[data-toggle="tab"]').parents('.active')); } this.HasChanges = false; if (ActiveTab != null) { this.Tab = ActiveTab.Tab; this.Panel = ActiveTab.Panel; if (ActiveTab == null || Tab == null || Panel == null || mContinuewithTabClickEvent) { this.HasChanges = false; } else { this.HasChanges = CheckPanelHasChanges(Panel); } } return this; } function CheckPanelHasChanges(wPanel) { wHasChanges = false; $(wPanel).find('form').each(function () { if (wHasChanges) { return; } wHasChanges = CheckFormHasChanges($(this)) }); return wHasChanges; } function URLLinkClickEvent(e) { tempTab = $(this).parent().parent().find('.active'); var URLTabClicked = TabInfo(tempTab); if (URLTabClicked.Panel == null || URLTabClicked.Panel === undefined || URLTabClicked.Panel.length <= 0) { tempTab = $(this).parent().parent().parent().parent().find('li.active [data-toggle=tab]'); } if (ActiveTabHasChanges().HasChanges) { e.preventDefault(); ClickedTab = this; PromptForTabSave(ActiveTab.Tab, ActiveTab.Panel); } } function CheckFormHasChanges(wForm) { wHasChanges = false; var ForceChangesCheck = false; //[data-toggle="popover"] if ($(wForm).attr("haschangescheck") != null && $(wForm).attr("haschangescheck").toLowerCase() == "false") { return; } else if ($(wForm).attr("haschangescheck") != null && $(wForm).attr("haschangescheck").toLowerCase() == "true") { ForceChangesCheck = true; } $(wForm).find(':input').each(function () { if (wHasChanges || ($(this).attr("HasChangesCheck") !== undefined && $(this).attr("HasChangesCheck").toLowerCase() == "false")) { return; } if ($(this)[0].name != "multiselect") { var wOrignialValue = $(this).attr("OriginalValue"); if (wOrignialValue == null) { wOrignialValue = $(this).attr("originalvalue"); } if(wOrignialValue == null){ if (ForceChangesCheck){ wOrignialValue = ""; } } if (wOrignialValue != null) { switch ($(this)[0].nodeName) { case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; case "checkbox": //if(wOrignialValue.toLowerCase() != $(this)[0].checked.toString().toLowerCase()){ if (wOrignialValue.toLowerCase() != $(this)[0].checked.toString().toLowerCase()) { wHasChanges = true; return } break; case "radio": if (wOrignialValue.toLowerCase() == $(this).val().toString().toLowerCase()) { if (!$(this)[0].checked) { wHasChanges = true; return } } break; default: if (wOrignialValue != $(this).val()) { wHasChanges = true; return } break; } case "SELECT": wMultiSelect = ($(this).hasClass("multiselect") ? true : false); wOrignialSelected = wOrignialValue.toLowerCase().split("^"); if ($(this)[0].name.indexOf('FilterCriteria') == 0 && wOrignialValue.indexOf('^') < 0) { wOrignialSelected = wOrignialValue.toLowerCase().split(","); } for (s = 0; s < $(this)[0].length; ++s) { if ($(this)[0].options[s].selected) { if (wOrignialSelected.indexOf($(this)[0].options[s].value.toLowerCase()) < 0) { wHasChanges = true; return } } else { if (wOrignialSelected.indexOf($(this)[0].options[s].value.toLowerCase()) >= 0) { wHasChanges = true; return } } } break; } } else { switch ($(this)[0].nodeName) { case "INPUT": switch ($(this).attr("type")) { case "radio": if ($(this)[0].name.toLowerCase().indexOf("default") == 0 && $(this)[0].checked) { wHasChanges = true; return } break; case "password": if ($(this).val() != "") { wHasChanges = true; return } break } break; } } } }); return wHasChanges; } function FocusFirstFormControl(aFormCtrl) { var wFirstCtrl = null; if (aFormCtrl != null && aFormCtrl.length > 0) { $(aFormCtrl).find(':input').each(function () { switch ($(this)[0].nodeName) { case "SELECT": case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; default: if (wFirstCtrl == null) { wFirstCtrl = $(this); } break; } break; } }); } if (wFirstCtrl != null) { wFirstCtrl.focus(); } } $("a.btn.btn-link[btn-type=reset], button.btn.btn-link[btn-type=reset]").click(function (e) { var wResettingForm = CheckAppropriateAction($(this)); if (wResettingForm != null && wResettingForm.length > 0) { wResettingForm[0].reset(); FocusFirstFormControl(wResettingForm); } }); $("a.btn.btn-link[btn-type=clear], button.btn.btn-link[btn-type=clear]").click(function (e) { var wResettingForm = CheckAppropriateAction($(this)); if (wResettingForm != null && wResettingForm.length > 0) { $(wResettingForm).find(':input').each(function () { if ($(this)[0].name != "multiselect") { switch ($(this)[0].nodeName) { case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; case "radio": case "checkbox": $(this)[0].checked = false; break; default: $(this).val(""); break; } break; case "SELECT": wMultiSelect = ($(this).hasClass("multiselect") ? true : false); if (wMultiSelect) { $(this).multiselect('clearSelection'); } for (s = 0; s < $(this)[0].length; ++s) { $(this)[0].options[s].selected = false; } if (wMultiSelect) { $(this).multiselect('rebuild'); } $(this).trigger("change"); break; } } }); FocusFirstFormControl(wResettingForm) } }); $("a.btn.btn-link[btn-type=redirect], button.btn.btn-link[btn-type=redirect]").click(function (e) { var wResettingForm = CheckAppropriateAction($(this)); }); $("a.btn.btn-link[btn-type=restore], button.btn.btn-link[btn-type=restore]").click(function (e) { var wResettingForm = CheckAppropriateAction($(this)); RestoreFormOriginalValue(wResettingForm); }); function RestoreFormOriginalValue(aForm) { if (aForm != null && aForm.length > 0) { $(aForm).find(':input').each(function () { if ($(this)[0].name != "multiselect") { var wOrignialValue = $(this).attr("OriginalValue"); if (wOrignialValue == null) { wOrignialValue = $(this).attr("originalvalue"); } if (wOrignialValue == null) { wOrignialValue = ""; } if (wOrignialValue != null) { switch ($(this)[0].nodeName) { case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; case "radio": case "checkbox": if (wOrignialValue != null && (wOrignialValue.toLowerCase().trim() == $(this).val().toLowerCase().trim() || wOrignialValue.toLowerCase().trim() == "true")) { $(this)[0].checked = true; } else { $(this)[0].checked = false; } break; default: $(this).val(wOrignialValue) break; } break; case "SELECT": wMultiSelect = ($(this).hasClass("multiselect") ? true : false); if (wMultiSelect) { $(this).multiselect('clearSelection'); } wOrignialSelected = wOrignialValue.toLowerCase().split("^"); if ($(this)[0].name.indexOf('FilterCriteria') == 0 && wOrignialValue.indexOf('^') < 0) { wOrignialSelected = wOrignialValue.toLowerCase().split(","); } for (s = 0; s < $(this)[0].length; ++s) { if (wOrignialSelected.indexOf($(this)[0].options[s].value.toLowerCase()) >= 0) { $(this)[0].options[s].selected = true; } else { $(this)[0].options[s].selected = false; } } if (wMultiSelect) { $(this).multiselect('rebuild'); } $(this).trigger("change"); break; } } else { switch ($(this)[0].nodeName) { case "INPUT": switch ($(this).attr("type")) { case "radio": if ($(this)[0].name.toLowerCase().indexOf("default") == 0 && $(this)[0].checked) { $(this)[0].checked = false; } break; case "password": $(this).val(""); break; } break; } } } }); } } $('[data-toggle=tab]').each(function () { var TabItem = this; var TabCtrl = $(this).parents('li'); if (TabItem.addEventListener) { TabItem.addEventListener('click', function (e) { ClickedTab = this; tempTab = $(this).parent().parent().find('.active'); if (tempTab != null && tempTab.length == 0) { tempTab = $(this).parent().parent().find('[aria-expanded="true"]'); } //$(ClickedTab).find('') // var ActiveTab = $(this).parents('.active'); var ActiveTab = ActiveTabHasChanges() if (ActiveTab.HasChanges) { e.stopImmediatePropagation(); PromptForTabSave(ActiveTab.Tab, ActiveTab.Panel); } else if (ActiveTab.Tab.hasClass('badge')) { ActiveTab.Tab.removeClass('badge'); } }, true); } else { TabItem.attachEvent("onclick", function (e) { ClickedTab = this; tempTab = $(this).parent().parent().find('.active'); if (tempTab != null && tempTab.length == 0) { tempTab = $(this).parent().parent().find('[aria-expanded="true"]'); } // var ActiveTab = $(this).parents('.active'); var ActiveTab = ActiveTabHasChanges() if (ActiveTab.HasChanges) { e.stopImmediatePropagation(); PromptForTabSave(ActiveTab.Tab, ActiveTab.Panel); } else if (ActiveTab.Tab.hasClass('badge')) { ActiveTab.Tab.removeClass('badge'); } }); } }); if ($('form a.btn[type=submit], button.btn[type=submit]').length > 0) { $('form a.btn[type=submit], button.btn[type=submit]').parents('form').submit(function (event) { $(window).unbind("beforeunload"); }); $('form a.btn[btn-type=redirect], button.btn[btn-type=redirect]').parents('form').submit(function (event) { $(window).unbind("beforeunload"); }); //$(document).ajaxComplete(function (event, xhr, settings) { // $(window).off('beforeunload', BeforeUnloadCheck()); // $(window).on('beforeunload', BeforeUnloadCheck()); //}); $(window).on('beforeunload', function (e) { tempTab = $(this).parent().parent().find('.active'); var URLTabClicked = TabInfo(tempTab); if (URLTabClicked.Panel == null || URLTabClicked.Panel === undefined || URLTabClicked.Panel.length <= 0) { tempTab = $(this).parent().parent().parent().parent().find('li.active [data-toggle=tab]'); } if (ActiveTabHasChanges().HasChanges) { return wThereAreUnsavedChanges; } }); $(LinkHasChangesSelecter).on("click", URLLinkClickEvent); } PrompDialog = $('#eRadDialog').dialog({ autoOpen: false, width: 'auto', // overcomes width:'auto' and maxWidth bug maxWidth: 600, height: 'auto', modal: true, fluid: true, //new option resizable: false // buttons: { // "Save Changes": function() { // ActiveTab.addClass('badge'); // $(ActivePanel).find("a:contains('Save'), button:contains('Save')").each(function () { // $(this).click(); // }); // mContinuewithTabClickEvent = true; // ClickedTab.click(); // $( this ).dialog( "close" ); // //e.continueEventPropegationAsIfNothingHappened(); // }, // "Revert Changes": function() { // //$(ActivePanel).find('a[text=Cancel]').each(function () { // $(ActivePanel).find("a:contains('Cancel'), button:contains('Cancel')").each(function () { // $(this).click(); // }); // mContinuewithTabClickEvent = true; // ClickedTab.click(); // //ev.resume(); // //ActiveTab.find('> a')[0].parent.trigger(e); // $( this ).dialog( "close" ); // //e.continueEventPropegationAsIfNothingHappened(); // }, // // Cancel: function() { // e.stopImmediatePropagation(); // $( this ).dialog( "close" ); // } // }, // close: function(){ // mContinuewithTabClickEvent = false; // } }); $('.ui-dialog-titlebar-close').html('' + wClose + '') function PromptForTabSave(ActiveTab, ActivePanel) { if (jsClientApplicationCode !== undefined && jsClientApplicationCode !== null && jsClientApplicationCode === "PatientPortal") { hideLoadingOverlay($("body")); } var wSaveButtonText = wSaveChanges;//"Save Changes"; if ($(ActivePanel).find("a:contains(" + wSave.toLowerCase() + "),a:contains(" + wSave + "),a:contains(" + wSave.toUpperCase() + "),a:contains(" + wSubmit.toLowerCase() + "),a:contains(" + wSubmit + "),a:contains(" + wSubmit.toUpperCase() + "), a:contains(" + wSend.toLowerCase() + "),a:contains(" + wSend + "),a:contains(" + wSend.toUpperCase() + "), button[type=submit]:contains(" + wSave.toLowerCase() + "),button[type=submit]:contains(" + wSave + "),button[type=submit]:contains(" + wSave.toUpperCase() + "), button[type=submit]:contains(" + wSend.toLowerCase() + "), button[type=submit]:contains(" + wSend + "), button[type=submit]:contains(" + wSend.toUpperCase() + "), button[type=submit]:contains(" + wSubmit.toLowerCase() + "), button[type=submit]:contains(" + wSubmit + "), button[type=submit]:contains(" + wSubmit.toUpperCase() + ")").length) { wSaveButtonText = wSend;//"Send"; } PrompDialog.dialog({ title: wConfirmationRequired,//"Confirmation Required", message: "", draggable: false, open: function () { $(this).html(wThereareunsavedchanges);//"There are unsaved changes." }, buttons: [{ text:wSaveChanges, click: function () { //ActiveTab.addClass('badge'); if ($(ActivePanel).find('form').valid()) { $(ActivePanel).find("a:contains(" + wSave.toLowerCase() + "),a:contains(" + wSave + "),a:contains(" + wSave.toUpperCase() + "),a:contains(" + wSubmit.toLowerCase() + "),a:contains(" + wSubmit + "),a:contains(" + wSubmit.toUpperCase() + "), a:contains(" + wSend.toLowerCase() + "),a:contains(" + wSend + "),a:contains(" + wSend.toUpperCase() + "), button[type=submit]:contains(" + wSave.toLowerCase() + "),button[type=submit]:contains(" + wSave + "),button[type=submit]:contains(" + wSave.toUpperCase() + "), button[type=submit]:contains(" + wSend.toLowerCase() + "), button[type=submit]:contains(" + wSend + "), button[type=submit]:contains(" + wSend.toUpperCase() + "), button[type=submit]:contains(" + wSubmit.toLowerCase() + "), button[type=submit]:contains(" + wSubmit + "), button[type=submit]:contains(" + wSubmit.toUpperCase() + "), button[type=button]:contains(" + wSave.toLowerCase() + "),button[type=button]:contains(" + wSave + "),button[type=button]:contains(" + wSave.toUpperCase() + "), button[type=button]:contains(" + wSend.toLowerCase() + "), button[type=button]:contains(" + wSend + "), button[type=button]:contains(" + wSend.toUpperCase() + "), button[type=button]:contains(" + wSubmit.toLowerCase() + "), button[type=button]:contains(" + wSubmit + "), button[type=button]:contains(" + wSubmit.toUpperCase() + ")").each(function (key, value) { if (ClickedTab != null) { wLostFocusClickedTabEvent = ClickedTab; } if (CheckFormHasChanges(value.form)) { $(value).click(); //if (value.form != null && value.form && !value.form.hasAttribute("data-ajax") && value.form.hasAttribute("action")) { // $.ajax({ // type: (value.form.hasAttribute("method") ? $(value.form).attr("method").toUpperCase() : "POST"), // url: $(value.form).attr("action"), // data: $(value.form).serialize() // }); //} else { // $(value).click();//trigger("click"); //} } }); mContinuewithTabClickEvent = true; if (ClickedTab != null) { ClickedTab.click(); ClickedTab = null; } //e.continueEventPropegationAsIfNothingHappened(); } else { CheckValidationErrors($(ActivePanel).find('form').attr('id')); toastr.error(wTheformcouldnotbesavedPleasechecktheformfieldsforerrors);//"The form could not be saved. Please check the form fields for errors." } $(this).dialog("close"); }, },{ text:wDiscardChanges, click: function () { //$(ActivePanel).find('a[text=Cancel]').each(function () { var OriginalClickedTab = ClickedTab; try { $(LinkHasChangesSelecter).off("click", URLLinkClickEvent); $(ActivePanel).find("a:contains(" + wCancel.toLowerCase() + "), button:contains(" + wCancel.toLowerCase() + "),a:contains(" + wCancel + "), button:contains(" + wCancel + "),a:contains(" + wCancel.toUpperCase() + "), button:contains(" + wCancel.toUpperCase() + ")").each(function (key, value) { if ($(value).attr("btn-type") == null || $(value).attr("btn-type").toLowerCase() == "redirect") { RestoreFormOriginalValue($(value).closest('form')); } else { $(value).focus(); $(value).click();//trigger("click"); } }); mContinuewithTabClickEvent = true; if (OriginalClickedTab != null) { OriginalClickedTab.focus(); OriginalClickedTab.click(); OriginalClickedTab = null; } } finally { $(LinkHasChangesSelecter).on("click", URLLinkClickEvent); } //ev.resume(); //ActiveTab.find('> a')[0].parent.trigger(e); $(this).dialog("close"); //e.continueEventPropegationAsIfNothingHappened(); }, }, { text: wCancel, click: function () { //e.stopImmediatePropagation(); $(this).dialog("close"); } } ] , close: function () { mContinuewithTabClickEvent = false; } }); PrompDialog.dialog("open"); } } function UpdateOriginalValue(wSavingForm) { if (wSavingForm.indexOf("#") < 0) { wSavingForm = "#" + wSavingForm; } var wSavingFormJqueryID = wSavingForm; $(wSavingForm).find(':input').each(function () { if ($(this)[0].name != "multiselect") { var wOrignialValue = $(this).attr("OriginalValue"); if (wOrignialValue == null) { wOrignialValue = $(this).attr("originalvalue"); } var wNewUpdatedValue = ""; if (wOrignialValue != null) { switch ($(this)[0].nodeName) { case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; case "radio": wNewUpdatedValue = ($(this)[0].checked ? $(this).val() : GroupedControlCheckedValue($(wSavingFormJqueryID + " input[name='" + $(this)[0].name + "']"))); break; case "checkbox": wNewUpdatedValue = $(this)[0].checked; break; default: wNewUpdatedValue = $(this).val(); break; } break; case "SELECT": wMultiSelect = ($(this).hasClass("multiselect") ? true : false); wOrignialSelected = wOrignialValue.split("^"); if ($(this)[0].name.indexOf('FilterCriteria') == 0 && wOrignialValue.indexOf('^') < 0) { wOrignialSelected = wOrignialValue.split(","); } for (s = 0; s < $(this)[0].length; ++s) { if ($(this)[0].options[s].selected) { wNewUpdatedValue += $(this)[0].options[s].value if (wMultiSelect) { wNewUpdatedValue += "^"; } else { break; } } } break; } $(this).attr("originalvalue", wNewUpdatedValue) } else { switch ($(this)[0].nodeName) { case "TEXTAREA": case "INPUT": switch ($(this).attr("type")) { case "hidden": break; case "radio": case "checkbox": if (!$(this).eq(0).is(':checked')) { $(this).eq(0).attr('checked', false); } else { $(this).eq(0).attr('checked', true); } break; default: $(this).attr("originalvalue", $(this).val()) break; } break; case "SELECT": wMultiSelect = ($(this).hasClass("multiselect") ? true : false); for (s = 0; s < $(this)[0].length; ++s) { if ($(this)[0].options[s].selected) { wNewUpdatedValue += $(this)[0].options[s].value if (wMultiSelect) { wNewUpdatedValue += "^"; } else { break; } } } $(this).attr("originalvalue", wNewUpdatedValue) break; } } } }); } function GroupedControlCheckedValue(aGroupedControls) { var OriginalValue = ""; aGroupedControls.each(function () { if ($(this)[0].checked) { OriginalValue = $(this).val().toString(); return; } }); return OriginalValue; }