
	/*\
	 *
	 * Contient les scripts communs à toutes les pages du site
	 * /!\ Attention à bien blinder tout ce que vous faîtes !!!
	 * 
	\*/

	/* debug feature */
	
	function trace(s) {
		var method = 'info'; // default
		if (arguments[1]){
			var options = arguments[1];
			if (options.method) method = options.method;
		}
		try { console[method](s) } catch (e) { /*alert(s)*/ }
	};

	/* Prototype browser detection improvement */

	Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
	Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
	Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;

	/* Notifications */

	var notificationsbehaviors = function(){
		
		
		// notifications bar existence
		var notificationsBar = $('notifications-bar') || false;
		
		if(notificationsBar) {
			var notificationsBarItems = notificationsBar.select('li.item');
			if (notificationsBar && notificationsBarItems) notificationsBarItems.each(function(item){
				
				var preview						= item.down('.notifications-preview');
				if (preview) var previewhandler	= item.down('.preview-handler').down('img');
					
				var notificationItem = new NotificationsManager(item);
				
				if (preview && previewhandler){
					
					new DomElementsController(previewhandler, preview, {
						targetAlign		: 'right',
						event			: 'click',
						toggleClassName	: 'elsewhere',
						afterOpen		: function(){item.addClassName('active');},
						afterClose		: function(){item.removeClassName('active');}
					});
					
					
				} // if (preview && previewhandler)
					
			});
		}
   
	}
	
	document.observe('dom:loaded', notificationsbehaviors);;
var ajaxBox;

function openNewMessage(params) {
	// Si un form de réponse ou de transfert est ouvert on le ferme pour éviter d'avoir plusieurs champs destinataire dans la page
	if ($('toggledForm')) MessageDetailManager.hideForm();
	if(params !=null)	ajaxBox = new AjaxPopupBox("/messages/nouveaumessage/ajax_NewMessage.jsp?"+params); // voir remarque ci-dessous
	else	ajaxBox = new AjaxPopupBox("/messages/nouveaumessage/ajax_NewMessage.jsp");
};
function openNewMiseEnrelationDirect(params) {
	if(params !=null) ajaxBox = new AjaxPopupBox("/messages/miseenrelationdirecte/ajax_MRD.jsp?"+params); // voir remarque ci-dessous
	else  ajaxBox = new AjaxPopupBox("/messages/miseenrelationdirecte/ajax_MRD.jsp");
};
function openTest(params) {
	if(params !=null)	ajaxBox = new AjaxPopupBox("/messages/repondremessage/ajax_RepondreMessage.jsp?"+params); // voir remarque ci-dessous
	else	ajaxBox = new AjaxPopupBox("/messages/repondremessage/ajax_RepondreMessage.jsp");
};
function openNewLookTeasing() {
	
	var fileref = document.createElement("link");
	fileref.setAttribute("rel", "stylesheet");
	fileref.setAttribute("type", "text/css");
	fileref.setAttribute("href", "/css/projects/newlook-teasing.css");
	document.getElementsByTagName("head")[0].appendChild(fileref);
	ajaxBox = new AjaxPopupBox("/newlook/generic/dashboard-teasing.jsp");
	
};
/********
Bouziane
********/
function openJoinFiles(params) {
	// Si un form de réponse ou de transfert est ouvert on le ferme pour éviter d'avoir plusieurs champs destinataire dans la page
	if ($('toggledForm')) MessageDetailManager.hideForm();
	if(params !=null)	{
		ajaxBox = new AjaxPopupBox("/outils/ajaxjoindrefichier/ajax_JoindreFichier.jsp?redirect1="+params); // voir remarque ci-dessous
	}
};

/***************
	REMARQUE DK : Utilisez le second argument du constructeur de AjaxPopupBox en passant une map paramètre/valeur. 
	C'est plus propre et plus souple que d'ajouter une chaine du genre "?param1=val1&param2=val2" à la fin de l'URL.
	Exemple : ajaxBox = new AjaxPopupBox(URL, { param1: "val1", param2: "val2" } );
***************/

