/* Minification failed. Returning unminified contents.
(102,13-22): run-time error JS1300: Strict-mode does not allow assignment to undefined variables: mAjaxCall
(96,9-18): run-time error JS1300: Strict-mode does not allow assignment to undefined variables: mAjaxCall
 */
/*! AdminLTE app.js
 * ================
 * Main JS application file for AdminLTE v2. This file
 * should be included in all pages. It controls some layout
 * options and implements exclusive AdminLTE plugins.
 *
 * @Author  Almsaeed Studio
 * @Support <http://www.almsaeedstudio.com>
 * @Email   <support@almsaeedstudio.com>
 * @version 2.0.4
 * @license MIT <http://opensource.org/licenses/MIT>
 */
"use strict";if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");$.AdminLTE={},$.AdminLTE.options={navbarMenuSlimscroll:!0,navbarMenuSlimscrollWidth:"3px",navbarMenuHeight:"200px",sidebarToggleSelector:"[data-toggle='offcanvas']",sidebarPushMenu:!0,sidebarSlimScroll:!0,enableBoxRefresh:!0,enableBSToppltip:!0,BSTooltipSelector:"[data-toggle='tooltip']",enableFastclick:!0,enableBoxWidget:!0,boxWidgetOptions:{boxWidgetIcons:{collapse:"fa fa-minus",open:"fa fa-plus",remove:"fa fa-times"},boxWidgetSelectors:{remove:'[data-widget="remove"]',collapse:'[data-widget="collapse"]'}},directChat:{enable:!0,contactToggleSelector:'[data-widget="chat-pane-toggle"]'},colors:{lightBlue:"#3c8dbc",red:"#f56954",green:"#00a65a",aqua:"#00c0ef",yellow:"#f39c12",blue:"#0073b7",navy:"#001F3F",teal:"#39CCCC",olive:"#3D9970",lime:"#01FF70",orange:"#FF851B",fuchsia:"#F012BE",purple:"#8E24AA",maroon:"#D81B60",black:"#222222",gray:"#d2d6de"},screenSizes:{xs:480,sm:768,md:992,lg:1200}},$(function(){var a=$.AdminLTE.options;$.AdminLTE.layout.activate(),$.AdminLTE.tree(".sidebar"),a.navbarMenuSlimscroll&&"undefined"!=typeof $.fn.slimscroll&&$(".navbar .menu").slimscroll({height:"200px",alwaysVisible:!1,size:"3px"}).css("width","100%"),a.sidebarPushMenu&&$.AdminLTE.pushMenu(a.sidebarToggleSelector),a.enableBSToppltip&&$(a.BSTooltipSelector).tooltip(),a.enableBoxWidget&&$.AdminLTE.boxWidget.activate(),a.enableFastclick&&"undefined"!=typeof FastClick&&FastClick.attach(document.body),a.directChat.enable&&$(a.directChat.contactToggleSelector).click(function(){var a=$(this).parents(".direct-chat").first();a.toggleClass("direct-chat-contacts-open")}),$('.btn-group[data-toggle="btn-toggle"]').each(function(){var a=$(this);$(this).find(".btn").click(function(b){a.find(".btn.active").removeClass("active"),$(this).addClass("active"),b.preventDefault()})})}),$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();$("body").hasClass("fixed")?$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight()):b>=c?$(".content-wrapper, .right-side").css("min-height",b-a):$(".content-wrapper, .right-side").css("min-height",c)},fixSidebar:function(){return $("body").hasClass("fixed")?("undefined"==typeof $.fn.slimScroll&&console&&console.error("Error: the fixed layout requires the slimscroll plugin!"),void($.AdminLTE.options.sidebarSlimScroll&&"undefined"!=typeof $.fn.slimScroll&&($(".sidebar").slimScroll({destroy:!0}).height("auto"),$(".sidebar").slimscroll({height:$(window).height()-$(".main-header").height()+"px",color:"rgba(0,0,0,0.2)",size:"3px"})))):void("undefined"!=typeof $.fn.slimScroll&&$(".sidebar").slimScroll({destroy:!0}).height("auto"))}},$.AdminLTE.pushMenu=function(a){var b=this.options.screenSizes;$(a).click(function(a){a.preventDefault(),$(window).width()>b.sm-1?$("body").toggleClass("sidebar-collapse"):$("body").hasClass("sidebar-open")?($("body").removeClass("sidebar-open"),$("body").removeClass("sidebar-collapse")):$("body").addClass("sidebar-open")}),$(".content-wrapper").click(function(){$(window).width()<=b.sm-1&&$("body").hasClass("sidebar-open")&&$("body").removeClass("sidebar-open")})},$.AdminLTE.tree=function(a){var b=this;$("li a",$(a)).click(function(a){var c=$(this),d=c.next();if(d.is(".treeview-menu")&&d.is(":visible"))d.slideUp("normal",function(){d.removeClass("menu-open")}),d.parent("li").removeClass("active");else if(d.is(".treeview-menu")&&!d.is(":visible")){var e=c.parents("ul").first(),f=e.find("ul:visible").slideUp("normal");f.removeClass("menu-open");var g=c.parent("li");d.slideDown("normal",function(){d.addClass("menu-open"),e.find("li.active").removeClass("active"),g.addClass("active"),b.layout.fix()})}d.is(".treeview-menu")&&a.preventDefault()})},$.AdminLTE.boxWidget={activate:function(){var a=$.AdminLTE.options,b=this;$(a.boxWidgetOptions.boxWidgetSelectors.collapse).click(function(a){a.preventDefault(),b.collapse($(this))}),$(a.boxWidgetOptions.boxWidgetSelectors.remove).click(function(a){a.preventDefault(),b.remove($(this))})},collapse:function(a){var b=a.parents(".box").first(),c=b.find(".box-body, .box-footer");b.hasClass("collapsed-box")?(a.children(".fa-plus").removeClass("fa-plus").addClass("fa-minus"),c.slideDown(300,function(){b.removeClass("collapsed-box")})):(a.children(".fa-minus").removeClass("fa-minus").addClass("fa-plus"),c.slideUp(300,function(){b.addClass("collapsed-box")}))},remove:function(a){var b=a.parents(".box").first();b.slideUp()},options:$.AdminLTE.options.boxWidgetOptions},function(a){a.fn.boxRefresh=function(b){function c(a){a.append(f),e.onLoadStart.call(a)}function d(a){a.find(f).remove(),e.onLoadDone.call(a)}var e=a.extend({trigger:".refresh-btn",source:"",onLoadStart:function(){},onLoadDone:function(){}},b),f=a('<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>');return this.each(function(){if(""===e.source)return void(console&&console.log("Please specify a source first - boxRefresh()"));var b=a(this),f=b.find(e.trigger).first();f.click(function(a){a.preventDefault(),c(b),b.find(".box-body").load(e.source,function(){d(b)})})})}}(jQuery),function(a){a.fn.todolist=function(b){var c=a.extend({onCheck:function(){},onUncheck:function(){}},b);return this.each(function(){"undefined"!=typeof a.fn.iCheck?(a("input",this).on("ifChecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onCheck.call(b)}),a("input",this).on("ifUnchecked",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onUncheck.call(b)})):a("input",this).on("change",function(){var b=a(this).parents("li").first();b.toggleClass("done"),c.onCheck.call(b)})})}}(jQuery);;
function attachDynamicModals() {
    // Dynamic launch of modals
    $("a[data-showmodal='1']").bind("click", function () {

        var modalId = $(this).attr("data-showmodalid");
        var modal = $("#" + modalId + "Modal");

        if (modal.length > 0) {
            focusWhenModalShown(modal);

            var titleCtrl = $(modal).find(".modal-title");
            var title = titleCtrl.html();

            var replaceTagWith2 = $(this).attr("data-showModalReplaceTitle2");
            if (replaceTagWith2 != '') $(titleCtrl).html(title.replace("{0}", replaceTagWith2));
            else {
                var replaceTagWith = $(this).attr("data-showModalReplaceTitle");
                if (replaceTagWith != '') $(titleCtrl).html(title.replace("{0}", replaceTagWith));
            }

            $(modal).find("input[name='Id']").val($(this).attr("data-showModalReplaceId"));

            $(modal).modal('show');
        }
    });
}

