         }
         return true
     }
+    
+    private func isNamePickerValid(stringsForComponents:[[String]], selectedStringsForComponents:[String] = []) -> Bool {
+        
+        if stringsForComponents.count != selectedStringsForComponents.count && !selectedStringsForComponents.isEmpty {
+            print("-- Failed to show name picker because stringsForComponents.count doesn't match to selectedStringsForComponents.count")
+            return false
+        }
+        
+        for stringsForComponent in stringsForComponents {
+            if stringsForComponent.isEmpty {
+                print("-- Failed to show name picker because each string array in stringsForComponents must have at least one item")
+                return false
+            }
+        }
+        return true
+    }
 }

        self.indicator        = indicator
    }
    
    public func showStatusAlert(withStatus status: AlertStatus, title: String, message: String, viewController: UIViewController, completion: (() -> Void)?) {
        
        var statusOptions: WizardStatus!

        viewController.present(vc, animated: true, completion: nil)
    }
    
    public func showImageActionAlert(withImage image: UIImage, message: String, viewController: UIViewController, completion: (() -> Void)?) {
        var imageActionAlert = self.imageActionAlert
        imageActionAlert.image = image
        imageActionAlert.contentLabel.text  = message
        
        let vc = UIStoryboard(name: "Wizard", bundle: kWizardBundle).instantiateViewController(withIdentifier: "ImageActionAlertViewController") as! ImageActionAlertViewController
        
        vc.imageActionAlert = imageActionAlert
        vc.modalPresentationStyle = .overCurrentContext
        vc.modalTransitionStyle   = .crossDissolve
        
        vc.didCancel = {
            viewController.dismiss(animated: true, completion: nil)
        }
        
        vc.didConfirmAction = {
            viewController.dismiss(animated: true, completion: nil)
            if completion != nil {
                completion!()
            }
        }
        viewController.present(vc, animated: true, completion: nil)
    }
    
    public func showImageActionAlert(message: String, action: AlertAction, viewController: UIViewController, completion: (() -> Void)?) {
        var imageActionAlert = self.imageActionAlert
        imageActionAlert.contentLabel.text = message
        
        switch action {
        case .save:
            imageActionAlert.image                        = UIImage(named: "save", in: kWizardBundle, compatibleWith: nil)!
            imageActionAlert.actionButton.backgroundColor = UIColor.WizardGreenColor()
            imageActionAlert.actionButton.text            = "Save"
        case .add:
            imageActionAlert.image                        = UIImage(named: "add", in: kWizardBundle, compatibleWith: nil)!
            imageActionAlert.actionButton.backgroundColor = UIColor.WizardGreenColor()
            imageActionAlert.actionButton.text            = "Add"
        case .download:
            imageActionAlert.image                        = UIImage(named: "download", in: kWizardBundle, compatibleWith: nil)!
            imageActionAlert.actionButton.backgroundColor = UIColor.WizardBlueColor()
            imageActionAlert.actionButton.text            = "Download"
        case .overwrite:
            imageActionAlert.image                        = UIImage(named: "overwrite", in: kWizardBundle, compatibleWith: nil)!
            imageActionAlert.actionButton.backgroundColor = UIColor.WizardRedColor()
            imageActionAlert.actionButton.text            = "Overwrite"
        case .delete:
            imageActionAlert.image                        = UIImage(named: "delete", in: kWizardBundle, compatibleWith: nil)!
            imageActionAlert.actionButton.backgroundColor = UIColor.WizardRedColor()
            imageActionAlert.actionButton.text            = "Delete"
        }
        
        let vc = UIStoryboard(name: "Wizard", bundle: kWizardBundle).instantiateViewController(withIdentifier: "ImageActionAlertViewController") as! ImageActionAlertViewController
        
        vc.imageActionAlert = imageActionAlert
        vc.modalPresentationStyle = .overCurrentContext
        vc.modalTransitionStyle   = .crossDissolve
        
        vc.didCancel = {
            viewController.dismiss(animated: true, completion: nil)
        }
        
        vc.didConfirmAction = {
            viewController.dismiss(animated: true, completion: nil)
            if completion != nil {
                completion!()
            }
        }
        viewController.present(vc, animated: true, completion: nil)
    }
    
    public class func showTextFieldAlert(alert: WizardTextFieldAlert, title: String, placeholder: String, viewController: UIViewController, completion: @escaping ((String)-> Void)) {
        var textFieldAlert = alert
        textFieldAlert.titleLabel.text = title
        textFieldAlert.textField.placeholder = placeholder
        
        let vc = UIStoryboard(name: "Wizard", bundle: kWizardBundle).instantiateViewController(withIdentifier: "TextFieldAlertViewController") as! TextFieldAlertViewController
        vc.textFieldAlert = textFieldAlert
        vc.modalPresentationStyle = .overCurrentContext
        vc.modalTransitionStyle   = .crossDissolve
        
        vc.didCancel = {
            viewController.dismiss(animated: true, completion: nil)
        }
        
        vc.didConfirm = { text in
            viewController.dismiss(animated: true, completion: nil)
            completion(text)
        }
        viewController.present(vc, animated: true, completion: nil)
    }
    
    public func showTextFieldAlert(title: String, placeholder: String, viewController: UIViewController, completion: @escaping ((String)-> Void)) {
        var textFieldAlert = self.textFieldAlert
        textFieldAlert.titleLabel.text = title
