CGUIDialogBoxeeWizardBase* CBoxeeOTAConfigurationManager::HandleNextAction(CGUIDialogBoxeeWizardBase* pDialog, bool& addCurrentDlgToStack)
{
  if (!pDialog)
  {
    CLog::Log(LOGERROR,"CBoxeeOTAConfigurationManager::HandleNextAction - Enter function with a NULL pointer (digwiz)");
    return NULL;
  }

  int id = pDialog->GetID();

  CLog::Log(LOGDEBUG,"CBoxeeOTAConfigurationManager::HandleNextAction - Enter function with [id=%d] (digwiz)",id);

  CGUIDialogBoxeeWizardBase* pNextDialog = NULL;

  switch(id)
  {
  case WINDOW_OTA_WELCOME_CONFIGURATION:
  {
    m_data.ClearData();
    m_data.DetectLocation();

    // If we know the country, ask the user to confirm, otherwise let the user select the location
    BOXEE::BXCurrentLocation& location = BOXEE::BXCurrentLocation::GetInstance();
    if (location.IsLocationDetected())
      pNextDialog = (CGUIDialogBoxeeOTAConfirmLocation*)g_windowManager.GetWindow(WINDOW_OTA_LOCATION_CONFIRMATION);
    else
      pNextDialog = (CGUIDialogBoxeeOTACountriesLocationConfiguration*)g_windowManager.GetWindow(WINDOW_OTA_COUNTRIES_CONFIGURATION);

    if (pNextDialog)
      addCurrentDlgToStack = true;
  }
  break;

  case WINDOW_OTA_LOCATION_CONFIRMATION:
  {
    CGUIDialogBoxeeOTAConfirmLocation* pLocationDialog = (CGUIDialogBoxeeOTAConfirmLocation*)g_windowManager.GetWindow(WINDOW_OTA_LOCATION_CONFIRMATION);
    if (!pLocationDialog)
      break;

    if (pLocationDialog->GetYesButtonPressed() && m_data.IsInNorthAmerica())
      pNextDialog = (CGUIDialogBoxeeOTAZipcodeLocationConfiguration*)g_windowManager.GetWindow(WINDOW_OTA_ZIPCODE_CONFIGURATION);
    else if (pLocationDialog->GetYesButtonPressed() && !m_data.IsInNorthAmerica() && !m_isConnectedToFacebook)
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_OTA_FACEBOOK_CONNECT);
    else if (pLocationDialog->GetYesButtonPressed() && !m_data.IsInNorthAmerica() && m_isConnectedToFacebook)
      SetWizardComplete(true);
    else
      pNextDialog = (CGUIDialogBoxeeOTACountriesLocationConfiguration*)g_windowManager.GetWindow(WINDOW_OTA_COUNTRIES_CONFIGURATION);

    if (pNextDialog)
      addCurrentDlgToStack = true;
  }
  break;

  case WINDOW_OTA_COUNTRIES_CONFIGURATION:
  {
    if (m_data.IsInNorthAmerica())
      pNextDialog = (CGUIDialogBoxeeOTAZipcodeLocationConfiguration*)g_windowManager.GetWindow(WINDOW_OTA_ZIPCODE_CONFIGURATION);
    else if (!m_isConnectedToFacebook)
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_OTA_FACEBOOK_CONNECT);
    else
      SetWizardComplete(true);

    if (pNextDialog)
      addCurrentDlgToStack = true;
  }
  break;

  case WINDOW_OTA_ZIPCODE_CONFIGURATION:
  {
    pNextDialog = (CGUIDialogBoxeeOTAConnectionConfiguration*)g_windowManager.GetWindow(WINDOW_OTA_CONNECTION_CONFIGURATION);
    if (pNextDialog)
    {
      addCurrentDlgToStack = true;
    }
  }
  break;

  case WINDOW_OTA_CONNECTION_CONFIGURATION:
  {
    if (!m_isConnectedToFacebook)
       pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_OTA_FACEBOOK_CONNECT);
    else
       SetWizardComplete(true);

    if (pNextDialog)
    {
      addCurrentDlgToStack = true;
    }
  }
  break;

  case WINDOW_OTA_FACEBOOK_CONNECT:
  {
    SetWizardComplete(true);
  }
  break;

  default:
  {
    CLog::Log(LOGERROR,"CBoxeeOTAConfigurationManager::HandleNextAction - FAILED to handle WindowId [%d] (digwiz)",id);
  }
  break;
  }

  if (addCurrentDlgToStack)
  {
    AddToStack(id);
  }
  else
  {
    CLog::Log(LOGDEBUG,"CBoxeeOTAConfigurationManager::HandleNextAction - Not adding [id=%d] to stack. [addCurrentDlgToStack=%d][DialogStackSize=%d] (digwiz)",id,addCurrentDlgToStack,GetStackSize());
  }

  CLog::Log(LOGDEBUG,"CBoxeeOTAConfigurationManager::HandleNextAction - Exit function and return [NextDialog=%p] for [id=%d] (digwiz)",pNextDialog,id);

  return pNextDialog;
}
CGUIDialogBoxeeWizardBase* CBoxeeLoginWizardManager::HandleNextAction(CGUIDialogBoxeeWizardBase* pDialog, bool& addCurrentDlgToStack)
{
  if (!pDialog)
  {
    CLog::Log(LOGERROR,"CBoxeeLoginWizardManager::HandleNextAction - Enter function with a NULL pointer (blw)(digwiz)");
    return NULL;
  }

  int id = pDialog->GetID();

  CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - Enter function with [id=%d] (blw)(digwiz)",id);

  CGUIDialogBoxeeWizardBase* pNextDialog = NULL;

  switch(id)
  {
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CHOOSE_USER_TO_ADD:
  {
    CGUIDialogBoxeeLoginWizardChooseUserToAddType* pAddUserDlg = (CGUIDialogBoxeeLoginWizardChooseUserToAddType*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CHOOSE_USER_TO_ADD);
    if (!pAddUserDlg)
    {
      CLog::Log(LOGERROR,"CBoxeeLoginWizardManager::HandleNextAction - FAILED to get DialogBoxeeLoginWizardAddUser (blw)(digwiz)");
      break;
    }

    if (pAddUserDlg->IsAddingNewUser())
    {
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_ADD_NEW_USER);
      CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - IsAddingNewUser returned TRUE (blw)(digwiz)");
    }
    else
    {
      CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - IsAddingNewUser returned FALSE. Set next dialog to ADD_EXISTING_USER (blw)(digwiz)");
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_ADD_EXISTING_USER);
    }

    IsAddingDialogToStack(pNextDialog,addCurrentDlgToStack);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_ADD_EXISTING_USER:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_MENU_CUST);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_ADD_NEW_USER:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_NEW_USER_DETAILS);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_NEW_USER_DETAILS:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_TOU);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_TOU:
  {
#ifdef HAS_EMBEDDED
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CONNECT_SOCIAL_SERVICES);
#else
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_MENU_CUST);
#endif
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CONNECT_SOCIAL_SERVICES:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_MENU_CUST);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_MENU_CUST:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CONFIRMATION);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_CONFIRMATION:
  {
#ifdef HAS_EMBEDDED
    if (strcmpi(BoxeeUtils::GetPlatformStr(),"dlink.dsm380") == 0)
    {
      CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - [platform=%s] -> show RemoteQuickTip (blw)(digwiz)",BoxeeUtils::GetPlatformStr());
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP);
    }
    else
    {
      pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP_AIRPLAY);
    }
#else
    //pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP_AIRPLAY);
    SetWizardComplete(true);
#endif
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP:
  {
    pNextDialog = (CGUIDialogBoxeeWizardBase*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP_AIRPLAY);
  }
  break;
  case WINDOW_DIALOG_BOXEE_LOGIN_WIZARD_QUICK_TIP_AIRPLAY:
  {
    SetWizardComplete(true);
  }
  break;
  default:
  {
    CLog::Log(LOGERROR,"CBoxeeLoginWizardManager::HandleNextAction - FAILED to handle WindowId [%d] (blw)(digwiz)",id);
  }
  break;
  }

  if (addCurrentDlgToStack)
  {
    AddToStack(id);
  }
  else
  {
    CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - Not adding [id=%d] to stack. [addCurrentDlgToStack=%d][DialogStackSize=%d] (blw)(digwiz)",id,addCurrentDlgToStack,GetStackSize());
  }

  CLog::Log(LOGDEBUG,"CBoxeeLoginWizardManager::HandleNextAction - Exit function and return [NextDialog=%p] for [id=%d] (blw)(digwiz)",pNextDialog,id);

  return pNextDialog;
}