Browse Source

Moved raylib webpage to docs folder

raylib webpage has been completely reorganized and moved from gh-pages
(a pain to work with) to docs folder. Useless libs have been removed,
webs have been renamed, etc.

Now it would be easier (hopefully) to update webpage. :)
Ray San 8 years ago
parent
commit
1f6eb1fc61
100 changed files with 4632 additions and 0 deletions
  1. 156 0
      docs/404.html
  2. 1 0
      docs/CNAME
  3. 173 0
      docs/cheatsheet/cheatsheet.html
  4. 55 0
      docs/cheatsheet/raylib_audio.c
  5. 30 0
      docs/cheatsheet/raylib_colors.c
  6. 118 0
      docs/cheatsheet/raylib_core.c
  7. 82 0
      docs/cheatsheet/raylib_defines.c
  8. 58 0
      docs/cheatsheet/raylib_models.c
  9. 34 0
      docs/cheatsheet/raylib_shaders.c
  10. 30 0
      docs/cheatsheet/raylib_shapes.c
  11. 28 0
      docs/cheatsheet/raylib_structs.c
  12. 19 0
      docs/cheatsheet/raylib_text.c
  13. 53 0
      docs/cheatsheet/raylib_textures.c
  14. 66 0
      docs/common/css/examples.css
  15. 35 0
      docs/common/css/games.css
  16. 109 0
      docs/common/css/main.css
  17. BIN
      docs/common/font/acme_7_wide_xtnd.eot
  18. BIN
      docs/common/font/acme_7_wide_xtnd.ttf
  19. BIN
      docs/common/font/acme_7_wide_xtnd.woff
  20. BIN
      docs/common/img/fb_raylib_logo.png
  21. BIN
      docs/common/img/icon_facebook.png
  22. BIN
      docs/common/img/icon_freenode_irc.png
  23. BIN
      docs/common/img/icon_github.png
  24. BIN
      docs/common/img/icon_itchio.png
  25. BIN
      docs/common/img/icon_patreon.png
  26. BIN
      docs/common/img/icon_reddit.png
  27. BIN
      docs/common/img/icon_twitch.png
  28. BIN
      docs/common/img/icon_twitter.png
  29. BIN
      docs/common/img/ln_raylib_logo.png
  30. BIN
      docs/common/img/raylib_logo.png
  31. BIN
      docs/common/img/raylib_logo_64x64.png
  32. 144 0
      docs/common/js/examples.js
  33. 109 0
      docs/common/js/games.js
  34. BIN
      docs/common/libs/fancybox/blank.gif
  35. BIN
      docs/common/libs/fancybox/fancybox_loading.gif
  36. BIN
      docs/common/libs/fancybox/[email protected]
  37. BIN
      docs/common/libs/fancybox/fancybox_overlay.png
  38. BIN
      docs/common/libs/fancybox/fancybox_sprite.png
  39. BIN
      docs/common/libs/fancybox/[email protected]
  40. BIN
      docs/common/libs/fancybox/helpers/fancybox_buttons.png
  41. 97 0
      docs/common/libs/fancybox/helpers/jquery.fancybox-buttons.css
  42. 122 0
      docs/common/libs/fancybox/helpers/jquery.fancybox-buttons.js
  43. 199 0
      docs/common/libs/fancybox/helpers/jquery.fancybox-media.js
  44. 55 0
      docs/common/libs/fancybox/helpers/jquery.fancybox-thumbs.css
  45. 162 0
      docs/common/libs/fancybox/helpers/jquery.fancybox-thumbs.js
  46. 284 0
      docs/common/libs/fancybox/jquery.fancybox.css
  47. 2020 0
      docs/common/libs/fancybox/jquery.fancybox.js
  48. 46 0
      docs/common/libs/fancybox/jquery.fancybox.pack.js
  49. 205 0
      docs/common/libs/jquery.easing.1.3.js
  50. 7 0
      docs/common/libs/jquery.mousewheel.min.js
  51. BIN
      docs/common/src/libraylib.a
  52. 135 0
      docs/examples.html
  53. BIN
      docs/examples/img/audio_module_playing.png
  54. BIN
      docs/examples/img/audio_music_stream.png
  55. BIN
      docs/examples/img/audio_raw_stream.png
  56. BIN
      docs/examples/img/audio_sound_loading.png
  57. BIN
      docs/examples/img/core_2d_camera.png
  58. BIN
      docs/examples/img/core_3d_camera_first_person.png
  59. BIN
      docs/examples/img/core_3d_camera_free.png
  60. BIN
      docs/examples/img/core_3d_mode.png
  61. BIN
      docs/examples/img/core_3d_picking.png
  62. BIN
      docs/examples/img/core_basic_window.png
  63. BIN
      docs/examples/img/core_color_select.png
  64. BIN
      docs/examples/img/core_drop_files.png
  65. BIN
      docs/examples/img/core_gestures_detection.png
  66. BIN
      docs/examples/img/core_input_gamepad.png
  67. BIN
      docs/examples/img/core_input_keys.png
  68. BIN
      docs/examples/img/core_input_mouse.png
  69. BIN
      docs/examples/img/core_mouse_wheel.png
  70. BIN
      docs/examples/img/core_oculus_rift.png
  71. BIN
      docs/examples/img/core_random_values.png
  72. BIN
      docs/examples/img/core_storage_values.png
  73. BIN
      docs/examples/img/core_world_screen.png
  74. BIN
      docs/examples/img/models_billboard.png
  75. BIN
      docs/examples/img/models_box_collisions.png
  76. BIN
      docs/examples/img/models_cubicmap.png
  77. BIN
      docs/examples/img/models_geometric_shapes.png
  78. BIN
      docs/examples/img/models_heightmap.png
  79. BIN
      docs/examples/img/models_obj_loading.png
  80. BIN
      docs/examples/img/physics_demo.png
  81. BIN
      docs/examples/img/physics_friction.png
  82. BIN
      docs/examples/img/physics_movement.png
  83. BIN
      docs/examples/img/physics_restitution.png
  84. BIN
      docs/examples/img/physics_shatter.png
  85. BIN
      docs/examples/img/shaders_custom_uniform.png
  86. BIN
      docs/examples/img/shaders_model_shader.png
  87. BIN
      docs/examples/img/shaders_postprocessing.png
  88. BIN
      docs/examples/img/shaders_shapes_textures.png
  89. BIN
      docs/examples/img/shaders_standard_lighting.png
  90. BIN
      docs/examples/img/shapes_basic_shapes.png
  91. BIN
      docs/examples/img/shapes_colors_palette.png
  92. BIN
      docs/examples/img/shapes_logo_raylib.png
  93. BIN
      docs/examples/img/shapes_logo_raylib_anim.png
  94. BIN
      docs/examples/img/text_bmfont_ttf.png
  95. BIN
      docs/examples/img/text_bmfont_unordered.png
  96. BIN
      docs/examples/img/text_font_select.png
  97. BIN
      docs/examples/img/text_format_text.png
  98. BIN
      docs/examples/img/text_rbmf_fonts.png
  99. BIN
      docs/examples/img/text_sprite_fonts.png
  100. BIN
      docs/examples/img/text_ttf_loading.png

+ 156 - 0
docs/404.html

