var LOGOUT_USER = 'event:logout-user';
var NO_LOGGED_IN_USER = 'event:no-logged-user';
var LOGIN_USER = 'event:login-user';
var USER_ON_ROOT = 'event:auth-userOnRootScope';
var IS_AUTHORISED_URL = '/api/system/isauthorised';
var IS_IMPERSONATING = 'event:is-impersonating';
var BUILD_NUMBER_CHANGED = 'event:build-number-changed';

var constantsModule = angular.module('appConstantsModule', []);
constantsModule
    .constant('AUTH_EVENTS', {
        loginSuccess: 'auth-login-success',
        loginFailed: 'auth-login-failed',
        logoutSuccess: 'auth-logout-success',
        sessionTimeout: 'auth-session-timeout',
        notAuthenticated: 'auth-not-authenticated',
        notAuthorized: 'auth-not-authorized',
        notFound: 'not-found',
        serverError: 'server-error'
    })
    .constant('GRID_CONSTANTS', {
        GRID_SEARCH_DEBOUNCE: 750,
        DEFAULT_PAGE_SIZE: 40,
        REFRESH_GRID_PREFIX: 'refresh-grid-',
        EXPORT_GRID_PREFIX: 'export-grid-',
        REFRESH_GRID_OPTIONS_PREFIX: 'refresh-grid-options-',
        REFRESH_GRID_OPTIONS_AND_RELOAD_PREFIX: 'refresh-grid-options-and-reload-',
        GET_SELECTED_ITEMS_GRID_PREFIX: 'get-selected-items-grid-',
        SELECTED_ITEMS_GRID_PREFIX: 'selected-items-grid-',
        //UPDATE_GRID_FLAG_PREFIX: 'update-grid-flag',
        //GET_ALL_SEARCHED_IDS_PREFIX: 'get-all-searched-ids-',
        ALL_SEARCHED_IDS_PREFIX: 'all-searched-ids-',
        REBUILD_GRID: 'rebuild-grid',
        IMPORT_DATA: 'import-data-'
    })
    .constant('CLIENT_DATA', {
        api_http: "",
        client_key: "30dbb12e07974313",
        time_out: 4000
    })
    .constant('FREIGHT_CONSTANTS', {
        REGENERATE_PRICE: 'event:regenerate-freight-price',
        REGENERATE_PRICE_DONE: 'event:regenerated-freight-price-done',
        OVERRIDE_PRICE_DONE: 'event:override-freight-price-done',
        UPDATE_FREIGHT_PRICE: 'event:update-freight-price',
        FREIGHT_TOGGLE: 'event:toggle-freight',
        FREIGHT_PRICE_TOGGLE: 'event:toggle-freight-price',
        TEMP_UPDATE_FREIGHT_PRICE: 'event:temp-update-freight-price'
    })
    .constant('CART_CONSTANTS', {
        CART_UPDATED: 'event:cart-updated',
        UPDATE_CART: 'event:update-cart',
        REMOVE_ITEM_FROM_CART: 'event:remove-item-from-cart'
    })
    .constant('IMPORT_CONSTANTS', {
        FILE_IMPORTED: 'event:file-imported-',
        FILE_IMPORTED_SAVED: 'event:file-imported-saved'
    })
    .constant('ALLOWED_ANONYMOUS_ACCESS', ['PPI', 'TEST', 'QODO', 'FILDES'])
    .constant('PPI_CONSTANTS', {
        ITEM_NAME_METALLIC_COLOUR: 'Metallic Colour',
        ITEM_NAME_LIP_INDIVIDUAL: 'Individual Names / Lip Print',
        ITEM_NAME_BACKSTAMP: 'Backstamp',
        ITEM_INDIVIDUAL_SMALL_SIZE_QTY: 50,
        ITEM_INDIVIDUAL_LARGE_SIZE_QTY: 30,
        ITEM_QUANTITY_CHANGED: 'event:quantity-changed',
        PRICING_MODAL_SUBMITTED: 'event:pricing-modal-submitted'
    })
    .constant('FILTER_CONSTANTS', {
        STANDARD_DATE_FORMAT: 'd MMM yyyy',
        STANDARD_DATE_TIME_FORMAT: 'd MMM yyyy h:mm a',
        STANDARD_TIME_FORMAT: 'h:mm a',

        FORMAL_DATE_FORMAT: 'yyyy-MM-dd',
        FORMAL_DATE_TIME_FORMAT: 'yyyy-MM-dd hh:mm',

        STANDARD_DATE_FORMAT_MOMENT: 'D MMM YYYY',
        STANDARD_DATE_TIME_FORMAT_MOMENT: 'D MMM YYYY h:mm a',
        STANDARD_TIME_FORMAT_MOMENT: 'h:mm a',

        FORMAL_DATE_FORMAT_MOMENT: 'YYYY-MM-DD',
        FORMAL_DATE_TIME_FORMAT_MOMENT: 'YYYY-MM-DD HH:mm',
        STANDARD_DATE_WITH_DAY_NAME_FORMAT_MOMENT: 'ddd D MMM YYYY',
        STANDARD_DATE_TIME_WITH_DAY_NAME_MOMENT: 'ddd D MMM YYYY h:mm a'
    })
    .constant('TIMES', [
        { id: 1, name: '8.00am' },
        { id: 2, name: '8.30am' },
        { id: 3, name: '9.00am' },
        { id: 4, name: '9.30am' },
        { id: 5, name: '10.00am' },
        { id: 6, name: '10.30am' },
        { id: 7, name: '11.00am' },
        { id: 8, name: '11.30am' },
        { id: 9, name: '12.00am' },
        { id: 10, name: '12.30am' },
        { id: 11, name: '1.00pm' },
        { id: 12, name: '1.30pm' },
        { id: 13, name: '2.00pm' },
        { id: 14, name: '2.30pm' }
    ])
    .constant('TITLES', ['Mr', 'Mrs', 'Ms', 'Mr & Mrs', 'Dr', 'Prof', 'Sir', 'Dame'])
    .constant('STATES', [
        { id: null, name: 'State' },
        { id: 'ACT', name: 'ACT', description: 'Australian Capital Territory', lat: '-35.473469', long: '149.012375' }, // 4, 
        { id: 'NSW', name: 'NSW', description: 'New South Wales', lat: '-33.283577', long: '149.101273' }, // 5,
        { id: 'NT', name: 'NT', description: 'Northern Territory', lat: '-19.491411', long: '132.550964' }, // 7,
        { id: 'QLD', name: 'QLD', description: 'Queensland', lat: '-16.925491', long: '145.754120' }, // 8,
        { id: 'SA', name: 'SA', description: 'South Australia', lat: '-34.906101', long: '138.593903' }, // 3,
        { id: 'TAS', name: 'TAS', description: 'Tasmania', lat: '-41.429825', long: '147.157135' }, // 6,
        { id: 'VIC', name: 'VIC', description: 'Victoria', lat: '-36.757786', long: '144.278702' }, // 1,
        { id: 'WA', name: 'WA', description: 'Western Australia', lat: '-31.953512', long: '115.857048' }, // 2,
        { id: 'Other', name: 'Other' } // 9,
    ])
    .constant('USER_TYPES', CLIENT_NAME == 'TWC' ?
        [
            { id: 1, name: "System Admin" },
            { id: 3, name: "Client" },
            { id: 4, name: "Company" },
            { id: 6, name: "Deliveries" },
            { id: 7, name: "Work Order Scanning" }
        ] : [
            { id: 1, name: "System Admin" },
            { id: 3, name: "Client" },
            { id: 4, name: "Company" }
        ]);


