function createMarker(point,html) {
  var marker = new GMarker(point);
  
  /*
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  */
  
  return marker;
}

function createDraggableMarker(point, html) {
  var options = {
    draggable: true
  };
  
  marker = new GMarker(point, options);

  GEvent.addListener(marker, "dragstart", function() {
    map.closeInfoWindow();
  });
  
  GEvent.addListener(marker, "dragend", function() {
		$('latitude').value = marker.getPoint().lat();
		$('longitude').value = marker.getPoint().lng();        
  });
  
  /*
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  */
        
  return marker;
}

function initMap(div,point,zoom) {
	var _zoom = zoom ? zoom : defaultMapZoom ;
	if (GBrowserIsCompatible()) {
	  var map;
	  map = new GMap2($(div));
	  map.setCenter(point,_zoom);
	  map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
	  // GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
	  // map.getContainer().onmousewheel = wheelevent;          
	  // map.enableScrollWheelZoom();    
	  return map;
	}
}

function wheelevent(e) {
	if (!e){
		e = window.event;
	}
		if (e.preventDefault){
			e.preventDefault();
	}
	e.returnValue = false;
}

function initBlankMap(div,mapContainer,isOpen) {
  if (GBrowserIsCompatible()) {
    map = new GMap2($(div));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());        
    geocoder = new GClientGeocoder();
    if (isOpen) {
    	var mapContent = "";
    	var mapPoint = new GLatLng($('latitude').value,$('longitude').value);
    	var marker = createDraggableMarker(mapPoint,mapContent);
    	map = initMap("map",mapPoint);
		map.addOverlay(marker);
      	isMapVisible = true;
    } else {
    	$(mapContainer).hide();
   	}
  } else {
	  alert(lang["map.alert.badNavigator"]);
  }
}

function addAddressToMap(response) {
	map.clearOverlays();
	if (!response || response.Status.code != 200) {
		isAdressFound = false;
		alert(lang["map.alert.adressNotFound"]);
	} else {
		isAdressFound = true;
		place = response.Placemark[0];
		point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		var html = place.address;
		html_txt = html.replace( new RegExp( ", ", "g" ), "\n" );        	 
		html = html_txt.replace( new RegExp( "\n", "g" ), "<br/>" );        	 
		
		map.setCenter(point, defaultMapZoom);
		marker = createDraggableMarker(point, html);
		map.addOverlay(marker);            
		$('latitude').value = point.lat();
		$('longitude').value = point.lng();
	}
}

var map;
var geocoder;
var isMapVisible =  false;
var isAdressFound = false;
var defaultMapZoom = 16;

function toggleMap(mapContainer,checkbox) {   	  	
	isMapVisible = checkbox.checked;
	redrawMap(mapContainer);
	return true;
}    


function redrawMap(mapContainer,isRefresh) {
	if (isMapVisible) {		    		
		var theAddress = $('adress').getValue() + " " + $('postalCode').getValue() + " " + $('city').getValue() + " " + $('country').options[$('country').selectedIndex].value;
		geocoder.getLocations(theAddress, addAddressToMap);
		if (isRefresh) {
			Effect.Shake($(mapContainer));
		} else {
			$(mapContainer).show();
			//Effect.Appear($(mapContainer));
		}
	} else {
		$(mapContainer).hide();			    	
		//Effect.Fade($(mapContainer));
		$('latitude').value = 0;
		$('longitude').value = 0;		    	
	}
	return false;
};
function highlightWord(node,word, niv) {	   	
	// On itère sur les fils
	var hi_cn;
	if (node.hasChildNodes && niv < 16) {		
		if (node.nodeType == 3) {traiteNoeud(node, word);}		
		else
			{
				niv++;
				for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {			
					highlightWord(node.childNodes[hi_cn],word,niv);
				}
		}
	}
}

function replaceAll (chaine, rech, remp)
{ var st = chaine;
  var size = rech.length;
  if (size > 0)
  	{
	  var idx = st.indexOf(rech);
	  	while (idx >= 0)
		  {   st = st.substring(0,idx) + remp + st.substr(idx+size);
	     		idx = st.indexOf(rech);
	  	  }
   	}
  return st;
}