var MessageDetailManager = {
	
	isReceived: null, 
	id: null,
	xhrOnAir: false,
	
	// Chargement et affichage du formulaire
	loadForm: function(action) {
		var params = { action: action };
		params[this.isReceived ? "msgReceivedId" : "msgSentId"] = this.id;
		this.sendAjaxRequest(params);
	},

	// Envoi des champs du formulaire
	submitForm:	function() { this.sendAjaxRequest( $('toggledForm').serialize(true) ); },

	// Envoi de la requête Ajax
	sendAjaxRequest: function(params) {
		
		var spinner = $('messagesspinner') || false;
		
		if(!this.xhrOnAir){ // if no other xhr on air
		
			// Ajout d'un paramètre pour forcer l'interprétation de la requête en UTF-8
			if (params) params["form-encoding"] = "UTF-8";
			new Ajax.Updater({ success:'toggler' }, '/messages/repondremessage/ajax_RepondreMessage.jsp', {
				parameters: params,
				evalScripts: true,
				onCreate: function(){this.xhrOnAir = true; if(spinner) spinner.removeClassName('hidden');},
				onSuccess: function(){this.showForm(); this.xhrOnAir = false; if(spinner) spinner.addClassName('hidden');}.bind(this),
				onComplete: function(){this.xhrOnAir = false; if(spinner) spinner.addClassName('hidden');}
			});
		
		}
	},
	
	// Affichage/disparition du formulaire
	showForm: 	function() { $('menuMessages').hide(); new Effect.Appear('togglerWrapper'); },
	hideForm: 	function() { $('toggler').update(); new Effect.Appear('menuMessages'); },
	
	// Réaffichage des actions du formulaire et disparition de l'info-box
	resetMessageView: function() {
		new Effect.Appear('menuMessages');
		new Effect.SlideUp('toggler', { delay: 2, afterFinish: function(){$('toggler').update().show();} });
	}

}
;
var quoteUnreadOnlyStatus = false;
	
	Event.observe(window, 'load', function(){
	
		// Gestion du focus sur le champ de recherche des messages recus
		var _keywordInputReceived = $('_keywordInputReceived');
		if (_keywordInputReceived) {
			var toggleClassName = 'emptyInput';
			initInput(_keywordInputReceived, lang['messages.search.tooltip.received'], toggleClassName);
		}
	
		// Gestion du focus sur le champ de recherche des messages envoyés
		var _keywordInputSent = $('_keywordInputSent');
		if (_keywordInputSent) {
			var toggleClassName = 'emptyInput';
			initInput(_keywordInputSent, lang['messages.search.tooltip.sent'], toggleClassName);
		}

		// Gestion des select boxes permettant les coches sélectives
		var quoteSelections = $$('.quoteSelection');
		quoteSelections.each(function(quoteSelection){
			Event.observe(quoteSelection, 'change', function(){
			
				var response = $F(quoteSelection);
				var currentList = quoteSelection;
				
				switch (response)
				{
					case 'all'		: selectAll(currentList, 1); 		break;
					case 'none'		: selectNone(currentList, 2); 		break;
					case 'read'		: selectRead(currentList, 3); 		break;
					case 'unread'	: selectUnread(currentList, 4); 	break;
					default			: syncSelectBoxes (0);				break;
				}
			});
		});
		
	});
	
	function selectAll(e, n) {
		var checkboxes = e.up('form').getElementsBySelector('input[type="checkbox"]');
		checkboxes.each(function(checkbox){checkbox.checked = true;});
		syncSelectBoxes(n);
	}
	
	function selectNone(e, n) {
		var checkboxes = e.up('form').getElementsBySelector('input[type="checkbox"]');
		checkboxes.each(function(checkbox){checkbox.checked = false;});
		syncSelectBoxes(n);
	}
	
	function selectRead(e, n) {
		selectNone(e);
		var checkboxes = e.up('form').getElementsBySelector('input[type="checkbox"][class!="unread"]');
		checkboxes.each(function(checkbox){checkbox.checked = true;});
		syncSelectBoxes(n);
	}
	
	function selectUnread(e, n) {
		selectNone(e);
		var checkboxes = e.up('form').getElementsBySelector('input[type="checkbox"][class="unread"]');
		checkboxes.each(function(checkbox){checkbox.checked = true;});
		syncSelectBoxes(n);
	}
	
	function syncSelectBoxes(choiceId){
		var quoteSelections = $$('.quoteSelection');
		quoteSelections.each(function(quoteSelection){
			quoteSelection.down(choiceId).selected = true;
		});
	}
	
	function initInput(e, message, toggleClassName){
	
		var form = e.up('form');
		var button = form.down('a.buttonLink') || form.down('button');
		
		if ( !e.present() && ($F(e) != message) ) { fillInput(e, message, toggleClassName); };
		
		Event.observe(e, 'focus',function(){ clearInput(e, message, toggleClassName); });
		
		Event.observe(e, 'blur', function(){ fillInput(e, message, toggleClassName); });
		
		// on reprend le contrôle sur le pseudo-bouton de type <a>.
		if (button.tagName == 'A') {
		
			button.setAttribute('onclick', ''); 
			Event.observe(button, 'click', function(){ if( $F(e) != message ){ form.submit(); return false; } else { return false; }; });
			
		};
		
	} // initInput()
	
	function clearInput(e, message, toggleClassName) {
		if ( $F(e) == message ) e.setAttribute('value', '');
		e.removeClassName(toggleClassName);
	}
	
	function fillInput (e, message, toggleClassName) {
		if ( /*!e.present()*/ $F(e) == "" ) e.setAttribute('value', message);
		if ( $F(e) == message ) e.addClassName(toggleClassName);
	}
	
	// Gestion du bug des boutons multiples dans un formulaire sous IE
	function neutralizeSiblingButtons(currentButton){
		var isIE6 = false /*@cc_on || @_jscript_version <= 5.7 @*/;
		if (isIE6) {
			var siblingButtons = currentButton.siblings();
			siblingButtons.each(function(buttonToNeutralize){
				buttonToNeutralize.name="";
			});
		}
	};
/*
 * Gestion des choix de destinataires sur les champs autocompletion pour le projet Messagerie
 * IMPORTANT : Ce script ne fonctionne qu'avec un seul champ d'autcompletion dans une même page.
 */
var RecipientManager = {
	
	input: null, div: null, addLink: null, recipients: $A([]),
	
	reset: function() { with(this){input=null;div=null;addLink=null;recipients= $A([]);} },
	
	init: function(recipMap, insertForbidden) {
		
		// Callback pour simuler l'action quand on séléctionne un choix (onBlurAutocomplete est dans autocompletion.js)
		onBlurAutocomplete = function(spans) { 
			if (typeof lastAutocompleteSuggestion != "undefined") {
				// Patch pour corriger un effet de bord du correctif de getSuggestion dans autocompletion.js utilisant déjà un timeout
				window.setTimeout(function(){lastAutocompleteSuggestion = null;},150);
			}
			if (spans) RecipientManager.create(spans[0].innerHTML, spans[1].innerHTML); 
		};
		
		// Préparation de l'affichage en dessous de l'input
		this.reset();
		this.input = $("messageRecipientsField");
		/* ce mode d'insertion ne fonctionne pas sous IE au niveau du DOM
		new Insertion.After(this.input,
			  "<div id='messageRecipients' style='display:none;'>"
			+ "<a id='recipientAddLink' onclick='RecipientManager.insertMode();' href='javascript:void(0);' style='display:none;'>" 
			+ lang["messages.recipientmanager.addRecipients"] //"Ajouter d'autres destinataires" 
			+ "</a></div>");
		*/
		
		// Crée un nouvel élément <div> en dessous de l'input
		var newDiv = document.createElement('div');
		newDiv.setAttribute('id', 'messageRecipients');
		$(newDiv).hide();
		
		// Crée un descendant <a>
		var newA = document.createElement('a');
		newA.setAttribute('id',			'recipientAddLink');
		newA.setAttribute('href',		'javascript:RecipientManager.insertMode()');
		$(newA).update(""+lang['messages.recipientmanager.addRecipients']);//"Ajouter d'autres destinataires"
		newA.hide();
		
		// Insère le nouveau <a> dans le nouveau <div>
		newDiv.appendChild(newA);
		
		// ajoute ce nouvel ensemble à la suite du input
		this.input.up().insertBefore(newDiv,this.input.nextSibling);
				
		this.div = $("messageRecipients");
		this.addLink = $("recipientAddLink");
		
		// Si des recipients sont passés, on les insert par défaut
		if (recipMap) {
			recipMap = $H(recipMap);
			if (recipMap.size()>0) {
				var that = this;
				recipMap.each(function(recip){ that.create(recip.key,recip.value,null,insertForbidden); });
				if (insertForbidden) {
					this.noInsertMode();
				} else {
					this.viewMode();
				}
			}
		} else {
			this.insertMode();
		}
		
		// Ajout d'un message dans l'input et branchement d'un listener pour le faire disparaître
		this.input.addClassName("defaultValue");
		this.input.value = lang['messages.recipientmanager.inputMessage']
		var that = this;
		var onFocusListener = function() { 
			that.input.value = "";
			that.input.removeClassName("defaultValue");
			Event.stopObserving(that.input,"focus", onFocusListener); 
		};
		Event.observe(that.input,"focus", onFocusListener);
	},
	
	create: function(id,name,isInit,insertForbidden) {
		if (!this.recipients.include(id)) {
			if(this.recipients.length<25) {
				this.div.show();
				this.recipients.push(id);
				/* ce mode d'insertion ne fonctionne pas sous IE au niveau du DOM
				new Insertion.Top(this.div,
					 "<span id='recipient-" + id + "' class='recipient'>" 
					+ name
					+ "<a href='javascript:void(0)' onclick=\"RecipientManager.remove('" + id + "');\"><img src='/v_img/0_dot.gif' alt='X' /></a>"
					+ "<input type='hidden' name='recipients[]' value='" + id + "' />"
					+ "<input type='hidden' name='recipientsName[]' value='" + name + "' />"
					+ "</span> "
				);
				*/
				
				// Crée un element <span>
				var newSpan = document.createElement('span');
				newSpan.setAttribute('id',			'recipient-' + id);
				$(newSpan).addClassName('recipient');
				var nameValid = unescape( name );
				nameValid = nameValid.replace(/\+/g," ");
				nameValid = decodeURI(nameValid);
				$(newSpan).update(nameValid);
				
				// Crée un element <a>
				var newA = document.createElement('a');
				newA.setAttribute('href',		'javascript:RecipientManager.remove("'+ id +'")');
				
				// Crée un element <img>
				var newImg = document.createElement('img');
				newImg.setAttribute('src',	'/v_img/0_dot.gif');
				newImg.setAttribute('alt',	'X');
				
				// Crée un 1er element <input>
				var newInput1 = document.createElement('input');
				newInput1.setAttribute('type',	'hidden');
				newInput1.setAttribute('name',	'recipients[]');
				newInput1.setAttribute('value',	id);
				
				// Crée un 2nd element <input>
				var newInput2 = document.createElement('input');
				newInput2.setAttribute('type',	'hidden');
				newInput2.setAttribute('name',	'recipientsName[]');
				newInput2.setAttribute('value',	name);
				
				// Reconstruction et insertion
				if (!insertForbidden) {
					newA.appendChild(newImg);
					newSpan.appendChild(newA);
				}
				newSpan.appendChild(newInput1);
				newSpan.appendChild(newInput2);
				this.div.insertBefore(newSpan, this.addLink);
				
				// Ajout d'un espace juste après le span pour gérer correctement les retours à la ligne
				var newEmptySpace = document.createTextNode(" ");
				this.div.insertBefore(newEmptySpace, this.addLink);
			}
			else {
				alert(lang['messages.recipientmanager.overmax']);
			}
		}

		if (!isInit) {
			this.input.clear();
			var that = this;
			setTimeout(function(){try{that.input.focus();}catch(e){}},10);
		}
	},
	
	remove: function(id) {
		this.recipients = this.recipients.reject(function(obj){ return obj == id; });
		$("recipient-" + id).remove();
		if (this.recipients.length <= 0) {
			this.div.hide();
			this.insertMode();
		}
	},
	
	insertMode:	function() { this.addLink.hide(); this.input.show();},
	noInsertMode:	function() { this.addLink.hide(); this.input.hide();},
	viewMode: 	function() { this.addLink.show(); this.input.hide(); }
}
;;
var _inputField=null;
var _column=null; 
var _table=null;