window.isValidEmailAddress = function (emailAddress) {
    var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
    return pattern.test(emailAddress);
};

window.resizeIframe = function (obj) {
    var contentHeight = obj.contentWindow.document.body.scrollHeight + 20;
    setTimeout(function () {
        var currentHeight = parseInt(obj.style.height.replace("px", ""));
        if (contentHeight > currentHeight)
            obj.style.height = (obj.contentWindow.document.body.scrollHeight + 20) + 'px';
    }, 100);
};
window.previewImage = function (suffix) {
    suffix = typeof suffix === 'undefined' ? '' : suffix;
    var oFReader = new FileReader();
    oFReader.readAsDataURL(document.getElementById("uploadImage" + suffix).files[0]);

    oFReader.onload = function (oFREvent) {
        document.getElementById("uploadPreview" + suffix).src = oFREvent.target.result;
    };
};
window.randomString = function () {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    for (var i = 0; i < 5; i++)
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    return text;
};
window.jsonToQueryString = function (data) {
    var ret = [];
    for (var d in data) {
        if (data[d] && typeof data[d] !== 'undefined')
            ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
    }
    return ret.join("&");
};
Array.prototype.clean = function (deleteValue) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == deleteValue) {
            this.splice(i, 1);
            i--;
        }
    }
    return this;
};
Array.prototype.distinct = function () {
    var origArr = this;
    var newArr = [],
        origLen = origArr.length,
        found, x, y;
    for (x = 0; x < origLen; x++) {
        found = undefined;
        for (y = 0; y < newArr.length; y++) {
            if (JSON.stringify(origArr[x]) === JSON.stringify(newArr[y])) {
                found = true;
                break;
            }
        }
        if (!found) {
            newArr.push(origArr[x]);
        }
    }
    return newArr;
};
Array.prototype.move = function (old_index, new_index) {
    if (new_index >= this.length) {
        var k = new_index - this.length;
        while ((k--) + 1) {
            this.push(undefined);
        }
    }
    this.splice(new_index, 0, this.splice(old_index, 1)[0]);
    return this; // for testing purposes
};
String.prototype.replaceAll = function (search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};

if (typeof String.prototype.startsWith === 'undefined') {
    String.prototype.startsWith = function (searchString, position) {
        position = position || 0;
        return this.indexOf(searchString, position) === position;
    };
}

(function ($) {
    $(document).ready(function () {
        if ($('.fildes #backToTopButton').length) {
            var scrollTrigger = 100, // px
                backToTop = function () {
                    var scrollTop = $(window).scrollTop();
                    if (scrollTop > scrollTrigger) {
                        $('#backToTopButton').addClass('show');
                    } else {
                        $('#backToTopButton').removeClass('show');
                    }
                };
            backToTop();
            $(window).on('scroll', function () {
                backToTop();
            });
            $('#backToTopButton').on('click', function (e) {
                e.preventDefault();
                $('html,body').animate({
                    scrollTop: 0
                }, 700);
            });
        }
    });
})(jQuery);
var gridsModule = angular.module('appGridModule', ['appConstantsModule']);
var sharedModule = angular.module('appSharedModule', []);
var loginModule = angular.module('appLoginModule', []);
var homeModule = angular.module('appHomeModule', ['appConstantsModule']);
var visaPlayerModule = angular.module('appVisaPlayerModule', []);
var clubPointModule = angular.module('appClubPointModule', []);
var emailTemplateModule = angular.module('appEmailTemplateModule', []);
var seasonModule = angular.module('appSeasonModule', []);
var activityLogModule = angular.module('appActivityLogModule', []);
var menuModule = angular.module('appMenuModule', []);
var messageModule = angular.module('appMessageModule', []);
var calendarsModule = angular.module('appCalendarModule', []);
var itemModule = angular.module('appItemModule', []);
var customFieldModule = angular.module('appCustomFields', []);
var editItem = angular.module('appEditItem', ['ivh.treeview']);
var itemDocuments = angular.module('appItemDocuments', []);
var formBuilderModule = angular.module('appFormBuilderModule', []);
var itemStatusesModule = angular.module('appItemStatusesModule', []);
var orderModule = angular.module('appOrderModule', []);
var pricingModule = angular.module('appPricing', []);
var artworkApprovalModule = angular.module('appArtworkApprovalModule', []);
var catalogue = angular.module('appCatalogue', []);
var customerDetailsModule = angular.module('appCustomerDetailsModule', []);
var roleModule = angular.module('appRoleModule', []);
var importExportModule = angular.module('appImportExportModule', []);
var navModule = angular.module('navModule', []);
var itemGroupsModule = angular.module('itemGroupsModule', []);
var reportsModule = angular.module('reportsModule', []);
var invoiceModule = angular.module('invoiceModule', []);
var reworkModule = angular.module('appReworkModule', []);
var scheduleModule = angular.module('appScheduleModule', []);
var jobModule = angular.module('appJobModule', []);
angular.module('twcItemStatusModule', []);


var app = angular.module('app', [
    'oc.lazyLoad', 'angular.filter', 'ui.router', 'ngRoute', 'ngMessages', 'ngCookies', 'ngResource',
    'uiSwitch', 'ngTouch', 'ngSanitize', 'ngBootstrap', 'angular-loading-bar', 'ngCacheBuster',
    'ui.bootstrap', 'ngProgress', 'angular-loading-bar', 'angularFileUpload', 'ngGrid', 'highcharts-ng',
    'angular-carousel', 'appGridModule', 'appSharedModule', 'appLoginModule', 'appHomeModule',
    'appMessageModule', 'appItemModule', 'appItemStatusesModule', 'appCatalogue', 'appPricing',
    'appArtworkApprovalModule', 'appCustomFields', 'appEditItem', 'appItemDocuments', 'angular-ladda',
    'ngTextTruncate', 'colorpicker.module', 'ngMask', 'appVisaPlayerModule', 'appClubPointModule',
    'appEmailTemplateModule', 'appSeasonModule', 'appActivityLogModule', 'appMenuModule', 'ui.tree',
    'ui.sortable', 'simpleGrid', 'toaster', 'appCalendarModule', 'ui.calendar', 'appFormBuilderModule',
    'appOrderModule', 'appCustomerDetailsModule', 'appRoleModule', 'appImportExportModule', 'navModule',
    'ncy-angular-breadcrumb', 'itemGroupsModule', 'twcItemStatusModule',
    'angularUtils.directives.dirPagination', 'invoiceModule', 'fitVids', 'angular-click-outside',
    'LocalStorageModule', 'nsPopover', 'appReworkModule', 'appJobModule', 'appMenuModule', 'appScheduleModule',
    'ui.tree', 'bootstrapLightbox', 'angularBootstrapNavTree', 'ngMap', 'angularjs-dropdown-multiselect']);