@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <title>page not found... :(</title>
+        <style>
+            ::-moz-selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+
+            ::selection {
+                background: #b3d4fc;
+                text-shadow: none;
+            }
+
+            html {
+                padding: 30px 10px;
+                font-size: 20px;
+                line-height: 1.4;
+                color: #737373;
+                background: #f0f0f0;
+                -webkit-text-size-adjust: 100%;
+                -ms-text-size-adjust: 100%;
+            }
+
+            html,
+            input {
+                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+            }
+
+            body {
+                max-width: 500px;
+                _width: 500px;
+                padding: 30px 20px 50px;
+                border: 1px solid #b3b3b3;
+                margin: 0 auto;
+                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
+                background: #fcfcfc;
+            }
+
+            h1 {
+                margin: 0 10px;
+                font-size: 50px;
+                text-align: center;
+            }
+
+            h1 span {
+                color: #bbb;
+            }
+
+            h3 {
+                margin: 1.5em 0 0.5em;
+            }
+
+            p {
+                margin: 1em 0;
+            }
+
+            ul {
+                padding: 0 0 0 40px;
+                margin: 1em 0;
+            }
+
+            .container {
+                max-width: 380px;
+                _width: 380px;
+                margin: 0 auto;
+            }
+
+            /* google search */
+
+            #goog-fixurl ul {
+                list-style: none;
+                padding: 0;
+                margin: 0;
+            }
+
+            #goog-fixurl form {
+                margin: 0;
+            }
+
+            #goog-wm-qt,
+            #goog-wm-sb {
+                border: 1px solid #bbb;
+                font-size: 16px;
+                line-height: normal;
+                vertical-align: top;
+                color: #444;
+                border-radius: 2px;
+            }
+
+            #goog-wm-qt {
+                width: 220px;
+                height: 20px;
+                padding: 5px;
+                margin: 5px 10px 0 0;
+                box-shadow: inset 0 1px 1px #ccc;
+            }
+
+            #goog-wm-sb {
+                display: inline-block;
+                height: 32px;
+                padding: 0 10px;
+                margin: 5px 0 0;
+                white-space: nowrap;
+                cursor: pointer;
+                background-color: #f5f5f5;
+                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
+                -webkit-appearance: none;
+                -moz-appearance: none;
+                appearance: none;
+                *overflow: visible;
+                *display: inline;
+                *zoom: 1;
+            }
+
+            #goog-wm-sb:hover,
+            #goog-wm-sb:focus {
+                border-color: #aaa;
+                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+                background-color: #f8f8f8;
+            }
+
+            #goog-wm-qt:hover,
+            #goog-wm-qt:focus {
+                border-color: #105cb6;
+                outline: 0;
+                color: #222;
+            }
+
+            input::-moz-focus-inner {
+                padding: 0;
+                border: 0;
+            }
+        </style>
+    </head>
+    <body>
+        <div class="container">
+            <h1>not found <span>:(</span></h1>
+            <p>Sorry, but the page you were trying to view does not exist.</p>
+            <p>It looks like this was the result of either:</p>
+            <ul>
+                <li>a mistyped address</li>
+                <li>an out-of-date link</li>
+            </ul>
+            <script>
+                var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
+            </script>
+            <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
+        </div>
+    </body>
+</html>

+ 1 - 0
docs/CNAME

@@ -0,0 +1 @@
+www.raylib.com

+ 173 - 0
docs/cheatsheet/cheatsheet.html

@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html>
+	<head>
+    	<meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        
+		<title>raylib - cheatsheet</title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		
+		<meta name="title" content="raylib - cheatsheet">
+		<meta name="description" content="raylib is a simple and easy-to-use library to learn videogames programming. Don't miss latest functions added to raylib... check raylib cheatsheet">
+		<meta name="keywords" content="raylib, videogames, programming, C, C++, library, learn, study, simple, easy, free, open source, raysan">
+		<meta name="viewport" content="width=device-width">
+        
+        <!-- Facebook metatags for sharing -->
+        <meta property="og:title" content="raylib - cheatsheet"/>
+        <meta property="og:image" content="http://www.raylib.com/common/img/fb_raylib_logo.png"/>
+        <meta property="og:url" content="http://www.raylib.com" />
+        <meta property="og:site_name" content="raylib"/>
+        <meta property="og:description" content="don't miss latest functions added to raylib... check raylib cheatsheet"/>
+		
+		<!-- Add jQuery library -->
+		<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
+		
+		<!-- hightlight.js - Syntax highlighting for the Web -->
+        <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/styles/docco.min.css">
+		<script src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/highlight.min.js"></script>
+		
+		<style type="text/css">
+			@font-face {
+				font-family: 'grixel_acme_7_wide_xtnd';
+				src: url('../common/font/acme_7_wide_xtnd.eot');
+				src: url('../common/font/acme_7_wide_xtnd.eot?#iefix') format('embedded-opentype'),
+					 url('../common/font/acme_7_wide_xtnd.woff') format('woff'),
+					 url('../common/font/acme_7_wide_xtnd.ttf') format('truetype');
+				font-weight: normal;
+				font-style: normal;
+				font-size-adjust:0.49;
+			}
+            body{background-color:#f5f5f5;}
+            #fulldata{width: 1315px!important;}
+			.eximage img{ margin: 0 auto; border: 1px solid; border-color: black; width:770px; height:auto;}
+			pre code{ width: auto!important; border: 1px solid; border-color:#b0b0b0; width:758px; height:auto; }
+			.exdownbtn{width:250px; height:30px; float:left; position: relative; cursor:pointer; font-weight:bold; font-size:10px; 
+						line-height:30px; text-align: center; border-width:5px;	background-color:#e1e1e1; color:#5c5a5a; 
+						border:4px solid #898888; font-family: grixel_acme_7_wide_xtnd, Courier New, Verdana, Arial;}
+			.exdownbtn:hover{background-color:#f0d6d6; color:#c55757; border:4px solid #e66666;}
+            #core pre code{border:10px solid; border-color:#888888; background-color:#dbdbe1; }
+            #shapes pre code{border:10px solid; border-color:#e66666; background-color:#e9d0d6; }
+            #textures pre code{border:10px solid; border-color:#75a06d; background-color:#c3e4bf; }
+            #text pre code{border:10px solid; border-color:#52b296; background-color:#b9e9dd; }
+            #models pre code{border:10px solid; border-color:#5d9cbd; background-color:#b9d6e8; }
+            #shaders pre code{border:10px solid; border-color:#a864d2; background-color:#e0c6f1; }
+            #audio pre code{border:10px solid; border-color:#d3b157; background-color:#e5d7ae; }
+            #structs pre code{border:10px solid; border-color:#d2c9c6; background-color:#f8f8ff; height: 440px!important}
+            #colors pre code{border:10px solid; border-color:#c6d2c6; background-color:#e9f1f2; width:600px!important; }
+            #logo{width:128px; height:128px; float:left; position:relative; background-image:url(../common/img/raylib_logo.png);}
+            p{font-family: grixel_acme_7_wide_xtnd, Courier New, Verdana, Arial; font-size:13px; line-height:24px;}
+            #header{position:relative; height:110px; width: 1000px;}
+            #title, #plinks, #version{position:relative; float:left; margin:0px; margin-left:10px; margin-top:10px;}
+            #plinks{color: gray;}
+            #plinks a, #copyright a{color: gray; text-decoration:none;}
+            #plinks a:hover{color: black;}
+            #version {margin-top: 23px;}
+            #pcore{margin-bottom:-12px; margin-left:12px; color:#5c5a5a;}
+            #pshapes{margin-bottom:-12px; margin-left:12px; color:#c55757;}
+            #ptextures{margin-bottom:-12px; margin-left:12px; color:#60815a;}
+            #ptext{margin-bottom:-12px; margin-left:12px; color:#377764;}
+            #pmodels{margin-bottom:-12px; margin-left:12px; color:#417794;}
+            #pshaders{margin-bottom:-12px; margin-left:12px; color:#a864d2;}
+            #paudio{margin-bottom:-12px; margin-left:12px; color:#8c7539;}
+            #pstructs{margin-bottom:-12px; margin-left:12px; color:#bcbccd;}
+            #pcolors{margin-bottom:-12px; margin-left:12px; color:#bcbccd;}
+            
+            #leftgroup{position:relative; float:left; width:680px; }
+            #structs{width:660px!important;}
+            #colors{position:relative; float:left; width: auto; }
+
+            #copyright{color:#8b8b8b; font-size:10px; margin-left:590px; display:inline; }
+            #copyright a:hover{color:black;}
+        </style>
+		
+		<script type="text/javascript">
+			$(document).ready(function() {
+				$.get('raylib_core.c', function(data) { 
+					$('#core pre code').text(data);
+					$('#core pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_shapes.c', function(data) { 
+					$('#shapes pre code').text(data);
+					$('#shapes pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_textures.c', function(data) { 
+					$('#textures pre code').text(data);
+					$('#textures pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_text.c', function(data) { 
+					$('#text pre code').text(data);
+					$('#text pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_models.c', function(data) { 
+					$('#models pre code').text(data);
+					$('#models pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_shaders.c', function(data) { 
+					$('#shaders pre code').text(data);
+					$('#shaders pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_audio.c', function(data) { 
+					$('#audio pre code').text(data);
+					$('#audio pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                $.get('raylib_colors.c', function(data) { 
+					$('#colors pre code').text(data);
+					$('#colors pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+                 $.get('raylib_structs.c', function(data) { 
+					$('#structs pre code').text(data);
+					$('#structs pre code').each(function(i, e) {hljs.highlightBlock(e)});
+				}, 'text');
+			});
+		</script>
+	</head>
+	
+	<body>
+        <div id="header">
+            <a id="logo" href="http://www.raylib.com/index.html"></a>
+            <p id="title">[simple and easy-to-use library to learn videogames programming]</p>
+            <p id="plinks">[<a href="http://www.facebook.com/raylibgames" target="_blank">www.facebook.com/raylibgames</a>][<a href="https://github.com/raysan5/raylib">github.com/raysan5/raylib</a>]</p>
+            <p id="version">v1.6.0 quick reference card</p>
+        </div>
+        <br>
+        <div id="fulldata">
+            <p id="pcore">module: core</p>
+            <div id="core"><pre><code class="cpp"></code></pre></div>
+            <p id="pshapes">module: shapes</p>
+            <div id="shapes"><pre><code class="cpp"></code></pre></div>
+            <p id="ptextures">module: textures</p>
+            <div id="textures"><pre><code class="cpp"></code></pre></div>
+            <p id="ptext">module: text</p>
+            <div id="text"><pre><code class="cpp"></code></pre></div>
+            <p id="pmodels">module: models</p>
+            <div id="models"><pre><code class="cpp"></code></pre></div>
+            <p id="pshaders">module: shaders (rlgl)</p>
+            <div id="shaders"><pre><code class="cpp"></code></pre></div>
+            <p id="paudio">module: audio</p>
+            <div id="audio"><pre><code class="cpp"></code></pre></div>
+                    
+            <div id="fullgroup">
+                <div id="leftgroup">
+                    <p id="pstructs">structs</p>
+                    <div id="structs"><pre><code class="cpp"></code></pre></div>
+                </div>
+                <p id="pcolors">colors</p>
+                <div id="colors"><pre><code class="cpp"></code></pre></div>
+            </div>
+            <p id="copyright">raylib quick reference card - Copyright (c) 2013-2016 Ramon Santamaria (<a href="http://www.twitter.com/raysan5">@raysan5</a>)</p>
+        </div>
+        
+
+		<!-- Google Analytics tracking code -->
+		<script>
+			(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+			(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+			m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+			})(window,document,'script','http://www.google-analytics.com/analytics.js','ga');
+
+			ga('create', 'UA-45733555-1', 'raylib.com');
+            ga('require', 'linkid', 'linkid.js');
+			ga('send', 'pageview');
+		</script>
+	</body>
+</html>

+ 55 - 0
docs/cheatsheet/raylib_audio.c

@@ -0,0 +1,55 @@
+
+    // Audio device management functions
+    void InitAudioDevice(void);                                                     // Initialize audio device and context
+    void CloseAudioDevice(void);                                                    // Close the audio device and context (and music stream)
+    bool IsAudioDeviceReady(void);                                                  // Check if audio device is ready
+
+    // Wave/Sound loading/unloading functions
+    Wave LoadWave(const char *fileName);                                            // Load wave data from file into RAM
+    Wave LoadWaveEx(float *data, int sampleCount, int sampleRate, 
+                    int sampleSize, int channels);                                  // Load wave data from float array data (32bit)
+    Sound LoadSound(const char *fileName);                                          // Load sound to memory
+    Sound LoadSoundFromWave(Wave wave);                                             // Load sound to memory from wave data
+    Sound LoadSoundFromRES(const char *rresName, int resId);                        // Load sound to memory from rRES file (raylib Resource)
+    void UpdateSound(Sound sound, void *data, int numSamples);                      // Update sound buffer with new data
+    void UnloadWave(Wave wave);                                                     // Unload wave data
+    void UnloadSound(Sound sound);                                                  // Unload sound
+    
+    // Wave/Sound management functions
+    void PlaySound(Sound sound);                                                    // Play a sound
+    void PauseSound(Sound sound);                                                   // Pause a sound
+    void ResumeSound(Sound sound);                                                  // Resume a paused sound
+    void StopSound(Sound sound);                                                    // Stop playing a sound
+    bool IsSoundPlaying(Sound sound);                                               // Check if a sound is currently playing
+    void SetSoundVolume(Sound sound, float volume);                                 // Set volume for a sound (1.0 is max level)
+    void SetSoundPitch(Sound sound, float pitch);                                   // Set pitch for a sound (1.0 is base level)
+    void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels);      // Convert wave data to desired format
+    Wave WaveCopy(Wave wave);                                                       // Copy a wave to a new wave
+    void WaveCrop(Wave *wave, int initSample, int finalSample);                     // Crop a wave to defined samples range
+    float *GetWaveData(Wave wave);                                                  // Get samples data from wave as a floats array
+    
+    // Music management functions
+    Music LoadMusicStream(const char *fileName);                                    // Load music stream from file
+    void UnloadMusicStream(Music music);                                            // Unload music stream
+    void PlayMusicStream(Music music);                                              // Start music playing
+    void UpdateMusicStream(Music music);                                            // Updates buffers for music streaming
+    void StopMusicStream(Music music);                                              // Stop music playing
+    void PauseMusicStream(Music music);                                             // Pause music playing
+    void ResumeMusicStream(Music music);                                            // Resume playing paused music
+    bool IsMusicPlaying(Music music);                                               // Check if music is playing
+    void SetMusicVolume(Music music, float volume);                                 // Set volume for music (1.0 is max level)
+    void SetMusicPitch(Music music, float pitch);                                   // Set pitch for a music (1.0 is base level)
+    float GetMusicTimeLength(Music music);                                          // Get music time length (in seconds)
+    float GetMusicTimePlayed(Music music);                                          // Get current music time played (in seconds)
+
+    // AudioStream management functions
+    AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize,
+                                unsigned int channels);                             // Init audio stream (to stream raw audio pcm data)
+    void UpdateAudioStream(AudioStream stream, void *data, int numSamples);         // Update audio stream buffers with data
+    void CloseAudioStream(AudioStream stream);                                      // Close audio stream and free memory
+    bool IsAudioBufferProcessed(AudioStream stream);                                // Check if any audio stream buffers requires refill
+    void PlayAudioStream(AudioStream stream);                                       // Play audio stream
+    void PauseAudioStream(AudioStream stream);                                      // Pause audio stream
+    void ResumeAudioStream(AudioStream stream);                                     // Resume audio stream
+    void StopAudioStream(AudioStream stream);                                       // Stop audio stream
+    

+ 30 - 0
docs/cheatsheet/raylib_colors.c

@@ -0,0 +1,30 @@
+
+    // Custom raylib color palette for amazing visuals
+    #define LIGHTGRAY  (Color){ 200, 200, 200, 255 }        // Light Gray
+    #define GRAY       (Color){ 130, 130, 130, 255 }        // Gray
+    #define DARKGRAY   (Color){ 80, 80, 80, 255 }           // Dark Gray
+    #define YELLOW     (Color){ 253, 249, 0, 255 }          // Yellow
+    #define GOLD       (Color){ 255, 203, 0, 255 }          // Gold
+    #define ORANGE     (Color){ 255, 161, 0, 255 }          // Orange
+    #define PINK       (Color){ 255, 109, 194, 255 }        // Pink
+    #define RED        (Color){ 230, 41, 55, 255 }          // Red
+    #define MAROON     (Color){ 190, 33, 55, 255 }          // Maroon
+    #define GREEN      (Color){ 0, 228, 48, 255 }           // Green
+    #define LIME       (Color){ 0, 158, 47, 255 }           // Lime
+    #define DARKGREEN  (Color){ 0, 117, 44, 255 }           // Dark Green
+    #define SKYBLUE    (Color){ 102, 191, 255, 255 }        // Sky Blue
+    #define BLUE       (Color){ 0, 121, 241, 255 }          // Blue
+    #define DARKBLUE   (Color){ 0, 82, 172, 255 }           // Dark Blue
+    #define PURPLE     (Color){ 200, 122, 255, 255 }        // Purple
+    #define VIOLET     (Color){ 135, 60, 190, 255 }         // Violet
+    #define DARKPURPLE (Color){ 112, 31, 126, 255 }         // Dark Purple
+    #define BEIGE      (Color){ 211, 176, 131, 255 }        // Beige
+    #define BROWN      (Color){ 127, 106, 79, 255 }         // Brown
+    #define DARKBROWN  (Color){ 76, 63, 47, 255 }           // Dark Brown
+
+    #define WHITE      (Color){ 255, 255, 255, 255 }        // White
+    #define BLACK      (Color){ 0, 0, 0, 255 }              // Black
+    #define BLANK      (Color){ 0, 0, 0, 0 }                // Transparent
+    #define MAGENTA    (Color){ 255, 0, 255, 255 }          // Magenta
+    #define RAYWHITE   (Color){ 245, 245, 245, 255 }        // Ray White
+    

+ 118 - 0
docs/cheatsheet/raylib_core.c

@@ -0,0 +1,118 @@
+
+    // Window-related functions
+    void InitWindow(int width, int height, char* title);                    // Initialize Window and Graphics Context (OpenGL)
+    void CloseWindow(void);                                                 // Close Window and Terminate Context
+    bool WindowShouldClose(void);                                           // Detect if KEY_ESCAPE pressed or Close icon pressed
+    bool IsWindowMinimized(void);                                           // Detect if window has been minimized (or lost focus)
+    void ToggleFullscreen(void);                                            // Fullscreen toggle (by default F11)
+    int GetScreenWidth(void);                                               // Get current screen width
+    int GetScreenHeight(void);                                              // Get current screen height
+    
+    // Cursor-related functions
+    void ShowCursor(void);                                                  // Shows cursor
+    void HideCursor(void);                                                  // Hides cursor
+    bool IsCursorHidden(void);                                              // Returns true if cursor is not visible
+    void EnableCursor(void);                                                // Enables cursor
+    void DisableCursor(void);                                               // Disables cursor
+
+    // Drawing-related functions
+    void ClearBackground(Color color);                                      // Sets Background Color
+    void BeginDrawing(void);                                                // Setup drawing canvas to start drawing
+    void EndDrawing(void);                                                  // End canvas drawing and Swap Buffers (Double Buffering)
+
+    void Begin2dMode(Camera2D camera);                                      // Initialize 2D mode with custom camera
+    void End2dMode(void);                                                   // Ends 2D mode custom camera usage
+    void Begin3dMode(Camera camera);                                        // Initializes 3D mode for drawing (Camera setup)
+    void End3dMode(void);                                                   // Ends 3D mode and returns to default 2D orthographic mode
+    void BeginTextureMode(RenderTexture2D target);                          // Initializes render texture for drawing
+    void EndTextureMode(void);                                              // Ends drawing to render texture
+    
+    Ray GetMouseRay(Vector2 mousePosition, Camera camera);                  // Returns a ray trace from mouse position
+    Vector2 GetWorldToScreen(Vector3 position, Camera camera);              // Returns the screen space position from a 3d world space position
+    Matrix GetCameraMatrix(Camera camera);                                  // Returns camera transform matrix (view matrix)
+
+    // Timming-related functions
+    void SetTargetFPS(int fps);                                             // Set target FPS (maximum)
+    float GetFPS(void);                                                     // Returns current FPS
+    float GetFrameTime(void);                                               // Returns time in seconds for one frame
+
+    // Color-related functions
+    Color GetColor(int hexValue);                                           // Returns a Color struct from hexadecimal value
+    int GetHexValue(Color color);                                           // Returns hexadecimal value for a Color
+    float *ColorToFloat(Color color);                                       // Converts Color to float array and normalizes
+    float *VectorToFloat(Vector3 vec);                                      // Converts Vector3 to float array
+    float *MatrixToFloat(Matrix mat);                                       // Converts Matrix to float array
+
+    // Misc. functions
+    int GetRandomValue(int min, int max);                                   // Returns a random value between min and max (both included)
+    Color Fade(Color color, float alpha);                                   // Color fade-in or fade-out, alpha goes from 0.0 to 1.0
+    void SetConfigFlags(char flags);                                        // Setup some window configuration flags
+    void ShowLogo(void);                                                    // Activates raylib logo at startup (can be done with flags)
+
+    // Drag-and-drop files functions
+    bool IsFileDropped(void);                                               // Check if a file have been dropped into window
+    char **GetDroppedFiles(int *count);                                     // Retrieve dropped files into window
+    void ClearDroppedFiles(void);                                           // Clear dropped files paths buffer
+
+    // Persistent storage management
+    void StorageSaveValue(int position, int value);                         // Storage save integer value (to defined position)
+    int StorageLoadValue(int position);                                     // Storage load integer value (from defined position)
+    
+    // Input-related functions: keyboard
+    bool IsKeyPressed(int key);                                             // Detect if a key has been pressed once
+    bool IsKeyDown(int key);                                                // Detect if a key is being pressed
+    bool IsKeyReleased(int key);                                            // Detect if a key has been released once
+    bool IsKeyUp(int key);                                                  // Detect if a key is NOT being pressed
+    int GetKeyPressed(void);                                                // Get latest key pressed
+    void SetExitKey(int key);                                               // Set a custom key to exit program (default is ESC)
+
+    // Input-related functions: gamepads
+    bool IsGamepadAvailable(int gamepad);                                   // Detect if a gamepad is available
+    bool IsGamepadName(int gamepad, const char *name);                      // Check gamepad name (if available)
+    const char *GetGamepadName(int gamepad);                                // Return gamepad internal name id
+    bool IsGamepadButtonPressed(int gamepad, int button);                   // Detect if a gamepad button has been pressed once
+    bool IsGamepadButtonDown(int gamepad, int button);                      // Detect if a gamepad button is being pressed
+    bool IsGamepadButtonReleased(int gamepad, int button);                  // Detect if a gamepad button has been released once
+    bool IsGamepadButtonUp(int gamepad, int button);                        // Detect if a gamepad button is NOT being pressed
+    int GetGamepadButtonPressed(void);                                      // Get the last gamepad button pressed
+    int GetGamepadAxisCount(int gamepad);                                   // Return gamepad axis count for a gamepad
+    float GetGamepadAxisMovement(int gamepad, int axis);                    // Return axis movement value for a gamepad axis
+
+    // Input-related functions: mouse
+    bool IsMouseButtonPressed(int button);                                  // Detect if a mouse button has been pressed once
+    bool IsMouseButtonDown(int button);                                     // Detect if a mouse button is being pressed
+    bool IsMouseButtonReleased(int button);                                 // Detect if a mouse button has been released once
+    bool IsMouseButtonUp(int button);                                       // Detect if a mouse button is NOT being pressed
+    int GetMouseX(void);                                                    // Returns mouse position X
+    int GetMouseY(void);                                                    // Returns mouse position Y
+    Vector2 GetMousePosition(void);                                         // Returns mouse position XY
+    void SetMousePosition(Vector2 position);                                // Set mouse position XY
+    int GetMouseWheelMove(void);                                            // Returns mouse wheel movement Y
+
+    // Input-related functions: touch
+    int GetTouchX(void);                                                    // Get touch position X for touch point 0 (relative to screen size)
+    int GetTouchY(void);                                                    // Get touch position Y for touch point 0 (relative to screen size)
+    Vector2 GetTouchPosition(int index);                                    // Get touch position XY for a touch point index (relative to screen size)
+
+    // Gestures-related functions
+    void SetGesturesEnabled(unsigned int gestureFlags);                     // Enable a set of gestures using flags
+    bool IsGestureDetected(int gesture);                                    // Check if a gesture have been detected
+    int GetGestureDetected(void);                                           // Get latest detected gesture
+    int GetTouchPointsCount(void);                                          // Get touch points count
+    float GetGestureHoldDuration(void);                                     // Get gesture hold time in milliseconds
+    Vector2 GetGestureDragVector(void);                                     // Get gesture drag vector
+    float GetGestureDragAngle(void);                                        // Get gesture drag angle
+    Vector2 GetGesturePinchVector(void);                                    // Get gesture pinch delta
+    float GetGesturePinchAngle(void);                                       // Get gesture pinch angle
+    
+    // Camera-related functions
+    SetCameraMode(Camera camera, int mode);                                 // Set camera mode (multiple camera modes available)
+    void UpdateCamera(Camera *camera);                                      // Update camera position for selected mode
+    void SetCameraPanControl(int panKey);                                   // Set camera pan key to combine with mouse movement (free camera)
+    void SetCameraAltControl(int altKey);                                   // Set camera alt key to combine with mouse movement (free camera)
+    void SetCameraSmoothZoomControl(int szKey);                             // Set camera smooth zoom key to combine with mouse (free camera)
+    void SetCameraMoveControls(int frontKey, int backKey,
+                               int rightKey, int leftKey,
+                               int upKey, int downKey);                     // Set camera move controls (1st person and 3rd person cameras)
+
+                               

+ 82 - 0
docs/cheatsheet/raylib_defines.c

@@ -0,0 +1,82 @@
+
+
+    // Keyboard Function Keys
+    #define KEY_SPACE            32
+    #define KEY_ESCAPE          256
+    #define KEY_ENTER           257
+    #define KEY_BACKSPACE       259
+    #define KEY_RIGHT           262
+    #define KEY_LEFT            263
+    #define KEY_DOWN            264
+    #define KEY_UP              265
+    #define KEY_F1              290
+    #define KEY_F2              291
+    #define KEY_F3              292
+    #define KEY_F4              293
+    #define KEY_F5              294
+    #define KEY_F6              295
+    #define KEY_F7              296
+    #define KEY_F8              297
+    #define KEY_F9              298
+    #define KEY_F10             299
+    #define KEY_LEFT_SHIFT      340
+    #define KEY_LEFT_CONTROL    341
+    #define KEY_LEFT_ALT        342
+    #define KEY_RIGHT_SHIFT     344
+    #define KEY_RIGHT_CONTROL   345
+    #define KEY_RIGHT_ALT       346
+
+    // Mouse Buttons
+    #define MOUSE_LEFT_BUTTON     0
+    #define MOUSE_RIGHT_BUTTON    1
+    #define MOUSE_MIDDLE_BUTTON   2
+
+    // Gamepad Number
+    #define GAMEPAD_PLAYER1       0
+    #define GAMEPAD_PLAYER2       1
+    #define GAMEPAD_PLAYER3       2
+    #define GAMEPAD_PLAYER4       3
+
+    // Gamepad Buttons
+    // NOTE: Adjusted for a PS3 USB Controller
+    #define GAMEPAD_BUTTON_A      2
+    #define GAMEPAD_BUTTON_B      1
+    #define GAMEPAD_BUTTON_X      3
+    #define GAMEPAD_BUTTON_Y      4
+    #define GAMEPAD_BUTTON_R1     7
+    #define GAMEPAD_BUTTON_R2     5
+    #define GAMEPAD_BUTTON_L1     6
+    #define GAMEPAD_BUTTON_L2     8
+    #define GAMEPAD_BUTTON_SELECT 9
+    #define GAMEPAD_BUTTON_START 10
+
+
+    // Some Basic Colors
+    // NOTE: Custom raylib color palette for amazing visuals
+    #define LIGHTGRAY  (Color){ 200, 200, 200, 255 }   // Light Gray
+    #define GRAY       (Color){ 130, 130, 130, 255 }   // Gray
+    #define DARKGRAY   (Color){ 80, 80, 80, 255 }      // Dark Gray
+    #define YELLOW     (Color){ 253, 249, 0, 255 }     // Yellow
+    #define GOLD       (Color){ 255, 203, 0, 255 }     // Gold
+    #define ORANGE     (Color){ 255, 161, 0, 255 }     // Orange
+    #define PINK       (Color){ 255, 109, 194, 255 }   // Pink
+    #define RED        (Color){ 230, 41, 55, 255 }     // Red
+    #define MAROON     (Color){ 190, 33, 55, 255 }     // Maroon
+    #define GREEN      (Color){ 0, 228, 48, 255 }      // Green
+    #define LIME       (Color){ 0, 158, 47, 255 }      // Lime
+    #define DARKGREEN  (Color){ 0, 117, 44, 255 }      // Dark Green
+    #define SKYBLUE    (Color){ 102, 191, 255, 255 }   // Sky Blue
+    #define BLUE       (Color){ 0, 121, 241, 255 }     // Blue
+    #define DARKBLUE   (Color){ 0, 82, 172, 255 }      // Dark Blue
+    #define PURPLE     (Color){ 200, 122, 255, 255 }   // Purple
+    #define VIOLET     (Color){ 135, 60, 190, 255 }    // Violet
+    #define DARKPURPLE (Color){ 112, 31, 126, 255 }    // Dark Purple
+    #define BEIGE      (Color){ 211, 176, 131, 255 }   // Beige
+    #define BROWN      (Color){ 127, 106, 79, 255 }    // Brown
+    #define DARKBROWN  (Color){ 76, 63, 47, 255 }      // Dark Brown
+
+    #define WHITE      (Color){ 255, 255, 255, 255 }   // White
+    #define BLACK      (Color){ 0, 0, 0, 255 }         // Black
+    #define BLANK      (Color){ 0, 0, 0, 0 }           // Blank (Transparent)
+    #define MAGENTA    (Color){ 255, 0, 255, 255 }     // Magenta
+    #define RAYWHITE   (Color){ 245, 245, 245, 255 }   // Ray White (raylib logo)

+ 58 - 0
docs/cheatsheet/raylib_models.c

@@ -0,0 +1,58 @@
+
+    // Basic geometric 3D shapes drawing functions
+    void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color);                                     // Draw a line in 3D world space
+    void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, 
+                      float rotationAngle, Color color);                                                // Draw a circle in 3D world space
+    void DrawCube(Vector3 position, float width, float height, float lenght, Color color);              // Draw cube
+    void DrawCubeV(Vector3 position, Vector3 size, Color color);                                        // Draw cube (Vector version)
+    void DrawCubeWires(Vector3 position, float width, float height, float lenght, Color color);         // Draw cube wires
+    void DrawCubeTexture(Texture2D texture, Vector3 position, float width, 
+                         float height, float lenght, Color color);                                      // Draw cube textured
+    void DrawSphere(Vector3 centerPos, float radius, Color color);                                      // Draw sphere
+    void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color);             // Draw sphere with extended parameters
+    void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color);          // Draw sphere wires
+    void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, 
+                      float height, int slices, Color color);                                           // Draw a cylinder/cone
+    void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, 
+                           float height, int slices, Color color);                                      // Draw a cylinder/cone wires
+    void DrawPlane(Vector3 centerPos, Vector2 size, Color color);                                       // Draw a plane XZ
+    void DrawRay(Ray ray, Color color);                                                                 // Draw a ray line
+    void DrawGrid(int slices, float spacing);                                                           // Draw a grid (centered at (0, 0, 0))
+    void DrawGizmo(Vector3 position);                                                                   // Draw simple gizmo
+    void DrawLight(Light light);                                                                        // Draw light in 3D world
+
+    // Model loading/unloading functions
+    Model LoadModel(const char *fileName);                                                              // Load a 3d model (.OBJ)
+    Model LoadModelEx(Mesh data, bool dynamic);                                                         // Load a 3d model (from mesh data)
+    Model LoadModelFromRES(const char *rresName, int resId);                                            // Load a 3d model from rRES file (raylib Resource)
+    Model LoadHeightmap(Image heightmap, Vector3 size);                                                 // Load a heightmap image as a 3d model
+    Model LoadCubicmap(Image cubicmap);                                                                 // Load a map image as a 3d model (cubes based)
+    void UnloadModel(Model model);                                                                      // Unload 3d model from memory
+
+    // Material loading/unloading functions
+    Material LoadMaterial(const char *fileName);                                                        // Load material data (from file)
+    Material LoadDefaultMaterial(void);                                                                 // Load default material (uses default models shader)
+    Material LoadStandardMaterial(void);                                                                // Load standard material (uses material attributes and lighting shader)
+    void UnloadMaterial(Material material);                                                             // Unload material textures from VRAM
+
+    // Model drawing functions
+    void DrawModel(Model model, Vector3 position, float scale, Color tint);                             // Draw a model (with texture if set)
+    void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, 
+                     float rotationAngle, Vector3 scale, Color tint);                                   // Draw a model with extended parameters
+    void DrawModelWires(Model model, Vector3 position, float scale, Color tint);                        // Draw a model wires (with texture if set)
+    void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, 
+                          float rotationAngle, Vector3 scale, Color tint);                              // Draw a model wires
+    void DrawBoundingBox(BoundingBox box, Color color);                                                 // Draw bounding box (wires)
+    void DrawBillboard(Camera camera, Texture2D texture, Vector3 center, float size, Color tint);       // Draw a billboard texture
+    void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle sourceRec, 
+                          Vector3 center, float size, Color tint);                                      // Draw a billboard texture defined by sourceRec
+
+    // Collision detection functions
+    bool CheckCollisionSpheres(Vector3 centerA, float radiusA, Vector3 centerB, float radiusB);                     // Detect collision between two spheres
+    bool CheckCollisionBoxes(Vector3 minBBox1, Vector3 maxBBox1, Vector3 minBBox2, Vector3 maxBBox2);               // Detect collision between two boxes
+    bool CheckCollisionBoxSphere(Vector3 minBBox, Vector3 maxBBox, Vector3 centerSphere, float radiusSphere);       // Detect collision between box and sphere
+    bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius);                              // Detect collision between ray and sphere
+    bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, float sphereRadius, Vector3 *collisionPoint);   // Detect collision between ray and sphere ex.
+    bool CheckCollisionRayBox(Ray ray, Vector3 minBBox, Vector3 maxBBox);                                           // Detect collision between ray and box
+    BoundingBox CalculateBoundingBox(Mesh mesh);                                                                    // Calculate mesh bounding box limits
+    

+ 34 - 0
docs/cheatsheet/raylib_shaders.c

@@ -0,0 +1,34 @@
+
+    // Shader loading/unloading functions
+    Shader LoadShader(char *vsFileName, char *fsFileName);                                              // Load a custom shader and bind default locations
+    void UnloadShader(Shader shader);                                                                   // Unload a custom shader from memory
+    Shader GetDefaultShader(void);                                                                      // Get default shader
+    Shader GetStandardShader(void);                                                                     // Get standard shader
+    Texture2D GetDefaultTexture(void);                                                                  // Get default texture
+
+    // Shader access functions
+    int GetShaderLocation(Shader shader, const char *uniformName);                                      // Get shader uniform location
+    void SetShaderValue(Shader shader, int uniformLoc, float *value, int size);                         // Set shader uniform value (float)
+    void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);                          // Set shader uniform value (int)
+    void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);                               // Set shader uniform value (matrix 4x4)
+    void SetMatrixProjection(Matrix proj);                                                              // Set a custom projection matrix (replaces internal projection matrix)
+    void SetMatrixModelview(Matrix view);                                                               // Set a custom modelview matrix (replaces internal modelview matrix)
+
+    // Shading beegin/end functions
+    void BeginShaderMode(Shader shader);                                                                // Begin custom shader drawing
+    void EndShaderMode(void);                                                                           // End custom shader drawing (use default shader)
+    void BeginBlendMode(int mode);                                                                      // Begin blending mode (alpha, additive, multiplied)
+    void EndBlendMode(void);                                                                            // End blending mode (reset to default: alpha blending)
+    
+    // Light creation/destruction functions
+    Light CreateLight(int type, Vector3 position, Color diffuse);                                       // Create a new light, initialize it and add to pool
+    void DestroyLight(Light light);                                                                     // Destroy a light and take it out of the list
+    
+    // VR control functions
+    void InitVrDevice(int vrDevice);                                                                    // Init VR device
+    void CloseVrDevice(void);                                                                           // Close VR device
+    bool IsVrDeviceReady(void);                                                                         // Detect if VR device is ready
+    bool IsVrSimulator(void);                                                                           // Detect if VR simulator is running
+    void UpdateVrTracking(Camera *camera);                                                              // Update VR tracking (position and orientation) and camera
+    void ToggleVrMode(void);                                                                            // Enable/Disable VR experience (device or simulator)
+    

+ 30 - 0
docs/cheatsheet/raylib_shapes.c

@@ -0,0 +1,30 @@
+
+    // Basic shapes drawing functions
+    void DrawPixel(int posX, int posY, Color color);                                                    // Draw a pixel
+    void DrawPixelV(Vector2 position, Color color);                                                     // Draw a pixel (Vector version)
+    void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color);                 // Draw a line
+    void DrawLineV(Vector2 startPos, Vector2 endPos, Color color);                                      // Draw a line (Vector version)
+    void DrawCircle(int centerX, int centerY, float radius, Color color);                               // Draw a color-filled circle
+    void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2);        // Draw a gradient-filled circle
+    void DrawCircleV(Vector2 center, float radius, Color color);                                        // Draw a color-filled circle (Vector version)
+    void DrawCircleLines(int centerX, int centerY, float radius, Color color);                          // Draw circle outline
+    void DrawRectangle(int posX, int posY, int width, int height, Color color);                         // Draw a color-filled rectangle
+    void DrawRectangleRec(Rectangle rec, Color color);                                                  // Draw a color-filled rectangle
+    void DrawRectangleGradient(int posX, int posY, int width, int height, Color color1, Color color2);  // Draw a gradient-filled rectangle
+    void DrawRectangleV(Vector2 position, Vector2 size, Color color);                                   // Draw a color-filled rectangle (Vector version)
+    void DrawRectangleLines(int posX, int posY, int width, int height, Color color);                    // Draw rectangle outline
+    void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color);                                 // Draw a color-filled triangle
+    void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color);                            // Draw triangle outline
+    void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color);                // Draw a regular polygon (Vector version)
+    void DrawPolyEx(Vector2 *points, int numPoints, Color color);                                       // Draw a closed polygon defined by points
+    void DrawPolyExLines(Vector2 *points, int numPoints, Color color);                                  // Draw polygon lines
+
+    // Basic shapes collision detection functions
+    bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2);                                            // Check collision between two rectangles
+    bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2);         // Check collision between two circles
+    bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec);                          // Check collision between circle and rectangle
+    Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2);                                          // Get collision rectangle for two rectangles collision
+    bool CheckCollisionPointRec(Vector2 point, Rectangle rec);                                          // Check if point is inside rectangle
+    bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius);                        // Check if point is inside circle
+    bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3);                // Check if point is inside a triangle
+

