function rech_ajax(){
	
	this.res_rech;
	this.rech_val={};
	this.mot_recherche;
	this.rech_aj = new ajax();
	this.rech_aj.xml = true;
	this.results = new Array();
	
	var laclass = this;
	this.rech_aj.response = function(id){

		laclass.trait_rech(id);		
	}
	
	this.rechercher = function(id){
			var text = id.value;
			if(text.length<3){
				this.rech_chercher();
				return;
				
			}
			
			var text_split = text.split(' ');
			this.mot_recherche = new Array();
			
			for(var i=0; i<text_split.length; i++){	
				
				if(text_split[i].length >=3){
					var rech = text_split[i].substring(0,3);
					
					if(!this.rech_val[rech]){
					
						this.rech_aj.loadvar('ajax/rech.php?rech='+rech);
						this.rech_val[rech] = {};
						
					}
					this.mot_recherche.push(this.rech_encode(text_split[i]));				
				}
			}
			this.rech_chercher();
	}
	
	this.trait_rech = function (id){
			if(!id.attributes[0].nodeValue)return;
			var cl = (id.attributes[0].nodeValue);
			
			this.results = new Array();
			if(id.firstChild){
				var ne = id.firstChild;
				var t='';
				var ret = new Array();
				do{
					var obj = {'title':this.format_titre(ne.firstChild.nodeValue), 'url':ne.attributes[0].nodeValue, 'type':ne.attributes[1].nodeValue};
					var mot_cle = new Array();
					for(var i=2; i<ne.attributes.length; i++){
						mot_cle.push({'mot':ne.attributes[i].name, 'val':ne.attributes[i].nodeValue});
						t+=ne.attributes[i].name;	
					}
					obj.cle=mot_cle;
					ret.push(obj);
				}while(ne = ne.nextSibling);
				this.rech_val[cl] = ret;
			}
					
			this.rech_chercher();
	}
	
	this.rech_chercher = function(){
	
		this.results = {}
		this.results.num = new Array();
		this.results.art = new Array();
		var index = {};
		
		var mc;
		for(mc in this.rech_val){
			var lmc = this.rech_val[mc];
			for(var i=0; i<lmc.length; i++){
				var art = lmc[i];
				var score = 0;
				for(var m=0; m<art.cle.length; m++){
					var mot_cle = art.cle[m].mot;
					if(this.matches(mot_cle)){
							score += parseInt(art.cle[m].val);
					}
				}
				if(score){
					var nom = art.type+art.url;
					
					if(index[nom]){
						var o = index[nom]-1;
						
						if(art.type === '0'){
							this.results.num[o].score += score;	
						}else{
							this.results.art[o].score += score;	
						}
					}else{
						var arti = {'score':score,'art':art};
						if(art.type === '0'){
							index[nom] = this.results.num.push(arti);
						}else{
							index[nom] = this.results.art.push(arti);	
						}
					}
					
				}
			}
		}
		this.results.num = rech_classer(this.results.num);
		this.results.art = rech_classer(this.results.art);
		this.afficher();
	}
	
	function rech_classer(res){
		
		var ret = new Array();
		
		for(var i=0; i<res.length;i++){
			var ar = res[i];
			var score = ar.score;
			
			/*for(var i=0; i<res.length;i++){
				ret.push(ar);
			}	*/
			if(ret.length){
				for(var x=0; x<ret.length;x++){
					if(ret[x].score<=score){
						break;
					}
				}
				ret = insertIn(ret, ar, x);
			}else{
				ret.push(ar);	
			}
		}
		
		return ret;
	}
	
	this.matches = function(val){
		
			for(var i=0; i<this.mot_recherche.length; i++){
				var mr = this.mot_recherche[i];
				mrl = mr.length;
				
				if(mrl<= val.length){
					var cp = val.substring(0,mrl);
					//document.getElementById('result_menu').innerHTML += cp+'=>'+mr+'<br>';
					if(cp == mr)return true;
				}
			}
			return false;
	}
	
	this.afficher = function(){
		/**/
		var max_results = 10;
		var div_menu = document.getElementById('result_menu');
		// ---------------------------------------------------------- SOMMAIRE
		div_menu.innerHTML = '';	
		if(this.results.num.length){
			var div = document.createElement('div');
			div.className="rech_int_div";
			div.innerHTML += '<h2>Sommaire ('+this.results.num.length+')</h2>';
			for(var i=0; i<this.results.num.length && i<=max_results; i++){
				var article = this.results.num[i];
				div.innerHTML += '<a href="archives/'+article.art.url+'.htm">'+article.art.title+' <span class="italic">(Wunnen&nbsp;'+article.art.url+')</span></a>';
			}
			
			div_menu.appendChild(div);
		}
		// ---------------------------------------------------------- ARTICLES
		
				
		if(this.results.art.length){
			var div = document.createElement('div');
			div.className="rech_int_div_art";
			div.innerHTML += '<h2>Articles ('+this.results.art.length+')</h2>';
			for(var i=0; i<this.results.art.length && i<=max_results; i++){
				var article = this.results.art[i];
				lien = 'articles';
				switch(article.art.type){
					case 'a':
						lien = 'articles';
						break;
					case 'n':
						lien = 'actualite';
						break;
					case 'b':
						lien = 'bloc-notes';
						break;
					case 'e':
						lien = 'agenda';
						break;
					case 'l':
						lien = 'livres';
						break;
					case 't':
						lien = 'tendances';
						break;
						
				}
				div.innerHTML += '<a href="'+lien+'/'+article.art.url+'.htm" class="bas_'+article.art.type+'">'+article.art.title+'</a>';
			}

			div_menu.appendChild(div);
		}
		var div = document.createElement('div');
		div.className="pdp_rech";
		if( this.results.num.length || this.results.num.length){
			div.innerHTML += '<a href="javascript:" onclick="document.getElementById(\'form_recher\').submit()">Voir tous les r&eacute;sultats</a>';
		}else{
			div.innerHTML += 'Aucun r&eacute;sultat';
		}
		div_menu.appendChild(div);
		//*/
		var div_rech = document.getElementById('rech');
		div_rech.ouvrir();
	}


	this.rech_encode = function(txt){
		txt = txt.toLowerCase();
		txt = str_replace(txt,'%','-');
		
		
		txt = str_replace(txt,'à','a');
		txt = str_replace(txt,'ä','a');
		txt = str_replace(txt,'â','a');
		
		txt = str_replace(txt,'é','e');
		txt = str_replace(txt,'è','e');
		txt = str_replace(txt,'ê','e');
		txt = str_replace(txt,'ë','e');
		
		txt = str_replace(txt,'î','i');
		txt = str_replace(txt,'ï','i');
		
		txt = str_replace(txt,'ö','o');
		txt = str_replace(txt,'ô','o');
		
		txt = str_replace(txt,'ù','u');
		txt = str_replace(txt,'û','u');
		txt = str_replace(txt,'ü','u');
		
		txt = str_replace(txt,'ç','c');
		txt = str_replace(txt,'œ','oe');
		txt = str_replace(txt,'ß','ss');
		
		txt = txt.replace(/\W/g,'');
		
		txt = txt.replace(/s$/g,'');
		
		return txt;	
	}
	
	this.format_titre = function(txt){
		txt = txt.replace(/\[i\](.+)\[\/i\]/,'<i>$1</i>');
		return txt;
	}
	
	this.fin_rech = function(id){
		var fr = new ajax();
		var rech = id.value;
		fr.loadvar('ajax/stats_rech.php?recherche='+rech);
	}
}


function str_replace(haystack, needle, replacement) {
    var temp = haystack.split(needle);
    return temp.join(replacement);
}

function insertIn(arr, data, index){
	var n_arr = arr.splice(index,arr.length);
	n_arr.unshift(data);
	arr = arr.concat(n_arr);
	return arr;
}



var recherche_site = new rech_ajax();
