private static Customer GetCurrentCustomer()
        {
            Customer customer = null;

            if (HttpContext.Current != null)
            {
                var cachedCustomer = HttpContext.Current.Items[CustomerContextKey] as Customer;
                if (cachedCustomer != null)
                {
                    return(cachedCustomer);
                }

                if (IsDebug)
                {
                    customer = new Customer
                    {
                        CustomerRole = Role.Administrator,
                        IsVirtual    = true
                    };
                }

                //registered user
                if (customer == null)
                {
                    customer = AuthorizeService.GetAuthenticatedCustomer();
                }

                //load guest customer
                if (customer == null)
                {
                    var customerCookie = CommonHelper.GetCookie(CustomerCookieName);
                    if (customerCookie != null && !String.IsNullOrEmpty(customerCookie.Value))
                    {
                        Guid customerGuid;
                        if (Guid.TryParse(customerCookie.Value, out customerGuid) &&
                            !CustomerService.ExistsCustomer(customerGuid))
                        {
                            customer = new Customer {
                                Id = customerGuid, CustomerRole = Role.Guest
                            };
                        }
                    }
                }

                //create guest if not exists
                if (customer == null)
                {
                    var customerId = Guid.NewGuid();
                    while (CustomerService.ExistsCustomer(customerId))
                    {
                        customerId = Guid.NewGuid();
                    }

                    customer = new Customer {
                        Id = customerId, CustomerRole = Role.Guest
                    };
                    SetCustomerCookie(customer.Id);
                }

                HttpContext.Current.Items[CustomerContextKey] = customer;
            }
            return(customer);
        }