+ 28 - 0
docs/cheatsheet/raylib_structs.c

@@ -0,0 +1,28 @@
+
+    struct Color;           // Color type, RGBA (32bit)
+    struct Rectangle;       // Rectangle type
+    struct Vector2;         // Vector2 type
+    struct Vector3;         // Vector3 type
+    struct Matrix;          // Matrix type (OpenGL style 4x4)
+    
+    struct Image;           // Image type (multiple data formats supported)
+                            // NOTE: Data stored in CPU memory (RAM)               
+    struct Texture2D;       // Texture2D type (multiple internal formats supported)
+                            // NOTE: Data stored in GPU memory (VRAM)
+    struct RenderTexture2D; // RenderTexture2D type, for texture rendering
+    struct SpriteFont;      // SpriteFont type, includes texture and chars data
+    
+    struct Camera;          // Camera type, defines 3d camera position/orientation
+    struct Camera2D;        // Camera2D type, defines a 2d camera
+    struct Mesh;            // Vertex data definning a mesh
+    struct Shader;          // Shader type (generic shader)
+    struct Material;        // Material type
+    struct Light;           // Light type, defines light properties
+    struct Model;           // Basic 3d Model type
+    struct Ray;             // Ray type (useful for raycast)
+    
+    struct Wave;            // Wave type, defines audio wave data
+    struct Sound;           // Basic Sound source and buffer
+    struct Music;           // Music type (file streaming from memory)
+    struct AudioStream;     // Raw audio stream type
+    

+ 19 - 0
docs/cheatsheet/raylib_text.c

@@ -0,0 +1,19 @@
+
+    // SpriteFont loading/unloading functions
+    SpriteFont GetDefaultFont(void);                                                                    // Get the default SpriteFont
+    SpriteFont LoadSpriteFont(const char *fileName);                                                    // Load a SpriteFont image into GPU memory
+    SpriteFont LoadSpriteFontTTF(const char *fileName, int fontSize, int numChars, int *fontChars);     // Load a SpriteFont from TTF font with parameters
+    void UnloadSpriteFont(SpriteFont spriteFont);                                                       // Unload SpriteFont from GPU memory
+
+    // Text drawing functions
+    void DrawText(const char *text, int posX, int posY, int fontSize, Color color);                     // Draw text (using default font)
+    void DrawTextEx(SpriteFont spriteFont, const char* text, Vector2 position,                          // Draw text using SpriteFont and additional parameters
+                    int fontSize, int spacing, Color tint);
+    void DrawFPS(int posX, int posY);                                                                   // Shows current FPS on top-left corner
+    
+    // Text misc. functions
+    int MeasureText(const char *text, int fontSize);                                                    // Measure string width for default font
+    Vector2 MeasureTextEx(SpriteFont spriteFont, const char *text, int fontSize, int spacing);          // Measure string size for SpriteFont
+    const char *FormatText(const char *text, ...);                                                      // Formatting of text with variables to 'embed'
+    const char *SubText(const char *text, int position, int length);                                    // Get a piece of a text string
+

+ 53 - 0
docs/cheatsheet/raylib_textures.c

@@ -0,0 +1,53 @@
+
+    // Image/Texture2D data loading/unloading functions
+    Image LoadImage(const char *fileName);                                                              // Load an image into CPU memory (RAM)
+    Image LoadImageEx(Color *pixels, int width, int height);                                            // Load image data from Color array data (RGBA - 32bit)
+    Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize);        // Load image data from RAW file
+    Image LoadImageFromRES(const char *rresName, int resId);                                            // Load an image from rRES file (raylib Resource)
+    Texture2D LoadTexture(const char *fileName);                                                        // Load an image as texture into GPU memory
+    Texture2D LoadTextureEx(void *data, int width, int height, int textureFormat, int mipmapCount);     // Load a texture from raw data into GPU memory
+    Texture2D LoadTextureFromRES(const char *rresName, int resId);                                      // Load an image as texture from rRES file (raylib Resource)
+    Texture2D LoadTextureFromImage(Image image);                                                        // Load a texture from image data
+    RenderTexture2D LoadRenderTexture(int width, int height);                                           // Load a texture to be used for rendering
+    void UnloadImage(Image image);                                                                      // Unload image from CPU memory (RAM)
+    void UnloadTexture(Texture2D texture);                                                              // Unload texture from GPU memory
+    void UnloadRenderTexture(RenderTexture2D target);                                                   // Unload render texture from GPU memory
+    Color *GetImageData(Image image);                                                                   // Get pixel data from image as a Color struct array
+    Image GetTextureData(Texture2D texture);                                                            // Get pixel data from GPU texture and return an Image
+    void UpdateTexture(Texture2D texture, void *pixels);                                                // Update GPU texture with new data
+    
+    // Image manipulation functions
+    void ImageToPOT(Image *image, Color fillColor);                                                     // Convert image to POT (power-of-two)
+    void ImageFormat(Image *image, int newFormat);                                                      // Convert image data to desired format
+    void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp);                             // Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
+    Image ImageCopy(Image image);                                                                       // Create an image duplicate (useful for transformations)
+    void ImageCrop(Image *image, Rectangle crop);                                                       // Crop an image to a defined rectangle
+    void ImageResize(Image *image, int newWidth, int newHeight);                                        // Resize and image (bilinear filtering)
+    void ImageResizeNN(Image *image,int newWidth,int newHeight);                                        // Resize and image (Nearest-Neighbor scaling algorithm)
+    Image ImageText(const char *text, int fontSize, Color color);                                       // Create an image from text (default font)
+    Image ImageTextEx(SpriteFont font, const char *text, int fontSize, int spacing, Color tint);        // Create an image from text (custom sprite font)
+    void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec);                          // Draw a source image within a destination image
+    void ImageDrawText(Image *dst, Vector2 position, const char *text, int fontSize, Color color);      // Draw text (default font) within an image (destination)
+    void ImageDrawTextEx(Image *dst, Vector2 position, SpriteFont font, const char *text, 
+                         int fontSize, int spacing, Color color);                                       // Draw text (custom sprite font) within image
+    void ImageFlipVertical(Image *image);                                                               // Flip image vertically
+    void ImageFlipHorizontal(Image *image);                                                             // Flip image horizontally
+    void ImageColorTint(Image *image, Color color);                                                     // Modify image color: tint
+    void ImageColorInvert(Image *image);                                                                // Modify image color: invert
+    void ImageColorGrayscale(Image *image);                                                             // Modify bimage color: grayscale
+    void ImageColorContrast(Image *image, float contrast);                                              // Modify image color: contrast (-100 to 100)
+    void ImageColorBrightness(Image *image, int brightness);                                            // Modify image color: brightness (-255 to 255)
+    
+    // Texture2D configuration functions
+    void GenTextureMipmaps(Texture2D *texture);                                                         // Generate GPU mipmaps for a texture
+    void SetTextureFilter(Texture2D texture, int filterMode);                                           // Set texture scaling filter mode
+    void SetTextureWrap(Texture2D texture, int wrapMode);                                               // Set texture wrapping mode
+
+    // Texture2D drawing functions
+    void DrawTexture(Texture2D texture, int posX, int posY, Color tint);                                // Draw a Texture2D
+    void DrawTextureV(Texture2D texture, Vector2 position, Color tint);                                 // Draw a Texture2D with position defined as Vector2
+    void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint);   // Draw a Texture2D with extended parameters
+    void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint);          // Draw a part of a texture defined by a rectangle
+    void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin,      // Draw a part of a texture defined by a rectangle with 'pro' parameters
+                        float rotation, Color tint);
+

+ 66 - 0
docs/common/css/examples.css

