• File: popup.php
  • Full Path: /home/lef/public_html/wp-content/plugins/wp-miniaudioplayer/inc/popup.php
  • File size: 39.9 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/*___________________________________________________________________________________________________________________________________________________
 _ jquery.mb.components                                                                                                                             _
 _                                                                                                                                                  _
 _ file: popup.php                                                                                                                                  _
 _ last modified: 8/28/19 11:52 PM                                                                                                                  _
 _                                                                                                                                                  _
 _ Open Lab s.r.l., Florence - Italy                                                                                                                _
 _                                                                                                                                                  _
 _ email: matbicoc@gmail.com                                                                                                                       _
 _ site: http://pupunzi.com                                                                                                                         _
 _       http://open-lab.com                                                                                                                        _
 _ blog: http://pupunzi.open-lab.com                                                                                                                _
 _ Q&A:  http://jquery.pupunzi.com                                                                                                                  _
 _                                                                                                                                                  _
 _ Licences: MIT, GPL                                                                                                                               _
 _    http://www.opensource.org/licenses/mit-license.php                                                                                            _
 _    http://www.gnu.org/licenses/gpl.html                                                                                                          _
 _                                                                                                                                                  _
 _ Copyright (c) 2001-2019. Matteo Bicocchi (Pupunzi);                                                                                              _
 ___________________________________________________________________________________________________________________________________________________*/

// Only add map icon above posts and pages
add_action('admin_head', 'miniaudioplayer_add_button');
function miniaudioplayer_add_button()
{

	if (get_user_option('rich_editing') != 'true')
		return;

	add_action('media_buttons', 'miniaudioplayer_add_icon');
	add_action('admin_footer', 'miniaudioplayer_add_popup');
}

// Add button above editor if not editing map
function miniaudioplayer_add_icon()
{
	echo '<style>
	#add-map .dashicons {
		color: #888;
		margin: 0 4px 0 0;
		vertical-align: text-top;
		height: 18px;
        width: 18px;

		background-image: url(' . plugins_url("maplayerbutton.svg", __FILE__) . ');
		background-repeat: no-repeat;
    }
	#add-map {
		padding-left: 0.4em;
	}

	#add-map.disabled {
	    pointer-events:none;
		padding-left: 0.4em;
	}

	</style>
	<a id="add-map" class="button disabled" title="' . __("miniAudioPlayer", 'wpmbmap') . '" href="#" onclick="miniaudioplayer_show_editor();">
		<div class="dashicons"></div>' . __("miniAudioPlayer", "wpmbmap") . '</a>';
}

class miniaudioplayer_check_href
{
	function __construct()
	{
		add_filter('mce_external_plugins', array(&$this, 'add_map_tinymce_plugin'));
		add_filter('tiny_mce_before_init', array(&$this, 'add_map_TinyMCE_css'));
	}

	//include the tinymce javascript plugin
	function add_map_tinymce_plugin($plugin_array)
	{
		$plugin_array['wpmbmap'] = plugins_url('map_short_code.js?_=' . MINIAUDIOPLAYER_VERSION, __FILE__);
		return $plugin_array;
	}

	//include the css file to style the graphic that replaces the shortcode
	function add_map_TinyMCE_css($in)
	{
		if (!empty($in['content_css']))
			$in['content_css'] .= "," . plugins_url('map_short_code.css?_=' . MINIAUDIOPLAYER_VERSION, __FILE__);
		return $in;
	}
}

//add_action("init", create_function('', 'new miniaudioplayer_check_href();'));
add_action("init", function(){
	new miniaudioplayer_check_href();
});


$custom_player_id = "map_" . rand();