function traiteNoeud(node, word){
// on traite le noeud lui-meme
		
	tempNodeVal = noaccent(node.nodeValue.toLowerCase());
	tempWordVal = word;
	//word.toLowerCase();
	if (tempNodeVal.indexOf(tempWordVal) != -1 ) {		
		pn = node.parentNode;
		if (pn.className != "searchwords") {				
			nv = node.nodeValue;
			ni = tempNodeVal.indexOf(tempWordVal);
			
			before = document.createTextNode(nv.substr(0,ni));
			docWordVal = nv.substr(ni,word.length);
			after = document.createTextNode(nv.substr(ni+word.length));
			hiwordtext = document.createTextNode(docWordVal);				
			hiword = document.createElement("span");				
			hiword.className = "searchwords";				
			hiword.appendChild(hiwordtext);
			pn.insertBefore(before,node);
			pn.insertBefore(hiword,node);
			pn.insertBefore(after,node);
			pn.removeChild(node);
		}
	}	
}

function noaccent(chaine)
{
var temp="";
temp = chaine.replace(/[àâä]/gi,"a");
temp = temp.replace(/[éèêë]/gi,"e");
temp = temp.replace(/[îï]/gi,"i");
temp = temp.replace(/[ôö]/gi,"o");
temp = temp.replace(/[ùûü]/gi,"u");
return temp.toLowerCase();
}


function highlightSearchTerms() {
	if (!document.createElement) return;
	var w=0;
	var i=0;
	var j=0;		
	var ref = location.href;	
	var queryip;
	var words;
	var lesResultats;
	var niv=0;
	if (ref.indexOf('?') == -1) return;
	
	var query = ref.substr(ref.indexOf('?')+1);	
	var querya = query.split('&');
	
	for (i=0;i<querya.length;i++) {
		 queryip = querya[i].split('=');		
		
	       if (queryip.length >= 1) {
	       	
        	if (queryip[0] == 'keywords' || queryip[0] == 'position' || queryip[0] == 'company' || queryip[0] == 'lastname' || queryip[0] == 'location'  || queryip[0] == 'country' || queryip[0] == 'education'  ) {                										
        			
        			if (queryip[1].indexOf("+") != -1 ) {words = unescape(queryip[1]).split("+");}
        			else if (queryip[1].indexOf(" ") != -1 ) {words = unescape(queryip[1]).split(" ");}	
        			else if (queryip[1].indexOf("%20") != -1 ) {queryip[1] = replaceAll(queryip[1],"%20","+"); words = unescape(queryip[1]).split("+");}	
        			else {words = unescape(queryip[1]).split("+");}
					
	                for (w=0;w<words.length;w++) {	                	
	                	words[w] = (words[w].indexOf("*") != -1 ? words[w].substr(0, words[w].indexOf("*")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(",") != -1 ? words[w].substr(0, words[w].indexOf(",")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(".") != -1 ? words[w].substr(0, words[w].indexOf(".")) : words[w]);	                	
	                	words[w] = noaccent(words[w]);
	                	if (words[w].length > 2 && words[w] != 'des' && words[w] != 'les') { 	                																																		
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('result'+j)) != null)) ;j++){																								
	                					highlightWord(lesResultats,words[w],niv);	                					
							}		
						}						
					}
              }
           }
	  }
	
}


function highlightSearchTermsSearchBar() {
	if (!document.createElement) return;
	var w=0;
	var i=0;
	var j=0;		
	var ref = location.href;	
	var queryip;
	var words;
	var lesResultats;
	var niv=0;
	if (ref.indexOf('?') == -1) return;
	var query = ref.substr(ref.indexOf('?')+1);	
	var querya = query.split('&');
	for (i=0;i<querya.length;i++) {
		 queryip = querya[i].split('=');		
		
	       if (queryip.length >= 1) {
	       	
        	if (queryip[0] == 'queryString' || queryip[0] == 'town' || queryip[0] == 'fullName' || queryip[0] == 'keywords' || queryip[0] == 'position' || queryip[0] == 'company' || queryip[0] == 'lastname' || queryip[0] == 'location'  || queryip[0] == 'country' || queryip[0] == 'education') {                										
        			
        			if (queryip[1].indexOf("+") != -1 ) {words = unescape(queryip[1]).split("+");}
        			else if (queryip[1].indexOf(" ") != -1 ) {words = unescape(queryip[1]).split(" ");}	
        			else if (queryip[1].indexOf("%20") != -1 ) {queryip[1] = replaceAll(queryip[1],"%20","+"); words = unescape(queryip[1]).split("+");}	
        			else {words = unescape(queryip[1]).split("+");}
					
	                for (w=0;w<words.length;w++) {
	                	words[w] = (words[w].indexOf("*") != -1 ? words[w].substr(0, words[w].indexOf("*")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(",") != -1 ? words[w].substr(0, words[w].indexOf(",")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(".") != -1 ? words[w].substr(0, words[w].indexOf(".")) : words[w]);	                	
	                	words[w] = noaccent(words[w]);
	                	if (words[w].length > 2 && words[w] != 'des' && words[w] != 'les') { 
	                		for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultMember'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}               																																		
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultBlog'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultBlogTitle'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultJobOffer'+j)) != null)) ;j++){																								
	                	    	highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultHub'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultEvent'+j)) != null)) ;j++){
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultExpert'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('resultTraining'+j)) != null)) ;j++){																								
	                			highlightWord(lesResultats,words[w],niv);	                					
							}
						}						
					}
              }
           }
	  }
	
}