@@ -0,0 +1,66 @@
+#container .mix{ position: relative;  display: none; }
+#container .extext { top: 160px!important; width: 400px!important; }
+
+#filter_menu { width: 820px; height: 80px; margin-left: 18px; }
+
+.legendButton { padding:5px 15px; float:left; margin-left:10px; margin-right:10px; margin-bottom: 20px; }
+#core { cursor:pointer; background-color:#e1e1e1; color:#5c5a5a; border:3px solid #898888; }
+#shapes { cursor:pointer; background-color:#f0d6d6; color:#c55757; border:3px solid #e66666; }
+#textures { cursor:pointer; background-color:#c8eabf; color:#60815a; border:3px solid #75a06d; }
+#text { cursor:pointer; background-color:#bef0dd; color:#377764; border:3px solid #52b296; }
+#models { cursor:pointer; background-color:#bedce8; color:#417794; border:3px solid #5d9cbd; }
+#shaders { cursor:pointer; background-color:#e2c3f5; color:#a864d2; border:3px solid #a864d2; }
+#audio { cursor:pointer; background-color:#ebddae; color:#8c7539; border:3px solid #d3b157; }
+
+.core:hover { background-color:#e1e1e1; color:#5c5a5a; border:4px solid #898888; }
+.shapes:hover { background-color:#f0d6d6; color:#c55757; border:4px solid #e66666; }
+.textures:hover { background-color:#c8eabf; color:#60815a; border:4px solid #75a06d; }
+.text:hover { background-color:#bef0dd; color:#377764; border:4px solid #52b296; }
+.models:hover { background-color:#bedce8; color:#417794; border:4px solid #5d9cbd; }
+.audio:hover { background-color:#ebddae; color:#8c7539; border:4px solid #d3b157; }
+
+.fcore { border: 1px solid #898888; margin-left: 12px; }
+.fshapes { border: 1px solid #e66666; margin-left: 12px; }
+.ftextures { border: 1px solid #75a06d; margin-left: 12px; }
+.ftext { border: 1px solid #52b296; margin-left: 12px; }
+.fmodels { border: 1px solid #5d9cbd; margin-left: 12px; }
+.fshaders { border: 1px solid #a864d2; margin-left: 12px; }
+.faudio { border: 1px solid #d3b157; margin-left: 12px; }
+
+.fcore p { color:#5c5a5a!important; }
+.fshapes p { color:#c55757!important; }
+.ftextures p { color:#60815a!important; }
+.ftext p { color:#377764!important; }
+.fmodels p { color:#417794!important; }
+.fshaders p { color:#a864d2!important; }
+.faudio p { color:#8c7539!important; }
+
+#container .fcore a img, #container .fcore a { border: none; overflow: hidden; float: left; background-color: #e1e1e1; opacity: 1; }
+#container .fcore a:hover { border: 10px solid #898888; }
+#container .fcore a:hover img { margin: -10px; opacity: 0.4; }
+
+#container .fshapes a img, #container .fshapes a { border: none; overflow: hidden; float: left; background-color: #f0d6d6; opacity: 1; }
+#container .fshapes a:hover { border: 10px solid #e66666; }
+#container .fshapes a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .ftextures a img, #container .ftextures a { border: none; overflow: hidden; float: left; background-color: #c8eabf; opacity: 1; }
+#container .ftextures a:hover { border: 10px solid #75a06d; }
+#container .ftextures a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .ftext a img, #container .ftext a { border: none; overflow: hidden; float: left; background-color: #bef0dd; opacity: 1; }
+#container .ftext a:hover { border: 10px solid #52b296; }
+#container .ftext a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .fmodels a img, #container .fmodels a { border: none; overflow: hidden; float: left; background-color: #bedce8; opacity: 1; }
+#container .fmodels a:hover { border: 10px solid #5d9cbd; }
+#container .fmodels a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .fshaders a img, #container .fshaders a { border: none; overflow: hidden; float: left; background-color: #e0c6f1; opacity: 1; }
+#container .fshaders a:hover { border: 10px solid #a864d2; }
+#container .fshaders a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .faudio a img, #container .faudio a { border: none; overflow: hidden; float: left; background-color: #ebddae; opacity: 1; }
+#container .faudio a:hover { border: 10px solid #d3b157; }
+#container .faudio a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .extext { position:absolute; top:140px; width:320px; text-align: center; display: none; }

+ 35 - 0
docs/common/css/games.css

@@ -0,0 +1,35 @@
+#container .mix{ position: relative;  display: none; }
+#container .extext { top: 160px!important; width: 400px!important; }
+
+#filter_menu { width: 820px; height: 80px; margin-left: 18px; }
+
+.legendButton { padding:5px 15px; float:left; margin-left:10px; margin-right:10px; margin-bottom: 20px; }
+#sample { cursor:pointer; background-color:#e1e1e1; color:#5c5a5a; border:3px solid #898888; }
+#game { cursor:pointer; background-color:#f0d6d6; color:#c55757; border:3px solid #e66666; }
+#user { cursor:pointer; background-color:#bedce8; color:#417794; border:3px solid #5d9cbd; }
+
+.sample:hover { background-color:#e1e1e1; color:#5c5a5a; border:4px solid #898888; }
+.game:hover { background-color:#f0d6d6; color:#c55757; border:4px solid #e66666; }
+.user:hover { background-color:#bedce8; color:#417794; border:4px solid #5d9cbd; }
+
+.fsample { border: 1px solid #898888; margin-left: 12px; }
+.fgame { border: 1px solid #e66666; margin-left: 12px; }
+.fuser { border: 1px solid #5d9cbd; margin-left: 12px; }
+
+.fsample p { color:#5c5a5a!important; }
+.fgame p { color:#c55757!important; }
+.fuser p { color:#417794!important; }
+
+#container .fsample a img, #container .fsample a { border: none; overflow: hidden; float: left; background-color: #e1e1e1; opacity: 1; }
+#container .fsample a:hover { border: 10px solid #898888; }
+#container .fsample a:hover img { margin: -10px; opacity: 0.4; }
+
+#container .fgame a img, #container .fgame a { border: none; overflow: hidden; float: left; background-color: #f0d6d6; opacity: 1; }
+#container .fgame a:hover { border: 10px solid #e66666; }
+#container .fgame a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .fuser a img, #container .fuser a { border: none; overflow: hidden; float: left; background-color: #bedce8; opacity: 1; }
+#container .fuser a:hover { border: 10px solid #5d9cbd; }
+#container .fuser a:hover img { margin: -10px; opacity: 0.3; }
+
+#container .extext { position:absolute; top:140px; width:320px; text-align: center; display: none; }

+ 109 - 0
docs/common/css/main.css

@@ -0,0 +1,109 @@
+@font-face {
+    font-family: 'grixel_acme_7_wide_xtnd';
+    src: url('../font/acme_7_wide_xtnd.eot');
+    src: url('../font/acme_7_wide_xtnd.eot?#iefix') format('embedded-opentype'),
+         url('../font/acme_7_wide_xtnd.woff') format('woff'),
+         url('../font/acme_7_wide_xtnd.ttf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+	font-size-adjust:0.49;
+}
+
+::-webkit-scrollbar { width: 10px; height: 10px; }
+::-webkit-scrollbar-button:start:decrement,
+::-webkit-scrollbar-button:end:increment { display: block; height: 10px; }
+::-webkit-scrollbar-button:vertical:increment { background-color: #fff; }
+::-webkit-scrollbar-track-piece { background-color: #bdbdbd; }
+::-webkit-scrollbar-thumb:vertical { height: 50px; background-color: #000000; }
+::-webkit-scrollbar-thumb:horizontal { width: 50px; background-color: #000000; }
+
+*{padding:0px; margin:0px; font-family: grixel_acme_7_wide_xtnd, Courier New, Verdana, Arial; -moz-font-smoothing: none;-webkit-font-smoothing: none; line-height:24px;}
+a{text-decoration: none; color:black;}
+body{background-color:#f5f5f5;}
+p a:hover{text-decoration: none; color:gray;}
+
+.page{width:840px; margin:0 auto;}
+
+.header{width:100%; float:left; position:relative; height:128px; font-size:10pt; margin-top:40px; margin-left:10px;}
+.content{font-size:8pt; width:840px; padding:10px; padding-top:30px; float:left; position:relative; padding-bottom:50px;}
+.footer{width:100%; float:left; position:relative; border-top:1px solid black; text-align: right;  height:40px; padding-top:10px;}
+.footer p a{color:#aaaaaa;}
+.footer p a:hover{color:#444;}
+.footer p { font-size:6pt; color:#aaaaaa; margin-top:-8px; }
+.simplelink { font-weight: bold; color: #ff6060; }
+
+/* font change for better reading... */
+.content p, .content a, .content p strong, .content strong, .content .downloadText{font-family: Courier New, Verdana, Arial!important; font-size: medium; line-height: 200%;  }
+.downloadButtonInstaller { font-size: x-small; }
+.list, .list strong {font-family: Courier New, Verdana, Arial!important; font-size: medium; line-height: 200%;  }
+
+#logo{width:128px; height:128px; float:left; position:relative; background-image:url(../img/raylib_logo.png);}
+.menu{width:680px; height:39px; text-align:right; right:0px; bottom:7px; position:relative; float:left; margin-left: 30px;}
+.menu a{padding:5px 20px; color:black; font-size:12pt; float:left; position:relative; border-bottom:1px solid black;}
+.menu a:hover{margin-top:-20px; padding:15px 15px; background: rgb(254,255,255); 
+	background: -moz-linear-gradient(top, rgba(245,245,245,1) 0%, rgba(224,224,224,1) 100%); 
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(245,245,245,1)), color-stop(100%,rgba(224,224,224,1))); 
+	background: -webkit-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: -o-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: -ms-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: linear-gradient(to bottom,  rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e0e0e0',GradientType=0 ); }
+
+#active{
+	padding:5px 15px; color:#707070; font-size:12pt; float:left; position:relative; border-bottom:1px solid black;
+	margin-top:-20px; padding:15px 15px; background: rgb(254,255,255); 
+	background: -moz-linear-gradient(top, rgba(245,245,245,1) 0%, rgba(224,224,224,1) 100%); 
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(245,245,245,1)), color-stop(100%,rgba(224,224,224,1))); 
+	background: -webkit-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: -o-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: -ms-linear-gradient(top, rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	background: linear-gradient(to bottom,  rgba(245,245,245,1) 0%,rgba(224,224,224,1) 100%); 
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e0e0e0',GradientType=0 );
+}
+	
+#social{ width:300px; height:50px; position:relative; float:right; margin-right:8px; margin-top:20px; margin-bottom:20px; }
+#social a:hover{ background-position: 0 -36px;}
+#twitch{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_twitch.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#patreon{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_patreon.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#itchio{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_itchio.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#reddit{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_reddit.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#freenode{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_freenode_irc.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#facebook{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_facebook.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#twitter{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_twitter.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+#github{ width:36px; height:36px; float:left; position:relative; background-image: url(../img/icon_github.png); cursor: pointer; background-repeat:no-repeat; background-position: 0 0;}
+.list{margin-top:10px; margin-left:30px; display: inline-block}
+
+#licensebox { width:808px; height:400px; border:12px solid; border-color:#d0d0d0; background-color:#e4e4e4;}
+#licensebox p { font-size:12px; margin-top: 15px; margin-left: 10px;}
+.licensepoint { margin-left: 25px!important;}
+
+.downloadText{width:420px; height:40px; float:left; position:relative; margin-left:40px;}
+.downloadButton{width:220px; height:35px; float:left; position: relative; cursor:pointer; font-weight: bold; line-height:35px; text-align: center; border-width:5px!important;}
+.downloadButtonInstaller{width:460px; height:35px; position: relative; margin: auto auto; margin-top:20px!important; cursor:pointer; font-weight: bold; line-height:35px; text-align: center; border-width:5px!important;}
+#btngit{background-color:#e1e1e1; color:#5c5a5a; border:4px solid #898888;}
+#btngit:hover{background-color:#bedce8; color:#417794; border:4px solid #5d9cbd;}
+#btnlib{background-color:#e1e1e1; color:#5c5a5a; border:4px solid #898888; margin-top: 15px;}
+#btnlib:hover{background-color:#f0d6d6; color:#c55757; border:4px solid #e66666; margin-top: 15px;}
+#btnmac{font-weight: normal; cursor:default; background-color:#f0f0f0; color:#5c5a5a; border:4px solid #d3d3d3;}
+#newVersion{background-color:#f0d6d6; color:#e55757; border:1px solid #f66666; margin-top: 15px; margin-left: -5px; width:100%; height:30px; position: relative; margin: auto auto; line-height:30px; text-align: center;}
+#raylib13{position:relative; background-color:#222222; color:#f5f5f5; width:100vw; left:calc(-52vw + 50%); padding:30px; text-align:center; margin: 10px;}
+
+#basicgrid{width:580px; margin-left:60px; float:left; position:relative; text-align: center}
+#advgrid{width:560px; margin-left:70px; float:left; position:relative; text-align: center}
+.exampleBox{cursor:pointer; margin:15px 20px; width:54px; padding-right:2px; height:56px; border:4px solid black; display:inline-block; text-align: right; font-weight: bold; vertical-align: bottom;}
+.exampleBox .in{display: table-cell; vertical-align: bottom; width:52px; height:56px;}
+
+.specialBox{cursor:pointer; vertical-align: bottom; color:#818181; width:56px; height:58px; padding-right:2px; padding-top:4px; padding-left:4px; margin:15px 20px; display:inline-block; border:1px solid #b9b9b9; text-align:right;}
+.specialBox .in{display: table-cell; vertical-align: bottom; width:52px; height:52px; border:1px solid #b9b9b9; margin-top:-5px;}
+.specialBox:hover{ color: black; border:1px solid black; }
+.specialBox .in:hover{ color: black; border:1px solid black; }
+.boxintext{margin-bottom: 3px; margin-right: 2px; line-height:10px; font-size:6pt;}
+.boxintextex{margin-bottom: 3px; margin-right: -2px; line-height:10px; font-size:6pt; width:54px!important; height:53px!important; font-weight: normal!important;}
+.boxtodo{margin-bottom: 13px; margin-right: 7px;}
+
+.help{font-size:8px; margin-left: 25px;}
+#paypalbox{width:200px; height:50px; border:12px solid; border-color:#d0d0d0; background-color:#e4e4e4; margin:0 auto;}
+#paypalform input {margin-top: 12px; margin-left: 50px;}
+#forum{color: maroon;}
+
+#itchioframe{display:block;text-align:center;}

BIN
docs/common/font/acme_7_wide_xtnd.eot


BIN
docs/common/font/acme_7_wide_xtnd.ttf


BIN
docs/common/font/acme_7_wide_xtnd.woff


BIN
docs/common/img/fb_raylib_logo.png


BIN
docs/common/img/icon_facebook.png


BIN
docs/common/img/icon_freenode_irc.png


BIN
docs/common/img/icon_github.png


BIN
docs/common/img/icon_itchio.png


BIN
docs/common/img/icon_patreon.png


BIN
docs/common/img/icon_reddit.png


BIN
docs/common/img/icon_twitch.png


BIN
docs/common/img/icon_twitter.png


BIN
docs/common/img/ln_raylib_logo.png


BIN
docs/common/img/raylib_logo.png


BIN
docs/common/img/raylib_logo_64x64.png


+ 144 - 0
docs/common/js/examples.js

@@ -0,0 +1,144 @@
+$(document).ready(function() {
+    
+    // Init fancybox
+    $('.fancybox').fancybox();
+
+    var exampleName = [ 
+        'core_basic_window',
+        'core_input_keys',
+        'core_input_mouse',
+        'core_mouse_wheel',
+        'core_input_gamepad',
+        'core_random_values',
+        'core_color_select',
+        'core_drop_files',
+        'core_storage_values',
+        'core_gestures_detection',
+        'core_3d_mode',
+        'core_3d_picking',
+        'core_3d_camera_free',
+        'core_3d_camera_first_person',
+        'core_2d_camera',
+        'core_world_screen',
+        'core_oculus_rift',
+        'shapes_logo_raylib',
+        'shapes_basic_shapes',
+        'shapes_colors_palette',
+        'shapes_logo_raylib_anim',
+        'textures_logo_raylib',
+        'textures_image_loading',
+        'textures_rectangle',
+        'textures_srcrec_dstrec',
+        'textures_to_image',
+        'textures_raw_data',
+        'textures_formats_loading',
+        'textures_particles_trail_blending',
+        'textures_image_processing',
+        'textures_image_drawing',
+        'text_sprite_fonts',
+        'text_bmfont_ttf',
+        'text_rbmf_fonts',
+        'text_format_text',
+        'text_font_select',
+        'text_writing_anim',
+        'text_ttf_loading',
+        'text_bmfont_unordered',
+        'models_geometric_shapes',
+        'models_box_collisions',
+        'models_billboard',
+        'models_obj_loading',
+        'models_heightmap',
+        'models_cubicmap',
+        'shaders_model_shader',
+        'shaders_shapes_textures',
+        'shaders_custom_uniform',
+        'shaders_postprocessing',
+        'shaders_standard_lighting',
+        'audio_sound_loading',
+        'audio_music_stream',
+        'audio_module_playing',
+        'audio_raw_stream'];
+
+    var exampleDesc = [
+        'basic window',
+        'input keys', 
+        'input mouse',
+        'mouse wheel',
+        'input gamepad',
+        'random values',
+        'color select',
+        'drop files',
+        'storage values',
+        'gestures detection',
+        '3d mode',
+        '3d picking',
+        '3d camera free',
+        '3d camera first person',
+        '2d camera',
+        'world screen',
+        'oculus rift',
+        'logo raylib shapes',
+        'basic shapes',
+        'colors palette',
+        'logo raylib anim',
+        'logo raylib texture',
+        'image loading',
+        'texture rectangle',
+        'src-dest. rectangles',
+        'texture to image',
+        'raw data loading',
+        'textures formats loading',
+        'particles trail blending',
+        'image processing',
+        'image drawing',
+        'sprite fonts',
+        'bmfonts ttf',
+        'rbmf fonts',
+        'text formatting',
+        'font selection',
+        'writing animation',
+        'ttf loading',
+        'bmfont unordered',
+        'geometric shapes',
+        'box collisions',
+        'billboard drawing',
+        'obj loading',
+        'heightmap loading',
+        'cubesmap loading',
+        'model shader',
+        'shapes textures shader',
+        'custom uniform in shaders',
+        'postprocessing shaders',
+        'standard lighting',
+        'sound loading',
+        'music streaming',
+        'module playing',
+        'raw stream'];
+
+    for (var i = 0; i < exampleName.length; i++)
+    {
+        var filterType = exampleName[i].substring(0, exampleName[i].indexOf("_"));
+
+        $('#container').append(
+            '<div class="mix f' + filterType + '">' +
+            '<a class="fancybox fancybox.iframe" href="examples/web/loader.html?name=' + exampleName[i] + '" title="' + exampleDesc[i] + '">' +
+            '<img width="400" height="225" src="../examples/img/' + exampleName[i] + '.png"><div class="extext"><p>' + exampleDesc[i] + '</p></div></a>' +
+            '</div>');
+
+        $('#container a .extext').hide();
+    }
+
+    // Instantiate MixItUp:
+	$('#container').mixItUp();
+
+    $("#container a").hover(
+        function(){ $(this).find(".extext").show(); },
+        function(){ $(this).find(".extext").hide(); });
+
+/*
+    $("#container a img").hover(
+        function() { $(this).stop().animate({ opacity:0.6 }, 200, "easeOutQuad" ); },
+        function() { $(this).stop().animate({ opacity:0 }, 200, "easeOutQuad" ); }
+    )
+*/
+});

+ 109 - 0
docs/common/js/games.js

@@ -0,0 +1,109 @@
+$(document).ready(function() {
+    
+    // Init fancybox
+    $('.fancybox').fancybox();
+
+    var exampleName = [ 
+        'sample_arkanoid',
+        'sample_missile_commander',
+        'sample_gorilas',
+        'sample_snake',
+        'sample_asteroids',
+        'sample_asteroids_survival',
+        'sample_pang',
+        'sample_space_invaders',
+        'sample_floppy',
+        'sample_tetris',
+        'sample_gold_fever',
+        'sample_doom',
+        'game_raylib_features',
+        'game_drturtle',
+        'game_just_do',
+        'game_skully_escape',
+        'game_koala_seasons',
+        'game_light_my_ritual',
+        'user_raymario',    
+        'user_crazyball',
+        'user_tictactoe',
+        'user_super_red_rope',
+        'user_taptojamp',    
+        'user_funwithsat'];
+
+    var exampleDesc = [
+        'arkanoid',
+        'missile commander',
+        'gorilas',
+        'snake',
+        'asteroids',
+        'asteroids survival',
+        'pang',
+        'space invaders',
+        'floppy',
+        'tetris',
+        'gold fever',
+        'doom',
+        'raylib Features DEMO',
+        'Dr Turtle & Mr Gamera',
+        'JUST DO',
+        'Skully Escape',
+        'Koala Seasons',
+        'LIGHT MY RITUAL',
+        'RayMario (Victor Fisac)',    
+        'CrazyBall (Victor Fisac)',
+        'Tic-Tac-Toe (LelixSuper)',
+        'Super Red Rope Puzzles (Kurnic)',
+        'TapToJAmp (MarcMDE)',    
+        'FunWithSATCollisions (MarcMDE)'];
+
+    for (var i = 0; i < exampleName.length; i++)
+    {
+        var filterType = exampleName[i].substring(0, exampleName[i].indexOf("_"));
+        
+        var linkTag;
+        
+        if (filterType == 'sample') linkTag = '<a class="fancybox fancybox.iframe" href="games/loader.html?name=' + exampleName[i] + '" title="' + exampleDesc[i] + '">';
+        else if (filterType == 'game') linkTag = '<a target="_blank" href="games/' + exampleName[i].substring(5) + '.html" title="' + exampleDesc[i] + '">';
+        else if (filterType == 'user')
+        {
+            switch (exampleName[i])
+            {
+                case 'user_raymario': linkTag = '<a target="_blank" href="https://github.com/victorfisac/RayMario" title="' + exampleDesc[i] + '">'; break;
+                case 'user_crazyball': linkTag = '<a target="_blank" href="https://github.com/victorfisac/CrazyBall" title="' + exampleDesc[i] + '">'; break;
+                case 'user_tictactoe': linkTag = '<a target="_blank" href="https://github.com/LelixSuper/TicTacToe" title="' + exampleDesc[i] + '">'; break;
+                case 'user_super_red_rope': linkTag = '<a target="_blank" href="https://kurnic.itch.io/super-red-rope-puzzles" title="' + exampleDesc[i] + '">'; break;
+                case 'user_taptojamp': linkTag = '<a target="_blank" href="http://marcmde.github.io/TapToJAmp_v2_0/" title="' + exampleDesc[i] + '">'; break;
+                case 'user_funwithsat': linkTag = '<a target="_blank" href="http://marcmde.github.io/FunWithSATCollisions_v_1_0_Browser/" title="' + exampleDesc[i] + '">'; break;
+                default: break;
+            }
+            /*
+            https://github.com/MarcMDE/TapToJump    //http://marcmde.github.io/TapToJump_v1_0_Browser/
+            https://github.com/MarcMDE/TapToJAmp    //http://marcmde.github.io/TapToJAmp_v2_0/
+            https://github.com/MarcMDE/FunWithSATCollisions //http://marcmde.github.io/FunWithSATCollisions_v_1_0_Browser/
+            https://kurnic.wordpress.com/portfolio/flappy-jetpack/
+            */
+        }
+        
+        if (exampleName[i] == 'game_koala_seasons') linkTag = '<a target="_blank" href="http://www.koalaseasons.com" title="' + exampleDesc[i] + '">';
+
+        $('#container').append(
+            '<div class="mix f' + filterType + '">' + linkTag +
+            '<img width="400" height="225" src="../games/img/' + exampleName[i] + '.png"><div class="extext"><p>' + exampleDesc[i] + '</p></div></a>' +
+            '</div>');
+
+        $('#container a .extext').hide();
+    }
+
+    // Instantiate MixItUp:
+	$('#container').mixItUp();
+
+    $("#container a").hover(
+        function(){ $(this).find(".extext").show(); },
+        function(){ $(this).find(".extext").hide(); });
+
+/*
+    $("#container a img").hover(
+        function() { $(this).stop().animate({ opacity:0.6 }, 200, "easeOutQuad" ); },
+        function() { $(this).stop().animate({ opacity:0 }, 200, "easeOutQuad" ); }
+    )
+*/
+});

BIN
docs/common/libs/fancybox/blank.gif


BIN
docs/common/libs/fancybox/fancybox_loading.gif


BIN
docs/common/libs/fancybox/[email protected]


BIN
docs/common/libs/fancybox/fancybox_overlay.png


BIN
docs/common/libs/fancybox/fancybox_sprite.png


BIN
docs/common/libs/fancybox/[email protected]


BIN
docs/common/libs/fancybox/helpers/fancybox_buttons.png


+ 97 - 0
docs/common/libs/fancybox/helpers/jquery.fancybox-buttons.css

@@ -0,0 +1,97 @@
+#fancybox-buttons {
+	position: fixed;
+	left: 0;
+	width: 100%;
+	z-index: 8050;
+}
+
+#fancybox-buttons.top {
+	top: 10px;
+}
+
+#fancybox-buttons.bottom {
+	bottom: 10px;
+}
+
+#fancybox-buttons ul {
+	display: block;
+	width: 166px;
+	height: 30px;
+	margin: 0 auto;
+	padding: 0;
+	list-style: none;
+	border: 1px solid #111;
+	border-radius: 3px;
+	-webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	   -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	        box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+	background: rgb(50,50,50);
+	background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
+	background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
+}
+
+#fancybox-buttons ul li {
+	float: left;
+	margin: 0;
+	padding: 0;
+}
+
+#fancybox-buttons a {
+	display: block;
+	width: 30px;
+	height: 30px;
+	text-indent: -9999px;
+	background-color: transparent;
+	background-image: url('fancybox_buttons.png');
+	background-repeat: no-repeat;
+	outline: none;
+	opacity: 0.8;
+}
+
+#fancybox-buttons a:hover {
+	opacity: 1;
+}
+
+#fancybox-buttons a.btnPrev {
+	background-position: 5px 0;
+}
+
+#fancybox-buttons a.btnNext {
+	background-position: -33px 0;
+	border-right: 1px solid #3e3e3e;
+}
+
+#fancybox-buttons a.btnPlay {
+	background-position: 0 -30px;
+}
+
+#fancybox-buttons a.btnPlayOn {
+	background-position: -30px -30px;
+}
+
+#fancybox-buttons a.btnToggle {
+	background-position: 3px -60px;
+	border-left: 1px solid #111;
+	border-right: 1px solid #3e3e3e;
+	width: 35px
+}
+
+#fancybox-buttons a.btnToggleOn {
+	background-position: -27px -60px;
+}
+
+#fancybox-buttons a.btnClose {
+	border-left: 1px solid #111;
+	width: 35px;
+	background-position: -56px 0px;
+}
+
+#fancybox-buttons a.btnDisabled {
+	opacity : 0.4;
+	cursor: default;
+}

+ 122 - 0
docs/common/libs/fancybox/helpers/jquery.fancybox-buttons.js

@@ -0,0 +1,122 @@
+ /*!
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             buttons: {
+ *                 position : 'top'
+ *             }
+ *         }
+ *     });
+ *
+ */
+(function ($) {
+	//Shortcut for fancyBox object
+	var F = $.fancybox;
+
+	//Add helper object
+	F.helpers.buttons = {
+		defaults : {
+			skipSingle : false, // disables if gallery contains single image
+			position   : 'top', // 'top' or 'bottom'
+			tpl        : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
+		},
+
+		list : null,
+		buttons: null,
+
+		beforeLoad: function (opts, obj) {
+			//Remove self if gallery do not have at least two items
+
+			if (opts.skipSingle && obj.group.length < 2) {
+				obj.helpers.buttons = false;
+				obj.closeBtn = true;
+
+				return;
+			}
+
+			//Increase top margin to give space for buttons
+			obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
+		},
+
+		onPlayStart: function () {
+			if (this.buttons) {
+				this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
+			}
+		},
+
+		onPlayEnd: function () {
+			if (this.buttons) {
+				this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
+			}
+		},
+
+		afterShow: function (opts, obj) {
+			var buttons = this.buttons;
+
+			if (!buttons) {
+				this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
+
+				buttons = {
+					prev   : this.list.find('.btnPrev').click( F.prev ),
+					next   : this.list.find('.btnNext').click( F.next ),
+					play   : this.list.find('.btnPlay').click( F.play ),
+					toggle : this.list.find('.btnToggle').click( F.toggle ),
+					close  : this.list.find('.btnClose').click( F.close )
+				}
+			}
+
+			//Prev
+			if (obj.index > 0 || obj.loop) {
+				buttons.prev.removeClass('btnDisabled');
+			} else {
+				buttons.prev.addClass('btnDisabled');
+			}
+
+			//Next / Play
+			if (obj.loop || obj.index < obj.group.length - 1) {
+				buttons.next.removeClass('btnDisabled');
+				buttons.play.removeClass('btnDisabled');
+
+			} else {
+				buttons.next.addClass('btnDisabled');
+				buttons.play.addClass('btnDisabled');
+			}
+
+			this.buttons = buttons;
+
+			this.onUpdate(opts, obj);
+		},
+
+		onUpdate: function (opts, obj) {
+			var toggle;
+
+			if (!this.buttons) {
+				return;
+			}
+
+			toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
+
+			//Size toggle button
+			if (obj.canShrink) {
+				toggle.addClass('btnToggleOn');
+
+			} else if (!obj.canExpand) {
+				toggle.addClass('btnDisabled');
+			}
+		},
+
+		beforeClose: function () {
+			if (this.list) {
+				this.list.remove();
+			}
+
+			this.list    = null;
+			this.buttons = null;
+		}
+	};
+
+}(jQuery));

+ 199 - 0
docs/common/libs/fancybox/helpers/jquery.fancybox-media.js

@@ -0,0 +1,199 @@
+/*!
+ * Media helper for fancyBox
+ * version: 1.0.6 (Fri, 14 Jun 2013)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             media: true
+ *         }
+ *     });
+ *
+ * Set custom URL parameters:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             media: {
+ *                 youtube : {
+ *                     params : {
+ *                         autoplay : 0
+ *                     }
+ *                 }
+ *             }
+ *         }
+ *     });
+ *
+ * Or:
+ *     $(".fancybox").fancybox({,
+ *         helpers : {
+ *             media: true
+ *         },
+ *         youtube : {
+ *             autoplay: 0
+ *         }
+ *     });
+ *
+ *  Supports:
+ *
+ *      Youtube
+ *          http://www.youtube.com/watch?v=opj24KnzrWo
+ *          http://www.youtube.com/embed/opj24KnzrWo
+ *          http://youtu.be/opj24KnzrWo
+ *			http://www.youtube-nocookie.com/embed/opj24KnzrWo
+ *      Vimeo
+ *          http://vimeo.com/40648169
+ *          http://vimeo.com/channels/staffpicks/38843628
+ *          http://vimeo.com/groups/surrealism/videos/36516384
+ *          http://player.vimeo.com/video/45074303
+ *      Metacafe
+ *          http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
+ *          http://www.metacafe.com/watch/7635964/
+ *      Dailymotion
+ *          http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
+ *      Twitvid
+ *          http://twitvid.com/QY7MD
+ *      Twitpic
+ *          http://twitpic.com/7p93st
+ *      Instagram
+ *          http://instagr.am/p/IejkuUGxQn/
+ *          http://instagram.com/p/IejkuUGxQn/
+ *      Google maps
+ *          http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
+ *          http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+ *          http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
+ */
+(function ($) {
+	"use strict";
+
+	//Shortcut for fancyBox object
+	var F = $.fancybox,
+		format = function( url, rez, params ) {
+			params = params || '';
+
+			if ( $.type( params ) === "object" ) {
+				params = $.param(params, true);
+			}
+
+			$.each(rez, function(key, value) {
+				url = url.replace( '$' + key, value || '' );
+			});
+
+			if (params.length) {
+				url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
+			}
+
+			return url;
+		};
+
+	//Add helper object
+	F.helpers.media = {
+		defaults : {
+			youtube : {
+				matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
+				params  : {
+					autoplay    : 1,
+					autohide    : 1,
+					fs          : 1,
+					rel         : 0,
+					hd          : 1,
+					wmode       : 'opaque',
+					enablejsapi : 1
+				},
+				type : 'iframe',
+				url  : '//www.youtube.com/embed/$3'
+			},
+			vimeo : {
+				matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
+				params  : {
+					autoplay      : 1,
+					hd            : 1,
+					show_title    : 1,
+					show_byline   : 1,
+					show_portrait : 0,
+					fullscreen    : 1
+				},
+				type : 'iframe',
+				url  : '//player.vimeo.com/video/$1'
+			},
+			metacafe : {
+				matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
+				params  : {
+					autoPlay : 'yes'
+				},
+				type : 'swf',
+				url  : function( rez, params, obj ) {
+					obj.swf.flashVars = 'playerVars=' + $.param( params, true );
+
+					return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
+				}
+			},
+			dailymotion : {
+				matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+				params  : {
+					additionalInfos : 0,
+					autoStart : 1
+				},
+				type : 'swf',
+				url  : '//www.dailymotion.com/swf/video/$1'
+			},
+			twitvid : {
+				matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
+				params  : {
+					autoplay : 0
+				},
+				type : 'iframe',
+				url  : '//www.twitvid.com/embed.php?guid=$1'
+			},
+			twitpic : {
+				matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
+				type : 'image',
+				url  : '//twitpic.com/show/full/$1/'
+			},
+			instagram : {
+				matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+				type : 'image',
+				url  : '//$1/p/$2/media/?size=l'
+			},
+			google_maps : {
+				matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
+				type : 'iframe',
+				url  : function( rez ) {
+					return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
+				}
+			}
+		},
+
+		beforeLoad : function(opts, obj) {
+			var url   = obj.href || '',
+				type  = false,
+				what,
+				item,
+				rez,
+				params;
+
+			for (what in opts) {
+				if (opts.hasOwnProperty(what)) {
+					item = opts[ what ];
+					rez  = url.match( item.matcher );
+
+					if (rez) {
+						type   = item.type;
+						params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
+
+						url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
+
+						break;
+					}
+				}
+			}
+
+			if (type) {
+				obj.href = url;
+				obj.type = type;
+
+				obj.autoHeight = false;
+			}
+		}
+	};
+
+}(jQuery));

+ 55 - 0
docs/common/libs/fancybox/helpers/jquery.fancybox-thumbs.css

@@ -0,0 +1,55 @@
+#fancybox-thumbs {
+	position: fixed;
+	left: 0;
+	width: 100%;
+	overflow: hidden;
+	z-index: 8050;
+}
+
+#fancybox-thumbs.bottom {
+	bottom: 2px;
+}
+
+#fancybox-thumbs.top {
+	top: 2px;
+}
+
+#fancybox-thumbs ul {
+	position: relative;
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+#fancybox-thumbs ul li {
+	float: left;
+	padding: 1px;
+	opacity: 0.5;
+}
+
+#fancybox-thumbs ul li.active {
+	opacity: 0.75;
+	padding: 0;
+	border: 1px solid #fff;
+}
+
+#fancybox-thumbs ul li:hover {
+	opacity: 1;
+}
+
+#fancybox-thumbs ul li a {
+	display: block;
+	position: relative;
+	overflow: hidden;
+	border: 1px solid #222;
+	background: #111;
+	outline: none;
+}
+
+#fancybox-thumbs ul li img {
+	display: block;
+	position: relative;
+	border: 0;
+	padding: 0;
+	max-width: none;
+}

+ 162 - 0
docs/common/libs/fancybox/helpers/jquery.fancybox-thumbs.js

@@ -0,0 +1,162 @@
+ /*!
+ * Thumbnail helper for fancyBox
+ * version: 1.0.7 (Mon, 01 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ *     $(".fancybox").fancybox({
+ *         helpers : {
+ *             thumbs: {
+ *                 width  : 50,
+ *                 height : 50
+ *             }
+ *         }
+ *     });
+ *
+ */
+(function ($) {
+	//Shortcut for fancyBox object
+	var F = $.fancybox;
+
+	//Add helper object
+	F.helpers.thumbs = {
+		defaults : {
+			width    : 50,       // thumbnail width
+			height   : 50,       // thumbnail height
+			position : 'bottom', // 'top' or 'bottom'
+			source   : function ( item ) {  // function to obtain the URL of the thumbnail image
+				var href;
+
+				if (item.element) {
+					href = $(item.element).find('img').attr('src');
+				}
+
+				if (!href && item.type === 'image' && item.href) {
+					href = item.href;
+				}
+
+				return href;
+			}
+		},
+
+		wrap  : null,
+		list  : null,
+		width : 0,
+
+		init: function (opts, obj) {
+			var that = this,
+				list,
+				thumbWidth  = opts.width,
+				thumbHeight = opts.height,
+				thumbSource = opts.source;
+
+			//Build list structure
+			list = '';
+
+			for (var n = 0; n < obj.group.length; n++) {
+				list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
+			}
+
+			this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body');
+			this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);
+
+			//Load each thumbnail
+			$.each(obj.group, function (i) {
+				var href = thumbSource( obj.group[ i ] );
+
+				if (!href) {
+					return;
+				}
+
+				$("<img />").load(function () {
+					var width  = this.width,
+						height = this.height,
+						widthRatio, heightRatio, parent;
+
+					if (!that.list || !width || !height) {
+						return;
+					}
+
+					//Calculate thumbnail width/height and center it
+					widthRatio  = width / thumbWidth;
+					heightRatio = height / thumbHeight;
+
+					parent = that.list.children().eq(i).find('a');
+
+					if (widthRatio >= 1 && heightRatio >= 1) {
+						if (widthRatio > heightRatio) {
+							width  = Math.floor(width / heightRatio);
+							height = thumbHeight;
+
+						} else {
+							width  = thumbWidth;
+							height = Math.floor(height / widthRatio);
+						}
+					}
+
+					$(this).css({
+						width  : width,
+						height : height,
+						top    : Math.floor(thumbHeight / 2 - height / 2),
+						left   : Math.floor(thumbWidth / 2 - width / 2)
+					});
+
+					parent.width(thumbWidth).height(thumbHeight);
+
+					$(this).hide().appendTo(parent).fadeIn(300);
+
+				}).attr('src', href);
+			});
+
+			//Set initial width
+			this.width = this.list.children().eq(0).outerWidth(true);
+
+			this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
+		},
+
+		beforeLoad: function (opts, obj) {
+			//Remove self if gallery do not have at least two items
+			if (obj.group.length < 2) {
+				obj.helpers.thumbs = false;
+
+				return;
+			}
+
+			//Increase bottom margin to give space for thumbs
+			obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
+		},
+
+		afterShow: function (opts, obj) {
+			//Check if exists and create or update list
+			if (this.list) {
+				this.onUpdate(opts, obj);
+
+			} else {
+				this.init(opts, obj);
+			}
+
+			//Set active element
+			this.list.children().removeClass('active').eq(obj.index).addClass('active');
+		},
+
+		//Center list
+		onUpdate: function (opts, obj) {
+			if (this.list) {
+				this.list.stop(true).animate({
+					'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
+				}, 150);
+			}
+		},
+
+		beforeClose: function () {
+			if (this.wrap) {
+				this.wrap.remove();
+			}
+
+			this.wrap  = null;
+			this.list  = null;
+			this.width = 0;
+		}
+	}
+
+}(jQuery));

+ 284 - 0
docs/common/libs/fancybox/jquery.fancybox.css

@@ -0,0 +1,284 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+.fancybox-wrap,
+.fancybox-skin,
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-image,
+.fancybox-wrap iframe,
+.fancybox-wrap object,
+.fancybox-nav,
+.fancybox-nav span,
+.fancybox-tmp
+{
+	padding: 0;
+	margin: 0;
+	border: 0;
+	outline: none;
+	vertical-align: top;
+}
+
+/* Ray: modified for raylib examples */
+.fancybox-inner
+{
+    overflow: hidden!important;
+    min-height: 520px!important;
+}
+
+/* Ray: modified for raylib examples */
+.fancybox-wrap {
+    width: 860px!important;
+}
+
+.fancybox-wrap {
+	position: absolute;
+	top: 0;
+	left: 0;
+	z-index: 8020;
+	border: 4px solid;
+}
+
+.fancybox-skin {
+	position: relative;
+	background: #f9f9f9;
+	color: #444;
+	text-shadow: none;
+}
+
+.fancybox-opened {
+	z-index: 8030;
+}
+
+.fancybox-opened .fancybox-skin {
+	-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	   -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+	        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+}
+
+.fancybox-outer, .fancybox-inner {
+	position: relative;
+}
+
+/* Ray: modified for raylib examples */
+.fancybox-inner {
+	overflow: hidden;
+    width: 850px!important;     
+}
+
+.fancybox-type-iframe .fancybox-inner {
+	-webkit-overflow-scrolling: touch;
+}
+
+.fancybox-error {
+	color: #444;
+	font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	margin: 0;
+	padding: 15px;
+	white-space: nowrap;
+}
+
+/* Ray: modified for raylib examples */
+.fancybox-image, .fancybox-iframe {
+	display: block;
+	width: 830px;      
+	height: 100%;
+}
+
+.fancybox-image {
+	max-width: 100%;
+	max-height: 100%;
+}
+
+#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+	background-image: url('fancybox_sprite.png');
+}
+
+#fancybox-loading {
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	margin-top: -22px;
+	margin-left: -22px;
+	background-position: 0 -108px;
+	opacity: 0.8;
+	cursor: pointer;
+	z-index: 8060;
+}
+
+#fancybox-loading div {
+	width: 44px;
+	height: 44px;
+	background: url('fancybox_loading.gif') center center no-repeat;
+}
+
+.fancybox-close {
+	position: absolute;
+	top: -18px;
+	right: -18px;
+	width: 36px;
+	height: 36px;
+	cursor: pointer;
+	z-index: 8040;
+}
+
+.fancybox-nav {
+	position: absolute;
+	top: 0;
+	width: 40%;
+	height: 100%;
+	cursor: pointer;
+	text-decoration: none;
+	background: transparent url('blank.gif'); /* helps IE */
+	-webkit-tap-highlight-color: rgba(0,0,0,0);
+	z-index: 8040;
+}
+
+.fancybox-prev {
+	left: 0;
+}
+
+.fancybox-next {
+	right: 0;
+}
+
+.fancybox-nav span {
+	position: absolute;
+	top: 50%;
+	width: 36px;
+	height: 34px;
+	margin-top: -18px;
+	cursor: pointer;
+	z-index: 8040;
+	visibility: hidden;
+}
+
+.fancybox-prev span {
+	left: 10px;
+	background-position: 0 -36px;
+}
+
+.fancybox-next span {
+	right: 10px;
+	background-position: 0 -72px;
+}
+
+.fancybox-nav:hover span {
+	visibility: visible;
+}
+
+.fancybox-tmp {
+	position: absolute;
+	top: -99999px;
+	left: -99999px;
+	visibility: hidden;
+	max-width: 99999px;
+	max-height: 99999px;
+	overflow: visible !important;
+}
+
+/* Overlay helper */
+
+.fancybox-lock {
+    overflow: hidden !important;
+    width: auto;
+}
+
+.fancybox-lock body {
+    overflow: hidden !important;
+}
+
+.fancybox-lock-test {
+    overflow-y: hidden !important;
+}
+
+.fancybox-overlay {
+	position: absolute;
+	top: 0;
+	left: 0;
+	overflow: hidden;
+	display: none;
+	z-index: 8010;
+	background: url('fancybox_overlay.png');
+}
+
+.fancybox-overlay-fixed {
+	position: fixed;
+	bottom: 0;
+	right: 0;
+}
+
+.fancybox-lock .fancybox-overlay {
+	overflow: auto;
+	overflow-y: scroll;
+}
+
+/* Title helper */
+
+.fancybox-title {
+	visibility: hidden;
+	font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+	position: relative;
+	text-shadow: none;
+	z-index: 8050;
+}
+
+.fancybox-opened .fancybox-title {
+	visibility: visible;
+}
+
+.fancybox-title-float-wrap {
+	position: absolute;
+	bottom: 0;
+	right: 50%;
+	margin-bottom: -35px;
+	z-index: 8050;
+	text-align: center;
+}
+
+.fancybox-title-float-wrap .child {
+	display: inline-block;
+	margin-right: -100%;
+	padding: 2px 20px;
+	background: transparent; /* Fallback for web browsers that doesn't support RGBa */
+	background: rgba(0, 0, 0, 0.8);
+	text-shadow: 0 1px 2px #222;
+	color: #FFF;
+	font-size: 10px;
+	line-height: 24px;
+	white-space: nowrap;
+}
+
+.fancybox-title-outside-wrap {
+	position: relative;
+	margin-top: 10px;
+	color: #fff;
+}
+
+.fancybox-title-inside-wrap {
+	padding-top: 10px;
+}
+
+.fancybox-title-over-wrap {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	color: #fff;
+	padding: 10px;
+	background: #000;
+	background: rgba(0, 0, 0, .8);
+}
+
+/*Retina graphics!*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+	   only screen and (min--moz-device-pixel-ratio: 1.5),
+	   only screen and (min-device-pixel-ratio: 1.5){
+
+	#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+		background-image: url('[email protected]');
+		background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
+	}
+
+	#fancybox-loading div {
+		background-image: url('[email protected]');
+		background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
+	}
+}

+ 2020 - 0
docs/common/libs/fancybox/jquery.fancybox.js

@@ -0,0 +1,2020 @@
+/*!
+ * fancyBox - jQuery Plugin
+ * version: 2.1.5 (Fri, 14 Jun 2013)
+ * @requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - [email protected]
+ *
+ */
+
+(function (window, document, $, undefined) {
+	"use strict";
+
+	var H = $("html"),
+		W = $(window),
+		D = $(document),
+		F = $.fancybox = function () {
+			F.open.apply( this, arguments );
+		},
+		IE =  navigator.userAgent.match(/msie/i),
+		didUpdate	= null,
+		isTouch		= document.createTouch !== undefined,
+
+		isQuery	= function(obj) {
+			return obj && obj.hasOwnProperty && obj instanceof $;
+		},
+		isString = function(str) {
+			return str && $.type(str) === "string";
+		},
+		isPercentage = function(str) {
+			return isString(str) && str.indexOf('%') > 0;
+		},
+		isScrollable = function(el) {
+			return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
+		},
+		getScalar = function(orig, dim) {
+			var value = parseInt(orig, 10) || 0;
+
+			if (dim && isPercentage(orig)) {
+				value = F.getViewport()[ dim ] / 100 * value;
+			}
+
+			return Math.ceil(value);
+		},
+		getValue = function(value, dim) {
+			return getScalar(value, dim) + 'px';
+		};
+
+	$.extend(F, {
+		// The current version of fancyBox
+		version: '2.1.5',
+
+		defaults: {
+			padding : 15,
+			margin  : 20,
+
+			width     : 800,
+			height    : 600,
+			minWidth  : 100,
+			minHeight : 100,
+			maxWidth  : 9999,
+			maxHeight : 9999,
+			pixelRatio: 1, // Set to 2 for retina display support
+
+			autoSize   : true,
+			autoHeight : false,
+			autoWidth  : false,
+
+			autoResize  : true,
+			autoCenter  : !isTouch,
+			fitToView   : true,
+			aspectRatio : false,
+			topRatio    : 0.5,
+			leftRatio   : 0.5,
+
+			scrolling : 'auto', // 'auto', 'yes' or 'no'
+			wrapCSS   : '',
+
+			arrows     : true,
+			closeBtn   : true,
+			closeClick : false,
+			nextClick  : false,
+			mouseWheel : true,
+			autoPlay   : false,
+			playSpeed  : 3000,
+			preload    : 3,
+			modal      : false,
+			loop       : true,
+
+			ajax  : {
+				dataType : 'html',
+				headers  : { 'X-fancyBox': true }
+			},
+			iframe : {
+				scrolling : 'auto',
+				preload   : true
+			},
+			swf : {
+				wmode: 'transparent',
+				allowfullscreen   : 'true',
+				allowscriptaccess : 'always'
+			},
+
+			keys  : {
+				next : {
+					13 : 'left', // enter
+					34 : 'up',   // page down
+					39 : 'left', // right arrow
+					40 : 'up'    // down arrow
+				},
+				prev : {
+					8  : 'right',  // backspace
+					33 : 'down',   // page up
+					37 : 'right',  // left arrow
+					38 : 'down'    // up arrow
+				},
+				close  : [27], // escape key
+				play   : [32], // space - start/stop slideshow
+				toggle : [70]  // letter "f" - toggle fullscreen
+			},
+
+			direction : {
+				next : 'left',
+				prev : 'right'
+			},
+
+			scrollOutside  : true,
+
+			// Override some properties
+			index   : 0,
+			type    : null,
+			href    : null,
+			content : null,
+			title   : null,
+
+			// HTML templates
+			tpl: {
+				wrap     : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
+				image    : '<img class="fancybox-image" src="{href}" alt="" />',
+				iframe   : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',
+				error    : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
+				closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
+				next     : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
+				prev     : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
+			},
+
+			// Properties for each animation type
+			// Opening fancyBox
+			openEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			openSpeed   : 250,
+			openEasing  : 'swing',
+			openOpacity : true,
+			openMethod  : 'zoomIn',
+
+			// Closing fancyBox
+			closeEffect  : 'fade', // 'elastic', 'fade' or 'none'
+			closeSpeed   : 250,
+			closeEasing  : 'swing',
+			closeOpacity : true,
+			closeMethod  : 'zoomOut',
+
+			// Changing next gallery item
+			nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			nextSpeed  : 250,
+			nextEasing : 'swing',
+			nextMethod : 'changeIn',
+
+			// Changing previous gallery item
+			prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
+			prevSpeed  : 250,
+			prevEasing : 'swing',
+			prevMethod : 'changeOut',
+
+			// Enable default helpers
+			helpers : {
+				overlay : true,
+				title   : true
+			},
+
+			// Callbacks
+			onCancel     : $.noop, // If canceling
+			beforeLoad   : $.noop, // Before loading
+			afterLoad    : $.noop, // After loading
+			beforeShow   : $.noop, // Before changing in current item
+			afterShow    : $.noop, // After opening
+			beforeChange : $.noop, // Before changing gallery item
+			beforeClose  : $.noop, // Before closing
+			afterClose   : $.noop  // After closing
+		},
+
+		//Current state
+		group    : {}, // Selected group
+		opts     : {}, // Group options
+		previous : null,  // Previous element
+		coming   : null,  // Element being loaded
+		current  : null,  // Currently loaded element
+		isActive : false, // Is activated
+		isOpen   : false, // Is currently open
+		isOpened : false, // Have been fully opened at least once
+
+		wrap  : null,
+		skin  : null,
+		outer : null,
+		inner : null,
+
+		player : {
+			timer    : null,
+			isActive : false
+		},
+
+		// Loaders
+		ajaxLoad   : null,
+		imgPreload : null,
+
+		// Some collections
+		transitions : {},
+		helpers     : {},
+
+		/*
+		 *	Static methods
+		 */
+
+		open: function (group, opts) {
+			if (!group) {
+				return;
+			}
+
+			if (!$.isPlainObject(opts)) {
+				opts = {};
+			}
+
+			// Close if already active
+			if (false === F.close(true)) {
+				return;
+			}
+
+			// Normalize group
+			if (!$.isArray(group)) {
+				group = isQuery(group) ? $(group).get() : [group];
+			}
+
+			// Recheck if the type of each element is `object` and set content type (image, ajax, etc)
+			$.each(group, function(i, element) {
+				var obj = {},
+					href,
+					title,
+					content,
+					type,
+					rez,
+					hrefParts,
+					selector;
+
+				if ($.type(element) === "object") {
+					// Check if is DOM element
+					if (element.nodeType) {
+						element = $(element);
+					}
+
+					if (isQuery(element)) {
+						obj = {
+							href    : element.data('fancybox-href') || element.attr('href'),
+							title   : element.data('fancybox-title') || element.attr('title'),
+							isDom   : true,
+							element : element
+						};
+
+						if ($.metadata) {
+							$.extend(true, obj, element.metadata());
+						}
+
+					} else {
+						obj = element;
+					}
+				}
+
+				href  = opts.href  || obj.href || (isString(element) ? element : null);
+				title = opts.title !== undefined ? opts.title : obj.title || '';
+
+				content = opts.content || obj.content;
+				type    = content ? 'html' : (opts.type  || obj.type);
+
+				if (!type && obj.isDom) {
+					type = element.data('fancybox-type');
+
+					if (!type) {
+						rez  = element.prop('class').match(/fancybox\.(\w+)/);
+						type = rez ? rez[1] : null;
+					}
+				}
+
+				if (isString(href)) {
+					// Try to guess the content type
+					if (!type) {
+						if (F.isImage(href)) {
+							type = 'image';
+
+						} else if (F.isSWF(href)) {
+							type = 'swf';
+
+						} else if (href.charAt(0) === '#') {
+							type = 'inline';
+
+						} else if (isString(element)) {
+							type    = 'html';
+							content = element;
+						}
+					}
+
+					// Split url into two pieces with source url and content selector, e.g,
+					// "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
+					if (type === 'ajax') {
+						hrefParts = href.split(/\s+/, 2);
+						href      = hrefParts.shift();
+						selector  = hrefParts.shift();
+					}
+				}
+
+				if (!content) {
+					if (type === 'inline') {
+						if (href) {
+							content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
+
+						} else if (obj.isDom) {
+							content = element;
+						}
+
+					} else if (type === 'html') {
+						content = href;
+
+					} else if (!type && !href && obj.isDom) {
+						type    = 'inline';
+						content = element;
+					}
+				}
+
+				$.extend(obj, {
+					href     : href,
+					type     : type,
+					content  : content,
+					title    : title,
+					selector : selector
+				});
+
+				group[ i ] = obj;
+			});
+
+			// Extend the defaults
+			F.opts = $.extend(true, {}, F.defaults, opts);
+
+			// All options are merged recursive except keys
+			if (opts.keys !== undefined) {
+				F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
+			}
+
+			F.group = group;
+
+			return F._start(F.opts.index);
+		},
+
+		// Cancel image loading or abort ajax request
+		cancel: function () {
+			var coming = F.coming;
+
+			if (!coming || false === F.trigger('onCancel')) {
+				return;
+			}
+
+			F.hideLoading();
+
+			if (F.ajaxLoad) {
+				F.ajaxLoad.abort();
+			}
+
+			F.ajaxLoad = null;
+
+			if (F.imgPreload) {
+				F.imgPreload.onload = F.imgPreload.onerror = null;
+			}
+
+			if (coming.wrap) {
+				coming.wrap.stop(true, true).trigger('onReset').remove();
+			}
+
+			F.coming = null;
+
+			// If the first item has been canceled, then clear everything
+			if (!F.current) {
+				F._afterZoomOut( coming );
+			}
+		},
+
+		// Start closing animation if is open; remove immediately if opening/closing
+		close: function (event) {
+			F.cancel();
+
+			if (false === F.trigger('beforeClose')) {
+				return;
+			}
+
+			F.unbindEvents();
+
+			if (!F.isActive) {
+				return;
+			}
+
+			if (!F.isOpen || event === true) {
+				$('.fancybox-wrap').stop(true).trigger('onReset').remove();
+
+				F._afterZoomOut();
+
+			} else {
+				F.isOpen = F.isOpened = false;
+				F.isClosing = true;
+
+				$('.fancybox-item, .fancybox-nav').remove();
+
+				F.wrap.stop(true, true).removeClass('fancybox-opened');
+
+				F.transitions[ F.current.closeMethod ]();
+			}
+		},
+
+		// Manage slideshow:
+		//   $.fancybox.play(); - toggle slideshow
+		//   $.fancybox.play( true ); - start
+		//   $.fancybox.play( false ); - stop
+		play: function ( action ) {
+			var clear = function () {
+					clearTimeout(F.player.timer);
+				},
+				set = function () {
+					clear();
+
+					if (F.current && F.player.isActive) {
+						F.player.timer = setTimeout(F.next, F.current.playSpeed);
+					}
+				},
+				stop = function () {
+					clear();
+
+					D.unbind('.player');
+
+					F.player.isActive = false;
+
+					F.trigger('onPlayEnd');
+				},
+				start = function () {
+					if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
+						F.player.isActive = true;
+
+						D.bind({
+							'onCancel.player beforeClose.player' : stop,
+							'onUpdate.player'   : set,
+							'beforeLoad.player' : clear
+						});
+
+						set();
+
+						F.trigger('onPlayStart');
+					}
+				};
+
+			if (action === true || (!F.player.isActive && action !== false)) {
+				start();
+			} else {
+				stop();
+			}
+		},
+
+		// Navigate to next gallery item
+		next: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.next;
+				}
+
+				F.jumpto(current.index + 1, direction, 'next');
+			}
+		},
+
+		// Navigate to previous gallery item
+		prev: function ( direction ) {
+			var current = F.current;
+
+			if (current) {
+				if (!isString(direction)) {
+					direction = current.direction.prev;
+				}
+
+				F.jumpto(current.index - 1, direction, 'prev');
+			}
+		},
+
+		// Navigate to gallery item by index
+		jumpto: function ( index, direction, router ) {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			index = getScalar(index);
+
+			F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
+			F.router    = router || 'jumpto';
+
+			if (current.loop) {
+				if (index < 0) {
+					index = current.group.length + (index % current.group.length);
+				}
+
+				index = index % current.group.length;
+			}
+
+			if (current.group[ index ] !== undefined) {
+				F.cancel();
+
+				F._start(index);
+			}
+		},
+
+		// Center inside viewport and toggle position type to fixed or absolute if needed
+		reposition: function (e, onlyAbsolute) {
+			var current = F.current,
+				wrap    = current ? current.wrap : null,
+				pos;
+
+			if (wrap) {
+				pos = F._getPosition(onlyAbsolute);
+
+				if (e && e.type === 'scroll') {
+					delete pos.position;
+
+					wrap.stop(true, true).animate(pos, 200);
+
+				} else {
+					wrap.css(pos);
+
+					current.pos = $.extend({}, current.dim, pos);
+				}
+			}
+		},
+
+		update: function (e) {
+			var type = (e && e.type),
+				anyway = !type || type === 'orientationchange';
+
+			if (anyway) {
+				clearTimeout(didUpdate);
+
+				didUpdate = null;
+			}
+
+			if (!F.isOpen || didUpdate) {
+				return;
+			}
+
+			didUpdate = setTimeout(function() {
+				var current = F.current;
+
+				if (!current || F.isClosing) {
+					return;
+				}
+
+				F.wrap.removeClass('fancybox-tmp');
+
+				if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
+					F._setDimension();
+				}
+
+				if (!(type === 'scroll' && current.canShrink)) {
+					F.reposition(e);
+				}
+
+				F.trigger('onUpdate');
+
+				didUpdate = null;
+
+			}, (anyway && !isTouch ? 0 : 300));
+		},
+
+		// Shrink content to fit inside viewport or restore if resized
+		toggle: function ( action ) {
+			if (F.isOpen) {
+				F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
+
+				// Help browser to restore document dimensions
+				if (isTouch) {
+					F.wrap.removeAttr('style').addClass('fancybox-tmp');
+
+					F.trigger('onUpdate');
+				}
+
+				F.update();
+			}
+		},
+
+		hideLoading: function () {
+			D.unbind('.loading');
+
+			$('#fancybox-loading').remove();
+		},
+
+		showLoading: function () {
+			var el, viewport;
+
+			F.hideLoading();
+
+			el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
+
+			// If user will press the escape-button, the request will be canceled
+			D.bind('keydown.loading', function(e) {
+				if ((e.which || e.keyCode) === 27) {
+					e.preventDefault();
+
+					F.cancel();
+				}
+			});
+
+			if (!F.defaults.fixed) {
+				viewport = F.getViewport();
+
+				el.css({
+					position : 'absolute',
+					top  : (viewport.h * 0.5) + viewport.y,
+					left : (viewport.w * 0.5) + viewport.x
+				});
+			}
+		},
+
+		getViewport: function () {
+			var locked = (F.current && F.current.locked) || false,
+				rez    = {
+					x: W.scrollLeft(),
+					y: W.scrollTop()
+				};
+
+			if (locked) {
+				rez.w = locked[0].clientWidth;
+				rez.h = locked[0].clientHeight;
+
+			} else {
+				// See http://bugs.jquery.com/ticket/6724
+				rez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();
+				rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
+			}
+
+			return rez;
+		},
+
+		// Unbind the keyboard / clicking actions
+		unbindEvents: function () {
+			if (F.wrap && isQuery(F.wrap)) {
+				F.wrap.unbind('.fb');
+			}
+
+			D.unbind('.fb');
+			W.unbind('.fb');
+		},
+
+		bindEvents: function () {
+			var current = F.current,
+				keys;
+
+			if (!current) {
+				return;
+			}
+
+			// Changing document height on iOS devices triggers a 'resize' event,
+			// that can change document height... repeating infinitely
+			W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
+
+			keys = current.keys;
+
+			if (keys) {
+				D.bind('keydown.fb', function (e) {
+					var code   = e.which || e.keyCode,
+						target = e.target || e.srcElement;
+
+					// Skip esc key if loading, because showLoading will cancel preloading
+					if (code === 27 && F.coming) {
+						return false;
+					}
+
+					// Ignore key combinations and key events within form elements
+					if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
+						$.each(keys, function(i, val) {
+							if (current.group.length > 1 && val[ code ] !== undefined) {
+								F[ i ]( val[ code ] );
+
+								e.preventDefault();
+								return false;
+							}
+
+							if ($.inArray(code, val) > -1) {
+								F[ i ] ();
+
+								e.preventDefault();
+								return false;
+							}
+						});
+					}
+				});
+			}
+
+			if ($.fn.mousewheel && current.mouseWheel) {
+				F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
+					var target = e.target || null,
+						parent = $(target),
+						canScroll = false;
+
+					while (parent.length) {
+						if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
+							break;
+						}
+
+						canScroll = isScrollable( parent[0] );
+						parent    = $(parent).parent();
+					}
+
+					if (delta !== 0 && !canScroll) {
+						if (F.group.length > 1 && !current.canShrink) {
+							if (deltaY > 0 || deltaX > 0) {
+								F.prev( deltaY > 0 ? 'down' : 'left' );
+
+							} else if (deltaY < 0 || deltaX < 0) {
+								F.next( deltaY < 0 ? 'up' : 'right' );
+							}
+
+							e.preventDefault();
+						}
+					}
+				});
+			}
+		},
+
+		trigger: function (event, o) {
+			var ret, obj = o || F.coming || F.current;
+
+			if (!obj) {
+				return;
+			}
+
+			if ($.isFunction( obj[event] )) {
+				ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+			}
+
+			if (ret === false) {
+				return false;
+			}
+
+			if (obj.helpers) {
+				$.each(obj.helpers, function (helper, opts) {
+					if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+						F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
+					}
+				});
+			}
+
+			D.trigger(event);
+		},
+
+		isImage: function (str) {
+			return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+		},
+
+		isSWF: function (str) {
+			return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
+		},
+
+		_start: function (index) {
+			var coming = {},
+				obj,
+				href,
+				type,
+				margin,
+				padding;
+
+			index = getScalar( index );
+			obj   = F.group[ index ] || null;
+
+			if (!obj) {
+				return false;
+			}
+
+			coming = $.extend(true, {}, F.opts, obj);
+
+			// Convert margin and padding properties to array - top, right, bottom, left
+			margin  = coming.margin;
+			padding = coming.padding;
+
+			if ($.type(margin) === 'number') {
+				coming.margin = [margin, margin, margin, margin];
+			}
+
+			if ($.type(padding) === 'number') {
+				coming.padding = [padding, padding, padding, padding];
+			}
+
+			// 'modal' propery is just a shortcut
+			if (coming.modal) {
+				$.extend(true, coming, {
+					closeBtn   : false,
+					closeClick : false,
+					nextClick  : false,
+					arrows     : false,
+					mouseWheel : false,
+					keys       : null,
+					helpers: {
+						overlay : {
+							closeClick : false
+						}
+					}
+				});
+			}
+
+			// 'autoSize' property is a shortcut, too
+			if (coming.autoSize) {
+				coming.autoWidth = coming.autoHeight = true;
+			}
+
+			if (coming.width === 'auto') {
+				coming.autoWidth = true;
+			}
+
+			if (coming.height === 'auto') {
+				coming.autoHeight = true;
+			}
+
+			/*
+			 * Add reference to the group, so it`s possible to access from callbacks, example:
+			 * afterLoad : function() {
+			 *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
+			 * }
+			 */
+
+			coming.group  = F.group;
+			coming.index  = index;
+
+			// Give a chance for callback or helpers to update coming item (type, title, etc)
+			F.coming = coming;
+
+			if (false === F.trigger('beforeLoad')) {
+				F.coming = null;
+
+				return;
+			}
+
+			type = coming.type;
+			href = coming.href;
+
+			if (!type) {
+				F.coming = null;
+
+				//If we can not determine content type then drop silently or display next/prev item if looping through gallery
+				if (F.current && F.router && F.router !== 'jumpto') {
+					F.current.index = index;
+
+					return F[ F.router ]( F.direction );
+				}
+
+				return false;
+			}
+
+			F.isActive = true;
+
+			if (type === 'image' || type === 'swf') {
+				coming.autoHeight = coming.autoWidth = false;
+				coming.scrolling  = 'visible';
+			}
+
+			if (type === 'image') {
+				coming.aspectRatio = true;
+			}
+
+			if (type === 'iframe' && isTouch) {
+				coming.scrolling = 'scroll';
+			}
+
+			// Build the neccessary markup
+			coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
+
+			$.extend(coming, {
+				skin  : $('.fancybox-skin',  coming.wrap),
+				outer : $('.fancybox-outer', coming.wrap),
+				inner : $('.fancybox-inner', coming.wrap)
+			});
+
+			$.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
+				coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
+			});
+
+			F.trigger('onReady');
+
+			// Check before try to load; 'inline' and 'html' types need content, others - href
+			if (type === 'inline' || type === 'html') {
+				if (!coming.content || !coming.content.length) {
+					return F._error( 'content' );
+				}
+
+			} else if (!href) {
+				return F._error( 'href' );
+			}
+
+			if (type === 'image') {
+				F._loadImage();
+
+			} else if (type === 'ajax') {
+				F._loadAjax();
+
+			} else if (type === 'iframe') {
+				F._loadIframe();
+
+			} else {
+				F._afterLoad();
+			}
+		},
+
+		_error: function ( type ) {
+			$.extend(F.coming, {
+				type       : 'html',
+				autoWidth  : true,
+				autoHeight : true,
+				minWidth   : 0,
+				minHeight  : 0,
+				scrolling  : 'no',
+				hasError   : type,
+				content    : F.coming.tpl.error
+			});
+
+			F._afterLoad();
+		},
+
+		_loadImage: function () {
+			// Reset preload image so it is later possible to check "complete" property
+			var img = F.imgPreload = new Image();
+
+			img.onload = function () {
+				this.onload = this.onerror = null;
+
+				F.coming.width  = this.width / F.opts.pixelRatio;
+				F.coming.height = this.height / F.opts.pixelRatio;
+
+				F._afterLoad();
+			};
+
+			img.onerror = function () {
+				this.onload = this.onerror = null;
+
+				F._error( 'image' );
+			};
+
+			img.src = F.coming.href;
+
+			if (img.complete !== true) {
+				F.showLoading();
+			}
+		},
+
+		_loadAjax: function () {
+			var coming = F.coming;
+
+			F.showLoading();
+
+			F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
+				url: coming.href,
+				error: function (jqXHR, textStatus) {
+					if (F.coming && textStatus !== 'abort') {
+						F._error( 'ajax', jqXHR );
+
+					} else {
+						F.hideLoading();
+					}
+				},
+				success: function (data, textStatus) {
+					if (textStatus === 'success') {
+						coming.content = data;
+
+						F._afterLoad();
+					}
+				}
+			}));
+		},
+
+		_loadIframe: function() {
+			var coming = F.coming,
+				iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
+					.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
+					.attr('src', coming.href);
+
+			// This helps IE
+			$(coming.wrap).bind('onReset', function () {
+				try {
+					$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
+				} catch (e) {}
+			});
+
+			if (coming.iframe.preload) {
+				F.showLoading();
+
+				iframe.one('load', function() {
+					$(this).data('ready', 1);
+
+					// iOS will lose scrolling if we resize
+					if (!isTouch) {
+						$(this).bind('load.fb', F.update);
+					}
+
+					// Without this trick:
+					//   - iframe won't scroll on iOS devices
+					//   - IE7 sometimes displays empty iframe
+					$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
+
+					F._afterLoad();
+				});
+			}
+
+			coming.content = iframe.appendTo( coming.inner );
+
+			if (!coming.iframe.preload) {
+				F._afterLoad();
+			}
+		},
+
+		_preloadImages: function() {
+			var group   = F.group,
+				current = F.current,
+				len     = group.length,
+				cnt     = current.preload ? Math.min(current.preload, len - 1) : 0,
+				item,
+				i;
+
+			for (i = 1; i <= cnt; i += 1) {
+				item = group[ (current.index + i ) % len ];
+
+				if (item.type === 'image' && item.href) {
+					new Image().src = item.href;
+				}
+			}
+		},
+
+		_afterLoad: function () {
+			var coming   = F.coming,
+				previous = F.current,
+				placeholder = 'fancybox-placeholder',
+				current,
+				content,
+				type,
+				scrolling,
+				href,
+				embed;
+
+			F.hideLoading();
+
+			if (!coming || F.isActive === false) {
+				return;
+			}
+
+			if (false === F.trigger('afterLoad', coming, previous)) {
+				coming.wrap.stop(true).trigger('onReset').remove();
+
+				F.coming = null;
+
+				return;
+			}
+
+			if (previous) {
+				F.trigger('beforeChange', previous);
+
+				previous.wrap.stop(true).removeClass('fancybox-opened')
+					.find('.fancybox-item, .fancybox-nav')
+					.remove();
+			}
+
+			F.unbindEvents();
+
+			current   = coming;
+			content   = coming.content;
+			type      = coming.type;
+			scrolling = coming.scrolling;
+
+			$.extend(F, {
+				wrap  : current.wrap,
+				skin  : current.skin,
+				outer : current.outer,
+				inner : current.inner,
+				current  : current,
+				previous : previous
+			});
+
+			href = current.href;
+
+			switch (type) {
+				case 'inline':
+				case 'ajax':
+				case 'html':
+					if (current.selector) {
+						content = $('<div>').html(content).find(current.selector);
+
+					} else if (isQuery(content)) {
+						if (!content.data(placeholder)) {
+							content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );
+						}
+
+						content = content.show().detach();
+
+						current.wrap.bind('onReset', function () {
+							if ($(this).find(content).length) {
+								content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+							}
+						});
+					}
+				break;
+
+				case 'image':
+					content = current.tpl.image.replace('{href}', href);
+				break;
+
+				case 'swf':
+					content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';
+					embed   = '';
+
+					$.each(current.swf, function(name, val) {
+						content += '<param name="' + name + '" value="' + val + '"></param>';
+						embed   += ' ' + name + '="' + val + '"';
+					});
+
+					content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';
+				break;
+			}
+
+			if (!(isQuery(content) && content.parent().is(current.inner))) {
+				current.inner.append( content );
+			}
+
+			// Give a chance for helpers or callbacks to update elements
+			F.trigger('beforeShow');
+
+			// Set scrolling before calculating dimensions
+			current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+			// Set initial dimensions and start position
+			F._setDimension();
+
+			F.reposition();
+
+			F.isOpen = false;
+			F.coming = null;
+
+			F.bindEvents();
+
+			if (!F.isOpened) {
+				$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+			} else if (previous.prevMethod) {
+				F.transitions[ previous.prevMethod ]();
+			}
+
+			F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+			F._preloadImages();
+		},
+
+		_setDimension: function () {
+			var viewport   = F.getViewport(),
+				steps      = 0,
+				canShrink  = false,
+				canExpand  = false,
+				wrap       = F.wrap,
+				skin       = F.skin,
+				inner      = F.inner,
+				current    = F.current,
+				width      = current.width,
+				height     = current.height,
+				minWidth   = current.minWidth,
+				minHeight  = current.minHeight,
+				maxWidth   = current.maxWidth,
+				maxHeight  = current.maxHeight,
+				scrolling  = current.scrolling,
+				scrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,
+				margin     = current.margin,
+				wMargin    = getScalar(margin[1] + margin[3]),
+				hMargin    = getScalar(margin[0] + margin[2]),
+				wPadding,
+				hPadding,
+				wSpace,
+				hSpace,
+				origWidth,
+				origHeight,
+				origMaxWidth,
+				origMaxHeight,
+				ratio,
+				width_,
+				height_,
+				maxWidth_,
+				maxHeight_,
+				iframe,
+				body;
+
+			// Reset dimensions so we could re-check actual size
+			wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+			wPadding = getScalar(skin.outerWidth(true)  - skin.width());
+			hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+			// Any space between content and viewport (margin, padding, border, title)
+			wSpace = wMargin + wPadding;
+			hSpace = hMargin + hPadding;
+
+			origWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;
+			origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+			if (current.type === 'iframe') {
+				iframe = current.content;
+
+				if (current.autoHeight && iframe.data('ready') === 1) {
+					try {
+						if (iframe[0].contentWindow.document.location) {
+							inner.width( origWidth ).height(9999);
+
+							body = iframe.contents().find('body');
+
+							if (scrollOut) {
+								body.css('overflow-x', 'hidden');
+							}
+
+							origHeight = body.outerHeight(true);
+						}
+
+					} catch (e) {}
+				}
+
+			} else if (current.autoWidth || current.autoHeight) {
+				inner.addClass( 'fancybox-tmp' );
+
+				// Set width or height in case we need to calculate only one dimension
+				if (!current.autoWidth) {
+					inner.width( origWidth );
+				}
+
+				if (!current.autoHeight) {
+					inner.height( origHeight );
+				}
+
+				if (current.autoWidth) {
+					origWidth = inner.width();
+				}
+
+				if (current.autoHeight) {
+					origHeight = inner.height();
+				}
+
+				inner.removeClass( 'fancybox-tmp' );
+			}
+
+			width  = getScalar( origWidth );
+			height = getScalar( origHeight );
+
+			ratio  = origWidth / origHeight;
+
+			// Calculations for the content
+			minWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+			maxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+			minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+			maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+			// These will be used to determine if wrap can fit in the viewport
+			origMaxWidth  = maxWidth;
+			origMaxHeight = maxHeight;
+
+			if (current.fitToView) {
+				maxWidth  = Math.min(viewport.w - wSpace, maxWidth);
+				maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+			}
+
+			maxWidth_  = viewport.w - wMargin;
+			maxHeight_ = viewport.h - hMargin;
+
+			if (current.aspectRatio) {
+				if (width > maxWidth) {
+					width  = maxWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height > maxHeight) {
+					height = maxHeight;
+					width  = getScalar(height * ratio);
+				}
+
+				if (width < minWidth) {
+					width  = minWidth;
+					height = getScalar(width / ratio);
+				}
+
+				if (height < minHeight) {
+					height = minHeight;
+					width  = getScalar(height * ratio);
+				}
+
+			} else {
+				width = Math.max(minWidth, Math.min(width, maxWidth));
+
+				if (current.autoHeight && current.type !== 'iframe') {
+					inner.width( width );
+
+					height = inner.height();
+				}
+
+				height = Math.max(minHeight, Math.min(height, maxHeight));
+			}
+
+			// Try to fit inside viewport (including the title)
+			if (current.fitToView) {
+				inner.width( width ).height( height );
+
+				wrap.width( width + wPadding );
+
+				// Real wrap dimensions
+				width_  = wrap.width();
+				height_ = wrap.height();
+
+				if (current.aspectRatio) {
+					while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+						if (steps++ > 19) {
+							break;
+						}
+
+						height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+						width  = getScalar(height * ratio);
+
+						if (width < minWidth) {
+							width  = minWidth;
+							height = getScalar(width / ratio);
+						}
+
+						if (width > maxWidth) {
+							width  = maxWidth;
+							height = getScalar(width / ratio);
+						}
+
+						inner.width( width ).height( height );
+
+						wrap.width( width + wPadding );
+
+						width_  = wrap.width();
+						height_ = wrap.height();
+					}
+
+				} else {
+					width  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));
+					height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+				}
+			}
+
+			if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+				width += scrollOut;
+			}
+
+			inner.width( width ).height( height );
+
+			wrap.width( width + wPadding );
+
+			width_  = wrap.width();
+			height_ = wrap.height();
+
+			canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+			canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+			$.extend(current, {
+				dim : {
+					width	: getValue( width_ ),
+					height	: getValue( height_ )
+				},
+				origWidth  : origWidth,
+				origHeight : origHeight,
+				canShrink  : canShrink,
+				canExpand  : canExpand,
+				wPadding   : wPadding,
+				hPadding   : hPadding,
+				wrapSpace  : height_ - skin.outerHeight(true),
+				skinSpace  : skin.height() - height
+			});
+
+			if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+				inner.height('auto');
+			}
+		},
+
+		_getPosition: function (onlyAbsolute) {
+			var current  = F.current,
+				viewport = F.getViewport(),
+				margin   = current.margin,
+				width    = F.wrap.width()  + margin[1] + margin[3],
+				height   = F.wrap.height() + margin[0] + margin[2],
+				rez      = {
+					position: 'absolute',
+					top  : margin[0],
+					left : margin[3]
+				};
+
+			if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+				rez.position = 'fixed';
+
+			} else if (!current.locked) {
+				rez.top  += viewport.y;
+				rez.left += viewport.x;
+			}
+
+			rez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));
+			rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));
+
+			return rez;
+		},
+
+		_afterZoomIn: function () {
+			var current = F.current;
+
+			if (!current) {
+				return;
+			}
+
+			F.isOpen = F.isOpened = true;
+
+			F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+
+			F.update();
+
+			// Assign a click event
+			if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+				F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+					if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+						e.preventDefault();
+
+						F[ current.closeClick ? 'close' : 'next' ]();
+					}
+				});
+			}
+
+			// Create a close button
+			if (current.closeBtn) {
+				$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+					e.preventDefault();
+
+					F.close();
+				});
+			}
+
+			// Create navigation arrows
+			if (current.arrows && F.group.length > 1) {
+				if (current.loop || current.index > 0) {
+					$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+				}
+
+				if (current.loop || current.index < F.group.length - 1) {
+					$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+				}
+			}
+
+			F.trigger('afterShow');
+
+			// Stop the slideshow if this is the last item
+			if (!current.loop && current.index === current.group.length - 1) {
+				F.play( false );
+
+			} else if (F.opts.autoPlay && !F.player.isActive) {
+				F.opts.autoPlay = false;
+
+				F.play();
+			}
+		},
+
+		_afterZoomOut: function ( obj ) {
+			obj = obj || F.current;
+
+			$('.fancybox-wrap').trigger('onReset').remove();
+
+			$.extend(F, {
+				group  : {},
+				opts   : {},
+				router : false,
+				current   : null,
+				isActive  : false,
+				isOpened  : false,
+				isOpen    : false,
+				isClosing : false,
+				wrap   : null,
+				skin   : null,
+				outer  : null,
+				inner  : null
+			});
+
+			F.trigger('afterClose', obj);
+		}
+	});
+
+	/*
+	 *	Default transitions
+	 */
+
+	F.transitions = {
+		getOrigPosition: function () {
+			var current  = F.current,
+				element  = current.element,
+				orig     = current.orig,
+				pos      = {},
+				width    = 50,
+				height   = 50,
+				hPadding = current.hPadding,
+				wPadding = current.wPadding,
+				viewport = F.getViewport();
+
+			if (!orig && current.isDom && element.is(':visible')) {
+				orig = element.find('img:first');
+
+				if (!orig.length) {
+					orig = element;
+				}
+			}
+
+			if (isQuery(orig)) {
+				pos = orig.offset();
+
+				if (orig.is('img')) {
+					width  = orig.outerWidth();
+					height = orig.outerHeight();
+				}
+
+			} else {
+				pos.top  = viewport.y + (viewport.h - height) * current.topRatio;
+				pos.left = viewport.x + (viewport.w - width)  * current.leftRatio;
+			}
+
+			if (F.wrap.css('position') === 'fixed' || current.locked) {
+				pos.top  -= viewport.y;
+				pos.left -= viewport.x;
+			}
+
+			pos = {
+				top     : getValue(pos.top  - hPadding * current.topRatio),
+				left    : getValue(pos.left - wPadding * current.leftRatio),
+				width   : getValue(width  + wPadding),
+				height  : getValue(height + hPadding)
+			};
+
+			return pos;
+		},
+
+		step: function (now, fx) {
+			var ratio,
+				padding,
+				value,
+				prop       = fx.prop,
+				current    = F.current,
+				wrapSpace  = current.wrapSpace,
+				skinSpace  = current.skinSpace;
+
+			if (prop === 'width' || prop === 'height') {
+				ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+				if (F.isClosing) {
+					ratio = 1 - ratio;
+				}
+
+				padding = prop === 'width' ? current.wPadding : current.hPadding;
+				value   = now - padding;
+
+				F.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );
+				F.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+			}
+		},
+
+		zoomIn: function () {
+			var current  = F.current,
+				startPos = current.pos,
+				effect   = current.openEffect,
+				elastic  = effect === 'elastic',
+				endPos   = $.extend({opacity : 1}, startPos);
+
+			// Remove "position" property that breaks older IE
+			delete endPos.position;
+
+			if (elastic) {
+				startPos = this.getOrigPosition();
+
+				if (current.openOpacity) {
+					startPos.opacity = 0.1;
+				}
+
+			} else if (effect === 'fade') {
+				startPos.opacity = 0.1;
+			}
+
+			F.wrap.css(startPos).animate(endPos, {
+				duration : effect === 'none' ? 0 : current.openSpeed,
+				easing   : current.openEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomIn
+			});
+		},
+
+		zoomOut: function () {
+			var current  = F.current,
+				effect   = current.closeEffect,
+				elastic  = effect === 'elastic',
+				endPos   = {opacity : 0.1};
+
+			if (elastic) {
+				endPos = this.getOrigPosition();
+
+				if (current.closeOpacity) {
+					endPos.opacity = 0.1;
+				}
+			}
+
+			F.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : current.closeSpeed,
+				easing   : current.closeEasing,
+				step     : elastic ? this.step : null,
+				complete : F._afterZoomOut
+			});
+		},
+
+		changeIn: function () {
+			var current   = F.current,
+				effect    = current.nextEffect,
+				startPos  = current.pos,
+				endPos    = { opacity : 1 },
+				direction = F.direction,
+				distance  = 200,
+				field;
+
+			startPos.opacity = 0.1;
+
+			if (effect === 'elastic') {
+				field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+				if (direction === 'down' || direction === 'right') {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+					endPos[ field ]   = '+=' + distance + 'px';
+
+				} else {
+					startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+					endPos[ field ]   = '-=' + distance + 'px';
+				}
+			}
+
+			// Workaround for http://bugs.jquery.com/ticket/12273
+			if (effect === 'none') {
+				F._afterZoomIn();
+
+			} else {
+				F.wrap.css(startPos).animate(endPos, {
+					duration : current.nextSpeed,
+					easing   : current.nextEasing,
+					complete : F._afterZoomIn
+				});
+			}
+		},
+
+		changeOut: function () {
+			var previous  = F.previous,
+				effect    = previous.prevEffect,
+				endPos    = { opacity : 0.1 },
+				direction = F.direction,
+				distance  = 200;
+
+			if (effect === 'elastic') {
+				endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+			}
+
+			previous.wrap.animate(endPos, {
+				duration : effect === 'none' ? 0 : previous.prevSpeed,
+				easing   : previous.prevEasing,
+				complete : function () {
+					$(this).trigger('onReset').remove();
+				}
+			});
+		}
+	};
+
+	/*
+	 *	Overlay helper
+	 */
+
+	F.helpers.overlay = {
+		defaults : {
+			closeClick : true,      // if true, fancyBox will be closed when user clicks on the overlay
+			speedOut   : 200,       // duration of fadeOut animation
+			showEarly  : true,      // indicates if should be opened immediately or wait until the content is ready
+			css        : {},        // custom CSS properties
+			locked     : !isTouch,  // if true, the content will be locked into overlay
+			fixed      : true       // if false, the overlay CSS position property will not be set to "fixed"
+		},
+
+		overlay : null,      // current handle
+		fixed   : false,     // indicates if the overlay has position "fixed"
+		el      : $('html'), // element that contains "the lock"
+
+		// Public methods
+		create : function(opts) {
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.close();
+			}
+
+			this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( F.coming ? F.coming.parent : opts.parent );
+			this.fixed   = false;
+
+			if (opts.fixed && F.defaults.fixed) {
+				this.overlay.addClass('fancybox-overlay-fixed');
+
+				this.fixed = true;
+			}
+		},
+
+		open : function(opts) {
+			var that = this;
+
+			opts = $.extend({}, this.defaults, opts);
+
+			if (this.overlay) {
+				this.overlay.unbind('.overlay').width('auto').height('auto');
+
+			} else {
+				this.create(opts);
+			}
+
+			if (!this.fixed) {
+				W.bind('resize.overlay', $.proxy( this.update, this) );
+
+				this.update();
+			}
+
+			if (opts.closeClick) {
+				this.overlay.bind('click.overlay', function(e) {
+					if ($(e.target).hasClass('fancybox-overlay')) {
+						if (F.isActive) {
+							F.close();
+						} else {
+							that.close();
+						}
+
+						return false;
+					}
+				});
+			}
+
+			this.overlay.css( opts.css ).show();
+		},
+
+		close : function() {
+			var scrollV, scrollH;
+
+			W.unbind('resize.overlay');
+
+			if (this.el.hasClass('fancybox-lock')) {
+				$('.fancybox-margin').removeClass('fancybox-margin');
+
+				scrollV = W.scrollTop();
+				scrollH = W.scrollLeft();
+
+				this.el.removeClass('fancybox-lock');
+
+				W.scrollTop( scrollV ).scrollLeft( scrollH );
+			}
+
+			$('.fancybox-overlay').remove().hide();
+
+			$.extend(this, {
+				overlay : null,
+				fixed   : false
+			});
+		},
+
+		// Private, callbacks
+
+		update : function () {
+			var width = '100%', offsetWidth;
+
+			// Reset width/height so it will not mess
+			this.overlay.width(width).height('100%');
+
+			// jQuery does not return reliable result for IE
+			if (IE) {
+				offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+				if (D.width() > offsetWidth) {
+					width = D.width();
+				}
+
+			} else if (D.width() > W.width()) {
+				width = D.width();
+			}
+
+			this.overlay.width(width).height(D.height());
+		},
+
+		// This is where we can manipulate DOM, because later it would cause iframes to reload
+		onReady : function (opts, obj) {
+			var overlay = this.overlay;
+
+			$('.fancybox-overlay').stop(true, true);
+
+			if (!overlay) {
+				this.create(opts);
+			}
+
+			if (opts.locked && this.fixed && obj.fixed) {
+				if (!overlay) {
+					this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;
+				}
+
+				obj.locked = this.overlay.append( obj.wrap );
+				obj.fixed  = false;
+			}
+
+			if (opts.showEarly === true) {
+				this.beforeShow.apply(this, arguments);
+			}
+		},
+
+		beforeShow : function(opts, obj) {
+			var scrollV, scrollH;
+
+			if (obj.locked) {
+				if (this.margin !== false) {
+					$('*').filter(function(){
+						return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
+					}).addClass('fancybox-margin');
+
+					this.el.addClass('fancybox-margin');
+				}
+
+				scrollV = W.scrollTop();
+				scrollH = W.scrollLeft();
+
+				this.el.addClass('fancybox-lock');
+
+				W.scrollTop( scrollV ).scrollLeft( scrollH );
+			}
+
+			this.open(opts);
+		},
+
+		onUpdate : function() {
+			if (!this.fixed) {
+				this.update();
+			}
+		},
+
+		afterClose: function (opts) {
+			// Remove overlay if exists and fancyBox is not opening
+			// (e.g., it is not being open using afterClose callback)
+			//if (this.overlay && !F.isActive) {
+			if (this.overlay && !F.coming) {
+				this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+			}
+		}
+	};
+
+	/*
+	 *	Title helper
+	 */
+
+	F.helpers.title = {
+		defaults : {
+			type     : 'float', // 'float', 'inside', 'outside' or 'over',
+			position : 'bottom' // 'top' or 'bottom'
+		},
+
+		beforeShow: function (opts) {
+			var current = F.current,
+				text    = current.title,
+				type    = opts.type,
+				title,
+				target;
+
+			if ($.isFunction(text)) {
+				text = text.call(current.element, current);
+			}
+
+			if (!isString(text) || $.trim(text) === '') {
+				return;
+			}
+
+			title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">' + text + '</div>');
+
+			switch (type) {
+				case 'inside':
+					target = F.skin;
+				break;
+
+				case 'outside':
+					target = F.wrap;
+				break;
+
+				case 'over':
+					target = F.inner;
+				break;
+
+				default: // 'float'
+					target = F.skin;
+
+					title.appendTo('body');
+
+					if (IE) {
+						title.width( title.width() );
+					}
+
+					title.wrapInner('<span class="child"></span>');
+
+					//Increase bottom margin so this title will also fit into viewport
+					F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+				break;
+			}
+
+			title[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);
+		}
+	};
+
+	// jQuery plugin initialization
+	$.fn.fancybox = function (options) {
+		var index,
+			that     = $(this),
+			selector = this.selector || '',
+			run      = function(e) {
+				var what = $(this).blur(), idx = index, relType, relVal;
+
+				if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+					relType = options.groupAttr || 'data-fancybox-group';
+					relVal  = what.attr(relType);
+
+					if (!relVal) {
+						relType = 'rel';
+						relVal  = what.get(0)[ relType ];
+					}
+
+					if (relVal && relVal !== '' && relVal !== 'nofollow') {
+						what = selector.length ? $(selector) : that;
+						what = what.filter('[' + relType + '="' + relVal + '"]');
+						idx  = what.index(this);
+					}
+
+					options.index = idx;
+
+					// Stop an event from bubbling if everything is fine
+					if (F.open(what, options) !== false) {
+						e.preventDefault();
+					}
+				}
+			};
+
+		options = options || {};
+		index   = options.index || 0;
+
+		if (!selector || options.live === false) {
+			that.unbind('click.fb-start').bind('click.fb-start', run);
+
+		} else {
+			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+		}
+
+		this.filter('[data-fancybox-start=1]').trigger('click');
+
+		return this;
+	};
+
+	// Tests that need a body at doc ready
+	D.ready(function() {
+		var w1, w2;
+
+		if ( $.scrollbarWidth === undefined ) {
+			// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+			$.scrollbarWidth = function() {
+				var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
+					child  = parent.children(),
+					width  = child.innerWidth() - child.height( 99 ).innerWidth();
+
+				parent.remove();
+
+				return width;
+			};
+		}
+
+		if ( $.support.fixedPosition === undefined ) {
+			$.support.fixedPosition = (function() {
+				var elem  = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),
+					fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+				elem.remove();
+
+				return fixed;
+			}());
+		}
+
+		$.extend(F.defaults, {
+			scrollbarWidth : $.scrollbarWidth(),
+			fixed  : $.support.fixedPosition,
+			parent : $('body')
+		});
+
+		//Get real width of page scroll-bar
+		w1 = $(window).width();
+
+		H.addClass('fancybox-lock-test');
+
+		w2 = $(window).width();
+
+		H.removeClass('fancybox-lock-test');
+
+		$("<style type='text/css'>.fancybox-margin{margin-right:" + (w2 - w1) + "px;}</style>").appendTo("head");
+	});
+
+}(window, document, jQuery));