var _fcnClass=""; 
var _method="";

var _lang="";
var _country="";
var _limit="";
var _arg0="";
var _useSession="";

var _oldInputFieldValue="";
var _currentInputFieldValue="";
var _resultCache=new Object();
var _masterCache=new Object();
var _masterTimeout=0;
  
var cacheResults = _cacheResults;
var readCacheResults = _readCacheResults;
var metsEnPlace = _metsEnPlace;

var clearDiv = _clearDiv;

var onBeforeUpdateField = function () {};
var onAfterUpdateField = function () {};
var onBlurAutocomplete = function () {};

var lastAutocompleteSuggestion = null;

function initAutoComplete(field, table, column, fcnClass, method, lang, country, limit,arg0, useSession)
{
	createMainAutoCompletionDiv();
	_useSession = useSession;
	_inputField=document.getElementById(field);
	_fcnClass=fcnClass;
	_method=method;
	_limit = limit;
	_arg0 = arg0;
	_lang = lang;
	_country = country;
	_table=table;
  	_column=column;
  	_inputField.autocomplete="off";
  	setCompleteDivSize();  
  	_currentInputFieldValue=_inputField.value;
  	_oldInputFieldValue=_currentInputFieldValue;
  	cacheResults(_inputField,"",new Array());
  	document.onkeydown=onKeyDownHandler;
  	_inputField.onkeyup=onKeyUpHandler;
  	_inputField.onblur=onBlurHandler;
  	window.onresize=onResizeHandler;
  	_masterTimeout = setTimeout("mainLoop()",200);
  	//Déplacé dans onBlurHandler
  	//field.onBlur = function() { clearTimeout(_masterTimeout); };
}

/**********************************
* METHODES POUVANT ETRE SURCHAGE 
* GESTION GRAPHIQUE SPECIFIQUE
***********************************/
function _cacheResults(field,debut,suggestions)
{
	if (_masterCache[field.id]) {
		_masterCache[field.id][debut]=suggestions;
	}
	else {
		_masterCache[field.id]=new Array("",new Array());
		_masterCache[field.id][debut]=suggestions;
	}
}

function _readCacheResults(field,current)
{
	if (_masterCache[field.id]) {
		return _masterCache[field.id][current];
	}
	else {
		_masterCache[field.id]=new Array("",new Array());
		return _masterCache[field.id][current];
	}
}

function _clearDiv()
{
  	if (_completeDiv !== null && _completeDiv.childNodes !== null) {
	  	while(_completeDiv.childNodes.length>0)
	  	{
	    	_completeDiv.removeChild(_completeDiv.childNodes[0]);
	  	}
	}
}

function _metsEnPlace(liste)
{
  	while(_completeDiv.childNodes.length>0)
  	{
    	_completeDiv.removeChild(_completeDiv.childNodes[0]);
  	}
  	
  	// mise en place des suggestions
  	for(var f=0; f<liste.length; ++f)
  	{
    	var nouveauDiv=document.createElement("DIV");
    	nouveauDiv.onmousedown=divOnMouseDown;
    	nouveauDiv.onmouseover=divOnMouseOver;
    	nouveauDiv.onmouseout=divOnMouseOut;   
    	setStylePourElement(nouveauDiv,"AutoCompleteDiv");
    	var nouveauSpan;
    	if (typeof liste[f] == "string") { 
    		nouveauSpan=document.createElement("SPAN");
    		nouveauSpan.innerHTML=liste[f];
    		nouveauDiv.appendChild(nouveauSpan);
    	}
    	else {
	    	var innerResult = "";
    		for (y=0;y<liste[f].length;y++)
    		{
    			innerResult = "";
    			nouveauSpan=document.createElement("SPAN");
    			nouveauSpan.className = "data" + y;
    			innerResult += liste[f][y];
	    		nouveauSpan.innerHTML=innerResult;
		    	nouveauDiv.appendChild(nouveauSpan);
    		}
    	}
    	_completeDiv.appendChild(nouveauDiv);
  	}
  	PressAction();
  	if(_completeDivRows>0)
  	{
    	_completeDiv.height=16*_completeDivRows+4;
  	}
  	else
  	{
    	hideCompleteDiv();
  	}
}

/**********************************
**********     FIN     ************
***********************************/