function focusWhenModalShown(ctrl) {
    $(ctrl).on('shown.bs.modal', function () {
        var inputs = $(this).find("input");
        if (inputs.length > 0) inputs[0].focus();
    });
}

$(function () {

    attachDynamicModals();

    // Focus first text box when any modal is shown
    focusWhenModalShown($('.modal'));

    setTimeout(function () {
        var inputs = $(".content").find("form:first").find("input[type='text']");
        if (inputs.length > 0) inputs[0].focus();
    }, 20);

    // extend jquery range validator to work for required checkboxes
    var defaultRangeValidator = $.validator.methods.range;
    $.validator.methods.range = function (value, element, param) {
        if (element.type === 'checkbox') {
            // if it's a checkbox return true if it is checked
            return element.checked;
        } else {
            // otherwise run the default validation function
            return defaultRangeValidator.call(this, value, element, param);
        }
    }

    $("#AddRegistrationItem").bind("click", function () {

        //var programId = $("input[name='ProgramID']").val();
        var nb = $(".registration-item").length;

        nb++;

        $.get('/Registration/AddRegistrationItem?nb=' + nb, function (data) {

            $('#RegistrationItemsWrapper').append(data);

            $('form[Action="/Registration/Create"]').data('validator', null);
            $.validator.unobtrusive.parse($('form[Action="/Registration/Create"]'));

            var costItem = $(".cost-item").html();
            $(".nb-items").html(nb);
            $(".total-cost").html(nb * costItem);
        }); 
    });

    $("#btnSendReminders").bind("click", function () {

        displayLoader($("#DefaultGrid"));

        mAjaxCall = $.post("/Registration/SendReminders", getParams(), function (data) {
            //
        }).fail(function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus);
            console.log(errorThrown);
        }).always(function () {
            mAjaxCall = null;
            hideLoader();
        }); 
    });

    $("#btnExport").bind("click", function () {

        displayLoader($("#DefaultGrid"));

        var urlParams = $.param(getParams());
        window.location.href = "/Registration/Export?" + urlParams;

        hideLoader();
    });

    $("#btnExport2").bind("click", function () {

        displayLoader($("#DefaultGrid"));

        var urlParams = $.param(getParams());
        window.location.href = "/Registration/Export2?" + urlParams;

        hideLoader();
    });

    function getParams() {
        var params = {
            searchValue: $("input[name='txtSearch']").val()
        };

        if ($("#SearchSpecific0").length > 0)
            params.SearchSpecific0 = $("#SearchSpecific0").val();

        if ($("#SearchSpecific1").length > 0)
            params.SearchSpecific1 = $("#SearchSpecific1").val();

        if ($("#SearchSpecific2").length > 0)
            params.SearchSpecific2 = $("#SearchSpecific2").val();

        if ($("#SearchSpecific3").length > 0)
            params.SearchSpecific3 = $("#SearchSpecific3").val();

        if ($("#SearchSpecific4").length > 0)
            params.SearchSpecific4 = $("#SearchSpecific4").val();

        if ($("input[name='reminderRmk']").length > 0)
            params.reminderRmk = $("input[name='reminderRmk']").val();

        return params;
    }
});