+ 46 - 0
docs/common/libs/fancybox/jquery.fancybox.pack.js

@@ -0,0 +1,46 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&E(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},w=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.5",defaults:{padding:15,margin:20,
+width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
+keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
+(I?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
+openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
+isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,
+c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&&
+k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||
+b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=
+setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":c,"onUpdate.player":e,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(q(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))},prev:function(a){var d=b.current;
+d&&(q(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d=
+a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),
+b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(),
+y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement;
+if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==v)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&&"hidden"===h[0].style.overflow)&&
+(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,
+{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,
+mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=
+!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");
+"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=
+this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);
+f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,
+e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,
+outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}",
+g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll":
+"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside?
+h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth||
+h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),c<m&&(c=m,j=l(c/D)),j<u&&(j=u,c=l(j*D))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&&
+"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,p)));if(h.fitToView)if(g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height(),h.aspectRatio)for(;(a>z||y>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(p,j-10)),c=l(j*D),c<m&&(c=m,j=l(c/D)),c>n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&j<A&&c+x+q<z)&&(c+=q);g.width(c).height(j);e.width(c+x);a=e.width();
+y=e.height();e=(a>z||y>r)&&c>m&&j>u;c=h.aspectRatio?c<F&&j<B&&c<C&&j<A:(c<F||j<B)&&(c<C||j<A);f.extend(h,{dim:{width:w(a),height:w(y)},origWidth:C,origHeight:A,canShrink:e,canExpand:c,wPadding:x,hPadding:v,wrapSpace:y-k.outerHeight(!0),skinSpace:k.height()-j});!H&&(h.autoHeight&&j>u&&j<p&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute",top:c[0],left:c[3]};d.autoCenter&&d.fixed&&
+!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=w(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=w(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&&(d.preventDefault(),
+b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a=
+a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())):
+(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:w(c.top-h*a.topRatio),left:w(c.left-j*a.leftRatio),width:w(f+j),height:w(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"===
+f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c,
+{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=w(l(e[g])-200),c[g]="+=200px"):(e[g]=w(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a=
+b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay=
+f('<div class="fancybox-overlay"></div>').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?
+b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth),
+p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"===
+f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=
+b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,
+e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+
+":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body");var e=20===
+d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(d-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);

+ 205 - 0
docs/common/libs/jquery.easing.1.3.js

@@ -0,0 +1,205 @@
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ * 
+ * Open source under the BSD License. 
+ * 
+ * Copyright © 2008 George McGinley Smith
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice, this list of 
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list 
+ * of conditions and the following disclaimer in the documentation and/or other materials 
+ * provided with the distribution.
+ * 
+ * Neither the name of the author nor the names of contributors may be used to endorse 
+ * or promote products derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+jQuery.easing['jswing'] = jQuery.easing['swing'];
+
+jQuery.extend( jQuery.easing,
+{
+	def: 'easeOutQuad',
+	swing: function (x, t, b, c, d) {
+		//alert(jQuery.easing.default);
+		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+	},
+	easeInQuad: function (x, t, b, c, d) {
+		return c*(t/=d)*t + b;
+	},
+	easeOutQuad: function (x, t, b, c, d) {
+		return -c *(t/=d)*(t-2) + b;
+	},
+	easeInOutQuad: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t + b;
+		return -c/2 * ((--t)*(t-2) - 1) + b;
+	},
+	easeInCubic: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t + b;
+	},
+	easeOutCubic: function (x, t, b, c, d) {
+		return c*((t=t/d-1)*t*t + 1) + b;
+	},
+	easeInOutCubic: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t + b;
+		return c/2*((t-=2)*t*t + 2) + b;
+	},
+	easeInQuart: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t*t + b;
+	},
+	easeOutQuart: function (x, t, b, c, d) {
+		return -c * ((t=t/d-1)*t*t*t - 1) + b;
+	},
+	easeInOutQuart: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+		return -c/2 * ((t-=2)*t*t*t - 2) + b;
+	},
+	easeInQuint: function (x, t, b, c, d) {
+		return c*(t/=d)*t*t*t*t + b;
+	},
+	easeOutQuint: function (x, t, b, c, d) {
+		return c*((t=t/d-1)*t*t*t*t + 1) + b;
+	},
+	easeInOutQuint: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+		return c/2*((t-=2)*t*t*t*t + 2) + b;
+	},
+	easeInSine: function (x, t, b, c, d) {
+		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+	},
+	easeOutSine: function (x, t, b, c, d) {
+		return c * Math.sin(t/d * (Math.PI/2)) + b;
+	},
+	easeInOutSine: function (x, t, b, c, d) {
+		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+	},
+	easeInExpo: function (x, t, b, c, d) {
+		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+	},
+	easeOutExpo: function (x, t, b, c, d) {
+		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+	},
+	easeInOutExpo: function (x, t, b, c, d) {
+		if (t==0) return b;
+		if (t==d) return b+c;
+		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+	},
+	easeInCirc: function (x, t, b, c, d) {
+		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+	},
+	easeOutCirc: function (x, t, b, c, d) {
+		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+	},
+	easeInOutCirc: function (x, t, b, c, d) {
+		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+	},
+	easeInElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+	},
+	easeOutElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+	},
+	easeInOutElastic: function (x, t, b, c, d) {
+		var s=1.70158;var p=0;var a=c;
+		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
+		if (a < Math.abs(c)) { a=c; var s=p/4; }
+		else var s = p/(2*Math.PI) * Math.asin (c/a);
+		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+	},
+	easeInBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158;
+		return c*(t/=d)*t*((s+1)*t - s) + b;
+	},
+	easeOutBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158;
+		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+	},
+	easeInOutBack: function (x, t, b, c, d, s) {
+		if (s == undefined) s = 1.70158; 
+		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+	},
+	easeInBounce: function (x, t, b, c, d) {
+		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+	},
+	easeOutBounce: function (x, t, b, c, d) {
+		if ((t/=d) < (1/2.75)) {
+			return c*(7.5625*t*t) + b;
+		} else if (t < (2/2.75)) {
+			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+		} else if (t < (2.5/2.75)) {
+			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+		} else {
+			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+		}
+	},
+	easeInOutBounce: function (x, t, b, c, d) {
+		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+	}
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ * 
+ * Open source under the BSD License. 
+ * 
+ * Copyright © 2001 Robert Penner
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice, this list of 
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list 
+ * of conditions and the following disclaimer in the documentation and/or other materials 
+ * provided with the distribution.
+ * 
+ * Neither the name of the author nor the names of contributors may be used to endorse 
+ * or promote products derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *
+ */

