var menuTimeOut;
$(document).ready(function () {
    $('[type="submit"][action]').click(function () {
        $('#ActionType').val($(this).attr('action'));
    });

    $('[type="submit"][data-form-action]').click(function () {
        $('#ActionType').val($(this).attr('data-form-action'));
    });

    $('#ActionType').val('');

    $('.modal')
    .on('show.bs.modal', function () {
        scrollPosY = document.documentElement.scrollTop;
        scrollPosX = document.documentElement.scrollLeft;
        $('.header-div').css({ top: 0 });
        $('body').css({ top: -scrollPosY });
    })
    .on('hidden.bs.modal', function () {
        window.scrollTo(scrollPosX, scrollPosY);
    });

    // Set the Form actions if the browser is IE and the version is less than 11
    if ($.browser.msie) {
        var ieVersion = jgUtils.ieVersion();
        if (!isNaN(ieVersion)) {
            if (parseInt(ieVersion) < 11) {
                $('[type="submit"][formaction]').click(function (e) {
                    var $this = $(this);
                    var formAction = $this.attr('formaction');
                    $this.closest('form').attr('action', formAction);
                });
            }
        }
    }
    
    $(".drop-down-heading").hover(function () {
        clearTimeout(menuTimeOut); 
        dropDownHeadingSelect(this);
    }, function () {
        menuTimeOut = setTimeout(function () {
            $(".drop-down-heading").removeClass("active");
            $(".drop-down-menu-div").removeClass("open");
            $(".sub-drop-down-menu-div").removeClass("open");
            $(".sub-menu-heading").find('i').removeClass("rotate90");
        }, 1000);
    });
    $(".drop-down-heading").focus(function () {
        dropDownHeadingSelect(this);
    });
    $(".drop-down-heading").click(function () {
        dropDownHeadingSelect(this);
    }); 
    $(".drop-down-heading").parent().find(".drop-down-menu-div").hover(function () {
        clearTimeout(menuTimeOut);
    }, function () {
        menuTimeOut = setTimeout(function () { 
            $(".drop-down-heading").removeClass("active");
            $(".drop-down-menu-div").removeClass("open");
            $(".sub-drop-down-menu-div").removeClass("open");
            $(".sub-menu-heading").find('i').removeClass("rotate90");
        }, 1000);
    });
    $(".left-nav-toggle-link").click(function () {
        $(".login-panel-menu").removeClass("open");
        $(".right-nav").removeClass("menu-open");
        $(".login-panel-menu").removeClass("open");
        $(".left-nav").toggleClass("menu-open");
        if ($(".left-nav").hasClass("menu-open")) {
            $("body").addClass("menu-open");
            $("html").addClass("menu-open");
        } else {
            $("body").removeClass("menu-open");
            $("html").removeClass("menu-open");
        }
    });
    $(".right-nav-toggle-link").click(function () {
        $(".login-panel-menu").removeClass("open");
        $(".left-nav").removeClass("menu-open");
        $(".right-nav").toggleClass("menu-open");
        if ($(".right-nav").hasClass("menu-open")) {
            $("body").addClass("menu-open");
            $("html").addClass("menu-open");
        } else {
            $("body").removeClass("menu-open");
            $("html").removeClass("menu-open");
        }
    });
    $(".page-body").click(function () {
        $(".drop-down-heading").removeClass('active');
        $(".drop-down-menu-div").removeClass("open");
        $(".login-panel-menu").removeClass("open");
        $(".sub-drop-down-menu-div").removeClass("open");
        $(".sub-menu-heading").find('i').removeClass("rotate90");
    });

    $(".page-body").click(function () {
        $(".left-nav").removeClass("menu-open");
        $(".right-nav").removeClass("menu-open");
        $("body").removeClass("menu-open");
    });
    $(".side-nav-list").find(".drop-down-heading").click(function () {
        $(".drop-down-heading").not(this).parent(".drop-down-heading-li").find(".drop-down-menu-div").removeClass("open");
        $(".drop-down-heading").not(this).removeClass("active-heading");
        
        $(this).parent(".drop-down-heading-li").find(".drop-down-menu-div").addClass("open");
        $(this).addClass("active-heading");
    });

    $(".quick-job-search button").click(function (e) {
        e.preventDefault();
        var request = { "jobDetailModel": { "jobTitle": $("#_HeaderKeywords").val(), "cityState": $("#_HeaderLocation").val() } };
        cwdsapi.post($(this).attr('data-api'), request, jgLoggedInHeader.quickJobSearchSuccess, jgLoggedInHeader.quickJobSearchFailure);
    });

    $(".employer-quick-job-search button").click(function (e) {
        e.preventDefault();
        var request = { "keyword": $("#_HeaderKeywords").val(), "location": $("#_HeaderLocation").val() };
        cwdsapi.post($(this).attr('data-api'), request, jgEmpLoggedInHeader.searchSuccess, jgEmpLoggedInHeader.searchFailure);
    });

    $('.' + jgUtils.class.reqlabel).append("<span class='requiredLabels'> " + $("#RequiredText").val() + "</span>");
    $('.top-nav-link')
    .keydown(function (e) {
        if ([37, 38, 39, 40].indexOf(e.keyCode) == -1) {
            return;
        }
        var link = $(this);
        switch (e.keyCode) {
            case 37: // left arrow
                e.preventDefault();
                e.stopPropagation();
                if (link.parent('li').prevAll('li').filter(':visible').first().length == 0) {
                    link.parent('li').nextAll('li').filter(':visible').last().find('a').first().focus();
                } else {
                    link.parent('li').prevAll('li').filter(':visible').first().find('a').first().focus();
                }
                break;
            case 38: /// up arrow
                var dropdown = link.parent('li').find('.menu').find(".drop-down-menu-list");
                if (dropdown.length > 0) {
                    e.preventDefault();
                    e.stopPropagation();
                    dropdown.find('.menu-element').filter(':visible').first().focus();
                }

                break;
            case 39: // right arrow
                e.preventDefault();
                e.stopPropagation();
                if (link.parent('li').nextAll('li').filter(':visible').first().length == 0) {
                    link.parent('li').prevAll('li').filter(':visible').last().find('a').first().focus();
                } else {
                    link.parent('li').nextAll('li').filter(':visible').first().find('a').first().focus();
                }
                break;
            case 40: // down arrow
                var dropdown = link.parent('li').find('.menu').find(".drop-down-menu-list");
                if (dropdown.length > 0) {
                    e.preventDefault();
                    e.stopPropagation();
                    dropdown.find('.menu-element').filter(':visible').first().focus();
                }
                break;
        }
    });
    $('.drop-down-menu-item').find('.menu-element')
     .keydown(function (e) {
         if ([37, 38, 39, 40].indexOf(e.keyCode) == -1) {
             return;
         }
         var link = $(this);
         switch (e.keyCode) {
             case 37: // left arrow
                 e.preventDefault();
                 e.stopPropagation();
                 if (link.parent('li').parent('ul').parent('div').parent('li').prevAll('li').filter(':visible').first().length == 0) {
                     link.parent('li').parent('ul').parent('div').parent('li').nextAll('li').filter(':visible').last().find('.top-nav-link').first().focus();
                 } else {
                     link.parent('li').parent('ul').parent('div').parent('li').filter(':visible').first().find('.top-nav-link').first().focus();
                 }
                 break;
             case 38: /// up arrow
                 e.preventDefault();
                 e.stopPropagation();
                 if (link.parent('li').prevAll('li').filter(':visible').first().length == 0) {
                     link.parent('li').nextAll('li').filter(':visible').last().find('.menu-element').first().focus();
                 } else {
                     link.parent('li').prevAll('li').filter(':visible').first().find('.menu-element').first().focus();
                 }
                 break;
             case 39: // right arrow
                 e.preventDefault();
                 e.stopPropagation();
                 if (link.parent('li').parent('ul').parent('div').parent('li').nextAll('li').filter(':visible').first().length == 0) {
                     link.parent('li').parent('ul').parent('div').parent('li').prevAll('li').filter(':visible').last().find('.top-nav-link').first().focus();
                 } else {
                     link.parent('li').parent('ul').parent('div').parent('li').nextAll('li').filter(':visible').first().find('.top-nav-link').first().focus();
                 }
                 break;
             case 40: // down arrow
                 e.preventDefault();
                 e.stopPropagation();
                 if (link.parent('li').nextAll('li').filter(':visible').first().length == 0) {
                     link.parent('li').prevAll('li').filter(':visible').last().find('.menu-element').first().focus();
                 } else {
                     link.parent('li').nextAll('li').filter(':visible').first().find('.menu-element').first().focus();
                 }
                 break;
         }
     });
    $('.quick-job-search').find(":text, button").keydown(function (e) {
        if (e.which == 13) {
            $("#QuickSearchButton").click();
            return false;
        }
    });
    jobCartShowHide();

    $('.result-content').live('click', function () {
        var target = $(this).find("a").attr('target');
        if (target) {
            window.open($(this).find("a").attr('href'), target)
        } else {
            window.location = $(this).find("a").attr("href");
        }
        return false;
    });
    //WidgetBlock redirection
    $('div.panel-block-link').live('click', function (e) {
        e.preventDefault();
        var target = $(this).find("a").attr('target');
        if (target) {
            window.open($(this).find("a").attr('href'), target)
        } else {
            window.location = $(this).find("a").attr("href");
        }
        return false;
    });

    jgUtils.init();

    //DatePicker
    $("input[type=text][data-date-format='mm/dd/yyyy'].datepicker").mask(jgUtils.mask.mmddyyyy);
    $("input[type=text][data-date-format='mm/yyyy'].datepicker").mask(jgUtils.mask.mmyyyy);
    $(".datepicker-cal-icon").click(function (e) {
        $(this).closest(".input-group").find("input[type=text]").focus();
    });
    $('input[type="text"].datepicker[data-val="true"]').datepicker().on('hide', function (e) {
        var target = $(e.currentTarget);
        if (target.attr('data-val') == 'true') {
            target.removeClass('ignore');
            target.valid();
        }
    });
    $('input[type="text"].datepicker[data-val="true"]').datepicker().on('show', function (e) {
        var target = $(e.currentTarget);
        if (target.attr('data-val') == 'true') {
            target.addClass('ignore');
        }
    });
    //TouchSpin
    $(".touchspin-jg:not(.list .list-results .touchspin-jg, .touchspin-exclude-fwinit)").TouchSpin({});

});

function dropDownHeadingSelect(currentHeading) {
    $(".drop-down-heading").removeClass("active");
    $(".drop-down-heading").parent().find(".drop-down-menu-div").removeClass("open");
    $(".top-nav-link").removeClass('active');
    $(".drop-down-heading").not(currentHeading).parent().find(".sub-drop-down-menu-div").removeClass("open");
    $(currentHeading).addClass("active");
    $(currentHeading).parent().find(".drop-down-menu-div").addClass("open");

}
function quickJobSearchFailure() {

}
function jobCartShowHide() {
    if ($(".job-cart").find(".list-item-count").text().trim() > 0) {
        $(".job-cart").find(".list-item-count").removeClass("hidden");
        $(".job-cart").find(".records-list").find(".view-all-button").removeClass("hidden");
        $(".job-cart").find(".records-list").find(".no-records-list-item").addClass("hidden");
    } else {
        $(".job-cart").find(".list-item-count").addClass("hidden");
        $(".job-cart").find(".records-list").find(".view-all-button").addClass("hidden");
        $(".job-cart").find(".records-list").find(".no-records-list-item").removeClass("hidden");
    }
}
function quickJobSearchSuccess(data) {
}
function togglePasswordVisibility() {
    $('#Password').attr('type', $('#show-password').prop('checked') ? 'text' : 'password');
}

function validateForm(e,btn) {
    var returnValue = false;
    var loginForm = $(btn).closest(".menu.login-panel");
    $(loginForm).find("div.validation-area").addClass("hidden");
    $(loginForm).find("div.validation-area").find("a").addClass("hidden");
    var userIdBlank = checkValue($(loginForm).find('#username'));
    var passwordBlank = checkValue($(loginForm).find('#Password'));
    if (userIdBlank || passwordBlank) {
        $(loginForm).find("div.validation-area").removeClass("hidden");
        if (userIdBlank && passwordBlank) { $(loginForm).find('#UserIdPasswordErrorMessageLink').removeClass("hidden").focus(); }
        else if (userIdBlank) { $(loginForm).find('#UserIdErrorMessageLink').removeClass("hidden").focus(); }
        else if (passwordBlank) { $(loginForm).find('#PasswordErrorMessageLink').removeClass("hidden").focus(); }
        returnValue = false;
        e.preventDefault();
    }
   return returnValue;
}

function checkValue(control) {
    var value = $(control).val();
    var matValue = $(control).attr("placeholder");
    if (value === null || value === "" || value === matValue) {
        return true;
    }
    else {
        return false;
    }
}


function UserIdError() {
     document.getElementById("username").focus();
     }

 function PasswordError() {
    document.getElementById("Password").focus();
    }

function messageText(messageType, messageContent) {
    var spanClass = ".message-text-" + messageType;
    $(spanClass).html(messageContent);
}

var jgEmpLoggedInHeader = {
    searchSuccess: function (data) {        
        if (data != "") window.location.href = data;        
    },
    searchFailure: function () {
        alert("Candidate search cannot be completed right now.  Try again later.");
    }
}

var jgLoggedInHeader = {
    refreshHeaderJobCart: function () {
        var jobCartListItem = $('#LoogedinMainHeader').find('.job-cart.drop-down-heading-li');
        if (jobCartListItem.length > 0) {
            var apiUrl = $(jobCartListItem).attr("data-header-jobcart-api");
            var sRequest = {};
            cwdsapi.post(apiUrl, sRequest, jgLoggedInHeader.refreshHeaderJobCartSuccess, jgLoggedInHeader.refreshHeaderJobCartFailure);
        }
    },
     refreshHeaderJobCartSuccess: function(data) {
         var jobCartListItem = $('#LoogedinMainHeader').find('.job-cart.drop-down-heading-li');
         var mobileJobCartNavLink = $('#LoogedinMainHeader').find('.right-nav .side-nav-link-li.job-cart');
         $(jobCartListItem).find('.list-item-count').empty().append(data.jobCartCount);
         if (data.jobCartCount > 0) {
             $(jobCartListItem).find('.list-item-count').removeClass("hidden");
             $(jobCartListItem).find('.view-all-button').removeClass("hidden");
             $(jobCartListItem).find('.no-records-list-item').addClass("hidden");
         } else {
             $(jobCartListItem).find('.list-item-count').addClass("hidden");
             $(jobCartListItem).find('.view-all-button').addClass("hidden");
             $(jobCartListItem).find('.no-records-list-item').removeClass("hidden");
         }
         $(mobileJobCartNavLink).find('.count-display.jobs-count').empty().append("(" + data.jobCartCount + ")");
        var template = '';
        $(jobCartListItem).find('.drop-down-menu-list.records-list li').not("li.view-all-button, li.no-records-list-item").remove();
        for (var i = 0; i < data.jobPostings.length; i++) {
            template = '<li class=drop-down-menu-item><a href=javascript:void(0)><span class=row><span class="col-xs-8 text-left job-title-span">'+ data.jobPostings[i].jobTitle +'</span><span class="col-xs-4 text-right posting-id-span">'+data.jobPostings[i].jobPostingId+'</span></span><span class=row><span class="col-xs-12 job-loc-span">'+data.jobPostings[i].cityState+'</span></span></a></li>';
            $(jobCartListItem).find('.drop-down-menu-list.records-list').prepend(template);
        }
    },
    refreshHeaderJobCartFailure: function() {
        //alert('failure');
    },
    quickJobSearchSuccess: function (data) {
        if (data != "") window.location.href = data;
    },
    quickJobSearchFailure: function (data) {

    }
}

var jgLoggedInEmployerHeader = {
    refreshHeaderJobCart: function () {
        var jobCartListItem = $('#mainHeader').find('.favorite-candidates.drop-down-heading-li');
        if (jobCartListItem.length > 0) {
            var apiUrl = $(jobCartListItem).attr("data-header-jobcart-api");
            var sRequest = {};
            cwdsapi.post(apiUrl, sRequest, jgLoggedInEmployerHeader.refreshHeaderJobCartSuccess, jgLoggedInEmployerHeader.refreshHeaderJobCartFailure);
        }
    },
    refreshHeaderJobCartSuccess: function (data) {
        var jobCartListItem = $('#mainHeader').find('.favorite-candidates.drop-down-heading-li');
        //var mobileJobCartNavLink = $('#mainHeader').find('.right-nav .side-nav-link-li.job-cart');
        $(jobCartListItem).find('.list-item-count').empty().append(data.candidateCount);
        if (data.candidateCount > 0) {
            $(jobCartListItem).find('.list-item-count').removeClass("hidden");
            $(jobCartListItem).find('.view-all-button').removeClass("hidden");
            $(jobCartListItem).find('.no-records-list-item').addClass("hidden");
        } else {
            $(jobCartListItem).find('.list-item-count').addClass("hidden");
            $(jobCartListItem).find('.view-all-button').addClass("hidden");
            $(jobCartListItem).find('.no-records-list-item').removeClass("hidden");
        }
        //$(mobileJobCartNavLink).find('.count-display.jobs-count').empty().append("(" + data.jobCartCount + ")");
        var template = '';
        $(jobCartListItem).find('.drop-down-menu-list.records-list li').not("li.view-all-button, li.no-records-list-item").remove();
        for (var i = 0; i < data.favoriteCandidates.length; i++) {
            template = '<li class=drop-down-menu-item><a href=javascript:void(0)><span class=row><span class="col-xs-8 text-left job-title-span">' + data.favoriteCandidates[i].candidateName + '</span><span class="col-xs-4 text-right posting-id-span">' + data.favoriteCandidates[i].resumeId + '</span></span><span class=row><span class="col-xs-12 job-loc-span">' + data.favoriteCandidates[i].candidateLocation + '</span></span></a></li>';
            $(jobCartListItem).find('.drop-down-menu-list.records-list').prepend(template);
        }
    },
    refreshHeaderJobCartFailure: function () {
        //alert('failure');
    },
    quickJobSearchSuccess: function (data) {
        if (data != "") window.location.href = data;
    },
    quickJobSearchFailure: function (data) {

    }
}


var cwdsapi = {
    post: function (apiUrl, apiData, successCallBack, failureCallBack) {
        apiData.apiOperationContext = cwdsapi.getOperationContext();
        $.ajax({
            type: "POST",
            url: apiUrl,
            data: JSON.stringify(apiData),
            contentType: 'application/json;charset=utf-8',
            dataType: "json", // the data type we want back, so text.  The data will come wrapped in xml
            success: function (data) {
                if($("#IsUserLoggedIn").val() === "1"){
                    ExtendSession();
                }                
                successCallBack(data);
            },
            error: function (ts) {
                if (ts.status === 400) {
                    var url = window.location.href;
                    window.location.href = url.split('/', 4).join('/') + '/error';
                } else {
                    if (typeof (ExtendSession) === 'function') { ExtendSession(); }
                    failureCallBack(ts);
                }

            }
        });
    },
    getOperationContext: function () {
        var oContext = '';
        if ($("#OperationContext_jsonSecured").length > 0) {
            oContext = $("#OperationContext_jsonSecured").val();
        } else if ($("#OperationContext_json").length > 0) {
            oContext = JSON.parse($("#OperationContext_json").val());
        }
        return oContext;
    }
};

