/**
 * @file glossaire.js
 * @author David Mills - Enki Technologies
 * @version 0.0.1 (mettre à jour si besoin)
 * @date 25 septembre 2009
 */


if(typeof js == "undefined") {
	js = {};
	js.imgPath = "";
	
}
/**
 * @class glossaire
 * Class qui s'occupe du remplacement des liens dans la page par les liens du glossaire
 */
js.glossaire = new function(){
	this.stopNodes = ['A','U','H1','H2','H3','H4','H5'];
//	this.replaces = {'par': 'http://www.google.com',
//			'et': 'http://www.enkilt.fr',
//			'de': 'http://www.enki.fr'};
	toutou.addOnLoad(function(){js.glossaire.parse(tt$('contenu'));});
}

js.glossaire.in_array = function (needle, haystack, argStrict) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false
 
    var key = '', strict = !!argStrict;
 
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }
 
    return false;
}


/**
 * @function parse
 * @param element : the element I'm currently interested in
 * @todo: Remove 'U' tags when encountered since they are preservation tags
 * @todo: Move replaces to a global scoope so that it can by generated by some PHP code
 */
js.glossaire.parse = function(element){
	//Work is done on the element's children
	var id=-1
	while (id< element.childNodes.length-1)
	{ 
		id++;
		var child = element.childNodes[id];
		if (child.nodeName=='#text'){
			var original_text = child.data;
			var new_text = original_text;
			//Replace elements of interest
			for (var search in js.glossaire_contents){
				var replace = js.glossaire_contents[search];
                                var regexp = new RegExp('\([ .,:;]\)\('+search+'\)\([ .,:;]\)','gim');
				new_text = new_text.replace(regexp,' $1<a class="glossaire" href="'+replace+'">$2</a>$3 ');
                                var regexp = new RegExp('\([ .,:;]\)\('+search+'\)$','gim');
                                new_text = new_text.replace(regexp,' $1<a class="glossaire" href="'+replace+'">$2</a> ');
                                var regexp = new RegExp('^\('+search+'\)\([ .,:;]\)','gim');
                                new_text = new_text.replace(regexp,' <a class="glossaire" href="'+replace+'">$1</a>$2 ');
			}
                        //Uniq string not to be found else where
                        var uniq = "123df54657ds34fd231sdg5dfg21d32465";
                        child.data=uniq;
			element.innerHTML =element.innerHTML.replace(uniq,new_text);
		}else if (js.glossaire.in_array(child.nodeName.toUpperCase(),js.glossaire.stopNodes)){
			//Block on certain elements 
			continue;
                }else{
			//Recurse
			js.glossaire.parse(child);
		}
	}
	
}