File diff suppressed because it is too large
+ 7 - 0
docs/common/libs/jquery.mousewheel.min.js


BIN
docs/common/src/libraylib.a


+ 135 - 0
docs/examples.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html>
+	<head>
+	    <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+		
+		<title>raylib - examples</title>
+		
+		<meta name="title" content="raylib - examples">
+		<meta name="description" content="raylib is a simple and easy-to-use library to learn videogames programming. Check the full set of raylib examples">
+		<meta name="keywords" content="raylib, videogames, programming, C, C++, library, learn, study, simple, easy, free, open source, raysan">
+		<meta name="viewport" content="width=device-width">
+        
+        <!-- Facebook metatags for sharing -->
+        <meta property="og:title" content="raylib - examples"/>
+        <meta property="og:image" content="http://www.raylib.com/common/img/fb_raylib_logo.png"/>
+        <meta property="og:url" content="http://www.raylib.com" />
+        <meta property="og:site_name" content="raylib"/>
+        <meta property="og:description" content="check the full set of raylib examples... they are amazing!"/>
+
+        <link rel="stylesheet" type="text/css" href="common/css/main.css">
+		<link rel="icon" href="favicon.ico" />
+
+        <link rel="stylesheet" type="text/css" href="common/css/examples.css">
+
+        <!-- NOTE: JavaScript code added at the end of body! -->
+		
+        <!-- Enabling HTML5 tags for older IE browsers -->
+        <!--[if lt IE 9]>
+          <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+        <![endif]-->
+	</head>
+	
+	<body>
+		<div class="page">
+			<!--[if lt IE 7]>
+				<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
+			<![endif]-->
+
+			<div class="header">
+				<a id="logo" href="index.html"></a>
+				<div id="social">
+                    <a id="itchio" href="https://raysan5.itch.io" target="_blank"></a>
+                    <a id="patreon" href="https://www.patreon.com/raysan5" target="_blank"></a>
+                    <a id="twitch" href="http://www.twitch.tv/raysan5" target="_blank"></a>
+                    <a id="reddit" href="https://www.reddit.com/r/raylib/" target="_blank"></a>
+                    <a id="freenode" href="http://webchat.freenode.net/?channels=#raylib" target="_blank"></a>
+					<a id="facebook" href="http://www.facebook.com/raylibgames" target="_blank"></a>
+					<a id="twitter" href="http://www.twitter.com/raysan5" target="_blank"></a>
+					<a id="github" href="http://github.com/raysan5/raylib" target="_blank"></a>
+				</div>
+				<div class="menu">
+					<a href="index.html">about</a>
+					<div id="active">examples</div>
+                    <a href="games.html">games</a>
+					<a href="helpme.html">helpme!</a>
+                    <a id="forum" href="http://forum.raylib.com">forum</a>
+				</div>
+			</div>
+
+			<div class="content">
+				<p>Examples are organized by colors depending on the raylib module features
+				they are teaching. Currently, raylib main modules are 7.</p>
+				<br>
+                <p>Wanna see all functions available in raylib? <a class="simplelink" href="cheatsheet/cheatsheet.html">Check cheatsheet</a></p>
+                <br>
+                <p>Click to filter by module:</p>
+				<br>
+
+<!-- Filtering controls
+<div class="filter" data-filter="all">Show All</div>
+<div class="filter" data-filter=".category-1">Category 1</div>
+<div class="filter" data-filter=".category-2">Category 2</div>
+ -->
+<!-- Sorting controls
+<div class="sort" data-sort="default">Default</div>
+<div class="sort" data-sort="myorder:asc">Ascending</div>
+<div class="sort" data-sort="myorder:desc">Descending</div>
+<div class="sort" data-sort="random">Random</div>
+ -->
+                <!--<div class="filter legendButton" data-filter="all">ALL</div> -->
+                <div id="filter_menu">
+                    <div class="filter legendButton" id="core" data-filter=".fcore">core</div> 
+                    <div class="filter legendButton" id="shapes" data-filter=".fshapes">shapes</div>
+                    <div class="filter legendButton" id="textures" data-filter=".ftextures">textures</div>
+                    <div class="filter legendButton" id="text" data-filter=".ftext">text</div>
+                    <div class="filter legendButton" id="models" data-filter=".fmodels">models</div>
+                    <div class="filter legendButton" id="shaders" data-filter=".fshaders">shaders</div>
+                    <div class="filter legendButton" id="audio" data-filter=".faudio">audio</div>
+				</div>
+
+                <!-- Items container, filled when loading -->
+                <div id="container"></div>
+
+			</div>
+
+			<div class="footer">
+				<p>Web developed by <a href="http://www.raysanweb.com" target="_blank">RaySan</a> and <a href="http://www.elendow.com" target="_blank">Elendow</a></p>
+			</div>
+
+		</div>
+
+		<!-- Add jQuery library -->
+		<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
+
+        <!-- Add jQuery easing plugin -->
+		<script src="common/libs/jquery.easing.1.3.js"></script>
+
+		<!-- Add fancyBox main JS and CSS files -->
+		<script src="common/libs/fancybox/jquery.fancybox.js"></script>
+		<link rel="stylesheet" type="text/css" href="common/libs/fancybox/jquery.fancybox.css" media="screen" />
+
+		<!-- Add Button helper -->
+		<link rel="stylesheet" type="text/css" href="common/libs/fancybox/helpers/jquery.fancybox-buttons.css" />
+		<script src="common/libs/fancybox/helpers/jquery.fancybox-buttons.js"></script>
+
+        <!-- Add jQuery Mix-It Up plugin -->
+		<script src="http://cdn.jsdelivr.net/jquery.mixitup/latest/jquery.mixitup.min.js"></script>
+
+        <!-- Add own script code -->
+        <script src="common/js/examples.js"></script>
+
+		<!-- Google Analytics tracking code -->
+		<script>
+			(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+			(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+			m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+			})(window,document,'script','http://www.google-analytics.com/analytics.js','ga');
+
+			ga('create', 'UA-45733555-1', 'raylib.com');
+            ga('require', 'linkid', 'linkid.js');
+			ga('send', 'pageview');
+		</script>
+	</body>
+</html>