function mainLoop()
{
  	if(_oldInputFieldValue!=_currentInputFieldValue)
  	{
	    //var valeur=escapeURI(_currentInputFieldValue);
	    var valeur=_currentInputFieldValue;
	    var suggestions=readCacheResults(_inputField,_currentInputFieldValue);
	    if(suggestions)
	    { 
	    	metsEnPlace(suggestions);
	    }
	    else
	    {
	    	getSuggestions(valeur);
	    }
	    _inputField.focus();
	}
	_oldInputFieldValue=_currentInputFieldValue;
	setTimeout("mainLoop()",200);
	return;
}

function getSuggestions(valeur){
	if (_useSession == "1")
	{
		sb.callDynamicForDWR(_method, [valeur, _limit], 
		{ 
			callback: function _callBack(data) {
				if (data !== null && typeof data == "object") 
				{ 
					cacheResults(_inputField,valeur, data); 
					metsEnPlace(data);
				} 
			}
		} 
		);			
	}
	else
	{
		AutoCompletionUtility.getSuggestions(
			valeur, _table, _column, _fcnClass, _method, _lang, _country, _limit,_arg0, 
			{ 
				callback: function _callBack(data) {
					if (data !== null && typeof data == "object") 
					{ 
						cacheResults(_inputField,valeur, data); 
						metsEnPlace(data);
					} }
			} 
		);
	}
}

function escapeURI(La)
{
  	if(escape) { return escape(La); }
  	if(encodeURIComponent) { return encodeURIComponent(La); }
}

function addCSSRule(nom, rule)
{
  	if (document.stylesheets)
  	{
    	var rules=document.stylesheets[0];
    	if(rules.addRule)
    	{ // méthode IE
      		rules.addRule(nom, rule);
    	}
    	else 
    	if(rules.insertRule)
    	{ // méthode DOM
      		rules.insertRule(nom+" { "+rule+" }",rules.cssRules.length);
    	}
  	}
}

function initStyle(){}

function setStylePourElement(c,name) {
	c.className=name;
}

function calculateOffsetLeft(r){
  	return calculateOffset(r,"offsetLeft");
}

// calcule le décalage vertical
function calculateOffsetTop(r){
  	return calculateOffset(r,"offsetTop");
}

function calculateOffset(r,attr){
  	var kb=0;
  	while(r)
  	{
    	kb+=r[attr];
    	r=r.offsetParent;
  	}
  	return kb;
}

function calculateWidth(){
  	return _inputField.offsetWidth-2*1;
}

function setCompleteDivSize()
{
  	try
  	{
	  	if(_completeDiv)
	  	{
	    	_completeDiv.style.left=calculateOffsetLeft(_inputField)+"px";
	    	_completeDiv.style.top=calculateOffsetTop(_inputField)+_inputField.offsetHeight-1+"px";
	    	_completeDiv.style.width=calculateWidth()+"px";
	  	}
  	}
  	catch (e) 
  	{} // try/catch ajouté pour éviter une erreur quand le calcul de la Div n'est pas possible
}

function createMainAutoCompletionDiv()
{
	if( $('completeDiv') ) {return;}
		initStyle();
		var borderLeftRight=1;
		var borderTopBottom=1;
		  _completeDiv=document.createElement("DIV");
		  _completeDiv.id="completeDiv";
		  _completeDiv.style.borderRight="black "+borderLeftRight+"px solid";
		  _completeDiv.style.borderLeft="black "+borderLeftRight+"px solid";
		  _completeDiv.style.borderTop="black "+borderTopBottom+"px solid";
		  _completeDiv.style.borderBottom="black "+borderTopBottom+"px solid";
		  _completeDiv.style.zIndex="100";
		  _completeDiv.style.paddingRight="0";
		  _completeDiv.style.paddingLeft="0";
		  _completeDiv.style.paddingTop="0";
		  _completeDiv.style.paddingBottom="0";
		  _completeDiv.style.visibility="hidden";
		  _completeDiv.style.position="fixed";
		  _completeDiv.style.backgroundColor="white";
		document.body.appendChild(_completeDiv);
		setStylePourElement(_completeDiv,"AutoCompleteDivListeStyle");
}

var _lastKeyCode=null;

// Handler pour le keydown du document
var onKeyDownHandler = function(event)
{
  	// accès evenement compatible IE/Firefox
  	if(!event&&window.event) {
    	event=window.event;
  	}
  	// on enregistre la touche ayant déclenché l'evenement
  	if(event) {
	    _lastKeyCode=event.keyCode;
  	}
  	// Si on est dans le champ, on bloque la propagation de la touche entrée et on sort du champ
  	if (Event.KEY_RETURN == event.keyCode && Event.element(event) == _inputField)
  	{
		_inputField.blur();
		setTimeout(function(event){
			Event.stop(event);
			if ($('completeDiv')) $('completeDiv').remove();
  		}, 250);
  		
  	}
}

var _eventKeycode = null;
var onKeyUpHandler = function(event)
{
  	if(!event&&window.event) {
    	event=window.event;
  	}
  	_eventKeycode=event.keyCode;
  	
  	// Dans les cas touches touche haute(38) ou touche basse (40)
  	if(_eventKeycode==40||_eventKeycode==38) {
    	// on autorise le blur du champ (traitement dans onblur)
    	blurThenGetFocus();
  	}
  	
  	// taille de la selection
  	var N=rangeSize(_inputField);
  	// taille du texte avant la selection (selection = suggestion d'autocomplétion)
  	var v=beforeRangeSize(_inputField);
  	// contenu du champ texte
  	var V=_inputField.value;
  	if(_eventKeycode!=0)
  	{
    	if(N>0&&v!=-1)
    	{
      		// on recupere uniquement le champ texte tapé par l'utilisateur
      		V=V.substring(0,v);
    	}
    	// 13 = touche entrée
    	if(_eventKeycode==13||_eventKeycode==3)
    	{
	      	var d=_inputField;
		    // on mets en place l'ensemble du champ texte en repoussant la selection
		    if(_inputField.createTextRange)
		    {
		        var t=_inputField.createTextRange();
		        t.moveStart("character",_inputField.value.length);
		        _inputField.select()
		    }
		    else
		    if (d.setSelectionRange)
		    {
		        _inputField.setSelectionRange(_inputField.value.length,_inputField.value.length)
		    }
    	}
    	else
    	{
      		// si on a pas pu agrandir le champ non selectionné, on le mets en place violemment.
      		if(_inputField.value!=V)
      		{
        		_inputField.value=V
      		}
    	}
  	}
  	// si la touche n'est ni haut, ni bas, on stocke la valeur utilisateur du champ
  	if(_eventKeycode!=40&&_eventKeycode!=38) {
    	// le champ courant n est pas change si key Up ou key Down
  		_currentInputFieldValue=V;
  	}
  	if(handleCursorUpDownEnter(_eventKeycode)&&_eventKeycode!=0) {
    	// si on a préssé une touche autre que haut/bas/enter
    	PressAction();
  	}
}