function highlightSearchTerms1(keywords) {
	if (!document.createElement) return;
	var w=0;
	var j=0;		
	var words;
	var lesResultats;
	var niv=0;
        			if (keywords.indexOf("+") != -1 ) {words = unescape(keywords).split("+");}
        			else if (keywords.indexOf(" ") != -1 ) {words = unescape(keywords).split(" ");}	
        			else {words = unescape(keywords).split("+");}
	                for (w=0;w<words.length;w++) {	                	
	                	words[w] = (words[w].indexOf("*") != -1 ? words[w].substr(0, words[w].indexOf("*")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(",") != -1 ? words[w].substr(0, words[w].indexOf(",")) : words[w]);	                	
	                	words[w] = (words[w].indexOf(".") != -1 ? words[w].substr(0, words[w].indexOf(".")) : words[w]);	                	
	                	words[w] = noaccent(words[w]);
						
	                	if (words[w].length > 2 && words[w] != 'des' && words[w] != 'les') { 	                																																		
							for (j=0; ((j < 20) && ((lesResultats = document.getElementById('result'+j)) != null)) ;j++){																								
	                					highlightWord(lesResultats,words[w],niv);				
							}		
						}						
					}
}

;

	var MiniProfil = Class.create();
	MiniProfil.prototype = {
		
		params : {
			distance : 10,								// pixels
			delay : 0.0,								// seconds
			src : '/public/miniprofile/index.jsp'	// url
		},

		setAttributes : function(elt){
			var state = {
				exists		: false,
				position	: 'undefined',
				dimensions	: 'undefined',
				flownOver	: false,
				visible		: false,
				filledIn	: false
			};
			elt.state = state;
		},

		initialize : function(handler, memberId) {
		
			if (arguments[1]){
				this.options = arguments[1];
				if (this.options.src) 		this.params.src 		= this.options.src;
				if (this.options.distance) 	this.params.distance 	= this.options.distance;
				if (this.options.delay) 	this.params.delay 		= this.options.delay;
			}
		
			this.window				= (window.event) ? document.body : window; // IE Hack
			this.handler			= $(handler);
			this.memberId			= memberId;
			
			this.setAttributes(this.handler);
			
			this.getCoordinates(this.handler);
			this.getDimensions(this.handler);
			
			Event.observe(window, 'resize', function(){
				this.getCoordinates(this.handler);
				this.getDimensions(this.handler);
			}.bind(this));
			
			this.createcanvas();
			
			this.eltListenerSwitcher(this.window, 'on', this.updateflyOvers.bind(this));
			this.eltListenerSwitcher(this.handler, 'on', this.fillInCanvas.bind(this));
		
		},
		
		createcanvas : function(){
		
			var canvas = Builder.node('div', { className : 'miniprofil miniprofilshadow ' });
			document.body.appendChild(canvas);
			
			this.canvas = canvas;
			this.setAttributes(this.canvas);
			this._hide(this.canvas);
			this.canvas.exists = true;
		
		},
		
		canvasCss : function(){
			
			var windowDim	 		= this.getWindowDim();
			var windowScrollDepth 	= document.documentElement.scrollTop || document.body.scrollTop;
			var handlerPos 			= this.handler.state.position;
			var handlerWidth 		= this.handler.state.dimensions.width;
			var canvasWidth  		= this.canvas.state.dimensions.width;
			var canvasHeight  		= this.canvas.state.dimensions.height;

			var topOverflow		= handlerPos[1] + canvasHeight - windowDim[1] - windowScrollDepth;
			var rightOverflow	= handlerPos[0] + handlerWidth + canvasWidth - windowDim[0];

			var style = {
				position : 'absolute',
				top : ( (topOverflow > 0) ? handlerPos[1] - topOverflow : handlerPos[1] ) + "px",
				left: ( (rightOverflow > 0) ? handlerPos[0] - canvasWidth - this.params.distance : handlerPos[0] + handlerWidth + this.params.distance ) + "px"
			};
			
			return style;
		},
		
		fillInCanvas : function(event){
			
			var updater = function(){
				
				if(this.handler.state.flownOver){
				
					new Ajax.Updater({ success: this.canvas }, this.params.src, {
						parameters: 'paramControl=valide&memberId='+this.memberId,
						onComplete : function(){
						
							this.canvas.state.filledIn = true;
							this.getDimensions(this.canvas);
							
							this.canvas.setStyle(this.canvasCss());
							this._show(this.canvas);
							
							Event.observe(window, 'resize', function(){
								this.getCoordinates(this.handler);
								this.getDimensions(this.handler);
								this.canvas.setStyle( this.canvasCss() );
							}.bind(this));
							
							this.eltListenerSwitcher(this.handler, 'off', this.fillInCanvas.bind(this));
							
							if(this.canvas.down('.close')) {
								this.closer = this.canvas.down('.close');
								this.closer.observe('click', function(){this._hide(this.canvas)}.bind(this));
							}
							
						}.bind(this)
					});
				
				}
			}.bind(this);
			
			if(!this.canvas.state.filledIn) updater.delay(this.params.delay);
			
		}, 

		updateflyOvers : function(event){
			var element = $( Event.element(event) );
			this.canvas.state.flownOver 	= (this.canvas		== element || element.descendantOf(this.canvas) );
			this.handler.state.flownOver 	= (this.handler		== element || element.descendantOf(this.handler) );
			this.initbehavior();
		},
		
		initbehavior : function(){
			if(this.canvas.state.filledIn) {
			
				if(this.canvas.state.visible){
					if( !this.handler.state.flownOver	&&	!this.canvas.state.flownOver	){ this._timedCanvasHide(); }
				}
				else if(!this.canvas.state.visible){
					if( this.handler.state.flownOver	&&	this.canvas.state.flownOver		){ this._timedCanvasShow(); }
					if( this.handler.state.flownOver	&&	!this.canvas.state.flownOver	){ this._timedCanvasShow(); }
					if( !this.handler.state.flownOver	&&	!this.canvas.state.flownOver	){ this._timedCanvasHide(); }
				}
				
			}
		},
		
		eltListenerSwitcher : function(element, choice, callback){
			if('off' == choice) {
				Event.stopObserving(element,'mouseover', callback);
			} else {
				Event.observe(element, 'mouseover', callback);
			}
		},

		getCoordinates : function(elt){
			elt.state.position 		= elt.cumulativeOffset();
		},

		getDimensions : function(elt){
			elt.state.dimensions	= elt.getDimensions();
		},
		
		_hide : function(elt){elt.addClassName('hidden');elt.state.visible = false; },
		_show : function(elt){
			elt.hide();
			elt.removeClassName('hidden');
			new Effect.Appear(elt, {duration: 0.1});
			elt.state.visible = true;
			this.canvas.setStyle(this.canvasCss());
		},
		
		_timedCanvasHide : function(){
			var hide = function(){ if( !this.handler.state.flownOver	&&	!this.canvas.state.flownOver ) this._hide(this.canvas); }.bind(this);
			hide.delay(this.params.delay);
		},
		_timedCanvasShow : function(){
			var show = function(){ if( this.handler.state.flownOver || this.canvas.state.flownOver ) this._show(this.canvas); }.bind(this);
			show.delay(this.params.delay);
		},
		
		getWindowDim: function() { // RÃ©cupÃ¨re les dimensions de la fenÃªtre du navigateur
			var width 	= 0;
			var height 	= 0;
			if ( typeof(window.innerWidth) == 'number' ) {
				//Non-IE
				width 	= window.innerWidth;
				height 	= window.innerHeight;
			} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
				//IE 6+ in 'standards compliant mode'
				width 	= document.documentElement.clientWidth;
				height 	= document.documentElement.clientHeight;
			} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
				//IE 4 compatible
				width 	= document.body.clientWidth;
				height 	= document.body.clientHeight;
			};
			return [width, height];
		}
	 
	};
