/*
 * 1.10 - 26/01/2008 : Gestion nouveau domaine '.com'
 *                     Mode 'confirm'
 * 1.11 - 06/08/2008 : Redirection auto vers www.frenchtouchforum.com
 */
var LOGO_URL="http://frenchtouchforum.free.fr/FrenchTouchForumTheme2/Logo.swf";
var LOGO_WIDTH=960;
var LOGO_HEIGHT=387;

var CSS_URL="http://frenchtouchforum.free.fr/Scripts/ajust2.css"; 
var FORUM_BASE_URL = "http://www.frenchtouchforum.com";
var FORUM_URL = FORUM_BASE_URL + "/index.htm";
var FAVICON_URL = "http://frenchtouchforum.free.fr/Scripts/favicon.gif";
var FAVICON_IE_URL = "http://frenchtouchforum.free.fr/Scripts/favicon.ico";

document.write('<meta http-equiv=Page-Exit content="blendTrans(Duration=0.5)">') ; // Transition: fondu
document.write('<link rel="stylesheet" type="text/css" href="'+CSS_URL+'">'); // Import de la CSS supplémentaire

document.write('<link rel="shortcut icon" type="image/x-icon" href="'+FAVICON_IE_URL+'" />');
document.write('<link rel="icon" type="image/gif" href="'+FAVICON_URL+'" />');