app.run(
    ['$rootScope', '$window', '$state', 'clientHelperFactory', '$modalStack', '$location', '$interpolate', 'membershipFactory', 'permissionFactory', 'AUTH_EVENTS',
    function ($rootScope, $window, $state, clientHelperFactory, $modalStack, $location, $interpolate, membershipFactory, permissionFactory, AUTH_EVENTS) {
        $rootScope.pageTitle = "";
        $rootScope.pageDescription = "";

        $rootScope.nextState = null;


        function isAOlderThanB(scopeA, scopeB) {
            if (angular.equals(scopeA.length, scopeB.length)) {
                return scopeA > scopeB;
            } else {
                return scopeA.length > scopeB.length;
            }
        }

        var $lastViewScope = $rootScope;
        var metaData = null;

        // Early catch of $viewContentLoaded event
        $rootScope.$on('$viewContentLoaded', function (event) {
            // With nested views, the event occur several times, in "wrong" order
            if (isAOlderThanB(event.targetScope.$id, $lastViewScope.$id)) {
                $lastViewScope = event.targetScope;
                if (metaData) {
                    //console.log(metaData.description, $lastViewScope)
                    $rootScope.pageTitle = $interpolate(metaData.title)($lastViewScope);
                    $rootScope.pageDescription = $interpolate(metaData.description)($lastViewScope);
                }
            }
        });

        $rootScope.$on('$stateChangeSuccess', function (event, next) {
            if (typeof (PAGE_BUILD_NUMBER) === 'undefined') {
                console.log('PAGE_BUILD_NUMBER undefined');
                $rootScope.showReloadPageToaster = true;
            } else {
                if ($rootScope.buildNumber && $rootScope.buildNumber !== PAGE_BUILD_NUMBER) {
                    $rootScope.showReloadPageToaster = true;
                }
            }

            // State
            var arr = next.name.split('.');
            var mainState = arr[0];
            if ($rootScope.isAthenticated || mainState !== 'base') {
                $rootScope.currentRootState = mainState;
            } else if (!$rootScope.isAthenticated && mainState == 'base') {
                $rootScope.currentRootState = 'anonymous';
            }

            // WhiteList
            if (!$rootScope.isAthenticated && mainState !== 'anonymous') {
                $rootScope.noLoginRequired = typeof next.noLoginRequired === "undefined" ? false : next.noLoginRequired;

                if ($rootScope.noLoginRequired) {
                    $rootScope.$broadcast('event:noLoginRequired');
                }
            } else {
                $rootScope.noLoginRequired = mainState === 'anonymous';
            }
            $rootScope.showBlanket = false;

            if (next.meta) {
                metaData = next.meta;
            } else {
                metaData = null;
                $rootScope.pageDescription = PAGE_TITLE;
            }
        });

        $rootScope.$on('$stateChangeStart', function (event, next, toParams, fromState, fromParams) {
            $rootScope.showBlanket = true;
            $modalStack.dismissAll('navigated');

            $rootScope.nextState = angular.copy(next);

            if (next.redirectTo) {
                event.preventDefault();

                if (fromState.name != next.redirectTo) {
                    $state.go(next.redirectTo, toParams);
                }
                return;
            }
            if (next.name.indexOf("login") >= 0) {
                return;
            }
            if (window.location.href.indexOf("login") > 0) {
                return;
            }
            if ($location.path() == "/forgotpassword") {
                return;
            }
            if ($location.path() == "/404") {
                return;
            }
            if ($location.path() == "/500") {
                return;
            }

            membershipFactory.ping2(function (pingResult) {
                try {
                    var getPermissions = function (obj, k1, k2) {
                        var ddata = [];
                        var isDefined = false;

                        function customFilter(object, key, key2) {
                            if (object.hasOwnProperty(key)) {
                                if (typeof object[key][key2] !== "undefined") {
                                    isDefined = true;
                                    angular.forEach(object[key][key2],
                                        function (ar) {
                                            ddata.push(ar);
                                        });
                                }
                            }
                            for (var i = 0; i < Object.keys(object).length; i++) {
                                if (typeof object[Object.keys(object)[i]] === "object") {
                                    var o = customFilter(object[Object.keys(object)[i]], key, key2);
                                    if (o != null) {
                                        isDefined = true;
                                        ddata.push(o);
                                    }
                                }
                            }
                        }

                        customFilter(obj, k1, k2);

                        return isDefined ? angular.copy(ddata.distinct()) : null;
                    };

                    var permissions = getPermissions(next, "data", "permissions");

                    var isAuthorized = permissions != null
                        ? permissionFactory.isSysAdmin() || permissionFactory.hasPermission(permissions)
                        : true;
                    var isAuthenticated = $rootScope.user.fullyPassedAuthentication;

                    if (!isAuthorized && !isAuthenticated) {
                        event.preventDefault();

                        // user is not logged in
                        console.log("not authenticated");
                        $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
                        $rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
                        if ($rootScope.clientName == "TWC" || $rootScope.clientName == "RETAILBLINDS" || $rootScope.clientName == "TFT") {
                            $state.go("login");
                        } else {
                            window.location = "/login";
                        }
                        return;
                    } else if (!isAuthorized && isAuthenticated) {
                        event.preventDefault();
                        $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
                        console.log("not authorized");
                        $state.go("anonymous.http404");
                        return;
                    } else {
                        return;
                    }
                } catch (er) { }
            });
        });

        $rootScope.$on('$stateChangeError', function (event, next) {
            console.log('state error');
            if (next.name != 'base') {
                $state.go('anonymous.http404');
            }
            $rootScope.showBlanket = false;
        });
    }]);