// Change la suggestion selectionné.
// cette méthode traite les touches haut, bas et enter
function handleCursorUpDownEnter(eventCode)
{
  	if(eventCode==40)
  	{
    	highlightNewValue(_highlightedSuggestionIndex+1);
    	return false;
  	}
  	else
  	if(eventCode==38)
  	{
    	highlightNewValue(_highlightedSuggestionIndex-1);
    	return false;
  	}
  	else
  	if(eventCode==13||eventCode==3)
  	{
    	return false;
  	}
  	return true
}

var _completeDivRows = 0;
var _completeDivDivList = null;
var _highlightedSuggestionIndex = -1;
var _highlightedSuggestionDiv = null;

// gère une touche pressée autre que haut/bas/enter
function PressAction()
{
  	_highlightedSuggestionIndex=-1;
  	var suggestionList=_completeDiv.getElementsByTagName("div");
  	var suggestionLongueur=suggestionList.length;
  	
  	// on stocke les valeurs précédentes
  	// nombre de possibilités de complétion
  	_completeDivRows=suggestionLongueur;
  	// possiblités de complétion
   	_completeDivDivList=suggestionList;
  	// si le champ est vide, on cache les propositions de complétion
  	if(_currentInputFieldValue==""||suggestionLongueur==0)
  	{
    	hideCompleteDiv()
  	}
  	else
  	{
    	showCompleteDiv()
  	}
  	var trouve=false;
  	// si on a du texte sur lequel travailler
  	if(_currentInputFieldValue.length>0)
  	{
    	var indice;
    	// T vaut true si on a dans la liste de suggestions un mot commencant comme l'entrée utilisateur
    	for(indice=0; indice<suggestionLongueur; indice++)
    	{
      		if(getSuggestion(false,suggestionList.item(indice)).toUpperCase().indexOf(_currentInputFieldValue.toUpperCase())==0)
      		{
        		trouve=true;
        		break
      		}
    	}
  	}
  	// on désélectionne toutes les suggestions
  	for(var i=0; i<suggestionLongueur; i++)
  	{
    	setStylePourElement(suggestionList.item(i),"AutoCompleteDiv");
  	}
  	// si l'entrée utilisateur (n) est le début d'une suggestion (n-1) on sélectionne cette suggestion avant de continuer
  	if(trouve)
  	{
    	_highlightedSuggestionIndex=indice;
    	_highlightedSuggestionDiv=suggestionList.item(_highlightedSuggestionIndex);
  	}
  	else
  	{
    	_highlightedSuggestionIndex=-1;
    	_highlightedSuggestionDiv=null
  	}
  	var supprSelection=false;
  	switch(_eventKeycode)
  	{
	    // cursor left, cursor right, page up, page down, others??
	    case 8:
	    case 33:
	    case 34:
	    case 35:
	    case 35:
	    case 36:
	    case 37:
	    case 39:
	    case 45:
	    case 46:
	      // on supprime la suggestion du texte utilisateur
	      supprSelection=true;
	      break;
	    default:
	      break
	  }
  		// si on a une suggestion (n-1) sélectionnée
  		if(!supprSelection&&_highlightedSuggestionDiv)
  		{
	    	setStylePourElement(_highlightedSuggestionDiv,"AutoCompleteDivAct");
	    	var z;
	    	if(trouve) {
	      		z=getSuggestion(false,_highlightedSuggestionDiv).substr(0);
	    	}
	    	else {
	      		z=_currentInputFieldValue;
	    	}
	    	if(z!=_inputField.value)
	    	{
		     	if(_inputField.value!=_currentInputFieldValue)
		     	{
	        		return;
	      		}
	      		// si on peut créer des range dans le document
	      		if(_inputField.createTextRange||_inputField.setSelectionRange)
	      		{
					_inputField.value=z;
	      		}
	      		// on sélectionne la fin de la suggestion
	      		if(_inputField.createTextRange)
	      		{
	        		var t=_inputField.createTextRange();
	        		t.moveStart("character",_currentInputFieldValue.length);
	        		t.select()
	      		}
	      		else
	      		if(_inputField.setSelectionRange)
	      		{
	        		_inputField.setSelectionRange(_currentInputFieldValue.length,_inputField.value.length)
	      		}
	    	}
  		}
  		else
  		{
    		// sinon, plus aucune suggestion de sélectionnée
    		_highlightedSuggestionIndex=-1;
  		}
}

var _cursorUpDownPressed = null;

// permet le blur du champ texte après que la touche haut/bas ai été pressé.
// le focus est récupéré après traitement (via le timeout).
function blurThenGetFocus()
{
  	_cursorUpDownPressed=true;
  	_inputField.blur();
  	setTimeout("_inputField.focus();",10);
  	return
}

// taille de la selection dans le champ input
function rangeSize(n)
{
  	var N=-1;
  	if(n.createTextRange){
    var fa=document.selection.createRange().duplicate();
    N=fa.text.length
  }else if(n.setSelectionRange){
    N=n.selectionEnd-n.selectionStart
  }
  return N
}

// taille du champ input non selectionne
function beforeRangeSize(n){
  var v=0;
  if(n.createTextRange){
    var fa=document.selection.createRange().duplicate();
    fa.moveEnd("textedit",1);
    v=n.value.length-fa.text.length
  }else if(n.setSelectionRange){
    v=n.selectionStart
  }else{
    v=-1
  }
  return v
}

// Place le curseur à la fin du champ
function cursorAfterValue(n){
  if(n.createTextRange){
    var t=n.createTextRange();
    t.moveStart("character",n.value.length);
    t.select()
  } else if(n.setSelectionRange) {
    n.setSelectionRange(n.value.length,n.value.length)
  }
}


// Retourne la valeur de la possibilite (texte) contenu dans une div de possibilite
function getSuggestion(toInput,uneDiv,isOnMouseDown)
{
  	if(!uneDiv) {
    	return null;
  	}
  	var spans = uneDiv.getElementsByTagName('span');
  	if (spans.length>1) index=1; else index=0;
  	onBeforeUpdateField(spans);
  	var data = trimCR(uneDiv.getElementsByTagName('span')[index].firstChild.data);
  	if (toInput) { 
  		_inputField.value=data;
  	}
  	onAfterUpdateField(spans);

	  // Timeout ajouté pour corriger un bug sous IE :
	  // getSuggestion doit être appelé après onBluHandler, dans le cas d'un choix au clavier, or ce n'est pas le cas sous IE
	  // Le timeout sert à être sûr que le remplissage de lastAutocompleteSuggestion est bien fait en dernier
	  // TODO: Trouver comment s'assurer que les appels sont fait dans le bon ordre sans avoir recours au timeout peut élégant
	  if (!isOnMouseDown) {
		  window.setTimeout(function(){ lastAutocompleteSuggestion = spans; },100);
	  }
	  else {
	  	lastAutocompleteSuggestion = spans;
	  }
	  return data;
}