var jgUtils = {
    init: function () {
        jgUtils.upload.init();
        jgUtils.uploadMultiple.init();
        jgUtils.jgTabs.init();
        //mask 
        $('.' + jgUtils.class.phone).mask(jgUtils.mask.phone);
        $('.' + jgUtils.class.phoneext).mask(jgUtils.mask.phoneext);
        $('.' + jgUtils.class.ssn).mask(jgUtils.mask.ssn);
        $('.' + jgUtils.class.zipext).mask(jgUtils.mask.zip);

        $("textarea.show-char-count").each(function () {
            if (!$(this).hasClass("cc-enable-rtf")) {
                $(this).after("<div id='" + $(this).attr("id") + "_count' class='db char-count-div'><span class='pull-right char-count-label'><span class='char-count'>0</span> " + $("#OfText").val() + " " + $(this).attr("data-rtf-maxlength") + "</span></div>")
            }
            jgUtils.textAreaCharCount($(this));
        });

    },
    htmlEncode: function (val) {
        return $('<div/>').text(val).html();
    },
    textAreaCharCount: function (ctrl) {
        var r = true;
        var l = $(ctrl).val().length;
        maxLength = parseInt($(ctrl).attr("data-rtf-maxlength"));
        if (l > maxLength) {
            $(ctrl).val($(ctrl).val().substring(0, maxLength));
            alert('Exceeds max character length');
            r = false;
        }
        $("#" + $(ctrl).attr("id") + '_count').find(".char-count").html($(ctrl).val().length);
        return r;
    },
    class: {
        req: "jg-cv-req",
        reqlabel: "jg-cv-req-lbl",
        phoneext: "jg-cv-phn-ext",
        phone: "jg-cv-phn",
        ssn: "jg-cv-ssn",
        zipext: "jg-zip-ext"
    },
    mask: {
        phone: "(999) 999-9999",
        phoneext: "(999) 999-9999? ext999999",
        zip: "99999?-9999",
        ssn: "999-99-9999",
        mmddyyyy: "99/99/9999",
        mmyyyy: "99/9999"
    },
    upload: {
        init: function () {
            $('.file-upload-root .file-upload-button').click(function (e) {
                e.preventDefault();
                $("#" + $(this).closest('.file-upload-root').find('.file-upload-ctrl')[0].id).trigger('click');
            });
            $(".file-upload-root .file-upload-ctrl").on('change', function () {
                var file = $(this).prop('files');
                var filename = file[0].name;
                var reader = new FileReader();
                var root = $(this).closest('.file-upload-root');
                var link = $(root).find(".file-upload-link");
                var label = $(root).find(".file-upload-text");
                var button = $(root).find(".file-upload-button");
                var removeButton = $(root).find(".file-upload-remove-button")
                if (filename) {
                    $(this).attr("file-upload-text-name", filename);
                }
                reader.addEventListener("load", function () {
                    $(button).addClass("hidden");
                    $(link).addClass("hidden");
                    $(label).removeClass("hidden");
                    $(removeButton).removeClass("hidden");
                    $(label).html(file[0].name);
                }, false);

                if (file[0]) {
                    reader.readAsDataURL(file[0]);
                }
            });
            $(".file-upload-root .file-upload-remove-button").click(function (e) {
                e.preventDefault();
                var root = $(this).closest('.file-upload-root');
                var link = $(root).find(".file-upload-link");
                var label = $(root).find(".file-upload-text");
                var button = $(root).find(".file-upload-button");
                var removeButton = $(root).find(".file-upload-remove-button")
                $("#" + $(root).find('.file-upload-ctrl')[0].id).val("");
                $(button).removeClass("hidden");
                $(link).addClass('hidden');
                $(label).addClass("hidden");
                $(removeButton).addClass("hidden");
                $(label).html('');
                $(link).html('');
            });

        },
        showDownload: function (id, fileName, url, title) {
            var root = $("#" + id).closest(".file-upload-root");
            var link = $(root).find(".file-upload-link");
            var label = $(root).find(".file-upload-text");
            var button = $(root).find(".file-upload-button");
            var removeButton = $(root).find(".file-upload-remove-button")
            var showLink = false;

            $(button).addClass("hidden");
            $(link).addClass('hidden');
            $(label).addClass("hidden");
            $(removeButton).removeClass("hidden");
            $(label).html('');
            $(link).html('');
            $("#" + id).val("");

            if (url) {
                if (url.length > 0) {
                    showLink = true;
                }
            }
            if (showLink) {
                $(link).html(fileName);
                $(link).removeClass("hidden").attr('href', url).attr('title', title);
            } else {
                $(label).html(fileName);
                $(label).removeClass("hidden");
            }
        },
        showUpload: function (id) {
            var root = $("#" + id).closest(".file-upload-root");
            var link = $(root).find(".file-upload-link");
            var label = $(root).find(".file-upload-text");
            var button = $(root).find(".file-upload-button");
            var removeButton = $(root).find(".file-upload-remove-button")
            $("#" + id).val("");
            $(button).removeClass("hidden");
            $(link).addClass('hidden'); 
            $(label).addClass("hidden");
            $(removeButton).addClass("hidden");
            $(label).html('');
            $(link).html('').attr('href', 'javascript:void(0);');
        }
    },
    uploadMultiple: {
        docNameAttr: 'document-name',
        newDocAttr: 'new-document',
        init: function () {
            $('.file-upload-list-root .file-upload-list-button').click(function (e) {
                $("#" + $(this).closest('.file-upload-list-root').find('.file-upload-ctrl')[0].id).trigger('click');
            });
            $(".file-upload-list-root .file-upload-ctrl").on('change', function () {
                var file = $(this).prop('files');
                var filename = file[0].name;
                var reader = new FileReader();
                var root = $(this).closest('.file-upload-list-root');
                var list = $(root).closest('.form-group');
                var link = $(root).find(".file-upload-list-link");
                var label = $(root).find(".file-upload-list-text");
                var button = $(root).find(".file-upload-list-button");
                var removeButton = $(root).find(".file-upload-remove-list-button");
                reader.addEventListener("load", function () {
                    $(button).addClass("hidden");
                    $(link).addClass("hidden");
                    $(label).removeClass("hidden");
                    $(removeButton).removeClass("hidden");
                    $(label).html(filename);
                    $(root).attr(jgUtils.uploadMultiple.docNameAttr, filename);
                    $(root).attr(jgUtils.uploadMultiple.newDocAttr, '1');
                    jgUtils.uploadMultiple.showHideUploadList(list);
                }, false);

                if (file[0]) {
                    reader.readAsDataURL(file[0]);
                }
            });
            $(".file-upload-list-root .file-upload-remove-list-button").click(function (e) {
                e.preventDefault();
                $('#DeleteDialogYesButton').attr('ctrl', $(this).closest('.file-upload-list-root').find('.file-upload-ctrl')[0].id);
                cwds.dialog.open("DeleteFile");
            });
            $('#DeleteDialogNoButton').click(function (e) {
                cwds.dialog.close("DeleteFile");
            });
        },
        deleteFile: function (root) {
            var list = $(root).closest('.form-group');
            var link = $(root).find(".file-upload-list-link");
            var label = $(root).find(".file-upload-list-text");
            var button = $(root).find(".file-upload-list-button");
            var removeButton = $(root).find(".file-upload-remove-list-button");
            $(root).removeAttr(jgUtils.uploadMultiple.docNameAttr);
            $(root).removeAttr(jgUtils.uploadMultiple.newDocAttr);
            $("#" + $(root).find('.file-upload-ctrl')[0].id).val("");
            $(button).removeClass("hidden");
            $(link).addClass('hidden');
            $(label).addClass("hidden");
            $(removeButton).addClass("hidden");
            $(label).html('');
            $(link).html('');
            jgUtils.uploadMultiple.showHideUploadList(list);
            if ($(list).find(".file-upload-list-root[document-name]").length > 0) {
                $($(list).find(".file-upload-list-root[document-name]")[$(list).find(".file-upload-list-root[document-name]").length - 1]).after($(list).find(".file-upload-list-root:not([document-name])")[0])
            }
        },
        showDownload: function (id, fileName, url, title) {
            var root = $("#" + id).closest('.file-upload-list-root');
            var link = $(root).find(".file-upload-list-link");
            var label = $(root).find(".file-upload-list-text");
            var button = $(root).find(".file-upload-list-button");
            var removeButton = $(root).find(".file-upload-remove-list-button");
            var showLink = false;
            $(root).attr(jgUtils.uploadMultiple.docNameAttr, fileName);
            $(root).attr(jgUtils.uploadMultiple.newDocAttr, '0');
            $(button).addClass("hidden");
            $(link).addClass('hidden');
            $(label).addClass("hidden");
            $(removeButton).removeClass("hidden");
            $(label).html('');
            $(link).html('');
            $("#" + id).val("");

            if (url) {
                if (url.length > 0) {
                    showLink = true;
                }
            }
            if (showLink) {
                $(link).html(fileName);
                $(link).removeClass("hidden").attr('href', url).attr('title', title);
            } else {
                $(label).html(fileName);
                $(label).removeClass("hidden");
            }
        },
        showUpload: function (id) {
            var root = $("#" + id).closest('.file-upload-list-root');
            var link = $(root).find(".file-upload-list-link");
            var label = $(root).find(".file-upload-list-text");
            var button = $(root).find(".file-upload-list-button");
            var removeButton = $(root).find(".file-upload-remove-list-button");
            $("#" + id).val("");
            $(root).attr(jgUtils.uploadMultiple.docNameAttr, '');
            $(root).attr(jgUtils.uploadMultiple.newDocAttr, '0');
            $(button).removeClass("hidden");
            $(link).addClass('hidden');
            $(label).addClass("hidden");
            $(removeButton).addClass("hidden");
            $(label).html('');
            $(link).html('').attr('href', 'javascript:void(0);');
        },
        isDocumentSelected: function (id) {
            var rv = false;
            var root = $("#" + id).closest(".file-upload-list-root");
            if ($(root).attr(jgUtils.uploadMultiple.docNameAttr).length === 0) rv = true;
            return rv;
        },
        isNewDocument: function (id) {
            var rv = false;
            var root = $("#" + id).closest(".file-upload-list-root");
            if ($(root).attr(jgUtils.uploadMultiple.newDocAttr).length === '1') rv = true;
            return rv;
        },
        showHideUploadList: function (docList) {
            if (typeof docList !== typeof undefined) {
                var pageControls = docList.find(".file-upload-list-root:not([document-name])");
                $(pageControls).find(".file-upload-list-link").addClass("hidden")
                $(pageControls).find(".file-upload-list-text").addClass("hidden")
                $(pageControls).find(".file-upload-list-button").addClass("hidden")
                $(pageControls).find(".file-upload-remove-list-button").addClass("hidden")
                $($(pageControls)[0]).find(".file-upload-list-text").removeClass("hidden")
                $($(pageControls)[0]).find(".file-upload-list-button").removeClass("hidden")
            }
        }
    },
    setMessage: function (messageType, messageContent) {        
        switch (messageType) {
            case "warning": 
                jgUtils.removeMessages();
                $("div.message-panel").addClass("warning").removeClass("hidden");
                $("div.message-panel").find("span").addClass("message-text-warning").html(messageContent);
                break;
            case "information":
                jgUtils.removeMessages();
                $("div.message-panel").addClass("success").removeClass("hidden");
                $("div.message-panel").find("span").addClass("message-text-success").html(messageContent);
                break;
            case "error":
                jgUtils.removeMessages();
                $("div.message-panel").addClass("failure").removeClass("hidden");
                $("div.message-panel").find("span").addClass("message-text-failure").html(messageContent);
                break;
            case "default":
                jgUtils.removeMessages();
                var msgCtrl = $(".msgs-jg");
                var msgList = $(msgCtrl).find(".msg-list");
                var errorTitle = '<span class="db error-title">' + $('#error-text-div').attr('data-error-title') + '</span>';
                if ($(msgList).attr('data-error-title') !== '') { errorTitle = '<span class="db">' + $(msgList).attr('data-error-title') + '</span>'; }
                var list = errorTitle;
                list += '<ul role="group" class="mt10">';
                if ($.isArray(messageContent)) {
                    if (messageContent.length > 0) {
                        if (typeof messageContent[0] === "string") { for (var i = 0, len = messageContent.length; i < len; i++) { list += '<li>' + messageContent[i] + '</li>'; } }
                        else { for (var i = 0, len = messageContent.length; i < len; i++) { list += '<li>' + messageContent[i].Message + '</li>'; } }
                    }
                }
                else {
                    list += '<li>' + messageContent + '</li>';
                }
                list += '</ul>';
                $(msgList).html(list);
                $(msgCtrl).removeClass("hidden");
                $(msgCtrl).find('button.msgs-jg-hide').focus();
                $(msgCtrl).attr('data-msg-new', '1');
                break;
        }
    },
    removeMessages: function () {        
        $("div.message-panel").removeClass("success failure warning").addClass("hidden");
        $("div.message-panel").find("span").removeClass("message-text-warning message-text-failure message-text-success").text("");
    },
    removeBusinessMessages: function() {
        var msgCtrl = $(".msgs-jg");
        $(msgCtrl).find(".msg-list").html('');
        $(msgCtrl).addClass("hidden");
        $(msgCtrl).attr('data-msg-new', '0');
    },
    messageSeverity: {
        DEFAULT: "default",
        ERROR: "error",
        INFORMATION: "information",
        WARNING: "warning"
    },
    postForm: function (actionName) {
        $("#__Action").val(actionName);
        $('form').submit();
        $("#__Action").val("");
    },
    autocomplete: function (ctrl, postUrl, modelProperty) {
        $('#' + ctrl).autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: postUrl,
                    data: "{ " + modelProperty + ": '" + request.term.replace(/'/g, "") + "' }",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    dataFilter: function (data) { return data; },
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                value: item
                            }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                    }
                });
            },
            select: function (event, ui) { $('#' + ctrl).val($.trim(ui.item.value)); return false; },
            minLength: 2
        });
    },
    ieVersion: function() {
        var rv = -1;
        if (navigator.appName == 'Microsoft Internet Explorer') {
            var ua = navigator.userAgent;
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                rv = parseFloat(RegExp.$1);
        }
        else if (navigator.appName == 'Netscape') {
            var ua = navigator.userAgent;
            var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
            if (re.exec(ua) != null)
                rv = parseFloat(RegExp.$1);
        }
        return rv;
    },
    table: {
        init: function () {
            $(".cwds-resp-table").each(function () {
                jgUtils.table.process($(this));
            });
        },
        process: function (tbl) {
            var index = -1;
            var colPos = -1;
            var colCI = [];
            var colHI = [];
            var colHeader = [];
            $(tbl).find("tr:first").find("th").each(function () {
                index = index + 1;
                if ($(tbl).hasClass("resp-col-dest")) { colPos = index; }
                else if ($(tbl).hasClass("resp-col-copy")) {
                    colCI.push(index);
                    colHeader.push($(tbl).text());
                    $(tbl).addClass("hidden-sm hidden-xs");
                }
                else if ($(tbl).hasClass("resp-col-hide")) {
                    colHI.push(index);
                    $(tbl).addClass("hidden-sm hidden-xs");
                }
            });
            if (colPos >= 0) {
                $(this).find("tr").not(":first").each(function () {
                    var html = '<div class="mt5 hidden-lg hidden-md">';
                    for (var i = 0, len = colCI.length; i < len; i++) {
                        var d = $(tbl).find("td").get(colCI[i]);
                        $(d).addClass("hidden-sm hidden-xs");
                        html += '<div><label class="bold">' + colHeader[i] + '</label>: &nbsp;' + d.innerHTML + '</div>';
                    }
                    html += '</div>';
                    $($(tbl).find("td").get(colPos)).append(html);
                    for (var i = 0, len = colHI.length; i < len; i++) { $($(tbl).find("td").get(colHI[i])).addClass("hidden-sm hidden-xs"); }
                });
            }
        }
    },

    jgTabs: {
        init: function () {
            $(".cc-jg-tabs a").click(function (e) {
                $(this).tab('show');
            });
            $(".cc-jg-tabs li.active a").each(function () {
                $(this).tab('show');
                var tabContentId = $(this).attr('href');
                $(this).closest('.cc-jg-tabs').find('.tab-content ' + tabContentId).addClass('active');
            });
        }
    }

}

//Chart JS Functions Start
function getColor(colorCode) {
    switch (colorCode) {
        case 0:
            return '#df6a78';
        case 1:
            return '#f5b75f';
        case 2:
            return '#66c796';
        case 3:
            return '#EF8B01';
    }
}

function getHighlight(colorCode) {
    switch (colorCode) {
        case 0:
            return '#db5565';
        case 1:
            return '#f4ad49';
        case 2:
            return '#51bf87';
        case 3:
            return '#EF8B01';
    }
}

function setPieChartData(chartList, chartName) {
    var donutData = [];
    var i;
    var emptyCounter = 0;

    for (i = 0; i < chartList.length; ++i) {
        if (chartList[i].chartValue === 0) {
            emptyCounter++;
        }
        var donutSection =
        {
            value: chartList[i].chartValue,
            color: getColor(chartList[i].chartColor),
            highlight: getHighlight(chartList.chartColor),
            label: chartList[i].chartString,
            hoverBackgroundColor: "#ffa500"
        };
        donutData.push(donutSection);
    }

    if (donutData.length === emptyCounter) {
        var ctxDonut = document.getElementById(chartName).getContext("2d");
        var donutData = [];

        var donutSection = {
            value: 1,
            color: "#a6a6a6"
        }
        donutData.push(donutSection);

        chartList = new Chart(ctxDonut).Doughnut(donutData, {
            responsive: true,
            segmentShowStroke: true,
            segmentStrokeColor: "#fff",
            segmentStrokeWidth: 2,
            percentageInnerCutout: 45,
            animation: true,
            animationSteps: 100,
            animationEasing: "easeOutBounce",
            animateRotate: true,
            animateScale: true,
            showTooltips: false,
        });
    } else {

        var myDonut = [];

        var ctxDonut = document.getElementById(chartName).getContext("2d");

        chartList = new Chart(ctxDonut).Doughnut(donutData, {
            responsive: true,
            //donut options
            segmentShowStroke: true,
            segmentStrokeColor: "#fff",
            segmentStrokeWidth: 2,
            percentageInnerCutout: 45, // This is 0 for Pie charts
            //animations
            animation: true,
            animationSteps: 100,
            animationEasing: "easeOutBounce",
            animateRotate: true,
            animateScale: true,
            //tooltips
            showTooltips: true,
            customTooltips: function (tooltip) {
                var tooltipEl = $('#chartjs-tooltip-' + chartName);
                // Hide if no tooltip
                if (!tooltip) {
                    tooltipEl.css({
                        opacity: 0
                    });
                    return;
                }
                // Set caret Position
                tooltipEl.removeClass('above below');
                tooltipEl.addClass(tooltip.yAlign);
                // Set Text
                tooltipEl.html(tooltip.text);
                // Find Y Location on page
                var top;
                if (tooltip.yAlign == 'above') {
                    top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
                } else {
                    top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
                }
                if (tooltipEl.hasClass("js-legend-chart-widget")) {
                    // Display, position, and set styles for font
                    tooltipEl.css({
                        opacity: 1,
                        left: tooltip.chart.canvas.offsetLeft + tooltip.x + 15 + 'px',
                        top: tooltip.chart.canvas.offsetTop + top + 75 + 'px',
                        fontFamily: tooltip.fontFamily,
                        fontSize: tooltip.fontSize,
                        fontStyle: tooltip.fontStyle,
                    });
                } else if (tooltipEl.hasClass("js-tabbed-chart-widget")) {
                    // Display, position, and set styles for font
                    tooltipEl.css({
                        opacity: 1,
                        left: tooltip.chart.canvas.offsetLeft + tooltip.x + 15 + 'px',
                        top: tooltip.chart.canvas.offsetTop + top + 'px',
                        fontFamily: tooltip.fontFamily,
                        fontSize: tooltip.fontSize,
                        fontStyle: tooltip.fontStyle,
                    });
                } else {
                    // Display, position, and set styles for font
                    tooltipEl.css({
                        opacity: 1,
                        left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
                        top: tooltip.chart.canvas.offsetTop + top + 'px',
                        fontFamily: tooltip.fontFamily,
                        fontSize: tooltip.fontSize,
                        fontStyle: tooltip.fontStyle,
                    });
                }

            }
            //tooltipFillColor: "#344154",
            //tooltipFontFamily: "'Roboto'",
            //tooltipFontSize: 13,
            //tooltipFontColor: "#fff",
            //tooltipYPadding: 8,
            //tooltipXPadding: 10,
            //tooltipCornerRadius: 2,
            //tooltipTitleFontFamily: "'Roboto'", 

        });

        $("#" + chartName).click(
            function (e) {
                var activePoints = chartList.getSegmentsAtEvent(e);
                if (Object.keys(activePoints).length > 0) {
                    var label = activePoints[0]["label"];
                    var controller = chartName.substring(0, chartName.indexOf("-chart"));
                    $("[ng-controller='" + controller + "']").find("[title*='" + activePoints[0]["label"] + "']")[0].click();
                    //$("[ng-controller='" + controller + "']").find("[title*='" + activePoints[0]["label"] + "']")[0].click();
                    //$("[title*='" + activePoints[0]["label"] + "']")[0].click();
                }
            });
    }
}
//Chart JS Functions End