(function () {
    'use strict';
    angular.module('app').controller('AppRootCtrl',
        ['$scope', '$rootScope', '$state', '$location', '$route', 'baseFactory',
            function ($scope, $rootScope, $state, $location, $route, baseFactory) {

                $rootScope.showBlanket = false;
                $rootScope.showMainHeader = true;
                $rootScope.showMainFooter = true;

                $scope.$onRootScope(LOGIN_USER, function (scope, data) {
                    $rootScope.isAthenticated = true;
                    $rootScope.user = data;
                    $rootScope.$emit(USER_ON_ROOT, data);
                    $state.go('base.home');
                });
                $scope.$onRootScope('$stateChangeSuccess', function (ev, nxt) {
                    $rootScope.showMainHeader = true;
                    $rootScope.showMainFooter = true;
                    document.body.scrollTop = document.documentElement.scrollTop = 0;

                    //get the section from the route
                    var parts = $location.path().split('/');

                    if (parts[1])
                        $rootScope.navSection = parts[1];
                    else {
                        $rootScope.navSection = "";
                    }

                    if (parts[2])
                        $rootScope.navSubSection = parts[2];
                    else {
                        $rootScope.navSubSection = "";
                    }
                });

                $rootScope.pathStructure = {
                    navSections: [{
                        name: 'Admin',
                        path: 'admin',
                        requiredComponent: 'sysadmin',
                        navSubSections: [{
                            name: 'users',
                            path: 'users',
                            requiredSubcomponent: 'sysadminusers'
                        }, {
                            name: 'roles',
                            path: 'roles',
                            requiredSubcomponent: 'sysadminroles'
                        }]
                    }]
                };

                $rootScope.isAthenticated = false;
                $rootScope.noLoginRequired = false;
                $rootScope.isUserAthenticated = function () {
                    var result = true;

                    if (typeof $rootScope.user === "undefined") result = false;
                    if ($rootScope.user === null) result = false;

                    $rootScope.isAthenticated = result;
                    return result;
                };

                $rootScope.isCompanyUser = function () {
                    if (!$rootScope.user)
                        return false;
                    return $rootScope.user.customerId === "" && $rootScope.user.customerName === "";
                };

            }]);
})();
(function () {
    'use strict';
    app.config(config);
    config.$inject = ['$stateProvider', '$provide', '$locationProvider', '$urlRouterProvider', '$ocLazyLoadProvider', 'localStorageServiceProvider'];
    function config($stateProvider, $provide, $locationProvider, $urlRouterProvider, $ocLazyLoadProvider, localStorageServiceProvider) {
        $stateProvider
            // ERROR PAGES
            .state('anonymous.http404', {
                url: "/404",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateUrl: "/app/modules/shared/errors/404.html",
                        controller: ['$rootScope', '$scope', function ($rootScope, $scope) {
                            $rootScope.showBlanket = false;
                            //$rootScope.showMainHeader = false;
                            //$rootScope.showMainFooter = false;
                        }],
                    }
                },
                ncyBreadcrumb: {
                    label: '404 Error'
                }
            })
            .state('anonymous.http500', {
                url: "/500",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateUrl: "/app/modules/shared/errors/500.html",
                        controller: ['$rootScope', function ($rootScope) {
                            $rootScope.showBlanket = false;
                            //$rootScope.showMainHeader = false;
                            //$rootScope.showMainFooter = false;
                        }],
                    }
                },
                ncyBreadcrumb: {
                    label: '500 Error'
                }
            });
        // the known route, with missing '/' - let's create alias
        $urlRouterProvider.when('', '/');

        // if none of the above states are matched, use this as the fallback
        $urlRouterProvider.otherwise('/404');

        //this is a custom property for the scope that is essentially $rootScope.$on.
        //However this allows you to properly clean up all of your listeners
        //http://stackoverflow.com/questions/11252780/whats-the-correct-way-to-communicate-between-controllers-in-angularjs
        $provide.decorator('$rootScope', ['$delegate', function ($delegate) {
            Object.defineProperty($delegate.constructor.prototype, '$onRootScope', {
                value: function (name, listener) {
                    var unsubscribe = $delegate.$on(name, listener);
                    this.$on('$destroy', unsubscribe);
                },
                enumerable: false
            });
            return $delegate;
        }]);

        //
        localStorageServiceProvider
            .setPrefix('sage_')
            .setDefaultToCookie(true)
            .setStorageCookie(30, '/', true);
        //
        $ocLazyLoadProvider.config({
            debug: false,
            modules: [
                {
                    name: 'angularUploadButton', cache: false, serie: true,
                    files: [
                        '/app/lib/angular-upload/angular-upload.js'
                    ]
                },
                {
                    name: 'AngularGanttModule', cache: true, serie: true,
                    files: [
                        '/Content/custom-bootstrap/angular-gantt/angular-gantt.css',
                        '/Content/custom-bootstrap/angular-gantt/angular-gantt-plugins.css',
                        '/Content/custom-bootstrap/angular-gantt/angular-gantt-labels-plugin.css',
                        '/Content/custom-bootstrap/angular-gantt/angular-gantt-tooltips-plugin.css',
                        '/app/lib/angular-gantt/draganddrop.min.js',
                        'https://cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.12/angular-strap.js',
                        'https://cdnjs.cloudflare.com/ajax/libs/angular-strap/2.3.12/angular-strap.tpl.js',
                        '/app/lib/angular-gantt/angular-gantt.min.js',
                        '/app/lib/angular-gantt/angular-gantt-plugins.min.js',
                        '/app/lib/angular-gantt/angular-gantt-labels-plugin.min.js',
                        '/app/lib/angular-gantt/angular-gantt-tooltips-plugin.min.js',
                        'https://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.2/moment-range.js',
                        'https://cdnjs.cloudflare.com/ajax/libs/css-element-queries/1.2.2/ElementQueries.min.js',
                        'https://cdnjs.cloudflare.com/ajax/libs/css-element-queries/1.2.2/ResizeSensor.min.js'
                    ]
                },
                {
                    name: 'OcSubscribeCtrl', cache: false, serie: true,
                    files: [
                        '/app/modules/subscribe/modals/subscribeModalController.js'
                    ]
                },
                {
                    name: 'OcNoteModalCtrl', cache: false, serie: true,
                    files: [
                        '/app/modules/admin/customers/modals/manageNoteModal.js'
                    ]
                },
                {
                    name: 'OcViewSimpleMediaCtrl',
                    cache: true,
                    serie: true,
                    files: [
                        'https://vjs.zencdn.net/7.6.0/video-js.css',
                        'https://vjs.zencdn.net/7.6.0/video.js',
                        '/app/modules/admin/items/editItemModal/editVideoGalleryModal/viewSimpleMediaModal.js'
                    ]
                },
                {
                    name: 'OcOrderReviewCtrl',
                    cache: true,
                    serie: true,
                    files: [
                        '/app/modules/admin/itemReviews/controllers/itemReviewCreateEditController.js',
                        '/app/modules/admin/itemReviews/modals/editItemReviewModalController.js'
                    ]
                },
                {
                    name: 'OcLoginPopupCtrl', cache: false, serie: true,
                    files: [
                        '/app/modules/loginPopUp/loginPopUp.js'
                    ]
                },
                {
                    name: 'OcCatalogCtrl', cache: false, serie: true,
                    files: [
                        'js!/bundles/catalog'
                    ]
                },
                {
                    name: 'OcHangfireCtrl', cache: false, serie: true,
                    files: [
                        'js!/bundles/hangfire'
                    ]
                },
                {
                    name: 'OcFullCalendarCtrl', cache: false, serie: true,
                    files: [
                        'js!/bundles/fullcalendar'
                    ]
                },
                {
                    name: 'ng-infinite-scroll',
                    cache: false,
                    files: [
                        '/app/lib/misc/ng-infinite-scroll.js'
                    ]
                },
                {
                    name: 'ng-inview',
                    cache: false,
                    files: [
                        '/app/lib/misc/angular-inview.js'
                    ]
                },
            ]
        });
    }
})();
homeModule.config(
['$stateProvider',
    function ($stateProvider) {
        $stateProvider
            .state('base.home.aboutUs', {
                url: "aboutus",
                views: {
                    'content@base': {
                        templateUrl: "/content/clients/ppi/html/aboutUs.html",
                        controller: 'HomeAboutUsCtrl',
                    }
                },
                ncyBreadcrumb: {
                    label: 'About Us'
                }
            })
            .state('base.home.faq', {
                url: "faq",
                views: {
                    'content@base': {
                        templateUrl: "/content/clients/ppi/html/faq.html",
                        controller: 'HomeAboutUsCtrl',
                    }
                },
                ncyBreadcrumb: {
                    label: 'Frequently Asked Questions'
                }
            });
    }
]);
homeModule.config(
['$stateProvider',
    function ($stateProvider) {
        $stateProvider
            .state('base.customers.manage.orders', {
                url: "/orders",
                views: {
                    '@base.customers.manage': {
                        templateUrl: "/app/modules/admin/customers/views/grid.html",
                        controller: 'orderCtrl',
                        resolve: {
                            orderStatuses: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getGridEntity('/api/orderstatus/getall/?exclude=13');
                            }],
                            categories: ['$route', 'baseFactory', function ($route, baseFactory) {
                                return baseFactory.fetch('/api/category/GetAll');
                            }],
                            printers: function (baseFactory) {
                                return baseFactory.fetch('/api/calendar/list').then(function (rrdata) {
                                    return rrdata.object || [];
                                });
                            },
                            orderTemplateUrl: function () {
                                return '/app/modules/order/orderTemplatePPI.html';
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: '{{customerName}} - Orders'
                }
            })
            .state('base.customers.manage.sageOrders', {
                url: "/sageorders",
                views: {
                    '@base.customers.manage': {
                        templateUrl: "/app/modules/admin/customers/views/grid.html",
                        controller: 'SageOrdersCtrl',
                        resolve: {
                        }
                    }
                },
                data: {
                    permissions: ['system.sageorders.allow']
                },
                ncyBreadcrumb: {
                    label: '{{customerName}} - Sage Orders'
                }
            });
    }
]);
(function () {
    'use strict';
    app.config(config);
    config.$inject = ['$stateProvider', '$provide', '$urlRouterProvider'];

    function config($stateProvider, $provide, $urlRouterProvider) {

        $stateProvider
            .state('anonymous', {
                noLoginRequired: true,
                url: "",
                redirectTo: 'anonymous.catalog',
                // abstract: true,
                resolve: {
                },
                views: {
                    '@': {
                        template: '<div ui-view="content"></div>'
                    }
                },
                ncyBreadcrumb: {
                    label: 'Home'
                }
            })
            .state('anonymous.catalog', {
                url: "/product/catalog/?q&c&s&f",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateUrl: "/app/modules/catalog/searchPage/searchAnonymous.html",
                        controller: 'searchCtrl',
                        resolve: {
                            categories: ['$route', 'resolveFactory', function ($route, resolveFactory) {
                                return resolveFactory.getEntity('/api/category/GetAll');
                            }],
                            customFields: ['baseFactory', function (baseFactory) {
                                return baseFactory.fetch('/api/CustomFields/GetAll?isItem=true&isVisibleOnWeb=true').then(function (rdata) {
                                    if (rdata.isErrored)
                                        return [];
                                    return rdata.object;
                                });
                            }],
                            stockStatuses: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getEntity('/api/ItemStatus/getAll');
                            }],
                            itemBrands: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getEntity('/api/item/getAllBrands');
                            }]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Products'
                }
            })
            .state('anonymous.catalog.item', {
                url: "item/:id",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateUrl: '/app/modules/catalog/itemDetails/mainItemDetails.html',
                        controller: 'itemDetailsCtrl',
                        resolve: {
                            item: [
                                '$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                                    return baseFactory.fetch('/api/item/GetItemDetails?itemNumber=' + $stateParams.id).then(function (rrdata) {
                                        return rrdata.object;
                                    });
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/category/GetAllForTree');
                                }
                            ]
                        }
                    },
                    '@anonymous.catalog.item': {
                        templateUrl: "/app/modules/catalog/itemDetails/itemDetailsAnonymous.html",
                    }
                },
                ncyBreadcrumb: {
                    label: 'Item'
                }
            })
            .state('anonymous.catalog.item.singleItem', {
                url: "/?v",
                noLoginRequired: true,
                templateUrl: "/app/modules/catalog/itemDetails/itemDetailsAnonymousWithGroup.html",
                controller: 'itemDetailsWithGroupCtrl',
                resolve: {
                    item: [
                        '$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                            return baseFactory.fetch('/api/item/GetItemDetails?itemAlias=' + $stateParams.v).then(function (rrdata) {
                                return rrdata.object;
                            });
                        }
                    ]
                },
                ncyBreadcrumb: {
                    label: 'Single Item'
                }
            });
    }
})();
(function () {
    'use strict';
    catalogue.config(config);
    config.$inject = ['$stateProvider'];

    function config($stateProvider) {
        $stateProvider
            .state('base.catalog', {
                url: "/catalog/?q&c&s&f",
                noLoginRequired: false,
                views: {
                    'content@base': {
                        templateUrl: '/app/modules/catalog/searchPage/search.html',
                        controller: 'searchCtrl',
                        resolve: {
                            categories: ['$route', 'resolveFactory', function ($route, resolveFactory) {
                                return resolveFactory.getEntity('/api/category/GetAll');
                            }],
                            customFields: ['baseFactory', function (baseFactory) {
                                return baseFactory.fetch('/api/CustomFields/GetAll?isItem=true&isVisibleOnWeb=true').then(function (rdata) {
                                    if (rdata.isErrored)
                                        return [];
                                    return rdata.object;
                                });
                            }],
                            stockStatuses: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getEntity('/api/ItemStatus/getAll');
                            }],
                            itemBrands: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getEntity('/api/item/getAllBrands');
                            }]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Catalog'
                }
            })
            .state('base.catalog.category', {
                url: "cat/:id",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/catalog/catalog.html",
                        controller: 'catalogueCtrl',
                        resolve: {
                            categories: [
                                '$route', 'resolveFactory', function ($route, resolveFactory) {
                                    return resolveFactory.getEntity('/api/category/GetAllForTree');
                                }
                            ],
                            items: [
                                '$route', '$stateParams', 'resolveFactory', function ($route, $stateParams, resolveFactory) {
                                    if (!$stateParams.id)
                                        return resolveFactory.getEntity('/api/item/SearchItems?startindex=1&retrievesize=999999&includeMinimumQuantity=true');
                                    return resolveFactory.getEntity('/api/item/SearchItems?categoryIds=' + $stateParams.id + '&startindex=1&retrievesize=999999&includeMinimumQuantity=true');
                                }
                            ],
                            itemCategory: function ($stateParams) {
                                return $stateParams.id;
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Category'
                }
            })
            .state('base.catalog.item', {
                url: "item/:id",
                views: {
                    'content@base': {
                        templateUrl: '/app/modules/catalog/itemDetails/mainItemDetails.html',
                        controller: 'itemDetailsCtrl',
                        resolve: {
                            item: [
                                '$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                                    return baseFactory.fetch('/api/item/GetItemDetails?itemNumber=' + $stateParams.id).then(function (rrdata) {
                                        return rrdata.object;
                                    });
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/category/GetAllForTree');
                                }
                            ]
                        }
                    },
                    '@base.catalog.item': {
                        templateUrl: '/app/modules/catalog/itemDetails/itemDetails.html',
                    }
                },
                ncyBreadcrumb: {
                    label: 'Item'
                }
            })
            .state('base.catalog.item.singleItem', {
                url: "/?v",
                templateUrl: '/app/modules/catalog/itemDetails/itemDetailsWithGroup.html',
                controller: 'itemDetailsWithGroupCtrl',
                resolve: {
                    item: ['$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                        return baseFactory.fetch('/api/item/GetItemDetails?itemAlias=' + $stateParams.v).then(function (rrdata) {
                            return rrdata.object;
                        });
                    }]
                },
                ncyBreadcrumb: {
                    label: 'Single Item'
                }
            })
            .state('base.catalog.payment', {
                url: "payment",
                views: {
                    '@': {
                        templateUrl: "/app/modules/menu/menu-catalog.html",
                        controller: 'itemCategoriesCtrl'
                    },
                    'viewContent@catalog.payment': {
                        templateUrl: "/app/modules/catalog/confirmPayment/confirmPayment.html",
                        controller: 'confirmPaymentCtrl',
                        resolve: {

                        }
                    }
                }
            });
    }
})();
(function () {
    'use strict';
    catalogue.config(config);
    config.$inject = ['$stateProvider'];

    function config($stateProvider) {
        $stateProvider
            .state('base.checkout', {
                url: "/checkout",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/catalog/checkout/checkout.html",
                        controller: 'checkoutForm',
                        resolve: {
                            CatalogModule: ['$ocLazyLoad', function ($ocLazyLoad) {
                                return $ocLazyLoad.load('OcCatalogCtrl');
                            }],
                            orderCustomFields: [
                                '$route', 'baseFactory', function ($route, baseFactory) {
                                    return baseFactory.fetch('/api/customfields/getall?isOrder=True');
                                }
                            ],
                            itemCustomField: [
                                '$route', 'baseFactory', function ($route, baseFactory) {
                                    return baseFactory.fetch('/api/customfields/getall?isItem=True');
                                }
                            ],
                            printers: function (baseFactory) {
                                return baseFactory.fetch('/api/calendar/list').then(function (rrdata) {
                                    return rrdata;
                                });
                            },
                            items: [
                                'shoppingCartFactory', function (shoppingCartFactory) {
                                    return shoppingCartFactory.getShoppingCartWithConfiguration();
                                }
                            ],
                            customerContacts: [
                                'baseFactory', function (baseFactory) {
                                    return baseFactory.fetch('/api/Customer/GetAllContacts');
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Checkout'
                }
            })
            .state('base.checkout.payment', {
                url: "/payment/:orderId",
                params: { model: null },
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/catalog/checkout/ppi/payment.html",
                        controller: 'paymentCtrl',
                        params: { model: null },
                        resolve: {
                            orderModel: [
                                '$stateParams', 'baseFactory', function ($stateParams, baseFactory) {
                                    return baseFactory.fetch('/api/PpiOrder/GetOrderPaymentData/' + $stateParams.orderId).then(function (data) {
                                        return data.object;
                                    });
                                }
                            ],
                            receiptModel: [
                                'baseFactory', function (baseFactory) {
                                    return baseFactory.fetch('/api/Receipt/GetCreateReceiptModel').then(function (data) {
                                        return data.object;
                                    });
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Checkout Payment'
                }
            })
            .state('base.checkout.paymentConfirmed', {
                url: "/confirmed",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/catalog/checkout/paymentConfirmed.html",
                        controller: 'paymentConfirmedCtrl',
                        resolve: {
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Checkout Confirmation'
                }
            });
    }
})();
app.config(
    ['$stateProvider',
        function ($stateProvider) {
            $stateProvider//NEED THE HOME PAGE TO BE CALLED FROM HERE SO THAT THE LAYOUT WORKS CORRECTLY
                .state('base', {
                    url: "",
                    views: {
                        '@': {
                            template: '<div ui-view="content"></div>'
                        }
                    },
                    ncyBreadcrumb: {
                        label: 'Home'
                    }
                })
                .state('base.home', {
                    url: "/",
                    noLoginRequired: true,
                    views: {
                        'content@base': {
                            templateUrl: "/app/modules/home/home-ppi.html",
                            controller: 'HomePPICtrl',
                            resolve: {
                                dataContent: ['baseFactory', function (baseFactory) {
                                    return baseFactory.fetch('/api/item/homepage').then(function (rdata) {
                                        if (rdata.isErrored)
                                            return {
                                                specials: [],
                                            };
                                        return rdata.object;
                                    });
                                }]
                            }
                        }
                    },
                    ncyBreadcrumb: {
                        skip: true
                    }
                });
        }
    ]);
(function () {
    'use strict';
    app.config(config);
    config.$inject = ['$locationProvider'];
    function config($locationProvider) {
        $locationProvider.html5Mode(true);
        // $locationProvider.hashPrefix('');
    }
})();
orderModule.config(
['$stateProvider',
    function ($stateProvider) {
        $stateProvider
            .state('base.quotes', {
                url: "/quotes/",
                views: {
                    'content@base': {
                        templateUrl: function(stateParams) {
                            return "/app/modules/order/order.html";
                        },
                        controller: 'QuoteCtrl',
                        resolve: {
                            orderStatuses: ['resolveFactory', function(resolveFactory) {
                                return resolveFactory.getGridEntity('/api/orderstatus/getall');
                            }],
                            categories: ['$route', 'baseFactory', function($route, baseFactory) {
                                return baseFactory.fetch('/api/category/GetAll');
                            }],
                            printers: function (baseFactory) {
                                return baseFactory.fetch('/api/calendar/list').then(function (rrdata) {
                                    return rrdata.object || [];
                                });
                            },
                            orderTemplateUrl: function () {
                                return '/app/modules/order/orderTemplatePPI.html';
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Quotes'
                }
            })
            .state('base.orders', {
                url: "/orders/",
                views: {
                    'content@base': {
                        templateUrl: function(stateParams) {
                            return "/app/modules/order/order.html";
                        },
                        controller: 'orderCtrl',
                        resolve: {
                            CatalogModule: ['$ocLazyLoad', function ($ocLazyLoad) {
                                return $ocLazyLoad.load('OcCatalogCtrl');
                            }],
                            orderStatuses: ['resolveFactory', function (resolveFactory) {
                                return resolveFactory.getGridEntity('/api/orderstatus/getall/?exclude=13');
                            }],
                            categories: ['$route', 'baseFactory', function($route, baseFactory) {
                                return baseFactory.fetch('/api/category/GetAll');
                            }],
                            printers: function (baseFactory) {
                                return baseFactory.fetch('/api/calendar/list').then(function (rrdata) {
                                    return rrdata.object || [];
                                });
                            },
                            orderTemplateUrl: function () {
                                return '/app/modules/order/orderTemplatePPI.html';
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Orders'
                }
            })
            .state('base.orders.catalogedit', {
                url: "catalog/:id",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/catalog/checkout/checkout.html",
                        controller: 'editOrder',
                        resolve: {
                            orderData: [
                                'baseFactory', '$stateParams', function (baseFactory, $stateParams) {
                                    return baseFactory.fetch('/api/ppiorder/get/' + $stateParams.id);
                                }
                            ],
                            categories: [
                                '$route', 'resolveFactory', function ($route, resolveFactory) {
                                    return resolveFactory.getEntity('/api/category/GetAll');
                                }
                            ],
                            orderCustomFields: [
                                '$route', 'baseFactory', function ($route, baseFactory) {
                                    return baseFactory.fetch('/api/customfields/getall?isOrder=True');
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Edit Order'
                }
            })
            .state('base.orders.createppistandardorder', {
                url: "ppiorder/create",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/editOrderPpi/standardOrder.html",
                        controller: 'standardOrderPpiController',
                        resolve: {
                            order: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/order/GetCreateUpdateOrderModel');
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            isNew: [
                                function () {
                                    return true;
                                }
                            ],
                            customerContacts: ['baseFactory', function (baseFactory) {
                                return baseFactory.fetch('/api/Customer/GetAllContacts');
                            }]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Create Order'
                }
            })
            .state('base.orders.editeppistandardorder', {
                url: "ppiorder/:id",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/editOrderPpi/standardOrder.html",
                        controller: 'standardOrderPpiController',
                        resolve: {
                            order: [
                                'baseFactory', '$stateParams', function (baseFactory, $stateParams) {
                                    return baseFactory.fetch('/api/ppiorder/get/' + $stateParams.id).then(function (result) {
                                        return result.object;
                                    });
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            isNew: [
                                function () {
                                    return false;
                                }
                            ],
                            customerContacts: ['baseFactory', function (baseFactory) {
                                return [];
                            }]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Edit Order'
                }
            })
            .state('base.standardorders', {
                url: "/orders/base/",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/standard/order.html",
                        controller: 'standardOrderController',
                        resolve: {
                            orders: function (resolveFactory) {
                                return resolveFactory.getGridEntity('/api/order/SearchOrders');
                            },
                            orderStatuses: function (resolveFactory) {
                                return resolveFactory.getGridEntity('/api/orderstatus/getall');
                            },
                            categories: [
                                '$route', 'baseFactory', function ($route, baseFactory) {
                                    return baseFactory.fetch('/api/category/GetAll');
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Orders'
                }
            })
            .state('base.standardorders.create', {
                url: "create/",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/standard/createOrder.html",
                        controller: 'baseCreateOrderController',
                        resolve: {
                            //customerId: ['$stateParams', function ($stateParams) {
                            //    return $stateParams.customerId;
                            //}],
                            order: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/order/GetCreateUpdateOrderModel');
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            isNew: [
                                function () {
                                    return true;
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Create Order'
                }
            })
            .state('base.standardorders.edit', {
                url: "edit/:id",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/standard/createOrder.html",
                        controller: 'baseCreateOrderController',
                        resolve: {
                            //customerId: ['$stateParams', function ($stateParams) {
                            //    return $stateParams.customerId;
                            //}],
                            order: [
                                'resolveFactory', '$stateParams', function (resolveFactory, $stateParams) {
                                    return resolveFactory.getEntity('/api/order/GetCreateUpdateOrderModel?id=' + $stateParams.id);
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            isNew: [
                                function () {
                                    return false;
                                }
                            ]
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Edit Order'
                }
            })
            .state('base.orders.create', {
                url: "create",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/createOrderOrig.html",
                        controller: 'createOrder',
                        resolve: {
                            //customerId: ['$stateParams', function ($stateParams) {
                            //    return $stateParams.customerId;
                            //}],
                            order: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/order/GetCreateUpdateOrderModel');
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            detailsMode: function () {
                                return false;
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Create Order'
                }
            })
            .state('base.orders.create2', {
                url: "create2",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/order/createOrder.html",
                        controller: 'createOrder',
                        resolve: {
                            //customerId: ['$stateParams', function ($stateParams) {
                            //    return $stateParams.customerId;
                            //}],
                            order: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/order/GetCreateUpdateOrderModel');
                                }
                            ],
                            categories: [
                                'resolveFactory', function (resolveFactory) {
                                    return resolveFactory.getEntity('/api/item/getCategories');
                                }
                            ],
                            detailsMode: function () {
                                return false;
                            }
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Create Order'
                }
            });
    }
]);
(function () {
    'use strict';
    homeModule.config(config);
    config.$inject = ['$stateProvider'];

    function config($stateProvider) {
        $stateProvider
            .state('base.home.uxreports.stockOnHandReport', {
                url: "/stockonhandreport",
                views: {
                    'dashboardReportView': {
                        templateUrl: "/app/modules/reports/dashboards/views/stockonhandeport.html",
                        controller: 'StockOnHandReportCtrl',
                        resolve: {
                            categories: ["$rootScope", "$stateParams", "baseFactory", function ($rootScope, $stateParams, baseFactory) {
                                return baseFactory.fetch('/api/reportApi/getCategories').then(function (rrdata) {
                                    return rrdata.object || [];
                                });
                            }],
                            locations: ["$rootScope", "$stateParams", "baseFactory", function ($rootScope, $stateParams, baseFactory) {
                                return baseFactory.fetch('/api/reportApi/getLocations').then(function (rrdata) {
                                    return rrdata.object || [];
                                });
                            }]
                        },
                        data: {
                            authorizedRoles: []
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Report',
                    skip: true
                }
            });
    }
})();
(function () {
    'use strict';
    app.config(config);
    config.$inject = ['$stateProvider', '$provide', '$urlRouterProvider'];

    function config($stateProvider, $provide, $urlRouterProvider) {
        $stateProvider
            .state('anonymous.shop', {
                url: "/shop?q",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                resolve: {
                    CatalogModule: ['$ocLazyLoad', function ($ocLazyLoad) {
                        return $ocLazyLoad.load('OcCatalogCtrl');
                    }],
                    InViewModule: ['$ocLazyLoad', function ($ocLazyLoad) {
                        return $ocLazyLoad.load('ng-inview');
                    }],
                    categories: ['$route', 'resolveFactory', function ($route, resolveFactory) {
                        return resolveFactory.getEntity('/api/category/GetAll');
                    }],
                    customFields: ['baseFactory', function (baseFactory) {
                        return baseFactory.fetch('/api/CustomFields/GetAll?isItem=true&isVisibleOnWeb=true').then(function (rdata) {
                            if (rdata.isErrored)
                                return [];
                            return rdata.object;
                        });
                    }],
                    stockStatuses: ['resolveFactory', function (resolveFactory) {
                        return resolveFactory.getEntity('/api/ItemStatus/getAll');
                    }],
                    itemBrands: ['resolveFactory', function (resolveFactory) {
                        return resolveFactory.getEntity('/api/item/getAllBrands');
                    }]
                },
                ncyBreadcrumb: {
                    label: 'Products'
                }
            })
            .state('anonymous.shop.category', {
                url: "/category/:c",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: '{{parentCategory ? parentCategory.name : category.name}}'
                }
            })
            .state('anonymous.shop.category.sub', {
                url: "/:sc",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: '{{category.name}}'
                }
            })
            .state('anonymous.shop.filter', {
                url: "/filter/:f/:v",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: '{{pageCategory}}'
                }
            })
            .state('anonymous.shop.status', {
                url: "/status/:s",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: '{{pageCategory}}'
                }
            })
            .state('anonymous.shop.brand', {
                url: "/brand/:b",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/searchPage/search.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/searchPage/searchAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }],
                        controller: 'searchCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: '{{pageCategory}}'
                }
            })
            .state('anonymous.shop.item', {
                url: "/item/:id",
                noLoginRequired: true,
                views: {
                    'content@anonymous': {
                        templateUrl: '/app/modules/catalog/itemDetails/mainItemDetails.html',
                        controller: 'itemDetailsCtrl',
                        resolve: {
                            item: [
                                '$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                                    return baseFactory.fetch('/api/item/GetItemDetails?itemAlias=' + $stateParams.id).then(function (rrdata) {
                                        return rrdata.object;
                                    });
                                }
                            ]
                        }
                    },
                    '@anonymous.shop.item': {
                        templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                            function ($stateParams, $templateRequest, $rootScope) {
                                var templateUrl = '';
                                if ($rootScope.user) {
                                    templateUrl = '/app/modules/catalog/itemDetails/itemDetails.html';
                                } else {
                                    templateUrl = '/app/modules/catalog/itemDetails/itemDetailsAnonymous.html';
                                }
                                return $templateRequest(templateUrl);
                            }]
                    }
                },
                resolve: {
                    categories: ['resolveFactory', function (resolveFactory) {
                        return resolveFactory.getEntity('/api/category/GetAllForTree');
                    }]
                },
                ncyBreadcrumb: {
                    label: '{{parentProduct ? parentProduct.itemName : currentProduct.itemName}}'
                }
            })
            .state('anonymous.shop.item.singleItem', {
                url: "/?v",
                templateProvider: ['$stateParams', '$templateRequest', '$rootScope',
                    function ($stateParams, $templateRequest, $rootScope) {
                        var templateUrl = '';
                        if ($rootScope.user) {
                            templateUrl = '/app/modules/catalog/itemDetails/itemDetailsWithGroup.html';
                        } else {
                            templateUrl = '/app/modules/catalog/itemDetails/itemDetailsAnonymousWithGroup.html';
                        }
                        return $templateRequest(templateUrl);
                    }],
                controller: ['$scope', '$controller', 'item', 'categories', function ($scope, $controller, item, categories) {
                    item.parentItem = angular.copy($scope.$parent.item);
                    angular.extend(this, $controller('itemDetailsCtrl', { $scope: $scope, item: item, categories: categories }));
                }],
                resolve: {
                    item: ['$rootScope', '$stateParams', 'baseFactory', function ($rootScope, $stateParams, baseFactory) {
                        return baseFactory.fetch('/api/item/getItemDetails?itemAlias=' + $stateParams.v).then(function (rrdata) {
                            return rrdata.object;
                        });
                    }]
                },
                ncyBreadcrumb: {
                    label: '{{item.itemName}}'
                }
            })
            .state('anonymous.shop.payment', {
                url: "payment",
                views: {
                    '@': {
                        templateUrl: "/app/modules/menu/menu-catalog.html",
                        controller: 'itemCategoriesCtrl'
                    },
                    'viewContent@shop.payment': {
                        templateUrl: "/app/modules/catalog/confirmPayment/confirmPayment.html",
                        controller: 'confirmPaymentCtrl',
                        resolve: {
                        }
                    }
                },
                ncyBreadcrumb: {
                    label: 'Payment'
                }
            });
    }
})();
homeModule.config(
['$stateProvider',
    function ($stateProvider) {
        $stateProvider
            .state('base.users.unsubscribeList', {
                url: "unsubscribelist",
                views: {
                    'content@base': {
                        templateUrl: "/app/modules/admin/user/unsubscribe/index.html",
                        controller: 'UserUnsubscribedCtrl'
                    }
                },
                ncyBreadcrumb: {
                    label: 'Unsubscribed List'
                }
            });
    }
]);