document.write('<a href="'+FORUM_URL+'">');
document.write('<embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+LOGO_URL+'" width="'+LOGO_WIDTH+'" height="'+LOGO_HEIGHT+'" type="application/x-shockwave-flash" wmode="transparent" quality="high"></embed>');
document.write('</a>');


	// Indique si on est sur le web (1) ou en test local (0)
var MODE_WEB = 1; // todo
var MODE_CONFIRM = 1;

var MIN_LENGTH = 20; // Longueur minimale

	// Message affiché si le post est 'invalide'
var STD_MESSAGE = "Plus de précisions, Merci !!\n\nMore precisions, Please !!";

var INTROS = new Array(
						new Array("Ton message est assez court", "Your message is quite short"),
						new Array("Ton message n'est pas assez long", "Your message is not long enough")
					);

	// Liste des messages de confirmation (fr, en, test inversé)
var MESSAGES = new Array(
						new Array("veux-tu le poster quand même ?", "do you want to post it anyway ?", 0),
						new Array("veux-tu le compléter ?", "do you want to complete it ?", 1),
						new Array("es-tu sûr(e) de son utilité ?", "are you sure of its usefulness ?", 0),
						new Array("as-tu un doute sur son utilité ?", "do you have a doubt about his usefulness ?", 1)
					);
						/*new Array("veux-tu ne pas le compléter ?", "do you want not to complete it ?", 0),
						new Array("es-tu incertain(e) de son utilité ?", "are you unsure of its usefulness ?", 1),
						new Array("n'as-tu aucun doute sur son utilité ?", "do you have no doubt about his usefulness ?", 0)
					);*/



	// Liste des patterns d'URL pour la page de réponse
var POST_URLS = new Array("frenchtouch.forumactif.com/post.forum", "frenchtouch.forumactif.com/posting.forum", "frenchtouchforum.com/post.forum", "frenchtouchforum.com/posting.forum");
if(!MODE_WEB) { POST_URLS = new Array("/post.forum", "/posting.forum"); } // test local

	// Délai en ms pour tester si le formulaire a été chargé
var TIMER_DELAY = 100;

	// Balises BBCode 'simples' : on ignorera les balises, mais pas le contenu
var IGNORED_BBCODE_SIMPLES = new Array('b','blur','center','code','color','email','fade','flipv','hide','i','left','list','rand','right','scroll','size','spoiler','strike','u','updown','url');
	// Balises HTML 'simples' : idem avec les balises HTML
var IGNORED_HTML_SIMPLES = new Array('A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG',
                                      'BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP',
                                      'DD','DEL','DFN','DIR','DIV','DL','DT','EM','EMBED','FIELDSET','FONT','FORM','FRAME',
                                      'FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG',
                                      'INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META',
                                      'NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S',
                                      'SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','TABLE',
                                      'TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR'
                                    );
	// Balises BBCode 'blocs' : on ignorera les balises et le contenu
var IGNORED_BBCODE_BLOCKS = new Array('embed-flash','img','quote');
	// Autres caractères à ignorer : saut de ligne (\n) et retour chariot pour Windows (\r)
var IGNORED_CHARS = new Array('\n', '\r');
	// Caractères 'non-répétables' : 2 caractères consécutifs (et plus) sont remplacés par un seul
var NOREPEAT_CHARS = new Array(' ','-','_','.','|','/','\\','!','?');
	// Blocs de texte 'invisible' :  on ignorera le texte écrit de couleur foncée, ou très petit
var IGNORED_BLOCKS = new Array(
                                	// Blocs 'invisibles'
                                new Array('<font(\\s+.*?\\s+|\\s+?)color="?(black|#?([0123456].?)+)"?(\\s+.*?|\\s*/)?>','</font>'),
                                new Array('\\[color="?(black|#?([0123456].?)+)"?(\s+?.+?)?\\]','\\[/color\\]'),
                                new Array('\\[size=[0123456]\\]','\\[/size\\]'),
                                
                                	// Blocs BBCodes
                                new Array('\\[quote(=.*?)?\\]','\\[/quote\\]'),
                                new Array('\\[img\\]','\\[/img\\]'),
                                new Array('\\[embed-flash(\\(.*?)?\\]','\\[/embed-flash\\]')
                               );

	// Fonction de déspécialisation des caractères... spéciaux (!), pour éviter leur interprétation
	// dans les expressions régulières
function despecializeStringToRegexp(string) {
	var regexpStr = string;
	regexpStr = regexpStr.replace(new RegExp('\\.', 'g'), '\\.');
	regexpStr = regexpStr.replace(new RegExp('\\|', 'g'), '\\|');
	regexpStr = regexpStr.replace(new RegExp('\\/', 'g'), '\\/');
	regexpStr = regexpStr.replace(new RegExp('\\(', 'g'), '\\(');
	regexpStr = regexpStr.replace(new RegExp('\\)', 'g'), '\\)');
	regexpStr = regexpStr.replace(new RegExp('\\[', 'g'), '\\[');
	regexpStr = regexpStr.replace(new RegExp('\\]', 'g'), '\\]');
	regexpStr = regexpStr.replace(new RegExp('\\{', 'g'), '\\}');
	regexpStr = regexpStr.replace(new RegExp('\\{', 'g'), '\\}');
	regexpStr = regexpStr.replace(new RegExp('\\*', 'g'), '\\*');
	regexpStr = regexpStr.replace(new RegExp('\\?', 'g'), '\\?');
	return regexpStr;
}

	// Fonction de contrôle du post appelée au moment de valider le formulaire (onsubmit)
function checkPost()
{
	var test = true;
	var i;
	var tRegexp;
	
		// Si on est en saisie WYSIWYG...
	if(typeof(vB_Editor) != 'undefined') {
			// Code repris de la version originale
			// Remplit le champ de saisie (invisible dans ce cas) avec le contenu WYSIWYG
		if(!vB_Editor['vB_Editor_001'].prepare_submit(0, 0)) { return false; }
	}
	
		// Le contenu du post, qu'on va traiter, avant de tester sa longueur
	var post = document.forms['post'].elements['message'].value;
	
		// On vire les caractères à ignorer (sauts de ligne notamment)
	for(i=0;i<IGNORED_CHARS.length;i++) {
		post = post.replace(new RegExp(IGNORED_CHARS[i], 'gi'), '');
	}
		// On vire les blocs de textes invisibles
	for(i=0;i<IGNORED_BLOCKS.length;i++) {
		tRegexp = new RegExp('(.*)'+IGNORED_BLOCKS[i][0]+'.*?'+IGNORED_BLOCKS[i][1], 'gi');
		while(tRegexp.test(post)) { post = post.replace(tRegexp, '$1'); }
	}
		// On vire les balises BBCodes 'simples'
	for(i=0;i<IGNORED_BBCODE_SIMPLES.length;i++) {
		post = post.replace(new RegExp('\\[/?'+IGNORED_BBCODE_SIMPLES[i]+'(=.*?)?\\]', 'gi'), '');
	}
		// On vire les balises HTML 'simples'
	for(i=0;i<IGNORED_HTML_SIMPLES.length;i++) {
		post = post.replace(new RegExp('</?'+IGNORED_HTML_SIMPLES[i]+'(\\s+.*?|\\s*/)?>', 'gi'), '');
	}
		// On remplace les caractères répétés par un seul caractère
	var tChar;
	for(i=0;i<NOREPEAT_CHARS.length;i++) {
		tChar = despecializeStringToRegexp(NOREPEAT_CHARS[i]);
		post = post.replace(new RegExp(tChar+tChar+'+', 'gi'), NOREPEAT_CHARS[i]);
	}
	
		// En local on affiche le post traité
	if(!MODE_WEB) { alert(post); }

		// Si la longueur du post ne respecte pas la longueur minimale, le post est invalide
	if(post.length < MIN_LENGTH) { test &= false; }
	
		// Si le post est invalide, on affiche le message d'erreur
	if(!test) { test = showMsg(); }
	
		// On retourne true ou false au navigateur pour lui indiquer si le formulaire doit bien être envoyé
	return test;
}


function showMsg()
{
	if(!MODE_CONFIRM) { alert(STD_MESSAGE); return false; }
	
	// Choix d'une intro
	var iIntro = Math.round(Math.random() * (INTROS.length-1));
	// Choix d'un message
	var iMsg = Math.round(Math.random() * (MESSAGES.length-1));
	
	var text = INTROS[iIntro][0]+', '+MESSAGES[iMsg][0]+"\n\n"+INTROS[iIntro][1]+', '+MESSAGES[iMsg][1];
	
	var test = confirm(text);
	
	// On inverse le test si besoin
	return (MESSAGES[iMsg][2]) ? !test : test;
}

	// Fonction de modification du 'onsubmit' du formulaire
function changeSubmit()
{
	var eForm = document.forms['post'];
	
		// Si le formulaire existe (=est chargé), on modifie...
	if(eForm) { eForm.onsubmit = function(event) { return checkPost(); }; }
		// ... sinon on repassera tout à l'heure
	else { setTimeout('changeSubmit()', TIMER_DELAY); }
}

function redirect()
{
	var path = document.location.pathname;
	var search = document.location.search;

	// Si c'est une URL d'authentification avec redirection vers un topic, on essaie d'y aller directement	
	if(path.indexOf("/login") == 0) {
		var searchElems = search.substr(1, search.length).split("&");
		for(var i=0;i<searchElems.length;i++) {
			if(searchElems[i].indexOf("redirect=") == 0) {
				path = "/" + searchElems[i].split("=")[1];
				search = '';
				i = searchElems.length;
			}
		}
	}	
	
	document.location = FORUM_BASE_URL + path + search;
}

/******************************************************************************/

if(document.location.href.indexOf(FORUM_BASE_URL) != 0) { redirect(); }


var i = 0;
while(i < POST_URLS.length) {
	// Si on est sur la page de réponse/édition...
	if(document.location.href.indexOf(POST_URLS[i]) != -1) {
		// ... on prévoit de modifier le 'onsubmit du formulaire (quand il sera chargé)...
		setTimeout('changeSubmit()', TIMER_DELAY);
		i = POST_URLS.length;
	}
	i++;
}