// Display a loading gif in the center of ctrl
function displayLoader(ctrl) {
    if (ctrl.length == 0) return;
    $(ctrl).css("min-height", "300px");
    var destination = ctrl.offset();
    var topWindow = $(window).height() / 2;
    var topCtrl = destination.top + (parseInt(ctrl.css("height")) / 2);
    if (topWindow < topCtrl) topCtrl = topWindow;
    $("#loader").css({
        top: topCtrl,
        left: destination.left + (parseInt(ctrl.css("width")) / 2),
        width: destination.width,
        height: destination.height
    });
    $("#loader").show();
}

// Hide loading gif
function hideLoader() {
    $("#loader").hide();
};
var password = (function () {
    "use strict";

    var minPasswordLength = 6;
 
    var _hasLowerCase = /[a-z]/;
    var _hasUpperCase = /[A-Z]/;
    var _hasDigit = /\d/;
    // match special characters except space
    var _hasSpecial = /(_|[^\w\d ])/;
  
    var password = [];
    var password2 = [];

    var hasEightCharsListItem,
        hasUpperCaseListItem,
        hasLowerCaseListItem,
        hasSpecialListItem,
        hasDigitListItem;
  
    // Enforces that password2 = password, and display an error message if it does not
    var mustMatch = function () {

        if (password.val() !== password2.val()) {
            // show not matching error
            password2.addClass('invalid');
            return false;
        }

        password2.removeClass('invalid');
        return true;
    };

    // check validation and adjust classes
    var checkAndSwitchClasses = function (has, $element) {
        if (has) {
            $element.find(".glyphicon").removeClass("glyphicon-remove-circle").removeClass('invalid').addClass('valid').addClass("glyphicon-ok-circle");
            return true;
        }

        $element.find(".glyphicon").removeClass("glyphicon-ok-circle").removeClass('valid').addClass('invalid').addClass("glyphicon-remove-circle");
        return false;

    };

    // Enforces server side password rules on the client for convenience
    var enforceRules = function () {
      
        $('.invalid').removeClass('invalid');

        var pw = password.val().toLowerCase();

        var hasEight = pw.length >= minPasswordLength;
        var hasLower = _hasLowerCase.test(password.val());
        var hasUpper = _hasUpperCase.test(password.val());
        var hasDigit = _hasDigit.test(password.val());
        var hasSpecial = _hasSpecial.test(password.val());
      
        checkAndSwitchClasses(hasEight, hasEightCharsListItem);
        checkAndSwitchClasses(hasLower, hasLowerCaseListItem);
        checkAndSwitchClasses(hasUpper, hasUpperCaseListItem);
        checkAndSwitchClasses(hasDigit, hasDigitListItem);
        checkAndSwitchClasses(hasSpecial, hasSpecialListItem);
      
        if (pw.length === 0) $('.invalid').removeClass('invalid');
      
        // don't move forward until the password is actually *good*
/*        if (!(hasEight && hasLower && hasUpper && hasDigit && hasSpecial)) {
            return false;
        }*/

      if (mustMatch() && (hasEight && hasLower && hasUpper && hasDigit && hasSpecial)){
        $('#submit').addClass('valid');
      } else {
        $('#submit').removeClass('valid');
      }
    };

    return {
        
        init: function () {
            // hook all password/password2 fields on a page
            password = $('#pwd');
            password2 = $('#pwd-vrf');
          
            // hook all req list items
            hasEightCharsListItem = $('#req-length');
            hasUpperCaseListItem = $('#req-upper');
            hasLowerCaseListItem = $('#req-lower');
            hasSpecialListItem = $('#req-special');
            hasDigitListItem = $('#req-digit');

            password.keyup(enforceRules);
            password2.keyup(enforceRules);

        }
    };
}());;
(function ($) {

    $.fn.search = function (method) {

        var mOptions;
        var mAjaxCall;
        var mPage = 1;

        var _currentSortOrder = 1;
        var _currentSortParameter = null;
        var _previousSortParameter = null;
        var _previousCtrlTH = null;

        var methods = { init: init };

        if (methods[method]) return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        else if (typeof method === 'object' || !method) return methods.init.apply(this, arguments);
        else $.error('Method ' + method + ' does not exist on search plugin'); // todo update with resource

        function init(options) {

            var defaultOptions = {
                "container": "#DefaultGrid",
                "actionName": null,
                "searchInput": "input[name='txtSearch']"
            };

            mOptions = $.extend(defaultOptions, options);

            // search when input changes
            $(mOptions.searchInput).bind("paste keyup", function () {
                search(true);
            });

            $("#SearchSpecific0").bind("change", function () {

                $("input[name='SearchSpecific0']").val($(this).val());

                search(true);
            });

            $("#SearchSpecific1").bind("change", function () {

                $("input[name='SearchSpecific1']").val($(this).val());

                search(true);
            });

            $("#SearchSpecific2").bind("change", function () {

                $("input[name='SearchSpecific2']").val($(this).val());

                search(true);
            });

            $("#SearchSpecific3").bind("change", function () {

                $("input[name='SearchSpecific3']").val($(this).val());

                search(true);
            });

            $("#SearchSpecific4").bind("change", function () {

                $("input[name='SearchSpecific4']").val($(this).val());

                search(true);
            });

            initPager(".pagination a");

            // sort data given specific parameter and direction
            $("span[data-sort]").bind("click", function () {

                _currentSortParameter = $(this).attr("data-sort");

                // reset sort order if the user changes the sort parameter
                if (_currentSortParameter != _previousSortParameter) _currentSortOrder = 0;
                else _currentSortOrder = _currentSortOrder == 0 ? 1 : 0;

                _previousSortParameter = _currentSortParameter;
                _previousCtrlTH = this;

                search(false);
            });
        }

        function initPager(ctrl) {

            $(ctrl).bind("click", function (e) {

                // Cancel default redirection
                e.preventDefault();

                // Get page
                mPage = $(this).html();

                // Set active class on current page
                $(ctrl).parent().removeClass("active");
                $(this).parent().addClass("active");

                search(false);
            });
        }

        function search(resetPage) {

            if (resetPage) mPage = 1;

            var params = {
                searchValue: $(mOptions.searchInput).val(),
                CurrentPage: mPage,
                SortParameter: _currentSortParameter,
                SortOrder: _currentSortOrder
            };

            if ($("#SearchSpecific0").length > 0)
                params.SearchSpecific0 = $("#SearchSpecific0").val();

            if ($("#SearchSpecific1").length > 0)
                params.SearchSpecific1 = $("#SearchSpecific1").val();

            if ($("#SearchSpecific2").length > 0)
                params.SearchSpecific2 = $("#SearchSpecific2").val();

            if ($("#SearchSpecific3").length > 0)
                params.SearchSpecific3 = $("#SearchSpecific3").val();

            if ($("#SearchSpecific4").length > 0)
                params.SearchSpecific4 = $("#SearchSpecific4").val();

            displayLoader($(mOptions.container));

            if (mAjaxCall) mAjaxCall.abort();

            mAjaxCall = $.get(mOptions.actionName, params, function (data) {

                // Replace pager
                var pager = $(data).last();
                $("#DefaultPager").html(pager);

                initPager(pager.find("a")); // Re-attach new generated links handlers

                $(pager).find("ul:first").removeClass("hidden"); // Show hidden pager in partial views

                // Replace grid content
                $(mOptions.container).find("tbody").html(data);

                // Replace counter
                $("#DefaultCounter").html($("input[name='nbEntities']").val());

                _placeSortIcon();

                attachDynamicModals();

            }).fail(function (jqXHR, textStatus, errorThrown) {
                console.log(textStatus);
                console.log(errorThrown);
            }).always(function () {
                mAjaxCall = null;
                hideLoader();
            });
        }

        // place an icon near the selected th in the correct orientation
        function _placeSortIcon() {
            var sort_icon = "fa-sort-asc";
            var ctrl_th = $(_previousCtrlTH).parent();
            $(".sort-icon").remove();
            if (_currentSortOrder != 0)
                sort_icon = "fa-sort-desc";
            $("<i class='fa " + sort_icon + " sort-icon' aria-hidden='true'></i>").appendTo(ctrl_th);
        }
    }

}(jQuery));;