BIN
docs/examples/img/audio_module_playing.png


BIN
docs/examples/img/audio_music_stream.png


BIN
docs/examples/img/audio_raw_stream.png


BIN
docs/examples/img/audio_sound_loading.png


BIN
docs/examples/img/core_2d_camera.png


BIN
docs/examples/img/core_3d_camera_first_person.png


BIN
docs/examples/img/core_3d_camera_free.png


BIN
docs/examples/img/core_3d_mode.png


BIN
docs/examples/img/core_3d_picking.png


BIN
docs/examples/img/core_basic_window.png


BIN
docs/examples/img/core_color_select.png


BIN
docs/examples/img/core_drop_files.png


BIN
docs/examples/img/core_gestures_detection.png


BIN
docs/examples/img/core_input_gamepad.png


BIN
docs/examples/img/core_input_keys.png


BIN
docs/examples/img/core_input_mouse.png


BIN
docs/examples/img/core_mouse_wheel.png


BIN
docs/examples/img/core_oculus_rift.png


BIN
docs/examples/img/core_random_values.png


BIN
docs/examples/img/core_storage_values.png


BIN
docs/examples/img/core_world_screen.png


BIN
docs/examples/img/models_billboard.png


BIN
docs/examples/img/models_box_collisions.png


BIN
docs/examples/img/models_cubicmap.png


