// Copyright (C) 2008 SpinkBB
// Entire code by Julien VAUBOURG
// julien__AT__vaubourg__DOT__com

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


/** Singleton de démarrage */

function SpinkBB() {
	if(!Outils.isset(SpinkBB.initialized)) {
		SpinkBB.initialized = true;
		var spkLang = window.location.search.match(/spk([A-Z]{2})/i);

		// Choix de la langue dans l'URL
		if(!Outils.empty(spkLang)) {
			spkLang = spkLang[1].toLowerCase();

			if(Outils.isset(Langues[spkLang]))
				ImportExport.creerCookie('langue', spkLang);
		}

		// Affichage du splashscreen et du about à la première visite
		if(!ImportExport.issetCookie('splashscreen'))
			Affichage.splashscreen();

		// Rend tous les éléments (sauf les #* de mozilla) cliquables
		this.applyOnMouseDown = function(root) {
			do {
				if(!root.nodeName.match('^#') && root.id != 'spkSplash') {

					// Chaque élément tente de se déterminer en tant que flotteur lorsqu'une vague de onmousedowns est déclenchée
					root.onmousedown = Outils.whoIsFlotteur;
					root.onmouseout = function() {
						if(!Outils.isset(Outils.flotteur) && typeof Outils.isset(Outils.potentialFlotteur) && Outils.potentialFlotteur != false)
							EditStyle.setVisible(false);
					};

					// Désactivation des liens et définition du onmouseover
					if(root.nodeName == 'A') {
						root.link = root.href;
						root.href = 'javascript:;';
						root.onclick = function() { return false };
						root.onmouseover = function() {
							this.stylesHover = new Array();

							Outils.saveHover.call(this, EditStyle.propBlock);
							Outils.whoIsPotentialFlotteur.apply(this);
						};
					} else
						root.onmouseover = Outils.whoIsPotentialFlotteur;

					// Récurcivité
					if(root.childNodes.length != 0)
						this.applyOnMouseDown(root.firstChild);
				}
			} while(root = root.nextSibling);
		};

		// Récupération de la langue
		if(ImportExport.issetCookie('langue'))
			Parametres.langue = ImportExport.lireCookie('langue');

		// Déclencheur de la récurcivité de applyOnMouseDown
		var root = document.body;
		this.applyOnMouseDown(root);

		// Application du spinker en cours
		ImportExport.importFromSession();
		Outils.documentTitle = document.title;

		// Sauvegardes auto
		if(ImportExport.issetCookie('minuterie')) {
			var minuterie = ImportExport.lireCookie('minuterie');
			Gestion.tpsMinuterie = minuterie.split(',')[0];
			Gestion.msgMinuterie = minuterie.split(',')[1];
		} else {
			Gestion.tpsMinuterie = 20;
			Gestion.msgMinuterie = true;
		}
		Gestion.saveAuto();
		
		// Affichage du panel
		Affichage.panel();

		// Affichage du about en guise d'aide, à la première visite
		if(!ImportExport.issetCookie('aide')) {
			Affichage.usePanel('about');
			ImportExport.creerCookie('aide', 'no');
		}

		// Gestion de la fermeture de la fenêtre
		window.onbeforeunload = Gestion.quit;
	} else
		throw new Exception(Langues.get('Les \351v\351nements ont d\351j\340 été affect\351s.'));
}

/** Start */
function spkMain() {
	try {
		if(/spkPw=[A-Z0-9]{32}/i.test(window.location.search))
			new Preview();
		else
			new SpinkBB();
	} catch(e) {
		alert(e.message);
	}
}

