/*
 * PrettyPrint                                          v0.4b - 01/10/2007
 * Auteur : Raoul Prevost
 * E-mail : prettyprint@free.fr
 *
 * Remplace toutes les équations placées entre balises span de class
 * prettyprint (<span class="prettyprint">...</span>) par des images.
 *
 * Utilisation :
 * - Placez la ligne <script language="javascript" type="text/javascript" src="prettyprint.js"></script>
 * dans l'entête de vos pages.
 *
 * - Initialisez la variable si dessous (url_serveur) avec l'adresse de la
 * page http://prettyprint.free.fr/prtprntajax.txt que vous aurez copiée
 * sur votre serveur et dont vous aurez changé l'extension par PHP.
 * 
 */

var url_serveur = "http://tamaweb.prog.fr/prtprntajax.php";

function onload_prettyprint() {
	init_prettyprint(10);
}

if (typeof window.addEventListener != 'undefined')    // gecko, safari, konqueror, standard
	window.addEventListener('load', onload_prettyprint, false);
else if(typeof document.addEventListener != 'undefined')    // opera 7
	document.addEventListener('load', onload_prettyprint, false);
else if(typeof window.attachEvent != 'undefined')    // ie
	window.attachEvent('onload', onload_prettyprint);
else {
	if(typeof window.onload == 'function') {
		var ancien = onload;
		window.onload = function() {
				ancien();
				onload_prettyprint();
			};
	} else window.onload = onload_prettyprint();
}

function init_prettyprint(nb_tentatives) {
	var tab_spans = document.getElementsByTagName("span");
	var tab_spans_prettyprint = Array();
	var str_request_prettyprint = "";
	var j = 0;
	for (i in tab_spans) {
		if (tab_spans[i].className == "prettyprint") {
			tab_spans[i].className = "prettyprint_loading"
			tab_spans_prettyprint[j] = tab_spans[i];
			var equ = tab_spans[i].innerHTML;
			equ = equ.replace(/<br>/ig, "\n");
			equ = equ.replace(/<br\/>/ig, "\n");
			equ = escape(equ);
			equ = equ.replace(/\+/ig, "%2B");
			if (j != 0) str_request_prettyprint += '&';
			str_request_prettyprint += 'equ' + j + '=' + equ;
			j++;
		}
	}
	request_prettyprint(url_serveur, str_request_prettyprint, tab_spans_prettyprint, nb_tentatives);
}

function fix_urls_prettyprint(result, tab_spans_prettyprint) {
	if (result == false || result == "") {
		for (i in tab_spans_prettyprint) {
			tab_spans_prettyprint[i].className = "prettyprint_error";
		}
		return;
	}

	var v_align, url, urls = result.split("#");
	for (i in tab_spans_prettyprint) {
		url = urls[i];
		url = url.replace(/</g,'');
		url = url.replace(/>/g,'');
		url = url.replace(/\'/g,'');
		url = url.replace(/\"/g,'');
		v_align = url.replace(/.*\/[^\.]*\.([0-9]*)\..*/, "$1");
		tab_spans_prettyprint[i].className = "prettyprint_loaded";
		var str_img_alt_title = tab_spans_prettyprint[i].innerHTML.replace(/\"/g,'&quot;');
		str_img_alt_title = str_img_alt_title.replace(/<br>/ig, "\n");
		str_img_alt_title = str_img_alt_title.replace(/<br\/>/ig, "\n");
		var str_img_prettyprint = "<img src=\"" + urls[i] + "\"";
		str_img_prettyprint += " alt=\"" + str_img_alt_title + "\"";
		str_img_prettyprint += " title=\"" + str_img_alt_title + "\"";
		if (v_align >= 0)
			str_img_prettyprint += " style=\"vertical-align:-" + v_align + "px\"";
		str_img_prettyprint += ">";
		tab_spans_prettyprint[i].innerHTML = str_img_prettyprint;
	}
}

function request_prettyprint(url, data, tab_spans_prettyprint, nb_tentatives) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/plain');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		fix_urls_prettyprint(false, tab_spans_prettyprint);
		return false;
	}
	var s, d = new Date();
	s = d.getHours() + ":";
	s += d.getMinutes() + ":";
	s += d.getSeconds() + ":";
	s += d.getMilliseconds() + ":";
	s += nb_tentatives;
	try {
		http_request.open('POST', url + "?anticache=" + s, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.onreadystatechange = function() {
				result_prettyprint_change(http_request, url, data, tab_spans_prettyprint, nb_tentatives);
			};
		http_request.send(data);
	} catch (e) {
		if (nb_tentatives > 1) request_prettyprint(url, data, tab_spans_prettyprint, nb_tentatives - 1);
		else fix_urls_prettyprint(false, tab_spans_prettyprint);
	}
	
}

function result_prettyprint_change(http_request, url, data, tab_spans_prettyprint, nb_tentatives) {
	try {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				fix_urls_prettyprint(http_request.responseText, tab_spans_prettyprint);
			} else {
				if (nb_tentatives > 1) request_prettyprint(url, data, tab_spans_prettyprint, nb_tentatives - 1);
				else fix_urls_prettyprint(false, tab_spans_prettyprint);
			}
		}
	} catch(e) {
		if (nb_tentatives > 1) request_prettyprint(url, data, tab_spans_prettyprint, nb_tentatives - 1);
		else fix_urls_prettyprint(false, tab_spans_prettyprint);
	}
}


