// Entire code by Julien VAUBOURG
// julien__AT__vaubourg__DOT__com

// Author  : http://julien.vaubourg.com
// SpinkBB : http://spinkbb.jsand.net
// Forums  : http://CtrlAltSuppr.com

Gestion = {

	// Paramétres de la sauvegarde auto
	minuterie: null,
	tpsMinuterie: 0,
	msgMinuterie: false,
	intMinuterie: [5, 10, 20, 30, 60],

	// Exporter le spinker
	exporter: function(conteneur) {
		var textarea = document.createElement('textarea');
		var label = document.createElement('label');

		var libelle = Langues.get('Ajoutez le Spinker suivant \340 la fin du fichier <FICHIER> de votre <SCRIPT>.') + '<br />';
		libelle += Langues.get('Vous pourrez le r\351importer dans SpinkBB lorsque vous souhaiterez apporter des modifications.');
		libelle = libelle.replace('<FICHIER>', '<strong>' + Parametres.fichier + '</strong>');
		libelle = libelle.replace('<SCRIPT>', Parametres.script);

		label.innerHTML = libelle;
		var spinker = ImportExport.readable(ImportExport.serializer(ImportExport.optimiser(EditStyle.GArrayStyles)));

		if(!Outils.empty(spinker)) {
			textarea.value = '/******** SPINKER ********/\n';
			textarea.value += '/* ' + Langues.get('G\351n\351r\351 sur') + ' http://spinkbb.jsand.net/' + Parametres.script.toLowerCase() + '\n';
			textarea.value += '/* ' + Langues.get('Pour modifier votre style, importez ce spinker dans SpinkBB') + '\n';
			textarea.value += '*/\n\n';
			textarea.value += spinker;
			textarea.value += '\n\n/******** END SPINKER ********/';
			
			textarea.onfocus = function() { this.select() };
		} else
			textarea.value = Langues.get('Vous n\'avez effectu\351 aucune modification sur le style courant !');
		
		label.appendChild(textarea);
		conteneur.appendChild(label);
		textarea.focus();
	},

	// Importer un spinker (supprime les modifications courantes)
	importer: function(conteneur) {
		var textarea = document.createElement('textarea');
		var bouton = document.createElement('input');
		var label = document.createElement('label');
		var libelle = document.createTextNode(Langues.get('Copiez-collez ici votre Spinker et cliquez sur Importer :'));

		bouton.value = Langues.get('Importer');
		bouton.type = 'button';
		bouton.onclick = function() {
			if(Gestion.supprimer()) {
				try {
					// Importation du style
					ImportExport.createGArrayStyles(ImportExport.unreadable(this.previousSibling.lastChild.value));
				} catch(e) {
					alert(Langues.get('Il y a eu un probl\350me lors de l\'importation.\nV\351rifiez l\'authenticit\351 de votre Spinker.'));
					return false;
				}

				alert(Langues.get('Importation réussie avec succ\350s !'));
				
				// Fermeture du panel
				Affichage.usePanel('importer');
			}
		};

		label.appendChild(libelle);
		label.appendChild(textarea);

		conteneur.appendChild(label);
		conteneur.appendChild(bouton);

		textarea.focus();
	},

	// Sauvegarde des modifications dans le cookie
	enregistrer: function() {
		ImportExport.httpr += 'alert(Langues.get(\'Les modifications ont \351t\351 sauvegard\351es.\'));';

		if(!ImportExport.saveInSession()) {
			ImportExport.httpr = '';
			return false;
		}
		
		return true;
	},

	// Suppression des modifications (cookie, GArrayStyles et les cssRules)
	supprimer: function() {
		if(confirm(Langues.get('Supprimer toutes les modifications ?'))) {

			// Suppression de la session
			if(!Outils.empty(ImportExport.idSession)) {
				ImportExport.supprimerCookie(Parametres.idScript + '_session');
				ImportExport.session('supprimer');
				ImportExport.idSession = '';
			}

			// Suppression de toutes les cssRules
			for(var selecteur in EditStyle.GArrayStyles)
				if(!Outils.isFunction(EditStyle.GArrayStyles[selecteur]))
					for(var nom in EditStyle.GArrayStyles[selecteur])
						if(!Outils.isFunction(EditStyle.GArrayStyles[selecteur][nom]) && nom != 'cssRule')
							EditStyle.delRule(selecteur, nom);

			EditStyle.GArrayStyles = new Array();
			Outils.change = false;

			return true;
		}

		return false;
	},

	// Changement de la langue de l'interface (création d'un cookie)
	langue: function(choix) {
		Parametres.langue = choix;
		Affichage.refreshPanel();
		Affichage.topPanel.onmouseout();
		ImportExport.creerCookie('langue', choix);
	},

	// A propos de SpinkBB
	about: function(conteneur) {
		var about = '<h2>SpinkBB (b\352ta)</h2>' + '\n';
		
		about += '<p>' + Langues.get('SpinkBB est un g\351n\351rateur de code CSS pour <SCRIPT> (et <a href=\'http://spinkbb.jsand.net\'>d\'autres</a>).').replace('<SCRIPT>', Parametres.script) + '</p>\n';
		about += '<ul>\n';
		about += '\t<li><strong>' + Langues.get('Pointez l\'\351l\351ment que vous souhaitez modifier puis cliquez dessus') + '</strong></li>\n';
		about += '\t<li><strong>' + Langues.get('Modifiez les propri\351t\351s de l\'\351l\351ment gr\342ce au menu qui appara\356t') + '</strong></li>\n';
		about += '\t<li><strong>' + Langues.get('Cliquez sur Exporter, dans la barre du haut') + '</strong></li>\n';
		about += '\t<li><strong>' + Langues.get('Copiez-collez le Spinker propos\351 (le code CSS additionnel) \340 la fin du fichier indiqu\351') + '</strong></li>\n';
		about += '</ul>\n';
		
		about += '<p>' + Langues.get('Vous pouvez :') + '</p>\n';
		about += '<ul>\n';
		about += '\t<li>' + Langues.get('Naviguer dans le site (click sur le lien &gt; Editer le lien &gt; Suivre le lien)') + '</li>\n';
		about += '\t<li>' + Langues.get('R\351importer votre Spinker pour retoucher votre style') + '</li>\n';
		about += '\t<li>' + Langues.get('R\351afficher cette aide en cliquant sur <strong>[Comment \347a marche ?]</strong> en haut \340 droite') + '</li>\n';
		
		about += '</ul>\n';

		about += '<p>\n';
		about += 'Ex: <a href="http://spinkbb.jsand.net/punbb/index.php?spkPw=34b1cee436c6cdddc58ca999b8a7d23a" target="_blank">' + Langues.get('Aper\347u d\'un style pour PunBB cr\351\351 avec SpinkBB (nouvelle page)') + '</a><br />\n';
		about += '</p>\n';

		about += '<input type="button" onclick="Affichage.usePanel(\'about\'); Affichage.topPanel.onmouseout()" value="' + Langues.get('D\351marrer maintenant !') + '" id="spkStartNow" /> &ndash; &nbsp; ';
//		about += '<input type="button" onclick="window.open(\'http://signatux.jsand.net\')" value="' + Langues.get('Essayer un livre d\'or') + '" title="Signatux (' + Langues.get('nouvelle page') + ')" /> <input type="button" onclick="window.open(\'http://www.php-astux.info/newslettux-' + Parametres.langue.toLowerCase() + '.php\')" value="' + Langues.get('Essayer une newsletter') + '" title="Newslettux (' + Langues.get('nouvelle page') + ')" /><br /><br />\n';

		about += Langues.get('Sauvegarde auto. toutes les :');
		about += ' <select onchange="Gestion.changeMinuterie.apply(this)">\n';
		about += '<option value="0"' + (Gestion.tpsMinuterie == 0 ? ' selected="selected"' : '') + '>' + Langues.get('Jamais') + '</option>\n';

		for(var t = 0; t < Gestion.intMinuterie.length; t++)
			about += '<option value="' + Gestion.intMinuterie[t] + '"' + (Gestion.intMinuterie[t] == Gestion.tpsMinuterie ? ' selected="selected"' : '') + '>' + Gestion.intMinuterie[t] + 'min</option>\n';

		about += '</select> ';
		about += ' (<label><input type="checkbox" onclick="Gestion.changeMinuterie.apply(this)"' + (Gestion.msgMinuterie ? ' checked="checked"' : '') + ' class="spkCheckbox" /> ' + Langues.get('Afficher un message') + '</label>)\n';
		
		about += '<p>' + Langues.get('Auteur :') + ' <a href="http://julien.vaubourg.com">Julien VAUBOURG</a><br />\n';
		about += 'Copyright (C) 2009 SpinkBB &nbsp; &mdash; &nbsp; ';
		about += '<input type="button" onclick="Affichage.splashscreen(true)" value="' + Langues.get('Afficher le splashscreen') + '" /></p>\n';
		
		conteneur.innerHTML = about;
	},

	/** Obtenir l'URL de prévisualisation publique du style */
	getIdPreview: function(idPreview /* fac */) {
		if(Outils.isset(idPreview))
			return window.location.href + (window.location.href.match('&') ? '&' : '?') + 'spkPw=' + idPreview;
			//return 'http://spinkbb.jsand.net/' + Parametres.idScript + '/?spkPw=' + idPreview;

		if(!ImportExport.issetCookie(Parametres.idScript + '_session'))
			alert(Langues.get('Vous devez enregistrer des modifications avant de pouvoir proposer un aper\347u.'));
		else {
			ImportExport.httpr += 'if(!Outils.empty(retour)) prompt(Langues.get(\'Adresse de pr\351visualisation publique de votre Spinker\') + \' :\', Gestion.getIdPreview(retour));';
			ImportExport.session('getIdPreview');
		}
	},

	/** Paramétrage de la sauvegarde auto dans Aide */
	changeMinuterie: function() {
		if(/select/i.test(this.nodeName))
			Gestion.tpsMinuterie = this.value;
		else
			Gestion.msgMinuterie = this.checked;

		ImportExport.creerCookie('minuterie', Gestion.tpsMinuterie + ',' + Gestion.msgMinuterie);
		Gestion.saveAuto();
	},

	/** Sauvegarde auto dans la session */
	saveAuto: function() {
		if(Gestion.minuterie != null)
			clearTimeout(Gestion.minuterie);

		// not "Jamais"
		if(Gestion.tpsMinuterie != 0) {
			if(Outils.change)
				if(ImportExport.saveInSession() && Gestion.msgMinuterie)
					alert(Langues.get('SAUVEGARDE AUTOMATIQUE\n(toutes les <X> minutes)\n\nVous pouvez modifier ces param\350tres dans Aide.').replace('<X>', Gestion.tpsMinuterie));

			Gestion.minuterie = setTimeout('Gestion.saveAuto()', Gestion.tpsMinuterie*60*1000);
		} else
			Gestion.minuterie = null;
	},
	
	/** Quitter */
	quit: function() {
		if(Outils.change)
			return Langues.get('Vos modifications n\'ont pas \351t\351 enregistr\351es sur la page.\nPour sauvegarder, cliquez sur Annuler puis Enregistrer en haut \340 droite.');
	}
};
