/************************************************************************************************************
	propritete GLOBALS : URL generale
************************************************************************************************************/
// _DATAMENU Ref sur *menu.json
// référence sur le dossier principal
var _URL = "madeo/fichiers/";
// les préferences
var _PREF = null;
// Ref sur l'object FCKeditor
var _FCKeditor = null;
// Ref sur les dataMenus
var _JSONmenu = null;
// index des nouvelles lignes du formulaire de menu
var _INDEX = 10;
// ligne selectionnée dans le formulaire 'menu'
var _SELECTEDLine = null;


/************************************************************************************************************
	Function de demmarage : Event 'load'
************************************************************************************************************/
Event.observe(window, 'load', function() {
									   
	// loading des préférences								   
	new Ajax.Request( _URL + "dataPref.json",{
					 method:'get',
					 asynchronous: false,
					 requestHeaders: {Accept: 'application/json'}, 
					 onSuccess: function(transport){
					 // référence  à l'object "json"
						_PREF = transport.responseText.evalJSON();
					},
					onFailure: function(){ alert("Erreur de chargement des Préf. !") } 
	});
					   
	main();
	
}); 


/************************************************************************************************************
	function 'main()' : initialisation du programe
************************************************************************************************************/
function main() {
	
// initialise les préférences
	initPref();
	
// crée les onglets depuis le fichier 'dataMenu.json'
	createOnglet();

// crée le 'copyRight'
	if($("autor")){
		$("autor").update("<span>cr&eacute;ation: <a href=\"http://www.madeo.info\">madeo.info</a></span>");
	}
		
} //end main()


/************************************************************************************************************
	function 'initPref()' : initialise les préférences
************************************************************************************************************/
function initPref(){
	
// couleur de fond de la page
	$("body").setStyle({ backgroundColor: _PREF[1].valeur });
// image de l'entete
	$("entete").setStyle({ backgroundImage: "url(userfiles/image/" + _PREF[3].valeur + ")" });
	
}


/************************************************************************************************************
	function 'createOnglet()' : crée les onglets depuis le fichier 'dataMenu.json'
************************************************************************************************************/
function createOnglet(){
// chargement du texte de l'entete
	ajax_Requete("entete", 
					 _URL + _PREF[0].valeur + ".xhtml",
					 {isAsynchro: true} 
					 );
	
// chargement des menus (onglets)
	new Ajax.Request( _URL + _DATAMENU + ".json",{
		method:'get',
		requestHeaders: {Accept: 'application/json'}, 
		onSuccess: function(transport){
	// référence  à l'object "json"
		_JSONmenu = transport.responseText.evalJSON();
		var menuSize = _JSONmenu.size();
	// création de la liste du menu
		var ul = new Element("ul");
		$("menu").update(ul); 
		
	// crée les onglets depuis "dataMenu.json"
		_JSONmenu.each(function(s, index) { 
			var idOnglet = "onglet" + (index + 1);
		// créations des éléments	
			var li = new Element("li");
			ul.insert(li);
			var a = new Element("a", { href: "#" });
			li.update(a);
		// défini la couleur de fond des onglet depuis les '_PREF'
			a.setStyle({ backgroundColor: _PREF[2].valeur });
		// défini les noms des onglets
			a.update(_JSONmenu[index].nom);
			
		// url des requètes ajax
			var url = _URL + _JSONmenu[index].url + ".xhtml";
							
		// gestion des Events "Clic"
			$(a).observe('click', function(event){
			// si modifie les padding
				$("winMain").setStyle({ padding: '15px' }); 
			// charge les pages
				ajax_Requete("winMain", 
					url,
					{isAsynchro: true} 
				);
  			// gestion des couleurs des onglets --->
				var tag = event.element();
  				activeLink(tag);
								
			// si l'onglet n'est pas "Editor"
				if(index != menuSize -1){
				// supprime les iframes si besoin
					var alliframe = $("body").select('iframe');
					if(alliframe.size != 0){
						_FCKeditor = null;
						alliframe.each(function(i) { 
							i.remove();
						});
					}
				} //end if
								
  			}); //end observe()

		}); //end each()
		
		// chargement de la page d'accueil -->
			accueil();
		
		},
		onFailure: function(){ alert("Erreur de chargement du menu !") } 
		
	});// end Ajax.Request
}


/************************************************************************************************************
	function 'activeLink()' : gestion de la couleur des onglets
************************************************************************************************************/
function activeLink(tag){
	var all_a = $("menu").select("a"); 
	all_a.each(function(a){
			if(a == tag){
				a.setStyle({backgroundColor: "White"});
				a.setStyle({borderBottomColor: "White"}); 
			}
			else{
				a.setStyle({ backgroundColor: _PREF[2].valeur });
				a.setStyle({borderBottomColor: "#404040"}); 
			}
	});
	
} //end activeLink()