// supprime les caractères retour chariot et line feed d'une chaine de caractères
function trimCR(chaine){
  for(var f=0,nChaine="",zb="\n\r"; f<chaine.length; f++) {
    if (zb.indexOf(chaine.charAt(f))==-1) {
      nChaine+=chaine.charAt(f);
    }
  }
  return nChaine
}

// Cache completement les choix de completion
function hideCompleteDiv(){
  _completeDiv.style.visibility="hidden";
}

// Rends les choix de completion visibles
function showCompleteDiv(){
  _completeDiv.style.visibility="visible";
  setCompleteDivSize()
}

// Change la suggestion en surbrillance
function highlightNewValue(C){
  if(!_completeDivDivList||_completeDivRows<=0) {
    return;
  }
  showCompleteDiv();
  if(C>=_completeDivRows){
    C=_completeDivRows-1
  }
  if(_highlightedSuggestionIndex!=-1&&C!=_highlightedSuggestionIndex){
    setStylePourElement(_highlightedSuggestionDiv,"AutoCompleteDiv");
    _highlightedSuggestionIndex=-1
  }
  if(C<0){
    _highlightedSuggestionIndex=-1;
    _inputField.focus();
    return
  }
  _highlightedSuggestionIndex=C;
  _highlightedSuggestionDiv=_completeDivDivList.item(C);
  setStylePourElement(_highlightedSuggestionDiv,"AutoCompleteDivAct");
  getSuggestion(true,_highlightedSuggestionDiv);
}

// Handler de resize de la fenetre
var onResizeHandler=function(event){
  // recalcule la taille des suggestions
  setCompleteDivSize();
}

// Handler de blur sur le champ texte
var onBlurHandler=function(event){
  // accès evenement compatible IE/Firefox
  if(!event&&window.event) {
    event=window.event;
  }
  if(!_cursorUpDownPressed)
  {
    // si le blur n'est pas causé par la touche haut/bas
    hideCompleteDiv();
    // Callback quand on sort du champ
    if(lastAutocompleteSuggestion != null) {
    	onBlurAutocomplete(lastAutocompleteSuggestion);
    }
    // Si la dernière touche pressée est tab, on passe au bouton de validation
    if(_lastKeyCode==9){
      //_submitButton.focus();
      _lastKeyCode=-1
    }
 	if($('completeDiv')) $('completeDiv').remove();
  }
  _cursorUpDownPressed=false
    
  // Reset de l'autocompleter en cas d'utilisation d'un autre dans la même page
  clearTimeout(_masterTimeout);
  lastAutocompleteSuggestion = null;
 };

// declenchee quand on clique sur une div contenant une possibilite
var divOnMouseDown=function(){
  // Ajout du 3ème paramètre pour traitement particulier lors du clic de la souris
  getSuggestion(true,this,true);
};

// declenchee quand on passe sur une div de possibilite. La div précédente est passee en style normal
var divOnMouseOver=function(){
  if(_highlightedSuggestionDiv) {
    setStylePourElement(_highlightedSuggestionDiv,"AutoCompleteDiv");
  }
  setStylePourElement(this,"AutoCompleteDivAct")
};

// declenchee quand la sourie quitte une div de possiblite. La div repasse a l'etat normal
var divOnMouseOut = function(){
  setStylePourElement(this,"AutoCompleteDiv");
};;
/********************
*Gestion des Catégories ,sous catégories & sous sous catéhories*
*********************/
var listSubCategorys = function (data) {
	 var idElement = document.getElementById("subCategory");
     if (data != null && typeof data == 'object') 
		DWRUtil.addOptions('subCategory', data);
	document.getElementById('subCategoryRow').style.display = (idElement.length >1) ? "visible" : "none" ;
} 

function getListSubCategorys(lang) {
	DWRUtil.removeAllOptions("subCategory");
	DWRUtil.removeAllOptions("subSubCategory");
	document.getElementById('subSubCategoryRow').style.display = (document.getElementById('subSubCategoryRow').length >1) ? "" : "none" ;
	var categoryId = document.getElementById("category").value;
	QuestionManager.getSubOrSubSubCategory(listSubCategorys, categoryId, lang );	
}

var listSubSubCategorys = function (data) {
	 var idElement = document.getElementById('subSubCategory');
     if (data != null && typeof data == 'object')
		DWRUtil.addOptions('subSubCategory', data);
	 document.getElementById('subSubCategoryRow').style.display = (idElement.length > 1) ? "visible" : "none" ;
} 

function getListSubSubCategorys(lang) {
	DWRUtil.removeAllOptions("subSubCategory");
	var subCategoryId = document.getElementById("subCategory").value;
	QuestionManager.getSubOrSubSubCategory(listSubSubCategorys, subCategoryId, lang );
}

/********************
*Gestion des Regions*
*********************/
var listCounty = function (data) {
	 var idElement = document.getElementById("county");
     if (data != null && typeof data == "object")
		DWRUtil.addOptions("county", data);
     document.getElementById("countyRow").style.display = (idElement.length > 1 || document.getElementById("country").value == "" ) ? "" : "none" ;
}; // listCounty

function getListCounty(lang, select) {
	DWRUtil.removeAllOptions("county");
	var countryIso = document.getElementById("country").value;
	County.getSortListCounty(listCounty, lang, countryIso, select);//get method of class
} // getListCounty

/********************
* METHODE SPECIFIQUE AU MR PROFILTHEQUE
********************/
var listCountyBis = function (data) {
	 var idElement = document.getElementById("county_value_0");
     if (data != null && typeof data == "object")
		DWRUtil.addOptions("county_value_0", data);
}; // listCounty

function getListCountyBis(lang, select) {
	DWRUtil.removeAllOptions("county_value_0");
	var countryIso = document.getElementById("country_value_0").value;
	County.getSortListCounty(listCountyBis, lang, countryIso, select);//get method of class
} // getListCounty


// @description : fonction necessaire pour le postback
//				  Utilise au sein de l'evenement onload du body
function refreshCounty(lang, select, execute) {
	if(execute)
		getListCounty(lang, select);
} // refreshCounty

/****************
*Gestion des Hub*
*****************/
var listSubCategory = function (data) {
	 //alert(DWRUtil.toDescriptiveString(data, 2));
	 var idElement = document.getElementById("subCategoryHub");
     if (data != null && typeof data == "object") {
		DWRUtil.addOptions("subCategoryHub", [{ id:'', name:lang["select"] }], "id", "name");
		DWRUtil.addOptions("subCategoryHub", data, "0", "1");
	 }
     document.getElementById("subCategoryRow").style.visibility = (idElement.length > 2) ? "visible" : "hidden" ;
}; // listSubCategory

function getListSubCategory(selectCountryId) {
	DWRUtil.removeAllOptions("subCategoryHub");
	var countryIso = document.getElementById(selectCountryId).value;
	HubManager.getHubCategoriesCountry(countryIso, listSubCategory);//get method of class
} // getListSubCategory

