Index: extensions/music_player/README.txt
===================================================================
--- extensions/music_player/README.txt	(revision 3329)
+++ extensions/music_player/README.txt	(revision 3329)
@@ -0,0 +1,5 @@
+This is a Subversion repository; use the 'svnadmin' tool to examine
+it.  Do not add, delete, or modify files here unless you know how
+to avoid corrupting the repository.
+
+Visit http://subversion.tigris.org/ for more information.
Index: extensions/music_player/admin/admin.php
===================================================================
--- extensions/music_player/admin/admin.php	(revision 3329)
+++ extensions/music_player/admin/admin.php	(revision 3329)
@@ -0,0 +1,495 @@
+<?php
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+$m_p = get_plugin_data('music_player');
+
+global $conf, $template, $lang, $page;
+global $prefixeTable;
+//include(get_language_filepath('plugin.lang.php', $m_p->plugin_path));
+	load_language('plugin.lang', $m_p->plugin_path);
+
+$page['infos'] = array();
+
+/*$template->assign_vars(
+  array(
+    'PLUGIN_PATH' => $m_p->plugin_path
+    )); */
+$template->assign(array(
+	'PLUGIN_PATH' 			=> $m_p->plugin_path, 
+	));
+
+// +-----------------------------------------------------------------------+
+// |                envoi d'une synchro                                     |
+// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi'] == "synchro")
+{
+ $template->set_filename('envoi', $m_p->plugin_path.'template/admin_envoi.tpl');
+
+ $repertoire='./plugins/music_player/music';
+ $dossier = array();
+	
+ if (is_dir($repertoire)){
+    
+   $dir = opendir($repertoire); //ouvre le repertoire courant désigné par la variable
+   while(false!==($folder = readdir($dir))){ //on lit tout et on récupere tout les dossiers dans $folder
+     if(is_file($folder)) { continue; }
+    
+     if(!in_array($folder, array('.','..'))){ //on eleve le parent et le courant '. et ..'
+       if($folder != 'externe') { //On ne prend que les mp3 -- A tester : mid, wav...
+         array_push($dossier, $folder);
+	    }
+      }//fin if in array
+   }//while
+ }
+    
+ natcasesort($dossier);
+ 
+ //////////////[ recherche des nouveaux dossier ]
+ $n=0;
+ foreach($dossier as $value) {
+ $n++;
+
+	   ///on vérife si ils n'existe pas déjà
+	   $rep = pwg_query('SELECT COUNT(*) AS result FROM '.MP_PLAYLIST.' WHERE url IN (\''.$value.'\') ;');
+       $res = mysql_fetch_array($rep);
+	   if ($res['result']!=0)
+	   {
+		   $n--;
+	      continue;
+	   }
+	   
+	   ///[ récup de la music juste pour info
+     $fichier = array();
+     $dir_2 = opendir('./plugins/music_player/music/'.$value); //ouvre le repertoire courant désigné par la variable
+     while(false!==($file = readdir($dir_2))){ //on lit tout et on récupere tout les dossiers dans $folder
+    
+       if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
+	 if(is_file($file)) { continue; }
+	 $page = $file; //sort l'extension du fichier
+     $page = explode('.', $page);
+     $nb = count($page);
+     $nom_fichier = $page[0];
+     for ($i = 1; $i < $nb-1; $i++){
+     $nom_fichier .= '.'.$page[$i];
+     }
+     if(isset($page[1])){
+     $ext_fichier = $page[$nb-1];
+     }
+     else {
+     $ext_fichier = '';
+     }
+    
+     if($ext_fichier == 'mp3') { //On ne prend que les mp3 -- A tester : mid, wav...
+     array_push($fichier, $file);
+     } 
+	        }//fin if in array
+     }//while
+   $fichier = implode(",", $fichier);
+
+   $template->append('syn',
+    array('RESULT' => $value,
+          'RESULT_M' => $fichier,//Ne sert que pour avoir un aperçu
+          'NBR' => $n,
+		  ));
+
+/*   $template->assign_block_vars('syn',
+    array('RESULT' => $value,
+          'RESULT_M' => $fichier,//Ne sert que pour avoir un aperçu
+          'NBR' => $n,
+		  ));*/
+
+ }//foreach  
+
+if ($n ==0)
+{
+  //$mp_msgs[] = $lang['mp_msg_admin1'];
+  array_push($page['infos'], l10n('mp_msg_admin1'));
+
+
+}
+else
+{
+$template->assign(
+  array(
+    'NBR_TT' => $n,
+    ));
+$template->assign_var_from_handle('ENVOI', 'envoi');
+}
+
+/////////////////////[ Xml 'pour tous' ? : v1.2 => plus pour tous seulement pour si nouveau
+
+ foreach($dossier as $value) {
+
+  $filename="./plugins/music_player/music/".$value."/".$value.".xml";
+  if (file_exists($filename)) {
+    continue; // si il existe on passe, la synchro des pistes se fait individuellement par soucis d'optimisation
+  }
+  /// v 1.2 on ne cree que pour les nouveaux
+  $rep = pwg_query('SELECT COUNT(*) AS result FROM '.MP_PLAYLIST.' WHERE url IN (\''.$value.'\') ;');
+  $res = mysql_fetch_array($rep);
+  if ($res['result']!=0)
+  {
+    continue;
+  }
+
+    ///[ recup music 
+	 $fichier = array();
+     $dir_2 = opendir('./plugins/music_player/music/'.$value); //ouvre le repertoire courant désigné par la variable
+     while(false!==($file = readdir($dir_2))){ //on lit tout et on récupere tout les dossiers dans $folder
+    
+       if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
+	 if(is_file($file)) { continue; }
+	 $page = $file; //sort l'extension du fichier
+     $page = explode('.', $page);
+     $nb = count($page);
+     $nom_fichier = $page[0];
+     for ($i = 1; $i < $nb-1; $i++){
+     $nom_fichier .= '.'.$page[$i];
+     }
+     if(isset($page[1])){
+     $ext_fichier = $page[$nb-1];
+     }
+     else {
+     $ext_fichier = '';
+     }
+    
+     if($ext_fichier == 'mp3') { //On ne prend que les mp3 -- A tester : mid, wav...
+     array_push($fichier, $file);
+     } 
+	        }//fin if in array
+     }//while
+     natcasesort($fichier); //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
+  /*$fichier_sql = implode("/", $fichier);
+  $fichier_sql = addslashes($fichier_sql);
+  ////[ maj de la bdd 
+  $result = pwg_query('SELECT id FROM '.MP_PLAYLIST.' WHERE url IN (\''.$value.'\') ;');
+  $data = mysql_fetch_array($result);
+  $query = '
+UPDATE '.MP_PLAYLIST.'
+  SET music=\''.$fichier_sql.'\'
+  WHERE id IN (\''.$data['id'].'\')
+   ;';
+	pwg_query($query);*/
+
+//////////////////////Création XML  
+      $_xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
+      $_xml .="<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\r\n";
+      $_xml .="\t<trackList>\r\n";
+	  
+	  /*$p_url = explode('/', $_SERVER['PHP_SELF']);
+      $count = count($p_url);
+	  $url = str_replace($p_url[$count-1], '', 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);*/
+	 
+      foreach($fichier as $file) {
+	   ///on va trouver le nom du fichier
+      $page = $file;
+      $page = explode('.', $page);
+      $nb = count($page);
+      $nom_fichier = $page[0];
+       for ($i = 1; $i < $nb-1; $i++){
+         $nom_fichier .= '.'.$page[$i];
+       }
+      $_xml .="\t\t<track>\r\n";
+      $_xml .="\t\t\t<title>".$nom_fichier."</title>\r\n";
+      $_xml .="\t\t\t<location>music/".$value."/".$file."</location>\r\n";
+      $_xml .="\t\t\t<image>music/".$value."/".$value.".jpg</image>\r\n";
+      $_xml .="\t\t</track>\r\n";
+	  }//fin foreach
+	  
+      $_xml .="\t</trackList>\r\n";
+      $_xml .="</playlist>";
+	  $file= fopen($filename, "w");
+	if (!is_writable($filename) ) {
+	 die("Le fichier est inaccessible en écriture");
+	 }
+      fwrite($file, $_xml);
+
+  //$mp_msgs[] = $lang['mp_msg_admin_3_1'].$value.'/'.$value.'.xml'.$lang['mp_msg_admin_3_2'];
+  array_push($page['infos'], l10n('mp_msg_admin_3_1').$value.'/'.$value.'.xml'.l10n('mp_msg_admin_3_2'));
+ }
+}//fin post
+
+// +-----------------------------------------------------------------------+
+// |                envoi des noms après synchro                           |
+// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi'] == "texte")
+{
+  for ($n = 1; $n <= $_POST['nbr']; $n++)
+  {
+     if($_POST['texte_'.$n.'']=="")
+	 { continue; }
+	 ///[ creation pl
+     $texte = addslashes($_POST['texte_'.$n.'']);
+     $query = '
+INSERT INTO '.MP_PLAYLIST.'
+  (type, url, texte)
+  VALUES
+  (\'local\', \''.$_POST['url_'.$n.''].'\', \''.$texte.'\')
+;';
+     pwg_query($query);
+
+	 ///[ listage fichier
+	 $fichier = array();
+     $dir_2 = opendir('./plugins/music_player/music/'.$_POST['url_'.$n.'']); //ouvre le repertoire courant désigné par la variable
+     while(false!==($file = readdir($dir_2))){ //on lit tout et on récupere tout les dossiers dans $folder
+    
+     if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
+	  if(is_file($file)) { continue; }
+	  $page = $file; //sort l'extension du fichier
+      $page = explode('.', $page);
+      $nb = count($page);
+      $nom_fichier = $page[0];
+      for ($i = 1; $i < $nb-1; $i++){
+       $nom_fichier .= '.'.$page[$i];
+      }
+      if(isset($page[1])){
+       $ext_fichier = $page[$nb-1];
+      }
+      else {
+       $ext_fichier = '';
+      }
+    
+      if($ext_fichier == 'mp3') { //On ne prend que les mp3 -- A tester : mid, wav...
+       array_push($fichier, $file);
+      }
+	 }//fin if in array
+     }//while
+    natcasesort($fichier); //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
+
+    $result = pwg_query('SELECT id FROM '.MP_PLAYLIST.' WHERE url IN (\''.$_POST['url_'.$n.''].'\') ;');
+    $data_pl = mysql_fetch_assoc($result);
+	$rang=1;
+
+	foreach($fichier as $file) {
+	
+	$page = $file; //sort nom_fichier
+    $page = explode('.', $page);
+    $nb = count($page);
+    $nom_fichier = $page[0];
+
+     $file = addslashes($file);
+     $nom_fichier = addslashes($nom_fichier);
+	 $query = '
+  INSERT INTO '.MP_MUSIC.'
+  (pl_id, rang, url, nom)
+  VALUES
+  (\''.$data_pl['id'].'\', \''.$rang.'\', \'music/'.$_POST['url_'.$n.''].'/'.$file.'\', \''.$nom_fichier.'\' )
+;';
+     pwg_query($query);
+	$rang++;
+	}
+
+  //$mp_msgs[] = $lang['mp_msg_admin_4'].$_POST['url_'.$n.''];
+  $page['infos'][]= l10n('mp_msg_admin_4').' '.$_POST['url_'.$n];
+ }//fin for
+}
+// +------------------------------------------------------------+
+// |                Nouveau externe                             |
+// +------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi'] == "externe" )
+{
+ if ($_POST['texte'] != "" )
+ {
+     $texte = addslashes($_POST['texte']);
+     $url = addslashes($_POST['url']);
+     $query = '
+INSERT INTO '.MP_PLAYLIST.'
+  (type, url, texte)
+  VALUES
+  (\'externe\', \''.$url.'\', \''.$texte.'\')
+;';
+     pwg_query($query);
+	 
+     $result = pwg_query('SELECT id FROM '.MP_PLAYLIST.' WHERE url=\''.$url.'\' ;');
+     $data_pl = mysql_fetch_assoc($result);
+	 
+     $filename="./plugins/music_player/music/externe/".$data_pl['id'].".php";
+     $rep="./plugins/music_player/music/externe";
+	 if ( !is_dir($rep) ) {    //    le répertoire existe t-il ?
+       mkdir ($rep);
+     }
+     
+	 $_php ='<?php ';
+	 $_php .='header("content-type:text/xml;charset=utf-8"); ';
+	 $_php .='readfile(\''.$url.'\'); ';
+	 $_php .='exit(); ';
+	 $_php .='?>';
+      $file= fopen($filename, "w");
+     if (!is_writable($filename) ) {
+	   die("Le fichier est inaccessible en écriture");
+	 }
+     fwrite($file, $_php);
+ }
+ else
+ { //$mp_msgs[] = $lang['mp_msg_err_aj2'] ;
+ array_push($page['errors'], l10n('mp_msg_err_aj2')); } 
+}
+// +-----------------------------------------------------------------------+
+// |              défaut : affichage des playlist existante                |
+// +-----------------------------------------------------------------------+
+$playlist = array();
+$query = 'SELECT id, url, texte FROM '.MP_PLAYLIST.' WHERE type IN (\'local\') ORDER BY id ;';
+$result = pwg_query($query);
+while ($row = mysql_fetch_assoc($result)) {
+    array_push($playlist, $row);
+}
+
+foreach ($playlist as $list) {
+
+    $txt = stripslashes($list['texte']);
+    $template->append('list',
+        array('URL' => $list['url'],
+              'TEXTE' => $txt,
+              'ID' => $list['id'],
+	    	  ));
+    $template->append('list2',
+        array('URL' => $list['url'],
+              'TEXTE' => $txt,
+              'ID' => $list['id'],
+	    	  ));
+}
+$playlist = array();
+$query = 'SELECT id, url, texte FROM '.MP_PLAYLIST.' WHERE type IN (\'externe\') ORDER BY id ;';
+$result = pwg_query($query);
+while ($row = mysql_fetch_assoc($result)) {
+    array_push($playlist, $row);
+}
+
+foreach ($playlist as $list) {
+
+    $txt = stripslashes($list['texte']);
+    $template->append('list_ex',
+        array('URL' => $list['url'],
+              'TEXTE' => $txt,
+              'ID' => $list['id'],
+	    	  ));
+}
+
+
+$conf_lecteur = explode("," , $conf['mp_lecteur']);
+$conf_plugin = explode("," , $conf['mp_plugin']);
+
+////envoi
+if ($_POST['envoi_config']=='lecteur')
+{
+  
+  
+  if ($_POST['mp_miniature']=="true")
+  {  
+    $conf_lecteur = array(
+      $_POST['h_tt'],
+      $_POST['l_tt'],
+      $_POST['h'],
+      $_POST['mp_miniature'],
+      $_POST['l'],
+      $_POST['mp_shuffle'],
+      $_POST['mp_repeat'],
+      $_POST['mp_autostart'],
+      $_POST['mp_autoscroll'],
+    );
+  } 
+  else
+  {
+      $h = $_POST['h_tt'] - 20;//pour un affichage correct la playlist doit faire la hauteur totale moins les 20px de la barre 
+    $conf_lecteur = array(
+      $_POST['h_tt'],
+      $_POST['l_tt'],
+      $h,
+      $_POST['mp_miniature'],
+      '0',
+      $_POST['mp_shuffle'],
+      $_POST['mp_repeat'],
+      $_POST['mp_autostart'],
+      $_POST['mp_autoscroll'],
+    );
+  }    
+  $newconf_lecteur = implode ("," , $conf_lecteur);
+  $query = '
+    UPDATE '.CONFIG_TABLE.'
+    SET value="'.$newconf_lecteur.'"
+    WHERE param="mp_lecteur"
+    LIMIT 1';
+  pwg_query($query);
+        
+//  $mp_msgs[] = $lang['mp_msg_admin_5'];
+array_push($page['infos'], l10n('mp_msg_admin_5'));
+}
+if (isset($_POST['envoi_config']) ){
+if ($_POST['envoi_config']=='plugin' or isset($_POST['foot']))
+{
+    $conf_plugin = array(
+      $_POST['evidence'],
+      $_POST['head'],
+      $_POST['foot'],
+      $_POST['h_pop'],
+      $_POST['l_pop'],
+    );
+  $newconf_plugin = implode ("," , $conf_plugin);
+  $query = '
+    UPDATE '.CONFIG_TABLE.'
+    SET value="'.$newconf_plugin.'"
+    WHERE param="mp_plugin"
+    LIMIT 1';
+  pwg_query($query);
+        
+  //$mp_msgs[] = $lang['mp_msg_admin_6'];
+  array_push($page['infos'], l10n('mp_msg_admin_6'));
+}}
+
+$check='checked="checked"';
+if ($conf_lecteur[3]=='true') $miniature=$check;
+if ($conf_lecteur[5]=='true') $shuffle=$check;
+if ($conf_lecteur[6]=='true') $repeat=$check;
+if ($conf_lecteur[8]=='true') $autoscroll=$check;
+
+if ($conf_lecteur[7]!='0')
+{
+$rep = pwg_query('SELECT texte FROM '.MP_PLAYLIST.' WHERE id IN (\''.$conf_lecteur[7].'\') ;');
+$pl = mysql_fetch_array($rep);
+$txt=$pl['texte'];
+}
+else {$txt="Defaut"; }
+
+if ($conf_plugin[0]=='true') $evidence=$check;
+if ($conf_plugin[1]=='true') $head=$check;
+if ($conf_plugin[2]=='true') $foot=$check;
+////assignement des valeurs
+$template->assign(
+    array(
+      'MP_EVIDENCE' => $evidence,
+      'MP_HEAD' => $head,
+      'MP_FOOT' => $foot,
+      'MP_H_POP' => 'value="'.$conf_plugin[3].'"',
+      'MP_L_POP' => 'value="'.$conf_plugin[4].'"',
+	  
+      'MP_H_TT' => 'value="'.$conf_lecteur[0].'"',
+      'MP_L_TT' => 'value="'.$conf_lecteur[1].'"',
+      'MP_H' => 'value="'.$conf_lecteur[2].'"',
+      'MP_MINIATURE_ACTIVATED' =>   $miniature,
+      'MP_L' => 'value="'.$conf_lecteur[4].'"',
+      'MP_SHUFFLE_ACTIVATED' => $shuffle,
+      'MP_REPEAT_ACTIVATED' => $repeat,
+      'AUTOSTART' => $conf_lecteur[7],
+      'AUTOSTART_T' => $txt,
+      'MP_AUTOSCROLL_ACTIVATED' => $autoscroll,
+    )
+  );
+// +-----------------------------------------------------------------------+
+// |               affichage des msg                                       |
+// +-----------------------------------------------------------------------+
+/*
+if (count($mp_msgs) > 0)
+{
+  $template->append('mp_msgs',array());
+  foreach ($mp_msgs as $mp_msg)
+  {
+    $template->append('mp_msgs.mp_msg',
+                                 array('MP_MSG'=>$mp_msg));
+  }
+}
+*/
+$template->set_filename('plugin_admin_content', $m_p->plugin_path.'template/admin.tpl');
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+
+?>
Index: extensions/music_player/admin/admin_edit.php
===================================================================
--- extensions/music_player/admin/admin_edit.php	(revision 3329)
+++ extensions/music_player/admin/admin_edit.php	(revision 3329)
@@ -0,0 +1,496 @@
+<?php
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+$m_p = get_plugin_data('music_player');
+
+global $conf, $template, $lang, $page;
+global $prefixeTable;
+	load_language('plugin.lang', $m_p->plugin_path);
+//$mp_msgs = array();
+  $template->assign(  array(
+                          'MP_PATH' => MP_PATH
+                         ));
+
+// +----------------------------------------+
+// |              Edit texte                |
+// +----------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=='edit_txt' )
+{
+
+  $txt = addslashes($_POST['texte']);
+  $query = '
+UPDATE '.MP_PLAYLIST.'
+  SET texte=\''.$txt.'\'
+  WHERE id IN (\''.$_POST['id'].'\')
+   ;';
+   pwg_query($query);
+   $page['infos'][]=l10n('mp_msg_edit1');
+   //$mp_msgs[] = $lang['mp_msg_edit1'];
+
+}
+if (isset($_GET['id']))
+{
+  $query = 'SELECT texte FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_GET['id'].'\') ;';
+  $result = pwg_query($query);
+  $data = mysql_fetch_assoc($result);
+  $txt = stripslashes($data['texte']);
+  $template->append('edit_txt',
+                               array('TXT'=>$txt, 'ID'=>$_GET['id']) );
+  $template->assign(  array(
+                          'PLAYLIST' => $txt
+                         ));
+
+}
+// +----------------------------------------+
+// |              Edit externe              |
+// +----------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=='edit_ex' )
+{
+
+  $txt = addslashes($_POST['texte']);
+  $url = addslashes($_POST['url']);
+  $query = '
+UPDATE '.MP_PLAYLIST.'
+  SET texte=\''.$txt.'\', url=\''.$url.'\'
+  WHERE id IN (\''.$_POST['id'].'\')
+   ;';
+   pwg_query($query);
+	 
+     $filename="./plugins/music_player/music/externe/".$_POST['id'].".php";
+     $rep="./plugins/music_player/music/externe";
+	 if ( !is_dir($rep) ) {    //    le répertoire existe t-il ?
+       mkdir ($rep);
+     }
+	 $_php ='<?php ';
+	 $_php .='header("content-type:text/xml;charset=utf-8"); ';
+	 $_php .='readfile(\''.$url.'\'); ';
+	 $_php .='exit(); ';
+	 $_php .='?>';
+     $file= fopen($filename, "w");
+     if (!is_writable($filename) ) {
+	   die("Le fichier est inaccessible en écriture");
+	 }
+     fwrite($file, $_php);
+
+//   $mp_msgs[] = $lang['mp_msg_edit1'];
+   $page['infos'][]=l10n('mp_msg_edit1');
+
+}
+if (isset($_GET['ex_id']))
+{
+  $query = 'SELECT url, texte FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_GET['ex_id'].'\') ;';
+  $result = pwg_query($query);
+  $data = mysql_fetch_assoc($result);
+  $txt = stripslashes($data['texte']);
+  $url = stripslashes($data['url']);
+  $template->append('edit_ex',
+                               array('TXT'=>$txt, 'URL'=>$url, 'ID'=>$_GET['ex_id']) );
+  $template->assign(  array(
+                          'PLAYLIST' => $txt
+                         ));
+
+}
+// +-----------------------------------------+
+// |             Edit Musique                |
+// +-----------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=="edit_music")
+{
+  $nom = addslashes($_POST['nom']);
+  $url = addslashes($_POST['url']);
+  $query = '
+UPDATE '.MP_MUSIC.'
+  SET nom=\''.$nom.'\', url=\''.$url.'\'
+  WHERE id IN (\''.$_POST['id'].'\')
+   ;';
+   pwg_query($query);
+   //$mp_msgs[] = $lang['mp_msg_edit1'];
+   $page['infos'][]=l10n('mp_msg_edit1');
+
+}
+if (isset($_GET['music_id']))
+{
+  $query = 'SELECT pl_id, nom, url FROM '.MP_MUSIC.' WHERE id IN (\''.$_GET['music_id'].'\') ;';
+  $result = pwg_query($query);
+  $data = mysql_fetch_assoc($result);
+  $nom = stripslashes($data['nom']);
+  $url = stripslashes($data['url']);
+  $template->append('edit_music',
+                               array('NOM'=>$nom,
+							         'URL'=>$url,
+							         'ID'=>$_GET['music_id'],
+							         'PL'=>$data['pl_id']
+									 ) );
+  $template->assign(  array(
+                          'PLAYLIST' => $nom
+                         ));
+}
+// +-----------------------------------------+
+// |        Suppression Musique              |
+// +-----------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=="suppr")
+{
+  $query = 'SELECT pl_id, url, rang FROM '.MP_MUSIC.' WHERE id IN (\''.$_POST['id'].'\') ;';
+  $result = pwg_query($query);
+  $suppr = mysql_fetch_assoc($result);
+  $url = stripslashes($suppr['url']);
+  
+  if(preg_match('`^music`',$url))
+  {
+   $filename="./plugins/music_player/".$url;
+   unlink($filename);
+   //$mp_msgs[] = $lang['mp_msg_edit5'].$url;
+   $page['infos'][]=l10n('mp_msg_edit5').$url;
+  }
+
+  $rep = pwg_query('SELECT MAX(rang) AS max FROM '.MP_MUSIC.' WHERE pl_id='.$suppr['pl_id'].';');
+  $rang = mysql_fetch_assoc($rep);
+
+  $i = $suppr['rang'] + 1;
+  while ($i<=$rang['max']) {
+    $rep = pwg_query('SELECT COUNT(*) AS result FROM '.MP_MUSIC.' WHERE rang IN (\''.$i.'\') AND pl_id IN (\''.$suppr['pl_id'].'\') ;');
+    $res = mysql_fetch_array($rep);
+    if ($res['result'] != 0)
+    {
+      $query = 'SELECT id FROM '.MP_MUSIC.' WHERE rang IN (\''.$i.'\') AND pl_id IN (\''.$suppr['pl_id'].'\') ;';
+      $result = pwg_query($query);
+	  $meme = mysql_fetch_assoc($result);
+	  $i_inf = $i - 1 ;
+	  $query = 'UPDATE '.MP_MUSIC.' SET rang=\''.$i_inf.'\' WHERE id IN (\''.$meme['id'].'\') ;';
+      pwg_query($query);
+    }
+    $i++;
+  }//while
+ pwg_query('DELETE FROM '.MP_MUSIC.' WHERE id IN (\''.$_POST['id'].'\')');
+// $mp_msgs[] = $lang['mp_msg_edit4'].$url;
+ $page['infos'][]=l10n('mp_msg_edit4').$url;
+}
+if (isset($_GET['suppr']))
+{
+  $query = 'SELECT pl_id, nom FROM '.MP_MUSIC.' WHERE id IN (\''.$_GET['suppr'].'\') ;';
+  $result = pwg_query($query);
+  $data = mysql_fetch_assoc($result);
+  $template->append('suppr',
+                               array('ID'=>$_GET['suppr'],
+							         'PL'=>$data['pl_id']
+									 ) );
+  $nom = stripslashes($data['nom']);
+  $template->assign(  array(
+                          'PLAYLIST' => $nom
+                         ));
+
+}
+
+
+// +-----------------------------------------------------------------------+
+// |                        envoi monter/descendre                         |
+// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=="rang" )
+{
+  $query = '
+UPDATE '.MP_MUSIC.'
+  SET rang=\'-1\'
+  WHERE rang IN (\''.$_POST['rang'].'\') AND pl_id IN (\''.$_GET['music'].'\') 
+   ;';
+   pwg_query($query);
+   
+  $query = '
+UPDATE '.MP_MUSIC.'
+  SET rang=\'-2\'
+  WHERE rang IN (\''.$_POST['nouv_rang'].'\') AND pl_id IN (\''.$_GET['music'].'\') 
+   ;';
+   pwg_query($query);
+
+  $query = '
+UPDATE '.MP_MUSIC.'
+  SET rang=\''.$_POST['nouv_rang'].'\'
+  WHERE rang IN (\'-1\') AND pl_id IN (\''.$_GET['music'].'\') 
+   ;';
+   pwg_query($query);
+   
+  $query = '
+UPDATE '.MP_MUSIC.'
+  SET rang=\''.$_POST['rang'].'\'
+  WHERE rang IN (\'-2\') AND pl_id IN (\''.$_GET['music'].'\') 
+   ;';
+   pwg_query($query);
+   
+  //$mp_msgs[] = $lang['mp_msg_edit3'];
+  $page['infos'][]=l10n('mp_msg_edit3');
+}
+// +-----------------------------------------------------------------------+
+// |                                AJOUT                                  |
+// +-----------------------------------------------------------------------+
+if ( !isset($_POST['nbr_ajout']) and !isset($_GET['suppr']))
+{
+$n=1;
+}
+elseif ( isset($_POST['nbr_ajout']) )
+{
+$n=$_POST['nbr_ajout'];
+}
+// |              EXtra                |
+if (isset($_GET['music']))//affichage du contenu de la playlist
+{  $template->assign(array('etape_ID' => $_GET['music'], 'etape_I' => $n  ) );
+
+  for($i=1; $i <= $n ; $i++)
+  {
+    $template->append('ajout', array('I' => $i ) );
+  }
+}// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=='ajout')
+{
+ $rep = pwg_query('SELECT MAX(rang) AS max FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].';');
+ $rg = mysql_fetch_assoc($rep);
+ for($i=1; $i <= $_POST['nbr'] ; $i++)
+ {
+	 if ( $_POST['url_'.$i.'']=="" ) {	 $mp_msgs[] = $lang['mp_msg_err_aj1'];	 continue;}
+	 if ( $_POST['nom_'.$i.'']=="" ) {	 $mp_msgs[] = $lang['mp_msg_err_aj2'];	 continue;}
+	 
+	 $url = addslashes($_POST['url_'.$i.'']);
+     $nom = addslashes($_POST['nom_'.$i.'']);
+	 
+	 if ( $_POST['rang_'.$i.'']>$rg['max'] or $_POST['rang_'.$i.'']==NULL) {	 $rang=$rg['max']+1;	 }
+	 else {
+	  $rang=$_POST['rang_'.$i.''];
+	  //[ on doit décaler les autres pour insérer le nouveau
+      $query = 'SELECT id, rang FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].' AND rang>='.$rang.' ORDER BY rang ;';
+      $result = pwg_query($query);
+      while ($sup = mysql_fetch_assoc($result)){
+	  
+	    $n_rang = $sup['rang'] + 1 ;
+        $query = '
+        UPDATE '.MP_MUSIC.'
+        SET rang=\''.$n_rang.'\'
+        WHERE id IN (\''.$sup['id'].'\') 
+        ;';
+        pwg_query($query);
+	  
+	  }//while
+	 }
+	 $query = '
+  INSERT INTO '.MP_MUSIC.'
+  (pl_id, rang, url, nom)
+  VALUES
+  (\''.$_GET['music'].'\', \''.$rang.'\', \''.$url.'\', \''.$nom.'\' )
+;';
+     pwg_query($query);
+	 //$mp_msgs[] = $lang['mp_msg_admin_4'].$url;
+	 $page['infos'][]=l10n('mp_msg_admin_4').$url;
+ }
+}
+
+
+// +-----------------------------------------------------------------------+
+// |                          Synchro bdd/fichier                          |
+// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=='synchro_bdd')
+{
+
+  $query = 'SELECT url FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_POST['id_playlist'].'\') ;';
+  $result = pwg_query($query);
+  $dt = mysql_fetch_assoc($result);
+
+/////[ recup music 
+	 $fichier = array();
+     $dir_2 = opendir('./plugins/music_player/music/'.$dt['url']);
+     while(false!==($file = readdir($dir_2))){ //on lit tout et on récupere tout les dossiers dans $folder
+    
+       if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
+	 if(is_file($file)) { continue; }
+	 $page = $file; //sort l'extension du fichier
+     $page = explode('.', $page);
+     $nb = count($page);
+     $nom_fichier = $page[0];
+     for ($i = 1; $i < $nb-1; $i++){
+     $nom_fichier .= '.'.$page[$i];
+     }
+     if(isset($page[1])){
+     $ext_fichier = $page[$nb-1];
+     }
+     else {
+     $ext_fichier = '';
+     }
+    
+     if($ext_fichier == 'mp3') { //On ne prend que les mp3 -- A tester : mid, wav...
+
+///////[ Ajout ?
+       $nom_fichier = addslashes($nom_fichier);
+	   //$rep = pwg_query('SELECT COUNT(*) AS result FROM '.MP_MUSIC.' WHERE pl_id='.$_POST['id_playlist'].' AND url REGEXP \''.$nom_fichier.'\' ;');like '%".$recherche."%'"
+	   $rep = pwg_query('SELECT COUNT(*) AS result FROM '.MP_MUSIC.' WHERE pl_id='.$_POST['id_playlist'].' AND url LIKE \'%'.$nom_fichier.'%\' ;');
+       $res = mysql_fetch_array($rep);
+	   if ($res['result']==0)
+	   {
+	   array_push($fichier, $file);
+	   }
+     
+     } 
+	 }//fin if in array
+     }//while
+  
+  $rep = pwg_query('SELECT MAX(rang) AS max FROM '.MP_MUSIC.' WHERE pl_id='.$_POST['id_playlist'].';');
+  $rang = mysql_fetch_assoc($rep);
+  $n=$rang['max']+1;
+
+///////[ Ajout ds bdd
+	foreach($fichier as $file) {
+	 $page = $file; //sort le nom fichier
+     $page = explode('.', $page);
+     $nb = count($page);
+     $nom_fichier = $page[0];
+     $file = addslashes($file);
+     $nom_fichier = addslashes($nom_fichier);
+	 $query = '
+  INSERT INTO '.MP_MUSIC.'
+  (pl_id, rang, url, nom)
+  VALUES
+  (\''.$_POST['id_playlist'].'\', \''.$n.'\', \'music/'.$dt['url'].'/'.$file.'\', \''.$nom_fichier.'\' )
+;';
+     pwg_query($query);
+	 //$mp_msgs[] = $lang['mp_msg_admin_4'].$file;
+	 $page['infos'][]=l10n('mp_msg_admin_4').$file;
+	 $n++;
+	 }
+ 
+//////[ Fichiers supprimés ?
+  $query = 'SELECT * FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].' ORDER BY rang ;';
+  $result = pwg_query($query);
+  while ($music = mysql_fetch_assoc($result)){
+  $url = stripslashes($music['url']);
+  
+   if(preg_match('`^music`', $music['url'])) {
+    $filename="./plugins/music_player/".$url;
+    if (!file_exists($filename)) {
+      pwg_query('DELETE FROM '.MP_MUSIC.' WHERE url IN (\''.$music['url'].'\')');
+	  //$mp_msgs[] = $lang['mp_msg_edit4'].$url;
+	  $page['infos'][]=l10n('mp_msg_edit4').$url;
+    }
+   }
+  }
+}
+// +-----------------------------------------------------------------------+
+// |                          Génération   XML                             |
+// +-----------------------------------------------------------------------+
+if (isset($_POST['envoi']) and $_POST['envoi']=='synchro_xml')
+{
+  $query = 'SELECT url FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_POST['id_playlist'].'\') ;';
+  $result = pwg_query($query);
+  $dt = mysql_fetch_assoc($result);
+
+  $query = 'SELECT * FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].' ORDER BY rang ;';
+  $result = pwg_query($query);
+
+  $filename="./plugins/music_player/music/".$dt['url']."/".$dt['url'].".xml";
+
+//////////////////////Création XML  
+      $_xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
+      $_xml .="<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">\r\n";
+      $_xml .="\t<trackList>\r\n";
+
+      while ($music = mysql_fetch_assoc($result)){
+	    $nom_fichier=stripslashes($music['nom']);
+	    $url=stripslashes($music['url']);
+        $_xml .="\t\t<track>\r\n";
+        $_xml .="\t\t\t<title>".$nom_fichier."</title>\r\n";
+        $_xml .="\t\t\t<location>".$url."</location>\r\n";
+        $_xml .="\t\t\t<image>music/".$dt['url']."/".$dt['url'].".jpg</image>\r\n";
+        $_xml .="\t\t</track>\r\n";
+	  }
+	  
+      $_xml .="\t</trackList>\r\n";
+      $_xml .="</playlist>";
+	  $file= fopen($filename, "w");
+	if (!is_writable($filename) ) {
+	 die("Le fichier est inaccessible en écriture");
+	 }
+      fwrite($file, $_xml);
+
+//  $mp_msgs[] = $lang['mp_msg_edit2'];
+  $page['infos'][]=l10n('mp_msg_edit2');
+}
+// +-----------------------------------------------------------------------+
+if (isset($_GET['music']))//affichage du contenu de la playlist
+// +-----------------------------------------------------------------------+
+{
+  $query = 'SELECT texte FROM '.MP_PLAYLIST.' WHERE id='.$_GET['music'].' ;';
+  $result = pwg_query($query);
+  $playlist = mysql_fetch_assoc($result);
+  
+  $txt = stripslashes($playlist['texte']);
+  $template->assign(  array(
+                        'PLAYLIST' => $txt
+                      ));
+
+  $template->assign(array('playlist_TEXTE'=>$txt, 'playlist_ID'=>$_GET['music']));
+
+  $rep = pwg_query('SELECT MAX(rang) AS max FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].';');
+  $rang = mysql_fetch_assoc($rep);
+    
+  $query = 'SELECT * FROM '.MP_MUSIC.' WHERE pl_id='.$_GET['music'].' ORDER BY rang ;';
+  $result = pwg_query($query);
+  $num=0;
+   while ($music = mysql_fetch_assoc($result)){
+    $music_url = stripslashes($music['url']);
+    $music_nom = stripslashes($music['nom']);
+	
+	if ($music['rang']==$rang['max'] and $music['rang']=='1')
+	{
+	$template->append('music',
+                                 array('NOM' => $music_nom,
+								       'FILE' => $music_url,
+								       'ID' => $music['id'],
+								       'CLASS' => ($num++ % 2 == 1) ? 'row2' : 'row1'));
+	}
+	elseif ($music['rang']==$rang['max'])
+	{
+    $template->append('music',
+                                 array('NOM' => $music_nom,
+								       'FILE' => $music_url,
+								       'ID' => $music['id'],
+								       'CLASS' => ($num++ % 2 == 1) ? 'row2' : 'row1',
+								       'UP_RANG' => $music['rang'],
+								       'UP_RANG_NEW' => ($music['rang']-1) ));
+	}
+	elseif ($music['rang']=='1')
+	{
+    $template->append('music',
+                                 array('NOM' => $music_nom,
+								       'FILE' => $music_url,
+								       'ID' => $music['id'],
+								       'CLASS' => ($num++ % 2 == 1) ? 'row2' : 'row1',
+								       'D_RANG' => $music['rang'],
+								       'D_RANG_NEW' => ($music['rang']+1) ));
+	}
+	else
+	{
+    $template->append('music',
+                                 array('NOM' => $music_nom,
+								       'FILE' => $music_url,
+								       'ID' => $music['id'],
+								       'CLASS' => ($num++ % 2 == 1) ? 'row2' : 'row1',
+								       'D_RANG' => $music['rang'],
+								       'D_RANG_NEW' => ($music['rang']+1),
+								       'UP_RANG' => $music['rang'],
+								       'UP_RANG_NEW' => ($music['rang']-1) ));
+	}
+  }
+}
+
+// +-----------------------------------------------------------------------+
+// |               affichage des msg                                       |
+// +-----------------------------------------------------------------------+
+/*
+if (count($mp_msgs) > 0)
+{
+  $template->append('mp_msgs',array());
+  foreach ($mp_msgs as $mp_msg)
+  {
+    $template->append('mp_msgs.mp_msg',
+                                 array('MP_MSG'=>$mp_msg));
+  }
+}
+*/
+$template->set_filename('plugin_admin_content', $m_p->plugin_path.'template/admin_edit.tpl');
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+
+?>
Index: extensions/music_player/admin/admin_img.php
===================================================================
--- extensions/music_player/admin/admin_img.php	(revision 3329)
+++ extensions/music_player/admin/admin_img.php	(revision 3329)
@@ -0,0 +1,166 @@
+<?php
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+$m_p = get_plugin_data('music_player');
+
+global $conf, $template, $lang, $page;
+global $prefixeTable;
+	load_language('plugin.lang', $m_p->plugin_path);
+
+
+  $query = 'SELECT url, texte FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_GET['id'].'\') ;';
+  $result = pwg_query($query);
+  $data = mysql_fetch_assoc($result);
+
+
+// +--------------------------------------------------------+
+// |              envoi du formulaire                       |
+// +--------------------------------------------------------+
+if (isset($_POST['ajout_image']) or isset($_POST['suppr']) ) {
+if ( $_POST['ajout_image'] == "lien") 
+{
+
+  $source = ImageCreateFromJpeg($_POST['lien']);
+	
+  $dir="./plugins/music_player/music/".$data['url']."/".$data['url'].".jpg";
+  ImageJpeg ($source, $dir);
+	
+  //$mp_msgs[] = "Ajout réussi !";
+  $page['infos']=l10n('mp_linkimg_ok');
+	 
+} 
+// +--------------------------------------------------------+
+ elseif ( $_POST['ajout_image'] == "upload" ) 
+// +--------------------------------------------------------+
+{
+
+function msgErreur($msg) {    //    le message d'erreur
+
+        echo "<script language=\"javascript\">alert(\"".$msg."\");</script>\n";    //    le message d'erreur dans une boite d'alert javascript
+
+    };    //    fin de fonction message d'erreur
+function uploadImg ($fichier, $rep) {    //    fonction de transfert d'image vers le serveur
+        // $fichier->nom du champ de fichier html, $rep->nom du répertoire dans lequel transférer l'image
+        //    la fonction retourne le nom de fichier si réussite ou false
+        if ( !is_dir($rep) ) {    //    le répertoire existe t-il ?
+            msgErreur("Le répertoire n'existe pas !!!");    
+            return false;
+        };
+
+        $nom_temp = $_FILES[$fichier]['tmp_name'];    //    le nom du fichier temporaire
+        if ( !is_uploaded_file($nom_temp) ) {    //    vérifier si le fichier est présent
+            msgErreur("Le fichier est introuvable");
+            return false;
+        };
+
+        $type_fichier = $_FILES[$fichier]['type'];    // on vérifie maintenant l'extension
+
+        if ( !strstr($type_fichier, 'jpg') && !strstr($type_fichier, 'jpeg') && !strstr($type_fichier, 'JPG') ) {
+            msgErreur("Type de fichier non autorisé");
+            return false;
+        };
+
+        //$nom_fichier = $data['url'].$type_fichier;     on copie le fichier dans le dossier de destination        
+        $nom_fichier = $_FILES[$fichier]['name'];    // on copie le fichier dans le dossier de destination        
+        if ( !move_uploaded_file($nom_temp, $rep.$nom_fichier) && !chmod($rep.$nom_fichier, 0644) ) {    //    transfèrer le fichier en codant les caractères spx
+            msgErreur("Impossible de copier le fichier dans ".$rep);
+            return false;
+        };
+        return $nom_fichier;
+    };    //    fin de fonction uploadImg
+	
+	
+    $rep="./plugins/music_player/music/".$data['url']."/";
+    $test = uploadImg ("fichier", $rep);
+
+ if ( $test )
+ {
+  $filename="./plugins/music_player/music/".$data['url']."/".$data['url'].".jpg";
+  if ( file_exists($filename))
+  {
+   unlink($filename);
+  }
+  
+  	 $page = $test; //sort l'extension du fichier
+     $page = explode('.', $page);
+     $nb = count($page);
+     $nom_fichier = $page[0];
+     for ($i = 1; $i < $nb-1; $i++){
+     $nom_fichier .= '.'.$page[$i];
+     }
+     if(isset($page[1])){
+     $ext_fichier = $page[$nb-1];
+     }
+     else {
+     $ext_fichier = '';
+     }
+
+  rename($rep.$test, $rep.$data['url'].".jpg");
+  //$mp_msgs[] = "upload réussi !";
+  $page['infos']=l10n('mp_uploadimg_ok');
+ }
+}
+// +--------------------------------------------------------+
+ elseif ( isset($_POST['suppr']) ) 
+// +--------------------------------------------------------+
+{
+   $filename="./plugins/music_player/music/".$data['url']."/".$data['url'].".jpg";
+   unlink($filename);
+
+}
+
+}
+// +--------------------------------------------------------+
+// |               affichage des msg                        |
+// +--------------------------------------------------------+
+/*
+if (count($mp_msgs) > 0)
+{
+  $template->append('mp_msgs',array());
+  foreach ($mp_msgs as $mp_msg)
+  {
+    $template->append('mp_msgs.mp_msg',
+                                 array('MP_MSG'=>$mp_msg));
+  }
+}*/
+// +----------------------------------------+
+// |          affichage défaut              |
+// +----------------------------------------+
+
+  $filename="./plugins/music_player/music/".$data['url']."/".$data['url'].".jpg";
+  $filename2="./plugins/music_player/music/".$data['url']."/".$data['url'].".jpeg";
+  $filename3="./plugins/music_player/music/".$data['url']."/".$data['url'].".JPG";
+if ( file_exists($filename) )
+{
+    $template->append('miniature',
+                                 array('URL'=>$filename ) );
+}
+elseif ( file_exists($filename2) )
+{
+    $template->append('miniature',
+                                 array('URL'=>$filename ) );
+}
+elseif ( file_exists($filename3) )
+{
+    $template->append('miniature',
+                                 array('URL'=>$filename ) );
+}
+else
+{
+    $template->append('rien',
+                                 array('TXT'=>l10n('mp_info_min') ) );
+}
+
+
+
+$template->assign(  array(
+                        'PLAYLIST' => $data['texte']
+                      ));
+$template->append('envoi',
+                              array('ID'=>$_GET['id']) );
+
+$template->set_filename('plugin_admin_content', $m_p->plugin_path.'template/admin_img.tpl');
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+
+?>
Index: extensions/music_player/admin/admin_suppr.php
===================================================================
--- extensions/music_player/admin/admin_suppr.php	(revision 3329)
+++ extensions/music_player/admin/admin_suppr.php	(revision 3329)
@@ -0,0 +1,105 @@
+<?php
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+$m_p = get_plugin_data('music_player');
+
+global $conf, $template, $lang, $page;
+global $prefixeTable;
+	load_language('plugin.lang', $m_p->plugin_path);
+$mp_msgs = array();
+
+// +----------------------------------------+
+// |              Contenu                   |
+// +----------------------------------------+
+
+if (!isset($_POST['envoi']))
+{
+
+    $template->append('suppr', array('ID'=>$_GET['id']) );
+}
+
+elseif ($_POST['envoi']=="suppr")
+{
+
+ if ($_POST['type_suppr']=="suppr_folder")
+ {
+  $query = 'SELECT type FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_POST['id'].'\') ;';
+  $result = pwg_query($query);
+  $typ = mysql_fetch_assoc($result);
+  if ($typ['type']=="local")
+  {
+    $query = 'SELECT url FROM '.MP_PLAYLIST.' WHERE id IN (\''.$_POST['id'].'\') ;';
+    $result = pwg_query($query);
+    $dt = mysql_fetch_assoc($result);
+    $filename="./plugins/music_player/music/".$dt['url']."/";
+    if (file_exists($filename))
+    {
+      if (is_dir($filename))
+     {
+      $id_dossier = opendir($filename);
+        while($element = readdir($id_dossier))
+        {
+          if ($element != "." && $element != "..")
+          unlink($filename."/".$element);
+        }
+       closedir($id_dossier);
+       rmdir($filename);
+       }
+     else unlink($filename);
+     } 
+  }//if local
+  elseif ($typ['type']=="externe")
+  {
+    $filename="./plugins/music_player/music/externe/".$_POST['id'].".php";
+    if (file_exists($filename))
+    {
+      unlink($filename);
+	}
+  }//if externe
+  
+  if (!file_exists($filename))
+  {
+  //$mp_msgs[] = $lang['mp_msg_suppr1'];
+  $page['infos'][]=l10n('mp_msg_suppr1');
+  }
+  else
+  {
+  //$mp_msgs[] = $lang['mp_msg_suppr2'];
+  $page['infos'][]=l10n('mp_msg_suppr2');
+  }
+ }
+ 
+   $query = '
+DELETE FROM '.MP_PLAYLIST.'
+  WHERE id IN (\''.$_POST['id'].'\')
+;';
+  pwg_query($query);
+   $query = '
+DELETE FROM '.MP_MUSIC.'
+  WHERE pl_id IN (\''.$_POST['id'].'\')
+;';
+  pwg_query($query);
+  
+  //$mp_msgs[] = $lang['mp_msg_suppr3'];
+  $page['infos'][]=l10n('mp_msg_suppr3');
+}
+
+// +-----------------------------------------------------------------------+
+// |               affichage des msg                                       |
+// +-----------------------------------------------------------------------+
+/*
+if (count($mp_msgs) > 0)
+{
+  $template->append('mp_msgs',array());
+  foreach ($mp_msgs as $mp_msg)
+  {
+    $template->append('mp_msgs.mp_msg',
+                                 array('MP_MSG'=>$mp_msg));
+  }
+}
+*/
+$template->set_filename('plugin_admin_content', $m_p->plugin_path.'template/admin_suppr.tpl');
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+
+?>
Index: extensions/music_player/admin/help.php
===================================================================
--- extensions/music_player/admin/help.php	(revision 3329)
+++ extensions/music_player/admin/help.php	(revision 3329)
@@ -0,0 +1,23 @@
+<?php
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+$m_p = get_plugin_data('music_player');
+
+global $conf, $template, $lang, $page;
+global $prefixeTable;
+define('MP_PLAYLIST' , $prefixeTable . 'mp_playlist');
+	load_language('plugin.lang', $m_p->plugin_path);
+$mp_msgs = array();
+
+// +----------------------------------------+
+// |              Contenu                   |
+// +----------------------------------------+
+
+    $template->append('suppr', array('ID'=>$_GET['id']) );
+
+
+$template->set_filename('plugin_admin_content', $m_p->plugin_path.'template/help.tpl');
+$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
+
+
+?>
Index: extensions/music_player/class.inc.php
===================================================================
--- extensions/music_player/class.inc.php	(revision 3329)
+++ extensions/music_player/class.inc.php	(revision 3329)
@@ -0,0 +1,212 @@
+<?php
+
+
+class Musicplayer
+{
+  var $plugin_name, $plugin_path;
+  
+  function Musicplayer($plugin_name, $plugin_path)
+  {
+    // Args
+    $this->plugin_name = $plugin_name;
+    $this->plugin_path = $plugin_path;
+    // handler
+   // $this->initialize_event_handler();
+  }
+  /*
+  function loading_lang()
+  {
+    global $lang;
+    //include(get_language_filepath('plugin.lang.php', $this->plugin_path));
+	load_language('plugin.lang', $this->plugin_path);
+  }  */
+  function var_template()
+  {
+    global $user;
+    if ($user['template'] == 'flop_pure_design')
+    {
+      $r = 'include/var_fpd.inc.php';	
+    }
+    else
+    {
+     $r = 'include/var.inc.php';	
+    }
+   return $r;
+  }
+  /*function remove_code($tlp_handle, $str_begin, $str_end)
+  {
+      global $template;
+ 
+      $template->loadfile($tlp_handle);
+ 
+      $p_beg = strpos($template->uncompiled_code[$tlp_handle], $str_begin);
+      $p_end = strpos($template->uncompiled_code[$tlp_handle], $str_end) + strlen($str_end);
+      $s = substr($template->uncompiled_code[$tlp_handle], $p_beg, $p_end - $p_beg);
+ 
+      $template->uncompiled_code[$tlp_handle] = 
+      substr_replace($template->uncompiled_code[$tlp_handle], '', $p_beg, $p_end - $p_beg);
+ 
+      return $s;
+  }
+  
+  function add_before_code($tlp_handle, $insert_before, $code)
+  {
+      global $template;
+ 
+      $template->loadfile($tlp_handle);
+      $template->uncompiled_code[$tlp_handle] = str_replace($insert_before, $code.$insert_before, $template->uncompiled_code[$tlp_handle]);
+  } 
+  function add_after_code($tlp_handle, $insert_after, $code)
+  {
+    global $template;
+ 
+    $template->loadfile($tlp_handle);
+    $template->uncompiled_code[$tlp_handle] = str_replace($insert_after, $insert_after.$code, $template->uncompiled_code[$tlp_handle]);
+  }*/
+   function register_mp_menubar_blocks($menu_ref_arr) {
+    $menu = & $menu_ref_arr[0];
+    if ($menu->get_id() != 'menubar')
+      return;
+    $menu->register_block(new RegisteredBlock('mbMusicPlayer', 'Music player', 'MP'));
+  }
+
+
+  function placer_lien($menu_ref_arr)
+  {
+
+///////////////////////[début de l'affichage lien]////////////////////
+    //$this->loading_lang();
+	
+    global $lang, $conf, $template;
+	
+    /*$conf_plugin = explode("," , $conf['mp_plugin']);
+
+    $this->add_before_code('menubar','<!-- END quick_search -->','<ul>
+	<li><img src="plugins/'.$this->plugin_name.'/template/audio.png" /> <a name="{lang:lien_expl}" href="javascript:void(0)" onClick="window.open(\''.get_root_url().'plugins/'.$this->plugin_name.'/lecteur.php\',\'musique\',\'width='.$conf_plugin[4].',height='.$conf_plugin[3].',top=400,left=400,menubar=no,resizable=yes,toolbar=no,status=no,alwaysRaised=yes\')" >{lang:lien_titre}</a></li>
+</ul>
+	');*/
+	
+	  $menu = & $menu_ref_arr[0];
+  
+	  if ( ($block = $menu->get_block('mbSpecials')) != null )
+	  {
+	    load_language('plugin.lang', $this->plugin_path);
+	
+	    $position = count($block->data)+1;
+	
+	    array_splice($block->data, $position-1, 0, array('mp' =>
+	      array(
+	        'URL' => 'javascript:void(0)'.'onClick="window.open(\''.get_root_url().'plugins/'.$this->plugin_name.'/lecteur.php\',\'musique\',\'width='.$conf_plugin[4].',height='.$conf_plugin[3].',top=400,left=400,menubar=no,resizable=yes,toolbar=no,status=no,alwaysRaised=yes\')" ',
+	        'TITLE' => l10n('lien_expl'),
+	        'NAME' => l10n('lien_titre')
+	        )
+	      )
+	    );
+	  }
+
+	/*
+/////[ si metre en evidence
+	if ($conf_plugin[0]=="true")
+	{
+	  //si envoi formulaire avec "se rappeler" coché
+	  if (isset($_POST['mp_remember']) and $_POST['mp_remember']=="on")
+	  {
+       switch($_POST['mp_rep'])
+       {
+         /*case 'oui':setcookie( 'pwg_music_player', 'open', time()+60*60*24*10, cookie_path() );break;
+         case 'non':setcookie( 'pwg_music_player', 'closed', time()+60*60*24*10, cookie_path() );break;
+         case 'oui':setcookie( 'pwg_music_player', 'open', time()+60, cookie_path() );break;
+         case 'non':setcookie( 'pwg_music_player', 'closed', time()+60, cookie_path() );break;
+       }
+	  }
+	  elseif (isset($_POST['mp_rep']))
+	  {
+       switch($_POST['mp_rep'])
+       {
+         case 'oui':pwg_set_session_var( 'pwg_music_player', 'open' );break;
+         case 'non':pwg_set_session_var( 'pwg_music_player', 'closed' );break;
+       }
+	  }
+	  
+	  $mp_ses = pwg_get_session_var( 'pwg_music_player', '' );
+	  //si on a cliqué oui, affiche le lecteur 
+      if ( $_COOKIE['pwg_music_player'] == 'open' or $mp_ses == 'open' or $_POST['mp_rep'] == 'oui' )
+      {	
+      $my_root_url = get_root_url().'plugins/'. basename(dirname(__FILE__)).'/';
+      $js =
+'<script type="text/javascript">
+var theLecteur = window.open("", "musique", "width='.$conf_plugin[4].',height='.$conf_plugin[3].',top=400,left=400,menubar=no,resizable=yes,toolbar=no,status=no,alwaysRaised=yes");
+if ( theLecteur.location.toString()=="about:blank" || !theLecteur.location.toString().match(/^(https?.*\/)lecteur\.php(\?.+)?$/))
+{
+  theLecteur.location = "'.$my_root_url.'lecteur.php";
+}
+</script>';
+
+      $template->assign_block_vars( 'head_element', array(
+          'CONTENT' => $js
+            )
+          );
+
+      }
+	  //si on a cliqué non, on n'affiche pas le msg 
+	  //si on a pas cliqué, on affiche le msg 
+      elseif ( !isset($_COOKIE['pwg_music_player']) and !isset($_POST['mp_rep']) and !isset($_SESSION['pwg_pwg_music_player']) )
+      {
+	      include($this->var_template());
+          $this->add_before_code('menubar','<!-- BEGIN links -->', $msg);*/
+          /*$template->assign_block_vars( 'head_element', array(
+             'CONTENT' => '<style type="text/css">
+#mbMusic_player
+{
+	font-size: 1em;
+	padding: 0px;
+}
+</style>'
+                )
+               );*/
+      //}
+	//} /fin metre en evidence
+	
+  }//fin placer_lien
+
+  function placer_block($menu_ref_arr)
+  {
+  	global $template, $user, $conf;
+	load_language('plugin.lang', $this->plugin_path);
+	
+    $conf_plugin = explode("," , $conf['mp_plugin']);
+
+    $menu = & $menu_ref_arr[0];
+	$template->assign(array(  'ATRIB' => 'name="'.l10n('lien_expl').'" href="javascript:void(0)" onClick="window.open(\''.get_root_url().'plugins/'.$this->plugin_name.'/lecteur.php\',\'musique\',\'width='.$conf_plugin[4].',height='.$conf_plugin[3].',top=400,left=400,menubar=no,resizable=yes,toolbar=no,status=no,alwaysRaised=yes\')"'  ,
+							  'PLG_path' => get_root_url().'plugins/'.$this->plugin_name    ));
+
+			if (($block = $menu->get_block( 'mbMusicPlayer' )) != null) {
+               $block->set_title(l10n('lien_titre'));
+               $block->template = $this->plugin_path.'template/block.tpl';
+            }
+
+  }
+  function mp_lien_menu($menu)
+  {
+    array_push($menu, array('NAME' => 'Music Player',
+            'URL' => get_admin_plugin_menu_link(get_root_url().'plugins/'.$this->plugin_name.'/admin/admin.php')));
+    return $menu;
+  }
+  
+  function add_css()
+{
+  global $page, $template;
+  if (isset($page['body_id']) and $page['body_id']=='theAdminPage' and ($_GET['section']=='music_player/admin/admin.php' or $_GET['section']=='music_player/admin/help.php' or $_GET['section']=='music_player/admin/admin_edit.php') )
+  {
+      $template -> assign(
+        'head_element', array (
+          'CONTENT' => '<link rel="stylesheet" type="text/css" href="plugins/'.$this->plugin_name.'/template/admin.css">'
+        )
+      );
+	  }
+
+
+}
+
+}//fin class
+?>
Index: extensions/music_player/conf/authz
===================================================================
--- extensions/music_player/conf/authz	(revision 3329)
+++ extensions/music_player/conf/authz	(revision 3329)
@@ -0,0 +1,32 @@
+### This file is an example authorization file for svnserve.
+### Its format is identical to that of mod_authz_svn authorization
+### files.
+### As shown below each section defines authorizations for the path and
+### (optional) repository specified by the section name.
+### The authorizations follow. An authorization line can refer to:
+###  - a single user,
+###  - a group of users defined in a special [groups] section,
+###  - an alias defined in a special [aliases] section,
+###  - all authenticated users, using the '$authenticated' token,
+###  - only anonymous users, using the '$anonymous' token,
+###  - anyone, using the '*' wildcard.
+###
+### A match can be inverted by prefixing the rule with '~'. Rules can
+### grant read ('r') access, read-write ('rw') access, or no access
+### ('').
+
+[aliases]
+# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
+
+[groups]
+# harry_and_sally = harry,sally
+# harry_sally_and_joe = harry,sally,&joe
+
+# [/foo/bar]
+# harry = rw
+# &joe = r
+# * =
+
+# [repository:/baz/fuz]
+# @harry_and_sally = rw
+# * = r
Index: extensions/music_player/conf/passwd
===================================================================
--- extensions/music_player/conf/passwd	(revision 3329)
+++ extensions/music_player/conf/passwd	(revision 3329)
@@ -0,0 +1,8 @@
+### This file is an example password file for svnserve.
+### Its format is similar to that of svnserve.conf. As shown in the
+### example below it contains one section labelled [users].
+### The name and password for each user follow, one account per line.
+
+[users]
+# harry = harryssecret
+# sally = sallyssecret
Index: extensions/music_player/conf/svnserve.conf
===================================================================
--- extensions/music_player/conf/svnserve.conf	(revision 3329)
+++ extensions/music_player/conf/svnserve.conf	(revision 3329)
@@ -0,0 +1,47 @@
+### This file controls the configuration of the svnserve daemon, if you
+### use it to allow access to this repository.  (If you only allow
+### access through http: and/or file: URLs, then this file is
+### irrelevant.)
+
+### Visit http://subversion.tigris.org/ for more information.
+
+[general]
+### These options control access to the repository for unauthenticated
+### and authenticated users.  Valid values are "write", "read",
+### and "none".  The sample settings below are the defaults.
+# anon-access = read
+# auth-access = write
+### The password-db option controls the location of the password
+### database file.  Unless you specify a path starting with a /,
+### the file's location is relative to the directory containing
+### this configuration file.
+### If SASL is enabled (see below), this file will NOT be used.
+### Uncomment the line below to use the default password file.
+# password-db = passwd
+### The authz-db option controls the location of the authorization
+### rules for path-based access control.  Unless you specify a path
+### starting with a /, the file's location is relative to the the
+### directory containing this file.  If you don't specify an
+### authz-db, no path-based access control is done.
+### Uncomment the line below to use the default authorization file.
+# authz-db = authz
+### This option specifies the authentication realm of the repository.
+### If two repositories have the same authentication realm, they should
+### have the same password database, and vice versa.  The default realm
+### is repository's uuid.
+# realm = My First Repository
+
+[sasl]
+### This option specifies whether you want to use the Cyrus SASL
+### library for authentication. Default is false.
+### This section will be ignored if svnserve is not built with Cyrus
+### SASL support; to check, run 'svnserve --version' and look for a line
+### reading 'Cyrus SASL authentication is available.'
+# use-sasl = true
+### These options specify the desired strength of the security layer
+### that you want SASL to provide. 0 means no encryption, 1 means
+### integrity-checking only, values larger than 1 are correlated
+### to the effective key length for encryption (e.g. 128 means 128-bit
+### encryption). The values below are the defaults.
+# min-encryption = 0
+# max-encryption = 256
Index: extensions/music_player/db/current
===================================================================
--- extensions/music_player/db/current	(revision 3329)
+++ extensions/music_player/db/current	(revision 3329)
@@ -0,0 +1,1 @@
+0
Index: extensions/music_player/db/format
===================================================================
--- extensions/music_player/db/format	(revision 3329)
+++ extensions/music_player/db/format	(revision 3329)
@@ -0,0 +1,2 @@
+4
+layout sharded 1000
Index: extensions/music_player/db/fs-type
===================================================================
--- extensions/music_player/db/fs-type	(revision 3329)
+++ extensions/music_player/db/fs-type	(revision 3329)
@@ -0,0 +1,1 @@
+fsfs
Index: extensions/music_player/db/fsfs.conf
===================================================================
--- extensions/music_player/db/fsfs.conf	(revision 3329)
+++ extensions/music_player/db/fsfs.conf	(revision 3329)
@@ -0,0 +1,37 @@
+### This file controls the configuration of the FSFS filesystem.
+
+[memcached-servers]
+### These options name memcached servers used to cache internal FSFS
+### data.  See http://www.danga.com/memcached/ for more information on
+### memcached.  To use memcached with FSFS, run one or more memcached
+### servers, and specify each of them as an option like so:
+# first-server = 127.0.0.1:11211
+# remote-memcached = mymemcached.corp.example.com:11212
+### The option name is ignored; the value is of the form HOST:PORT.
+### memcached servers can be shared between multiple repositories;
+### however, if you do this, you *must* ensure that repositories have
+### distinct UUIDs and paths, or else cached data from one repository
+### might be used by another accidentally.  Note also that memcached has
+### no authentication for reads or writes, so you must ensure that your
+### memcached servers are only accessible by trusted users.
+
+[caches]
+### When a cache-related error occurs, normally Subversion ignores it
+### and continues, logging an error if the server is appropriately
+### configured (and ignoring it with file:// access).  To make
+### Subversion never ignore cache errors, uncomment this line.
+# fail-stop = true
+
+[rep-sharing]
+### To conserve space, the filesystem can optionally avoid storing
+### duplicate representations.  This comes at a slight cost in performace,
+### as maintaining a database of shared representations can increase
+### commit times.  The space savings are dependent upon the size of the
+### repository, the number of objects it contains and the amount of
+### duplication between them, usually a function of the branching and
+### merging process.
+###
+### The following parameter enables rep-sharing in the repository.  It can
+### be switched on and off at will, but for best space-saving results
+### should be enabled consistently over the life of the repository.
+# enable-rep-sharing = false
Index: extensions/music_player/db/min-unpacked-rev
===================================================================
--- extensions/music_player/db/min-unpacked-rev	(revision 3329)
+++ extensions/music_player/db/min-unpacked-rev	(revision 3329)
@@ -0,0 +1,1 @@
+0
Index: extensions/music_player/db/revprops/0/0
===================================================================
--- extensions/music_player/db/revprops/0/0	(revision 3329)
+++ extensions/music_player/db/revprops/0/0	(revision 3329)
@@ -0,0 +1,5 @@
+K 8
+svn:date
+V 27
+2009-05-21T12:03:59.031250Z
+END
Index: extensions/music_player/db/revs/0/0
===================================================================
--- extensions/music_player/db/revs/0/0	(revision 3329)
+++ extensions/music_player/db/revs/0/0	(revision 3329)
@@ -0,0 +1,11 @@
+PLAIN
+END
+ENDREP
+id: 0.0.r0/17
+type: dir
+count: 0
+text: 0 0 4 4 2d2977d1c96f487abe4a1e202dd03b4e
+cpath: /
+
+
+17 107
Index: extensions/music_player/db/txn-current
===================================================================
--- extensions/music_player/db/txn-current	(revision 3329)
+++ extensions/music_player/db/txn-current	(revision 3329)
@@ -0,0 +1,1 @@
+0
Index: extensions/music_player/db/uuid
===================================================================
--- extensions/music_player/db/uuid	(revision 3329)
+++ extensions/music_player/db/uuid	(revision 3329)
@@ -0,0 +1,1 @@
+1a12ef5f-eba5-984d-9824-cb95ad0bb0d1
Index: extensions/music_player/format
===================================================================
--- extensions/music_player/format	(revision 3329)
+++ extensions/music_player/format	(revision 3329)
@@ -0,0 +1,1 @@
+5
Index: extensions/music_player/hooks/post-commit.tmpl
===================================================================
--- extensions/music_player/hooks/post-commit.tmpl	(revision 3329)
+++ extensions/music_player/hooks/post-commit.tmpl	(revision 3329)
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# POST-COMMIT HOOK
+#
+# The post-commit hook is invoked after a commit.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-commit' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REV          (the number of the revision just committed)
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the commit has already completed and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# newly-committed tree.
+#
+# On a Unix system, the normal procedure is to have 'post-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-commit.bat' or 'post-commit.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# the Subversion repository at
+# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
+# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+
+mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
Index: extensions/music_player/hooks/post-lock.tmpl
===================================================================
--- extensions/music_player/hooks/post-lock.tmpl	(revision 3329)
+++ extensions/music_player/hooks/post-lock.tmpl	(revision 3329)
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# POST-LOCK HOOK
+#
+# The post-lock hook is run after a path is locked.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-lock' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the user who created the lock)
+#
+# The paths that were just locked are passed to the hook via STDIN (as
+# of Subversion 1.2, only one path is passed per invocation, but the
+# plan is to pass all locked paths at once, so the hook program
+# should be written accordingly).
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the lock has already been created and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# newly-created lock.
+#
+# On a Unix system, the normal procedure is to have 'post-lock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-lock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-lock.bat' or 'post-lock.exe',
+# but the basic idea is the same.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+USER="$2"
+
+# Send email to interested parties, let them know a lock was created:
+mailer.py lock "$REPOS" "$USER" /path/to/mailer.conf
Index: extensions/music_player/hooks/post-revprop-change.tmpl
===================================================================
--- extensions/music_player/hooks/post-revprop-change.tmpl	(revision 3329)
+++ extensions/music_player/hooks/post-revprop-change.tmpl	(revision 3329)
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+# POST-REVPROP-CHANGE HOOK
+#
+# The post-revprop-change hook is invoked after a revision property
+# has been added, modified or deleted.  Subversion runs this hook by
+# invoking a program (script, executable, binary, etc.) named
+# 'post-revprop-change' (for which this file is a template), with the
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REV          (the revision that was tweaked)
+#   [3] USER         (the username of the person tweaking the property)
+#   [4] PROPNAME     (the property that was changed)
+#   [5] ACTION       (the property was 'A'dded, 'M'odified, or 'D'eleted)
+#
+#   [STDIN] PROPVAL  ** the old property value is passed via STDIN.
+#
+# Because the propchange has already completed and cannot be undone,
+# the exit code of the hook program is ignored.  The hook program
+# can use the 'svnlook' utility to help it examine the
+# new property value.
+#
+# On a Unix system, the normal procedure is to have 'post-revprop-change'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-revprop-change' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-revprop-change.bat' or 'post-revprop-change.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# the Subversion repository at
+# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
+# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+USER="$3"
+PROPNAME="$4"
+ACTION="$5"
+
+mailer.py propchange2 "$REPOS" "$REV" "$USER" "$PROPNAME" "$ACTION" /path/to/mailer.conf
Index: extensions/music_player/hooks/post-unlock.tmpl
===================================================================
--- extensions/music_player/hooks/post-unlock.tmpl	(revision 3329)
+++ extensions/music_player/hooks/post-unlock.tmpl	(revision 3329)
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# POST-UNLOCK HOOK
+#
+# The post-unlock hook runs after a path is unlocked.  Subversion runs
+# this hook by invoking a program (script, executable, binary, etc.)
+# named 'post-unlock' (for which this file is a template) with the 
+# following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the user who destroyed the lock)
+#
+# The paths that were just unlocked are passed to the hook via STDIN
+# (as of Subversion 1.2, only one path is passed per invocation, but
+# the plan is to pass all unlocked paths at once, so the hook program
+# should be written accordingly).
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# Because the lock has already been destroyed and cannot be undone,
+# the exit code of the hook program is ignored.
+#
+# On a Unix system, the normal procedure is to have 'post-unlock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'post-unlock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'post-unlock.bat' or 'post-unlock.exe',
+# but the basic idea is the same.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+USER="$2"
+
+# Send email to interested parties, let them know a lock was removed:
+mailer.py unlock "$REPOS" "$USER" /path/to/mailer.conf
Index: extensions/music_player/hooks/pre-commit.tmpl
===================================================================
--- extensions/music_player/hooks/pre-commit.tmpl	(revision 3329)
+++ extensions/music_player/hooks/pre-commit.tmpl	(revision 3329)
@@ -0,0 +1,81 @@
+#!/bin/sh
+
+# PRE-COMMIT HOOK
+#
+# The pre-commit hook is invoked before a Subversion txn is
+# committed.  Subversion runs this hook by invoking a program
+# (script, executable, binary, etc.) named 'pre-commit' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] TXN-NAME     (the name of the txn about to be committed)
+#
+#   [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN.
+#
+#   If STDIN contains the line "LOCK-TOKENS:\n" (the "\n" denotes a
+#   single newline), the lines following it are the lock tokens for
+#   this commit.  The end of the list is marked by a line containing
+#   only a newline character.
+#
+#   Each lock token line consists of a URI-escaped path, followed
+#   by the separator character '|', followed by the lock token string,
+#   followed by a newline.
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the txn is committed; but
+# if it exits with failure (non-zero), the txn is aborted, no commit
+# takes place, and STDERR is returned to the client.   The hook
+# program can use the 'svnlook' utility to help it examine the txn.
+#
+# On a Unix system, the normal procedure is to have 'pre-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+#   ***  NOTE: THE HOOK PROGRAM MUST NOT MODIFY THE TXN, EXCEPT  ***
+#   ***  FOR REVISION PROPERTIES (like svn:log or svn:author).   ***
+#
+#   This is why we recommend using the read-only 'svnlook' utility.
+#   In the future, Subversion may enforce the rule that pre-commit
+#   hooks should not modify the versioned data in txns, or else come
+#   up with a mechanism to make it safe to do so (by informing the
+#   committing client of the changes).  However, right now neither
+#   mechanism is implemented, so hook writers just have to be careful.
+#
+# Note that 'pre-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-commit.bat' or 'pre-commit.exe',
+# but the basic idea is the same.
+#
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# the Subversion repository at
+# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
+# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+TXN="$2"
+
+# Make sure that the log message contains some text.
+SVNLOOK=/usr/local/bin/svnlook
+$SVNLOOK log -t "$TXN" "$REPOS" | \
+   grep "[a-zA-Z0-9]" > /dev/null || exit 1
+
+# Check that the author of this commit has the rights to perform
+# the commit on the files and directories being modified.
+commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
+
+# All checks passed, so allow the commit.
+exit 0
Index: extensions/music_player/hooks/pre-lock.tmpl
===================================================================
--- extensions/music_player/hooks/pre-lock.tmpl	(revision 3329)
+++ extensions/music_player/hooks/pre-lock.tmpl	(revision 3329)
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# PRE-LOCK HOOK
+#
+# The pre-lock hook is invoked before an exclusive lock is
+# created.  Subversion runs this hook by invoking a program 
+# (script, executable, binary, etc.) named 'pre-lock' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] PATH         (the path in the repository about to be locked)
+#   [3] USER         (the user creating the lock)
+#   [4] COMMENT      (the comment of the lock)
+#   [5] STEAL-LOCK   (1 if the user is trying to steal the lock, else 0)
+#
+# If the hook program outputs anything on stdout, the output string will
+# be used as the lock token for this lock operation.  If you choose to use
+# this feature, you must guarantee the tokens generated are unique across
+# the repository each time.
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the lock is created; but
+# if it exits with failure (non-zero), the lock action is aborted
+# and STDERR is returned to the client.
+
+# On a Unix system, the normal procedure is to have 'pre-lock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-lock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-lock.bat' or 'pre-lock.exe',
+# but the basic idea is the same.
+#
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+PATH="$2"
+USER="$3"
+
+# If a lock exists and is owned by a different person, don't allow it
+# to be stolen (e.g., with 'svn lock --force ...').
+
+# (Maybe this script could send email to the lock owner?)
+SVNLOOK=/usr/local/bin/svnlook
+GREP=/bin/grep
+SED=/bin/sed
+
+LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
+            $GREP '^Owner: ' | $SED 's/Owner: //'`
+
+# If we get no result from svnlook, there's no lock, allow the lock to
+# happen:
+if [ "$LOCK_OWNER" = "" ]; then
+  exit 0
+fi
+
+# If the person locking matches the lock's owner, allow the lock to
+# happen:
+if [ "$LOCK_OWNER" = "$USER" ]; then
+  exit 0
+fi
+
+# Otherwise, we've got an owner mismatch, so return failure:
+echo "Error: $PATH already locked by ${LOCK_OWNER}." 1>&2
+exit 1
Index: extensions/music_player/hooks/pre-revprop-change.tmpl
===================================================================
--- extensions/music_player/hooks/pre-revprop-change.tmpl	(revision 3329)
+++ extensions/music_player/hooks/pre-revprop-change.tmpl	(revision 3329)
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# PRE-REVPROP-CHANGE HOOK
+#
+# The pre-revprop-change hook is invoked before a revision property
+# is added, modified or deleted.  Subversion runs this hook by invoking
+# a program (script, executable, binary, etc.) named 'pre-revprop-change'
+# (for which this file is a template), with the following ordered
+# arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] REVISION     (the revision being tweaked)
+#   [3] USER         (the username of the person tweaking the property)
+#   [4] PROPNAME     (the property being set on the revision)
+#   [5] ACTION       (the property is being 'A'dded, 'M'odified, or 'D'eleted)
+#
+#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.
+#
+# If the hook program exits with success, the propchange happens; but
+# if it exits with failure (non-zero), the propchange doesn't happen.
+# The hook program can use the 'svnlook' utility to examine the 
+# existing value of the revision property.
+#
+# WARNING: unlike other hooks, this hook MUST exist for revision
+# properties to be changed.  If the hook does not exist, Subversion 
+# will behave as if the hook were present, but failed.  The reason
+# for this is that revision properties are UNVERSIONED, meaning that
+# a successful propchange is destructive;  the old value is gone
+# forever.  We recommend the hook back up the old value somewhere.
+#
+# On a Unix system, the normal procedure is to have 'pre-revprop-change'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-revprop-change' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-revprop-change.bat' or 'pre-revprop-change.exe',
+# but the basic idea is the same.
+#
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# the Subversion repository at
+# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
+# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+REV="$2"
+USER="$3"
+PROPNAME="$4"
+ACTION="$5"
+
+if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
+
+echo "Changing revision properties other than svn:log is prohibited" >&2
+exit 1
Index: extensions/music_player/hooks/pre-unlock.tmpl
===================================================================
--- extensions/music_player/hooks/pre-unlock.tmpl	(revision 3329)
+++ extensions/music_player/hooks/pre-unlock.tmpl	(revision 3329)
@@ -0,0 +1,63 @@
+#!/bin/sh
+
+# PRE-UNLOCK HOOK
+#
+# The pre-unlock hook is invoked before an exclusive lock is
+# destroyed.  Subversion runs this hook by invoking a program 
+# (script, executable, binary, etc.) named 'pre-unlock' (for which
+# this file is a template), with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] PATH         (the path in the repository about to be unlocked)
+#   [3] USER         (the user destroying the lock)
+#   [4] TOKEN        (the lock token to be destroyed)
+#   [5] BREAK-UNLOCK (1 if the user is breaking the lock, else 0)
+#
+# The default working directory for the invocation is undefined, so
+# the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the lock is destroyed; but
+# if it exits with failure (non-zero), the unlock action is aborted
+# and STDERR is returned to the client.
+
+# On a Unix system, the normal procedure is to have 'pre-unlock'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'pre-unlock' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'pre-unlock.bat' or 'pre-unlock.exe',
+# but the basic idea is the same.
+#
+# Here is an example hook script, for a Unix /bin/sh interpreter:
+
+REPOS="$1"
+PATH="$2"
+USER="$3"
+
+# If a lock is owned by a different person, don't allow it be broken.
+# (Maybe this script could send email to the lock owner?)
+
+SVNLOOK=/usr/local/bin/svnlook
+GREP=/bin/grep
+SED=/bin/sed
+
+LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
+            $GREP '^Owner: ' | $SED 's/Owner: //'`
+
+# If we get no result from svnlook, there's no lock, return success:
+if [ "$LOCK_OWNER" = "" ]; then
+  exit 0
+fi
+
+# If the person unlocking matches the lock's owner, return success:
+if [ "$LOCK_OWNER" = "$USER" ]; then
+  exit 0
+fi
+
+# Otherwise, we've got an owner mismatch, so return failure:
+echo "Error: $PATH locked by ${LOCK_OWNER}." 1>&2
+exit 1
Index: extensions/music_player/hooks/start-commit.tmpl
===================================================================
--- extensions/music_player/hooks/start-commit.tmpl	(revision 3329)
+++ extensions/music_player/hooks/start-commit.tmpl	(revision 3329)
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# START-COMMIT HOOK
+#
+# The start-commit hook is invoked before a Subversion txn is created
+# in the process of doing a commit.  Subversion runs this hook
+# by invoking a program (script, executable, binary, etc.) named
+# 'start-commit' (for which this file is a template)
+# with the following ordered arguments:
+#
+#   [1] REPOS-PATH   (the path to this repository)
+#   [2] USER         (the authenticated user attempting to commit)
+#   [3] CAPABILITIES (a colon-separated list of capabilities reported
+#                     by the client; see note below)
+#
+# Note: The CAPABILITIES parameter is new in Subversion 1.5, and 1.5
+# clients will typically report at least the "mergeinfo" capability.
+# If there are other capabilities, then the list is colon-separated,
+# e.g.: "mergeinfo:some-other-capability" (the order is undefined).
+#
+# The list is self-reported by the client.  Therefore, you should not
+# make security assumptions based on the capabilities list, nor should
+# you assume that clients reliably report every capability they have.
+#
+# The working directory for this hook program's invocation is undefined,
+# so the program should set one explicitly if it cares.
+#
+# If the hook program exits with success, the commit continues; but
+# if it exits with failure (non-zero), the commit is stopped before
+# a Subversion txn is created, and STDERR is returned to the client.
+#
+# On a Unix system, the normal procedure is to have 'start-commit'
+# invoke other programs to do the real work, though it may do the
+# work itself too.
+#
+# Note that 'start-commit' must be executable by the user(s) who will
+# invoke it (typically the user httpd runs as), and that user must
+# have filesystem-level permission to access the repository.
+#
+# On a Windows system, you should name the hook program
+# 'start-commit.bat' or 'start-commit.exe',
+# but the basic idea is the same.
+# 
+# The hook program typically does not inherit the environment of
+# its parent process.  For example, a common problem is for the
+# PATH environment variable to not be set to its usual value, so
+# that subprograms fail to launch unless invoked via absolute path.
+# If you're having unexpected problems with a hook program, the
+# culprit may be unusual (or missing) environment variables.
+# 
+# Here is an example hook script, for a Unix /bin/sh interpreter.
+# For more examples and pre-written hooks, see those in
+# the Subversion repository at
+# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
+# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
+
+
+REPOS="$1"
+USER="$2"
+
+commit-allower.pl --repository "$REPOS" --user "$USER" || exit 1
+special-auth-check.py --user "$USER" --auth-level 3 || exit 1
+
+# All checks passed, so allow the commit.
+exit 0
Index: extensions/music_player/language/en_UK/index.php
===================================================================
--- extensions/music_player/language/en_UK/index.php	(revision 3329)
+++ extensions/music_player/language/en_UK/index.php	(revision 3329)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: extensions/music_player/language/en_UK/plugin.lang.php
===================================================================
--- extensions/music_player/language/en_UK/plugin.lang.php	(revision 3329)
+++ extensions/music_player/language/en_UK/plugin.lang.php	(revision 3329)
@@ -0,0 +1,138 @@
+<?php
+
+$lang['lien_titre'] = 'Listen Music';
+$lang['lien_expl'] = 'Show a pop-up emdebed player';
+
+$lang['mp_evidence_title'] = 'Information';
+$lang['mp_evidence_txt'] = 'Gallery have a music player. Do you want to show it ?';
+$lang['mp_evidence_2'] = 'Remember it';
+
+$lang['mp_montre'] = 'Show playlists';
+$lang['mp_cache'] = 'Hide playlists';
+
+$lang['mp_send'] = 'Send';
+$lang['mp_need_help'] = "Need Help ?";
+
+$lang['mp_help_q1'] = "Where put mp3 ?";
+$lang['mp_help_q2'] = "I have added mp3 but i didn't find them in the playlist !";
+$lang['mp_help_q3'] = "What is about 'Show thumnbail in playlist' ?";
+$lang['mp_help_q4'] = "How does this plugin work ?";
+$lang['mp_help_q5'] = "How can i added distant mp3 or localised in others folders ?";
+$lang['mp_help_q6'] = "It's possible to add podcats ?";
+$lang['mp_help_q7'] = "I can't find answers here / I have some problemes";
+
+$lang['mp_help_div1'] = "Mp3 must be put into Music folder of the plugin like this \"[PWG folder]/plugins/music_player/music/[new playlist]/\". You should make your playlists order by artist (music/moby/go.pm3), or put artist's mane directly into file name (music/electro/moby-go.pm3)";
+$lang['mp_help_div2'] = "You do not update your playlist : So click on 2nd icon ('Manage music') near the playlist, then in final step, do 'Submit modifications'";
+$lang['mp_help_div3'] = "It is about thumbnail that you can insert (3rd icon ('Manage thumbnail') near the playlist";
+$lang['mp_help_div4'] = "This plugin allow to create and manage some playlists, personnalise music player and his pop-up.<br />
+To create a playlist :
+<br />- First of all, You need a folder /music in plugin folder. IMPORTANT !! (Free users you are not concerne by this following notice) /music folder must have all autorisations en write/read (chmod 777 or rwxrwxrwx).
+<br />- Then, you create another folder in /music which will contain mp3 and playlist with .xml extension. Be careful : folder's name is important : SO DO NOT USE SPECIALS CHARACTERES for the name of the folder
+<br />- Then click on 'Synchronise with /music' : folders in /music have been listed with mp3 files. Playlists with xml extension have been created with the same name of the folder.
+<br/>- reception of the form: it is used to have a small descriptive text which will be used as link to play the playlist, in the window of the player. Leave empty a field text and the playlsit concerned will not be recorded in data base
+<br/>- sending of the form and recording in data base: then you can add a miniature by upload or link: you can even directly send it by ftp with for name '[name of the file] .jpg'?
+<br /><br />
+To manage playlist :
+<br />- Click on 2nd icon near the playlist
+<br />- Then follow these steps : Dont forget the last one !";
+$lang['mp_help_div5'] = "Yes : For this go into the playlist of your choice and, on step two, add your file. Be careful : Even if mp3 is on the same server that this plugin, you need to write complete ardress with http://";
+$lang['mp_help_div6'] = "Yes : Since 1.3 a block for podcast and distant playlist have been added. Be careful  : playlist must be in Atom, Xspf (use by the plugin), or RSS format. (podcast are always RSS)";
+$lang['mp_help_div7'] = 'You can find support for the plugins here : <a href="http://forum.phpwebgallery.net/viewtopic.php?pid=68781"> http://forum.phpwebgallery.net/viewtopi … t;/a>';
+
+$lang['mp_admin_leg'] = 'Playlist manager';
+$lang['mp_admin_tt_synchro'] = 'Synchronise with /music folder';
+$lang['mp_admin_folder'] = 'Folder';
+$lang['mp_admin_nm_pl'] = 'Name of the playlist';
+$lang['mp_admin_nm_edit'] = 'Edit name';
+$lang['mp_admin_pl'] = 'Manage music';
+$lang['mp_admin_min'] = 'Manage thumbnail';
+$lang['mp_admin_leg1'] = 'Podcast (RSS) or distant playlist';
+
+$lang['mp_admin_leg2'] = 'Option of the plugin';
+$lang['mp_admin_2_opt1'] = 'Revealed plugin with a bloc in the Menubar ';
+$lang['mp_admin_2_opt2'] = 'Show the "header"';
+$lang['mp_admin_2_opt3'] = 'Show the "footer", copyright';
+$lang['mp_admin_2_opt4'] = 'Pop_up';
+$lang['mp_admin_2_opt4_1'] = 'height';
+$lang['mp_admin_2_opt4_2'] = 'width';
+
+$lang['mp_admin_leg3'] = 'Option of the player';
+$lang['mp_admin_3_opt1_1'] = 'total height';
+$lang['mp_admin_3_opt1_2'] = 'total width';
+$lang['mp_admin_3_opt2_1'] = 'height of the playlist';
+$lang['mp_admin_3_opt2_2'] = "[Info : If thumbnail is turn on, the height of the playslist and 20 px of the bar, is equal to the total height.]";
+$lang['mp_admin_3_opt3_1'] = 'Show thumbnail of the playlist';
+$lang['mp_admin_3_opt3_2'] = 'width of the thumbnail';
+$lang['mp_admin_3_opt3_3'] = "[Info :If thumbnail is turn on and if her width is < of total width, so thumbnail will show on the left (by default).] ";
+$lang['mp_admin_3_opt4'] = 'Read music randomly';
+$lang['mp_admin_3_opt5'] = 'Repeat playlist when is finished';
+$lang['mp_admin_3_opt6'] = 'Read this playslit at the beginning';
+$lang['mp_admin_3_opt7'] = "Run automatically of the playlist (no sidebar)";
+
+
+$lang['mp_adm_envoi_1'] = 'Description of';
+$lang['mp_adm_envoi_2'] = 'contains';
+
+$lang['mp_adm_return'] = 'Back to playlists';
+$lang['mp_adm_return_2'] = 'Back to the playlist';
+
+$lang['mp_adm_edit_1'] = 'Descriptio text';
+$lang['mp_adm_edit_2'] = 'Playlist';
+$lang['mp_adm_edit_3'] = 'Synchronise the playlist';
+
+$lang['mp_ou'] = 'OR';
+$lang['mp_adm_info_img'] = "(add a new image erase the old one)";
+
+$lang['mp_adm_suppr_1'] = 'What do you want to do  ?';
+$lang['mp_adm_suppr_2'] = 'Delete playlist of the data base only (With le next syncronisation, she will be create again) ';
+$lang['mp_adm_suppr_3'] = 'Delete playlist of the data base, AND the folder (mp3 ,xml files will be erased)';
+
+
+$lang['mp_msg_suppr1'] = 'Folder deleted successfully';
+$lang['mp_msg_suppr2'] = 'Error : folder not deleted';
+$lang['mp_msg_suppr3'] = 'Data base deleted succesfully';
+$lang['mp_msg_edit1'] = 'Edit OK';
+$lang['mp_msg_edit2'] = "Playlist updated !";
+$lang['mp_msg_edit3'] = "row  modified !";
+$lang['mp_msg_edit4'] = "Remove from the data base  :";
+$lang['mp_msg_edit5'] = "Remove from :";
+
+$lang['mp_adm_etape_1'] = "First step (optional)";
+$lang['mp_adm_et1_txt'] = "You have added ou removed some mp3 files ib the folder ? If Yes, you have to syncronise to the data base:";
+$lang['mp_adm_etape_2'] = "2nd step (optionnal)";
+$lang['mp_adm_et2_txt'] = "Add distant mp3. ";
+$lang['mp_adm_et2_nbr'] = "Number of added : ";
+$lang['mp_adm_et2_rg'] = "Insert a row : ";
+$lang['mp_adm_et2_rg2'] = "(if empty, bottom of the playlist)";
+$lang['mp_adm_etape_3'] = "3rd step !";
+$lang['mp_adm_thead1'] = "NAME";
+$lang['mp_adm_thead2'] = "URL";
+$lang['mp_adm_thead3'] = "UP";
+$lang['mp_adm_thead4'] = "DOWN";
+$lang['mp_adm_thead5'] = "Change the url/name";
+$lang['mp_adm_thead6'] = "Delete";
+$lang['mp_adm_etape_4'] = "4th step !";
+$lang['mp_adm_et4_txt'] = "Make a playlist .xml";
+$lang['mp_adm_et4_ok'] = "Submit modifications";
+
+$lang['mp_adm_ed_sup_ok'] = "Are you sure ?";
+$lang['mp_adm_ed_sup_info'] = "If it is a file of '/music' folder, it will be deleted  : in other case, only data base entry will be deleted.";
+
+
+$lang['mp_msg_err_aj1'] = "Error : field url empty";
+$lang['mp_msg_err_aj2'] = "Error : field text empty";
+
+
+$lang['mp_msg_admin1'] = 'No added';
+$lang['mp_msg_admin_3_1'] = 'File';
+$lang['mp_msg_admin_3_2'] = 'Created';
+$lang['mp_msg_admin_4'] = 'Add from';
+$lang['mp_msg_admin_5'] = 'Configuration of music player saved';
+$lang['mp_msg_admin_6'] = 'Configuration of the plugin saved';
+
+$lang['mp_uploadimg_ok'] = 'Picture saved';
+$lang['mp_linkimg_ok'] = 'Picture saved';
+$lang['mp_info_min']="[ The thumbnail is optional. ]";
+
+
+?>
Index: extensions/music_player/language/fr_FR/index.php
===================================================================
--- extensions/music_player/language/fr_FR/index.php	(revision 3329)
+++ extensions/music_player/language/fr_FR/index.php	(revision 3329)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: extensions/music_player/language/fr_FR/plugin.lang.php
===================================================================
--- extensions/music_player/language/fr_FR/plugin.lang.php	(revision 3329)
+++ extensions/music_player/language/fr_FR/plugin.lang.php	(revision 3329)
@@ -0,0 +1,138 @@
+<?php
+$lang['lien_titre'] = 'Ecouter de la musique';
+$lang['lien_expl'] = 'affiche une pop-up contenant un lecteur audio';
+
+$lang['mp_evidence_title'] = 'Information';
+$lang['mp_evidence_txt'] = 'La galerie comporte un lecteur audio. Voulez-vous l\'afficher ?';
+$lang['mp_evidence_2'] = 's\'en souvenir';
+
+$lang['mp_montre'] = 'Afficher les playlist';
+$lang['mp_cache'] = 'Cacher les playlist';
+
+$lang['mp_send'] = 'Envoyer';
+$lang['mp_need_help'] = "Besoin d'aide ?";
+
+$lang['mp_help_q1'] = "Ou mettre mes mp3 ?";
+$lang['mp_help_q2'] = "J'ai rajouté des mp3 mais ils n'apparaissent pas dans la playlist !";
+$lang['mp_help_q3'] = "A quoi correspond l'option 'Afficher la miniature de la playlist' ?";
+$lang['mp_help_q4'] = "Comment fonctionne le plugin ?";
+$lang['mp_help_q5'] = "Comment puis-je ajouter des mp3 distants ou présent dans d'autres dossiers ?";
+$lang['mp_help_q6'] = "Peut-on ajouter des podcats ou une playlist distante ?";
+$lang['mp_help_q7'] = "Je ne trouve pas de réponses ici / J'ai un très gros problème";
+
+$lang['mp_help_div1'] = "Les mp3 doivent être mis dans le dossier music du plugin de cette façon \"[le dossier de pwg]/plugins/music_player/music/[nouvelle playlist]/\". Il est conseillé de faire des playlist par artiste (music/moby/go.pm3), ou sinon mettre le nom de l'artiste dans le nom du fichier mp3 (music/electro/moby-go.pm3)";
+$lang['mp_help_div2'] = "Vous n'avez pas remis à jour la playlist : pour ce faire cliquez sur la 2° icône ('Gérer la musique') à coté de la playlist concernée, puis à la dernière étape faites 'Valider les modifications'";
+$lang['mp_help_div3'] = "Il s'agit d'une miniature que vous pouvez ajouter en cliquant sur la 3° icône ('Gérer la miniature') à coté de la playlist concernée";
+$lang['mp_help_div4'] = "Le plugin permet de créer et gérer des playlist, de personnaliser l'affichage du lecteur et de sa pop-up.<br />
+pour créer une playlist :
+<br />- Tout d'abord assurez-vous que vous avez bien un dossier /music dans le répertoire du plugin. IMPORTANT !! (utilisateur de Free vous n'êtes pas concernés par la mention qui suit) Le dossier /music doit avoir touts les autorisations en écriture/lecture, en d'autre termes, un chmod de 777 ou rwxrwxrwx.
+<br />- Ensuite, vous créez un dossier dans ce dossier /music qui contiendra les mp3 et surtout la playlist en .xml. Attention : le nom du dossier est primordial : DONC EVITER LES CARATERES SPECIAUX ET GUILLEMETS dans le nom des dossiers
+<br />- on clique sur 'Synchroniser avec le dossier /music' : les dossiers dans music sont listés ainsi que les fichiers mp3 contenus dans chacuns d'eux. Les playlists au foramt xml sont créés en ayant pour nom celui du dossier.
+<br />- réception du formulaire : il sert à avoir un petit texte descriptif qui servira de lien pour jouer la playlist, dans la fenêtre du lecteur. Laissez vide un champ texte et la playlsit concernée ne sera pas enregistrée en base de données
+<br />- envoi du formulaire et enregistrement en base de données : ensuite vous pouvez rajouter une miniature par upload ou lien : vous piuvez même directement l'envoyer par ftp avec pour nom '[nom du dossier].jpg'
+<br /><br />
+pour gérer une playlist :
+<br />- cliquez sur la 2° icône à coté de la playlist
+<br />- Ensuite suivez les étapes : n'oubliez pas la dernière !";
+$lang['mp_help_div5'] = "Oui : pour celà rendez-vous dans la playlist de votre choix et, à l'étape 2, ajoutez votre fichier. Attention : même si le mp3 est sur le même serveur que ce plugin, il faut une url complète avec http://";
+$lang['mp_help_div6'] = "Oui : depuis la 1.3 un block pour podcast et playlist distante a été ajouté. Attention : la playlist doit être au format Atom, Xspf (utilisé par le plugin), ou RSS. (Les podcast sont tous des RSS)";
+$lang['mp_help_div7'] = 'Le support du plugin s\'effectue ici : <a href="http://forum.phpwebgallery.net/viewtopic.php?pid=68781"> http://forum.phpwebgallery.net/viewtopic.php?pid=68781</a>';
+
+$lang['mp_admin_leg'] = 'Gestion des playlist';
+$lang['mp_admin_tt_synchro'] = 'Synchroniser avec le dossier /music';
+$lang['mp_admin_folder'] = 'Dossier';
+$lang['mp_admin_nm_pl'] = 'Nom de la playlist';
+$lang['mp_admin_nm_edit'] = 'Editer le nom';
+$lang['mp_admin_pl'] = 'Gérer la musique';
+$lang['mp_admin_min'] = 'Gérer la miniature';
+
+$lang['mp_admin_leg1'] = 'Podcast (RSS) ou playlist distante';
+
+$lang['mp_admin_leg2'] = 'Option du plugin';
+$lang['mp_admin_2_opt1'] = 'Mettre en évidence le plugin avec un bloc supplémentaire en haut du menu ';
+$lang['mp_admin_2_opt2'] = 'Afficher le "header", la bannière';
+$lang['mp_admin_2_opt3'] = 'Afficher le "footer", le copyright';
+$lang['mp_admin_2_opt4'] = 'La pop_up';
+$lang['mp_admin_2_opt4_1'] = 'Hauteur';
+$lang['mp_admin_2_opt4_2'] = 'Largeur';
+
+$lang['mp_admin_leg3'] = 'Option du lecteur';
+$lang['mp_admin_3_opt1_1'] = 'Hauteur totale';
+$lang['mp_admin_3_opt1_2'] = 'Largeur totale';
+$lang['mp_admin_3_opt2_1'] = 'Hauteur de la playlist';
+$lang['mp_admin_3_opt2_2'] = "[Info : Si la miniature est activée, l'idéal est que, la hauteur de la playlist plus les 20 px de la barre, forme la hauteur totale.]";
+$lang['mp_admin_3_opt3_1'] = 'Afficher la miniature de la playlist';
+$lang['mp_admin_3_opt3_2'] = 'Largeur de la miniature';
+$lang['mp_admin_3_opt3_3'] = "[Info : Si la miniature est activée et si sa largeur est inférieur à la largeur totale, la miniature s'affichera à gauche(par defaut).] ";
+$lang['mp_admin_3_opt4'] = 'Lire aléatoirement la musique';
+$lang['mp_admin_3_opt5'] = 'Répéter la playlist une fois celle-ci terminée';
+$lang['mp_admin_3_opt6'] = 'Lire cette playlist au lancement';
+$lang['mp_admin_3_opt7'] = "Défilement automatiquement de la playlist (pas d'ascenseur)";
+
+
+$lang['mp_adm_envoi_1'] = 'Description de';
+$lang['mp_adm_envoi_2'] = 'contient';
+
+$lang['mp_adm_return'] = 'Retourner aux playlist';
+$lang['mp_adm_return_2'] = 'Retourner à la playlist';
+
+$lang['mp_adm_edit_1'] = 'Texte descriptif';
+$lang['mp_adm_edit_2'] = 'La playlist';
+$lang['mp_adm_edit_3'] = 'Synchroniser la playlist';
+
+$lang['mp_ou'] = 'OU';
+$lang['mp_adm_info_img'] = "(ajouter une nouvelle image écrase l'ancienne)";
+
+$lang['mp_adm_suppr_1'] = 'Que voulez vous faire ?';
+$lang['mp_adm_suppr_2'] = 'Supprimer la playlist de la base de données seulement (à la prochaine synchro, elle reviendra) ';
+$lang['mp_adm_suppr_3'] = 'Supprimer la playlist de la base de données, et le dossier en entier (fichiers mp3 et xml/ou php supprimés )';
+
+
+$lang['mp_msg_suppr1'] = 'Suppression dossier réussie';
+$lang['mp_msg_suppr2'] = 'Erreur : dossier non-supprimé';
+$lang['mp_msg_suppr3'] = 'Suppression base de données reussie';
+$lang['mp_msg_edit1'] = 'Edition reussi';
+$lang['mp_msg_edit2'] = "Playlist mise à jour !";
+$lang['mp_msg_edit3'] = "Rang modifié !";
+$lang['mp_msg_edit4'] = "Suppression en base de données de :";
+$lang['mp_msg_edit5'] = "Suppression  de :";
+
+$lang['mp_adm_etape_1'] = "1° étape (optionnelle)";
+$lang['mp_adm_et1_txt'] = "Vous avez ajouté ou supprimé des fichier mp3 dans le dossier ? Si oui, il faut synchroniser base de donnée/fichiers :";
+$lang['mp_adm_etape_2'] = "2° étape (optionnelle)";
+$lang['mp_adm_et2_txt'] = "Ajouter un ou des mp3 distants. ";
+$lang['mp_adm_et2_nbr'] = "Nombre d'ajout : ";
+$lang['mp_adm_et2_rg'] = "inséré au rang : ";
+$lang['mp_adm_et2_rg2'] = "(si vide, en bas de playlist)";
+$lang['mp_adm_etape_3'] = "3° étape !";
+$lang['mp_adm_thead1'] = "NOM";
+$lang['mp_adm_thead2'] = "URL";
+$lang['mp_adm_thead3'] = "Monter";
+$lang['mp_adm_thead4'] = "Descendre";
+$lang['mp_adm_thead5'] = "Modifier url/nom";
+$lang['mp_adm_thead6'] = "Supprimer";
+$lang['mp_adm_etape_4'] = "4° étape !";
+$lang['mp_adm_et4_txt'] = "Générer la playlist xml";
+$lang['mp_adm_et4_ok'] = "Valider les modifications";
+
+$lang['mp_adm_ed_sup_ok'] = "Etes-vous certain de supprimer ?";
+$lang['mp_adm_ed_sup_info'] = "Si il s'agit d'un fichier du dossier '/music', il sera SUPPRIME physiquement : autrement seulement l'entrée correspondante dans la base données sera supprimée.";
+
+
+$lang['mp_msg_err_aj1'] = "Erreur : champ url vide";
+$lang['mp_msg_err_aj2'] = "Erreur : champ texte vide";
+
+
+$lang['mp_msg_admin1'] = 'Aucun ajout';
+$lang['mp_msg_admin_3_1'] = 'Fichier';
+$lang['mp_msg_admin_3_2'] = 'créé';
+$lang['mp_msg_admin_4'] = 'Ajout de';
+$lang['mp_msg_admin_5'] = 'Configuration du lecteur sauvegardée';
+$lang['mp_msg_admin_6'] = 'Configuration du plugin sauvegardée';
+
+$lang['mp_uploadimg_ok'] = 'Upload réussi';
+$lang['mp_linkimg_ok'] = 'Image enregistrée';
+$lang['mp_info_min']="[ La miniature est optionnelle. ]";
+
+
+?>
Index: extensions/music_player/language/it_IT/index.php
===================================================================
--- extensions/music_player/language/it_IT/index.php	(revision 3329)
+++ extensions/music_player/language/it_IT/index.php	(revision 3329)
@@ -0,0 +1,33 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery                           |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | file          : $Id: index.php 1912 2007-03-16 06:30:07Z rub $
+// | last update   : $Date: 2007-03-16 07:30:07 +0100 (ven, 16 mar 2007) $
+// | last modifier : $Author: rub $
+// | revision      : $Revision: 1912 $
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: extensions/music_player/language/it_IT/plugin.lang.php
===================================================================
--- extensions/music_player/language/it_IT/plugin.lang.php	(revision 3329)
+++ extensions/music_player/language/it_IT/plugin.lang.php	(revision 3329)
@@ -0,0 +1,133 @@
+<?php
+
+$lang['lien_titre'] = 'Ascolta musica';
+$lang['lien_expl'] = 'Avvia un pop-up contentente il lettore audio';
+
+$lang['mp_evidence_title'] = 'ATTENZIONE';
+$lang['mp_evidence_txt'] = 'Vuoi ascoltare musica mentre navighi nel sito?';
+$lang['mp_evidence_2'] = 'Ricorda';
+
+$lang['mp_montre'] = 'Mostra Playlist';
+$lang['mp_cache'] = 'Nascondi Playlist';
+
+$lang['mp_send'] = 'Invia';
+$lang['mp_need_help'] = "Aiuto";
+
+$lang['mp_help_q1'] = "Dove mettere gli mp3?";
+$lang['mp_help_q2'] = "Ho aggiunto mp3 ma non so dove trovarli nella playlist!";
+$lang['mp_help_q3'] = "A cosa serve 'Mostra immagine nella playlist'?";
+$lang['mp_help_q4'] = "Come funziona questo plug-in?";
+$lang['mp_help_q5'] = "Come posso aggiungere link a mp3 localizzati in altre cartelle?";
+$lang['mp_help_q6'] = "E' possibile aggiungere podcast?";
+$lang['mp_help_q7'] = "Non ho trovato la risposta qui / Ho altri problemi";
+
+$lang['mp_help_div1'] = "Gli mp3 devono essere messi nella cartella Music del plugin come questa \"[directory di pwg]/plugins/music_player/music/[nuova playlist]/\". E' consigliato ordinare le playlists per artista (music/moby/go.pm3), o mettere il nome dell'artista direttamente nel file mp3 (music/electro/moby-go.pm3)";
+$lang['mp_help_div2'] = "Non hai aggiornato la playlist: per farlo clikka sulla 2° icona ('Gestione musica') vicino la playlist, dopo, nell'ultimo passaggio fai 'Salva modifiche'";
+$lang['mp_help_div3'] = "E' un'immagine che puoi aggiungere clikkando sulla 3° icona ('Gestione immagini') vicino la playlist";
+$lang['mp_help_div4'] = "Questo plugin ti permette di creare e modificare playlists, di personalizzare l'aspetto del lettore e del suo popup.<br />
+Per creare una playlist:
+<br />- Prima di tutto assicurati di avere una cartella chiamata /music nella cartella del plugin. IMPORTANTE !! La cartella /music deve avere tutte le autorizzazioni in scrittura/lettura, in altre parole, un CHMOD di 777 o rwxrwxrwx.
+<br />- Dopo, devi creare una sottocartella nella cartella /music contenente gli mp3 e la playlist in formato .xml. ATTENZIONE: il nome della cartella è importante: EVITA DI USARE CARATTERI SPECIALI
+<br />- Clikka su 'Sincronizza con la directory /music': vengono elencate le cartelle dentro la directory /music che contengono mp3. Vengono create playlists in formato xml con lo stesso nome delle cartelle.
+<br />- Riempi il formulario: serve per avere un piccolo testo descrittivo che verrà usato come link per avviare la playlist, nella finestra del lettore. Se lasci il campo vuoto la playlist non verrà salvata nel database.
+<br />- Invia il formulario (verrà registrato nel database): Poi puoi aggiungere un'immagine inserendo il link o facendo l'upload: puoi anche mandarla direttamente tramite FTP con nome '[nome della cartella].jpg'
+<br /><br />
+Per modificare una playlist :
+<br />- Clikka sulla seconda icona vicino la playlist
+<br />- Segui questi passaggi: non dimenticare l'ultimo!";
+$lang['mp_help_div5'] = "Devi andare nella playlist che vuoi e, alla seconda tappa, aggiungere l'indirizzo del file. Attenzione: anche se l'mp3 è sullo stesso server di questo plugin, devi scrivere l'indirizzo completo che inizia con http://";
+$lang['mp_help_div6'] = "Sì: dalla versione 1.3 è stato aggiunto un blocco per i podcast e gli mp3 distanti. Attenzione: la playlist deve essere in formato Atom, Xspf (che usa il plugin), o RSS. (I podcasts sono tutti in formato RSS)";
+$lang['mp_help_div7'] = 'Puoi trovare il supporto ufficiale del plugin qui (in lingua francese) : <a href="http://forum.phpwebgallery.net/viewtopic.php?pid=68781"> http://forum.phpwebgallery.net/viewtopic.php?pid=68781</a>';
+
+$lang['mp_admin_leg'] = 'Gestione Playlists';
+$lang['mp_admin_tt_synchro'] = 'Sincronizza con la directory /music';
+$lang['mp_admin_folder'] = 'Directory';
+$lang['mp_admin_nm_pl'] = 'Nome della playlist';
+$lang['mp_admin_nm_edit'] = 'Modifica nome';
+$lang['mp_admin_pl'] = 'Gestione musica';
+$lang['mp_admin_min'] = 'Gestione immagini';
+$lang['mp_admin_leg1'] = 'Podcast (RSS) o link a playlist esterna';
+
+$lang['mp_admin_leg2'] = 'Opzioni del plugin';
+$lang['mp_admin_2_opt1'] = 'Metti in evidenza il lettore con un blocco aggiuntivo nella barra del menu';
+$lang['mp_admin_2_opt2'] = 'Mostra "header", il banner';
+$lang['mp_admin_2_opt3'] = 'Mostra "footer", il copyright';
+$lang['mp_admin_2_opt4'] = 'Popup';
+$lang['mp_admin_2_opt4_1'] = 'Altezza';
+$lang['mp_admin_2_opt4_2'] = 'Larghezza';
+
+$lang['mp_admin_leg3'] = 'Opzioni del lettore';
+$lang['mp_admin_3_opt1_1'] = 'Altezza totale';
+$lang['mp_admin_3_opt1_2'] = 'Larghezza totale';
+$lang['mp_admin_3_opt2_1'] = 'Altezza della playlist';
+$lang['mp_admin_3_opt2_2'] = "[Info: Se è attiva un'immagine, sarebbe opportuno che l'altezza della playlist più i 20 px della barre formino l'altezza totale.]";
+$lang['mp_admin_3_opt3_1'] = 'Mostra immagine della playlist';
+$lang['mp_admin_3_opt3_2'] = 'Larghezza dell\'immagine';
+$lang['mp_admin_3_opt3_3'] = "[Info: Se è attiva un'immagine e se la larghezza è inferiore alla larghezza totale, l'immagine verrà mostrata a sinistra (come predefinito).]";
+$lang['mp_admin_3_opt4'] = 'Leggi musica in modalità random';
+$lang['mp_admin_3_opt5'] = 'Ripeti playlist una volta terminata';
+$lang['mp_admin_3_opt6'] = 'Avvia questa playlist per prima';
+$lang['mp_admin_3_opt7'] = "Avvia automaticamente la playlist (No Barra laterale)";
+
+
+$lang['mp_adm_envoi_1'] = 'Descrizione di';
+$lang['mp_adm_envoi_2'] = 'contiene';
+
+$lang['mp_adm_return'] = 'Torna alle playlists';
+$lang['mp_adm_return_2'] = 'Torna alla playlist';
+
+$lang['mp_adm_edit_1'] = 'Testo descrittivo';
+$lang['mp_adm_edit_2'] = 'Playlist';
+$lang['mp_adm_edit_3'] = 'Sincronizza la playlist';
+
+$lang['mp_ou'] = 'O';
+$lang['mp_adm_info_img'] = "(aggiungere una nuova immagine cancellerà la vecchia)";
+
+$lang['mp_adm_suppr_1'] = 'Cosa vuoi fare?';
+$lang['mp_adm_suppr_2'] = 'Cancella la playlist solo dal database (alla prossima sincronizzazione sarà creata nuovamente) ';
+$lang['mp_adm_suppr_3'] = 'Cancella la playlist dal database e anche la cartella fisica (i files mp3 e xml verranno cancellati)';
+
+
+$lang['mp_msg_suppr1'] = 'Cartella cancellata con successo';
+$lang['mp_msg_suppr2'] = 'Errore: cartella non cancellata';
+$lang['mp_msg_suppr3'] = 'Cancellata dal database con successo';
+$lang['mp_msg_edit1'] = 'Modifica riuscita';
+$lang['mp_msg_edit2'] = "La playlist è aggiornata!";
+$lang['mp_msg_edit3'] = "Posizione modificata!";
+$lang['mp_msg_edit4'] = "Rimuovi dal database:";
+$lang['mp_msg_edit5'] = "Rimuovi da:";
+
+$lang['mp_adm_etape_1'] = "1° tappa (opzionale)";
+$lang['mp_adm_et1_txt'] = "Hai aggiunto o rimosso files mp3 dalla cartella? Se sì, devi sincronizzare il database:";
+$lang['mp_adm_etape_2'] = "2° tappa (opzionale)";
+$lang['mp_adm_et2_txt'] = "Aggiungi link ad mp3.";
+$lang['mp_adm_et2_nbr'] = "Numero di mp3 da aggiungere: ";
+$lang['mp_adm_et2_rg'] = "Inserisci al posto: ";
+$lang['mp_adm_et2_rg2'] = "(se vuoto, in fondo alla playlist)";
+$lang['mp_adm_etape_3'] = "3° tappa !";
+$lang['mp_adm_thead1'] = "NOME";
+$lang['mp_adm_thead2'] = "URL";
+$lang['mp_adm_thead3'] = "Su";
+$lang['mp_adm_thead4'] = "Giù";
+$lang['mp_adm_thead5'] = "Cambia url/nome";
+$lang['mp_adm_thead6'] = "Cancella";
+$lang['mp_adm_etape_4'] = "4° tappa !";
+$lang['mp_adm_et4_txt'] = "Genera il file xml con la playlist";
+$lang['mp_adm_et4_ok'] = "Salva modifiche";
+
+$lang['mp_adm_ed_sup_ok'] = "Sei sicuro?";
+$lang['mp_adm_ed_sup_info'] = "Se ci sono files nella cartella '/music', saranno cancellati: altrimenti saranno cancellate solo le voci corrispondenti nel database.";
+
+
+$lang['mp_msg_err_aj1'] = "Errore : campo URL vuoto";
+$lang['mp_msg_err_aj2'] = "Errore : campo Testo vuoto";
+
+
+$lang['mp_msg_admin1'] = 'Nessun aggiunta';
+$lang['mp_msg_admin_3_1'] = 'File';
+$lang['mp_msg_admin_3_2'] = ' creato';
+$lang['mp_msg_admin_4'] = 'Aggiunta da ';
+$lang['mp_msg_admin_5'] = 'Configurazioni del lettore salvate';
+$lang['mp_msg_admin_6'] = 'Configurazioni del plugin salvate';
+
+?>
Index: extensions/music_player/lecteur.php
===================================================================
--- extensions/music_player/lecteur.php	(revision 3329)
+++ extensions/music_player/lecteur.php	(revision 3329)
@@ -0,0 +1,179 @@
+<?php
+define('PHPWG_ROOT_PATH','../../');
+include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
+
+$m_p = get_plugin_data('music_player');
+
+
+$page['body_id'] = 'lecteur';
+
+//css et js
+/*
+$title= 'Lecteur';
+      $template -> assign_block_vars(
+        'head_element', array (
+          'CONTENT' => '<link rel="stylesheet" type="text/css" href="./template/lecteur.css">'
+        )
+      );
+      $template -> assign_block_vars(
+        'head_element', array (
+          'CONTENT' => '<script type="text/javascript" src="./player/swfobject.js"></script>'
+        )
+      );
+      $template -> assign_block_vars(
+        'head_element', array (
+          'CONTENT' => '<script type="text/javascript">
+
+	function loadFile(obj) { thisMovie("playlist").loadFile(obj); };
+	// This is a javascript handler for the player and is always needed.
+	function thisMovie(movieName) {
+	    if(navigator.appName.indexOf("Microsoft") != -1) {
+			return window[movieName];
+		} else {
+			return document[movieName];
+		}
+	};
+
+</script>'
+        )
+      );*/
+  global $conf;
+  $conf_plugin = explode("," , $conf['mp_plugin']);
+  $template->assign(
+    array(
+      'conf_plugin_1' => $conf_plugin[1],
+      'conf_plugin_2' => $conf_plugin[2],
+    )
+  );
+
+    /*if ($conf_plugin[1]!='true')
+    {
+        $template -> assign_block_vars(
+        'head_element', array (
+          'CONTENT' => '<style type="text/css">
+#theHeader
+{
+display:none;
+}
+</style>'
+        )
+      );
+    }
+    if ($conf_plugin[2]!='true')
+    {
+	      $template -> assign_block_vars(
+        'head_element', array (
+          'CONTENT' => '<style type="text/css">
+#copyright
+{
+display:none;
+}		  </style>'
+        )
+      );
+   }*/
+	  
+/////[ si metre en evidence
+	if ($conf_plugin[0]=="true")
+	{
+	  $mp_ses = pwg_get_session_var( 'pwg_music_player', '' );
+	  //si on a cliqué oui pour afficher, en fait on change les var pour n'afficher qu'une fois le lecteur
+      if ( $_COOKIE['pwg_music_player'] == 'open')
+      {
+	  setcookie( 'pwg_music_player', 'open_once', time()+60*60*24*10, cookie_path() );
+	  }
+	  elseif ($mp_ses == 'open')
+	  {
+	  pwg_set_session_var( 'pwg_music_player', 'open_once' );
+	  }
+	}
+///
+
+include(PHPWG_ROOT_PATH.'include/page_header.php');
+	load_language('plugin.lang', $m_p->plugin_path);
+
+$template->assign(
+  array(
+    'PLUGIN_NAME' => $m_p->plugin_name
+    ));
+
+// +-----------------------------------------------------------------------+
+// |                  affichage des playlist existante                     |
+// +-----------------------------------------------------------------------+
+$playlist = array();
+$query = 'SELECT url, texte FROM '.MP_PLAYLIST.' WHERE type IN (\'local\') ORDER BY id ;';
+$result = pwg_query($query);
+while ($row = mysql_fetch_assoc($result)) {
+    array_push($playlist, $row);
+}
+
+foreach ($playlist as $list) {
+
+    $txt = stripslashes($list['texte']);
+        $template->append('playlist',
+            array('URL' => 'music/'.$list['url'].'/'.$list['url'].'.xml',
+                'TEXTE' => $txt,
+				));
+}
+
+$pl_ex = array();
+$query = 'SELECT id, texte FROM '.MP_PLAYLIST.' WHERE type IN (\'externe\') ORDER BY id ;';
+$result = pwg_query($query);
+while ($row = mysql_fetch_assoc($result)) {
+    array_push($pl_ex, $row);
+}
+
+foreach ($pl_ex as $list) {
+
+    $txt = stripslashes($list['texte']);
+        $template->append('playlist',
+            array('URL' => 'music/externe/'.$list['id'].'.php',
+                'TEXTE' => $txt,
+				));
+}
+// +-----------------------------------------------------------------------+
+// |                         Configuration du lecteur                      |
+// +-----------------------------------------------------------------------+
+
+$conf_lecteur = explode("," , $conf['mp_lecteur']);
+
+if ($conf_lecteur[5]=='true') $shuffle=$conf_lecteur[5]; else $shuffle="false";
+if ($conf_lecteur[6]=='true') $repeat=$conf_lecteur[6]; else $repeat="list";
+if ($conf_lecteur[8]=='true') $autoscroll=$conf_lecteur[8]; else $autoscroll="false";
+
+if ($conf_lecteur[7]!='0')
+{
+$rep = pwg_query('SELECT url FROM '.MP_PLAYLIST.' WHERE id IN (\''.$conf_lecteur[7].'\') ;');
+$pl = mysql_fetch_array($rep);
+$url=$pl['url'];
+$url='music/'.$url.'/'.$url.'.xml';
+$autostart='true';
+}
+else {
+$url='player/playlist.xml';
+$autostart='false';
+}
+
+////assignement des valeurs
+$template->assign(
+    array(
+      'H_TT' => $conf_lecteur[0],
+      'L_TT' => $conf_lecteur[1],
+      'H' => $conf_lecteur[2],
+      'L' => $conf_lecteur[4],
+      'SHUFFLE' => $shuffle,
+      'REPEAT' => $repeat,
+      'AUTOSTART' => $autostart,
+      'URL' => $url,
+      'AUTOSCROLL' => $autoscroll,
+    )
+  );
+
+$template->set_filename('lecteur', $m_p->plugin_path.'template/lecteur.tpl');
+
+// +-----------------------------------------------------------------------+
+// | html code display                                                     |
+// +-----------------------------------------------------------------------+
+$template->parse('lecteur');
+include(PHPWG_ROOT_PATH.'include/page_tail.php');
+//$template->p();
+?>
Index: extensions/music_player/locks/db-logs.lock
===================================================================
--- extensions/music_player/locks/db-logs.lock	(revision 3329)
+++ extensions/music_player/locks/db-logs.lock	(revision 3329)
@@ -0,0 +1,3 @@
+This file is not used by Subversion 1.3.x or later.
+However, its existence is required for compatibility with
+Subversion 1.2.x or earlier.
Index: extensions/music_player/locks/db.lock
===================================================================
--- extensions/music_player/locks/db.lock	(revision 3329)
+++ extensions/music_player/locks/db.lock	(revision 3329)
@@ -0,0 +1,3 @@
+This file is not used by Subversion 1.3.x or later.
+However, its existence is required for compatibility with
+Subversion 1.2.x or earlier.
Index: extensions/music_player/main.inc.php
===================================================================
--- extensions/music_player/main.inc.php	(revision 3329)
+++ extensions/music_player/main.inc.php	(revision 3329)
@@ -0,0 +1,41 @@
+<?php
+/*
+Plugin Name: music_player
+Version: 2.0.2
+Description: play music / avoir de la musique
+Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=162
+Author: Flop25
+Author URI: http://flop25.free.fr
+
+*/
+
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+$plugin_name = basename(dirname(__FILE__));
+$plugin_path = dirname(__FILE__).'/';
+
+global $prefixeTable;
+
+define('MP_PLAYLIST' , $prefixeTable . 'mp_playlist');
+define('MP_MUSIC' , $prefixeTable . 'mp_music');
+define('MP_PATH', dirname(__FILE__).'/' );
+define('MP_NAME', basename(dirname(__FILE__)) );
+define('LOCALEDIT_PATH' , PHPWG_PLUGINS_PATH . basename(dirname(__FILE__)) . '/');
+
+include_once(dirname(__FILE__).'/class.inc.php');
+
+add_event_handler('get_admin_plugin_menu_links', array(&$m_p, 'mp_lien_menu') );
+
+//add_event_handler('loc_end_menubar', array(&$m_p, 'placer_lien'), 70 ); 
+//add_event_handler('blockmanager_apply', array(&$m_p, 'placer_lien'), 70 ); 
+
+add_event_handler('blockmanager_apply', array(&$m_p, 'placer_block'));
+add_event_handler('blockmanager_register_blocks', array(&$m_p, 'register_mp_menubar_blocks'));
+
+add_event_handler('loc_begin_page_header', array(&$m_p, 'add_css') );
+
+
+$m_p = new Musicplayer(MP_NAME, MP_PATH);
+set_plugin_data($m_p->plugin_name, $m_p);
+
+?>
Index: extensions/music_player/maintain.inc.php
===================================================================
--- extensions/music_player/maintain.inc.php	(revision 3329)
+++ extensions/music_player/maintain.inc.php	(revision 3329)
@@ -0,0 +1,190 @@
+<?php
+
+function plugin_install()
+{
+    global $prefixeTable;
+
+    
+	    $q = 'CREATE TABLE ' . $prefixeTable . 'mp_playlist (
+id TINYINT NOT NULL AUTO_INCREMENT ,
+type VARCHAR( 50 ) NOT NULL ,
+url VARCHAR( 255 ) NOT NULL ,
+texte TINYTEXT NOT NULL ,
+PRIMARY KEY ( id )
+);
+';
+    pwg_query($q);
+    $q = 'CREATE TABLE ' . $prefixeTable . 'mp_music (
+id TINYINT NOT NULL AUTO_INCREMENT ,
+pl_id TINYINT NOT NULL ,
+rang TINYINT NOT NULL ,
+url VARCHAR( 255 ) NOT NULL ,
+nom VARCHAR( 255 ) NOT NULL ,
+PRIMARY KEY ( id )
+);
+';
+    pwg_query($q);
+
+	/*    $q = 'CREATE TABLE ' . $prefixeTable . 'mp_playlist (
+id TINYINT NOT NULL AUTO_INCREMENT ,
+url VARCHAR( 255 ) NOT NULL ,
+texte TINYTEXT NOT NULL ,
+music MEDIUMTEXT NOT NULL ,
+PRIMARY KEY ( id )
+);
+';
+$q = 'CREATE TABLE ' . $prefixeTable . 'mp_config_save (
+id TINYINT NOT NULL AUTO_INCREMENT ,
+type VARCHAR( 255 ) NOT NULL ,
+config TINYTEXT NOT NULL ,
+PRIMARY KEY ( id )
+);
+';*/
+
+    $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_lecteur" , "148,300,128,true,128,false,list,0,true" , "Lecteur config : haut tt, larg tt, haut pl, miniature, larg min, shuffle, repeat, autostart, autoscroll");';
+    pwg_query($q);
+
+    $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_plugin" , "true,true,false,400,500" , "Plugin music_player : evidence, header, footer, hauteur, largeur");';
+    pwg_query($q);
+}
+
+
+
+function plugin_activate()
+{
+    global $prefixeTable;
+
+///[ update from 1.2 ]
+    $q = pwg_query('SHOW COLUMNS FROM '.$prefixeTable.'mp_playlist');
+    $champ = array();
+	while ($rep = mysql_fetch_row($q))
+	{
+	array_push($champ, $rep[0]);
+	}
+
+    if (!in_array('type', $champ)) {
+        pwg_query('ALTER TABLE '.$prefixeTable.'mp_playlist ADD type VARCHAR( 50 ) NOT NULL AFTER id ');
+    }
+//ALTER TABLE `phpwebgallery_mp_playlist` ADD `type` VARCHAR( 50 ) NOT NULL AFTER `id` ;
+   $query = '
+SELECT COUNT(*) AS result FROM '.$prefixeTable.'mp_playlist
+  WHERE type=""
+;';
+   $data_table = mysql_fetch_array(pwg_query($query));
+   $exist = $data_table['result'];
+   if ( $exist != 0 )
+   {
+     $query = '
+SELECT id FROM '.$prefixeTable.'mp_playlist
+  WHERE type=""
+;';
+     $result = pwg_query($query);
+     while ($data = mysql_fetch_assoc($result))
+     {
+      $query = '
+      UPDATE '.$prefixeTable.'mp_playlist
+      SET type="local"
+      WHERE id="'.$data['id'].'"
+      LIMIT 1';
+      pwg_query($query);
+     }
+   }
+///[\]
+
+   $query = '
+SELECT COUNT(*) AS result FROM '.CONFIG_TABLE.'
+  WHERE param IN (\'mp_lecteur\')
+;';
+   $data_table = mysql_fetch_array(pwg_query($query));
+   $exist = $data_table['result'];
+   if ( $exist == 0 )
+   {
+    $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_lecteur" , "148,300,128,true,128,false,list,0,true" , "Lecteur config : haut tt, larg tt, haut pl, miniature, larg min, shuffle, repeat, autostart, autoscroll");';
+    pwg_query($q);
+   } 
+   else {
+      $query = '
+SELECT value FROM '.CONFIG_TABLE.'
+  WHERE param IN (\'mp_lecteur\')
+;';
+   $data_conf = mysql_fetch_array(pwg_query($query));
+   $conf=explode(',', $data_conf['value']);
+   $nbr=count($conf);
+   
+     if ($nbr!=9)
+     {
+      pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param IN (\'mp_lecteur\')');
+      pwg_query($q);
+	  $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_lecteur" , "148,300,128,true,128,false,list,0,true" , "Lecteur config : haut tt, larg tt, haut pl, miniature, larg min, shuffle, repeat, autostart, autoscroll");';
+      pwg_query($q);
+     }
+   }
+   
+   
+   $query = '
+SELECT COUNT(*) AS result FROM '.CONFIG_TABLE.'
+  WHERE param IN (\'mp_plugin\')
+;';
+   $data_table = mysql_fetch_array(pwg_query($query));
+   $exist = $data_table['result'];
+   if ( $exist == 0 )
+   {
+    $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_plugin" , "true,true,false,400,500" , "Plugin music_player : evidence, header, footer, hauteur, largeur");';
+    pwg_query($q);
+  } 
+   else {
+      $query = '
+SELECT value FROM '.CONFIG_TABLE.'
+  WHERE param IN (\'mp_plugin\')
+;';
+   $data_conf = mysql_fetch_array(pwg_query($query));
+   $conf=explode(',', $data_conf['value']);
+   $nbr=count($conf);
+   
+     if ($nbr!=5)
+     {
+      pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param IN (\'mp_plugin\')');
+      pwg_query($q);
+      $q = '
+INSERT INTO ' . CONFIG_TABLE . ' (param,value,comment)
+	VALUES
+	("mp_plugin" , "true,true,false,400,500" , "Plugin music_player : evidence, header, footer, hauteur, largeur");';
+      pwg_query($q);
+     }
+   }
+	
+}//fin active
+
+
+
+
+function plugin_uninstall()
+{
+    global $prefixeTable;
+
+  $q = 'DROP TABLE ' . $prefixeTable . 'mp_playlist;';
+  pwg_query($q);
+  $q = 'DROP TABLE ' . $prefixeTable . 'mp_music;';
+  pwg_query($q);
+  
+  pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param IN (\'mp_plugin\')');
+  pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param IN (\'mp_lecteur\')');
+}//fin uninstall
+
+
+?>
Index: extensions/music_player/music/Violator/Violator.xml
===================================================================
--- extensions/music_player/music/Violator/Violator.xml	(revision 3329)
+++ extensions/music_player/music/Violator/Violator.xml	(revision 3329)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>Depeche Mode - Violator - 01 - World In My Eyes</title>
+			<location>http://flop25.free.fr/gallerie/plugins/music_player/music/soad/02 B.Y.O.B.mp3</location>
+			<image>music/Violator/Violator.jpg</image>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/daft_punk/daft_punk.xml
===================================================================
--- extensions/music_player/music/daft_punk/daft_punk.xml	(revision 3329)
+++ extensions/music_player/music/daft_punk/daft_punk.xml	(revision 3329)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>Daft Punk - Alive</title>
+			<location>music/daft_punk/Daft Punk - Alive.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+		<track>
+			<title>Daft Punk - Around the world</title>
+			<location>music/daft_punk/Daft Punk - Around the world.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+		<track>
+			<title>Daft Punk - Human after all</title>
+			<location>music/daft_punk/Daft Punk - Human after all.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+		<track>
+			<title>Daft Punk - One more time</title>
+			<location>music/daft_punk/Daft Punk - One more time.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+		<track>
+			<title>Daft Punk - Robot rock</title>
+			<location>music/daft_punk/Daft Punk - Robot rock.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+		<track>
+			<title>Daft Punk - Too long</title>
+			<location>music/daft_punk/Daft Punk - Too long.mp3</location>
+			<image>music/daft_punk/daft_punk.jpg</image>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/electrometal/electrometal.xml
===================================================================
--- extensions/music_player/music/electrometal/electrometal.xml	(revision 3329)
+++ extensions/music_player/music/electrometal/electrometal.xml	(revision 3329)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>Apoptygma Berzerk - Electronic Warfare</title>
+			<location>music/electrometal/Apoptygma Berzerk - Electronic Warfare.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Ayria - The Radio</title>
+			<location>music/electrometal/Ayria - The Radio.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>caesar</title>
+			<location>music/electrometal/caesar.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Cell Auto Mata - Ish Galil</title>
+			<location>music/electrometal/Cell Auto Mata - Ish Galil.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>[Centhron] - Geist</title>
+			<location>music/electrometal/Centhron - Geist.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Cesium_137 - Echoes</title>
+			<location>music/electrometal/Cesium_137 - Echoes.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Diverje - The Distortion Chamber</title>
+			<location>music/electrometal/Diverje - The Distortion Chamber.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Front_Angel</title>
+			<location>music/electrometal/Front_Angel.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+		<track>
+			<title>Gott_Du_Schlampe</title>
+			<location>music/electrometal/Gott_Du_Schlampe.mp3</location>
+			<image>music/electrometal/electrometal.jpg</image>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/externe/7.php
===================================================================
--- extensions/music_player/music/externe/7.php	(revision 3329)
+++ extensions/music_player/music/externe/7.php	(revision 3329)
@@ -0,0 +1,1 @@
+<?php header("content-type:text/xml;charset=utf-8"); readfile('http://www.rsr.ch/podcast.aspx?rss=son-du-jour'); exit(); ?>
Index: extensions/music_player/music/externe/8.php
===================================================================
--- extensions/music_player/music/externe/8.php	(revision 3329)
+++ extensions/music_player/music/externe/8.php	(revision 3329)
@@ -0,0 +1,1 @@
+<?php header("content-type:text/xml;charset=utf-8"); readfile('http://www.rsr.ch/podcast.aspx?rss=son-du-jour'); exit(); ?>
Index: extensions/music_player/music/indo/indo.xml
===================================================================
--- extensions/music_player/music/indo/indo.xml	(revision 3329)
+++ extensions/music_player/music/indo/indo.xml	(revision 3329)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>01 Indochine Paradize Paradize</title>
+			<location>music/indo/01 Indochine Paradize Paradize.mp3</location>
+		</track>
+		<track>
+			<title>Indochine - 02 - Electrastar</title>
+			<location>music/indo/Indochine - 02 - Electrastar.mp3</location>
+		</track>
+		<track>
+			<title>Indochine - 04 - Mao Boy</title>
+			<location>music/indo/Indochine - 04 - Mao Boy.mp3</location>
+		</track>
+		<track>
+			<title>Indochine - J'Ai Demande a La Lune</title>
+			<location>music/indo/Indochine - J'Ai Demande a La Lune.mp3</location>
+		</track>
+		<track>
+			<title>Indochine - L'Aventurier</title>
+			<location>music/indo/Indochine - L'Aventurier.mp3</location>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/moby/moby.xml
===================================================================
--- extensions/music_player/music/moby/moby.xml	(revision 3329)
+++ extensions/music_player/music/moby/moby.xml	(revision 3329)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>01-Go (Woodtick Mix)</title>
+			<location>music/moby/01-Go (Woodtick Mix).mp3</location>
+		</track>
+		<track>
+			<title>Everything Is Wrong 02 Feeling So Real </title>
+			<location>music/moby/Everything Is Wrong 02 Feeling So Real .mp3</location>
+		</track>
+		<track>
+			<title>James_Bond_Theme</title>
+			<location>music/moby/James_Bond_Theme.mp3</location>
+		</track>
+		<track>
+			<title>Moby - 02 - James Bond Theme</title>
+			<location>music/moby/Moby - 02 - James Bond Theme.mp3</location>
+		</track>
+		<track>
+			<title>Moby - 04 - Ah-Ah</title>
+			<location>music/moby/Moby - 04 - Ah-Ah.mp3</location>
+		</track>
+		<track>
+			<title>Moby - In This World</title>
+			<location>music/moby/Moby - In This World.mp3</location>
+		</track>
+		<track>
+			<title>MOBY - Lift Me Up</title>
+			<location>music/moby/MOBY - Lift Me Up.mp3</location>
+		</track>
+		<track>
+			<title>Moby - Natural blues</title>
+			<location>music/moby/Moby - Natural blues.mp3</location>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/rhcp/rhcp.xml
===================================================================
--- extensions/music_player/music/rhcp/rhcp.xml	(revision 3329)
+++ extensions/music_player/music/rhcp/rhcp.xml	(revision 3329)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>Red Hot Chili Peppers - Aeroplane</title>
+			<location>music/rhcp/Red Hot Chili Peppers - Aeroplane.mp3</location>
+		</track>
+		<track>
+			<title>Red Hot Chili peppers - breaking the girl</title>
+			<location>music/rhcp/Red Hot Chili peppers - breaking the girl.mp3</location>
+		</track>
+		<track>
+			<title>Red Hot Chili Peppers - By The Way - 07 - Can`t Stop</title>
+			<location>music/rhcp/Red Hot Chili Peppers - By The Way - 07 - Can`t Stop.mp3</location>
+		</track>
+		<track>
+			<title>Red Hot Chili Peppers - By The Way</title>
+			<location>music/rhcp/Red Hot Chili Peppers - By The Way.mp3</location>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/soad/soad.xml
===================================================================
--- extensions/music_player/music/soad/soad.xml	(revision 3329)
+++ extensions/music_player/music/soad/soad.xml	(revision 3329)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+		<track>
+			<title>02 B.Y.O.B</title>
+			<location>music/soad/02 B.Y.O.B.mp3</location>
+			<image>music/soad/soad.jpg</image>
+		</track>
+		<track>
+			<title>04 Cigaro</title>
+			<location>music/soad/04 Cigaro.mp3</location>
+			<image>music/soad/soad.jpg</image>
+		</track>
+		<track>
+			<title>05 Radio-Video</title>
+			<location>music/soad/05 Radio-Video.mp3</location>
+			<image>music/soad/soad.jpg</image>
+		</track>
+		<track>
+			<title>06 This Cocaine Makes Me Feel Like I'm on This Song</title>
+			<location>music/soad/06 This Cocaine Makes Me Feel Like I'm on This Song.mp3</location>
+			<image>music/soad/soad.jpg</image>
+		</track>
+		<track>
+			<title>07 Violent Pornography</title>
+			<location>music/soad/07 Violent Pornography.mp3</location>
+			<image>music/soad/soad.jpg</image>
+		</track>
+	</trackList>
+</playlist>
Index: extensions/music_player/music/teste/teste.xml
===================================================================
--- extensions/music_player/music/teste/teste.xml	(revision 3329)
+++ extensions/music_player/music/teste/teste.xml	(revision 3329)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+	</trackList>
+</playlist>
Index: extensions/music_player/player/mp3player.html
===================================================================
--- extensions/music_player/player/mp3player.html	(revision 3329)
+++ extensions/music_player/player/mp3player.html	(revision 3329)
@@ -0,0 +1,57 @@
+<html>
+<head>
+
+
+<script type="text/javascript" src="swfobject.js"></script>
+
+
+</head>
+<body>
+
+
+<h2>single mp3 file, with cover image:</h2>
+
+
+<p id="player1"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
+<script type="text/javascript">
+	var s1 = new SWFObject("mp3player.swf", "single", "240", "240", "7");
+	s1.addVariable("file","song1.mp3");
+	s1.addVariable("image","cover.jpg");
+	s1.write("player1");
+</script>
+
+
+<h2>playlist file, with different colors and EQ:</h2>
+
+
+<p id="player2"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
+<script type="text/javascript">
+	var s2 = new SWFObject("mp3player.swf", "playlist", "240", "135", "7");
+	s2.addVariable("file","playlist.xml");
+	s2.addVariable("backcolor","0x00000");
+	s2.addVariable("frontcolor","0xEECCDD");
+	s2.addVariable("lightcolor","0xCC0066");
+	s2.addVariable("displayheight","0");
+	s2.write("player2");
+</script>
+
+
+<h2>a single line, with repeat and downloadbutton and without digits:</h2>
+
+
+<p id="player3"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
+<script type="text/javascript">
+	var s3 = new SWFObject("mp3player.swf", "line", "240", "20", "7");
+	s3.addVariable("file","song1.mp3");
+	s3.addVariable("repeat","true");
+	s3.addVariable("showdigits","false");
+	s3.addVariable("showdownload","true");
+	s3.write("player3");
+</script>
+
+
+<p><a href="http://www.jeroenwijering.com/extras/wizard.html">online configuration wizard</a></p>
+
+
+</body>
+</html>
Index: extensions/music_player/player/playlist.xml
===================================================================
--- extensions/music_player/player/playlist.xml	(revision 3329)
+++ extensions/music_player/player/playlist.xml	(revision 3329)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<playlist version="1" xmlns="http://xspf.org/ns/0/">
+	<trackList>
+
+		<track>
+			<title>Homeland</title>
+			<location>player/song1.mp3</location>
+		</track>
+
+		<track>
+			<title>Jazzalude</title>
+			<location>player/song2.mp3</location>
+		</track>
+		
+	</trackList>
+</playlist>
Index: extensions/music_player/player/swfobject.js
===================================================================
--- extensions/music_player/player/swfobject.js	(revision 3329)
+++ extensions/music_player/player/swfobject.js	(revision 3329)
@@ -0,0 +1,8 @@
+/**
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
Index: extensions/music_player/player/v4/readme.html
===================================================================
--- extensions/music_player/player/v4/readme.html	(revision 3329)
+++ extensions/music_player/player/v4/readme.html	(revision 3329)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+	<title>JW Player for Flash</title>
+
+	<style type="text/css">
+		body { background-color: #fff; padding: 0 20px; color:#000; font: 13px/18px Arial, sans-serif; }
+		a { color: #360; }
+		h3 { padding-top: 20px; }
+		ol { margin:5px 0 15px 16px; padding:0; list-style-type:square; }
+	</style>
+
+</head>
+<body>
+
+	<h3>Example</h3>
+	<p>Thanks for downloading! Below you see a simple embedded example of the <a href="http://www.jeroenwijering.com/?item=JW_FLV_Media_Player">JW Player</a>. Copy-paste the source code and put the SWF, JS and FLV file on your site to get started.</p>
+
+
+
+
+
+	<div id="container"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>
+	<script type="text/javascript" src="swfobject.js"></script>
+	<script type="text/javascript">
+		var s1 = new SWFObject("player.swf","ply","328","200","9","#FFFFFF");
+		s1.addParam("allowfullscreen","true");
+		s1.addParam("allowscriptaccess","always");
+		s1.addParam("flashvars","file=video.flv");
+		s1.write("container");
+	</script>
+
+
+
+
+	<h3>Licensing</h3>
+	<p>The FLV Media Player is licensed under a <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/">Creative Commons License</a>. It allows you to use, modify and redistribute the script, but only for <b>noncommercial</b> purposes. For corporate use, <a href="http://www.jeroenwijering.com/?page=order" title="Order commercial licenses">please apply for a commercial license</a>.</p>
+
+	<h3>Quickstart</h3>
+	<ol>
+		<li>Note to 3.xx users: <a href="http://code.longtailvideo.com/trac/wiki/VersionChanges">a LOT has changed</a> in the 4.0 release, including changes to <a href="http://code.jeroenwijering.com/trac/wiki/FlashFormats">flashvars</a>!
+		<li>The easiest way to get to know the player is by using <a href="http://www.jeroenwijering.com/?page=wizard">the setup wizard</a>. Select an example, set the file or playlist you want to play and copy-paste the embed code to your site.</li>
+		<li>TAlso check out the various tutorials, e.g. on <a href="http://www.jeroenwijering.com/?item=FLV_Video_Compression">video compression</a>, <a href="http://www.jeroenwijering.com/?item=Embedding_flash">installing the player</a> and <a href="http://www.jeroenwijering.com/?item=Skinning_the_JW_Player">creating skins</a>.</li>
+		<li>Note that you only have to copy the packaged <b>yt.swf</b> file if you want to play Youtube content in the player.</li>
+	</ol>
+
+	<h3>Wiki and source</h3>
+	<p>The <a href="http://code.jeroenwijering.com/trac">JW Player Wiki</a> contains a wealth of information about the player, including:</p>
+	<ol>
+		<li>All <a href="http://code.jeroenwijering.com/trac/wiki/FlashFormats">supported file formats</a> (and playlists).</li>
+		<li>All <a href="http://code.jeroenwijering.com/trac/wiki/FlashVars">supported variables</a> for customizing the player).</li>
+		<li>All <a href="http://code.jeroenwijering.com/trac/wiki/FlashAPI">supported API calls</a> (for interacting with javascript).</li>
+	</ol>
+	<p>The full source code is also <a href="http://code.jeroenwijering.com/trac">available</a> in the wiki.</p>
+
+	<h3>Next steps</h3>
+	<p>If you're ready to get professional about online video, check out these two services that take your site to the next level:</p>
+	<ol>
+		<li><a href="http://www.longtailvideo.com">LongTail Video</a> is a no-nonsense video advertisement network that will increase your traffic and monetize your streams. <a href="http://www.longtailvideo.com.com/signup.asp">Sign up</a>.</li>
+		<li><a href="http://www.bitsontherun.com">Bits on the Run</a> is a hassle-free video management system that handles the encoding, streaming and tracking of your videos. <a href="http://www.bitsontherun.com.com/signup">Sign up</a>.</li>
+	</ol>
+
+</body>
+</html>
Index: extensions/music_player/player/v4/swfobject.js
===================================================================
--- extensions/music_player/player/v4/swfobject.js	(revision 3329)
+++ extensions/music_player/player/v4/swfobject.js	(revision 3329)
@@ -0,0 +1,8 @@
+/**
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ */
+if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
Index: extensions/music_player/template/admin.css
===================================================================
--- extensions/music_player/template/admin.css	(revision 3329)
+++ extensions/music_player/template/admin.css	(revision 3329)
@@ -0,0 +1,18 @@
+#list LI {
+	display:block;
+	margin:4px;
+	padding:4px;
+	border: 1px dotted #FFFFFF;
+}
+#list_music
+{
+	border: 1px dashed #FFFFFF;
+	width:100%;
+}
+.help
+{
+	margin:10px;
+	padding:5px;
+	border: 1px dotted #FFFFFF;
+	text-align:justify;
+}
Index: extensions/music_player/template/admin.tpl
===================================================================
--- extensions/music_player/template/admin.tpl	(revision 3329)
+++ extensions/music_player/template/admin.tpl	(revision 3329)
@@ -0,0 +1,112 @@
+
+{html_head}<link rel="stylesheet" type="text/css" href="./template/admin.css">{/html_head}
+<div class="titrePage">
+  <ul class="categoryActions">
+    <li><a href="admin.php?page=plugin&section=music_player/admin/help.php" title="{'Help'|@translate}">{'mp_need_help'|@translate}</a></li>
+  </ul>
+  <h2>Music player</h2>
+</div>
+<!-- 
+<div class="header_msgs">
+  
+  <p>mp_msgs.mp_msg.MP_MSG</p>
+  
+</div>
+ -->
+{$ENVOI}
+<fieldset>
+<legend>{'mp_admin_leg'|@translate}</legend>
+<div align="left">
+  <form action="" method="post">
+    <input name="envoi" type="hidden" value="synchro" />
+    <input value="{'mp_admin_tt_synchro'|@translate}" name="synchro" type="submit" />
+  </form>
+</div>
+<ul id="list">
+  {foreach from=$list item=list}
+  <li><a href="{$pwg_root}plugins/music_player/music/{$list.URL}/{$list.URL}.xml">{'mp_admin_folder'|@translate} : {$list.URL} -- {'mp_admin_nm_pl'|@translate} : {$list.TEXTE}</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&section=music_player/admin/admin_edit.php&id={$list.ID}" title="{'mp_admin_nm_edit'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/category_edit.png" class="button" alt="{'mp_admin_nm_edit'|@translate}"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&amp;section=music_player/admin/admin_edit.php&music={$list.ID}" title="{'mp_admin_pl'|@translate}"><img src="plugins/music_player/template/audio.png" class="button" alt="{'mp_admin_pl'|@translate}"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&amp;section=music_player/admin/admin_img.php&id={$list.ID}" title="{'mp_admin_min'|@translate}"><img src="plugins/music_player/template/miniature.png" class="button" alt="{'mp_admin_min'|@translate}"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&amp;section=music_player/admin/admin_suppr.php&id={$list.ID}" title="{'delete'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/delete.png" class="button" alt="{'delete'|@translate}"></a> </li>
+  {/foreach}
+</ul>
+</fieldset>
+<fieldset>
+<legend>{'mp_admin_leg1'|@translate}</legend>
+<form action="" method="post" name="externe">
+  Texte :
+  <input name="texte" type="text" size="40" maxlength="255" />
+  <br />
+  URL
+  <input name="url" value="http://" type="text" size="60" maxlength="255" />
+  <br />
+  <input name="envoi" type="hidden" value="externe" />
+  <input name="submit" value="{'mp_send'|@translate}" type="submit" />
+</form>
+<ul id="list">
+  {foreach from=$list_ex item=foo}
+  <li>URL : {$foo.URL} -- Texte : {$foo.TEXTE}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&section=music_player/admin/admin_edit.php&ex_id={$foo.ID}" title="{'mp_admin_nm_edit'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/category_edit.png" class="button" alt="{'mp_admin_nm_edit'|@translate}"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="admin.php?page=plugin&amp;section=music_player/admin/admin_suppr.php&id={$foo.ID}" title="{'delete'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/delete.png" class="button" alt="{'delete'|@translate}"></a> </li>
+  {/foreach}
+</ul>
+</fieldset>
+<fieldset>
+<legend>{'mp_admin_leg2'|@translate}</legend>
+<form action="" method="post" name="option_plugin">
+  <input type="checkbox" name="evidence" value="true" {$MP_EVIDENCE} />
+  {'mp_admin_2_opt1'|@translate}// !!Inactive option !! <br />
+  <input type="checkbox" name="head" value="true" {$MP_HEAD} />
+  {'mp_admin_2_opt2'|@translate}<br />
+  <input type="checkbox" name="foot" value="true" {$MP_FOOT} />
+  {'mp_admin_2_opt3'|@translate}<br />
+  {'mp_admin_2_opt4'|@translate} : {'mp_admin_2_opt4_1'|@translate}
+  <input name="h_pop" type="text" size="5" {$MP_H_POP} />
+  px
+  {'mp_admin_2_opt4_2'|@translate}
+  <input name="l_pop" type="text" size="5" {$MP_L_POP} />
+  px<br />
+  <input name="envoi_config" type="hidden" value="plugin" />
+  <input type="submit" name="button" id="button" value="{'mp_send'|@translate}" />
+</form>
+</fieldset>
+<fieldset>
+<legend>{'mp_admin_leg3'|@translate}</legend>
+<form action="" method="post" name="option_lecteur">
+  <ul>
+    <li>{'mp_admin_3_opt1_1'|@translate}
+      <input name="h_tt" type="text" size="5" {$MP_H_TT} />
+      px
+      {'mp_admin_3_opt1_2'|@translate}
+      <input name="l_tt" type="text" size="5" {$MP_L_TT} />
+      px</li>
+    <li> {'mp_admin_3_opt2_1'|@translate}
+      <input name="h" type="text" size="5" {$MP_H} />
+      px <br />
+      {'mp_admin_3_opt2_2'|@translate}</li>
+    <li>
+      <input type="checkbox" name="mp_miniature" value="true" {$MP_MINIATURE_ACTIVATED} />
+      {'mp_admin_3_opt3_1'|@translate}</li>
+    {'mp_admin_3_opt3_2'|@translate}
+    <input name="l" type="text" size="5" {$MP_L}/>
+    px
+    </li>
+    <br />
+    {'mp_admin_3_opt3_3'|@translate}
+    <li>
+      <input type="checkbox" name="mp_shuffle" value="true" {$MP_SHUFFLE_ACTIVATED} />
+      {'mp_admin_3_opt4'|@translate}</li>
+    <li>
+      <input name="mp_repeat" type="checkbox" value="true" {$MP_REPEAT_ACTIVATED} />
+      {'mp_admin_3_opt5'|@translate}</li>
+    <li>{'mp_admin_3_opt6'|@translate} :
+      <select name="mp_autostart">
+        <option value="{$AUTOSTART}">{$AUTOSTART_T}</option>
+        {foreach from=$list2 item=fioo}
+        <option value="{$fioo.ID}">{$fioo.TEXTE}</option>
+        {/foreach}
+      </select>
+    </li>
+    <li>
+      <input name="mp_autoscroll" type="checkbox" value="true" {$MP_AUTOSCROLL_ACTIVATED} />
+      {'mp_admin_3_opt7'|@translate}</li>
+  </ul>
+  <input name="envoi_config" type="hidden" value="lecteur" />
+  <input type="submit" name="button2" id="button2" value="{'mp_send'|@translate}" />
+</form>
+</fieldset>
Index: extensions/music_player/template/admin_edit.tpl
===================================================================
--- extensions/music_player/template/admin_edit.tpl	(revision 3329)
+++ extensions/music_player/template/admin_edit.tpl	(revision 3329)
@@ -0,0 +1,155 @@
+<div class="titrePage">
+  <ul class="categoryActions">
+    <li><a href="admin.php?page=plugin&section=music_player/admin/help.php" title="{'Help'|@translate}">{'mp_need_help'|@translate}</a></li>
+  </ul>
+  <h2>Music player / {$PLAYLIST}</h2>
+</div>
+<!--
+<div class="header_msgs">
+  <p>mp_msgs.mp_msg.MP_MSG</p>
+</div>
+ -->
+{foreach from=$edit_txt item=edit_txt}
+<form action="" method="post" name="edit_txt">
+  {'mp_adm_edit_1'|@translate} :
+  <input name="texte" type="text" value="{$edit_txt.TXT}" maxlength="255" />
+  <input name="id" type="hidden" value="{$edit_txt.ID}" />
+  <input name="envoi" value="edit_txt" type="hidden" />
+  <input name="submit" value="OK" type="submit" />
+</form>
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
+{/foreach}
+
+{foreach from=$edit_ex item=edit_ex}
+<form action="" method="post" name="edit_ex">
+  {'mp_adm_edit_1'|@translate} :
+  <input name="texte" type="text" value="{$edit_ex.TXT}" maxlength="255" />
+  <br />
+  URL :
+  <input name="url" type="text" value="{$edit_ex.URL}" size="60" maxlength="255" />
+  <input name="id" type="hidden" value="{$edit_ex.ID}" />
+  <input name="envoi" value="edit_ex" type="hidden" />
+  <input name="submit" value="OK" type="submit" />
+</form>
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
+{/foreach}
+
+{foreach from=$suppr item=suppr}
+<form action="admin.php?page=plugin&amp;section=music_player/admin/admin_edit.php&music={$suppr.PL}" method="post" name="suppr">
+  <input name="envoi" type="hidden" value="suppr" />
+  <input name="id" type="hidden" value="{$suppr.ID}" />
+  <input name="submit" value="{'mp_adm_ed_sup_ok'|@translate}" type="submit" />
+  {'mp_adm_ed_sup_info'|@translate}
+</form>
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin_edit.php&music={$suppr.PL}">{'mp_adm_return_2'|@translate}</a></p>
+{/foreach}
+{foreach from=$edit_music item=edit_music}
+<form action="" method="post" name="edit_music">
+  Texte :
+  <input name="nom" type="text" value="{$edit_music.NOM}" size="40" maxlength="255" />
+  <br />
+  URL :
+  <input name="url" type="text" value="{$edit_music.URL}" size="80" maxlength="255" />
+  <input name="id" type="hidden" value="{$edit_music.ID}" />
+  <input name="envoi" type="hidden" value="edit_music" />
+  <input name="submit" value="OK" type="submit" />
+</form>
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin_edit.php&music={$edit_music.PL}">{'mp_adm_return_2'|@translate}</a></p>
+{/foreach}
+
+{if isset($etape_ID)}
+<fieldset>
+<legend>{'mp_adm_etape_1'|@translate}</legend>
+<form id="form1" name="form1" method="post" action="">
+  <div align="center">{'mp_adm_et1_txt'|@translate}
+    <input type="hidden" name="id_playlist" id="hiddenField" value="{$etape_ID}" />
+    <input type="hidden" name="envoi" id="hiddenField" value="synchro_bdd" />
+    <input type="submit" name="button" id="button" value="{'mp_adm_edit_3'|@translate}" />
+  </div>
+</form>
+</fieldset>
+<fieldset>
+<legend>{'mp_adm_etape_2'|@translate}</legend>
+{'mp_adm_et2_txt'|@translate}
+<form id="form1" name="form1" method="post" action="">
+  {'mp_adm_et2_nbr'|@translate}
+  <input name="nbr_ajout" type="text" id="nbr_ajout" size="3" maxlength="2" />
+  <input type="submit" name="button" id="button" value="OK" />
+</form>
+<form action="" method="post" name="edit_music">
+  {foreach from=$ajout item=ajout}<!-- BEGIN ajout -->
+  <fieldset>
+  Texte :
+  <input name="nom_{$ajout.I}" type="text" size="40" maxlength="255" />
+  {'mp_adm_et2_rg'|@translate}
+  <input name="rang_{$ajout.I}" type="text" size="3" maxlength="20" />
+  {'mp_adm_et2_rg2'|@translate}<br />
+  URL :
+  <input name="url_{$ajout.I}" type="text" size="80" maxlength="255" />
+  </fieldset>
+  {/foreach}
+  <input name="nbr" type="hidden" value="{$etape_I}" />
+  <input name="envoi" type="hidden" value="ajout" />
+  <input name="submit" value="{'mp_send'|@translate}" type="submit" />
+</form>
+</fieldset>
+{/if}<!-- etape -->
+
+{if isset($playlist_TEXTE)}
+<fieldset>
+<legend>{'mp_adm_etape_3'|@translate}</legend>
+{'mp_adm_edit_2'|@translate} &quot;<em>{$playlist_TEXTE}&quot;</em> {'mp_adm_envoi_2'|@translate} :
+<table id="list_music" class="table2">
+  <thead>
+    <tr class="throw">
+      <td>{'mp_adm_thead1'|@translate}</td>
+      <td>{'mp_adm_thead2'|@translate}</td>
+      <td>{'mp_adm_thead3'|@translate}</td>
+      <td>{'mp_adm_thead4'|@translate}</td>
+      <td>{'mp_adm_thead5'|@translate}</td>
+      <td>{'mp_adm_thead6'|@translate}</td>
+    </tr>
+  </thead>
+  {foreach from=$music item=music}<!-- BEGIN music -->
+  <tr class="{$music.CLASS}">
+    <td>{$music.NOM}</td>
+    <td>{$music.FILE}</td>
+	<td>
+    {if isset ($music.UP_RANG)}
+      <form action="" method="post">
+        <input name="rang" type="hidden" value="{$music.UP_RANG}" />
+        <input name="nouv_rang" type="hidden" value="{$music.UP_RANG_NEW}" />
+        <input type="hidden" name="envoi" id="hiddenField" value="rang" />
+        <input type="image" name="up" src="plugins/music_player/template/icon/page_top.png" />
+      </form>
+	{/if}
+    </td>
+    <td>
+    {if isset ($music.D_RANG)}
+      <form action="" method="post">
+        <input name="rang" type="hidden" value="{$music.D_RANG}" />
+        <input name="nouv_rang" type="hidden" value="{$music.D_RANG_NEW}" />
+        <input type="hidden" name="envoi" id="hiddenField" value="rang" />
+        <input type="image" name="down" src="plugins/music_player/template/icon/page_end.png" />
+      </form>
+    {/if}
+    </td>
+    <td><a href="admin.php?page=plugin&section=music_player/admin/admin_edit.php&music_id={$music.ID}" title="{'mp_admin_nm_edit'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/category_edit.png" class="button" alt="{'mp_admin_nm_edit'|@translate}"></a></td>
+    <td><a href="admin.php?page=plugin&section=music_player/admin/admin_edit.php&suppr={$music.ID}" title="{'delete'|@translate}"><img src="{$pwg_root}{$themeconf.icon_dir}/delete.png" class="button" alt="{'delete'|@translate}"></a> </td>
+  </tr>
+  {/foreach}<!-- END music -->
+</table>
+</fieldset>
+<fieldset>
+<legend>{'mp_adm_etape_4'|@translate}</legend>
+<form id="form1" name="form1" method="post" action="">
+  <div align="center"> ===>{'mp_adm_et4_txt'|@translate}
+    <input type="hidden" name="id_playlist" id="hiddenField" value="{$playlist_ID}" />
+    <input type="hidden" name="envoi" id="hiddenField2" value="synchro_xml" />
+    <input type="submit" name="button" id="button" value="{'mp_adm_et4_ok'|@translate}" />
+    <=== </div>
+</form>
+</fieldset>
+
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
+{/if}
Index: extensions/music_player/template/admin_envoi.tpl
===================================================================
--- extensions/music_player/template/admin_envoi.tpl	(revision 3329)
+++ extensions/music_player/template/admin_envoi.tpl	(revision 3329)
@@ -0,0 +1,12 @@
+<form action="" method="post">
+    {foreach from=$syn item=syn}<!-- BEGIN syn -->
+    <strong>{'mp_adm_envoi_1'|@translate} "{$syn.RESULT}" :</strong>
+<input name="texte_{$syn.NBR}" type="text" /><em>{'mp_adm_envoi_2'|@translate} : {$syn.RESULT_M}</em>
+<input name="url_{$syn.NBR}" type="hidden" value="{$syn.RESULT}" />
+    <!-- <input name="music/syn.RESULT" type="hidden" value="syn.RESULT_M" />--><br />
+    {/foreach}<!-- END syn -->    
+
+    <input name="nbr" type="hidden" value="{$NBR_TT}" />
+    <input name="envoi" type="hidden" value="texte" />
+    <input name="submit" value="{'mp_send'|@translate}" type="submit" />
+</form>
Index: extensions/music_player/template/admin_img.tpl
===================================================================
--- extensions/music_player/template/admin_img.tpl	(revision 3329)
+++ extensions/music_player/template/admin_img.tpl	(revision 3329)
@@ -0,0 +1,49 @@
+<div class="titrePage">
+    <ul class="categoryActions">
+      <li><a href="admin.php?page=plugin&section=music_player/admin/help.php" title="{'Help'|@translate}">{'mp_need_help'|@translate}</a></li>
+    </ul>
+  <h2>Music player / {$PLAYLIST} / miniature</h2>
+</div>
+<!-- 
+<div class="header_msgs">
+ <p>mp_msgs.mp_msg.MP_MSG</p>
+</div>
+ -->
+
+{foreach from=$envoi item=envoi}<!-- BEGIN envoi -->
+<fieldset>
+<legend>Upload</legend>
+<form action="" method="post" enctype="multipart/form-data">
+  <input name="fichier" type="file" />
+  <input type="hidden" name="ajout_image" value="upload" />
+  <input type="hidden" name="id" value="{$envoi.ID}" />
+  <input type="submit" name="button" id="button" value="{'mp_send'|@translate}" />
+</form>
+</fieldset>
+{'mp_ou'|@translate}
+<fieldset>
+<legend>{'Links'|@translate}</legend>
+<form action="" method="post">
+  <input name="lien" type="text" id="textfield" size="50" value="http://" />
+  <input type="hidden" name="ajout_image" value="lien" />
+  <input type="hidden" name="id" value="{$envoi.ID}" />
+  <input type="submit" name="button2" id="button2" value="{'mp_send'|@translate}" />
+</form>
+</fieldset>
+  {/foreach}<!-- END envoi -->
+  
+  {foreach from=$miniature item=miniature}<!-- BEGIN miniature -->
+<div align="center">
+  <img src="{$miniature.URL}" alt="La miniature de la playlist" />
+<form action="" method="post">
+  <input type="submit" name="suppr" id="suppr" value="{'delete'|@translate}" />
+{'mp_adm_info_img'|@translate}
+</form>
+</div>
+  {/foreach}<!-- END miniature -->
+  {foreach from=$rien item=rien}<!-- BEGIN rien -->
+<div align="center">
+  {$rien.TXT}
+</div>
+  {/foreach}<!-- END rien -->
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
Index: extensions/music_player/template/admin_suppr.tpl
===================================================================
--- extensions/music_player/template/admin_suppr.tpl	(revision 3329)
+++ extensions/music_player/template/admin_suppr.tpl	(revision 3329)
@@ -0,0 +1,27 @@
+<div class="titrePage">
+	<h2>Music player</h2>
+</div>
+<!--
+<div class="header_msgs">
+ <p>mp_msgs.mp_msg.MP_MSG</p>
+</div>
+ -->
+
+{foreach from=$suppr item=suppr}<!-- BEGIN suppr -->
+<form action="" method="post" name="edit_txt">
+  <p>{'mp_adm_suppr_1'|@translate}</p>
+  <p>
+    <input type="radio" name="type_suppr" id="type_suppr" value="suppr_bdd" /> 
+  {'mp_adm_suppr_2'|@translate}</p>
+  <p>
+    <input type="radio" name="type_suppr" id="type_suppr" value="suppr_folder" />
+{'mp_adm_suppr_3'|@translate}</p>
+  <p align="center">
+    <input name="id" type="hidden" value="{$suppr.ID}" />
+    <input name="envoi" type="hidden" value="suppr" />
+    <input name="submit" value="OK" type="submit" />
+  </p>
+</form>
+{/foreach}<!-- END suppr -->
+
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
Index: extensions/music_player/template/block.tpl
===================================================================
--- extensions/music_player/template/block.tpl	(revision 3329)
+++ extensions/music_player/template/block.tpl	(revision 3329)
@@ -0,0 +1,27 @@
+{html_head}
+<style>
+#block_mp li a {literal}{{/literal}
+	display: block ;
+	background: transparent url({$PLG_path}/template/icon/fond1.png) left top no-repeat ;
+	padding: 4px ;
+	text-align: center ;
+	with: 150px;
+	height: 50px;
+	{literal}}{/literal}
+#block_mp li a:hover, #block_mp li a:focus, #block_mp li a:active {literal}{{/literal}
+	background: transparent url({$PLG_path}/template/icon/fond2.png) left top no-repeat ;
+	{literal}}{/literal}
+#block_mp li{literal}{{/literal}
+	list-style-image: none;
+	list-style-type: none;
+	{literal}}{/literal}
+	</style>
+{/html_head}
+<dt>{'lien_titre'|@translate}</dt>
+<dd>
+  <ul id="block_mp">
+	<li>
+	  <a {$ATRIB} >{'lien_expl'|@translate}</a>
+	</li> 
+  </ul>
+</dd>
Index: extensions/music_player/template/help.tpl
===================================================================
--- extensions/music_player/template/help.tpl	(revision 3329)
+++ extensions/music_player/template/help.tpl	(revision 3329)
@@ -0,0 +1,36 @@
+<div class="titrePage">
+	<h2>Music player</h2>
+</div>
+<div style="text-align:left">
+<div style="margin-bottom:5em">
+ <dl>
+  <dt>FAQ</dt>
+  <dd>
+   <ul>
+    <li><a href="#q1">{'mp_help_q1'|@translate}</a></li>
+    <li><a href="#q2">{'mp_help_q2'|@translate}</a></li>
+    <li><a href="#q3">{'mp_help_q3'|@translate}</a></li>
+    <li><a href="#q4">{'mp_help_q4'|@translate}</a></li>
+    <li><a href="#q5">{'mp_help_q5'|@translate}</a></li>
+    <li><a href="#q6">{'mp_help_q6'|@translate}</a></li>
+    <li><a href="#q7">{'mp_help_q7'|@translate}</a></li>
+   </ul>
+  </dd>
+</dl>
+</div>
+<div id="q1" class="help"><p><strong>{'mp_help_q1'|@translate}</strong><br />{'mp_help_div1'|@translate}</p>
+</div>
+<div id="q2" class="help"><p><strong>{'mp_help_q2'|@translate}</strong><br />{'mp_help_div2'|@translate}</p>
+</div>
+<div id="q3" class="help"><p><strong>{'mp_help_q3'|@translate}</strong><br />{'mp_help_div3'|@translate}</p>
+</div>
+<div id="q4" class="help"><p><strong>{'mp_help_q4'|@translate}</strong><br />{'mp_help_div4'|@translate}</p>
+</div>
+<div id="q5" class="help"><p><strong>{'mp_help_q5'|@translate}</strong><br />{'mp_help_div5'|@translate}</p>
+</div>
+<div id="q6" class="help"><p><strong>{'mp_help_q6'|@translate}</strong><br />{'mp_help_div6'|@translate}</p>
+</div>
+<div id="q7" class="help"><p><strong>{'mp_help_q7'|@translate}</strong><br />{'mp_help_div7'|@translate}</p>
+</div>
+<p><a href="admin.php?page=plugin&amp;section=music_player/admin/admin.php">{'mp_adm_return'|@translate}</a></p>
+</div>
Index: extensions/music_player/template/index.php
===================================================================
--- extensions/music_player/template/index.php	(revision 3329)
+++ extensions/music_player/template/index.php	(revision 3329)
@@ -0,0 +1,9 @@
+<?php
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: extensions/music_player/template/lecteur.css
===================================================================
--- extensions/music_player/template/lecteur.css	(revision 3329)
+++ extensions/music_player/template/lecteur.css	(revision 3329)
@@ -0,0 +1,25 @@
+#autre_content
+{
+width:100%;
+padding:0;
+margin:0;
+  }
+#content
+{
+margin-left: auto;
+margin-bottom:1em;
+width:100%;
+border:none;
+  }
+#the_page
+{
+width:100%;
+border:none;
+  }
+body {
+min-width: inherit;
+width:100%;
+}
+#cache
+{
+padding:5px}
Index: extensions/music_player/template/lecteur.tpl
===================================================================
--- extensions/music_player/template/lecteur.tpl	(revision 3329)
+++ extensions/music_player/template/lecteur.tpl	(revision 3329)
@@ -0,0 +1,81 @@
+{html_head}<link rel="stylesheet" type="text/css" href="./template/lecteur.css">{/html_head}
+{html_head}<script type="text/javascript" src="./player/swfobject.js"></script>{/html_head}
+{html_head}<script type="text/javascript">
+{literal}
+
+	function loadFile(obj) { thisMovie("playlist").loadFile(obj); };
+	// This is a javascript handler for the player and is always needed.
+	function thisMovie(movieName) {
+	    if(navigator.appName.indexOf("Microsoft") != -1) {
+			return window[movieName];
+		} else {
+			return document[movieName];
+		}
+	};
+{/literal}
+
+</script>{/html_head}
+
+{if $conf_plugin_1!='true' }
+{html_head}<style type="text/css">{literal}
+#theHeader
+{
+display:none;
+}
+{/literal}</style>{/html_head}
+{/if}
+{if $conf_plugin_2!='true' }
+{html_head}<style type="text/css">{literal}
+
+#copyright
+{
+display:none;
+}	
+	  </style>{/literal}{/html_head}
+{/if}
+
+<div id="content">
+<div id="autre_content">
+<div id="montre" style="display:block" align="center">
+  <a href="javascript:void(0)" onclick="document.getElementById('montre').style.display ='none';document.getElementById('cache').style.display ='block'">{'mp_montre'|@translate}</a>
+</div>
+<div id="cache" style="display:none" align="center">
+  <a href="javascript:void(0)" onclick="document.getElementById('montre').style.display ='block';document.getElementById('cache').style.display ='none'">{'mp_cache'|@translate}</a><br />
+  <ul>
+  {foreach from=$playlist item=playlist}<!-- BEGIN playlist -->
+    <li><a href="javascript:void(0)" onclick="javascript:loadFile({literal}{{/literal}file:'{$playlist.URL}'{literal}}{/literal})" >{$playlist.TEXTE}</a></li>
+  {/foreach}<!-- END playlist -->
+  </ul>
+</div>
+<p align="center" id="player">
+<script type="text/javascript">
+	var so = new SWFObject("player/mp3player.swf", "playlist", "{$L_TT}", "{$H_TT}", "7");
+	so.addVariable("file","{$URL}");
+	so.addVariable("autostart","{$AUTOSTART}"); 
+
+	so.addVariable("enablejs","true");
+	so.addVariable("javascriptid","playlist");
+	so.addVariable('backcolor','0x000000');
+	so.addVariable('frontcolor','0xffffff');
+	so.addVariable('lightcolor','0x0099CC');
+	so.addVariable('linktarget','_blank');
+    so.addParam("allowfullscreen","true");
+	so.addParam("allowscriptaccess","always"); 
+
+	so.addVariable("repeat","{$REPEAT}");
+	so.addVariable("shuffle","{$SHUFFLE}"); 
+	so.addVariable("autoscroll","{$AUTOSCROLL}"); 
+ 
+	so.addVariable('displayheight','{$H}'); <!--Attention hauteur de la playlist !  -->
+	so.addVariable('displaywidth','{$L}');<!--Attention largeur de la miniature !  -->
+
+		
+
+	so.write("player");
+</script></p>
+<p id="pageBottomActions"><a href="#" onclick="window.close();" title="{'Close this window'|@translate}"><img src="template/icon/exit.png" class="button" alt="close"></a></p>
+</div>
+</div> <!-- the_page -->
+
+</body>
+</html>