/************************************************************************************************************
	function 'accueil()' : chargement de la page d'accueil
************************************************************************************************************/

function accueil(){
	
	if( _PREF[6].valeur != "" ){
		ajax_Requete("winMain", 
				_URL + _PREF[6].valeur + ".xhtml",
				{isAsynchro: true} 
			);
	}
	
} //end accueil()


/************************************************************************************************************
	function 'editForm()' : chargement de l'editeur ou des formulaires de modification
************************************************************************************************************/
function editForm(aPass){
	
// si le formulaire n'est pas vide
	if(aPass == ""){
		alert("Indiquez un mot de passe!");
	}
	else if(aPass == _PREF[4].valeur ){
// crée le formulaire de gestion des onglets/identifiants
		creatMenuForm();
	} 
	else if(aPass == _PREF[5].valeur ){
// crée le formulaire de gestion des onglets/identifiants
		creatPrefForm();
	} 
	else{
//sinon affiche une page dans FCKeditor
		createFCKeditor(aPass); 
	}
	
} // end editForm()


/************************************************************************************************************
	function 'ajax_Requete()' :  gestion des requetes Ajax
************************************************************************************************************/

function ajax_Requete(in_Tag, aURL, options ){
		var url = aURL;
		var inTag = $(in_Tag);
		var options = options || {};
		options.isAsynchro = options.isAsynchro;
		options.theMethod = options.theMethod || 'get';
		options.params = options.params || {};
	
	// nouvel object Request
		new Ajax.Request(
			url, 
			{   
			asynchronous: options.isAsynchro,
			method: options.theMethod,
			parameters: options.params,
			onComplete: function(transport) {
				var responseTxt = transport.responseText;
				//inTag.innerHTML = responseTxt;
				inTag.update(responseTxt);
			// si le formulaire principal est Dispo, on récupère sa valeur ! -->
				if(inTag.down().identify() == "f_passworld" ){
				// focus sur le input
					$("pass").activate();
				// event 'click'  sur le bouton
					$('submit').observe('click', function(event){
						var aPass =	$F("pass");
						editForm(aPass);
					});
				}
				
				// si le formulaire Private est Dispo, on récupère sa valeur
				if(inTag.down().identify() == "f_private" ){
				// focus sur le input 
					$("privatePass").activate();
				// event 'click'  sur le bouton
					$('privateSubmit').observe('click', function(event){
						// récupère la valeur du mot de passe
						var aPrivatePass =	$F("privatePass");
						var private_url = _URL + aPrivatePass + ".xhtml";
						// requete sur les fichiers cachés
						new Ajax.Request( private_url,
							{
							method:'get',
							asynchronous: true,
							onSuccess: function(transport){
								var reponse = transport.responseText;
								inTag.update(reponse);
							},
							onFailure: function(){ alert("Mot de passe incorrect !") } 
						}); //end Ajax.Request
					
					
					});
				}
			},
			onFailure: function(){ alert("Impossible d'ouvrir le fichier !")}
			
		})
		
} //end ajax_Requete()


