/*
-----------------------------------------------------------------------------
This source file is part of OpenSpace3D
For the latest info, see http://www.openspace3d.com

Copyright (c) 2011 I-maginer

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA, or go to
http://www.gnu.org/copyleft/lesser.txt
-----------------------------------------------------------------------------
*/

#ifndef _SCOL_EMBEDDED_WEB_NAVIGATOR_PREREQUISITES_
#define _SCOL_EMBEDDED_WEB_NAVIGATOR_PREREQUISITES_

// Includes
#include <stdio.h>
#include <cassert>
#include <cef.h>
#include <cef_runnable.h>
#include <scolPlugin.h>
#include <scolTypeConversion.h>
#if SCOL_PLATFORM == SCOL_PLATFORM_WINDOWS
# include <OS_specific/windows/objstr.h>
#endif
#include <set>
#include <sstream>
#include <algorithm>

// Classes pre-declaration
namespace Scol
{
  namespace EmbeddedWebNavigator
  {
    class PopupInformations;
    class ScolExternalCallHandler;
    class WebNavigator;
    class WebNavigatorClient;
    class WebNavigatorCriticalSection;
    class WebNavigatorDisplayHandler;
    class WebNavigatorDragHandler;
    class WebNavigatorFindHandler;
    class WebNavigatorFocusHandler;
    class WebNavigatorHandler;
    class WebNavigatorJSDialogHandler;
    class WebNavigatorJSFunction;
    class WebNavigatorKeyboardHandler;
    class WebNavigatorLoadHandler;
    class WebNavigatorLifeSpanHandler;
    class WebNavigatorManager;
    class WebNavigatorMenuHandler;
    class WebNavigatorPrintHandler;
    class WebNavigatorRenderHandler;
    class WebNavigatorRequestHandler;
    class WebNavigatorThread;
    class WebNavigatorV8ContextHandler;
  }
}

// Multithread synchronisation maximum waiting time
#define WEB_NAVIGATOR_SYNCHRO_DEFAULT_WAITING_TIME 1000

// Windows messages variables definitions for asynchronous reflexives calls, declared in scolEmbeddedWebNavigator.cpp
extern int WEB_NAVIGATOR_LIFESPAN_ON_POPUP_WINMSG;
extern int WEB_NAVIGATOR_LIFESPAN_RUN_MODAL_WINMSG;
extern int WEB_NAVIGATOR_LIFESPAN_ON_BEFORE_CLOSE_WINMSG;
extern int WEB_NAVIGATOR_LOAD_ON_START_WINMSG;
extern int WEB_NAVIGATOR_LOAD_ON_END_WINMSG;
extern int WEB_NAVIGATOR_LOAD_ON_ERROR_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_NAV_STATE_CHANGE_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_ADDRESS_CHANGE_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_TITLE_CHANGE_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_TOOLTIP_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_STATUS_MESSAGE_WINMSG;
extern int WEB_NAVIGATOR_DISPLAY_ON_CONSOLE_MESSAGE_WINMSG;
extern int WEB_NAVIGATOR_FIND_ON_RESULT_WINMSG;
extern int WEB_NAVIGATOR_JS_ON_EXTERNAL_CALL_WINMSG;
extern int WEB_NAVIGATOR_JS_ON_EXTERNAL_STR_CALL_WINMSG;

#endif
