Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_selecteur.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_selecteur.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_selecteur.php	(revision 80)
@@ -0,0 +1,171 @@
+<?php
+
+function afficher_selecteur($args, $afficher_ajouter_rubrique=true, $afficher_ajouter_article=true)
+{
+  $retour = charger_structure();
+  $arbo = $retour[0];
+  $articles = $retour[1];
+  echo "<ul class=\"selecteur\">";
+  foreach($arbo as $id => $section) { 
+    echo "<li class=\"section\">";
+    if ($afficher_ajouter_rubrique) {
+      echo '<a href="'.generer_url(array_merge($args, array("id_rubrique" => $id))).'" class="ajouter"><img src="'._DIR_PLUGIN_ARTY.'images/ajouter.gif" alt="+" /></a>';
+    }
+    echo '<img class="fleche" onclick="deplier_contenu(this);" src="'._DIR_PLUGIN_ARTY.'images/deplierhaut.gif" alt=">" />';
+    echo '<span class="titre_section">'.$section["titre"].'</span>';
+    echo afficher_enfants($section["enfants"], $articles, $args, $afficher_ajouter_rubrique, $afficher_ajouter_article);
+    if($afficher_ajouter_article) {
+    echo selec_afficher_article($id, $articles, $args, $afficher_ajouter_rubrique, $afficher_ajouter_article);
+    }
+    echo "</li>";
+  }
+  echo "</ul>";
+}
+
+function charger_structure(){
+  //rubriques
+  $arbo = array();
+  
+  $result = spip_query("SELECT id_rubrique, titre FROM spip_rubriques WHERE id_parent=0");
+  while ($row = spip_fetch_array($result)) {
+    $arbo[$row['id_rubrique']] = array("titre" => $row['titre']);
+    $arbo[$row['id_rubrique']]["enfants"] = rubriques_enfants($row['id_rubrique']);
+  }
+  
+  //articles
+  $articles = array();
+  
+  $result = spip_query("SELECT id_article, titre, id_rubrique FROM spip_articles WHERE statut='publie'");
+  while ($row = spip_fetch_array($result)) {
+      $articles[$row['id_article']] = array("titre" => $row['titre'], "id_rubrique" => $row['id_rubrique']);
+  }
+  
+  return array($arbo, $articles);
+}
+
+function rubriques_enfants($id_parent){
+  $return = array();
+  $result = spip_query("SELECT id_rubrique, titre FROM spip_rubriques WHERE id_parent=".$id_parent);
+  while ($rub = spip_fetch_array($result)){
+    $return[$rub['id_rubrique']]["titre"] = ($rub['titre']);
+    $return[$rub['id_rubrique']]["enfants"] = rubriques_enfants($rub['id_rubrique']);
+  }
+  return $return;
+}
+
+function afficher_enfants($arbo, $articles, $args, $afficher_ajouter_rubrique=true, $afficher_ajouter_article=true) {
+  $html = "";
+  foreach($arbo as $id => $rub){
+    $html .= "<li class=\"rubrique\">";
+    if ($afficher_ajouter_rubrique) {
+      $html .= "<a href=\"".generer_url(array_merge($args, array("id_rubrique" => $id)))."\" class=\"ajouter\"><img src=\""._DIR_PLUGIN_ARTY."images/ajouter.gif\" alt=\"+\" /></a>";
+    }
+    $html .= '<img class="fleche" onclick="deplier_contenu(this);" src="'._DIR_PLUGIN_ARTY.'images/deplierhaut.gif" alt=">" />';
+    $html .= "<span class=\"titre_rubrique\">".raccourcir_titre($rub["titre"], 45)."</span>";
+    $html .= afficher_enfants($rub["enfants"], $articles, $args, $afficher_ajouter_rubrique, $afficher_ajouter_article);
+    if ($afficher_ajouter_article) {
+    $html .= selec_afficher_article($id, $articles, $args, $afficher_ajouter_rubrique, $afficher_ajouter_article);
+    }
+    $html .= "</li>";
+  }
+  if ($html != "") {
+    $html = "<ul style=\"display:none;\">".$html."</ul>";
+  }
+  return $html;
+}
+
+function selec_afficher_article($id_rubrique, $articles, $args, $afficher_ajouter_rubrique=true, $afficher_ajouter_article=true){
+  $html = "";
+  foreach($articles as $id => $article){
+    if ($article["id_rubrique"] == $id_rubrique) {
+     $html .= "<li class=\"article\">";
+     if ($afficher_ajouter_article) {
+      $html .= "<a href=\"".generer_url(array_merge($args, array("id_article" => $id)))."\" class=\"ajouter\"><img src=\""._DIR_PLUGIN_ARTY."images/ajouter.gif\" alt=\"+\" /></a>";
+     }
+     $html .= "<span class=\"titre_article\">".raccourcir_titre($article["titre"], 45)."</span>";
+     $html .= "</li>";
+    }
+  }
+  if ($html != "") {
+    $html = "<ul style=\"display:none;\">".$html."</ul>";
+  }
+  return $html; 
+}
+
+function generer_url($args)
+{
+  $segments = array();
+  $ancre = "";
+  $script = "";
+  foreach ($args as $param => $value) {
+    if ($param == "#") {
+      $ancre = "#".$value;
+    } elseif ($param == "exec") {
+      $script = $value;
+    } else {
+      $segments[] = $param."=".$value;
+    }
+  }
+  $args = implode("&", $segments).$ancre;
+  $url = generer_url_ecrire($script, $args);
+  return $url;
+}
+
+function raccourcir_titre($titre, $max){
+  if (strlen($titre) > $max) {
+    return substr($titre, 0, $max)."...";
+  } else {
+    return $titre;
+  }
+}
+
+function afficher_selecteur_mots($args)
+{
+  $groupes = charger_structure_mots();
+  echo "<ul class=\"selecteur\">";
+  foreach($groupes as $id => $groupe) { 
+    echo "<li class=\"groupe\">";
+    echo '<a href="'.generer_url(array_merge($args, array("id_groupe" => $id))).'" class="ajouter"><img src="'._DIR_PLUGIN_ARTY.'images/ajouter.gif" alt="+" /></a>';
+    echo '<img class="fleche" onclick="deplier_contenu(this);" src="'._DIR_PLUGIN_ARTY.'images/deplierhaut.gif" alt=">" />';
+    echo '<span class="titre_groupe">'.$groupe["titre"].'</span>';
+    echo afficher_mots($groupe['mots'], $args);
+    echo "</li>";
+  }
+  echo "</ul>";
+}
+
+function charger_structure_mots(){
+  //groupes de mots
+  $groupes = array();
+  $result = spip_query("SELECT id_groupe, titre FROM spip_groupes_mots");
+  while ($row = spip_fetch_array($result)) {
+    $result2 = spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe=".$row['id_groupe']);
+    $mots = array();
+    while ($row2 = spip_fetch_array($result2)) {
+      $mots[$row2['id_mot']] = $row2['titre'];
+    }
+    $groupes[$row['id_groupe']] = array(
+      'titre' => $row['titre'],
+      'mots' => $mots,
+    );
+    
+  }
+  
+  return $groupes;
+}
+
+function afficher_mots($mots, $args){
+  $html = "";
+  foreach($mots as $id => $mot){
+   $html .= "<li class=\"mot\">";
+   $html .= "<a href=\"".generer_url(array_merge($args, array("id_mot" => $id)))."\" class=\"ajouter\"><img src=\""._DIR_PLUGIN_ARTY."images/ajouter.gif\" alt=\"+\" /></a>";
+   $html .= "<span class=\"titre_mot\">".raccourcir_titre($mot, 45)."</span>";
+   $html .= "</li>";
+  }
+  if ($html != "") {
+    $html = "<ul style=\"display:none;\">".$html."</ul>";
+  }
+  return $html; 
+}
+
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_upload_bandeau.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_upload_bandeau.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/arty_upload_bandeau.php	(revision 80)
@@ -0,0 +1,92 @@
+<?php
+// importe la fonction creer_repertoire_documents, qui retourne le chemin vers un dossier donnÃ© dans le rÃ©pertoire img, et le crÃ©e si nÃ©cessaire
+include_spip('inc/getdocument');
+
+//gestion de l'upload d'un bandeau
+// les bandeaux sont sauvÃ©s sous la forme bandeau.ext, et bandeau-id_rubrique.ext pour les bandeaux associÃ©s Ã  une rubrique particuliÃšre 
+function traiter_upload_bandeau($id_rubrique=0){
+  if (isset($_FILES["bandeau"])) {
+    if ($_FILES["bandeau"]["error"] == 0) {
+      $ext = strtolower(end(explode(".", $_FILES["bandeau"]["name"])));
+      $ext_ok = Array("jpg", "gif", "png");
+      if (!in_array($ext, $ext_ok)) {
+        return "arty:erreur_extension";
+      }
+
+      $chem = creer_repertoire_documents("bandeau");
+      $chem = _DIR_DOC."bandeau/";
+      
+      if (!$id_rubrique) {
+        $nom_bandeau = "bandeau";
+      } else {
+        $nom_bandeau = "bandeau-$id_rubrique";
+      }
+      
+      $dest = $chem.$nom_bandeau.".".$ext;
+      
+      $ok = false;
+      if ($chem) {
+        $ok = @move_uploaded_file($_FILES['bandeau']['tmp_name'], $dest);
+      }
+      
+      if ($ok){
+        //nettoyage du dossier bandeau (les bandeaux portant le mÃªme nom mais une extension diffÃ©rente du bandeau uploadÃ© sont supprimÃ©s)
+        $handle = @opendir($chem); 
+        while($fichier = @readdir($handle)) {
+          if (ereg("^$nom_bandeau\.(jpg|png|gif)$", $fichier) && $fichier != $nom_bandeau.".".$ext){
+            @unlink($chem.$fichier);
+          }
+        }
+        return "arty:upload_reussi";
+      } else {
+        return "arty:upload_rate";
+      }
+    } else if ($_FILES["bandeau"]["error"] == 1 || $_FILES["bandeau"]["error"] == 2) {
+      return "arty:erreur_trop_gros";
+    } else if ($_FILES["bandeau"]["error"] == 3) {
+      return "arty:erreur_transmission";
+    }
+  }
+}
+
+// supprime le bandeau d'une rubrique donnÃ©e
+function traiter_suppression_bandeau($id_rubrique=0){
+  if (isset($_GET['action']) && isset($_GET['id_check'])){
+    if ($_GET['action'] == "supprimer_bandeau" && $_GET['id_check'] == $_SESSION["id_check"]) {
+      $chem = _DIR_DOC."bandeau/";
+      $handle = @opendir($chem);       
+      while($fichier = @readdir($handle)) {
+        if (!$id_rubrique) {
+          if (ereg("^bandeau\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        } else {
+          if (ereg("^bandeau-$id_rubrique\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        }
+      }
+    }
+  }
+}
+
+// affiche le bandeau principal actuel ainsi qu'un lien pour le supprimer. 
+function bandeau_actuel(){
+  $chem = creer_repertoire_documents("bandeau");
+  $chem = _DIR_DOC."bandeau/";
+  $handle = @opendir($chem);
+  
+  while($fichier = @readdir($handle)) {
+    if (ereg("^bandeau\.(jpg|png|gif)$", $fichier)) {
+      $bandeau = $fichier;
+    }
+  }
+  if (!isset($bandeau)){
+    return "<p>"._T("arty:aucun_bandeau")."</p>";
+  } else {
+    $result = _T("arty:bandeau_actuel").":<br /><img width=\"400\" src=\""._DIR_DOC."bandeau/$bandeau?".uniqid(rand())."\">"; // le nombre alÃ©atoire permet d'Ã©viter que le navigateur affiche la version en cache de l'image.
+    $result .= "<p>[<a href=\"?exec=theme&action=supprimer_bandeau&id_check=".$_SESSION['id_check']."\">"._T('arty:supprimer_bandeau')."</a>]</p>";
+    return $result;
+  }
+}
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/cherche-theme.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/cherche-theme.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/cherche-theme.php	(revision 80)
@@ -0,0 +1,96 @@
+<?php
+
+function theme_actuel() {
+if (isset($GLOBALS['id_rubrique'])) {
+    // si c'est une page rubrique, trouver le thÃšme de la rubrique ou des rubriques parentes
+    $theme = trouver_theme($GLOBALS['id_rubrique']);
+    $id_rubrique = $GLOBALS['id_rubrique'];
+  } else if (isset($GLOBALS['id_article'])) {
+    // si c'est un article, trouver sa rubrique et ensuite son thÃšme, ou le thÃšme des rubriques parentes 
+    $result = spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article='".addslashes($GLOBALS['id_article'])."'");
+    $row = spip_fetch_array($result);
+    $id_rubrique = $row['id_rubrique'];
+    $theme = trouver_theme_article($GLOBALS['id_article']);
+    if (!$theme) {
+    $theme = trouver_theme($row['id_rubrique']);
+    }
+  } elseif (isset($GLOBALS['id_mot'])) {
+  	// si c'est un mot, trouver le mot sinon pour son groupe 
+  	$theme = trouver_theme_mot($GLOBALS['id_mot']);
+    if (!$theme) {
+    $result = spip_query("SELECT id_groupe FROM spip_mots WHERE id_mot='".addslashes($GLOBALS['id_mot'])."'");
+    $row = spip_fetch_array($result);
+    $theme = trouver_theme_groupe($row['id_groupe']);
+    }    
+    
+  } elseif (isset($GLOBALS['id_groupe'])) {
+    // si c'est un groupe, trouver son thÃšme 
+    $theme = trouver_theme_groupe($GLOBALS['id_groupe']);
+  } else {
+    // dans les autres cas, charger le thÃšme par defaut
+    $result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=0 AND type ='rubrique'");
+    $row = spip_fetch_array($result);
+    $theme = $row['theme'];
+    $id_rubrique = 0;
+  }
+  $theme = addslashes($theme);
+  
+  return $theme;
+	
+}
+
+function trouver_theme_groupe($id_groupe) {
+		$result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=$id_groupe AND type='groupe'");
+    if (spip_num_rows($result) == 1) {
+      $row = spip_fetch_array($result);
+      return $row['theme'];
+    } else {
+    	$result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=0 AND type='rubrique'");
+  		$row = spip_fetch_array($result);
+  		return $row['theme'];
+    }
+}
+
+function trouver_theme_article($id_article) {
+		$result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=$id_article AND type='article'");
+    if (spip_num_rows($result) == 1) {
+      $row = spip_fetch_array($result);
+      return $row['theme'];
+    } else { 
+    return ""; 
+    }
+}
+
+function trouver_theme_mot($id_mot) {
+		$result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=$id_mot AND type='mot'");
+    if (spip_num_rows($result) == 1) {
+      $row = spip_fetch_array($result);
+      return $row['theme'];
+    } else { 
+    return ""; 
+    }
+}
+
+function trouver_theme($id_rubrique)
+	{
+  $id_parent = $id_rubrique;
+  while($id_parent != 0) {
+    // un thÃšme est-il prÃ©sent pour cette rubrique?
+    $result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=$id_rubrique AND type='rubrique'");
+    if (spip_num_rows($result) == 1) {
+      $row = spip_fetch_array($result);
+      return $row['theme'];
+    }
+    // sinon, continuer et vÃ©rifier pour le parent
+    $result = spip_query("SELECT id_parent FROM spip_rubriques WHERE id_rubrique=$id_rubrique");
+    $row = spip_fetch_array($result);
+    $id_parent = $row['id_parent'];
+    $id_rubrique = $id_parent;
+  }
+  // aucun thÃšme n'a Ã©tÃ© trouvÃ©, on prend le thÃšme par dÃ©faut
+  $result = spip_query("SELECT theme FROM spip_arty_themeassoc WHERE id=0 AND type='rubrique'");
+  $row = spip_fetch_array($result);
+  return $row['theme'];
+}
+
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload-image.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload-image.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload-image.php	(revision 80)
@@ -0,0 +1,71 @@
+<?php
+//gestion de l'upload d'un logo pour les groupes de mot
+// les logos sont sauvÃ©s sous la forme bandeau.ext, et bandeau-id_rubrique.ext pour les bandeaux associÃ©s Ã  une rubrique particuliÃšre 
+function traiter_upload_image($nom,$rep,$id_groupe=0){
+  if (isset($_FILES[$nom])) {
+    if ($_FILES[$nom]["error"] == 0) {
+      $ext = strtolower(end(explode(".", $_FILES[$nom]["name"])));
+      
+      $ext_ok = Array("jpg", "gif", "png");
+      if (!in_array($ext, $ext_ok)) {
+        return "arty:erreur_extension";
+      }
+
+      $chem = creer_repertoire_documents($rep);
+      $chem = _DIR_DOC.$rep."/";
+      
+      if (!$id_groupe) {
+        $nom_logo = $nom;
+      } else {
+        $nom_logo = "$nom-$id_groupe";
+      }
+      
+      $dest = $chem.$nom_logo.".".$ext;
+      $ok = false;
+      if ($chem) {
+        $ok = @move_uploaded_file($_FILES[$nom]['tmp_name'], $dest);
+      }
+      
+      if ($ok){
+        //nettoyage du dossier logo (les logo portant le mÃªme nom mais une extension diffÃ©rente du bandeau uploadÃ© sont supprimÃ©s)
+        $handle = @opendir($chem); 
+        while($fichier = @readdir($handle)) {
+          if (ereg("^$nom_logo\.(jpg|png|gif)$", $fichier) && $fichier != $nom_logo.".".$ext){
+            @unlink($chem.$fichier);
+          }
+        }
+        return "arty:upload_reussi";
+      } else {
+        return "arty:upload_rate";
+      }
+    } else if ($_FILES[$nom]["error"] == 1 || $_FILES[$nom]["error"] == 2) {
+      return "arty:erreur_trop_gros";
+    } else if ($_FILES[$nom]["error"] == 3) {
+      return "arty:erreur_transmission";
+    }
+  }
+}
+
+// supprime le bandeau d'une rubrique donnÃ©e
+function traiter_suppression_logo($id_groupe=0){
+  if (isset($_GET['action']) && isset($_GET['id_check'])){
+    if ($_GET['action'] == "supprimer_logo" && $_GET['id_check'] == $_SESSION["id_check"]) {
+      //$chem = creer_repertoire_documents("logo-groupe");
+       $chem = _DIR_DOC."logo-groupe/";
+      $handle = @opendir($chem);       
+      while($fichier = @readdir($handle)) {
+        if (!$id_groupe) {
+          if (ereg("^logo\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        } else {
+          if (ereg("^logo-$id_groupe\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        }
+      }
+    }
+  }
+}
+
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload_logo.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload_logo.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/upload_logo.php	(revision 80)
@@ -0,0 +1,71 @@
+<?php
+//gestion de l'upload d'un logo pour les groupes de mot
+// les logos sont sauvÃ©s sous la forme bandeau.ext, et bandeau-id_rubrique.ext pour les bandeaux associÃ©s Ã  une rubrique particuliÃšre 
+function traiter_upload_logo($id_groupe=0){
+  if (isset($_FILES["logo"])) {
+    if ($_FILES["logo"]["error"] == 0) {
+      $ext = strtolower(end(explode(".", $_FILES["logo"]["name"])));
+      $ext_ok = Array("jpg", "gif", "png");
+      if (!in_array($ext, $ext_ok)) {
+        return "logo:erreur_extension";
+      }
+
+      $chem = creer_repertoire_documents("logo-groupe");
+      $chem = _DIR_DOC."logo-groupe/";
+      
+      if (!$id_groupe) {
+        $nom_logo = "logo";
+      } else {
+        $nom_logo = "logo-$id_groupe";
+      }
+      
+      $dest = $chem.$nom_logo.".".$ext;
+      
+      $ok = false;
+      if ($chem) {
+        $ok = @move_uploaded_file($_FILES['logo']['tmp_name'], $dest);
+      }
+      
+      if ($ok){
+        //nettoyage du dossier logo (les logo portant le mÃªme nom mais une extension diffÃ©rente du bandeau uploadÃ© sont supprimÃ©s)
+        $handle = @opendir($chem); 
+        while($fichier = @readdir($handle)) {
+          if (ereg("^$nom_logo\.(jpg|png|gif)$", $fichier) && $fichier != $nom_logo.".".$ext){
+            @unlink($chem.$fichier);
+          }
+        }
+        return "arty:upload_reussi";
+      } else {
+        return "arty:upload_rate";
+      }
+    } else if ($_FILES["logo"]["error"] == 1 || $_FILES["logo"]["error"] == 2) {
+      return "arty:erreur_trop_gros";
+    } else if ($_FILES["logo"]["error"] == 3) {
+      return "arty:erreur_transmission";
+    }
+  }
+}
+
+// supprime le bandeau d'une rubrique donnÃ©e
+function traiter_suppression_logo($id_groupe=0){
+  if (isset($_GET['action']) && isset($_GET['id_check'])){
+    if ($_GET['action'] == "supprimer_logo" && $_GET['id_check'] == $_SESSION["id_check"]) {
+      //$chem = creer_repertoire_documents("logo-groupe");
+      $chem = _DIR_DOC."logo-groupe/";
+      $handle = @opendir($chem);       
+      while($fichier = @readdir($handle)) {
+        if (!$id_groupe) {
+          if (ereg("^logo\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        } else {
+          if (ereg("^logo-$id_groupe\.(jpg|png|gif)$", $fichier)){
+            @unlink($chem.$fichier);
+          }
+        }
+      }
+    }
+  }
+}
+
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/user_session.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/user_session.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/user_session.php	(revision 80)
@@ -0,0 +1,7 @@
+<?php
+// crée une session et génère un id unique qui sera utilisé pour vérifier les actions transmises par url (id_check)
+session_start(); 
+if (!isset($_SESSION['id_check'])){
+  $_SESSION['id_check'] = uniqid(rand());
+}
+?>
Index: trunk/spip/esqueleto-redcta/plugins/magusine/inc/xml-parser.php
===================================================================
--- trunk/spip/esqueleto-redcta/plugins/magusine/inc/xml-parser.php	(revision 80)
+++ trunk/spip/esqueleto-redcta/plugins/magusine/inc/xml-parser.php	(revision 80)
@@ -0,0 +1,60 @@
+<?php
+// ne pas oublier de crediter
+
+class xmlParser{
+   var $xml_obj = null;
+   var $output = array();
+   var $attrs;
+
+   function xmlParser(){
+       $this->xml_obj = xml_parser_create();
+       xml_set_object($this->xml_obj,$this);
+       xml_set_character_data_handler($this->xml_obj, 'dataHandler');
+       xml_set_element_handler($this->xml_obj, "startHandler", "endHandler");
+   }
+
+   function parse($path){
+       if (!($fp = fopen($path, "r"))) {
+           die("Cannot open XML data file: $path");
+           return false;
+       }
+
+       while ($data = fread($fp, 4096)) {
+           if (!xml_parse($this->xml_obj, $data, feof($fp))) {
+               die(sprintf("XML error: %s at line %d",
+               xml_error_string(xml_get_error_code($this->xml_obj)),
+               xml_get_current_line_number($this->xml_obj)));
+               xml_parser_free($this->xml_obj);
+           }
+       }
+
+       return true;
+   }
+
+   function startHandler($parser, $name, $attribs){
+       $_content = array();
+       $_content['name'] = $name;
+       if(!empty($attribs))
+           $_content['attrs'] = $attribs;
+       array_push($this->output, $_content);
+}
+
+   function dataHandler($parser, $data){
+       if(!empty($data) && $data!="\n") {
+           $_output_idx = count($this->output) - 1;
+           $this->output[$_output_idx]['content'] .= $data;
+       }
+   }
+
+   function endHandler($parser, $name){
+       if(count($this->output) > 1) {
+           $_data = array_pop($this->output);
+           $_output_idx = count($this->output) - 1;
+           $add = array();
+           if(!$this->output[$_output_idx]['child'])
+               $this->output[$_output_idx]['child'] = array();
+           array_push($this->output[$_output_idx]['child'], $_data);
+       } 
+   }
+}
+?>