/************************************************************************************************************
	function 'creatMenuForm()' : formulaire de gestion des onglets /identifiants
************************************************************************************************************/
function creatMenuForm(){
	
// crée le formulaire
	var bitHtml_1 = "<form id=\"f_menu\" action=\"madeo/fichiers/file_save.php\" method=\"post\" target=\"_blank\" >";
	bitHtml_1 += 		"<div id=\"edit\"></div>";
	bitHtml_1 += 		 "<input id=\"data_menu\" name=\"data_menu\" type=\"hidden\" value=\"\" />";
	bitHtml_1 += 		 "<input id=\"dataMenu_value\" name=\"dataMenu_value\" type=\"hidden\" value=\"\" />";
	bitHtml_1 += 		 "<input id=\"dataMenuLight_value\" name=\"dataMenuLight_value\" type=\"hidden\" value=\"\" />";
	bitHtml_1 += 	"</form>";
	$("winMain").update(bitHtml_1);
				
// size de l'object "json"
	var menuSize = _JSONmenu.size();
				
// BOUCLE : crée le formulaire depuis "dataMenu.json"
	_JSONmenu.each(function(s, index) {
								
	// crée les 'id'
		var idInput = "onglet" + (index );  
	// crée les conteners
		var contener = new Element("p", { id: "f_"+idInput });
		
	// insère dans les conteners
		contener.insert(createLabel( "nom" + index, "nom de l'onglet : " ));
		contener.insert(createInput(_JSONmenu[index].nom, "nom" + index));
		contener.insert(createLabel( "url" + index, "identifiant : " ));
		contener.insert(createInput(_JSONmenu[index].url, "url" + index));
		contener.insert(creatBoutDelLine());
		$("edit").insert(contener);
			
	// deactive l'onglet 'FCKeditor'
		if(index == menuSize -1){
			var all_input = $("f_onglet" + index).select("input");
			all_input.each(function(input){
				input.disable();
			});
			//var all_label = $("f_onglet" + index).select("label");
			//all_label.each(function(label){
			//})
		}
							
	}); //end each()
		
// crée une 'ligne'
	var ligne = new Element("hr");
	$("f_menu").insert(ligne);
	
// crée un 'bouton'
	var creatLineBout = new Element("input", { 
									type: "button",
									name: "creatBout", 
									value: " Ajouter un onglet "});
		
// crée un bouton 'submit'
	var p = new Element("p");
	var menuSubmit = new Element("input", { 
									type: "submit", 
									id: "submit", 
									name: "submit", 
									value: " Enregistrer "});
	p.insert(creatLineBout);
	p.insert(menuSubmit);
	p.addClassName("alignRight");
	$("f_menu").insert(p);
		
// défini le nom du fichier
	$("data_menu").value = _DATAMENU + ".json";

// Convertit en json le formulaire lors du 'submit'
	Event.observe('f_menu', 'submit', function(event){
												   
	// crée des tableaux/hash
		var tablo_json = [];
		var hash = new Hash;
			
	// récupere la valeur des textFields puis l'insere dans les tableaux
		var all_inputText = $("f_menu").getInputs('text');
			
	// boucle sur les 'input' si pair nouveau hash si impair hop dans le tablo 
		all_inputText.each(function(input, index){
				if(index== 0 || 0 == index % 2 ){
					hash = new Hash;
					hash.set('nom', $F(input));
				}
				else {
					hash.set('url', $F(input));
					tablo_json.push(hash);
				}
		}); // end each()
			
	// convertit la valeur dans une chaine json
		$("dataMenu_value").value = tablo_json.toJSON();
		
	// supprime l'onglet FCKeditor pour 'dataMenuLight'
		$("dataMenuLight_value").value = tablo_json.pop();
		$("dataMenuLight_value").value = tablo_json.toJSON();
		
	}); // end Event.observe('submit')

// event 'click': insere une ligne dans le formulaire
	creatLineBout.observe('click', function(event){
	// index global
		_INDEX ++;
	// l'element parent
		//var papyTag = event.element().up();
		
	// crée la ligne
		var contener = new Element("p", { id: "f_onglet" + _INDEX });
		contener.insert(createLabel( "name" + _INDEX, "nom de l'onglet : " ));
		contener.insert(createInput("page "+ _INDEX, "nom" + _INDEX));
		contener.insert(createLabel( "url" + _INDEX, "identifiant : " ));
		contener.insert(createInput("page_"+ _INDEX , "url" + _INDEX));
		contener.insert(creatBoutDelLine());
	// insère la ligne avant celle sélectionnée
		if( _SELECTEDLine != null){
			Element.insert(_SELECTEDLine, {'before': contener });
		}else{
			alert("Sélectionner d'abord un onglet !")
		}
	
	});	
	
}


/************************************************************************************************************
	function 'creatPrefForm()' : formulaire de gestion des préférences
************************************************************************************************************/
function creatPrefForm(){
	
// crée le formulaire
	var bitHtml = "<form id=\"f_pref\" action=\"madeo/fichiers/file_save.php\" method=\"post\" target=\"_blank\" >";
	bitHtml += 		"<div id=\"edit\"></div>";
	bitHtml += 		 "<input id=\"data_pref\" name=\"data_pref\" type=\"hidden\" value=\"\" />";
	bitHtml += 		 "<input id=\"dataPref_value\" name=\"dataPref_value\" type=\"hidden\" value=\"\" />";
	bitHtml += 	"</form>";
	$("winMain").update( bitHtml );
	
// size de l'object "json"
	var prefSize = _PREF.size();

// BOUCLE : crée le formulaire depuis "dataMenu.json"
	_PREF.each(function(s, index) {
								
	// crée les 'id'
		var idInput = "pref" + (index );  
	// crée les conteners
		var contener = new Element("p", { id: idInput });
		
	// insère dans les conteners .
		contener.insert(createLabel( "nom" + index, _PREF[index].nom ));
		contener.insert(createInput(_PREF[index].valeur , "nom" + index));
		$("edit").insert(contener);
							
	}); //end each()	
	
// crée une 'ligne'
	var ligne = new Element("hr");
	$("f_pref").insert(ligne);
		
// crée un bouton 'submit'
	var p = new Element("p");
	var menuSubmit = new Element("input", { 
									type: "submit", 
									id: "submit", 
									name: "submit", 
									value: " Enregistrer "});
		
	p.addClassName("alignRight");
	p.insert(menuSubmit);
	$("f_pref").insert(p);
	
// défini le nom du fichier
	$("data_pref").value = "dataPref.json";
	
// Convertit en json le formulaire lors du 'submit'
	Event.observe('f_pref', 'submit', function(event){
												   
	// crée des tableaux/hash
		var tablo_json = [];
		var hash = new Hash;
			
	// récupere la valeur des textFields puis l'insere dans les tableaux
		var all_inputText = $("f_pref").getInputs('text');
		var all_label = $("f_pref").select('label');

	// boucle sur les 'input'
		all_inputText.each(function(input, index){
				
				hash.set("nom", "");
				hash.set("valeur", $F(input));
				tablo_json.push(hash);
				hash = new Hash;
		}); // end each()
		
		// boucle sur les 'input'
		all_label.each(function(label, index){
			hash = tablo_json[index];
			hash.set( "nom", $(label).innerHTML );
			
		}); // end each()
			
	// convertit la valeur dans une chaine json
		$("dataPref_value").value = tablo_json.toJSON();
		
	}); // end Event.observe('submit')
	
}