// Displays the lightbox popup to insert a YTPlayer shortcode to a post/page
function miniaudioplayer_add_popup()
{
	$exclude_class = get_option('miniAudioPlayer_excluded');
	$showVolumeLevel = get_option('miniAudioPlayer_showVolumeLevel');
	$allowMute = get_option('miniAudioPlayer_allowMute');
	$showTime = get_option('miniAudioPlayer_showTime');
	$showRew = get_option('miniAudioPlayer_showRew');
	$width = get_option('miniAudioPlayer_width');
	$skin = get_option('miniAudioPlayer_skin');
	$miniAudioPlayer_animate = get_option('miniAudioPlayer_animate');
	$miniAudioPlayer_add_gradient = get_option('miniAudioPlayer_add_gradient');
	$volume = get_option('miniAudioPlayer_volume');
	$downloadable = get_option('miniAudioPlayer_download');
	$custom_skin_name = get_option('miniAudioPlayer_custom_skin_name');
	$downloadable_security = get_option('miniAudioPlayer_download_security');
	?>
  <div id="map-form" style="display: none;">
    <style>

      #map-form {
        position: fixed;
        width: 100%;
        min-width: 500px;
        height: 100%;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
        background: rgba(0, 0, 0, 0.7);
        z-index: 100101;
        box-sizing: border-box;
        overflow: hidden;
      }

      #map-form header {
        position: absolute;
        background: #0073aa;
        color: #FFFFFF;
        height: 50px;
        box-sizing: border-box;
        margin: 0;
        top: 0;
        width: 100%;
        padding: 10px;
        box-shadow: 1px 4px 8px 0px rgba(0, 0, 0, 0.3);
        z-index: 1000;
      }

      #map-form header h2 {
        color: #ffffff;
        margin: 0;
        line-height: 40px;
      }

      #map-form #editor {
        position: absolute;
        width: 50%;
        min-width: 700px;
        height: 90%;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
        background: #FFFFFF;
        box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
        box-sizing: border-box;
      }

      #map-form #editor form {
        position: absolute;
        width: 100%;
        top: 50px;
        left: 0;
        height: calc(100% - 55px);
        overflow: auto;
        padding: 10px;
        box-sizing: border-box;
      }

      #map-form fieldset {
        font-size: 16px;
        border: none;
        font-family: inherit;
        font-family: Helvetica Neue, Arial, Helvetica, sans-serif;
      }

      #map-form fieldset span.label {
        display: inline-block;
        width: 45%;
        font-size: 100%;
        font-weight: 400;
        vertical-align: top;
      }

      #map-form fieldset div {
        margin: 0;
        padding: 9px !important;
        display: block;
        font-size: 16px;
        border-bottom: 1px dotted #cccccc;
      }

      #map-form input, textarea, select {
        font-size: 100%;
      }

      #map-form input[type=text], textarea {
        width: 54%;
      }

      #map-form .sub-set {
        background: #f3f3f3;
      }

      #map-form .media-modal-close .media-modal-icon:before {
        color: #FFFFFF;
      }

      #map-form .actions {
        text-align: right;
        padding: 10px;
        background: rgba(158, 158, 158, 0.19);
      }

      .help-inline {
        font-size: 16px;
        font-weight: 300;
        display: block;
        color: #999;
        padding-left: 0;
        margin: 5px 0;
      }

      .help-inline.inline {
        display: inline-block;
        font-weight: 400;
        padding-left: 10px;
      }


    </style>

    <div id="editor">
      <header>
        <h2><?php _e('mb.miniAudioPlayer editor', 'wpmbmap'); ?></h2>
        <button onclick="miniaudioplayer_hide_editor()" type="button" class="button-link media-modal-close"><span class="media-modal-icon"><span class="screen-reader-text">Close panel</span></span></button>
      </header>

      <form id="map_form" action="#">
        <div class="actions">
          <input type="submit" value="Insert code" class="button-primary"/>
        </div>

        <fieldset>
          <div>
            <span class="label"><?php _e('Don’t render', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="exclude" value="true"/>
            <span class="help-inline"><?php _e('check to exclude this link', 'wp-miniaudioplayer'); ?> (<?php echo $exclude_class ?>)</span>
          </div>
          <div>
            <span class="label"><?php _e('Audio url', 'wp-miniaudioplayer'); ?> <span style="color:red">*</span> : </span>
            <input type="text" name="url" class="span5"/>
            <span class="help-inline"><?php _e('A valid .mp3 url', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Audio title', 'wp-miniaudioplayer'); ?>: </span>
            <input type="text" name="audiotitle" class="span5"/>
            <span class="help-inline"><?php _e('The audio title', 'wp-miniaudioplayer'); ?></span><br>
            <span class="label"> </span>
            <button class="button" id="metadata" onclick="getFromMetatags();jQuery(this).hide(); return false" style="color: gray"><?php _e('Get the title from meta-data', 'wp-miniaudioplayer'); ?></button>
          </div>

          <div>
            <span class="label"><?php _e('Skin', 'wp-miniaudioplayer'); ?>:</span>
            <select name="skin">
              <option value="black"><?php _e('black', 'wp-miniaudioplayer'); ?></option>
              <option value="blue"><?php _e('blue', 'wp-miniaudioplayer'); ?></option>
              <option value="orange"><?php _e('orange', 'wp-miniaudioplayer'); ?></option>
              <option value="red"><?php _e('red', 'wp-miniaudioplayer'); ?></option>
              <option value="gray"><?php _e('gray', 'wp-miniaudioplayer'); ?></option>
              <option value="green"><?php _e('green', 'wp-miniaudioplayer'); ?></option>
              <option value="<?php echo $custom_skin_name ?>"><?php echo $custom_skin_name ?></option>
            </select>
            <span class="help-inline"><?php _e('Set the skin color for the player', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Gradient', 'wp-miniaudioplayer'); ?>:</span>
            <input type="checkbox" name="addGradientOverlay" value="true"/>
            <span class="help-inline"><?php _e('Check to add a gradient to the player skin', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Animate', 'wp-miniaudioplayer'); ?>:</span>
            <input type="checkbox" name="animate" value="true"/>
            <span class="help-inline"><?php _e('Check to activate the opening / closing animation', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Width', 'wp-miniaudioplayer'); ?>: </span>
            <input type="text" name="width" class="span6"/>
            <span class="help-inline"><?php _e('Set the player width', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Volume', 'wp-miniaudioplayer'); ?>: </span>
            <input type="text" name="volume" class="span6"/>
            <span class="help-inline"><?php _e('(from 1 to 10) Set the player initial volume', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Autoplay', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="autoplay" value="true"/>
            <span class="help-inline"><?php _e('Check to start playing on page load', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Loop', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="loop" value="false"/>
            <span class="help-inline"><?php _e('Check to loop the sound', 'wp-miniaudioplayer'); ?></span>
          </div>

          <h2><?php _e('Show/Hide', 'wp-miniaudioplayer'); ?></h2>

          <div>
            <span class="label"><?php _e('Volume control', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="showVolumeLevel" value="true"/>
            <span class="help-inline"><?php _e('Check to show the volume control', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Time control', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="showTime" value="true"/>
            <span class="help-inline"><?php _e('Check to show the time control', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Mute control', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="allowMute" value="true"/>
            <span class="help-inline"><?php _e('Check to activate the mute button', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Rewind control', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="showRew" value="true"/>
            <span class="help-inline"><?php _e('Check to show the rewind control', 'wp-miniaudioplayer'); ?></span>
          </div>

          <div>
            <span class="label"><?php _e('Downloadable', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="downloadable" value="false" onclick="manageSecurity(this)"/>
            <span class="help-inline"><?php _e('Check to show the download button', 'wp-miniaudioplayer'); ?></span><br>
          </div>

          <div>
            <span class="label" style="font-weight: normal; color: gray"><?php _e('Only registered', 'wp-miniaudioplayer'); ?>: </span>
            <input type="checkbox" name="downloadable_security" value="true"/>
            <span class="help-inline"><?php _e('Check to limit downloads to registered users', 'wp-miniaudioplayer'); ?></span>
          </div>

          <script>
			  function manageSecurity(el) {
				  var security = jQuery('[name=downloadablesecurity]');
				  if (jQuery(el).is(":checked")) {
					  security.removeAttr('disabled');
				  } else {
					  security.attr('disabled', 'disabled');
					  security.removeAttr('checked');
				  }
			  }
          </script>

        </fieldset>

        <div class="actions">
          <input type="submit" value="Insert code" class="button-primary"/>
          <input class="button" type="reset" value="Reset settings"/>

        </div>

      </form>
    </div>
  </div>

  <script>

	  var selection = null;
	  var tmpInfo = {};

	  jQuery(function () {
		  jQuery(".wp-editor-tabs button").on("click.map", function () {

			  setTimeout(function () {
				  if (!tinyMCE.activeEditor || tinyMCE.activeEditor.isHidden()) {
					  jQuery("#add-map").css("opacity", .5);
				  } else {
					  jQuery("#add-map").css("opacity", 1);
				  }
			  }, 400)
		  })
	  });

	  function getFromMetatags() {
		  if (typeof ID3 == "object") {
			  ID3.loadTags(document.audioURL, function () {
				  var info = {};
				  info.title = ID3.getTag(document.audioURL, "title");
				  info.artist = ID3.getTag(document.audioURL, "artist");
				  info.album = ID3.getTag(document.audioURL, "album");
				  info.track = ID3.getTag(document.audioURL, "track");
				  info.size = ID3.getTag(document.audioURL, "size");
				  if (info.title && info.title != undefined) {
					  jQuery("[name='audiotitle']").val(info.title + " - " + info.artist);

					  tmpInfo = info;
				  } else {
					  jquery("button#metadata").after("no meta-data available for this file");
				  }
			  })
		  }
	  }

	  function miniaudioplayer_show_editor() {

		  if (tinyMCE.activeEditor == null || tinyMCE.activeEditor.isHidden() != false) {
			  alert("You should switch to the visual editor");
			  return;
		  }

		  var map_editor = tinyMCE.activeEditor;

		  var map_form = jQuery('#map-form form').get(0);

		  var selection = map_editor.selection.getNode();
		  map_editor.isValidURL = false;
		  map_editor.isHref = false;

		  if (jQuery(selection).is("a[href *= '.mp3']") || jQuery(selection).find("a[href *= '.mp3']").lenght > 0 || jQuery(selection).prev().is("a[href *= '.mp3']")) {
			  map_editor.isHref = true;
			  map_editor.isValidURL = true;
		  } else if (jQuery(selection).is("a") || jQuery(selection).find("a").lenght > 0 || jQuery(selection).prev().is("a")) {
			  map_editor.isHref = true;
		  }

		  if (!map_editor.isHref) {
			  alert("Select a link to an mp3 file to customize the player.");
			  return;
		  }

		  if (!map_editor.isValidURL) {
			  var d = confirm("the selected Link doesn't seams a valid MP3 path; do you want to continue anyway?");
			  if (!d)
				  return;

		  }
		  map_form.reset();

		  jQuery("body").css({overflow: "hidden"});
		  jQuery("#map-form").slideDown(300);

		  selection = map_editor.selection.getNode();

		  map_editor.selection.select(selection, true);

		  var $selection = jQuery(selection);

		  var map_element = $selection.find("a[href *= '.mp3']");
		  if (map_element.length) {
			  selection = map_editor.selection.select(map_element.get(0), true);
		  } else if ($selection.prev().is("a[href *= '.mp3']")) {
			  selection = map_editor.selection.select($selection.prev().get(0), true);
		  }

		  $selection = jQuery(selection);

		  var url = document.audioURL = $selection.attr("href");
		  var title = $selection.html();
		  var isExcluded = $selection.hasClass("<?php echo $exclude_class ?>");

		  var metadata = $selection.metadata();

		  if (metadata.volume)
			  metadata.volume = parseFloat(metadata.volume) * 10;

		  if (jQuery.isEmptyObject(metadata)) {
			  var defaultmeta = {
				  showVolumeLevel:<?php echo empty($showVolumeLevel) ? false : $showVolumeLevel ?>,
				  allowMute:<?php echo $allowMute ? "true" : "false"?>,
				  showTime:<?php echo $showTime ? "true" : "false"?>,
				  showRew:<?php echo $showRew ? "true" : "false"?>,
				  width: "<?php echo $width ?>",
				  skin: "<?php echo $skin ?>",
				  animate:<?php echo $miniAudioPlayer_animate ? "true" : "false" ?>,
				  loop: false,
				  addGradientOverlay: <?php echo $miniAudioPlayer_add_gradient ? "true" : "false" ?>,
				  downloadable:<?php echo $downloadable ? "true" : "false" ?>,
				  downloadable_security:<?php echo $downloadable_security ? "true" : "false" ?>,
				  volume: parseFloat(<?php echo $volume ?>) * 10
			  };
			  jQuery.extend(metadata, defaultmeta);
		  }

		  jQuery.extend(metadata, {exclude: isExcluded});

		  jQuery("[name='url']", map_form).val(url);

		  jQuery("[name='audiotitle']", map_form).val(title);

		  for (var i in metadata) {
			  if (typeof metadata[i] == "boolean") {
				  if (eval(metadata[i]) == true)
					  jQuery("[name=" + i + "]").attr("checked", "checked");
				  else
					  jQuery("[name=" + i + "]").removeAttr("checked");
			  } else
				  jQuery("[name=" + i + "]").val(metadata[i]);
		  }

		  var map_form = jQuery('#map-form form').get(0);
		  map_form.onsubmit = miniaudioplayer_insertCode;
	  }

	  function miniaudioplayer_insertCode(e) {

		  var map_editor = tinyMCE.activeEditor;
		  var map_form = jQuery('#map-form form').get(0);

		  var map_params = "{";
		  if (jQuery("[name='skin']", map_form).val().length > 0)
			  map_params += "skin:'" + jQuery("[name='skin']").val() + "', ";
		  map_params += "animate:" + (jQuery("[name='animate']").is(":checked") ? "true" : "false") + ", ";
		  if (jQuery("[name='width']", map_form).val().length > 0)
			  map_params += "width:'" + jQuery("[name='width']", map_form).val() + "', ";
		  if (jQuery("[name='volume']", map_form).val().length > 0)
			  map_params += "volume:" + jQuery("[name='volume']", map_form).val() / 10 + ", ";
		  map_params += "autoplay:" + (jQuery("[name='autoplay']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "loop:" + (jQuery("[name='loop']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "showVolumeLevel:" + (jQuery("[name='showVolumeLevel']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "showTime:" + (jQuery("[name='showTime']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "allowMute:" + (jQuery("[name='allowMute']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "showRew:" + (jQuery("[name='showRew']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "addGradientOverlay:" + (jQuery("[name='addGradientOverlay']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "downloadable:" + (jQuery("[name='downloadable']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "downloadablesecurity:" + (jQuery("[name='downloadablesecurity']", map_form).is(":checked") ? "true" : "false") + ", ";
		  map_params += "id3: false";
		  map_params += "}";
		  map_params = map_params.replace(", }", "}");

		  var isExcluded = jQuery("[name='exclude']", map_form).is(":checked") ? "<?php echo $exclude_class ?> " : "";

		  var map_a = "<a id='mbmaplayer_" + new Date().getTime() + "' class=";
		  map_a += "\"mb_map " + isExcluded + map_params + "\" ";

		  for (var x in tmpInfo) {
			  map_a += "meta-" + x + "=\"" + tmpInfo[x] + "\" ";
		  }
		  map_a += "href=\"" + jQuery("[name='url']", map_form).val() + "\">";
		  map_a += jQuery("[name='audiotitle']", map_form).val();
		  map_a += "</a>";
		  map_editor.execCommand('mceInsertContent', 0, map_a);

		  miniaudioplayer_hide_editor();

		  return false;
	  }

	  function miniaudioplayer_hide_editor() {
		  jQuery("#map-form").slideUp(300);
		  jQuery("body").css({overflow: "auto"});
	  }

	  jQuery("body").on("click", "#map-form", function (e) {
		  var target = e.originalEvent.target;
		  if (jQuery(target).parents().is("#map-form"))
			  return;
		  miniaudioplayer_hide_editor();
	  });


	  /*
   * ******************************************************************************
   *  file: metadata.js
   */


	  jQuery.extend({
		  metadata: {
			  defaults: {type: "class", name: "metadata", cre: /({.*})/, single: "metadata"}, setType: function (b, e) {
				  this.defaults.type = b;
				  this.defaults.name = e
			  }, get: function (b, e) {
				  var c = jQuery.extend({}, this.defaults, e);
				  c.single.length || (c.single = "metadata");
				  var a = jQuery.data(b, c.single);
				  if (a) return a;
				  a = "{}";
				  if ("class" == c.type) {
					  var d = c.cre.exec(b.className);
					  d && (a = d[1])
				  } else if ("elem" == c.type) {
					  if (!b.getElementsByTagName) return;
					  d = b.getElementsByTagName(c.name);
					  d.length && (a = jQuery.trim(d[0].innerHTML))
				  } else void 0 !=
				  b.getAttribute && (d = b.getAttribute(c.name)) && (a = d);
				  0 > a.indexOf("{") && (a = "{" + a + "}");
				  a = eval("(" + a + ")");
				  jQuery.data(b, c.single, a);
				  return a
			  }
		  }
	  });
	  jQuery.fn.metadata = function (b) {
		  return jQuery.metadata.get(this[0], b)
	  };

    /*
   * ******************************************************************************
   *  jquery.mb.components
   *  file: id3.min.js
   *
   *  Copyright (c) 2001-2013. Matteo Bicocchi (Pupunzi);
   *  Open lab srl, Firenze - Italy
   *  email: matbicoc@gmail.com
   *  site: 	http://pupunzi.com
   *  blog:	http://pupunzi.open-lab.com
   * 	http://open-lab.com
   *
   *  Licences: MIT, GPL
   *  http://www.opensource.org/licenses/mit-license.php
   *  http://www.gnu.org/licenses/gpl.html
   *
   *  last modified: 31/01/13 23.44
   *  *****************************************************************************
   */

    var q=null;function y(g,i,d){function f(b,h,e,a,d,f){var j=c();if(j){typeof f==="undefined"&&(f=!0);if(h)typeof j.onload!="undefined"?j.onload=function(){j.status=="200"||j.status=="206"?(j.fileSize=d||j.getResponseHeader("Content-Length"),h(j)):e&&e();j=q}:j.onreadystatechange=function(){if(j.readyState==4)j.status=="200"||j.status=="206"?(j.fileSize=d||j.getResponseHeader("Content-Length"),h(j)):e&&e(),j=q};j.open("GET",b,f);j.overrideMimeType&&j.overrideMimeType("text/plain; charset=x-user-defined");a&&j.setRequestHeader("Range",
	  "bytes="+a[0]+"-"+a[1]);j.setRequestHeader("If-Modified-Since","Sat, 1 Jan 1970 00:00:00 GMT");j.send(q)}else e&&e()}function c(){var b=q;window.XMLHttpRequest?b=new XMLHttpRequest:window.F&&(b=new ActiveXObject("Microsoft.XMLHTTP"));return b}function a(b,h){var e=c();if(e){if(h)typeof e.onload!="undefined"?e.onload=function(){e.status=="200"&&h(this);e=q}:e.onreadystatechange=function(){e.readyState==4&&(e.status=="200"&&h(this),e=q)};e.open("HEAD",b,!0);e.send(q)}}function b(b,h){var e,a;function c(b){var p=
	  ~~(b[0]/e)-a,b=~~(b[1]/e)+1+a;p<0&&(p=0);b>=blockTotal&&(b=blockTotal-1);return[p,b]}function g(a,c){for(;n[a[0]];)if(a[0]++,a[0]>a[1]){c&&c();return}for(;n[a[1]];)if(a[1]--,a[0]>a[1]){c&&c();return}var k=[a[0]*e,(a[1]+1)*e-1];f(b,function(b){parseInt(b.getResponseHeader("Content-Length"),10)==h&&(a[0]=0,a[1]=blockTotal-1,k[0]=0,k[1]=h-1);for(var b={data:b.W||b.responseText,s:k[0]},p=a[0];p<=a[1];p++)n[p]=b;i+=k[1]-k[0]+1;c&&c()},d,k,j,!!c)}var j,i=0,l=new z("",0,h),n=[];e=e||2048;a=typeof a==="undefined"?
	  0:a;blockTotal=~~((h-1)/e)+1;for(var m in l)l.hasOwnProperty(m)&&typeof l[m]==="function"&&(this[m]=l[m]);this.a=function(b){var a;g(c([b,b]));a=n[~~(b/e)];if(typeof a.data=="string")return a.data.charCodeAt(b-a.s)&255;else if(typeof a.data=="unknown")return IEBinary_getByteAt(a.data,b-a.s)};this.N=function(){return i};this.f=function(b,a){g(c(b),a)}}(function(){a(g,function(a){a=parseInt(a.getResponseHeader("Content-Length"),10)||-1;i(new b(g,a))})})()}
    function z(g,i,d){var f=g,c=i||0,a=0;this.P=function(){return f};if(typeof g=="string")a=d||f.length,this.a=function(b){return f.charCodeAt(b+c)&255};else if(typeof g=="unknown")a=d||IEBinary_getLength(f),this.a=function(b){return IEBinary_getByteAt(f,b+c)};this.n=function(b,a){for(var h=Array(a),e=0;e<a;e++)h[e]=this.a(b+e);return h};this.j=function(){return a};this.d=function(b,a){return(this.a(b)&1<<a)!=0};this.Q=function(b){b=this.a(b);return b>127?b-256:b};this.r=function(b,a){var h=a?(this.a(b)<<
	  8)+this.a(b+1):(this.a(b+1)<<8)+this.a(b);h<0&&(h+=65536);return h};this.S=function(b,a){var h=this.r(b,a);return h>32767?h-65536:h};this.h=function(b,a){var h=this.a(b),e=this.a(b+1),c=this.a(b+2),d=this.a(b+3),h=a?(((h<<8)+e<<8)+c<<8)+d:(((d<<8)+c<<8)+e<<8)+h;h<0&&(h+=4294967296);return h};this.R=function(b,a){var c=this.h(b,a);return c>2147483647?c-4294967296:c};this.q=function(b){var a=this.a(b),c=this.a(b+1),b=this.a(b+2),a=((a<<8)+c<<8)+b;a<0&&(a+=16777216);return a};this.c=function(b,a){for(var c=
	  [],e=b,d=0;e<b+a;e++,d++)c[d]=String.fromCharCode(this.a(e));return c.join("")};this.e=function(b,a,c){b=this.n(b,a);switch(c.toLowerCase()){case "utf-16":case "utf-16le":case "utf-16be":var a=c,e,d=0,f=1,c=0;e=Math.min(e||b.length,b.length);b[0]==254&&b[1]==255?(a=!0,d=2):b[0]==255&&b[1]==254&&(a=!1,d=2);a&&(f=0,c=1);for(var a=[],g=0;d<e;g++){var j=b[d+f],i=(j<<8)+b[d+c];d+=2;if(i==0)break;else j<216||j>=224?a[g]=String.fromCharCode(i):(j=(b[d+f]<<8)+b[d+c],d+=2,a[g]=String.fromCharCode(i,j))}b=
	  String(a.join(""));b.g=d;break;case "utf-8":e=0;d=Math.min(d||b.length,b.length);b[0]==239&&b[1]==187&&b[2]==191&&(e=3);f=[];for(c=0;e<d;c++)if(a=b[e++],a==0)break;else a<128?f[c]=String.fromCharCode(a):a>=194&&a<224?(g=b[e++],f[c]=String.fromCharCode(((a&31)<<6)+(g&63))):a>=224&&a<240?(g=b[e++],i=b[e++],f[c]=String.fromCharCode(((a&255)<<12)+((g&63)<<6)+(i&63))):a>=240&&a<245&&(g=b[e++],i=b[e++],j=b[e++],a=((a&7)<<18)+((g&63)<<12)+((i&63)<<6)+(j&63)-65536,f[c]=String.fromCharCode((a>>10)+55296,
	  (a&1023)+56320));b=String(f.join(""));b.g=e;break;default:d=[];f=f||b.length;for(e=0;e<f;){c=b[e++];if(c==0)break;d[e-1]=String.fromCharCode(c)}b=String(d.join(""));b.g=e}return b};this.M=function(a){return String.fromCharCode(this.a(a))};this.Z=function(){return window.btoa(f)};this.L=function(a){f=window.atob(a)};this.f=function(a,c){c()}}document.write("<script type='text/vbscript'>\r\nFunction IEBinary_getByteAt(strBinary, iOffset)\r\n\tIEBinary_getByteAt = AscB(MidB(strBinary,iOffset+1,1))\r\nEnd Function\r\nFunction IEBinary_getLength(strBinary)\r\n\tIEBinary_getLength = LenB(strBinary)\r\nEnd Function\r\n<\/script>\r\n");(function(g){g.FileAPIReader=function(g){return function(d,f){var c=new FileReader;c.onload=function(a){f(new z(a.target.result))};c.readAsBinaryString(g)}}})(this);(function(g){g.k={i:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",z:function(g){for(var d="",f,c,a,b,p,h,e=0;e<g.length;)f=g[e++],c=g[e++],a=g[e++],b=f>>2,f=(f&3)<<4|c>>4,p=(c&15)<<2|a>>6,h=a&63,isNaN(c)?p=h=64:isNaN(a)&&(h=64),d=d+Base64.i.charAt(b)+Base64.i.charAt(f)+Base64.i.charAt(p)+Base64.i.charAt(h);return d}};g.Base64=g.k;g.k.encodeBytes=g.k.z})(this);(function(g){var i=g.t={},d={},f=[0,7];i.C=function(c,a,b){b=b||{};(b.dataReader||y)(c,function(g){g.f(f,function(){var f=g.c(4,7)=="ftypM4A"?ID4:g.c(0,3)=="ID3"?ID3v2:ID3v1;f.o(g,function(){var e=b.tags,i=f.p(g,e),e=d[c]||{},k;for(k in i)i.hasOwnProperty(k)&&(e[k]=i[k]);d[c]=e;a&&a()})})})};i.A=function(c){if(!d[c])return q;var a={},b;for(b in d[c])d[c].hasOwnProperty(b)&&(a[b]=d[c][b]);return a};i.B=function(c,a){if(!d[c])return q;return d[c][a]};g.ID3=g.t;i.loadTags=i.C;i.getAllTags=i.A;i.getTag=
	  i.B})(this);(function(g){var i=g.u={},d=["Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise","AlternRock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock",
	    "Ethnic","Gothic","Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta","Top 40","Christian Rap","Pop/Funk","Jungle","Native American","Cabaret","New Wave","Psychadelic","Rave","Showtunes","Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock","Folk","Folk-Rock","National Folk","Swing","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock",
	    "Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove","Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle","Duet","Punk Rock","Drum Solo","Acapella","Euro-House","Dance Hall"];i.o=function(d,c){var a=d.j();d.f([a-128-1,a],c)};i.p=function(f){var c=f.j()-128;if(f.c(c,3)=="TAG"){var a=f.c(c+3,30).replace(/\0/g,
	  ""),b=f.c(c+33,30).replace(/\0/g,""),g=f.c(c+63,30).replace(/\0/g,""),h=f.c(c+93,4).replace(/\0/g,"");if(f.a(c+97+28)==0)var e=f.c(c+97,28).replace(/\0/g,""),i=f.a(c+97+29);else e="",i=0;f=f.a(c+97+30);return{version:"1.1",title:a,artist:b,album:g,year:h,comment:e,track:i,genre:f<255?d[f]:""}}else return{}};g.ID3v1=g.u})(this);(function(g){function i(a,b){var c=b.a(a),d=b.a(a+1),e=b.a(a+2);return b.a(a+3)&127|(e&127)<<7|(d&127)<<14|(c&127)<<21}var d=g.G={};d.b={};d.frames={BUF:"Recommended buffer size",CNT:"Play counter",COM:"Comments",CRA:"Audio encryption",CRM:"Encrypted meta frame",ETC:"Event timing codes",EQU:"Equalization",GEO:"General encapsulated object",IPL:"Involved people list",LNK:"Linked information",MCI:"Music CD Identifier",MLL:"MPEG location lookup table",PIC:"Attached picture",POP:"Popularimeter",REV:"Reverb",
	    RVA:"Relative volume adjustment",SLT:"Synchronized lyric/text",STC:"Synced tempo codes",TAL:"Album/Movie/Show title",TBP:"BPM (Beats Per Minute)",TCM:"Composer",TCO:"Content type",TCR:"Copyright message",TDA:"Date",TDY:"Playlist delay",TEN:"Encoded by",TFT:"File type",TIM:"Time",TKE:"Initial key",TLA:"Language(s)",TLE:"Length",TMT:"Media type",TOA:"Original artist(s)/performer(s)",TOF:"Original filename",TOL:"Original Lyricist(s)/text writer(s)",TOR:"Original release year",TOT:"Original album/Movie/Show title",
	    TP1:"Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group",TP2:"Band/Orchestra/Accompaniment",TP3:"Conductor/Performer refinement",TP4:"Interpreted, remixed, or otherwise modified by",TPA:"Part of a set",TPB:"Publisher",TRC:"ISRC (International Standard Recording Code)",TRD:"Recording dates",TRK:"Track number/Position in set",TSI:"Size",TSS:"Software/hardware and settings used for encoding",TT1:"Content group description",TT2:"Title/Songname/Content description",TT3:"Subtitle/Description refinement",
	    TXT:"Lyricist/text writer",TXX:"User defined text information frame",TYE:"Year",UFI:"Unique file identifier",ULT:"Unsychronized lyric/text transcription",WAF:"Official audio file webpage",WAR:"Official artist/performer webpage",WAS:"Official audio source webpage",WCM:"Commercial information",WCP:"Copyright/Legal information",WPB:"Publishers official webpage",WXX:"User defined URL link frame",AENC:"Audio encryption",APIC:"Attached picture",COMM:"Comments",COMR:"Commercial frame",ENCR:"Encryption method registration",
	    EQUA:"Equalization",ETCO:"Event timing codes",GEOB:"General encapsulated object",GRID:"Group identification registration",IPLS:"Involved people list",LINK:"Linked information",MCDI:"Music CD identifier",MLLT:"MPEG location lookup table",OWNE:"Ownership frame",PRIV:"Private frame",PCNT:"Play counter",POPM:"Popularimeter",POSS:"Position synchronisation frame",RBUF:"Recommended buffer size",RVAD:"Relative volume adjustment",RVRB:"Reverb",SYLT:"Synchronized lyric/text",SYTC:"Synchronized tempo codes",
	    TALB:"Album/Movie/Show title",TBPM:"BPM (beats per minute)",TCOM:"Composer",TCON:"Content type",TCOP:"Copyright message",TDAT:"Date",TDLY:"Playlist delay",TENC:"Encoded by",TEXT:"Lyricist/Text writer",TFLT:"File type",TIME:"Time",TIT1:"Content group description",TIT2:"Title/songname/content description",TIT3:"Subtitle/Description refinement",TKEY:"Initial key",TLAN:"Language(s)",TLEN:"Length",TMED:"Media type",TOAL:"Original album/movie/show title",TOFN:"Original filename",TOLY:"Original lyricist(s)/text writer(s)",
	    TOPE:"Original artist(s)/performer(s)",TORY:"Original release year",TOWN:"File owner/licensee",TPE1:"Lead performer(s)/Soloist(s)",TPE2:"Band/orchestra/accompaniment",TPE3:"Conductor/performer refinement",TPE4:"Interpreted, remixed, or otherwise modified by",TPOS:"Part of a set",TPUB:"Publisher",TRCK:"Track number/Position in set",TRDA:"Recording dates",TRSN:"Internet radio station name",TRSO:"Internet radio station owner",TSIZ:"Size",TSRC:"ISRC (international standard recording code)",TSSE:"Software/Hardware and settings used for encoding",
	    TYER:"Year",TXXX:"User defined text information frame",UFID:"Unique file identifier",USER:"Terms of use",USLT:"Unsychronized lyric/text transcription",WCOM:"Commercial information",WCOP:"Copyright/Legal information",WOAF:"Official audio file webpage",WOAR:"Official artist/performer webpage",WOAS:"Official audio source webpage",WORS:"Official internet radio station homepage",WPAY:"Payment",WPUB:"Publishers official webpage",WXXX:"User defined URL link frame"};var f={title:["TIT2","TT2"],artist:["TPE1",
		    "TP1"],album:["TALB","TAL"],year:["TYER","TYE"],comment:["COMM","COM"],track:["TRCK","TRK"],genre:["TCON","TCO"],picture:["APIC","PIC"],lyrics:["USLT","ULT"]},c=["title","artist","album","track"];d.o=function(a,b){a.f([0,i(6,a)],b)};d.p=function(a,b){var g=0,h=a.a(g+3);if(h>4)return{version:">2.4"};var e=a.a(g+4),v=a.d(g+5,7),k=a.d(g+5,6),s=a.d(g+5,5),j=i(g+6,a);g+=10;if(k){var o=a.h(g,!0);g+=o+4}var h={version:"2."+h+"."+e,major:h,revision:e,flags:{unsynchronisation:v,extended_header:k,experimental_indicator:s},
	    size:j},l;if(v)l={};else{j-=10;for(var v=a,e=b,k={},s=h.major,o=[],n=0,m;m=(e||c)[n];n++)o=o.concat(f[m]||[m]);for(e=o;g<j;){o=q;n=v;m=g;var u=q;switch(s){case 2:l=n.c(m,3);var r=n.q(m+3),t=6;break;case 3:l=n.c(m,4);r=n.h(m+4,!0);t=10;break;case 4:l=n.c(m,4),r=i(m+4,n),t=10}if(l=="")break;g+=t+r;if(!(e.indexOf(l)<0)&&(s>2&&(u={message:{Y:n.d(m+8,6),K:n.d(m+8,5),V:n.d(m+8,4)},m:{T:n.d(m+8+1,7),H:n.d(m+8+1,3),J:n.d(m+8+1,2),D:n.d(m+8+1,1),w:n.d(m+8+1,0)}}),m+=t,u&&u.m.w&&(i(m,n),m+=4,r-=4),!u||!u.m.D))l in
    d.b?o=d.b[l]:l[0]=="T"&&(o=d.b["T*"]),o=o?o(m,r,n,u):void 0,o={id:l,size:r,description:l in d.frames?d.frames[l]:"Unknown",data:o},l in k?(k[l].id&&(k[l]=[k[l]]),k[l].push(o)):k[l]=o}l=k}for(var w in f)if(f.hasOwnProperty(w)){a:{r=f[w];typeof r=="string"&&(r=[r]);t=0;for(g=void 0;g=r[t];t++)if(g in l){a=l[g].data;break a}a=void 0}a&&(h[w]=a)}for(var x in l)l.hasOwnProperty(x)&&(h[x]=l[x]);return h};g.ID3v2=d})(this);(function(){function g(d){var f;switch(d){case 0:f="iso-8859-1";break;case 1:f="utf-16";break;case 2:f="utf-16be";break;case 3:f="utf-8"}return f}var i=["32x32 pixels 'file icon' (PNG only)","Other file icon","Cover (front)","Cover (back)","Leaflet page","Media (e.g. lable side of CD)","Lead artist/lead performer/soloist","Artist/performer","Conductor","Band/Orchestra","Composer","Lyricist/text writer","Recording Location","During recording","During performance","Movie/video screen capture","A bright coloured fish",
	    "Illustration","Band/artist logotype","Publisher/Studio logotype"];ID3v2.b.APIC=function(d,f,c,a,b){var b=b||"3",a=d,p=g(c.a(d));switch(b){case "2":var h=c.c(d+1,3);d+=4;break;case "3":case "4":h=c.e(d+1,f-(d-a),p),d+=1+h.g}b=c.a(d,1);b=i[b];p=c.e(d+1,f-(d-a),p);d+=1+p.g;return{format:h.toString(),type:b,description:p.toString(),data:c.n(d,a+f-d)}};ID3v2.b.COMM=function(d,f,c){var a=d,b=g(c.a(d)),i=c.c(d+1,3),h=c.e(d+4,f-4,b);d+=4+h.g;d=c.e(d,a+f-d,b);return{language:i,X:h.toString(),text:d.toString()}};
	    ID3v2.b.COM=ID3v2.b.COMM;ID3v2.b.PIC=function(d,f,c,a){return ID3v2.b.APIC(d,f,c,a,"2")};ID3v2.b.PCNT=function(d,f,c){return c.O(d)};ID3v2.b.CNT=ID3v2.b.PCNT;ID3v2.b["T*"]=function(d,f,c){var a=g(c.a(d));return c.e(d+1,f-1,a).toString()};ID3v2.b.TCON=function(){return ID3v2.b["T*"].apply(this,arguments).replace(/^\(\d+\)/,"")};ID3v2.b.TCO=ID3v2.b.TCON;ID3v2.b.USLT=function(d,f,c){var a=d,b=g(c.a(d)),i=c.c(d+1,3),h=c.e(d+4,f-4,b);d+=4+h.g;d=c.e(d,a+f-d,b);return{language:i,I:h.toString(),U:d.toString()}};
	    ID3v2.b.ULT=ID3v2.b.USLT})();(function(g){function i(c,a,b,d){var g=c.h(a,!0);if(g==0)d();else{var e=c.c(a+4,4);["moov","udta","meta","ilst"].indexOf(e)>-1?(e=="meta"&&(a+=4),c.f([a+8,a+8+8],function(){i(c,a+8,g-8,d)})):c.f([a+(e in f.l?0:g),a+g+8],function(){i(c,a+g,b,d)})}}function d(c,a,b,g,h){for(var h=h===void 0?"":h+"  ",e=b;e<b+g;){var i=a.h(e,!0);if(i==0)break;var k=a.c(e+4,4);if(["moov","udta","meta","ilst"].indexOf(k)>-1){k=="meta"&&(e+=4);d(c,a,e+8,i-8,h);break}if(f.l[k]){var s=a.q(e+16+1),j=f.l[k],s=f.types[s];if(k==
	  "trkn")c[j[0]]=a.a(e+16+11),c.count=a.a(e+16+13);else{var k=e+16+4+4,o=i-16-4-4;switch(s){case "text":c[j[0]]=a.e(k,o,"UTF-8");break;case "uint8":c[j[0]]=a.r(k);break;case "jpeg":case "png":c[j[0]]={m:"image/"+s,data:a.n(k,o)}}}}e+=i}}var f=g.v={};f.types={0:"uint8",1:"text",13:"jpeg",14:"png",21:"uint8"};f.l={"\u00a9alb":["album"],"\u00a9art":["artist"],"\u00a9ART":["artist"],aART:["artist"],"\u00a9day":["year"],"\u00a9nam":["title"],"\u00a9gen":["genre"],trkn:["track"],"\u00a9wrt":["composer"],
	    "\u00a9too":["encoder"],cprt:["copyright"],covr:["picture"],"\u00a9grp":["grouping"],keyw:["keyword"],"\u00a9lyr":["lyrics"],"\u00a9gen":["genre"]};f.o=function(c,a){c.f([0,7],function(){i(c,0,c.j(),a)})};f.p=function(c){var a={};d(a,c,0,c.j());return a};g.ID4=g.v})(this);

  </script>
	<?php
}