// @description : fonction necessaire pour le postback
//				  Utilise au sein de l'evenement onload du body
function refreshHubCategory(selectCountryId, execute) {
	if(execute)
		getListSubCategory(selectCountryId);
} // refreshHubCategory

/******************
*Criteria Manager *
*******************/
var listSubCategoryForCategory = function (data) {
	 var idElement = document.getElementById("subCategoryHub");
     if (data != null && typeof data == "object")
		DWRUtil.addOptions("subCategoryHub", data);
     document.getElementById("subCategoryHubRow").style.display = (idElement.length > 1) ? "" : "none" ;
}; // listSubCategoryForCategory

function getListSubCategoryForCategory(countryIso, hubCategoryId) {
	DWRUtil.removeAllOptions("subCategoryHub");
	CriteriaManager.getCountryHubSubCategoryMap(countryIso, hubCategoryId, listSubCategoryForCategory);//get method of class
} // getListSubCategoryForCategory


/****************
*Gestion des Evenements*
* Liste des catégories par pays
*****************/

var listEventSubCategory = function (data) {
	 //alert(DWRUtil.toDescriptiveString(data, 2));
	 var lstOpt = "<select id='" + $('subCategory').id + "' class='" + $('subCategory').className + "' name='" + $('subCategory').name + "' >";
   if (data != null && typeof data == "object") {
		//DWRUtil.addOptions("subCategory", [{ id:'', name:lang["select"] }], "id", "name");
		//DWRUtil.addRows("subCategory","<optgroup label=test>");
		lstOpt += "<option value=\"\">" + lang["select"] + "</option>";
		var isInOptgroup = false;
		for (var i = 0; i < data.length; i++) {
			if (data[i][0] > -1) {
				lstOpt += "<option value=\"" + data[i][0] + "\">" + data[i][1] + "</option>";
			} else {
				if (isInOptgroup) {
					lstOpt += "</optgroup>";
					isInOptgroup = false;
				}
				lstOpt += "<optgroup label=\"" + data[i][1] + "\">";
				isInOptgroup = true;
			}
		}
		if (isInOptgroup) {
			lstOpt += "</optgroup>";
		}
	 }
   lstOpt += "</select>";
	 // ATTENTION : faire un replace du select, car on ne peut pas mettre à jour l'intérieur d'un select à partir d'une string sous IE
	 // Voir bug IE sur innerHTML : http://support.microsoft.com/kb/276228/fr
	 $('subCategory').replace(lstOpt);
     //document.getElementById("subCategoryRow").style.display = ($('subCategory').length > 2) ? "" : "none" ;

   if ($('subCategory').length > 2) {
 	 $("subCategoryRow").show();
   } else {
   	$("subCategoryRow").hide() ;
   }
     
     
}; // listSubCategory

function getEventListSubCategory(selectCountryId) {
	//DWRUtil.removeAllOptions("subCategory");
	var countryIso = document.getElementById(selectCountryId).value;
	CalendarEventsManager.getEventCategoriesCountry(countryIso, listEventSubCategory);//get method of class
} // getListSubCategory

// @description : fonction necessaire pour le postback
//				  Utilise au sein de l'evenement onload du body
function refreshEventCategory(selectCountryId, execute) {
	if(execute)
		getEventListSubCategory(selectCountryId);
} // refreshHubCategory



/****************
*Gestion des Annonces / Offre d'emploi*
*****************/
var listSubCategoryAd = function (data) {
	 //alert(DWRUtil.toDescriptiveString(data, 2));
	 var idElement = document.getElementById("subCategoryAd");
     if (data != null && typeof data == "object") {
		DWRUtil.addOptions("subCategoryAd", [{ id:'', name:lang["select"] }], "id", "name");
		DWRUtil.addOptions("subCategoryAd", data, "0", "1");
	 }
     document.getElementById("subCategoryAdRow").style.visibility = (idElement.length > 2) ? "visible" : "hidden" ;
} ;// listSubCategoryAd

function getListSubCategoryAd(selectCountryId) {
	if(document.getElementById(selectCountryId).value == "" && document.getElementById("errorAdCategory") != null) // si aucun pays s?lectionn?
		document.getElementById("errorAdCategory").style.visibility = "hidden"; // on cache les erreurs
	DWRUtil.removeAllOptions("subCategoryAd");
	var countryIso = document.getElementById(selectCountryId).value;
	AdManager.getAdCategoriesCountry(countryIso, document.getElementById("typeAd").value, listSubCategoryAd);//get method of class
} // getListSubCategoryAd

var listSubIndustry = function (data) {
	 var idElement = document.getElementById("subIndustry");
     if (data != null && typeof data == "object") {
		DWRUtil.addOptions("subIndustry", [{ id:'', name:lang["select"] }], "id", "name");
		DWRUtil.addOptions("subIndustry", data, "0", "1");
	 }
     document.getElementById("subIndustryRow").style.visibility = (idElement.length > 2) ? "visible" : "hidden" ;
}; // listSubIndustry

function getListSubIndustry(lang, selectCountryId, restrictedIndustry) {
	DWRUtil.removeAllOptions("subIndustry");
	LocaleManager.getIndustryLanguage(lang, restrictedIndustry, listSubIndustry);//get method of class
} // getListSubIndustry

// @description : fonction necessaire pour le postback
//				  Utilise au sein de l'evenement onload du body
function refreshAdJob(lang, selectCountryId, select, type, execute, restrictedIndustry) {
	if(execute){
		getListSubCategoryAd(selectCountryId, type);
		getListSubIndustry(lang, selectCountryId, restrictedIndustry);
		getListCounty(lang, select);
	}
} // refreshAdJob

// @description : fonction necessaire pour le postback
//				  Utilise au sein de l'evenement onload du body
function refreshAdRegular(lang, selectCountryId, select, type, execute) {
	if(execute){
		getListSubCategoryAd(selectCountryId, type);
		getListCounty(lang, select);
	}
} // refreshAdRegular


/*******
Gestion des invitations
*******/
var invitationTemplates = function (data) {
	 var idElement = document.getElementsByName("language");
     if (data != null && typeof data == "object") {
     	if( document.getElementById( "subject" ) != null )
			document.getElementById( "subject" ).value = data[0];
		document.getElementById( "body" ).value = data[1];		
	}
}; // invitationTemplates

function getInvitationTemplate( language, firstname, inviteMember) {
	InvitationManager.getInvitationTemplateByLanguage( language, firstname, inviteMember, invitationTemplates );//get method of class
} // getInvitationTemplate

/*******
Gestion des invitations pour hub
*******/
var invitationHubMessage = function (data) {
     if ( data != null ) {
		document.getElementById( "body" ).value = data;		
	}
} ;// invitationHubMessage

function getHubInvitationMessage( hubLabel, language ) {
	HubManager.getHubInvitationMessageByLanguage( hubLabel, language, invitationHubMessage );//get method of class
} // getHubInvitationMessage

var var_categoryId=null; 
var var_subCategoryId=null; 
var var_subSubCategoryId=null;

