<!-- Basic idea of such build tool is stolen from modernizr.com -->
<div id="mfp-build-tool" class="mfp-hide">
  <h2>Magnific Popup v{{site.mfpversion}} Build Tool</h2>
  <form id="mfp-build-form">
    <p class="help-block">Here you can generate optimized version of main JS file. Please note that CSS you should download directly: <a target="_blank"  href="https://raw.github.com/dimsemenov/Magnific-Popup/master/src/css/main.scss">Sass version</a> or <a target="_blank" href="https://raw.github.com/dimsemenov/Magnific-Popup/master/dist/magnific-popup.css">CSS version</a>.</p>
     <label class="checkbox">
      <input type="checkbox" name="inline" checked> Inline
    </label>
    <label class="checkbox">
      <input type="checkbox" name="image" checked> Image
    </label>
    <label class="checkbox">
      <input type="checkbox" name="ajax" checked> Ajax
    </label>
    <label class="checkbox">
      <input type="checkbox" name="iframe" checked> Iframe
    </label>
    <label class="checkbox">
      <input type="checkbox" name="gallery" checked> Gallery
    </label>
    <label class="checkbox">
      <input type="checkbox" name="retina" checked> High-DPI (retina) support for image type
    </label>
    <label class="checkbox">
      <input type="checkbox" name="imagezoom" checked> Image zoom animation
    </label>
    <label class="checkbox">
      <input type="checkbox" name="fastclick" checked> Fast tap for gallery arrows
    </label>
  </form> 
     
  <br/>
  <div>
    <button id="mfp-build-button">Generate build</button>  
  	<label class="checkbox">
      <input id="mfp-minify" type="checkbox" name="minify" checked="checked"> Minify code
    </label> 
  </div>
  <br/>
  <p id="mfp-build-status" style="display:none"></p>
  <br/>
  <textarea id="mfp-build-tool-out" style="width: 100%; height: 300px; display:none;"></textarea>
</div>



