function rech_ajax(){
	
	this.res_rech;
	this.rech_val={};
	this.mot_recherche = new Array();
	this.rech_aj = new Ajax();
	this.rech_aj.xml = true;
	this.results = new Array();
	this.last_rech;
	this.maxResults = 3;
	
	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(){
		
		var lr = this.mot_recherche.join('-');
		
		if(lr == this.last_rech){
			return;	
		}else{
			this.last_rech = lr;	
		}
		
		this.results = {}
		
		
	
		
		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(!this.results[art.type]){
						this.results[art.type]={};
						this.results[art.type][nom] = {'score':score,'art':art};
					}else if(! this.results[art.type][nom]){						
						this.results[art.type][nom] = {'score':score,'art':art};
					}else{						
						this.results[art.type][nom].score += score;
					}
					
				}
			}
		}
		for(nn in this.results){
			this.results[nn] = rech_classer(this.results[nn]);
		}
		
		
		this.afficher();
	}
	
	function rech_classer(res){
		
		var ret = new Array();
		
		for(i in res){
			var ar = res[i];
			var score = ar.score;
			
		
			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.afficher = function(){
		/**/
		
		var div_menu = document.getElementById('ss_menu_cont_recherche');
		div_menu.innerHTML = '';
		
		for(var titre in this.results){
			var nm = (titre == "page")?'Page':id_ts_noms_page[titre];
			div_menu.innerHTML += '<div class="titre_rech">'+nm+' ('+this.results[titre].length+')</div>';
			
			var t = 0;
			for(var nom in this.results[titre]){
				
				if(t>=this.maxResults){
					div_menu.innerHTML += '<a href="rechercher/'+this.last_rech+'/'+titre+'.htm" class="ts_results">Tous les résultats</a>';	
					break
				}
				var art = this.results[titre][nom].art;
				div_menu.innerHTML += '<a href="'+art.url+'" '+((!t)?'class="result_prem"':'')+'>'+art.title+'</a>';	
				t++;
			}
			/*for(var i=0; i<this.results[titre].length && i<=max_results; i++){
				div_menu.innerHTML += '<a href="'+this.results[titre][i].url+'.htm">--'+this.results[titre][i].title+'</a>';
			}*/
		}
	
		
		aff_ss_menu('recherche');
	}


	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){
	
	}
	
	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;
	}
}


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();