function retrieveCategoryList(level, categoryId, lang) {
	QuestionManager.retrieveCategoryArray(null, level, categoryId, lang, loadDataBeta);
	}
	function loadDataBeta(data) {
	     if (data != null && typeof data == "object"){  
	     	DWRUtil.removeAllOptions("category");
			DWRUtil.addOptions("category", [{ categoryID:'', label:lang["select"]}], "categoryID", "label");
			DWRUtil.addOptions("category",data,"categoryID","label");     
	     }
		document.getElementById("categoryRow").style.visibility = (data.length > 1) ? "visible" : "hidden" ;
		document.getElementById("subCategoryRow").style.display = "none" ;
		document.getElementById("subSubCategoryRow").style.display = "none" ;
		if (data.length >= 1 && isExist(var_categoryId)) {
			document.getElementById("category").value = var_categoryId;
			getSubCategoryList();
		}
}

function getSubCategoryList(){ 
  	var parentCatg = document.getElementById("category").value;
    QuestionManager.retrieveCategoryArray(null, 1, parentCatg, null,{
    	callback:function(data){
     		if (data != null && typeof data == "object"){
        		DWRUtil.removeAllOptions("subCategory");     
				DWRUtil.addOptions("subCategory", [{ categoryID:'', label:lang["select"] }], "categoryID", "label");
				DWRUtil.addOptions("subCategory", data, "categoryID", "label");
     		}
	document.getElementById("subCategoryRow").style.display = (data.length > 1) ? "" : "none" ;
 	document.getElementById("subSubCategoryRow").style.display = "none" ;
	 		if (data.length >= 1 && isExist(var_subCategoryId)) {
				document.getElementById("subCategory").value = var_subCategoryId;
				getSubSubCategoryList();
			}
        }
    });
}

function getSubSubCategoryList(){
 	var parentCatg = document.getElementById("subCategory").value;
    QuestionManager.retrieveCategoryArray(null, 2, parentCatg, null,{
    	callback:function(data){
     		if (data != null && typeof data == "object"){
        		DWRUtil.removeAllOptions("subSubCategory");     
				DWRUtil.addOptions("subSubCategory", [{ categoryID:'', label:lang["select"] }], "categoryID", "label");
				DWRUtil.addOptions("subSubCategory", data, "categoryID", "label");			     
     		}
             document.getElementById("subSubCategoryRow").style.display = (data.length >= 1) ? "" : "none" ;
	 		if (data.length >= 1 && isExist(var_subSubCategoryId)) {
				document.getElementById("subSubCategory").value = var_subSubCategoryId;
			}
        }
    });
}

function getSimilarQuestions(){
	var keywords = document.getElementsByName("title")[0].value;
	QuestionManager.getSimilarQuestions(null,keywords,loadData2);
}

function loadData2(data) {
    	DWRUtil.setValue("qsimilaire","");
     if (data != null && typeof data == "object" && data.length > 0){     	
     	eUL = document.createElement("ul");
     	eLI = new Array();
		for(i=0; i<data.length;i++){
			eLI[i] = document.createElement("li");
			
			eAnchor = document.createElement("a");
			eAnchor.setAttribute("href","/questions/repondre/?questionId="+data[i][0]);
			eAnchor.appendChild(document.createTextNode(data[i][1]));
			eLI[i].appendChild(eAnchor);
						
			eUL.appendChild(eLI[i]);
		} 
	   document.getElementById("qsimilaire").appendChild(eUL);
	   $("qsimilaireTitle").show();
     } else {
     	$("qsimilaireTitle").hide();
     }
}

/*******
*Common*
********/
var startIndexSuivant = 0;
	var startIndexPrecedent = 0;
	var intermediaireVar = 0;

/*
  méthode retoune un tableau des Ids des écoles on top aléatoire
 
 		1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  
 																	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

suiv   startIndexPrecedent=0; f(0) startIndexSuivant=6;    1 2 3 4 5 6 
suiv   startIndexPrecedent=6; f(0) startIndexSuivant=12;				7 8 9 10 11 12
prec   startIndexSuivant=12; startIndexPrecedent=8; f(8);
 
 */
function retriveAllSchoolsId(action, maxResult, count){
			
	if(action==1){
		intermediaireVar = startIndexSuivant + maxResult;
		if(count-intermediaireVar <=0){
			startIndexPrecedent = startIndexSuivant;
			MBALogoOnTop.retriveAllSchoolsIdSensLess(startIndexSuivant, action, mbaLogoOnTop);
			startIndexSuivant = intermediaireVar - count;
		}else if((count-intermediaireVar) >0){
			startIndexPrecedent = startIndexSuivant;
			MBALogoOnTop.retriveAllSchoolsIdSensLess(startIndexSuivant, action, mbaLogoOnTop);
			startIndexSuivant = intermediaireVar;
		}
		
	
	}
	if(action==-1){
		intermediaireVar = startIndexPrecedent-maxResult;
		if(Math.abs(intermediaireVar) < maxResult){
			startIndexSuivant = startIndexPrecedent;
			if(intermediaireVar<0){
				startIndexPrecedent = count-Math.abs(intermediaireVar);
			}else{
				startIndexPrecedent = intermediaireVar;
			}
			
		}else if(Math.abs(intermediaireVar) >= maxResult){
			startIndexSuivant = startIndexPrecedent;
			if(intermediaireVar<0){
				startIndexPrecedent = count-Math.abs(intermediaireVar);
			}else{
				startIndexPrecedent = intermediaireVar;
			}
			
		}
		if(startIndexPrecedent==count){
			startIndexPrecedent=0;
		}
		MBALogoOnTop.retriveAllSchoolsIdSensLess(Math.abs(startIndexPrecedent), action, mbaLogoOnTop);
	}

	
}

var mbaLogoOnTop = function(data)
{
  if (data != null ){
	  var _result = '';
	  var _items = data[1];
	 _result = _result + '<table><tr>';
	  for ( var i = 0; i < _items.length; i++) {
		_result = _result + '<td><div class="onTopSchool">';
		_result = _result + '<div class="logoTopLeftCorner"></div><div class="logoTopRightCorner"></div><div class="logoBottomRightCorner"></div><div class="logoBottomLeftCorner"></div>';
		_result = _result + '<div class="logoTopBorder"></div><div class="logoRightBorder"></div><div class="logoBottomBorder"></div><div class="logoLeftBorder"></div>';
		_result = _result + '<a href="/mba/detailecole/?schoolId='+_items[i]+'">';
		_result = _result + '<img width="100" src="/servlet/MBALogo?type=0&amp;index=0&amp;schoolId='+_items[i]+'" /></a></div></td>';
	  }
	  _result = _result + '</tr></table>';
	 $('logoOnTopSchool').update(_result);
  }
}

function isExist( objetToTry ) {
	if ( objetToTry == null ) return false;
	else if ( typeof objetToTry == "undefined" ) return false;
	else if ( objetToTry == "undefined" ) return false;
	else return true;
}
 
;