BIN
docs/examples/img/models_geometric_shapes.png


BIN
docs/examples/img/models_heightmap.png


BIN
docs/examples/img/models_obj_loading.png


BIN
docs/examples/img/physics_demo.png


BIN
docs/examples/img/physics_friction.png


BIN
docs/examples/img/physics_movement.png


BIN
docs/examples/img/physics_restitution.png


BIN
docs/examples/img/physics_shatter.png


BIN
docs/examples/img/shaders_custom_uniform.png


BIN
docs/examples/img/shaders_model_shader.png


BIN
docs/examples/img/shaders_postprocessing.png


BIN
docs/examples/img/shaders_shapes_textures.png


BIN
docs/examples/img/shaders_standard_lighting.png


BIN
docs/examples/img/shapes_basic_shapes.png


BIN
docs/examples/img/shapes_colors_palette.png


BIN
docs/examples/img/shapes_logo_raylib.png


BIN
docs/examples/img/shapes_logo_raylib_anim.png


BIN
docs/examples/img/text_bmfont_ttf.png


BIN
docs/examples/img/text_bmfont_unordered.png


BIN
docs/examples/img/text_font_select.png


BIN
docs/examples/img/text_format_text.png


BIN
docs/examples/img/text_rbmf_fonts.png


BIN
docs/examples/img/text_sprite_fonts.png


BIN
docs/examples/img/text_ttf_loading.png


Some files were not shown because too many files changed in this diff