<script type="text/javascript">
	$(document).ready(function($) {
		
		$('.mfp-build-tool-link').magnificPopup({closeBtnInside:true, type:'inline', midClick: true});

		var h = window.location.hash;
		if(h.indexOf('build=') > -1) {
			var formInputs = $('#mfp-build-form input');
			
		    if(h.indexOf('&') > 0) {
		       h = h.substr(0, h.indexOf('&'));
		    }
		    var items = h.substr(h.indexOf('build=') + 6, h.length).split('+');
		    for(var i = 0; i < items.length; i++) {
		      var name = items[i];
		      if(name) {
		        formInputs.filter('[name="' +name+ '"]').addClass('present');
		      }
		    }
	    	formInputs.not('.present').prop('checked', false);
    	}


	    var button = $('#mfp-build-button').click(function(e) {
	    	e.preventDefault();

	    	button.attr('disabled', 'disabled');

	    	var statusTimeout;
	    	var setStatus = function(msg, type) {
	    		clearTimeout(statusTimeout);
	    		$('#mfp-build-status').html('<span class="'+type+'">'+msg+'</span>').show();
	    	};
	    	setStatus('Wait a moment please...', 'progress');
	    	$('#mfp-build-tool-out').val( '' );

	    	

	    	var minify = $('#mfp-minify')[0].checked;
	    	var removeModule = function(source, key) {
			        source = source.replace(new RegExp("\\/\\*>>"+key+"\\*\\/[\\s|\\S]*?\\/\\*>>"+key+"\\*\\/", "ig"), "");
			        return source;
			    };





			var onError = function() {
				setStatus("Error: Build tool wasn't able to GET the js file. Please try again or make file by yourself using Grunt.", 'error');
			};

			var version = '{{site.mfpversion}}';
			var loadedScripts = [];
		    var onScriptsLoaded = function() {

		    	
			    var src = loadedScripts[0];

			    var hash = '',
		            name;

		        $('#mfp-build-form input').each(function() {
		          name = $(this).attr('name');

		          if( this.checked ) {
		            hash += name + '+';
		          } else {
		            src = removeModule(src, name);
		          }

		        });

		        var output = '';

		        if(hash) {
		        	hash = hash.substr(0, hash.length-1);
		        }
		        
		        if(minify) {
					src = uglify(src, ["--extra","--unsafe"]);
					output = '// Magnific Popup v'+version+' by Dmitry Semenov' + "\n";
		        	output += '// http://bit.ly/magnific-popup' + (hash ? '#build=' + hash : '') + "\n" + src;
		        } else {
		        	output = src;
		        }
		        
		        if(!hash) {
		        	hash = 'core';
		        } else {
		       		hash = 'core+' + hash;
		        }

		        $('#mfp-build-tool-out').val( output ).show();

		        button.removeAttr('disabled');

		        setStatus('Magnific Popup main js file successfully generated! You can copy generated code from textarea below.' + (hash ? (' Your build includes: <strong>' + hash.split('+').join(', ')) + '</strong>. ' : ''), 'success');
		    };


		    $.ajax({
			 	url:"dist/jquery.magnific-popup.js?v="+version, 
			 	dataType: 'text',
			 	success: function( data) {
			 		loadedScripts[0] = data;
			 		if(loadedScripts[1]) {
			 			onScriptsLoaded();
			 		}
			 	},
			 	error: onError
			});

			$.ajax({
			 	url:"third-party-libs/uglify.js", 
			 	dataType: 'script',
			 	cache: true,
			 	success: function(data) {
			 		loadedScripts[1] = data;
			 		if(loadedScripts[0]) {
			 			onScriptsLoaded();
			 		}
			 	},
			 	error: onError
			});

		});
		/* build tool END */






		/**
		 * Popup with source code for each example
		 */
		var example,
		      getCode,
		      CSS,
		      JS,
		      HTML,
		      highlighterLoaded;

		  var formatCode = function (str) {
		      if(str) {
		        // replace special chars
		        str = str.replace(/[&<>"']/g, function($0) {
		            return "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";";
		        });
		        
		        // remove spaces from each line based on spaces on first line
		        var firstLineLength = str.match(/^(\s*)/)[1].length;
		        var regExp = new RegExp('^ {' + (firstLineLength-1) + '}', "gm");
		        str = str.replace(regExp, '');

		        // replace spaces with tabs
		        str = str.replace(/  /g,'\t');

		        str = $.trim(str);
		      }
		      return str;
		    };

		  var highlight = function() {
		    hljs.highlightBlock(JS.find('code')[0]);

		    if(CSS)
		      hljs.highlightBlock(CSS.find('code')[0]);

		    if(HTML)
		      hljs.highlightBlock(HTML.find('code')[0]);
		  };

		$('.example').each(function() {
		    $(this).find('h3').click(function() {
				var example = $(this).parent('.example');
				var getCodeWindow = $('<div class="get-code-window"><h1>'+example.find('h3').text()+'</h1></div>');
				JS = $('<div class="highlight"><pre><code class="javascript">'+formatCode(example.find('script').eq(0).html())+'</code></pre></div>');

				CSS = example.find('style');
				if(CSS.length) {
					CSS = $('<div class="highlight"><pre><code class="css">'+formatCode(CSS.html())+'</code></pre></div>');
				} else {
					CSS = '';
				}

				HTML = example.find('.html-code');
				if(HTML.length) {
					HTML = $('<div class="highlight"><pre><code class="xml html">'+formatCode(HTML.html())+'</code></pre></div>');
				} else {
					HTML = '';
				}

				if(!highlighterLoaded) {
					highlighterLoaded = true;
					var script = document.createElement("script"),
						$script = $(script);
						script.src = 'http://yandex.st/highlightjs/7.3/highlight.min.js';
					if(window.jQuery) {
						$.getScript(script.src , function() {
							highlight();
						});
					} else {
						$(script).appendTo("head").on("load", function() {
							highlight();
						});
					}
				} else {
					highlight();
				}

				getCodeWindow.append(JS);
				getCodeWindow.append(HTML);
				getCodeWindow.append(CSS);

				getCodeWindow.append('<p>Code above is dynamically generated directly from the source of this example.<br/>Please read <a href="documentation.html">the documentation</a> before using it.</p>');

				$.magnificPopup.open({
					items: {
						src: getCodeWindow,
						type: 'inline'
					}
				});

		});

	});
});
</script>