;
/*
''' -----------------------------------------------------------------------------
''' Project	 : JobGateWay-MVC
''' Script   : jg-search.js
''' -----------------------------------------------------------------------------
''' <remarks>
''' Copyright © 2016 Commonwealth of Pennsylvania. All Rights Reserved
''' </remarks>
''' <history>
'''     [c-abhuma]    11/28/2015    WUDB00055033    R10.4: Created
'''     [c-lvallurp]  07/27/2018    38326          R12.2: Added title function for IEP Plan Authentication
''' </history>
''' -----------------------------------------------------------------------------
*/
/*global getSearchCriteria, closeDialogCallBack */
$(function () {
    $(document).ready(function () {
        cwds.init();
    });
});

var cwds = {

    init: function () {
        cwds.search.init();
        cwds.dialog.init();
        cwds.widget.init();
        cwds.searchTipsTable.init();
        cwds.list.init();
    },
    intSearchResults: function (excludeFacets) {
        cwds.search.bindEvents();
        if (!excludeFacets) { cwds.facet.bindEvents(); }
        setTimeout(function () {
            cwds.search.resetSelected();

        }, 0);
    },
    intListResults: function (controller) {
        cwds.list.bindEvents(controller);
    },
    utility: {
        submitForm: function (actionName) {
            $("#__Action").val(actionName);
            cwds.utility.disableValidators();
            $('form').submit();
        },
        disableValidators: function () {
            $('.' + jgUtils.class.req).addClass("ignore");
        },
        queryString: function () {
            var qs;
            return (location.search && location.search.length > 1) ? qs = window.location.search.substring(1) : "";
        },
        queryStringParamByName: function (name) {
            name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
            var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                results = regex.exec(location.search);
            return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
        },
        escapeQuotes: function (str) {
            return str.replace(/'/g, "\\'").replace(/"/g, '\\"');
        },
        createCookie: function (name, value, days) {
            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                var expires = "; expires=" + date.toGMTString();
            }
            else var expires = "";
            document.cookie = name + "=" + value + expires + "; path=/";
        },
        deleteCookie: function (name) {
            cwds.utility.createCookie("ExcelFileDownloaded", "", -1);
        },
        getCookie: function (cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }
    },
    widget: {
        isPagination: false,
        searchParams: [],
        widgetActiveTab: '',
        init: function () {
            var pg = $(".panel .panel-footer .panel-pagination");
            $(pg).find("a.page-first").click(function () {
                if (!$(this).hasClass("not-active")) {
                    cwds.widget.isPagination = true;
                    cwds.widget.paginate($(this), 1);
                }
            });
            $(pg).find("a.page-previous").click(function () {
                if (!$(this).hasClass("not-active")) {
                    cwds.widget.isPagination = true;
                    cwds.widget.paginate($(this), parseInt($(this).closest(".panel-pagination").attr("data-pagination-page")) - 1);
                }
            });
            $(pg).find("a.page-next").click(function () {
                if (!$(this).hasClass("not-active")) {
                    cwds.widget.isPagination = true;
                    cwds.widget.paginate($(this), parseInt($(this).closest(".panel-pagination").attr("data-pagination-page")) + 1);
                }
            });
            $(pg).find("a.page-last").click(function () {
                if (!$(this).hasClass("not-active")) {
                    cwds.widget.isPagination = true;
                    cwds.widget.paginate($(this), parseInt($(this).closest(".panel-pagination").attr("data-pagination-pages")));
                }
            });
            $(".panel.widget").each(function () {
                if ($(this).attr('data-widget-default-search') === "True") {
                    angular.element(this).scope().load(1, this);
                }
            });
            $(".panel.widget .panel-heading a").click(function (e) {
                if ($(this).attr("data-widget-action-post") === "True") {
                    e.preventDefault();
                    cwds.utility.submitForm($(this).closest(".panel.widget").attr("data-widget-name") + $(this).attr("data-widget-action"));
                }
            });
            $(".panel.widget .widget-tabs a").click(function (e) {
                e.preventDefault();
                var wid = $(this).closest('.panel.widget');
                var widgetName = $(wid).attr('data-widget-name');
                cwds.widget.widgetActiveTab = $(this).attr('href').replace('#' + widgetName, '');
                $(this).tab('show');

                angular.element(wid).scope().load(1, wid);
            });
            $(".panel.widget .widget-tabs li.active a").each(function () {
                var wid = $(this).closest('.panel.widget');
                var widgetName = $(wid).attr('data-widget-name');
                cwds.widget.widgetActiveTab = $(this).attr('href').replace('#' + widgetName, '');
                $(this).tab('show');

                angular.element(wid).scope().load(1, wid);
                var tabContentId = $(this).attr('href');
                $(this).closest('.panel.widget').find('.tab-content ' + tabContentId).addClass('active');
            });
        },
        paginate: function (pLink, pageNumber) {
            var wc = $(pLink).closest(".panel");
            angular.element(wc).scope().load(pageNumber, wc);
        },
        search: function (widgetName, param) {
            var widget = $(".panel.widget[data-widget-name='" + widgetName + "']");
            var pos = -1;
            for (var i = 0; i < cwds.widget.searchParams.length; i++) {
                if (cwds.widget.searchParams[i].name === widgetName) {
                    pos = i;
                    break;
                }
            }
            if (pos >= 0) {
                cwds.widget.searchParams[pos].param = param;
            } else {
                cwds.widget.searchParams.push({ "name": widgetName, "param": param });
            }
            angular.element(widget).scope().load(1, widget);
        },
        getSearchParam: function (widgetName) {
            var param = null;
            for (var i = 0; i < cwds.widget.searchParams.length; i++) {
                if (cwds.widget.searchParams[i].name === widgetName) {
                    param = cwds.widget.searchParams[i].param;
                    break;
                }
            }
            return param;
        },
        set: function (wResponse, widgetName) {
            var pClass = "not-active text-muted";
            var widget = $(".panel.widget[data-widget-name='" + widgetName + "']");
            var pagePanel = $(widget).find(".panel-pagination");
            $(pagePanel).attr("data-pagination-total", wResponse.totalCount);
            $(pagePanel).attr("data-pagination-page", wResponse.pageNumber);
            $(pagePanel).attr("data-pagination-pages", wResponse.pages);
            //MB - added for no data in widgets with multiple tabs
            $(".tab-nfm-" + wResponse.widgetActiveTab).closest("div.panel-block").find("[class*='tab-nfm-']").addClass("hidden");
            if (wResponse.list && wResponse.list.length > 0) {
                $(widget).find(".panel-footer").removeClass("hidden");
                $(widget).find(".panel-body .no-data-list").addClass("hidden");
                $(widget).find(".panel-body .data-list").removeClass("hidden");
                $(widget).find(".panel-body .process-error").addClass("hidden");
                $(pagePanel).find(".w-pager").removeClass("not-active").removeClass("text-muted");
                $(pagePanel).find(".w-pager").removeAttr('disabled');
                if (wResponse.pages === 1) { $(pagePanel).find(".w-pager").addClass(pClass); }
                else {
                    if (wResponse.pageNumber === 1) {
                        $(pagePanel).find(".page-first,.page-previous").addClass(pClass);
                        $(pagePanel).find(".page-first,.page-previous").attr('disabled', 'disabled');
                        if (cwds.widget.isPagination) {
                            $(pagePanel).find(".page-next").focus();
                            cwds.widget.isPagination = false;
                        }
                    }
                    else if (wResponse.pageNumber === wResponse.pages) {
                        $(pagePanel).find(".page-next,.page-last").addClass(pClass);
                        $(pagePanel).find(".page-next,.page-last").attr('disabled', 'disabled');
                        if (cwds.widget.isPagination) {
                            $(pagePanel).find(".page-previous").focus();
                            cwds.widget.isPagination = false;
                        }
                    }
                }
                $(widget).find(".panel-footer").find(".paginate-details").html(wResponse.pageNumber + "/" + wResponse.pages);
            }
            else {
                //MB - added for no data in widgets with multiple tabs
                $(".tab-nfm-" + wResponse.widgetActiveTab).removeClass("hidden");
                $(widget).find(".panel-footer").addClass("hidden");
                $(widget).find(".panel-body .no-data-list").removeClass("hidden");
                $(widget).find(".panel-body .data-list").addClass("hidden");
                $(widget).find(".panel-body .process-error").addClass("hidden");
            }
            $(widget).waitMe("hide");
        },
        error: function (response, widgetName) {
            var widget = $(".panel.widget[data-widget-name='" + widgetName + "']");
            $(widget).find(".panel-body .no-data-list").addClass("hidden");
            $(widget).find(".panel-body .data-list").addClass("hidden");
            $(widget).find(".panel-body .process-error").removeClass("hidden");
            $(widget).waitMe("hide");
        },
        setSpinner: function (widgetName) {
            var widget = $(".panel.widget[data-widget-name='" + widgetName + "']");
            $(widget).waitMe({ effect: "rotateplane", text: '', bg: 'rgba(255,255,255,0.7)', color: "#bac3d2", /* sizeW : '32', sizeH : '32'*/ });
        },
        removeSpinner: function (widgetName) {
            var widget = $(".panel.widget[data-widget-name='" + widgetName + "']");
            $(widget).waitMe("hide");
        },
        reload: function (link) {
            var w = $(link).closest('.panel.widget');
            angular.element(w).scope().load(1, w);

        },
        resetActionTitle: function (widgetName, cssClass, titleText) {
            switch (cssClass) {
                case "panel-add":
                    titleText += ": Add"
                    $("[ng-controller='" + widgetName + "']").find("." + cssClass).attr('title', titleText);
                    break;
                case "panel-refresh":
                    titleText += ": Refresh"
                    $("[ng-controller='" + widgetName + "']").find("." + cssClass).attr('title', titleText);
                    break;
                case "panel-edit":
                    titleText += ": Edit"
                    $("[ng-controller='" + widgetName + "']").find("." + cssClass).attr('title', titleText);
                    break;
                case "ViewAll":
                    titleText += ": "
                    $("[ng-controller='" + widgetName + "']").find("." + cssClass).attr('aria-label', titleText);
                    break;
            }
        },
        executeScriptCallBack: function (resp, controller) {
            var ct = $(".widget[ng-controller='" + controller + "']");
            var scriptCallBack = $(ct).attr('data-widget-script-callback');
            if (scriptCallBack) {
                cwds.widget.executeFunctionByName(scriptCallBack, window, [resp.pageNumber, resp.totalCount, resp]);
            }
        },
        executeFunctionByName: function (functionName, context, argsArray) {
            var nameSpaces = functionName.split(".");
            var func = nameSpaces.pop();
            for (var i = 0; i < nameSpaces.length; i++) {
                context = context[nameSpaces[i]];
            }
            var fnName = context[func];
            if (typeof (fnName) === "function") {
                if (!argsArray) { fnName(); }
                else { fnName.apply(context, argsArray); }
            }
        },
    },
    multipleFacets: {
        selectedFacets: [],
        appliedFacetCount: 0,
        activeSlider: '',
        bindMultipleEvents: function () {
            $("#ChooseMultiple .facet-multiple-select .facet-items-container :checkbox").click(function () {
                cwds.multipleFacets.selectFilter($(this));
            });

            $("#ChooseMultiple .facet-multiple-select .facet-items-container .facet-dropDown").on("change", function () {
                cwds.multipleFacets.selectDropDownTypeFilter($(this));
            });
        },
        bindFacetEvents: function () {
            $("#ChooseMultiple .facet-multiple-select .facet-items").click(function () {
                var ctrl = $(this);
                cwds.multipleFacets.bindFacetItems(ctrl);
            });

            $("#DialogContent_DialogApplyButton").click(function () {
                cwds.facet.applied = JSON.parse(JSON.stringify(cwds.multipleFacets.selectedFacets))
                if ($('.sort-by-mobile select').val()) {
                    var selectedSortOption = $('.sort-by-mobile select').val();
                    var searchDiv = $(this).closest(".search-page").find('.search');
                    var sortIcon = $(searchDiv).find(".sort-atoz");
                    var sortByCtrl = $(searchDiv).find('.sortby-section select');
                    $(sortByCtrl).val(selectedSortOption);
                    cwds.search.setSortOrder(sortByCtrl, sortIcon);
                }
                angular.element($(".search")).scope().search($(".search").attr("ng-controller"), 1, $(".search"), false);
            });
            $("#ChooseMultiple .facet-items-select select").on("change", function () {
                var ct = $(this).closest(".facet-multiple-select");
                var facetName = $(this).val();
                var searchDiv = $(".search");
                var searchFacetApi = $(searchDiv).attr('search-api').replace("GetSearchResults", "GetFacet");
                cwds.search.refreshSearchCriteria();
                angular.element($(ct)).scope().getFacetItems($(searchDiv).attr("ng-controller"), $(ct), facetName, searchFacetApi);
            });
        },
        selectDropDownTypeFilter: function (c) {
            var crt = $(c).closest('.facet-items-body').find('.facet-selected .filter-selected-body');
            var facetName = $(c).attr("data-search-facet-name");
            var facetLabel = $(c).attr("data-search-facet-label");
            var itemCode = $(c).find('option:selected').val();
            var itemValue = $(c).find('option:selected').attr('data-search-facet-item-value');
            var defaultDDSel = $('.facet-list .facet-list-items[data-search-facet-name="' + facetName + '"]').find('select').find('option:first').val();
            for (var i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                    cwds.multipleFacets.selectedFacets[i].Items.length = 0;
                    cwds.multipleFacets.selectedFacets[i].Items[0] = $(c).find('option:selected').val();
                    break;
                }
            }
            angular.element($(crt)).scope().updateDropDown($(c).closest('.search-page'), facetName, facetLabel, itemCode, itemValue, true, defaultDDSel);
        },
        selectFilter: function (c) {
            var crt = $(c).closest('.facet-items-body').find('.facet-selected .filter-selected-body');
            var checkBoxId = $(c).attr('id');
            var facetName = $(c).attr("data-search-facet-name");
            var facetLabel = $(c).attr("data-search-facet-label");
            var itemCode = $(c).attr("data-search-facet-code");
            var itemValue = $(c).attr("data-search-facet-value");
            var checkBoxChecked = $(c).prop('checked');
            var itemExists = false;
            var facetindex;
            for (var i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                    facetindex = i;
                    for (var j = 0; j < cwds.multipleFacets.selectedFacets[i].Items.length; j++) {
                        if (cwds.multipleFacets.selectedFacets[i].Items[j] === itemCode) {
                            itemExists = true;
                            break;
                        }
                    }
                    break;
                }
            }
            if (checkBoxChecked) {
                if (!itemExists) {
                    $('label[for= "' + checkBoxId + '" ]').attr('aria-label', 'Remove filter ' + facetLabel + ': ');
                    cwds.multipleFacets.selectedFacets[facetindex].Items.push(itemCode);
                    angular.element($(crt)).scope().addSelectedFacetLink(facetName, itemCode, itemValue, true);
                }
            } else {
                if (itemExists) {
                    $('label[for= "' + checkBoxId + '" ]').attr('aria-label', 'Filter results by ' + facetLabel + ': ');
                    cwds.multipleFacets.selectedFacets[facetindex].Items.splice(cwds.multipleFacets.selectedFacets[facetindex].Items.indexOf(itemCode), 1);
                    angular.element($(crt)).scope().addSelectedFacetLink(facetName, itemCode, itemValue, false);
                }
            }
        },
        removeSelected: function (c) {
            var facetName = $(c).find("a").attr('data-search-facet-name');
            var facetItemCode = $(c).find("a").attr('data-search-facet-code');
            var facetItemValue = $(c).text();
            //var crt = (".filter-selected-body");
            var crt = $(c).closest('.facet-items-body').find('.facet-selected .filter-selected-body');
            var i;
            var j;
            if ($(c).find("a").attr("data-search-facet-type") === "Slider") {
                for (i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                    if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                        cwds.multipleFacets.selectedFacets[i].Items = [];
                        break;
                    }
                }
                angular.element($(crt)).scope().removeSlider(facetName);

            } else if ($(c).find("a").attr("data-search-facet-type") === "DropDown") {
                for (i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                    if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                        cwds.multipleFacets.selectedFacets[i].Items.length = 0;
                        var defaultDDSel = $('.facet-list .facet-list-items[data-search-facet-name="' + facetName + '"]').find('select').find('option:first').val();
                        cwds.multipleFacets.selectedFacets[i].Items.push(defaultDDSel);
                        break;
                    }
                }
                angular.element($(crt)).scope().updateDropDown($(crt).closest('.search-page'), facetName, null, null, null, false, defaultDDSel);
            } else {
                for (i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                    if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                        for (j = 0; j < cwds.multipleFacets.selectedFacets[i].Items.length; j++) {
                            if (cwds.multipleFacets.selectedFacets[i].Items[j] === facetItemCode) {
                                cwds.multipleFacets.selectedFacets[i].Items.splice(cwds.multipleFacets.selectedFacets[i].Items.indexOf(facetItemCode), 1);
                                $(c).closest("#ChooseMultiple").find(".facet-items-container :checkbox[data-search-facet-name='" + facetName + "'][data-search-facet-code='" + cwds.utility.escapeQuotes(facetItemCode) + "']").prop('checked', false);
                                angular.element($(crt)).scope().addSelectedFacetLink(facetName, facetItemCode, facetItemValue, false);
                                break;
                            }
                        }
                        break;
                    }
                }
            }
        },
        bindFacetItems: function (ctrl) {
            if (!$(ctrl).closest(".facet-items").hasClass("active")) {
                $(".facet-multiple-select .active").removeClass("active");
                $(ctrl).closest(".facet-items").addClass("active");
            }
            var ct = $(ctrl).closest(".facet-multiple-select");
            var facetName = $(ctrl).find("a").attr("data-search-facet-name");
            var searchDiv = $(".search");
            var searchFacetApi = $(searchDiv).attr('search-api').replace("GetSearchResults", "GetFacet");
            cwds.search.refreshSearchCriteria();
            angular.element($(ct)).scope().getFacetItems($(searchDiv).attr("ng-controller"), $(ct), facetName, searchFacetApi);
        },
        resetSelectedCheckBoxes: function () {
            for (var i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                if (cwds.multipleFacets.selectedFacets[i].Type !== "Slider") {
                    for (var j = 0; j < cwds.multipleFacets.selectedFacets[i].Items.length; j++) {
                        var facetName = cwds.multipleFacets.selectedFacets[i].Name;
                        var facetItemCode = cwds.multipleFacets.selectedFacets[i].Items[j];
                        $(".facet-items-container :checkbox[data-search-facet-name='" + facetName + "'][data-search-facet-code='" + cwds.utility.escapeQuotes(facetItemCode) + "']").prop('checked', true);
                    }
                }
            }
        },


        bindDateFieldEventsForSlider: function () {
            $("#ChooseMultiple .facet-items-container .facet-slider .facet-cal").click(function (e) {
                $(this).closest(".input-group").find("input[type=text]").focus();
            });
            $("#ChooseMultiple .facet-items-container .facet-slider .facet-calendar").mask(cwdsUtils.mask.mmddyyyy);
            $("#ChooseMultiple .facet-items-container .show-toggle a").click(function (e) {
                e.preventDefault();
                var facetName = $(this).closest(".facet-items-container").find(".facet-slider .facet-slider-item").attr("data-search-facet-name");
                var sliderSection = $(this).closest(".facet-items-container").find(".facet-slider .slider-section");
                var dateFieldSection = $(this).closest(".facet-items-container").find(".facet-slider .date-field-section");
                if ($(this).hasClass("show-date-fields")) {
                    $(sliderSection).addClass("hidden");
                    $(dateFieldSection).removeClass("hidden");
                    $(this).addClass('hidden');
                    $(this).closest(".show-toggle").find(".show-slider").removeClass("hidden");
                } else {
                    $(sliderSection).removeClass("hidden");
                    $(dateFieldSection).addClass("hidden");
                    $(this).addClass('hidden');
                    $(this).closest(".show-toggle").find(".show-date-fields").removeClass("hidden");
                }
            });

            $("#ChooseMultiple .facet-items-container .facet-slider .date-fields-apply").click(function () {
                var facetSlider = $(this).closest(".facet-items-container").find(".facet-slider");
                var facetName = $(facetSlider).find(".facet-slider-item").attr("data-search-facet-name");

                var facetLabel = $(facetSlider).find(".facet-slider-item").attr("data-search-facet-label");
                alert(facetLabel.length);
                var dateFieldMinSel = $(facetSlider).find(".date-field-section .facet-begin-date .facet-calendar").val();
                var dateFieldMaxSel = $(facetSlider).find(".date-field-section .facet-end-date .facet-calendar").val();

                var sliderType = $(facetSlider).find(".facet-slider-item").attr("data-search-facet-slider-type");
                var sRange = $(facetSlider).find(".facet-slider-item").attr("data-search-facet-slider-range").split(":");

                for (var i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                    if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                        if (cwds.multipleFacets.selectedFacets[i].Items.length === 0) {
                            cwds.multipleFacets.selectedFacets[i].Items.push(dateFieldMinSel);
                            cwds.multipleFacets.selectedFacets[i].Items.push(dateFieldMaxSel);
                        } else {
                            cwds.multipleFacets.selectedFacets[i].Items[0] = dateFieldMinSel;
                            cwds.multipleFacets.selectedFacets[i].Items[1] = dateFieldMaxSel;
                        }
                        break;
                    }
                }
                var crt = (".filter-selected-body");
                angular.element($(crt)).scope().updateSlider(facetName, facetLabel, cwds.multipleFacets.selectedFacets[i].Items, sliderType, sRange);
            });
        },


        initSlider: function () {
            if ($("#ChooseMultiple .facet-items-container .facet-slider .facet-slider-item").length > 0) {
                $("#ChooseMultiple .facet-items-container .facet-slider .facet-slider-item").each(function () {
                    cwds.multipleFacets.initBootstrapSlider($(this));
                });
            } else {
                cwds.multipleFacets.activeSlider = '';
            }
        },
        initBootstrapSlider: function (ctrl) {
            var facetName = $(ctrl).attr("data-search-facet-name");
            var sliderType = $(ctrl).attr("data-search-facet-slider-type");
            var valMin;
            var valMax;
            var sRange = $(ctrl).attr("data-search-facet-slider-range").split(":");
            var sMin;
            var sMax;
            if (sliderType === 'Integer') {
                valMin = parseInt($(ctrl).attr("data-search-facet-slider-min-value"));
                valMax = parseInt($(ctrl).attr("data-search-facet-slider-max-value"));
                sMin = parseInt(sRange[0]);
                sMax = parseInt(sRange[1]);
                if (sMin < 0) {
                    sMin = 0;
                    $(ctrl).closest(".facet-slider").find(".slider-value").text(valMin + ' - ' + valMax);
                    $(ctrl).bootstrapSlider({
                        id: facetName + 'Dialog',
                        range: true,
                        min: sMin,
                        max: sMax,
                        value: [valMin, valMax]
                    });
                } else {
                    $(ctrl).closest(".facet-slider").find(".slider-value").text('0 - ' + valMin);
                    $(ctrl).bootstrapSlider({
                        id: facetName + 'Dialog',
                        range: false,
                        min: 0,
                        max: sMax,
                        value: valMin
                    });
                }
            } else {
                valMin = $(ctrl).attr("data-search-facet-slider-min-value");
                valMax = $(ctrl).attr("data-search-facet-slider-max-value");
                sMin = sRange[0];
                sMax = sRange[1];
                var sliderDefault = parseInt($(ctrl).attr("data-search-slider-default"));

                var resetSliderOnLoad = $(ctrl).attr("data-search-reset-onload");
                if (resetSliderOnLoad == "1") {
                    if (sliderDefault > 0) {
                        var minDate = new Date(sRange[0]);
                        var maxDate = new Date(sRange[1]);
                        var selMin = new Date(valMin);
                        var selMax = new Date(valMax);
                        var timeDiffSelMin = Math.abs(new Date(minDate).getTime() - new Date(selMin).getTime());
                        var daysDiffSelMin = timeDiffSelMin / (1000 * 3600 * 24);
                        var timeDiffSelMax = Math.abs(new Date(selMax).getTime() - new Date(minDate).getTime());
                        var daysDiffSelMax = timeDiffSelMax / (1000 * 3600 * 24);
                        $(ctrl).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                        $(ctrl).bootstrapSlider({
                            id: facetName + 'Dialog',
                            range: true,
                            min: 0,
                            max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                            value: [daysDiffSelMin, daysDiffSelMax],
                            formatter: function (value) {
                                return cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax)
                            }
                        });
                    } else {
                        var minDate = new Date(sRange[0]);
                        var maxDate = new Date(sRange[1]);
                        $(ctrl).closest(".facet-slider").find(".slider-value").text("No Filter");
                        $(ctrl).bootstrapSlider({
                            id: facetName + 'Dialog',
                            range: false,
                            min: 0,
                            max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                            value: [0, 0]
                        });
                    }
                } else {
                    if (sMin) {
                        var minDate = new Date(sRange[0]);
                        var maxDate = new Date(sRange[1]);
                        var selMin = new Date(valMin);
                        var selMax = new Date(valMax);
                        var timeDiffSelMin = Math.abs(new Date(minDate).getTime() - new Date(selMin).getTime());
                        var daysDiffSelMin = timeDiffSelMin / (1000 * 3600 * 24);
                        var timeDiffSelMax = Math.abs(new Date(selMax).getTime() - new Date(minDate).getTime());
                        var daysDiffSelMax = timeDiffSelMax / (1000 * 3600 * 24);
                        $(ctrl).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                        $(ctrl).bootstrapSlider({
                            id: facetName + 'Dialog',
                            range: true,
                            min: 0,
                            max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                            value: [daysDiffSelMin, daysDiffSelMax],
                            formatter: function (value) {
                                return cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax)
                            }
                        });
                    } else {
                        $(ctrl).closest(".facet-slider").find(".slider-value").text('0 - ' + valMin);
                        $(ctrl).bootstrapSlider({
                            id: facetName + 'Dialog',
                            range: false,
                            min: 0,
                            max: sMax,
                            value: valMin
                        });
                    }
                }
            }
            if (cwds.multipleFacets.activeSlider !== '') {
                $(ctrl).bootstrapSlider('refresh');
            }
            cwds.multipleFacets.activeSlider = facetName;
            $(ctrl).on("slide", function (slideEvt) {
                var sliderType = $(this).attr("data-search-facet-slider-type");
                if (sliderType == 'Integer') {

                    if (slideEvt.value) {
                        if ($.isArray(slideEvt.value)) {
                            $(this).closest(".facet-slider").find(".slider-value").text(slideEvt.value[0] + ' - ' + slideEvt.value[1]);
                        } else {
                            $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + slideEvt.value);
                        }
                    } else {
                        $(this).closest(".facet-slider").find(".slider-value").text('0');
                    }
                } else {
                    if (slideEvt.value) {
                        var sRange = $(this).attr("data-search-facet-slider-range").split(":");
                        var minVal = sRange[0];
                        var maxVal = sRange[1];
                        var selMin = new Date(minVal);
                        var selMax = new Date(minVal);
                        if ($.isArray(slideEvt.value)) {
                            selMin.setDate(selMin.getDate() + slideEvt.value[0]);
                            selMax.setDate(selMax.getDate() + slideEvt.value[1]);
                            $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            $(this).closest(".facet-slider").find(".tooltip-inner").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                        } else {
                            selMin.setDate(selMin.getDate() + slideEvt.value);
                            $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                            $(this).closest(".facet-slider").find(".tooltip-inner").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                        }
                    }
                }
            });
            $(ctrl).on("slideStop", function (slideEvt) {
                var crt = (".filter-selected-body");
                var sliderType = $(this).attr("data-search-facet-slider-type");
                var facetName = $(this).attr("data-search-facet-name");
                var facetLabel = $(this).attr("data-search-facet-label");
                var minRange = 0;
                var maxRange = 0;
                var sRange = $(this).attr("data-search-facet-slider-range").split(":");
                var sliderDefault = parseInt($(this).attr("data-search-slider-default"));
                var resetSliderOnLoad = $(this).attr("data-search-reset-onload");
                if (sliderType == 'Integer') {
                    if (slideEvt.value) {
                        if ($.isArray(slideEvt.value)) {
                            minRange = slideEvt.value[0];
                            maxRange = slideEvt.value[1];
                            $(this).closest(".facet-slider").find(".slider-value").text(minRange + ' - ' + maxRange);
                        } else {
                            minRange = slideEvt.value;
                            maxRange = 0;
                            $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + minRange);
                        }
                    }
                } else {
                    var minVal = sRange[0];
                    var maxVal = sRange[1];
                    var selMin = new Date(minVal);
                    var selMax = new Date(minVal);
                    if (resetSliderOnLoad == "1") {
                        if (sliderDefault > 0 && slideEvt.value && $.isArray(slideEvt.value)) {
                            minRange = slideEvt.value[0];
                            maxRange = slideEvt.value[1];
                            selMin.setDate(selMin.getDate() + slideEvt.value[0]);
                            selMax.setDate(selMax.getDate() + slideEvt.value[1]);
                            $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            $(this).closest(".facet-slider").find(".tooltip-inner").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                        } else {
                            if (slideEvt.value && $.isArray(slideEvt.value)) {
                                minRange = slideEvt.value[0];
                                maxRange = slideEvt.value[1];
                                selMin.setDate(selMin.getDate() + slideEvt.value[0]);
                                selMax.setDate(selMax.getDate() + slideEvt.value[1]);
                                $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                                $(this).closest(".facet-slider").find(".tooltip-inner").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));

                                if (maxRange == "0") {
                                    minRange = slideEvt.value;
                                    maxRange = 0;
                                    selMin.setDate(selMin.getDate() + slideEvt.value);
                                    $(this).closest(".facet-slider").find(".slider-value").text('No Filter');
                                    $(this).closest(".facet-slider").find(".tooltip-inner").text('0 : 0');
                                }
                            }
                        }
                    } else {

                        if (slideEvt.value) {
                            if ($.isArray(slideEvt.value)) {
                                minRange = slideEvt.value[0];
                                maxRange = slideEvt.value[1];
                                selMin.setDate(selMin.getDate() + slideEvt.value[0]);
                                selMax.setDate(selMax.getDate() + slideEvt.value[1]);
                                $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                                $(this).closest(".facet-slider").find(".tooltip-inner").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            } else {
                                minRange = slideEvt.value;
                                maxRange = 0;
                                selMin.setDate(selMin.getDate() + slideEvt.value);
                                $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                                $(this).closest(".facet-slider").find(".tooltip-inner").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                            }
                        }
                    }
                }
                for (var i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                    if (cwds.multipleFacets.selectedFacets[i].Name === facetName) {
                        cwds.multipleFacets.selectedFacets[i].Items = [];
                        if (minRange > 0 || maxRange > 0) {
                            cwds.multipleFacets.selectedFacets[i].Items.push(minRange);
                            cwds.multipleFacets.selectedFacets[i].Items.push(maxRange);
                            angular.element($(crt)).scope().updateSlider(facetName, facetLabel, cwds.multipleFacets.selectedFacets[i].Items);
                        } else {
                            angular.element($(crt)).scope().removeSlider(facetName);
                        }
                        break;
                    }
                }
            });
        },
        clearAppliedFacets: function (appliedFiltersDisplayDiv) {
            $(appliedFiltersDisplayDiv).empty();
            $(appliedFiltersDisplayDiv).closest(".facet-selected").addClass('hidden');
            $(appliedFiltersDisplayDiv).closest(".facet-multiple-select").find(".modal-facet .modal-facet-body .facet-items").removeClass("selected");
            angular.element($(appliedFiltersDisplayDiv)).scope().updateAppliedFacetCount();
        },
        resetSelectedFacets: function () {
            var facetName;
            var facetLabel;
            var facetItemCode;
            var facetItemValue;
            var index;
            var crt = ("#ChooseMultiple .facet-multiple-select .facet-selected .filter-selected-body");
            var i;
            var j;

            cwds.multipleFacets.clearAppliedFacets(crt);
            cwds.multipleFacets.selectedFacets = JSON.parse(JSON.stringify(cwds.facet.applied));
            for (i = 0; i < cwds.multipleFacets.selectedFacets.length; i++) {
                for (j = 0; j < cwds.multipleFacets.selectedFacets[i].Items.length; j++) {
                    if (cwds.multipleFacets.selectedFacets[i].Type === "Slider") {
                        facetName = cwds.multipleFacets.selectedFacets[i].Name;
                        facetSliderRange = $(".search #FacetDetails .facet-list .facet-list-items[data-search-facet-name='" + facetName + "'] .facet-slider-item").attr("data-search-facet-slider-range");
                        angular.element($(crt)).scope().updateSlider(cwds.multipleFacets.selectedFacets[i].Name, cwds.multipleFacets.selectedFacets[i].Label, cwds.multipleFacets.selectedFacets[i].Items, cwds.multipleFacets.selectedFacets[i].SliderType, facetSliderRange.split(":"));
                    } else if (cwds.multipleFacets.selectedFacets[i].Type === "DropDown") {
                        var pSection = $(crt).closest('.search-page');
                        facetName = cwds.multipleFacets.selectedFacets[i].Name;
                        facetLabel = cwds.multipleFacets.selectedFacets[i].Label;
                        facetItemCode = cwds.multipleFacets.selectedFacets[i].Items[j];
                        facetItemValue = $(pSection).find(".search #FacetDetails .facet-list .facet-list-items[data-search-facet-name='" + facetName + "'] select option[value='" + facetItemCode + "']").attr('data-search-facet-item-value');
                        var defaultDDSel = $('.facet-list .facet-list-items[data-search-facet-name="' + facetName + '"]').find('select').find('option:first').val();
                        angular.element($(crt)).scope().updateDropDown($(pSection), facetName, facetLabel, facetItemCode, facetItemValue, true, defaultDDSel);
                    } else {
                        facetName = cwds.multipleFacets.selectedFacets[i].Name;
                        facetItemCode = cwds.multipleFacets.selectedFacets[i].Items[j];
                        facetItemValue = $(".search #FacetDetails .facet-list .facet-list-items[data-search-facet-name='" + facetName + "'] a[data-search-facet-code='" + cwds.utility.escapeQuotes(facetItemCode) + "']").text();
                        angular.element($(crt)).scope().addSelectedFacetLink(facetName, facetItemCode, facetItemValue, true);
                    }
                }
            }
        }
    },

    facet: {
        group: "",
        applied: [],
        modalFacetDetails: [],
        sliderInitialized: [],
        bindEvents: function () {
            if (cwds.facet.applied.length === 0) {
                $(".facet .facet-list-items").each(function () {
                    var fg = { "Name": $(this).attr("data-search-facet-name"), Items: [], Type: $(this).attr("data-search-facet-type"), Label: $(this).attr("data-search-facet-label"), SliderType: '' };
                    if ($(this).attr("data-search-facet-type") === 'DropDown') {
                        fg.Items[0] = $(this).find('option:selected').val();
                    } else if ($(this).attr("data-search-facet-type") == 'Slider') {
                        fg.SliderType = $(this).find('.facet-slider-item').attr("data-search-facet-slider-type");
                    }
                    cwds.facet.applied.push(fg);
                });
            }
            if (cwds.multipleFacets.selectedFacets.length === 0) {
                $(".facet .facet-list-items").each(function () {
                    var fg = { "Name": $(this).attr("data-search-facet-name"), Items: [], Type: $(this).attr("data-search-facet-type"), Label: $(this).attr("data-search-facet-label") };
                    if ($(this).attr("data-search-facet-type") === 'DropDown') {
                        fg.Items[0] = $(this).find('option:selected').val();
                    }
                    cwds.multipleFacets.selectedFacets.push(fg);
                });
            }
            if (cwds.facet.modalFacetDetails.length === 0 || cwds.facet.modalFacetDetails.length !== $('.facet .facet-list-items').length) {
                cwds.facet.modalFacetDetails.length = 0
                $(".facet .facet-list-items").each(function () {
                    var item = $(this).closest(".facet-list");
                    cwds.facet.modalFacetDetails.push({
                        "name": $(item).find(".facet-list-items").attr("data-search-facet-name"),
                        "allowMultiSelect": $(item).attr("data-search-allow-multi-select"),
                        "label": $(item).find(".list-title a").text(),
                        "type": $(this).attr("data-search-facet-type")
                    });
                });
            }
            $(".facet .list-title .show-hide").each(function () {
                $(this).click(function (e) { e.preventDefault(); cwds.facet.showHideList($(this)); });
            });
            $(".facet .facet-header .facet-sh").each(function () {
                $(this).click(function (e) { e.preventDefault(); cwds.facet.showHideAll($(this)); });
            });
            $(".search .facet .facet-body .facet-list .facet-list-items ul li a").click(function (e) {
                e.preventDefault();
                cwds.facet.addFacetSelectionForLink($(this));
            });


            $(".search .facet .facet-body .facet-list .facet-cal").click(function (e) {
                $(this).closest(".input-group").find("input[type=text]").focus();
            });
            $(".search .facet .facet-body .facet-list .facet-calendar").mask(jgUtils.mask.mmddyyyy);

            $(".search .facet .facet-body .facet-list .show-toggle a").click(function (e) {
                e.preventDefault();
                var facetListItems = $(this).closest(".facet-list").find(".facet-list-items");
                var facetSliderItem = $(this).closest(".facet-list").find(".facet-list-items .facet-slider-item");
                var facetName = $(this).closest(".facet-list").find(".facet-list-items").attr("data-search-facet-name");
                var sliderSection = $(this).closest(".facet-list").find(".facet-list-items .facet-slider .slider-section");
                var dateFieldSection = $(this).closest(".facet-list").find(".facet-list-items .facet-slider .date-field-section");
                var valMin = $(facetSliderItem).attr("data-search-facet-slider-min-value"); //slider min value selection
                var valMax = $(facetSliderItem).attr("data-search-facet-slider-max-value"); //slider max value selection
                if ($(this).hasClass("show-date-fields")) {
                    $(sliderSection).addClass("hidden");
                    $(dateFieldSection).removeClass("hidden");
                    $(this).addClass('hidden');
                    $(this).closest(".show-toggle").find(".show-slider").removeClass("hidden");
                } else {
                    $(sliderSection).removeClass("hidden");
                    $(dateFieldSection).addClass("hidden");
                    $(this).addClass('hidden');
                    $(this).closest(".show-toggle").find(".show-date-fields").removeClass("hidden");
                }
            });
            //$(".search .facet .facet-body .facet-list .select-more-facet a").click(function (e) {
            //    e.preventDefault();
            //    var facetName = $(this).closest(".facet-list").find(".facet-list-items").attr("data-search-facet-name");
            //    var li = $("#ChooseMultiple").find(".facet-multiple-select .facet-items-list li a[data-search-facet-name='" + facetName + "']");
            //    cwds.dialog.open("ChooseMultiple");
            //    cwds.multipleFacets.resetSelectedFacets();
            //    cwds.multipleFacets.bindFacetItems($(li).closest('.facet-items'));
            //});
            $(".search-filter-icon .filter-section").click(function (e) {
                e.preventDefault();
                cwds.dialog.open("ChooseMultiple");
                cwds.multipleFacets.resetSelectedFacets();
                var ct = $("#ChooseMultiple .facet-multiple-select");
                $(ct).find("select option:first-child").attr("selected", "selected");
                var facetName = $(ct).find("select").val();
                var searchDiv = $(".search");
                var searchFacetApi = $(searchDiv).attr('search-api').replace("GetSearchResults", "GetFacet");
                angular.element($(ct)).scope().getFacetItems($(searchDiv).attr("ng-controller"), $(ct), facetName, searchFacetApi);
            });


            $(".search .facet .facet-body .facet-list .facet-dropDown").each(function () {
                $(this).on("change", function () {
                    var name = $(this).attr("data-search-facet-name");
                    for (var i = 0; i < cwds.facet.applied.length; i++) {
                        if (cwds.facet.applied[i].Name === name) {
                            cwds.facet.applied[i].Items.length = 0;
                            cwds.facet.applied[i].Items[0] = $(this).find('option:selected').val();
                            //cwds.facet.applied[i].Items[0]= $(this).find('option:selected').attr('data-search-facet-item-value');
                            break;
                        }
                    }
                    var ct = $(this).closest(".search");
                    angular.element($(ct)).scope().search($(ct).attr("ng-controller"), 1, $(ct), false);
                });
            });
            $(".search .facet .facet-body .facet-list .select-more-facet a").click(function (e) {
                e.preventDefault();
                var facetName = $(this).closest(".facet-list").find(".facet-list-items").attr("data-search-facet-name");
                var li = $("#ChooseMultiple").find(".facet-multiple-select .facet-items li a[data-search-facet-name='" + facetName + "']");
                cwds.dialog.open("ChooseMultiple");
                cwds.multipleFacets.resetSelectedFacets();
                cwds.multipleFacets.bindFacetItems($(li).closest('.facet-items'));
            });

            $(".search .facet .facet-body .facet-list .facet-slider .date-fields-apply").click(function () {
                var facetListItems = $(this).closest(".facet-list").find(".facet-list-items");
                var facetSliderItem = $(this).closest(".facet-list").find(".facet-list-items .facet-slider-item");
                var facetName = $(facetListItems).attr("data-search-facet-name");
                var dateFieldMinSel = $(facetListItems).find(".date-field-section .facet-begin-date .facet-calendar").val();
                var dateFieldMaxSel = $(facetListItems).find(".date-field-section .facet-end-date .facet-calendar").val();

                for (var i = 0; i < cwds.facet.applied.length; i++) {
                    if (cwds.facet.applied[i].Name === facetName) {
                        if (cwds.facet.applied[i].Items.length === 0) {
                            cwds.facet.applied[i].Items.push(dateFieldMinSel);
                            cwds.facet.applied[i].Items.push(dateFieldMaxSel);
                        } else {
                            cwds.facet.applied[i].Items[0] = dateFieldMinSel;
                            cwds.facet.applied[i].Items[1] = dateFieldMaxSel;
                        }
                        break;
                    }
                }
                var ct = $(this).closest(".search");
                angular.element($(ct)).scope().search($(ct).attr("ng-controller"), 1, $(ct), false);
                var crt = (".filter-selected-body");
                angular.element($(crt)).scope().updateSlider(facetName, facetLabel, cwds.multipleFacets.selectedFacets[i].Items, sliderType, sRange);
            });


            $(".search .facet .facet-body .facet-list .facet-slider .facet-slider-item").each(function () {
                var facetName = $(this).closest(".facet-list-items").attr("data-search-facet-name");
                var sliderType = $(this).attr("data-search-facet-slider-type");
                var valMin;
                var valMax;
                var sRange = $(this).attr("data-search-facet-slider-range").split(":");
                var sMin;
                var sMax;

                if (sliderType === 'Integer') {
                    var valMin = parseInt($(this).attr("data-search-facet-slider-min-value"));
                    var valMax = parseInt($(this).attr("data-search-facet-slider-max-value"));
                    var sMin = parseInt(sRange[0]);
                    var sMax = parseInt(sRange[1]);
                    if (sMin < 0) {
                        sMin = 0;
                        $(this).closest(".facet-slider").find(".slider-value").text(valMin + ' - ' + valMax);
                        $(this).bootstrapSlider({
                            id: facetName + 'Facet',
                            range: true,
                            min: sMin,
                            max: sMax,
                            value: [valMin, valMax]
                        });
                    } else {
                        $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + valMin);
                        $(this).bootstrapSlider({
                            id: facetName + 'Facet',
                            range: false,
                            min: 0,
                            max: sMax,
                            value: valMin
                        });
                    }
                } else if (sliderType === 'Date') {
                    valMin = $(this).attr("data-search-facet-slider-min-value");
                    valMax = $(this).attr("data-search-facet-slider-max-value");
                    sMin = sRange[0];
                    sMax = sRange[1];
                    var sliderDefault = parseInt($(this).attr("data-search-slider-default"));

                    var resetSliderOnLoad = $(this).attr("data-search-reset-onload");
                    if (resetSliderOnLoad == "1") {
                        if (sliderDefault > 0) {
                            var minDate = new Date(sRange[0]);
                            var maxDate = new Date(sRange[1]);
                            var selMin = new Date(valMin);
                            var selMax = new Date(valMax);
                            var timeDiffSelMin = Math.abs(new Date(minDate).getTime() - new Date(selMin).getTime());
                            var daysDiffSelMin = timeDiffSelMin / (1000 * 3600 * 24);
                            var timeDiffSelMax = Math.abs(new Date(selMax).getTime() - new Date(minDate).getTime());
                            var daysDiffSelMax = timeDiffSelMax / (1000 * 3600 * 24);
                            $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            $(this).bootstrapSlider({
                                id: facetName + 'Facet',
                                range: true,
                                min: 0,
                                max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                                value: [daysDiffSelMin, daysDiffSelMax],
                                formatter: function (value) {
                                    return cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax)
                                }
                            });
                        } else {
                            var minDate = new Date(sRange[0]);
                            var maxDate = new Date(sRange[1]);
                            $(this).closest(".facet-slider").find(".slider-value").text("No Filter");
                            $(this).bootstrapSlider({
                                id: facetName + 'Facet',
                                range: false,
                                min: 0,
                                max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                                value: [0, 0]
                            });
                        }
                    } else {
                        if (sMin) {
                            var minDate = new Date(sRange[0]);
                            var maxDate = new Date(sRange[1]);
                            var selMin = new Date(valMin);
                            var selMax = new Date(valMax);
                            var timeDiffSelMin = Math.abs(new Date(minDate).getTime() - new Date(selMin).getTime());
                            var daysDiffSelMin = timeDiffSelMin / (1000 * 3600 * 24);
                            var timeDiffSelMax = Math.abs(new Date(selMax).getTime() - new Date(minDate).getTime());
                            var daysDiffSelMax = timeDiffSelMax / (1000 * 3600 * 24);
                            $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            $(this).bootstrapSlider({
                                id: facetName + 'Facet',
                                range: true,
                                min: 0,
                                max: Math.round((maxDate.getTime() - minDate.getTime()) / 86400000),
                                value: [daysDiffSelMin, daysDiffSelMax],
                                formatter: function (value) {
                                    return cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax)
                                }
                            });
                        } else {
                            $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + valMin);
                            $(this).bootstrapSlider({
                                id: facetName + 'Facet',
                                range: false,
                                min: 0,
                                max: sMax,
                                value: valMin
                            });
                        }
                    }
                }
                $(this).on("slide", function (slideEvt) {
                    var ctrl = $(this);
                    var sliderType = $(ctrl).attr("data-search-facet-slider-type");
                    if (sliderType == 'Integer') {
                        if (slideEvt.value) {
                            if ($.isArray(slideEvt.value)) {
                                $(this).closest(".facet-slider").find(".slider-value").text(slideEvt.value[0] + ' - ' + slideEvt.value[1]);
                            } else {
                                $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + slideEvt.value);
                            }
                        }
                    } else {
                        if (slideEvt.value) {
                            var sRange = $(this).attr("data-search-facet-slider-range").split(":");
                            var minVal = sRange[0];
                            var maxVal = sRange[1];
                            var selMin = new Date(minVal);
                            var selMax = new Date(minVal);
                            if ($.isArray(slideEvt.value)) {
                                selMin.setDate(selMin.getDate() + slideEvt.value[0]);
                                selMax.setDate(selMax.getDate() + slideEvt.value[1]);
                                $(this).closest(".facet-slider").find(".slider-value").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                                $(this).closest(".facet-slider").find(".tooltip-inner").text(cwds.facet.convertToDDMMYYYY(selMin) + ' - ' + cwds.facet.convertToDDMMYYYY(selMax));
                            } else {
                                selMin.setDate(selMin.getDate() + slideEvt.value);
                                $(this).closest(".facet-slider").find(".slider-value").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                                $(this).closest(".facet-slider").find(".tooltip-inner").text('0 - ' + cwds.facet.convertToDDMMYYYY(selMin));
                            }
                        }
                    }
                });
                $(this).on("slideStop", function (slideEvt) {
                    var ctrl = $(this);
                    var sliderType = $(ctrl).attr("data-search-facet-slider-type");
                    var name = $(this).closest(".facet-list-items").attr("data-search-facet-name");
                    var minRange = 0;
                    var maxRange = 0;
                    if (slideEvt.value) {
                        if ($.isArray(slideEvt.value)) {
                            minRange = slideEvt.value[0];
                            maxRange = slideEvt.value[1];
                        } else {
                            minRange = slideEvt.value;
                            maxRange = 0;
                        }
                    }
                    for (var i = 0; i < cwds.facet.applied.length; i++) {
                        if (cwds.facet.applied[i].Name === name) {
                            if (cwds.facet.applied[i].Items.length === 0) {
                                cwds.facet.applied[i].Items.push(minRange);
                                cwds.facet.applied[i].Items.push(maxRange);
                            } else {
                                cwds.facet.applied[i].Items[0] = minRange;
                                cwds.facet.applied[i].Items[1] = maxRange;
                            }
                            break;
                        }
                    }
                    var ct = $(this).closest(".search");
                    angular.element($(ct)).scope().search($(ct).attr("ng-controller"), 1, $(ct), false);
                });
            });
        },

        convertToDDMMYYYY: function (InputDate) {
            var ConvDate = new Date(InputDate);
            var dd = ConvDate.getDate();
            var mm = ConvDate.getMonth() + 1;
            var yyyy = ConvDate.getFullYear();
            if (dd < 10) {
                dd = '0' + dd
            }
            if (mm < 10) {
                mm = '0' + mm
            }
            return (mm + "/" + dd + "/" + yyyy)
        },
        daysBetween: function (startDate, endDate) {
            var diff = Math.round((Date.parse(endDate) - Date.parse(startDate)) / 86400000);
            return diff
        },
        showHideList: function (lCtrl) {
            if ($(lCtrl).find("i.fa-plus").length > 0) cwds.facet.showList(lCtrl);
            else cwds.facet.hideList(lCtrl);
        },
        showList: function (lCtrl) {
            $(lCtrl).find("i.fa-plus").removeClass('fa-plus').addClass('fa-minus');
            var fList = $(lCtrl).closest('.facet-list');
            $(fList).find(".facet-list-items").removeClass("hidden");
            $(fList).find(".select-more-facet").removeClass("hidden");
            $(lCtrl).attr('aria-label', 'Collapse');
        },
        hideList: function (lCtrl) {
            $(lCtrl).find("i.fa-minus").removeClass('fa-minus').addClass('fa-plus');
            var fList = $(lCtrl).closest('.facet-list');
            $(fList).find(".facet-list-items").addClass("hidden");
            $(fList).find(".select-more-facet").addClass("hidden");
            $(lCtrl).attr('aria-label', 'Expand');
        },
        showHideAll: function (lCtrl) {
            if ($(lCtrl).find("i.fa-caret-square-o-up").length > 0) {
                $(lCtrl).find("i.fa-caret-square-o-up").removeClass('fa-caret-square-o-up').addClass('fa-caret-square-o-down');
                $(lCtrl).closest('.facet').find(".facet-body").addClass("block");
                $(lCtrl).attr('title', "Hide Additional Filters");
            }
            else {
                $(lCtrl).find("i.fa-caret-square-o-down").removeClass('fa-caret-square-o-down').addClass('fa-caret-square-o-up');
                $(lCtrl).closest('.facet').find(".facet-body").removeClass("block");
                $(lCtrl).attr('title', "Show Additional Filters");
            }
        },
        addFacetSelectionForLink: function (a) {
            var del = $(a).hasClass("facet-delete");
            var name = $(a).closest(".facet-list-items").attr("data-search-facet-name");
            var item = $(a).attr("data-search-facet-code");
            for (var i = 0; i < cwds.facet.applied.length; i++) {
                if (cwds.facet.applied[i].Name === name) {
                    if (del) {
                        var index = cwds.facet.applied[i].Items.indexOf(item);
                        if (index >= 0) cwds.facet.applied[i].Items.splice(index, 1);

                    } else {
                        cwds.facet.applied[i].Items.push(item);
                    }
                    break;
                }
            }
            var ct = $(a).closest(".search");
            cwds.search.refreshSearchCriteria()
            angular.element($(ct)).scope().search($(ct).attr("ng-controller"), 1, $(ct), false);
        },
        showFacetItemsDD: function (fc) {
            var v = $(fc).val();
            var li = $(".facet-select-multiple .facet-items ul li a[data-jg-item-id='" + v + "']");
            cwds.facet.showFacetItems($(li));
        },
        appliedFacetExists: function () {
            var result = false;
            for (var i = 0; i < cwds.facet.applied.length; i++) {
                if (cwds.facet.applied[i].Type === 'Slider') {
                    if (cwds.facet.applied[i].Items.length > 0) {
                        for (var j = 0; j < cwds.facet.applied[i].Items.length; j++) {
                            if (cwds.facet.applied[i].Items[j] !== "" || cwds.facet.applied[i].Items[j] !== "0") {
                                result = true;
                                break;
                            }
                        }
                    }
                } else {
                    if (cwds.facet.applied[i].Items.length > 0) {
                        result = true;
                        break;
                    }
                }
            }
            return result;
        }
    },
    applied: {
        init: function () {
        }
    },
    list: {
        dataSelected: [],
        retainSelection: false,
        searchParams: null,
        exportToExcelTimer: null,
        exportToExcelCookieName: "ExcelFileDownloaded",
        init: function () {
            var pg = $(".list .pagination-section");
            $(pg).find("a.page-first").click(function () {
                if (!$(this).hasClass("not-active")) {
                    var listCtrl = $(this).closest(".list");
                    angular.element($(listCtrl)).scope().search($(listCtrl).attr("ng-controller"), 1, $(listCtrl), false);
                }
            });
            $(pg).find("a.page-previous").click(function () {
                if (!$(this).hasClass("not-active")) {
                    var listCtrl = $(this).closest(".list");
                    var pnumber = parseInt($(listCtrl).find(".pagination-section .panel-pagination").attr("data-pagination-page")) - 1;
                    angular.element($(listCtrl)).scope().search($(listCtrl).attr("ng-controller"), pnumber, $(listCtrl), false);
                }
            });

            $(pg).find("a.page-next").click(function () {
                if (!$(this).hasClass("not-active")) {
                    var listCtrl = $(this).closest(".list");
                    var pnumber = parseInt($(listCtrl).find(".pagination-section .panel-pagination").attr("data-pagination-page")) + 1;
                    angular.element($(listCtrl)).scope().search($(listCtrl).attr("ng-controller"), pnumber, $(listCtrl), false);
                }
            });
            $(pg).find("a.page-last").click(function () {
                if (!$(this).hasClass("not-active")) {
                    var listCtrl = $(this).closest(".list");
                    var pnumber = parseInt($(listCtrl).find(".pagination-section .panel-pagination").attr("data-pagination-pages"));
                    angular.element($(listCtrl)).scope().search($(listCtrl).attr("ng-controller"), pnumber, $(listCtrl), false);
                }
            });

            $(".list").each(function () {
                if ($(this).attr("ng-controller").length > 0) {
                    var row = parseInt($(this).find("#PageNumber").val());
                    var jsonContent = $(this).find(".list-details #FacetsJSON").val();
                    //if (jsonContent.length > 0) {
                    //    cwds.facet.applied = JSON.parse(jsonContent.split("^").join("&#44;"));
                    //}
                    //if ($(this).find(".list-details #SelectedIdList").val().length > 0) {
                    //    cwds.list.retainSelection = true;
                    //    cwds.list.dataSelected = JSON.parse($(this).find(".list-details #SelectedIdList").val());
                    //    cwds.list.setSelectedCount($(this).find(".list-results .pagination-section"));
                    //}
                    if (typeof getSearchCriteria === "function") {
                        try {
                            cwds.list.searchParams = getSearchCriteria();
                        }
                        catch (err) { }
                    }

                    angular.element($(this)).scope().search($(this).attr("ng-controller"), row, $(this), false);
                }

                $(".list .heading-row a.sort-toggle-link").click(function (e) {
                    var listCtrl = $(this).closest(".list");
                    var columnName = $(this).closest(".header-column").attr("data-column-name");
                    var sortBy = '';

                    if ($(this).find("i.fa-sort-asc").hasClass("active-sort-option") || $(this).find("i.fa-sort-desc").hasClass("active-sort-option")) {
                        $(this).find("i.fa-sort-asc").toggleClass("active-sort-option");
                        $(this).find("i.fa-sort-desc").toggleClass("active-sort-option");
                    } else {
                        $("a.sort-toggle-link").not(this).find("i.active-sort-option").removeClass("active-sort-option");
                        $(this).find("i.fa-sort-asc").addClass("active-sort-option");
                    }

                    if ($(this).find("i.active-sort-option").hasClass("fa-sort-asc")) {
                        sortBy = columnName + "asc"
                    } else {
                        sortBy = columnName + "desc"
                    }
                    $(listCtrl).find(".list-details #SortBy").val(sortBy);
                    angular.element($(listCtrl)).scope().search($(listCtrl).attr("ng-controller"), 1, $(listCtrl), false);
                });
            });
            $("a.export-to-excel-list").click(function (e) {
                e.preventDefault();
                $("#__Action").val($(this).attr("data-search-function-id") + "ExportToExcel");
                if (parseInt($(this).attr("data-export-to-excel-count")) > parseInt($(this).attr("data-record-count"))) {
                    cwds.list.startExcelDownload(true, 0);
                }
                else {
                    cwds.list.startExcelDownload(false, $(this).attr("data-export-to-excel-count"));
                }
            });
        },
        startExcelDownload: function (startDownload, count) {
            var mde = $("#ExportToExcelDialog");
            if (startDownload) {
                cwds.utility.disableValidators();
                $(mde).find("#ExportToExcelDetails").addClass("hidden");
                $(mde).find("#ExportToExcelStarted").removeClass("hidden");
                $(mde).find(".modal-footer").addClass("hidden");
                cwds.dialog.open("ExportToExcelDialog");
                cwds.utility.deleteCookie(cwds.list.exportToExcelCookieName);
                cwds.list.exportToExcelTimer = window.setInterval(cwds.list.excelDownloadTimer, 200);
                $('form').submit();
            } else {
                $(mde).find(".export-to-excel-download-limit").html(count);
                $(mde).find("#ExportToExcelDetails").removeClass("hidden");
                $(mde).find("#ExportToExcelStarted").addClass("hidden");
                $(mde).find(".modal-footer").removeClass("hidden");
                cwds.dialog.open("ExportToExcelDialog");
            }
        },
        excelDownloadTimer: function () {
            if (cwds.utility.getCookie(cwds.list.exportToExcelCookieName) === "1") {
                window.clearInterval(cwds.list.exportToExcelTimer);
                cwds.dialog.close("ExportToExcelDialog");
                cwds.utility.deleteCookie(cwds.list.exportToExcelCookieName);
            }
        },
        executeScriptCallBack: function (resp, controller) {
            var ct = $(".list[ng-controller='" + controller + "']");
            var scriptCallBack = $(ct).attr('data-list-script-callback');
            if (scriptCallBack) {
                cwds.list.executeFunctionByName(scriptCallBack, window, [resp.pageNumber, resp.totalCount, resp]);
            }
        },
        executeFunctionByName: function (functionName, context, argsArray) {
            var nameSpaces = functionName.split(".");
            var func = nameSpaces.pop();
            for (var i = 0; i < nameSpaces.length; i++) {
                context = context[nameSpaces[i]];
            }
            var fnName = context[func];
            if (typeof (fnName) === "function") {
                if (!argsArray) {
                    fnName();
                }
                else {
                    fnName.apply(context, argsArray);
                }
            }
        },
        setPaginationDetails: function (resp, controller) {
            var pClass = "not-active text-muted";
            var listCtrl = $(".list[ng-controller='" + controller + "']");
            var pagePanel = $(listCtrl).find(".pagination-section .panel-pagination");
            $(pagePanel).attr("data-pagination-total", resp.totalCount);
            $(pagePanel).attr("data-pagination-page", resp.pageNumber);
            $(pagePanel).attr("data-pagination-pages", resp.pages);
            if (resp.totalCount > 0) {
                $(listCtrl).find(".export-to-excel-list").removeClass("hidden");
                $(listCtrl).find(".export-to-excel-list").attr("data-record-count", resp.totalCount);
            }
            else {
                $(listCtrl).find(".export-to-excel-list").addClass("hidden");
            }


            if (resp.results.length > 0) {
                $(pagePanel).find(".w-pager").removeClass("not-active").removeClass("text-muted");
                $(pagePanel).find(".w-pager").removeAttr('disabled');

                if (resp.pages === 1) {
                    $(pagePanel).find(".w-pager").addClass(pClass);
                } else {
                    if (resp.pageNumber === 1) {
                        $(pagePanel).find(".page-first,.page-previous").addClass(pClass);
                        $(pagePanel).find(".page-first,.page-previous").attr('disabled', 'disabled');
                        $(pagePanel).find(".page-next").focus();
                    }
                    else if (resp.pageNumber === resp.pages) {
                        $(pagePanel).find(".page-next,.page-last").addClass(pClass);
                        $(pagePanel).find(".page-next,.page-last").attr('disabled', 'disabled');
                        $(pagePanel).find(".page-previous").focus();
                    }
                }
                $(pagePanel).find(".paginate-details").html(resp.pageNumber + "/" + resp.pages);
            }
        },
        bindEvents: function (controller) {
            var listCtrl = $(".list[ng-controller='" + controller + "']");
            cwds.list.bindTriggers(controller);
            cwds.list.quickActions();
            cwds.list.quickActionResultClick();
            //cwds.list.formatMobileTable();
            cwds.list.initControls();
        },
        initControls: function () {
            $(".list .list-results .touchspin-cwds").TouchSpin({});
        },
        bindTriggers: function (controller) {
            var listCtrl = $(".list[ng-controller='" + controller + "']");

            $(listCtrl).find(".data-row .expand-trigger").click(function (e) {
                e.preventDefault();
                $(this).closest(".data-row").find(".collapse-trigger").removeClass("hidden");
                $(this).addClass("hidden");
                $(this).closest(".data-row").find(".mobile-info").removeClass("hidden");
            });

            $(listCtrl).find(".data-row .collapse-trigger").click(function (e) {
                e.preventDefault();
                $(this).closest(".data-row").find(".expand-trigger").removeClass("hidden");
                $(this).addClass("hidden");
                $(this).closest(".data-row").find(".mobile-info").addClass("hidden");
            });
        },
        quickActions: function () {
            $(document).on('click', function (e) {
                if ((!$(e.target).closest('.action-more').length) && (!$(e.target).closest('.action-list').length)) {
                    $(".action-list:visible").addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                }
            });
            $("a.action-more").click(function (e) {
                e.preventDefault();
                var ctrl = $(this);
                var aI = $(ctrl).closest(".result-actions").find(".action-list");
                if ($(aI).hasClass("hidden")) {
                    $(".result-actions .action-list:visible").addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                    $(aI).removeClass("hidden");
                    $(ctrl).children("div.active-icon-indicator").addClass("active");
                    $(aI).find("a").first().focus();
                } else {
                    $(aI).addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                }
            });
            $(".result-actions .action-list").find("a").click(function () {
                $(".result-actions .action-list:visible").addClass("hidden");
            });
        },
        quickActionResultClick: function () {
            $(".list .data-row").find("a.quick-action-item, a.quick-action-item-cs, a.action-item, a.client-action-item").click(function (e) {
                e.preventDefault();
                if ($(this).hasClass("client-action-item") || $(this).hasClass("quick-action-item-cs")) {
                    var selRowDetails = $(this).closest(".data-row").attr("data-search-row-id");
                    var selRowDetailsList = [];
                    selRowDetailsList.push(selRowDetails);
                    window[$(this).attr("data-script-call-back")](this, selRowDetailsList);
                }
                else {
                    cwds.list.dataSelected = [];
                    var selRowDetails = $(this).closest(".data-row").attr("data-search-row-id");
                    cwds.list.dataSelected.push(selRowDetails);
                    $(this).closest(".list").find(".list-details #SelectedIdList").val(JSON.stringify(cwds.list.dataSelected));
                    cwds.utility.submitForm($(this).closest(".list").find(".list-details #SearchFunctionId").val() + $(this).attr("data-search-action-name"));
                }

            });
        },
        formatMobileTable: function () {
            $(".list .jg-resp-table").each(function () {
                var index = -1;
                var colPos = -1;
                var colHeader = [];
                var colCI = [];
                $(this).find(".heading-row").find(".header-column").each(function () {
                    index += 1;
                    if (!$(this).hasClass("hidden-xs")) {
                        colPos = index;
                    } else {
                        colCI.push(index);
                        colHeader.push($(this).text());
                    }
                });

                if (colPos >= 0) {
                    $(this).find(".data-row").each(function () {
                        var mobileDiv = $(this).find(".mobile-info");
                        var html = '';
                        for (var i = 0, len = colCI.length; i < len; i++) {
                            //var d = $(this).find(".data-content-cell").get(colCI[i]);
                            var d = $(this).find(".data-content-column .data-content-cell:first-child").get(colCI[i]);
                            html += '<div class="col-xs-12"><div class="row"><div class="col-xs-5 mt5"><div class="info-label-div">' + colHeader[i] + '</div></div><div class="col-xs-7 mt5">' + d.innerHTML + '</div></div></div>';
                            $(d).addClass("hidden-xs");
                        }
                        $(mobileDiv).append(html);
                    });
                }
            });
        },
        submit: function (listCtrl, actionName, selectedList) {
            cwds.list.dataSelected = [];
            cwds.list.dataSelected = selectedList;
            $(listCtrl).find(".list-details #SelectedIdList").val(JSON.stringify(cwds.list.dataSelected));
            cwds.utility.submitForm(actionName);
        },
        search: function (functionId) {
            var ct = $(".list[ng-controller='" + functionId + "']");
            angular.element($(ct)).scope().search(functionId, 1, $(ct), false);
        },
    },
    search: {
        dataSelected: [],
        retainSelection: false,
        searchParams: null,
        isPageSearch: false,
        exportToExcelTimer: null,
        exportToExcelCookieName: "ExcelFileDownloaded",
        init: function () {
            $(".search").each(function () {
                if ($(this).attr("ng-controller").length > 0) {
                    var jsonContent = $(this).find(".search-details #FacetsJSON").val();
                    if (jsonContent.length > 0) {
                        cwds.facet.applied = JSON.parse(jsonContent.split("^").join("&#44;"));
                    }
                    if ($(this).find(".search-details #SelectedIdList").val().length > 0) {
                        cwds.search.retainSelection = true;
                        cwds.search.dataSelected = JSON.parse($(this).find(".search-details #SelectedIdList").val());
                        cwds.search.setSelectedCount($(this).find(".search-results .pagination-section"));
                    }
                    if ($("#results-top-pagination").html().length > 0) {
                        $("#results-bottom-pagination").empty().append($("#results-top-pagination").html());
                    }
                    var row = parseInt($(this).find("#PageNumber").val());
                    if (typeof getSearchCriteria === "function") {
                        try {
                            cwds.search.searchParams = getSearchCriteria();
                        }
                        catch (err) { }
                    }

                    angular.element($(this)).scope().search($(this).attr("ng-controller"), row, $(this), false);
                }
            });
            cwds.search.paginate();
            cwds.search.quickActionTopClick();
            $(".export-to-excel").click(function (e) {
                e.preventDefault();
                $("#__Action").val($(this).attr("data-search-function_id") + "ExportToExcel");
                if (parseInt($(this).attr("data-export-to-excel-count")) >= parseInt($(this).attr("data-record-count"))) {
                    cwds.search.startExcelDownload(true, 0);
                }
                else {
                    cwds.search.startExcelDownload(false, $(this).attr("data-export-to-excel-count"));
                }
            });
            $("#ExportToExcelDialog").find("#DownloadExcelButton").click(function (e) {
                e.preventDefault();
                cwds.search.startExcelDownload(true, 0);
            });
            $(".search .sortby-section select").on("change", function () {
                var selectedSortOption = $(this).val();
                var searchDiv = $(this).closest(".search");
                var sortIcon = $(searchDiv).find(".sort-atoz");
                cwds.search.setSortOrder($(this), sortIcon);
                $(searchDiv).find(".sortby-section select").each(function () {
                    $(this).val(selectedSortOption);
                });
                $(searchDiv).find("#SortByHidden").val(selectedSortOption + ' ' + $(searchDiv).find(".sortby-section .sort-atoz").attr('data-sort-order'));
                angular.element($(searchDiv)).scope().search($(searchDiv).attr("ng-controller"), 1, $(searchDiv), false);
            });
            $(".sortby-section .sort-atoz").click(function () {
                var selectedSortOption = $('.sortby-section').val();
                var searchDiv = $(this).closest(".search");
                var sortbySection = $(searchDiv).find(".sortby-section");
                if ($(this).find("i").hasClass('fa-sort-alpha-asc')) {
                    $(sortbySection).each(function () {
                        $(sortbySection).find(".sort-atoz i").removeClass('fa-sort-alpha-asc').addClass('fa-sort-alpha-desc');
                        $(sortbySection).find(".sort-atoz").attr({ 'data-sort-order': 'desc', 'aria-label': $(sortbySection).find(".sort-atoz").attr('data-asc-title'), 'title': $(sortbySection).find(".sort-atoz").attr('data-asc-title') });
                    });
                } else {
                    $(sortbySection).each(function () {
                        $(sortbySection).find(".sort-atoz i").removeClass('fa-sort-alpha-desc').addClass('fa-sort-alpha-asc');
                        $(sortbySection).find(".sort-atoz").attr({ 'data-sort-order': 'asc', 'aria-label': $(sortbySection).find(".sort-atoz").attr('data-desc-title'), 'title': $(sortbySection).find(".sort-atoz").attr('data-desc-title') });
                    });
                }
                //$(searchDiv).find("#SortByHidden").val(selectedSortOption + ' ' + $(searchDiv).find(".sortby-section .sort-atoz").attr('data-sort-order'));
                $(searchDiv).find("#SortByHidden").val($(searchDiv).find(".sortby-section select").val() + ' ' + $(searchDiv).find(".sortby-section .sort-atoz").attr('data-sort-order'));
                angular.element($(searchDiv)).scope().search($(searchDiv).attr("ng-controller"), 1, $(searchDiv), false);
            });
            $(".mobile-search .filter-section").click(function (e) {
                e.preventDefault();
                cwds.dialog.open("ChooseMultiple");

                $("#ChooseMultiple").find('.sort-by-mobile select').empty().append($('.search .sortby-section select').html());
                $("#ChooseMultiple").find('.sort-by-mobile select').val($('.search .sortby-section select').val());

                cwds.multipleFacets.resetSelectedFacets();
                var ct = $("#ChooseMultiple .facet-multiple-select");
                $(ct).find("select option:first-child").attr("selected", "selected");
                var facetName = $(ct).find("select").val();
                var searchDiv = $(".search");
                var searchFacetApi = $(searchDiv).attr('search-api').replace("GetSearchResults", "GetFacet");
                cwds.search.refreshSearchCriteria();
                angular.element($(ct)).scope().getFacetItems($(searchDiv).attr("ng-controller"), $(ct), facetName, searchFacetApi);
            });
        },
        reload: function (link, retainFacet) {
            angular.element(link).scope().search(link.attr("ng-controller"), 1, link, retainFacet);

        },
        refreshSearchCriteria: function () {
            if (typeof getSearchCriteria === "function") {
                try { cwds.search.searchParams = getSearchCriteria(); }
                catch (err) { }
            }
        },
        getSearchCriteria: function (searchFunctionId) {
            var searchDiv = $(".search[ng-controller='" + searchFunctionId + "']");
            var searchRequest = {
                "pageNumber": parseInt($(searchDiv).find(".search-details #PageNumber").val()),
                "rows": parseInt($(searchDiv).find(".search-details #Rows").val()),
                "excludeFacets": true,
                "searchFunctionId": searchFunctionId,
                "appliedFacets": cwds.facet.applied,
                "sortBy": $(searchDiv).find(".sortby-section #searchsortby").val() + ' ' + $(searchDiv).find(".sortby-section .sort-atoz").attr('data-sort-order')
            };
            if (Array.isArray(cwds.search.searchParams)) {
                for (i = 0; i < cwds.search.searchParams.length; i++) {
                    searchRequest[cwds.search.searchParams[i][0]] = cwds.search.searchParams[i][1];
                }
            }
            return searchRequest;
        },
        setSearchFooterLink: function (searchFunctionId, footerLinkName, footerLinkIcon, footerLinkScriptCallBack) {
            var searchDiv = $(".search[ng-controller='" + searchFunctionId + "']");
            var footerLink = '<a id="searchFooterLink" class="export-to-excel" href="javascript:void(0)" onclick=' + footerLinkScriptCallBack + '> ' + footerLinkIcon + ' ' + footerLinkName + '</a>';
            $(searchDiv).find('.search-footerlink-section').empty().append(footerLink);
        },
        removeSearchFooterLink: function (searchFunctionId) {
            var searchDiv = $(".search[ng-controller='" + searchFunctionId + "']");
            $(searchDiv).find('.search-footerlink-section').empty();
        },
        setSortOrder: function (sortByCtrl, sortIcon) {
            if (!!$(sortByCtrl).val()) {
                var selectedSortOption = $(sortByCtrl).val();
                if (selectedSortOption === "Relevance") {
                    $(sortIcon).addClass("hidden");
                } else {
                    $(sortIcon).removeClass("hidden");
                    if ($(sortByCtrl).attr("data-default-sort-desc").indexOf("," + selectedSortOption) >= 0) {
                        $(sortIcon).attr({ 'data-sort-order': 'desc', 'aria-label': $(sortIcon).attr("data-asc-title"), 'title': $(sortIcon).attr("data-asc-title") });
                        $(sortIcon).find("i").removeClass('fa-sort-alpha-asc').addClass('fa-sort-alpha-desc');
                    } else {
                        $(sortIcon).attr({ 'data-sort-order': 'asc', 'aria-label': $(sortIcon).attr("data-desc-title"), 'title': $(sortIcon).attr("data-desc-title") });
                        $(sortIcon).find("i").removeClass('fa-sort-alpha-desc').addClass('fa-sort-alpha-asc');
                    }
                }
            }
        },
        addFacetSelection: function (facetName, itemCode, sSection, performNewSearch) {

            if (facetName && itemCode && sSection) {
                var itemCodeArray = itemCode.split("|,|");
                if (performNewSearch) {
                    cwds.facet.applied.length = 0;
                    cwds.search.refreshSearchCriteria();
                }
                if (cwds.facet.applied.length === 0) {
                    $(".facet .facet-list-items").each(function () {
                        var fg = { "Name": $(this).attr("data-search-facet-name"), Items: [], Type: $(this).attr("data-search-facet-type"), Label: $(this).attr("data-search-facet-label") };
                        if ($(this).attr("data-search-facet-type") === 'DropDown') {
                            fg.Items[0] = $(this).find('option:selected').val();
                        }
                        cwds.facet.applied.push(fg);
                    });
                }
                for (var i = 0; i < cwds.facet.applied.length; i++) {
                    if (cwds.facet.applied[i].Name === facetName) {
                        for (var j = 0; j < itemCodeArray.length; j++) {
                            cwds.facet.applied[i].Items.push(itemCodeArray[j]);
                        }
                        break;
                    }
                }
                angular.element($(sSection)).scope().search($(sSection).attr("ng-controller"), 1, $(sSection), false);
            }
        },
        search: function (functionId, searchParams) {
            cwds.search.isPageSearch = true;
            cwds.search.searchParams = searchParams;
            var ct = $(".search[ng-controller='" + functionId + "']");
            cwds.facet.applied.length = 0;
            $(".top-action-list-label:visible").addClass("hidden");
            angular.element($(ct)).scope().search(functionId, 1, $(ct), false);
        },
        list: function (functionId, searchParams) {
            cwds.search.isPageSearch = false;
            cwds.search.searchParams = searchParams;
            var ct = $(".search[ng-controller='" + functionId + "']");
            cwds.facet.applied.length = 0;
            $(".top-action-list-label:visible").addClass("hidden");
            angular.element($(ct)).scope().search(functionId, 1, $(ct), false);
        },
        error: function (response, widgetName) {
            var sc = $(".panel.widget[data-widget-name='" + widgetName + "']");
            $(sc).find(".panel-body .no-data-list").addClass("hidden");
            $(sc).find(".panel-body .data-list").addClass("hidden");
            $(sc).find(".panel-body .process-error").removeClass("hidden");
            $(sc).waitMe("hide");
        },
        setSpinner: function (sc) {
            $(sc).waitMe({ effect: "rotateplane", text: '', bg: 'rgba(255,255,255,0.7)', color: "#bac3d2", sizeW: '32', sizeH: '32' });
        },
        removeSpinner: function (sc) {
            $(sc).waitMe("hide");
        },
        bindEvents: function () {
            cwds.search.setSelectedItem();
            cwds.search.quickActions();
            cwds.search.quickActionResultClick();
        },
        resetSelected: function () {
            var a = $(".search .search-results .results-row .result-select");
            for (var i = 0; i < cwds.search.dataSelected.length; i++) {
                $(a).find("a.checkbox[data-search-row-id='" + cwds.search.dataSelected[i] + "']").addClass("is-checked");
                $(a).find("a.checkbox[data-search-row-id='" + cwds.search.dataSelected[i] + "']").closest(".results-row").addClass("selected");
            }
        },
        executeScriptCallBack: function (resp, controller) {
            var ct = $(".search[ng-controller='" + controller + "']");
            var scriptCallBack = $(ct).attr('data-search-script-callback');
            if (scriptCallBack) {
                cwds.search.executeFunctionByName(scriptCallBack, window, [resp.pageNumber, resp.totalCount, resp]);
            }
        },
        executeFunctionByName: function (functionName, context, argsArray) {
            var nameSpaces = functionName.split(".");
            var func = nameSpaces.pop();
            for (var i = 0; i < nameSpaces.length; i++) {
                context = context[nameSpaces[i]];
            }
            var fnName = context[func];
            if (typeof (fnName) === "function") {
                if (!argsArray) { fnName(); }
                else { fnName.apply(context, argsArray); }
            }
        },
        setPaginationDetails: function (resp, controller) {
            var pClass = "not-active text-muted";
            var ct = $(".search[ng-controller='" + controller + "']");
            var sp = $(ct).find(".pagination-section");
            var start = 0;
            var st = '0';
            var formattedTotalCount = '0';
            if (resp.totalCount > 0) {
                formattedTotalCount = cwds.search.formatNumbers(resp.totalCount);
                start = ((resp.pageNumber - 1) * resp.rows) + 1;
                st = cwds.search.formatNumbers(start);
                $(ct).find(".export-to-excel").removeClass("hidden");
                $(ct).find(".export-to-excel").attr("data-record-count", resp.totalCount);
            }
            else {
                $(ct).find(".export-to-excel").addClass("hidden");
            }
            $(ct).find(".search-details #PageNumber").val(resp.pageNumber);
            if ($(ct).attr('data-search-pgntion-type') === 'Arrows') {
                if (resp.rows > resp.totalCount) {
                    $(sp).find(".search-pages").html(st + '-' + formattedTotalCount + '<span class="hidden-xs"> of ' + formattedTotalCount + '</span>');
                } else {
                    if (resp.pageNumber < resp.pages) {
                        $(sp).find(".search-pages").html(st + '-' + cwds.search.formatNumbers((start + resp.rows - 1)) + '<span class="hidden-xs"> of ' + formattedTotalCount + '</span>');
                    } else {
                        $(sp).find(".search-pages").html(st + '-' + formattedTotalCount + '<span class="hidden-xs"> of ' + formattedTotalCount + '</span>');
                    }
                }
                $(sp).find("a").removeClass("not-active").removeClass("text-muted");
                if (resp.pages <= 1) { $(sp).find("a.page-previous,a.page-next,a.page-first,a.page-last").addClass(pClass); }
                else {
                    if (resp.pageNumber === 1) { $(sp).find("a.page-previous,a.page-first").addClass(pClass); }
                    else if (resp.pageNumber === resp.pages) { $(sp).find("a.page-next,a.page-last").addClass(pClass); }
                }
            } else {
                var paginationSection = $(ct).find('.pagination.paginate-numbers-list');
                var disClass = "disabled";
                var activeClass = '';
                var pageNumTemplate = '';
                var index = 0;
                var maxVisiblePages = 5;
                var prevArrow = '<li class="page-item page-nav page-prev-nav" onclick= cwds.search.paginateNumberItems(this)><a title="Previous" aria-label="Go to Previous page" class="page-link" href="javascript:void(0)"><i class="fa fa-arrow-left"></i></a></li>';
                var nextArrow = '<li class="page-item page-nav page-next-nav" onclick= cwds.search.paginateNumberItems(this)><a title="Next" aria-label="Go to Next page" class="page-link" href="javascript:void(0)"><i class="fa fa-arrow-right"></i></a></li>';

                if (resp.pageNumber <= 2) { var start = 1; }
                else if (resp.pageNumber >= resp.pages - 1) {
                    var start = (resp.pages - maxVisiblePages + 1) > 0 ? (resp.pages - maxVisiblePages + 1) : 1;
                }
                else { var start = resp.pageNumber - 2; }

                for (var i = start; index < maxVisiblePages && i >= 1 && i <= resp.pages; i++) {
                    index += 1;
                    activeClass = (i === resp.pageNumber) ? 'active' : '';
                    pageNumTemplate += '<li class="page-item ' + activeClass + '" onclick= cwds.search.paginateNumberItems(this) ><a aria-label="Page ' + i + ' " class="page-link" href="javascript:void(0)"> ' + i + ' </a></li>';
                }
                $(paginationSection).empty().append(prevArrow).append(pageNumTemplate).append(nextArrow);
                if (resp.pages <= 1) { $(paginationSection).find('.page-item').addClass(disClass); }
                else {
                    if (resp.pageNumber === 1) { $(paginationSection).find('.page-prev-nav').addClass(disClass); }
                    else if (resp.pageNumber === resp.pages) { $(paginationSection).find('.page-next-nav').addClass(disClass); }
                }
            }
        },
        paginateNumberItems: function (pageItem) {
            var paginationSection = $(pageItem).closest('.pagination.paginate-numbers-list');
            var ct = $(paginationSection).closest('.search');
            var ap;
            if ($(pageItem).hasClass('page-nav')) {
                var cp = parseInt($(ct).find(".search-details #PageNumber").val());
                ap = ($(pageItem).hasClass('page-prev-nav')) ? cp - 1 : cp + 1;
                angular.element(ct).scope().search($(ct).attr("ng-controller"), ap, $(ct), true);
            } else {
                if (!$(pageItem).hasClass('active')) {
                    $(paginationSection).find('.page-item.active').removeClass('active');
                    $(pageItem).addClass('active');
                    ap = parseInt($(pageItem).find('.page-link').text());
                    angular.element(ct).scope().search($(ct).attr("ng-controller"), ap, $(ct), true);
                }
            }
        },
        paginate: function () {
            $(".search-results .pagination-section a.page").click(function (e) {
                e.preventDefault();
                var ap;
                var ct = $(this).closest(".search");
                var totalPagescount = parseInt($(ct).find(".search-results #page-info-0").html().replace("|", ""));
                if (!$(this).hasClass("not-active")) {
                    var cp = parseInt($(ct).find(".search-details #PageNumber").val());
                    if ($(this).hasClass("page-previous") || $(this).hasClass("page-next")) {
                        ap = ($(this).hasClass("page-previous")) ? cp - 1 : cp + 1;
                    } else {
                        ap = ($(this).hasClass("page-first")) ? 1 : totalPagescount;
                    }
                    angular.element(ct).scope().search($(ct).attr("ng-controller"), ap, $(ct), true);
                }
            });
        },
        setSelectedItem: function () {
            $("div.search-results .results-row a.checkbox").click(function (e) {
                e.preventDefault();
                var id = $(this).attr("data-search-row-id");
                var sc = $(this).closest(".search");
                var pg = $(sc).find(".pagination-section");
                var ams = $(pg).attr('data-search-allow-multi-select').toLowerCase() === "true" ? true : false;
                var sl = parseInt($(pg).attr('data-search-multi-select-limit'));
                if ($(this).hasClass("is-checked")) {
                    $(this).closest(".results-row").removeClass("selected");
                    var index = cwds.search.dataSelected.indexOf(id);
                    if (index >= 0) cwds.search.dataSelected.splice(index, 1);
                }
                else {
                    if (!ams) {
                        cwds.search.dataSelected = [];
                        $(this).closest(".search").find("a.is-checked").removeClass("is-checked");
                        $(this).closest(".search").find(".search-results .results-row.selected").removeClass("selected");
                    } else {
                        if (cwds.search.dataSelected.length === sl) {
                            alert($(pg).find(".selection-limit-msg").html());
                            return;
                        }
                    }
                    cwds.search.dataSelected.push(id);
                    $(this).closest(".results-row").addClass("selected");
                }
                $(this).toggleClass("is-checked");
                cwds.search.setSelectedCount(pg);
                cwds.search.setTopActionsVisibility(pg);
                $(sc).find(".search-details #SelectedIdList").val(JSON.stringify(cwds.search.dataSelected));
            });
        },
        clearSelected: function (sc) {
            var pg = $(sc).find(".pagination-section");
            if (!cwds.search.retainSelection) {
                cwds.search.dataSelected = [];
                $(sc).find(".search-details #SelectedIdList").val(JSON.stringify(cwds.search.dataSelected));
            }
            cwds.search.retainSelection = false;
            cwds.search.setTopActionsVisibility(pg);
            cwds.search.setSelectedCount(pg);
        },
        setSelectedCount: function (pg) {
            if (cwds.search.dataSelected.length > 0) {
                $(pg).find(".search-selected").removeClass("hidden");
                $(pg).find(".search-selected #SelectedCountSpan").html(cwds.search.dataSelected.length);
            } else {
                $(pg).find(".search-selected").addClass("hidden");
            }
        },
        setTopActionsVisibility: function (pg) {
            var l = cwds.search.dataSelected.length;
            if (l === 0) {
                $(pg).find("a.top-action-item, a.top-action-more").addClass("hidden");
            } else {
                $(pg).find("a.top-action-more").removeClass("hidden");
                $(pg).find("a.top-action-item").each(function () {
                    var rl = parseInt($(this).attr("data-search-action-record-limit"));
                    if (rl > 0) { if (rl >= l) $(this).removeClass("hidden"); else $(this).addClass("hidden"); }
                });
                $(pg).find("ul.top-action-list a.top-action-list-item").each(function () {
                    var rl = parseInt($(this).attr("data-search-action-record-limit"));
                    if (rl > 0) { if (rl >= l) $(this).closest("li").removeClass("hidden"); else $(this).closest("li").addClass("hidden"); }
                });
            }
        },

        showHideFilterCountVisibility: function () {
            var appliedFacetCount = 0;
            if (cwds.facet.applied.length > 0) {
                for (var i = 0; i < cwds.facet.applied.length; i++) {
                    if (cwds.facet.applied[i].Items.length > 0) {
                        if (cwds.facet.applied[i].Type === "Slider") {
                            appliedFacetCount += 1;
                        } else if (cwds.facet.applied[i].Type === "DropDown") {
                            var facetName = cwds.facet.applied[i].Name;
                            var itemCode = cwds.facet.applied[i].Items[0];
                            var defaultDDSel = $('.facet-list .facet-list-items[data-search-facet-name="' + facetName + '"]').find('select').find('option:first').val();
                            if (itemCode && defaultDDSel && (itemCode !== defaultDDSel)) {
                                appliedFacetCount += 1;
                            }
                        } else {
                            appliedFacetCount += cwds.facet.applied[i].Items.length;
                        }
                    }
                }
            }
            if (appliedFacetCount > 0) {
                $(".mobile-search #facetcount").empty().append(appliedFacetCount);
                $(".mobile-search .show-facet-count").removeClass("hidden");
            } else {
                $(".mobile-search #facetcount").empty();
                $(".mobile-search .show-facet-count").addClass("hidden");
            }
        },
        quickActions: function () {
            $(document).on('click', function (e) {
                if ((!$(e.target).closest('.action-more').length) && (!$(e.target).closest('.action-list').length)) {
                    $(".action-list:visible").addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                }
            });
            $("a.action-more").click(function (e) {
                e.preventDefault();
                var ctrl = $(this);
                var aI = $(ctrl).parent(".result-actions").find(".action-list");
                if ($(aI).hasClass("hidden")) {
                    $(".result-actions .action-list:visible").addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                    $(aI).removeClass("hidden");
                    $(ctrl).children("div.active-icon-indicator").addClass("active");
                    $(aI).find("a").first().focus();
                } else {
                    $(aI).addClass("hidden");
                    $("div.active-icon-indicator").removeClass("active");
                }
            });
            $(".result-actions .action-list").find("a").click(function () {
                $(".result-actions .action-list:visible").addClass("hidden");
            });
        },
        quickActionTopClick: function () {
            $(".search .results-pagination .top-action-more").click(function (e) {
                e.preventDefault();
                var tal = $(this).closest(".pagination-section").find(".top-action-list-label");
                if (tal.hasClass("hidden")) {
                    $(".top-action-list-label:visible").addClass("hidden");
                    tal.removeClass("hidden");
                    tal.attr("aria-hidden", "false");
                } else {
                    tal.addClass("hidden");
                    tal.attr("aria-hidden", "true");
                }
            });
            $(document).on('click', function (e) {
                if ((!$(e.target).closest('.top-action-more').length) && ($(e.target).closest('.top-action-list-label').length === 0)) {
                    $(".top-action-list-label:visible").addClass("hidden");
                    var tal = $(e.target).closest(".search-page").find("#results-top-pagination .pagination-section .top-action-list-label");
                    if ($(tal).hasClass("hidden")) { $(tal).attr("aria-hidden", "true"); } else { $(tal).attr("aria-hidden", "false"); }
                }
            });

            // R11.2 - Modified for JG WOTC Search and Introduced data-script-call-back attribute in Search.vbhtml. Remove Commented Section  
            $(".search .results-pagination").find("a.top-action-item, a.top-action-list-item").click(function (e) {
                e.preventDefault();
                var attr = $(this).attr("data-script-call-back");
                if (attr !== "") {
                    var idList = [];
                    for (i = 0; i < cwds.search.dataSelected.length; i++) {
                        idList.push(cwds.search.dataSelected[i]);
                    }
                    window[attr](this, idList);
                } else {
                    cwds.utility.submitForm($(this).closest(".search").find(".search-details #SearchFunctionId").val() + $(this).attr("data-search-action-name"));
                }

            });
        },
        quickActionResultClick: function () {
            $(".search .results-row").find("a.quick-action-item, a.action-item").click(function (e) {
                e.preventDefault();
                var id = $(this).closest(".results-row").find(".result-select a.checkbox").attr("data-search-row-id");
                cwds.search.dataSelected = [];
                cwds.search.dataSelected.push(id);
                $(this).closest(".search").find(".search-details #SelectedIdList").val(JSON.stringify(cwds.search.dataSelected));
                cwds.utility.submitForm($(this).closest(".search").find(".search-details #SearchFunctionId").val() + $(this).attr("data-search-action-name"));
            });

            // R11.2 - Comment above and Add data-script-call-back attribute in Search.vbhtml and Remove OnClick Script Call Back Attribute
            //$(".search .results-row").find("a.quick-action-item, a.quick-action-item-cs, a.action-item, a.client-action-item").click(function (e) {
            //    e.preventDefault();
            //    if ($(this).hasClass("client-action-item") || $(this).hasClass("quick-action-item-cs")) {
            //        var id = $(this).closest(".results-row").find(".result-select a.checkbox").attr("data-search-row-id");
            //        var idList = [];
            //        idList.push(id);
            //        window[$(this).attr("data-script-call-back")](this, idList);
            //    }
            //    else {
            //        var id = $(this).closest(".results-row").find(".result-select a.checkbox").attr("data-search-row-id");

            //            cwds.search.dataSelected = [];
            //            cwds.search.dataSelected.push(id);
            //            $(this).closest(".search").find(".search-details #SelectedIdList").val(JSON.stringify(cwds.search.dataSelected));
            //            cwds.utility.submitForm($(this).closest(".search").find(".search-details #SearchFunctionId").val() + $(this).attr("data-search-action-name"));

            //    }

            //});
        },
        formatNumbers: function (num) {
            if (num) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }
        },
        startExcelDownload: function (startDownload, count) {
            var mde = $("#ExportToExcelDialog");
            if (startDownload) {
                $('.' + jgUtils.class.req).addClass("ignore");
                $(mde).find("#ExportToExcelDetails").addClass("hidden");
                $(mde).find("#ExportToExcelStarted").removeClass("hidden");
                $(mde).find(".modal-footer").addClass("hidden");
                cwds.dialog.open("ExportToExcelDialog");
                cwds.utility.deleteCookie(cwds.search.exportToExcelCookieName);
                cwds.search.exportToExcelTimer = window.setInterval(cwds.search.excelDownloadTimer, 200);
                $('form').submit();
            } else {
                $(mde).find(".export-to-excel-download-limit").html(count);
                $(mde).find("#ExportToExcelDetails").removeClass("hidden");
                $(mde).find("#ExportToExcelStarted").addClass("hidden");
                $(mde).find(".modal-footer").removeClass("hidden");
                cwds.dialog.open("ExportToExcelDialog");
            }
        },
        excelDownloadTimer: function () {
            if (cwds.utility.getCookie(cwds.search.exportToExcelCookieName) === "1") {
                window.clearInterval(cwds.search.exportToExcelTimer);
                cwds.dialog.close("ExportToExcelDialog");
                cwds.utility.deleteCookie(cwds.search.exportToExcelCookieName);
            }
        }
    },
    searchTipsTable: {
        init: function () {
            $(".searchtips-container").each(function () {
                var index = -1;
                var colPos = -1;
                var colHeader = [];
                var colCI = [];
                $(this).find(".searchtips-header-column").find(".searchtips-header-cell").each(function () {
                    index += 1;
                    if ($(this).hasClass("search-col-dest")) {
                        colPos = index;
                    } else {
                        colCI.push(index);
                        colHeader.push($(this).text());
                        $(this).addClass("hidden-sm hidden-xs");
                    }
                });
                if (colPos >= 0) {
                    $(this).find(".searchtips-column").each(function () {
                        var html = '<div class= "mt5 hidden-lg hidden-md">';
                        for (var i = 0, len = colCI.length; i < len; i++) {
                            var d = $(this).find(".searchtips-cell").get(colCI[i]);
                            $(d).addClass("hidden-sm hidden-xs");
                            html += '<div><label class="bold search-tips-col-heading">' + colHeader[i] + '</label> &nbsp;' + d.innerHTML + '</div>';
                        }
                        html += '</div>';
                        $($(this).find(".searchtips-cell").get(colPos)).append(html);
                    });
                }
            });
        }
    },
    dialog: {
        init: function () {
            $(".modal").each(function () {
                $(this).keydown(function (e) { cwds.dialog.stayInDialogOnTab($(this), e); });
                //$(this).keydown(function (e) { cwds.dialog.closeOnEscapeKey($(this), e); });
            });
            $(".modal.fade").click(function (event) {
                if (!$(event.target).closest('.modal-dialog').length > 0) {
                    $(this).find(".modal-header button").focus();
                }
            });
            $(".modal").on("shown.bs.modal", function () {
                cwds.dialog.enableDisablePage("true");
                $(this).click(function (e) {
                    if (!$(e.target).closest('.modal-content').length) { cwds.dialog.setFocus($(this)); }
                });
                cwds.dialog.setFocus($(this));
                cwds.dialog.activeDialog = $(this).attr("id");
                cwds.dialog.setAria(this, true);
                $(".msgs-jg").attr('data-msg-new', '0');
            });
            $(".modal").on("hidden.bs.modal", function () {
                cwds.dialog.enableDisablePage("false");
                if (typeof (closeDialogCallBack) === 'function') { closeDialogCallBack(cwds.dialog.activeDialog); }
                cwds.dialog.clearErrors(cwds.dialog.activeDialog);
                cwds.dialog.setAria(this, false);
                if ($(".msgs-jg").attr('data-msg-new') !== '1') { $(cwds.dialog.elementTriggeredDialog).focus(); }
                else { $(".msgs-jg").find('button.msgs-jg-hide').focus(); }
                cwds.dialog.elementTriggeredDialog = null;
                cwds.dialog.activeDialog = '';
            });
        },
        activeDialog: '',
        elementTriggeredDialog: null,
        // Created global elements to focus to after modal window is closed.
        open: function (ctrl, setLoadingAnimation) {
            if ($(document.activeElement).closest("div.panel.widget").not("hidden").length !== 0) {
                cwds.dialog.elementTriggeredDialog = $(document.activeElement).closest("div.panel.widget").not("hidden").find("a.hidden-accessible-button");
            } else {
                cwds.dialog.elementTriggeredDialog = document.activeElement;
            }
            var md = $('#' + ctrl);
            $(md).modal({ backdrop: 'static', keyboard: false });
            if ($(md).attr('data-initial-open') === "0") {
                cwds.dialog.clearErrors(ctrl);
            } else {
                $(md).attr('data-initial-open', '0');
                if ($(md).find(".modal-errors ul").length > 0) {
                    $(md).find(".modal-errors").removeClass("hidden");
                } else {
                    cwds.dialog.clearErrors(ctrl);
                }
            }
            if (setLoadingAnimation === true) {
                $(md).find('.modal-loading').removeClass("hidden");
            } else {
                $(md).find('.modal-loading').addClass("hidden");
            }
            $(md).find(".req-field, .jg-cv-req").each(function () {
                $(this).clearValidation();
                $(this).removeClass("ignore");
            });
            //$(md).modal("show");
        },
        clearValidations: function (ctrl) {
            var md = $('#' + ctrl);
            $(md).find(".jg-cv-req").each(function () {
                $(this).clearValidation();
                $(this).removeClass("ignore");
            });
            $(md).find(".req-field").each(function () {
                $(this).clearValidation();
                $(this).removeClass("ignore");
            });
        },
        loadCompleted: function (ctrl) {
            $('#' + ctrl).find(".modal-loading").addClass("hidden");
        },
        title: function (ctrl, title) {
            $("#" + ctrl).find(".modal-title").html(title);
        },
        close: function (ctrl) {
            $("#" + ctrl).modal("hide");
        },
        closeOnEscapeKey: function (obj, e) {
            if ((e.which === 27) && (cwds.dialog.activeDialog !== '')) {
                cwds.dialog.close(cwds.dialog.activeDialog);
                e.preventDefault();
            }
        },
        stayInDialogOnTab: function (obj, e) {
            if (e.which === 9) {
                var fi = obj.find('*').filter("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(':visible');
                var nfi = fi.length;
                var fii = fi.index($(':focus'));
                if (e.shiftKey) { if (fii === 0) { fi.get(nfi - 1).focus(); e.preventDefault(); } }
                else { if (fii === nfi - 1) { fi.get(0).focus(); e.preventDefault(); } }
            }
        },
        enableDisablePage: function (ed) {
            $(".cs-page-content, .cs-error-sum").attr("aria-hidden", ed);
        },
        setBusinessErrors: function (ctrl, el) {
            var list = '';
            if (el.length > 0) {
                for (var i = 0, len = el.length; i < len; i++) { list += '<li>' + el[i].Message + '</li>'; }
                cwds.dialog.__showErrors(ctrl, list);
            }
        },
        setErrors: function (ctrl, msg) {
            var list = '';
            if (msg.length > 0) {
                if ($.isArray(msg)) { for (var i = 0, len = msg.length; i < len; i++) { list += '<li>' + msg[i] + '</li>'; } }
                else { list += '<li>' + msg + '</li>'; }
                cwds.dialog.__showErrors(ctrl, list);
            }
        },
        setBusinessMessageSuccess: function (ctrl) {
            var list = '';
            var dge = $('#' + ctrl).find('.modal-errors');
            list += '<a id="DialogErrorSummary" name="DialogErrorSummary" class="sr-only"></a><a href="javascript:void(0)" id="DialogErrorFocus" name="DialogErrorFocus" aria-hidden="true"></a>';
            list += '<div class="modal-error-list modal-successful-save">Saved Successfully</div>';
            $('#' + ctrl).find('.modal-errors')
            .removeClass("hidden")
            .html(list)
            .attr('aria-hidden', 'false');
            $('#' + ctrl).find('#DialogErrorFocus').focus();
        },
        __showErrors: function (ctrl, li) {
            var list = '';
            var dge = $('#' + ctrl).find('.modal-errors');
            var errorTitle = '<span class="db error-title"><h5>' + $('#error-text-div').attr('data-error-title') + '</h5></span>';
            if ($(".msgs-jg .msg-list").attr('data-error-title') !== '') { errorTitle = '<span class="db"><h5>' + $(".msgs-jg .msg-list").attr('data-error-title') + '</h5></span>'; }
            list += '<a id="DialogErrorSummary" name="DialogErrorSummary" class="sr-only"></a>';
            list += errorTitle;
            list += '<div class="modal-error-list">';
            list += '<ul role="group">';
            list += li;
            list += '</ul>';
            list += '</div>';
            $('#' + ctrl).find('.modal-errors').removeClass("hidden").html(list).attr('aria-hidden', 'false').attr('role', 'alert');
        },
        setErrors: function (ctrl, msg) {
            var list = '';
            if (msg.length > 0) {
                if ($.isArray(msg)) {
                    for (var i = 0, len = msg.length; i < len; i++) {
                        list += '<li class="">' + msg[i] + '</li>';
                    }
                } else {
                    list += '<li class="">' + msg + '</li>';
                }
                cwds.dialog.__showErrors(ctrl, list);
            }
        },
        clearErrors: function (ctrl) {
            $('#' + ctrl).find('.modal-errors')
            .addClass("hidden")
            .html('')
            .attr('aria-hidden', 'true')
            .attr('role', '');
        },
        setFocus: function (ctrl) {
            var fi = $(ctrl).find(".modal-body").find('*').filter("a[href], area[href], :not([data-provide='datepicker']), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(':visible');
            if (fi.length > 0) { fi.get(0).focus(); }
            else {
                if ($(ctrl).find(".modal-start-focus").length > 0) {
                    $(ctrl).find(".modal-start-focus").focus();
                }
                else if ($(ctrl).find(".modal-header button").length > 0) {
                    $(ctrl).find(".modal-header button").focus();
                }
            }
        },
        setAria: function (dg, showHide) {
            var dv = (!showHide).toString();
            var pv = showHide.toString();
            $(dg).attr('aria-hidden', dv);
            $('#mainHeader').attr('aria-hidden', pv);
            $('#StaffHeader').attr('aria-hidden', pv);
            $('#LoogedinMainHeader').attr('aria-hidden', pv);
            $('#sidebar').attr('aria-hidden', pv);
            $('#footer').attr('aria-hidden', pv);
            $('#PageFormContent').attr('aria-hidden', pv);
            $('.skip-to-main').attr('aria-hidden', pv);
        }
    }
};;
//Highlight control or control's containing div
var __icbv = false;

$.validator.setDefaults({
    ignore: ".ignore, :hidden:not(.js-validate-hidden-field)",
    highlight: function (element) {
        if ($(element).is(':checkbox') || $(element).is(':radio')) {
            $(element).closest('.list-container').addClass("cv-error-border");
        } else if ($(element).is(':hidden.js-validate-hidden-field')) {
            $(element).closest('.error-border-container').addClass('cv-error-border');
            $(element).addClass("input-validation-error");
        } else {
            $(element).addClass("input-validation-error");
        }

        if ($(element).hasClass("cc-enable-rtf")) {
            $("#cke_" + $(element).attr("id")).addClass("input-validation-error");
        }
    },
    unhighlight: function (element) {

        if ($(element).is(':checkbox') || $(element).is(':radio')) {
            $(element).closest('.list-container').removeClass("cv-error-border");
        } else if ($(element).is(':hidden.js-validate-hidden-field')) {
            $(element).closest('.error-border-container').removeClass('cv-error-border');
            $(element).removeClass("input-validation-error");
        } else {
            $(element).removeClass("input-validation-error");
        }

        if ($(element).hasClass("cc-enable-rtf")) {
            $("#cke_" + $(element).attr("id")).removeClass("input-validation-error");
        }
    }
});

$(function () {

    $("input[type=checkbox].jg-cv-req").on('keydown', function (e) {
        if (e.which === 9) {
            var c = $(this).attr("id");
            var f = $(this).closest(".list-container").find("input:checkbox:first").attr("id");
            var l = $(this).closest(".list-container").find("input:checkbox:last").attr("id");
            __icbv = ((e.shiftKey && f !== c) || (!e.shiftKey && l !== c));
            //console.log('first: ' + f + ', last: ' + l + ', current: ' + c + ', status: ' + __icbv);
        }
    });

    $(".jg-cv-req").on('blur change', function () {
        var control = $(this);
        if ($(this).is(':radio')) {
            if (!$('[id*="' + $(this).attr('name').replace('.', '_') + '"]').is(':focus')) control.valid();
        }
        else if ($(this).is(':checkbox')) {
            if (!__icbv) control.valid();
            __icbv = false;
        }
        else {
            control.valid();
        }
    });
    
    // Because we are dealing with hidden fields, be sure to call .trigger('change') whenever setting the hidden fields value.
    $(':hidden.js-validate-hidden-field').on('change', function () {
        $(this).valid();
    });

    $(".jg-datepicker:not(.jg-cv-req)").on('blur change', function () {
        var control = $(this);
        control.valid();
    });
});



//JG Custom Validation
$.validator.addMethod("jgrequired", function (value, element, params) {

    if (value.trim() === '') {
        return false;
    } else {
        return true;
    }
});

$.validator.unobtrusive.adapters.add("jgrequired", function (options) {
    options.rules["jgrequired"] = options.element.id;
    options.messages["jgrequired"] = options.message;
});

//Radiobutton List Validation
$.validator.addMethod("radiobuttonlistrequired", function (value, element, params) {
    if ($("[name='" + element.name + "']").filter(function () { return $(this).is(":checked"); }).length > 0) {
        return true;
    } else {
        return false;
    }
});

$.validator.unobtrusive.adapters.add("radiobuttonlistrequired", function (options) {
    options.rules["radiobuttonlistrequired"] = options.element.id;
    options.messages["radiobuttonlistrequired"] = options.message;
});

//Checkbox List Validation
$.validator.addMethod("checkboxlistrequired", function (value, element, params) {
    if ($("[name='" + element.name + "']").filter(function () { return $(this).is(":checked"); }).length > 0) {
        return true;
    } else {
        return false;
    }
});

$.validator.unobtrusive.adapters.add("checkboxlistrequired", function (options) {
    options.rules["checkboxlistrequired"] = options.element.id;
    options.messages["checkboxlistrequired"] = options.message;
});


//SSN Validation

$.validator.addMethod("ssnrequired", function (value, element, params) {
    value = value.replace(/_/g, '').replace(/-/g, '');
    if (value.length !== 9) {
        return false;
    } else {
        return true;
    }
});

$.validator.unobtrusive.adapters.add("ssnrequired", function (options) {
    options.rules["ssnrequired"] = options.element.id;
    options.messages["ssnrequired"] = options.message;
});

$.validator.addMethod("ssnnotrequired", function (value, element, params) {
    return true;
});

//Date Validation
$.validator.addMethod("validatedate", function (value, element, params) {
        return validateDate(value, element, false);
});

$.validator.unobtrusive.adapters.add("validatedate", function (options) {
    options.rules["validatedate"]= options.element.id;
    options.messages["validatedate"]= options.message;
});

$.validator.addMethod("daterequired", function (value, element, params) {
    if (value.trim() === '') {
        return false;
    } else {
        return true;
    }
});

$.validator.unobtrusive.adapters.add("daterequired", function (options) {
    options.rules["daterequired"] = options.element.id;
    options.messages["daterequired"] = options.message;
});

$.validator.addMethod("futuredatecheck", function (value, element, params) {
    return isPastOrCurrentDate(value, element);
});

$.validator.unobtrusive.adapters.add("futuredatecheck", function (options) {
    options.rules["futuredatecheck"] = options.element.id;
    options.messages["futuredatecheck"] = options.message;
});

function isPastOrCurrentDate(value, element) {
    if (value != "__/__/____" && value != "") {
        var mm = value.substr(0, 2);
        var dd = value.substr(3, 2);
        var yyyy = value.substr(6, 4);
        var fdtDate = mm + "/" + dd + "/" + yyyy;
        fdtDate = Date.parse(fdtDate); 
        var ldtCurrentDate = new Date();
        if (fdtDate > ldtCurrentDate) {
            return false;
        }
    }
    return true;
}


$.validator.addMethod("shouldbefuturedatecheck", function (value, element, params) {
    return isFutureDate(value, element);
});

$.validator.unobtrusive.adapters.add("shouldbefuturedatecheck", function (options) {
    options.rules["shouldbefuturedatecheck"] = options.element.id;
    options.messages["shouldbefuturedatecheck"] = options.message;
});

function isFutureDate(value, element) {
    if (value != "__/__/____" && value != "") {
        var mm = value.substr(0, 2);
        var dd = value.substr(3, 2);
        var yyyy = value.substr(6, 4);
        var fdtDate = mm + "/" + dd + "/" + yyyy;
        fdtDate = Date.parse(fdtDate);
        var ldtCurrentDate = new Date();
        if (fdtDate <= ldtCurrentDate) {
            return false;
        }
    }
    return true;
}

function validateDate(value, element, isRequired) {
    var d = $.trim(value);
    if (!isRequired && (d == "" || d == "mm/dd/yyyy" || d == "mm/yyyy" || d == "__/__/____" || d == "__/____")) {
        return true;
    } else {
        if (d != "" && d != "mm/dd/yyyy" && d != "mm/yyyy" && d != "__/__/____" && d != "__/____") {
            s = isValidDate(d);
            if (!s && $(element).attr("data-date-format") === "mm/yyyy") {
                var t = d.split('/');
                if (t.length > 1) d = t[0] + "/01/" + t[1];
                for (var i = 2, len = t.length; i < len; i++) {
                    d += "/" + t[i];
                }
                s = isValidDate(d);
            }
            if (!s) { return false; } else { return true; }
        }
    }
}
function isValidDate(value) {
    dl = /[^mdy]/.exec("mm/dd/yyyy")[0],
    f = ("mm/dd/yyyy").split(dl),
    dt = value.split(dl),
    isdt = function (date, ft) {
        var m, d, y
        for (var i = 0, len = ft.length; i < len; i++) {
            if (/m/.test(ft[i])) m = date[i]
            if (/d/.test(ft[i])) d = date[i]
            if (/y/.test(ft[i])) y = date[i]
        }
        return (m > 0 && m < 13 && y && y.length === 4 && y >= 1753 && d > 0 && d <= (new Date(y, m, 0)).getDate())
    }
    return isdt(dt, f)
}



//Phone Validation
$.validator.addMethod("phonerequired", function (value, element, params) {
    value = value.replace(/_/g, '').replace(/-/g, '').replace(/\(/g, '').replace(/\)/g, '').replace(/\D/g, '');
    if (value.trim() === '') {
        return false;
    } else {
        return true;
    }
});

$.validator.unobtrusive.adapters.add("phonerequired", function (options) {
    var id = '#' + options.element.id;
    var errorMessage = $(id).closest('[data-val-phonemsg]').attr('data-val-phonemsg');
    errorMessage = errorMessage + " " + options.message;
    options.rules["phonerequired"] = options.element.id;
    options.messages["phonerequired"] = errorMessage;
});

// RequiredIf Validation
$.validator.addMethod("requiredif", function (value, element, params) {
    if (value == "" || typeof value === 'undefined') {
        var data = JSON.parse(params);
        var objNamePrefix = element.name.substr(0, element.name.lastIndexOf('.') + 1);
        var isRequired = false;
        var previousResult = false;
        //var objIDPrefix = '#' + element.name.substr(0, element.name.lastIndexOf('.') + 1).replace(/\./g, '_');

        var RelationalOperator = {
            EqualTo: 1,
            NotEqualTo: 2,
            GreaterThan: 3,
            LessThan: 4,
            CollectionContains: 5
        };

        var LogicalOperator = {
            AndAlso: 1,
            OrElse: 2
        };

        $.each(data, function (_index, _condition) {
            var objName = objNamePrefix + _condition.ConditionField;
            var obj = $('input[name="' + objName + '"]:not(:hidden)'); // :not(:hidden) needed for Standalone CheckBoxes/Toggle Buttons to work correctly.
            var result = false;

            if (obj.length == 0) {
                obj = $('input[name="' + objName + '"]');

                if (obj.length == 0) {
                    obj = $('select[name="' + objName + '"]');

                    if (obj.length == 0) {
                        console.log("RequiredIf: Could not locate object '" + objName + "'to be validated.");
                        return false; // Exit loop
                    }
                }
            }

            var valueArray = [];

            if (obj.length == 1) {
                if (obj.get(0).type == "radio" || obj.get(0).type == "checkbox") {
                    if (obj.get(0).checked == true) {
                        valueArray.push("True");
                    } else {
                        valueArray.push("False");
                    }
                } else {
                    valueArray.push(obj.get(0).value);
                }
            } else {
                $.each(obj, function (__index, __item) {
                    if (__item.type == "radio" || __item.type == "checkbox") {
                        if (__item.checked == true) {
                            valueArray.push(__item.value);
                        }
                    } else {
                        valueArray.push(__item.value);
                    }
                });
            }

            switch (_condition.RelationalOperator) {
                case RelationalOperator.EqualTo:
                    if (valueArray[0].toString().toLowerCase() == _condition.ConditionValue.toString().toLowerCase()) {
                        result = true;
                    }
                    break;
                case RelationalOperator.NotEqualTo:
                    if (valueArray[0].toString().toLowerCase() != _condition.ConditionValue.toString().toLowerCase()) {
                        result = true;
                    }
                    break;
                case RelationalOperator.GreaterThan:
                    if (valueArray[0].toString().toLowerCase() > _condition.ConditionValue.toString().toLowerCase()) {
                        result = true;
                    }
                    break;
                case RelationalOperator.LessThan:
                    if (valueArray[0].toString().toLowerCase() < _condition.ConditionValue.toString().toLowerCase()) {
                        result = true;
                    }
                    break;
                case RelationalOperator.CollectionContains:
                    $.each(valueArray, function (__index, __value) {
                        if (valueArray[__index].toString().toLowerCase() == _condition.ConditionValue.toString().toLowerCase()) {
                            result = true;
                            return false; // Exit loop
                        }
                    });
                    break;
                default:
                    console.log("RequiredIf: Error with RelationalOperator type '" + _condition.RelationalOperator + "' and object '" + objName + "'.");
                    break;
            }

            if (_condition.PrecedingLogicalOperator == null) {
                if (data.length == 1) {
                    if (result) {
                        isRequired = true;
                        //return false; // Exit loop
                    }
                } else {
                    if (_index == 0) {
                        previousResult = result;
                    } else {
                        console.log("RequiredIf: Missing required input LogicalOperator.");
                    }
                }
            } else {
                switch (_condition.PrecedingLogicalOperator) {
                    case LogicalOperator.AndAlso:
                        if (previousResult && result) {
                            isRequired = true;
                            return false; // Exit loop
                        } else {
                            previousResult = result;
                        }
                        break;
                    case LogicalOperator.OrElse:
                        if (previousResult || result) {
                            isRequired = true;
                            return false; // Exit loop
                        } else {
                            previousResult = result;
                        }
                        break;
                    default:
                        console.log("RequiredIf: LogicalOperator type '" + __condition.PrecedingLogicalOperator + "' not supported.");
                        break;
                }
            }
        });

        if (isRequired) {
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
});

$.validator.unobtrusive.adapters.add("requiredif", ["requiredcondition"], function (options) {
    options.rules["requiredif"] = options.params.requiredcondition;
    options.messages["requiredif"] = options.message;
});

(function ($) {
    $.fn.ignoreValidation = function () {
        var $this = $(this);
        return $this.each(function () {
            $(this).attr("data-val", "true");
            $(this).attr("aria-invalid", "false");
            $(this).addClass('ignore');
            if ($(this).hasClass('cv-error')) { $(this).removeClass('cv-error'); }
            if ($(this).hasClass('input-validation-error')) { $(this).removeClass('input-validation-error') }
            else if ($(this).closest('.list-container').hasClass('cv-error-border')) { $(this).closest('.list-container').removeClass('cv-error-border'); }
            $("span.field-validation-error[data-valmsg-for='" + this.name + "']").html('').removeClass('field-validation-error').addClass('field-validation-valid');
        });
    };
    $.fn.clearValidation = function () {
        var $this = $(this);
        return $this.each(function () {
            $(this).attr("data-val", "true");
            $(this).attr("aria-invalid", "false");
            if ($(this).hasClass('cv-error')) { $(this).removeClass('cv-error'); }
            if ($(this).hasClass('input-validation-error')) { $(this).removeClass('input-validation-error') }
            else if ($(this).closest('.list-container').hasClass('cv-error-border')) { $(this).closest('.list-container').removeClass('cv-error-border'); }
            $("span.field-validation-error[data-valmsg-for='" + this.name + "']").html('').removeClass('field-validation-error').addClass('field-validation-valid');
        });
    };
    $.fn.setValidation = function () {
        var $this = $(this);
        return $this.each(function () { $(this).removeClass('ignore'); });
    };
    $.fn.textareaVal = function (text) {
        $(this).val(text);
        if ($(this).hasClass('show-char-count')) jgUtils.textAreaCharCount($(this));
    };
}(jQuery));
;