/************************************************************************************************************
	function 'createFCKeditor()' : affiche FCKeditor
************************************************************************************************************/

function createFCKeditor(aPass){
// nom complet du fichier
	var nameFile = aPass + ".xhtml";
		
// requete ajax pour remplir l'editor
	new Ajax.Request( _URL +  nameFile,
		{
		method:'get',
		asynchronous: true,
		onSuccess: function(transport){
		// reponse
			var reponse = transport.responseText;
		// supprime les padding
			$("winMain").setStyle({ padding: '0px' }); 
		// chargement du formulaire
			var bitHtml_2 = "<form id=\"f_editor\" action=\"madeo/fichiers/file_save.php\" method=\"post\" target=\"_blank\" >";
			bitHtml_2 += 		"<div id=\"edit\"></div>";
			bitHtml_2 += 		"<input id=\"file_txt\" name=\"file_txt\" type=\"hidden\" value=\"\" />";
			bitHtml_2 += 	"</form>";
			$("winMain").update(bitHtml_2);
			$("file_txt").value = nameFile;
		// creation de l'Editor
			_FCKeditor = new FCKeditor('FCKeditor1', '100%', "576", 'Default', reponse );
		//_FCKeditor.Config["CustomConfigurationsPath"] = "erea/fichiers/myconfig.js" ;
			_FCKeditor.BasePath = "/fckeditor/";
			$("edit").innerHTML = _FCKeditor.CreateHtml();
		},
		onFailure: function(){ alert("Mot de passe incorrect !") } 
	}); //end Ajax.Request
}


/************************************************************************************************************
	function 'creatBoutDelLine()' : revoie un 'button' qui supprime la ligne du formulaire
************************************************************************************************************/

function creatBoutDelLine(){
// crée le 'button'
	var delBout = new Element("input", { 
								type: "button",
								name: "delBout", 
								value: " supprimer "});
		
// event 'click' supprime son parent
	delBout.observe('click', function(event){
		var papyTag = event.element().up();
		papyTag.remove();
	});
// return le 'button'
	return delBout;
}

/************************************************************************************************************
	function 'createLabel()' : revoie un 'label' qui active/déactive la ligne du formulaire
************************************************************************************************************/

function createLabel( _id, _valeur ){
// crée les 'label' et les 'input'
	var label = new Element("label", { 'for': _id } );
	label.update( _valeur );
	
// event 'click'
	label.observe('click', function(event){
									
		var tag = event.element();
		var parentTag = event.element().up();
		var superTag = parentTag.up();
		var all_p = superTag.select("p");
	// change la couleur de la ligne sélectionnée
		all_p.each(function(p){
				if(p == parentTag){
					parentTag.setStyle({backgroundColor: _PREF[2].valeur});
					_SELECTEDLine = parentTag;
				}
				else{
					p.setStyle({backgroundColor: "transparent"});
				}					
		});
	});
	 
// retourne le 'label'
	return label;

}

/************************************************************************************************************
	function 'createInput()' : revoie un 'input' qui active/déactive la ligne du formulaire
************************************************************************************************************/

function createInput(_value, _id){
// crée les 'input'
	var inputName = new Element("input", { 
									type: "text", 
									id: _id, 
									name: _id,
									value: _value
									});

// return le 'input'
	return inputName;
}

/*************************************************************************************************************/
