//Initialisation des variables global
var sso = new Object(); //Objet avec toutes les fonctions de SSO
var ie = (navigator.appName.toLowerCase().indexOf('microsoft')>-1) ? 1 : 0;
var sso_erreur_communication; //Variables pass?es entre le serveur et le client
var action_ajax = new Array();
var Repertoires, Liens, Tags, Formulaires;
var sso_event = window.event;
var compte_recup = 0; //Compteur pour la recuperation automatique des formulaires absent
var recup_old;
var tutorial_pos = '';
var lien_recup = ''; //
var swap_old, alerte_old, id_cible_old;
var t, t1, t2, t_alerte, t_compteur, t_decompte, t_pos;
var sso_tx,sso_ty;
var sso_disable_footer_bas = false;
function stoR(id, repertoire, nom, ouvert){
	Repertoires[Repertoires.length] = new Array();
	Repertoires[Repertoires.length-1]['id'] = id;
	Repertoires[Repertoires.length-1]['repertoire'] = repertoire;
	Repertoires[Repertoires.length-1]['nom'] = nom;
	Repertoires[Repertoires.length-1]['ouvert'] = ouvert;
}
function stoL(id, repertoire, prive, nom, id_tag, nb_click, url, description, nom_utilisateur, mot_de_passe, favicon){
	Liens[Liens.length] = new Array();
	Liens[Liens.length-1]['id'] = id;
	Liens[Liens.length-1]['repertoire'] = repertoire;
	Liens[Liens.length-1]['prive'] = prive;
	Liens[Liens.length-1]['nom'] = nom;
	Liens[Liens.length-1]['id_tag'] = id_tag;
	Liens[Liens.length-1]['nb_click'] = nb_click;
	Liens[Liens.length-1]['url'] = url;
	Liens[Liens.length-1]['description'] = description;
	Liens[Liens.length-1]['nom_utilisateur'] = nom_utilisateur;
	Liens[Liens.length-1]['mot_de_passe'] = mot_de_passe;
	Liens[Liens.length-1]['favicon'] = favicon;
}
function stoT(id, nom){
	Tags[Tags.length] = new Array();
	Tags[Tags.length-1]['id'] = id;
	Tags[Tags.length-1]['nom'] = nom;
}
function stoF(nom , formulaire){
	Formulaires[nom] = formulaire;
}
function addslashes(ch){
   ch = ch.replace(/\\/g,"\\\\")
   ch = ch.replace(/\'/g,"\\'")
   ch = ch.replace(/\"/g,"\\\"")
   return ch
}
function trim(s){
	return s.replace(/^\s+/, '').replace(/\s+$/, '');
}
String.prototype.htmlEntities = function(){
	var chars = new Array ( '&','à','á','â','ã','ä','å','æ','ç','è','é',
                            'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô',
                            'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À',
                            'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë',
                            'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö',
                            'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','"','ß','<',
                            '>','¢','£','¤','¥','¦','§','¨','©','ª','«',
                            '¬','­','®','¯','°','±','²','³','´','µ','¶',
                            '·','¸','¹','º','»','¼','½','¾');
	var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring',
                              'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
                              'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
                              'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
                              'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
                              'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
                              'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
                              'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
                              'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
                              'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
                              'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
                              'sup2','sup3','acute','micro','para','middot','cedil','sup1',
                              'ordm','raquo','frac14','frac12','frac34');
	newString = this;
	for (var i = 0; i < chars.length; i++){
	    myRegExp = new RegExp();
	    myRegExp.compile(chars[i],'g')
	    newString = newString.replace (myRegExp, '&' + entities[i] + ';');
	}
	return newString;
}
//Fonctions pour les Cookies
function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
  ((expires) ? "; expires=" + expires.toGMTString() : "") +
  ((path) ? "; path=" + path : "") +
  ((domain) ? "; domain=" + domain : "") +
  ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}
function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return '';
  } else begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1) end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}
function deleteCookie(name) {
     var expire = new Date ();
     expire.setTime (expire.getTime() - (24 * 60 * 60 * 1000));
     document.cookie = name + "=; expires=" + expire.toGMTString();
}
// Fonction trie
var multisort_col, multisort_dir, multisort_type;
function trie(tab, col, dir, type){
	multisort_col = col;
	multisort_dir = dir;
	multisort_type = type;
	tab.sort(multisort);
}
function multisort(a, b){
	if (multisort_type=='asc') {
		return (a[multisort_col].toUpperCase() > b[multisort_col].toUpperCase()) ? multisort_dir : -multisort_dir;
	} else {
		return (a[multisort_col] - b[multisort_col]) * multisort_dir;
	}
}
// Position X d'un objet
function findPosX(obj){
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x) curleft += obj.x;
	return curleft;
}
// Position Y d'un objet
function findPosY(obj){
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y) curtop += obj.y;
	return curtop;
}
function showPosition(e){
	if($('sso_formulaire')){
		obj = $('cadre_alerte');
		obj.style.left = (Event.pointerX(e) - Math.round(obj.offsetWidth / 2)) + 'px';
		obj.style.top = (Event.pointerY(e) + 15) + 'px';
	}
}
function showResponse(originalRequest){
	clearTimeout(t);sso.active_sso();
	$('sso_indic').style.visibility = 'hidden';
	eval(originalRequest.responseText);
	if(sso_erreur_communication){
		//Si le serveur n'a pas modifi? la valiable "sso_erreur_communication", affiche une erreur
		sso.alerte(Locale.erreur_communication);
	}
}
sso = {
	load_skin : function(){
		var skin_actu = $('sso_css1').href.split('/');
		skin_actu = skin_actu[skin_actu.length-1].split('.')[0];
		var skin = getCookie('ssofast_skin') ? getCookie('ssofast_skin') : 'fire';
		if(skin_actu != skin){
			if(ie){
				window.location = window.location;
			} else {
				$('sso_css1').href = 'skin/' + skin + '/' + skin + '.css';
				$('sso_css2').href = 'skin/' + skin + '/images.css';
				sso.set_footer_bas();
			}
		}
	},
	set_skin : function(skin){
		setCookie('ssofast_skin', skin, 0);
		if(ie){
			setCookie('ssofast_first_do', 'sso.mon_compte();', 0);
			window.location = window.location;
		} else {
			$('sso_load_skin').src = 'load_skin.php?skin=' + skin;
		}
	},
	moteur_recherche : function(image, lien, formulaire){
		$('sso_entete_option').style.visibility = lien ? '' : 'hidden';
		if (!lien) {
			image = lien = '';
			formulaire = '<form><input/></form>';
		}
		var old_cherche = $('sso_moteur_recherche_input') ? $('sso_moteur_recherche_input').value : '';
		var obj = document.createElement('div');
		obj.innerHTML='<table valign="middle"><tbody><tr><td id="' + (lien == 'ssofast' ? '' : 'sso_moteur_recherche_1') + '"' + (lien == 'ssofast' ? ' class="recherche"' : '') + '></td><td id="sso_moteur_recherche_2"></td><td><input type="image" src="skin/defaut/vide.gif" class="bouton_valider" onmouseover="this.className=\'bouton_valider2\'" onmouseout="this.className=\'bouton_valider\'" onclick="' + (lien == 'ssofast' ? 'sso.recherche();' : '$(\'sso_moteur_recherche_form\').submit();') + '"/></td></tr></tbody></table>';
		$('sso_entete').innerHTML = obj.innerHTML;
		if (lien != 'ssofast') {
    		var logo = document.createElement('a');
    		logo.setAttribute('href', lien);
    		logo.setAttribute('target', '_blank');
    		var tab_image = image.split(';');
    		for(var i=0; el=tab_image[i]; i++){
    			logo.appendChild(document.createElement('img'));
    			logo.lastChild.setAttribute('id', 'sso_moteur_recherche_image');
    			logo.lastChild.setAttribute('src', el);
    			logo.lastChild.setAttribute('border', '0');
    			logo.lastChild.setAttribute('onload', 'if($(\'sso_moteur_recherche_image\').width>150){$(\'sso_moteur_recherche_image\').width=150;}');
    			logo.appendChild(document.createElement('br'));
    		}
    		$('sso_moteur_recherche_1').appendChild(logo);
		}
		$('sso_moteur_recherche_2').innerHTML = formulaire;
		obj = $('sso_moteur_recherche_2').getElementsByTagName('form')[0];
		obj.setAttribute('target', '_blank');
		obj.setAttribute('id', 'sso_moteur_recherche_form');
		var tab_input = obj.getElementsByTagName('input');
		for(i=0; el=tab_input[i]; i++){
			if(!el.getAttribute('type') || el.getAttribute('type')=='text'){
				el.setAttribute('id', 'sso_moteur_recherche_input');
				el.setAttribute('autocomplete', 'off');
				el.setAttribute('value', old_cherche);
				var tmp = document.createElement('div');
				tmp.appendChild(el.cloneNode(true));
				obj.removeChild(el);
				obj.innerHTML += sso.encadre_input(tmp.innerHTML, 'input_connection', true);
				break;
			}
		}
		obj.lastChild.setAttribute('width', $('sso_moteur_recherche_input').offsetWidth + 2);
	},
	recherche : function(nb){
        if (ssofast_type_aff==0) {
			sso.alerte(Locale.erreur_affichage_recherche);
			sso.cible('bouton_type_aff');
			Event.observe('focus', 'mouseover', function(){$('focus').style.display='none';});
        } else {
            if(!nb){ nb=0; }
            $('reps').innerHTML = '';
            $('liens').innerHTML = '';
            $('sso_cadre_tags').style.display = '';
            //id, repertoire, prive, nom, id_tag, nb_click, url, description, nom_utilisateur, mot_de_passe, favicon
            txt = $('sso_moteur_recherche_input').value.toLowerCase();
    		cpt = 0;
            for(i = 0; li = Liens[i]; i++){
                if((li.nom && li.nom.toLowerCase().indexOf(txt) > -1)
                || (li.url && li.url.toLowerCase().indexOf(txt) > -1)
                || (li.description && li.description.toLowerCase().indexOf(txt) > -1)){
                    if (cpt>=ssofast_type_aff_nb*nb && cpt<ssofast_type_aff_nb*(nb+1)) {
                        sso.insert_lien(li);
                    }
                    cpt++;
                }
            }
    		nb_page = Math.ceil(cpt / ssofast_type_aff_nb);
    		if (nb_page > 1) {
    			mess = '';
    			if (nb_page>0) {
    				mess += '<span class="tag" onclick="sso.recherche(' + (nb>0?nb-1:nb_page-1) + ');"><< </span>';
    			}
    			mess += (nb+1) + '/' + nb_page;
    			if (nb_page>0) {
    				mess += '<span class="tag" onclick="sso.recherche(' + (nb<nb_page-1?nb+1:0) + ');"> >></span>';
    			}
    			el = document.createElement('div');
    			el.setAttribute('align', 'right');
    			el.innerHTML = mess;
    			$('liens').appendChild(el);
    		}
            sso.set_footer_bas();
            test_code($('sso_clef_de_cryptage').value, true, 'cell_test_code');
        }
        return false;
    },
	start : function(){
		//Creation du container pour les repertoires
		$('sso_appli').appendChild(document.createElement('ul'));
		$('sso_appli').lastChild.setAttribute('id', 'reps');
		$('sso_appli').lastChild.className = '';
		//Creation du container pour les liens
		$('sso_appli').appendChild(document.createElement('ul'));
		$('sso_appli').lastChild.setAttribute('id', 'liens');
		$('liens').appendChild(document.createElement('div'));
		$('liens').lastChild.setAttribute('id', 'separation_liens');
		$('separation_liens').setAttribute('style', 'visibility:hidden;height:1px;margin-left:16px;');
		if(ie){
			$('separation_liens').innerHTML = '<div style="height:1px;"/>';
		} else {
			$('separation_liens').innerHTML = '<div style="border-top:1px dotted"/>';
		}
		if (ssofast_type_aff==0) {
			$('sso_cadre_tags').style.display = 'none';
			$('bouton_type_aff_tri').style.display = 'none';
			//Creation des repertoires
			for(i=0; obj=Repertoires[i]; i++){
				sso.insert_rep(obj);
				//Si il est ouvert, creation des liens
				if(obj['ouvert']){
					sso.deploie(obj['id'], Liens.length+1);
				}
			}
			//Creation des liens sans repertoires
			for(i=0; obj=Liens[i]; i++){
				if (!obj['repertoire']){
					sso.insert_lien(obj);
				}
			}
			sso.active_drag();sso.active_drag();//2fois pour eviter le bug du Drag&drop qui ne fonctionne pas au debut
		} else {
			$('sso_cadre_tags').style.display = '';
			$('bouton_verrouiller').style.display = 'none';
			$('sso_nouveau_rep').style.display = 'none';
       		sso.insert_tag();
			sso.affiche_tag(0);
		}
		test_code($('sso_clef_de_cryptage').value, true, 'cell_test_code');
		//Affiche le nombre de liens
		if(Liens.length>0){
			$('sso_titre_marques_pages_nb').innerHTML = '(' + Liens.length + ')';
		}
		if(ssofast_donnee_verrouille==1){
			$('sso_creation').style.display = 'none';
		}
		if(ssofast_tutorial=='1'){
			setTimeout('tutorial_pos=\'\';sso.tutorial(\'\');', 1000);
		}
		if(ie && getCookie('ssofast_first_do')){
			eval(getCookie('ssofast_first_do'));
			deleteCookie('ssofast_first_do');
		}
	},
	set_footer_bas : function(){
		if (sso_disable_footer_bas==true) {
			return false;
		}
		if(!$('footer').getAttribute('old_pos')){
			sso.taille_fenetre();
			if($('footer_connection')){
				var avant = $('footer_connection').previousSibling;
			} else {
				var avant = $('footer').previousSibling;
			}
			if(avant){
				var p_mini = findPosY(avant) + avant.offsetHeight;
			}
			if($('footer_connection')){
				var p_actu = findPosY($('footer_connection')) + $('footer_connection').offsetHeight + $('footer').offsetHeight;
			} else {
				var p_actu = findPosY($('footer')) + $('footer').offsetHeight;
			}
			var p_nouv = sso_ty - p_actu - 10;
			if($('footer_connection')){
				if (findPosY($('footer_connection')) + p_nouv < p_mini){
					p_nouv = p_mini - findPosY($('footer_connection'));
				}
			} else {
				if (findPosY($('footer')) + p_nouv < p_mini){
					p_nouv = p_mini - findPosY($('footer'));
				}
			}
			if($('footer_connection')){
				new Effect.MoveBy('footer_connection', p_nouv, 0);
				new Effect.MoveBy('sso_cadre_login', p_nouv, 0);
			}
		} else {
			if(ie){
				var tab_sel = document.getElementsByTagName('select');
				for(var i=0; obj=tab_sel[i]; i++){
					obj.style.visibility = '';
				}
			}
			p_nouv = $('footer').getAttribute('old_pos');
			$('footer').removeAttribute('old_pos');
			new Effect.ScrollTo(document.body);
			setTimeout('$(\'footer\').style.background=\'\';', 1000);
			setTimeout('$(\'footer\').style.zIndex=0;', 1000);
			setTimeout('$(\'footer_page\').innerHTML=\'\';', 1000);
			setTimeout('$(\'footer_page\').style.height=\'\';', 1000);
		}
		if (p_nouv!=0) {
			sso_disable_footer_bas = true;
			new Effect.MoveBy('footer', p_nouv, 0, {afterFinish:sso.test_footer_bas});
		}
	},
	set_footer_haut : function(){
		new Effect.ScrollTo(document.body);
		sso.taille_fenetre();
		var taille = sso_ty - 20;
		if ($('footer_page').offsetHeight < taille) {
			$('footer_page').style.height = taille + 'px';
			document.body.style.height = taille + 'px';
		}
		$('footer').style.background = '#FFFFFF';
		$('footer').style.zIndex = 10;
		//BUG IE6
		if(ie){
			var tab_sel = document.getElementsByTagName('select');
			for(var i=0; obj=tab_sel[i]; i++){
				obj.style.visibility = 'hidden';
			}
		}
		p_nouv = findPosY($('footer'));
		if(!$('footer').getAttribute('old_pos')){
			$('footer').setAttribute('old_pos', p_nouv);
		}
		new Effect.MoveBy('footer', -p_nouv, 0);
	},
	test_footer_bas : function(obj){
		sso_disable_footer_bas = false;
		sso.taille_fenetre();
		dif = sso_ty - findPosY($('footer'));
		if (!(dif > 20 && dif < 30)) {
			t_pos = setTimeout('sso.set_footer_bas();',100);
		}
	},
	taille_fenetre : function(){
		if (self.innerHeight){
			// all except Explorer
		 	sso_tx = self.innerWidth;
			sso_ty = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight){
			// Explorer 6 Strict Mode
			sso_tx = document.documentElement.clientWidth;
			sso_ty = document.documentElement.clientHeight;
		} else if (document.body){
			// other Explorers
			sso_tx = document.body.clientWidth;
			sso_ty = document.body.clientHeight;
		}
		if(sso_tx<=1000){
			document.body.style.width = '1000px';
		} else {
			document.body.style.width = '';
		}
	},
	clic_droit : function(obj, e){
		bouton = (ie) ? event.button + 1 : e.which;
		if (bouton==3) {
			if (ssofast_type_aff_tri==0) {
				trie(Liens, 'nb_click', -1);
			} else {
				trie(Liens, 'nom', 1, 'asc');
			}
			cid = obj.id;
			type = cid.substring(0, 3);
			ccpt = 0;
			if (type=='rep') {
				cid = cid.substring(3);
				for(ci=0; cel=Liens[ci]; ci++){
					if (cel['repertoire'] == cid){
						ccpt++;
						ctmp = document.createElement('div');
						ctmp.id = 'lien_l' + cel['id'];
						ctmp.innerHTML = '<div><div></div></div>';
						document.body.appendChild(ctmp);
						try{
							sso.ouvre_url(ctmp.firstChild.firstChild, 1);
						}catch(e){}
						document.body.removeChild(ctmp);
						if (ccpt>=ssofast_nb_lien_clic) {
							break;
						}
					}
				}
			} else {
				for(ci=0; cel=Liens[ci]; ci++){
					str = ' ' + cel['id_tag'] + ' ';
					cid = obj.getAttribute('tag');
					if (cid!='0') {
						cid = ' ' + cid + ' ';
					}
					if((cid=='  ' && !cel['id_tag']) || str.indexOf(cid)>-1){
						ccpt++;
						ctmp = document.createElement('div');
						ctmp.id = 'lien_l' + cel['id'];
						ctmp.innerHTML = '<div><div></div></div>';
						document.body.appendChild(ctmp);
						try{
							sso.ouvre_url(ctmp.firstChild.firstChild, 1);
						}catch(e){}
						document.body.removeChild(ctmp);
						if (ccpt>=ssofast_nb_lien_clic) {
							break;
						}
					}
				}
			}
		}
	},
	//Ajoute un repertoire
	insert_rep : function(obj){
		//Supprime les messages
		$('sso_messages').innerHTML = '';
		var rep = document.createElement('li');
		rep.setAttribute('id', 'rep_r' + obj['id']);
		rep.className = 'repertoire';
		if(ie){
			rep.style.display = 'inline';
		}
	 var rep_ = '<ul id="rep' + obj['id'] + '" class="' + (obj['ouvert'] ? 'montre' : 'cache') + '">';
			rep_ += '<div class="surligne_normale" onmouseover="sso.surligne(this, 1);" onmouseout="sso.surligne(this, 0);" onmousedown="sso.clic_droit(this.parentNode, event);" oncontextmenu="return false;">';
				rep_ += '<div class="' + (obj['ouvert'] ? 'repertoire_ouvert' : 'repertoire_ferme') + '" onclick="sso.swap(this);"></div>';
				rep_ += '<div class="option" style="display:none;" onclick="sso.options(this, \'rep\');"></div>';
				rep_ += '<div class="titre" onclick="sso.swap(this);">' + obj['nom']  + '</div>';
			rep_ += '</div>';
		rep_ += '</ul>';

		rep.innerHTML = rep_;
		$('reps').appendChild(rep);
 	},
// Ajoute lien
	insert_lien : function(obj){
		//Supprime les messages
		$('sso_messages').innerHTML = '';
		var lien = document.createElement('li');
		lien.setAttribute('id', 'lien_l' + obj['id']);
		lien.className = 'lien';
	 var lien_ = '<div class="surligne_normale" title="' + (obj['description'] ? decodeURIComponent(obj['description']) : '') + '" onmouseover="sso.surligne(this, 1);" onmouseout="sso.surligne(this, 0);">';
//			lien_ += '<div class="favicon" onclick="sso.ouvre_url(this, 0);"><img src="favicons/favicon.php?favicon=' + obj['favicon'] + '" width="16" height="16" border="0" onerror="this.src=this.src;"/></div>';
			lien_ += '<div class="favicon" onclick="sso.ouvre_url(this, 0);"><img src="favicons/favicon.php?favicon=' + obj['favicon'] + '" width="16" height="16" border="0" onerror="this.src=\'favicons/defaut.gif\'"/></div>';
			lien_ += '<div class="option" style="display:none;" onclick="sso.options(this, \'lien\');"></div>';
			lien_ += '<div class="titre" onclick="sso.ouvre_url(this, 1);">' + obj['nom']  + '</div>';
		lien_ += '</div>';
		lien.innerHTML = lien_;
		//Si le lien appartient ? un repertoire, on le rajoute au repertoire, sinon on le met dans le container "liens"
		if($('rep' + obj['repertoire'])){
			$('rep' + obj['repertoire']).appendChild(lien);
		} else {
			$('liens').appendChild(lien);
		}
	},
// Ajoute tag
	cloud_tag : function(){
		var pars = 'action=tags_aff&tags_aff=';
		if (ssofast_tags_aff==0) {
			$('bouton_tags_aff').className = 'bouton_tags_aff_cloud';
			$('bouton_tags_aff').title = Locale.tags_aff_cloud_nb;
			ssofast_tags_aff = 1;
			pars += '1';
		} else if (ssofast_tags_aff==1){
			$('bouton_tags_aff').className = 'bouton_tags_aff_cloud_nb';
			$('bouton_tags_aff').title = Locale.tags_aff_list;
			ssofast_tags_aff = 2;
			pars += '2';
		} else {
			$('bouton_tags_aff').className = 'bouton_tags_aff_list';
			$('bouton_tags_aff').title = Locale.tags_aff_cloud;
			ssofast_tags_aff = 0;
			pars += '0';
		}
		sso.insert_tag();
		sso.envoie(pars);
	},
	insert_tag : function(){
		$('sso_tags').innerHTML = '';
		trie(Tags, 'nom', 1, 'asc');
		nb_l = new Array();
		nb_c = new Array();
		nb_l[0] = Liens.length;
		max = 1; max_c = 1;
		for(i=0; li=Liens[i]; i++){
			if(!li['id_tag'] || li['id_tag']==''){
				if (!nb_l['']) {
					Tags[Tags.length] = new Array();
					Tags[Tags.length-1]['nom'] = '';
					Tags[Tags.length-1]['id'] = '';
				}
				nb_l[''] = nb_l[''] ? nb_l['']+1 : 1;
				nb_c[''] = nb_c[''] ? nb_c[''] + li['nb_click']*1 : li['nb_click']*1;
				if (nb_l['']>max) {
					max = nb_l[''];
				}
				if (nb_c['']>max_c) {
					max_c = nb_c[''];
				}
			} else {
				t = li['id_tag'].split(' ');
				for(j=0; el=t[j]; j++){
					nb_l[el] = nb_l[el] ? nb_l[el]+1 : 1;
					nb_c[el] = nb_c[el] ? nb_c[el] + li['nb_click']*1 : li['nb_click']*1;
					if (nb_l[el]>max) {
						max = nb_l[el];
					}
					if (nb_c[el]>max_c) {
						max_c = nb_c[el];
					}
				}
			}
		}
		last_tag = $('sso_tags').getAttribute('last_tag');
		for(i=0; t=Tags[i]; i++){
			if (nb_l[t['id']]) {
				if (ssofast_tags_aff==0) {
					$('sso_tags').style.width = '';
					var tag = document.createElement('div');
				} else {
					var tag = document.createElement('font');
					if (t['nom']!='' && t['id']!=0) {
						tmax = 4;
						size = (ssofast_tags_aff==1) ? Math.round(nb_c[t['id']]*tmax/max_c) : Math.round(nb_l[t['id']]*tmax/max);
						if (size>tmax) { size=tmax; }
						tag.setAttribute('size', size + 1);
					}
				}
				if (ssofast_tags_aff!=1) {
					tag.setAttribute('title', nb_l[t['id']] + ' ' + Locale.tags_favoris);
				} else {
					tag.setAttribute('title', nb_c[t['id']] + ' ' + Locale.tags_cliques);
				}
				tag.onmousedown = function(event){sso.clic_droit(this, event);}
				tag.oncontextmenu = function(){return false;}
 				tag.setAttribute('id', 'tag_' + t['id']);
				tag.setAttribute('tag', t['id']);
				tag.setAttribute('nb', nb_l[t['id']]);
				tag.className = 'tag';
				av = ap = '';
				if (last_tag=='tag_' + t['id']) {
					av = '<b><i>&gt;&gt;';
					ap = '&lt;&lt;</i></b>';
					tag.onclick = function(){sso.affiche_tag(0);}
				} else {
					tag.onclick = function(){sso.affiche_tag(0, this);}
				}
				tag.innerHTML =  av + (t['nom']!='' ? t['nom'] : Locale.tags_sans_tag) + (ssofast_tags_aff==0?' (' + nb_l[t['id']] + ')':'') + ap;
				$('sso_tags').appendChild(tag);
				if (ssofast_tags_aff!=0) {
					$('sso_tags').appendChild(document.createTextNode(' '));
					$('sso_tags').style.width = ($('sso_tags').offsetHeight*1.5 + 40) + 'px';
				}
			}
		}
		if (ssofast_tags_aff!=0 && Liens.length>0) {
			tx = $('sso_tags').offsetWidth;
			while(tx > $('sso_tags').offsetHeight*1.5 + 40){
				tx -= 10;
				$('sso_tags').style.width = tx + 'px';
			}
		}
		if (nb_l['']) {
			Tags.pop();
		}
	},
	sup_tags : function(obj){
		liste = obj.split(' ');
		for(i=0; el1=liste[i]; i++){
			for(j=0; el2=Tags[j]; j++){
				if(el2['id']==el1){
					Tags.splice(j, 1);
				}
			}
		}
		sso.insert_tag();
	},
	ordre_affiche_tag : function(){
		var pars = 'action=type_aff_tri&type_aff_tri=';
		if (ssofast_type_aff_tri==0) {
			ssofast_type_aff_tri = 1;
			$('bouton_type_aff_tri').className = 'bouton_type_aff_tri_alpha';
			$('bouton_type_aff_tri').title = Locale.type_aff_tri_stats;
			pars += '1';
		} else {
			ssofast_type_aff_tri = 0;
			$('bouton_type_aff_tri').className = 'bouton_type_aff_tri_stats';
			$('bouton_type_aff_tri').title = Locale.type_aff_tri_alpha;
			pars += '0';
		}
		last_tag = $('sso_tags').getAttribute('last_tag');
		tag = last_tag ? last_tag : 'tag_0';
		sso.affiche_tag(0, $(tag));
		sso.envoie(pars);
	},
	affiche_tag : function(nb, tag){
		$('reps').innerHTML = '';
		$('liens').innerHTML = '';
		$('sso_cadre_tags').style.display = '';
		if (ssofast_type_aff_tri==0) {
			trie(Liens, 'nb_click', -1);
		} else {
			trie(Liens, 'nom', 1, 'asc');
		}
		last_tag = $('sso_tags').getAttribute('last_tag');
		if ($(last_tag) && $(last_tag).innerHTML.toLowerCase().indexOf('<b><i>')>-1) {
			$(last_tag).onclick = function(){sso.affiche_tag(0, this);}
			$(last_tag).innerHTML = $(last_tag).innerHTML.substring(14, $(last_tag).innerHTML.length-16);
		}
		if (tag) {
			$('sso_tags').setAttribute('last_tag', tag.id);
			$(tag.id).onclick = function(){sso.affiche_tag(0);}
			$(tag.id).innerHTML = '<b><i>&gt;&gt;' + $(tag.id).innerHTML + '&lt;&lt;</i></b>';
			id = tag.getAttribute('tag');
			if (id!='0') {
				id = ' ' + id + ' ';
			}
		} else {
			$('sso_tags').removeAttribute('last_tag');
			id = '0';
		}
		cpt = 0;
		for(i=0; el=Liens[i]; i++){
			str = ' ' + el['id_tag'] + ' ';
			if((id=='  ' && !el['id_tag']) || str.indexOf(id)>-1 || !(tag && id!='0')){
				if (cpt>=ssofast_type_aff_nb*nb) {
					sso.insert_lien(Liens[i]);
				}
				cpt++;
			}
			if (cpt>=ssofast_type_aff_nb*(nb+1)) {
				break;
			}
		}
		total = (tag) ? tag.getAttribute('nb') : Liens.length;
		nb_page = Math.ceil(total / ssofast_type_aff_nb);
		if (nb_page > 1) {
			mess = '';
			if (nb_page>0) {
				mess += '<span class="tag" onclick="sso.affiche_tag(' + (nb>0?nb-1:nb_page-1) + ', $(\'tag_' + trim(id) + '\'));"><< </span>';
			}
			mess += (nb+1) + '/' + nb_page;
			if (nb_page>0) {
				mess += '<span class="tag" onclick="sso.affiche_tag(' + (nb<nb_page-1?nb+1:0) + ', $(\'tag_' + trim(id) + '\'));"> >></span>';
			}
			el = document.createElement('div');
			el.setAttribute('align', 'right');
			el.innerHTML = mess;
			$('liens').appendChild(el);
		}
		sso.set_footer_bas();
		test_code($('sso_clef_de_cryptage').value, true, 'cell_test_code');
	},
//Creation des liens d'un repertoire
	deploie : function(id, taille){
		if($('rep'+id).childNodes.length<taille){
			while($('rep'+id).childNodes.length>1){
				$('rep'+id).removeChild($('rep'+id).lastChild);
			}
			for(var i=0; obj=Liens[i]; i++){
				if (obj['repertoire'] == id){
					sso.insert_lien(obj);
				}
			}
		}
	},
//Ouvre/ferme les repertoires
	swap : function(obj){
		var rep = obj.parentNode.parentNode;
		var id = rep.parentNode.id.split('_')[1].substring(1);
		if(obj.parentNode.firstChild.className=='repertoire_ferme'){
			obj.parentNode.firstChild.className = 'repertoire_ouvert';
			rep.className = 'montre';
			var taille = 1;
			for(var i=0; obj=Liens[i]; i++){
				if (obj['repertoire'] == id){
					taille++;
				}
			}
			var drag = ($('rep'+id).childNodes.length<taille) ? true : false;
			sso.deploie(id, taille);
			if(drag){
				sso.active_drag();
			}
		} else {
			obj.parentNode.firstChild.className = 'repertoire_ferme';
			rep.className = 'cache';
		}
		sso.set_footer_bas();
	},
	cache_sep_lien : function(){
		new Effect.Opacity('separation_liens', {duration:1, from:1.0, to:0.0});
	},
	swap_drag : function(obj){
		clearTimeout(t);
		if (!ie){
			$('separation_liens').style.visibility='';
			$('separation_liens').style.opacity = 1;
			t = setTimeout('sso.cache_sep_lien(1)', 3000);
			if (obj.id.split('_')[0]=='lien'){
				tab = obj.firstChild.getElementsByTagName('div');
			} else {
				tab = obj.firstChild.firstChild.getElementsByTagName('div');
			}
			for(i=0;element=tab[i];i++){
				action = element.getAttribute('onclick');
				if(action && !element.getAttribute('temporaire')){
					element.setAttribute('temporaire', action);
					element.setAttribute('onclick', 'sso.active_click(\'' + obj.id + '\');');
				}
			}
		}
		rep = obj.parentNode;
		id = rep.id;
		if(swap_old && swap_old!=id){
			$(swap_old).className='cache';
		}
		if(rep.className=='cache'){
			swap_old = id;
			while($(id).childNodes.length>2){
				$(id).removeChild($(id).childNodes[1]);
			}
			rep.className='montre';
		}
	},
//Creation Drag&Drop
	active_drag : function(){
		if(ssofast_donnee_verrouille==0 && ssofast_type_aff==0){
			Sortable.create('reps',{ghosting:false,onUpdate:function(sortable){sso.tri(sortable)},onChange:function(sortable){sso.swap_drag(sortable)}});
			cont = new Array($('liens'));
			for(i=0; obj=Repertoires[i]; i++){
				cont[cont.length] = $('rep' + obj['id']);
			}
			Sortable.create('liens',{ghosting:false,containment:cont,dropOnEmpty:true,onUpdate:function(sortable){ sso.tri(sortable)},onChange:function(sortable){sso.swap_drag(sortable)}});
			for(i=0; obj=Repertoires[i]; i++){
				Sortable.create('rep' + obj['id'],{ghosting:false,containment:cont,dropOnEmpty:true,onUpdate:function(sortable){ sso.tri(sortable)},onChange:function(sortable){sso.swap_drag(sortable)}});
			}
		}
		if (ssofast_type_aff==1) {
			sso.insert_tag();
		}
	},
	verif_droit : function(flag){
		active = false;
		if(MD5($('sso_clef_de_cryptage').value)==ssofast_code_securite){
			active = true;
		} else {
			if (flag) {
				sso.alerte(Locale.erreur_mauvais_mdp);
				sso.cible('sso_clef_de_cryptage');
				Event.observe('focus', 'mouseover', function(){$('focus').style.display='none';});
				Event.observe('sso_clef_de_cryptage', 'keyup', function(){$('focus').style.display='none';});
				$('sso_clef_de_cryptage').focus();
			}
		}
		return active;
	},
//Supprime Drag&Drop
	desactive_drag : function(){
		if(ssofast_donnee_verrouille==1){
			Sortable.destroy('reps');
			Sortable.destroy('liens');
			for(i=0; obj=Repertoires[i]; i++){
				Sortable.destroy('rep' + obj['id']);
			}
		}
	},
	swap_verrouille : function(){
		var pars = 'action=verrouille&donnee_verrouillee=';
		if($('bouton_verrouiller').className=='bouton_verrouiller'){
			$('bouton_verrouiller').className = 'bouton_deverrouiller';
			$('bouton_verrouiller').title = Locale.btn_verrouiller;
			$('sso_creation').style.display = '';
			ssofast_donnee_verrouille = 0;
			sso.active_drag();
			pars += '0';
		} else {
			$('bouton_verrouiller').className = 'bouton_verrouiller';
			$('bouton_verrouiller').title = Locale.btn_deverrouiller;
			$('sso_creation').style.display = 'none';
			ssofast_donnee_verrouille = 1;
			sso.desactive_drag();
			pars += '1';
		}
		sso.envoie(pars);
	},
	swap_type_aff : function(){
		if(ssofast_type_aff==0 && ssofast_tutorial==1){
			if ($('reps') && $('reps').childNodes.length>0) {
				tutorial_pos = 'sso_tags';
			} else {
				sso.alerte(Locale.erreur_swap_aff, '', 'sans');
				sso.cible('bouton_type_aff');
				setTimeout('sso.test_tutorial();' , 3000);
				return false;
			}
		} else {
				tutorial_pos = 'sso_mon_compte';
		}
		if ($('cadre_options')) {
			$('header').removeChild($('cadre_options'));
		}
		var pars = 'action=type_aff&type_aff=';
		if($('bouton_type_aff').className=='bouton_type_aff_liste'){
			$('bouton_type_aff_tri').style.display = '';
			$('bouton_verrouiller').style.display = 'none';
			$('sso_nouveau_rep').style.display = 'none';
			$('bouton_type_aff').className = 'bouton_type_aff_tags';
			$('bouton_type_aff').title = Locale.type_aff_liste;
			sso.desactive_drag();
			ssofast_type_aff = 1;
			pars += '1';
		} else {
			$('bouton_type_aff_tri').style.display = 'none';
			$('bouton_verrouiller').style.display = '';
			$('sso_nouveau_rep').style.display = '';
			$('bouton_type_aff').className = 'bouton_type_aff_liste';
			$('bouton_type_aff').title = Locale.type_aff_tags;
			ssofast_type_aff = 0;
			pars += '0';
		}
		sso.envoie(pars);
	},
//Surligne
	surligne : function(obj, methode){
		if(methode){
			obj.className = 'surligne_select';
			if (sso.verif_droit()) {
				for(var i=0; el=obj.childNodes[i]; i++){
					if(el.className=='option'){
						el.style.display = '';
					}
				}
			}
		} else {
			obj.className = 'surligne_normale';
			for(var i=0; el=obj.childNodes[i]; i++){
				if(el.className=='option'){
					el.style.display = 'none';
				}
			}
		}
	},
	options : function(obj, type, fade){
		try{
			if(type=='lien'){
				var id = obj.parentNode.parentNode.id;
			} else {
				var id = obj.parentNode.parentNode.parentNode.id;
			}
			id = id.split('_')[1].substring(1);
		}catch(e){}
		sso.test_affichage('cadre_options');
		if($('cadre_options')){
			var id_old = $('cadre_options').getAttribute('name');
			$('header').removeChild($('cadre_options'));
			if(ssofast_tutorial==1){
				clearTimeout(t);
				t = setTimeout('sso.test_tutorial();', 4000);
			}
		} else {
			var id_old;
		}
		if(obj && id != id_old){
			var pos;
			compte_recup = 0;
			if(type=='lien'){ el = Liens; }
			else { el = Repertoires; }
			for(i=0; obj=el[i]; i++){
				if(obj['id']==id){ pos = i; break; }
			}
			var cadre = '<div id="cadre_options" ' + (!fade?(ie?'style="filter:alpha(opacity=0);"':'style="opacity:0;"'):'') + ' name="' + id + '" donnee="' + type + '_' + pos + '" class="cadre_options">';
		 		cadre += '<form id="form_cadre" onsubmit="sso.recup_envoie();return false;">';
				cadre += '<table width="100%" align="center" cellspacing="0" cellpadding="5"><tbody>';
					cadre += '<tr><th align="left" width="33%">' + Locale.options + '</th><th align="right"><div id="options_bouton_fermer" class="bouton_fermer" onclick="sso.options();" title="' + Locale.btn_fermer + '"></div></th></tr>';
					if(type!='lien'){
						cadre += '<tr>';
						cadre += '<td colspan="2"><div><input id="options_ouvert" type="checkbox" ' + (obj['ouvert'] ? 'checked' : '') + '/> ' + Locale.options_ouvert + '</div></td>';
						cadre += '</tr>';
					}
					if(type=='lien'){
						cadre += '<tr>';
							cadre += '<td>' + Locale.options_url + ' : </td><td>';
							var url_popup = obj['url'];
							var url = url_page = '';
							if (url_popup!=void(0) && url_popup!=''){
								var tab_url = url_popup.split('?');
								if(tab_url.length>1){
									var data = tab_url[1];
								}
								var tab_url = tab_url[0].split('/');
								if(tab_url[tab_url.length-1].indexOf('.')>-1 || tab_url[tab_url.length-1]==''){
									var url_page = tab_url.pop();
								}
								if(tab_url[0].indexOf(':')>-1){
									var url_protocole = tab_url[0];
									tab_url.splice(0,2);
								}
								url = tab_url.join('/');
							}
							if(url==''){
								if(url_page!=''){
									url = url_page;
									url_page = '';
								}
							}
							//Si un formulaire est present
							if (Formulaires[url]){
								perso = Formulaires[url].indexOf('<!--sso_generique-->') == -1 ? true : false;
								cadre += '<div id="options_autolog" class="genere_code" onclick="' + (perso ? 'sso.edit_form();' : 'sso.autolog(\'' + url + '\');') + '" title="';
								cadre += (perso ? Locale.options_icone_formulaire_personnel + '">' + Locale.options_icone_form_perso : Locale.options_icone_formulaire_generique + '">' + Locale.options_icone_form_gene);
								cadre += '</div>';
							} else if(obj['url']){
								cadre += '<div id="options_autolog" class="genere_code" onclick="sso.edit_form();" title="' + Locale.options_icone_formulaire_creer + '">' + Locale.options_icone_form_creer + '</div>';
							}
							el = '<input type="text" id="options_url" autocomplete="OFF" size="25" value="' + (obj['url'] ? decodeURIComponent(obj['url']) : 'http://') + '" onfocus="this.select()" onchange="sso.set_option_nom(this.value);"/>';
							cadre += sso.encadre_input(el, 'input_connection', true);
						cadre += '</td></tr>';
						cadre += '<tr>';
							cadre += '<td>';
							obj['prive'] = obj['prive'] ? obj['prive'] : 0;
							el = '<select id="options_prive" onchange="this.className=this.childNodes[this.selectedIndex].className;" class="' + (obj['prive']==0 ? 'lien_public' : 'lien_prive') + '"><option value="0" class="lien_public"' + (obj['prive']==0 ? ' selected' : '') + '>' + Locale.options_lien_public + '</option><option value="1" class="lien_prive"' + (obj['prive']==1 ? ' selected' : '') + '>' + Locale.options_lien_prive + '</option></select>';
							cadre += sso.encadre_input(el, 'input_connection', true);
							cadre += '</td><td>';
						cadre += sso.encadre_input('<input style="border:none;" class="bouton_vide" id="options_test_url" onclick="sso.autodetecte_formulaire($(\'options_url\').value, false, true);" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.options_test_url_bouton + '"/>', 'bouton_fond', true);
						cadre += '</td></tr>';
						cadre += '<tr><td colspan="2" id="options_ligne_test_url"></td></tr>';
					}
					cadre += '<tr>';
						cadre += '<td>' + Locale.options_nom + ' : </td><td>';
						el = '<input type="text" id="options_nom" autocomplete="OFF" size="25" value="' + decodeURIComponent(obj['nom']) + '" onfocus="this.select()"/>';
						cadre += sso.encadre_input(el, 'input_connection', true);
					cadre += '</td></tr>';
					if(type=='lien'){
						var nom_utilisateur = obj['nom_utilisateur'] ? sso.decrypte(decodeURIComponent(obj['nom_utilisateur'])) : '';
						var mot_de_passe = obj['mot_de_passe'] ? sso.decrypte(decodeURIComponent(obj['mot_de_passe'])) : '';
						cadre += '<tr>';
							cadre += '<td>' + Locale.options_nom_utilisateur + ' : </td><td>';
							el = '<input type="text" id="options_nom_utilisateur" autocomplete="OFF" size="25" value="' + nom_utilisateur + '" onfocus="this.select()"/>';
							cadre += sso.encadre_input(el, 'input_connection', true);
						cadre += '</td></tr>';
						cadre += '<tr>';
							cadre += '<td>' + Locale.options_mot_de_passe + ' : </td><td>';
							cadre += '<div id="options_genere_code" class="genere_code" onclick="$(\'options_mot_de_passe\').value=sso.genere_code();$(\'options_mot_de_passe\').select();">?</div>';
							el = '<input type="text" id="options_mot_de_passe" autocomplete="OFF" size="25" value="' + mot_de_passe + '" onfocus="this.select()"/>';
							cadre += sso.encadre_input(el, 'input_connection', true);
						cadre += '</td></tr>';
						var tags = '';
						if(obj['id_tag'] && obj['id_tag']!='') {
							tab = obj['id_tag'].split(' ');
							for(i=0; el1=tab[i]; i++){
								for(j=0; el2=Tags[j]; j++){
									if(el2['id'] == el1) {
										tags += el2['nom'] + ' ';
										break;
									}
								}
							}
							tags = trim(tags);
						} else if (obj['repertoire'] && obj['repertoire']!=0) {
							for(i=0; el=Repertoires[i]; i++){
								if (el['id']==obj['repertoire']) {
									tags = el['nom'].replace(' ', '');
									break;
								}
							}
						} else if (decodeURIComponent(obj['nom']) == Locale.btn_nouveau_lien) {
							last_tag = $('sso_tags').getAttribute('last_tag');
							if (last_tag && trim(last_tag.split('_')[1])!='') {
								tags = trim($(last_tag).firstChild.firstChild.firstChild.nodeValue);
								fin = (tags.indexOf(' ') > -1) ? tags.indexOf(' ') : tags.indexOf('<<');
								tags = tags.substring(2, fin);
							}
						}
						if (tags!='') {
							tags += ' ';
						}
						if (ssofast_type_aff==1) {
							cadre += '<tr>';
								cadre += '<td>' + Locale.options_tags + ' : </td><td>';
								el = '<input type="text" id="options_tags"' + (ssofast_type_aff==0 ? ' disabled' : '') + ' autocomplete="OFF" size="25" value="' + tags + '"/>';
								cadre += sso.encadre_input(el, 'input_connection', true);
							cadre += '</td></tr>';
						}
						cadre += '<tr>';
							cadre += '<td valign="top">' + Locale.options_description + ' : </td><td>';
							el = '<textarea id="options_description" autocomplete="OFF" cols="19" onfocus="this.select()">' + (obj['description'] ? decodeURIComponent(obj['description']) : '') + '</textarea>';
							cadre += sso.encadre_input(el, 'input_connection', true);
						cadre += '</td></tr>';
					}
					cadre += '<tr>';
						cadre += '<td colspan="2"><div id="options_bouton_supprimer" class="bouton_supprimer" onclick="sso.efface(\'' + type + '\', ' + pos + ');" title="' + Locale.options_effacer + '">&nbsp;&nbsp;&nbsp;</div>';
						cadre += sso.encadre_input('<input style="border:none;" class="bouton_vide" id="options_valider" onclick="sso.recup_envoie();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.btn_valider + '"/>', 'bouton_fond', true);
					cadre += '</td></tr>';
				cadre += '</tbody></table>';
			cadre += '<input type="submit" value="" style="border:none;width:0px;height:0px;"/></form>';
//Edit Formulaire
	 		cadre += '<div id="options_edit_formulaire" style="display:none;"></div>';
	 		cadre += '<form id="form_cadre2" style="display:none;" onsubmit="sso.test_form(this);sso.recup_form(\'' + url + '\', \'' + url_page + '\');return false;">';
			cadre += '<table width="100%" align="center" cellspacing="0" cellpadding="5"><tbody>';
			cadre += '<tr><th align="left" width="33%">' + Locale.options + '</th><th align="right"><div id="options_bouton_fermer" class="bouton_fermer" onclick="sso.options();" title="' + Locale.btn_fermer + '"></div></th></tr>';
			cadre += '<tr><td colspan="2">';
			cadre += '<div id="options_autolog" class="genere_code" onclick="sso.edit_form();" title="' + Locale.options_icone_formulaire_retour + '">' + Locale.options_icone_form_retour + '</div>';
			cadre += (Formulaires[url] ? Locale.options_edit_form : Locale.options_creer_form) + ' :</td></tr>';
			el = '<input id="options_form_url_titre" type="text" value="' + obj['url'] + '" size="46" readonly/>';
			cadre += '<tr><td colspan="2" align="center">' + sso.encadre_input(el, 'input_connection', false) + '</td></tr>';
			cadre += '<tr>';
			cadre += '<td align="center" colspan="2">';
			cadre += '<div id="options_form_type_simple"></div><div id="options_form_type_avance" style="display:none"></div>';
			cadre += '</td>';
			cadre += '</tr>';
			cadre += '<tr><td colspan="2">';
			cadre += '<div id="options_autolog_avance" class="genere_code" onclick="sso.swap_disp_form();" title="' + Locale.options_icone_formulaire_avance + '">' + Locale.options_icone_form_avance + '</div>';
			cadre += '</td></tr>';
			cadre += '<tr>';
			cadre += '<td colspan="2"><div id="options_bouton_supprimer" class="bouton_supprimer" onclick="sso.autolog(\'' + url + '\');" title="' + Locale.options_effacer + '">&nbsp;&nbsp;&nbsp;</div>';
			cadre += sso.encadre_input('<input style="border:none;" class="bouton_vide" id="options_valider" onclick="sso.recup_form(\'' + url + '\', \'' + url_page + '\');" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.btn_valider + '"/>', 'bouton_fond', true);
			cadre += '</td></tr>';
			cadre += '</tbody></table>';
			cadre += '<input type="submit" value="" style="border:none;width:0px;height:0px;"/></form></div>';
//Fin
			cadre += '</div>';
			$('header').innerHTML += cadre;
			mon_form = '<form action="' + obj['url'] +'" method="post">';
			mon_form += '<input name="XXX" value="{nom}" type="hidden"/>';
			mon_form += '<input name="YYY" value="{mdp}" type="hidden"/>';
			mon_form += '</form>';
			$('options_edit_formulaire').innerHTML = Formulaires[url] ? Formulaires[url] : mon_form;
			Event.observe('options_nom', 'focus', function(){sso.tutorial('options_nom', type);});
			Event.observe('options_valider', 'click', function(){clearTimeout(t);sso.tutorial('options_valider', type);});
			if(type=='lien'){
				$('options_url').focus();
				$('options_url').select();
				Event.observe('options_url', 'focus', function(){sso.tutorial('options_url');});
				Event.observe('options_nom_utilisateur', 'focus', function(){sso.tutorial('options_nom_utilisateur');});
				Event.observe('options_mot_de_passe', 'focus', function(){sso.tutorial('options_mot_de_passe');});
				if (ssofast_type_aff==1) {
					Event.observe('options_tags', 'focus', function(){sso.tutorial('options_tags');});
				}
				Event.observe('options_description', 'focus', function(){sso.tutorial('options_description');});
			} else {
				$('options_nom').focus();
				$('options_nom').select();
				Event.observe('options_nom', 'click', function(){sso.tutorial('options_nom', type);});
				Event.observe('options_ouvert', 'mouseover', function(){sso.tutorial('options_ouvert', type);});
			}
			Rico.Corner.round($('cadre_options'), {blend:false, color:'transparent'});
			test_code($('sso_clef_de_cryptage').value, true, 'cell_test_code');
			if (!fade) {
				new Effect.Opacity('cadre_options', {duration:0.5, from:0.2, to:1});
			}
			if(ssofast_tutorial==1){
				clearTimeout(t);
				t=setTimeout('sso.tutorial(\'' + (type=='lien' ? 'options_url' : 'options_nom') + '\', \'' + type + '\');', 500);
			}
		}
	},
	affiche_form : function (){
		cadre = '<table width="100%" align="center" cellspacing="1" cellpadding="0"><tbody>';
		cadre += '<tr><td>' + Locale.options_form_adresse + ' :</td></tr>';
		form = $('options_edit_formulaire').getElementsByTagName('form')[0];
		el = '<input type="text" id="options_form_adresse" autocomplete="OFF" size="45" value="' + form.getAttribute('action') + '" onfocus="this.select()" onchange="sso.test_form(this);"/>';
		cadre += '<tr><td>' + sso.encadre_input(el, 'input_connection', true) + '</td></tr>';
		cadre += '<tr><td>' + Locale.options_form_donnee + ' :</td></tr></tbody></table>';
		cadre += '<div style="height:125px;overflow:auto;">';
		cadre += '<table width="100%" align="center" cellspacing="1" cellpadding="0"><tbody>';
		tab = form.getElementsByTagName('input');
		tab[tab.length] = document.createElement('input');
		for(i=0; input=tab[i]; i++){
			cadre += '<tr><td>' + Locale.options_form_nom + ' :</td><td>';
			el = '<input type="text" id="' + i + '_options_form_nom" size="10" value="' + input.name + '" onfocus="this.select()" onchange="sso.test_form(this);"/>';
			cadre += sso.encadre_input(el, 'input_connection', true) + '</td><td>';
			cadre += Locale.options_form_valeur + ' :</td><td>';
			el = '<input type="text" id="' + i + '_options_form_valeur" size="10" value="' + input.value + '" onfocus="this.select()" onchange="sso.test_form(this);"/>';
			cadre += sso.encadre_input(el, 'input_connection', true) + '</td><td>';
			cadre += '<div id="' + i + '_options_form_del" class="genere_code" onclick="sso.test_form(this);" title="">X</div>';
			cadre += '</td></tr>';
		}
		cadre += '</tbody></table></div>';
		$('options_form_type_simple').innerHTML = cadre;
		mon_form = $('options_edit_formulaire').innerHTML.split('\n').join('');
		mon_form = mon_form.split('>').join('>\n');
		el = '<textarea cols="35" rows="10" id="options_formulaire" onchange="sso.test_form(this);">' + mon_form + '</textarea>';
		$('options_form_type_avance').innerHTML = sso.encadre_input(el, 'input_connection', true);
	},
	edit_form : function(){
		if ($('form_cadre').style.display=='') {
			$('form_cadre').style.display = 'none';
			$('form_cadre2').style.display = '';
			sso.affiche_form();
		} else {
			$('form_cadre').style.display = '';
			$('form_cadre2').style.display = 'none';
		}
		if(ssofast_tutorial==1){
			if ($('form_cadre').style.display=='') {
				sso.tutorial('options_url');
			} else {
				sso.tutorial('options_form_url_titre');
			}
		}
	},
	test_form : function(obj){
		if (obj.id=='options_formulaire'){
			val = trim($('options_formulaire').value.split('\n').join(''));
		} else {
			next_id = false;
			if (obj.id.indexOf('_options_form_del')>-1) {
				id = obj.id.split('_')[0];
				el = $(id + '_options_form_nom');
				el.parentNode.removeChild(el);
			} else {
				el = obj.id.split('_')
				if (obj.id=='options_form_adresse') {
					next_id = '0_options_form_nom';
				} else if (el[el.length-1]=='nom') {
					next_id = el[0] + '_options_form_valeur';
				} else if (el[el.length-1]=='valeur') {
					next_id = (el[0]*1 + 1) + '_options_form_nom';
				}
			}
			val = '<form action="' + $('options_form_adresse').value +'" method="post">';
			tab = $('form_cadre2').getElementsByTagName('input');
			for(i=0; el=tab[i]; i++){
				if (el.id.indexOf('_options_form_nom')>-1 && trim(el.value)!='') {
					val += '<input name="' + el.value + '" value="' + tab[i+1].value + '" type="hidden"/>';
					i++;
				}
			}
			val += '</form>';
		}
		$('options_edit_formulaire').innerHTML = val;
		sso.affiche_form();
		if ($(next_id)) {
			$(next_id).focus();
		}
	},
	swap_disp_form : function(){
		sso.affiche_form();
		if ($('options_autolog_avance').innerHTML == Locale.options_icone_form_avance) {
			$('options_autolog_avance').innerHTML = Locale.options_icone_form_simple;
			$('options_autolog_avance').title = Locale.options_icone_formulaire_simple;
			$('options_form_type_avance').style.display = '';
			$('options_form_type_simple').style.display = 'none';
		} else {
			$('options_autolog_avance').innerHTML = Locale.options_icone_form_avance;
			$('options_autolog_avance').title = Locale.options_icone_formulaire_avance;
			$('options_form_type_avance').style.display = 'none';
			$('options_form_type_simple').style.display = '';
		}
	},
	recup_form : function(url, page){
		form = trim($('options_formulaire').value.split('\n').join(''));
		if (form!='' && url && url!='') {
			pars = 'action=recup_form&url=' + url + '&url_page=' + encodeURIComponent(page) + '&formulaire=' + encodeURIComponent(form);
			sso.envoie(pars);
		} else if (form=='') {
			sso.autolog(url);
		}
	},
	set_option_nom : function (url){
		if($('options_nom').value==Locale.btn_nouveau_lien){
			var nom_tmp = url.split('://');
			if(nom_tmp.length>1){
				nom_tmp.splice(0, 1);
			}
			nom_tmp = nom_tmp[0].split('.');
			if(nom_tmp[0].indexOf('www')==0 || nom_tmp[0].indexOf('ftp')==0){
				nom_tmp.splice(0, 1);
			}
			nom_tmp = nom_tmp[0].substring(0,1).toUpperCase() + nom_tmp[0].substring(1).toLowerCase();
			if(nom_tmp && nom_tmp!=''){
				$('options_nom').value = nom_tmp;
			}
		}
	},
	autolog : function (url){
		if(Formulaires[url].indexOf('<!--sso_generique-->') == -1){
			//Formulaire personnel
			var txt = Locale.options_confirme_formulaire;
			var pos = txt.indexOf('{url}');
			txt = txt.substring(0, pos) + url + txt.substring(pos + 5);
			if(confirm(txt)){
				Formulaires[url]='';
				var pars = 'action=supprime_form&url=' + encodeURIComponent(url);
				sso.envoie(pars);
			}
		} else {
			//Formulaire generique
			sso.alerte(Locale.options_icone_formulaire_generique);
		}
	},
//Envoie les donn?es au serveur
	//Tri = Si FireFox : desactive le "onclick"
	tri : function (sortable){
		sso.set_footer_bas();
		if(swap_old){
			if (swap_old!='liens'){
				$(swap_old).className='cache';
			}
			swap_old=void(0);
		}
		if (sortable.id.indexOf('reps')==-1 && sortable.id.indexOf('rep')!=-1){
			var id = sortable.id.substring(3);
			sso.tri_liens(Sortable.serialize(sortable), id);
		}
		if (sortable.id.indexOf('liens')!=-1){
			sso.tri_liens(Sortable.serialize(sortable), 0);
		}
		var pars = 'action=tri&id=' + sortable.id + '&' + Sortable.serialize(sortable);
		sso.envoie(pars);
		if(ssofast_tutorial==1){
			sso.tutorial('bouton_type_aff');
		}
	},
	tri_liens : function(tab, id){
		var tmp_id = new Array();
		var liste = tab.split('&');
		for (i=0; obj=liste[i]; i++){
			id_l = liste[i].split('=')[1].substring(1);
			tmp_id[id_l] = true;
		}
		for(i=0; obj=Liens[i]; i++){
			if (tmp_id[obj['id']]){
				obj['repertoire'] = id;
			}
		}
	},
	//Activation du "onclick" pour Firefox
	active_click : function(id){
		if (id.split('_')[0]=='lien'){
			tab = $(id).firstChild.getElementsByTagName('div');
		} else {
			tab = $(id).firstChild.firstChild.getElementsByTagName('div');
		}
		for(i=0;element=tab[i];i++){
			action = element.getAttribute('temporaire');
			if(action){
				element.setAttribute('onclick', action);
				element.removeAttribute('temporaire');
			}
		}
	},
	//Efface = Demande confirmation suivant le "type"
	efface : function (type, pos){
		if (type == 'rep'){
			texte = Locale.options_confirme_rep;
			obj = Repertoires[pos];
		} else {
			texte = Locale.options_confirme_lien;
			obj = Liens[pos];
		}
		if (sso.verif_droit() && confirm(texte)){
			if(type=='rep'){
				$('rep_r' + obj['id']).parentNode.removeChild($('rep_r' + obj['id']));
				for(i=0; el=Liens[i]; i++){
					if(el['repertoire']==obj['id']){
						Liens.splice(i, 1);
						i--;
					}
				}
				Repertoires.splice(pos, 1);
			} else {
				$('lien_l' + obj['id']).parentNode.removeChild($('lien_l' + obj['id']));
				Liens.splice(pos, 1);
			}
			if (ssofast_type_aff == 0) {
				if ($('reps').childNodes.length + $('liens').childNodes.length == 1){
					sso.message(Locale.erreur_liste_vide);
				}
			} else {
				sso.insert_tag();
				if (Liens.length==0) {
					sso.message(Locale.erreur_liste_vide);
				} else if ($('liens').childNodes.length==0) {
					sso.affiche_tag(0);
				}
			}
			if (Liens.length>0){
				$('sso_titre_marques_pages_nb').innerHTML = '(' + Liens.length + ')';
			} else {
				$('sso_titre_marques_pages_nb').innerHTML = '';
			}
			var pars = 'action=efface&type=' + type + '&id=' + obj['id'];
			sso.options();
			sso.set_footer_bas();
			sso.envoie(pars);
		}
	},
	test_tags : function(tags, test){
		var tab = tags.split(' ');
		var liste = '';
    	for(i=0; el1=tab[i]; i++){
    		for(j=0; el2=Tags[j]; j++){
    			if(el1.htmlEntities().toUpperCase() == el2['nom'].toUpperCase()){
    				liste += el2['id'] + ' ';
    				break;
    			}
    		}
   			if(j == Tags.length){
   				var pars = 'action=nouveau_tag'
    			pars += '&nom=' + encodeURIComponent(el1);
    			pars += test ? '&test=1' : '';
    			sso.envoie(pars);
    			return false;
    		}
    	}
		return trim(liste);
	},
	//Recuperation de tout les champs du lien ou repertoire
	//Si le formulaire est absent, demande au seveur le formulaire du lien
	recup_envoie : function(){
		if($('cadre_options')){
			var donnee = $('cadre_options').getAttribute('donnee').split('_');
			var type = donnee[0];
			var pos = donnee[1];
			var modif = '';
			if(type=='lien'){
				var obj = Liens[pos];
				if ($('options_tags')) {
					tags = trim($('options_tags').value);
					tags = tags.split('  ').join(' ');
					if (tags!='') {
						liste = sso.test_tags(tags);
						if (liste == false) {
							return false;
						}
					} else {
						liste = '';
					}
					if((obj['id_tag'] ? obj['id_tag'] : '') != liste){
						obj['id_tag'] = liste;
						modif += '&id_tag=' + encodeURIComponent(liste);
					}
				}
				if(obj['nom']!=$('options_nom').value){
					obj['nom'] = $('options_nom').value;
					$('lien_l' + obj['id']).firstChild.lastChild.innerHTML = obj['nom'].htmlEntities();
					modif += '&nom=' + encodeURIComponent(obj['nom']);
				}
				if($('options_url').value.indexOf('://')==-1 && $('options_url').value!=''){
					$('options_url').value = 'http://' + $('options_url').value;
				}
				var old_url = obj['url'];
				if((obj['url'] ? obj['url'] : '')!=$('options_url').value){
					obj['url'] = $('options_url').value;
					$('lien_l' + obj['id']).firstChild.firstChild.firstChild.src = 'favicons/favicon.php?favicon=' + obj['url'];
					modif += '&url=' + encodeURIComponent(obj['url']);
				}
				if ((obj['prive'] ? obj['prive'] : 0)!=$('options_prive').value) {
					obj['prive'] = $('options_prive').value;
					modif += '&prive=' + obj['prive'];
				}
				var nom_utilisateur = $('options_nom_utilisateur').value;
				if((obj['nom_utilisateur'] ? sso.decrypte(obj['nom_utilisateur']) : '')!=nom_utilisateur){
					obj['nom_utilisateur'] = sso.crypte(nom_utilisateur);
					modif += '&nom_utilisateur=' + encodeURIComponent(obj['nom_utilisateur']);
				}
				var mot_de_passe = $('options_mot_de_passe').value;
				if((obj['mot_de_passe'] ? sso.decrypte(obj['mot_de_passe']) : '')!=mot_de_passe){
					obj['mot_de_passe'] = sso.crypte(mot_de_passe);
					modif += '&mot_de_passe=' + encodeURIComponent(obj['mot_de_passe']);
				}
				if((obj['description'] ? obj['description'] : '')!=$('options_description').value){
					obj['description'] = $('options_description').value;
					$('lien_l' + obj['id']).firstChild.setAttribute('title', obj['description']);
					modif += '&description=' + encodeURIComponent(obj['description']);
				}
				if(obj['url']){
					var url = url_page = '';
					if (obj['url']!=''){
						var tab_url = obj['url'].split('?');
						if(tab_url.length>1){
							var data = tab_url[1];
						}
						tab_url = tab_url[0].split('/');
						if(tab_url[tab_url.length-1].indexOf('.')>-1 || tab_url[tab_url.length-1]==''){
							var url_page = tab_url.pop();
						}
						if(tab_url[0].indexOf(':')>-1){
							var url_protocole = tab_url[0];
							tab_url.splice(0,2);
						}
						url = tab_url.join('/');
					}
					if(url==''){
						if(url_page!=''){
							url = url_page;
							url_page = '';
						}
					}
					if(nom_utilisateur!='' || mot_de_passe!=''){
						if(!Formulaires[url] && url!='' && url_protocole!='ftp:'){
							if(modif.indexOf('&url=')==-1){
								modif += '&url=' + encodeURIComponent(obj['url']);
							}
							modif += '&test_formulaire=true';
						} else if(old_url!=obj['url']){
							sso.alerte(Locale.formulaire_present);
						}
					}
				}
			} else {
				var obj = Repertoires[pos];
/*
				tags = trim($('options_nom').value);
				if (tags != '') {
					liste = sso.test_tags(tags);
					if (liste == false) {
						return false;
					}
				}
*/
				if(obj['nom']!=$('options_nom').value){
					obj['nom'] = $('options_nom').value;
					$('rep' + obj['id']).firstChild.lastChild.innerHTML = obj['nom'].htmlEntities();
					modif += '&nom=' + encodeURIComponent(obj['nom']);
				}
				if((obj['ouvert'] ? obj['ouvert'] : false)!=$('options_ouvert').checked){
					obj['ouvert'] = $('options_ouvert').checked;
					modif += '&ouvert=' + obj['ouvert'];
				}
			}
			if(modif!=''){
				var pars = 'action=modifie'
				pars += '&type=' + type;
				pars += '&id=' + obj['id'];
				pars += modif;
				sso.envoie(pars);
			} else {
				sso.options();
				setTimeout('sso.test_tutorial();', 500);
			}
		}
	},
	modifie_compte : function(){
		var nouveau_mot_de_passe = ($('mon_compte_nouveau_mot_de_passe').value != '') ? MD5($('mon_compte_nouveau_mot_de_passe').value) : '';
		var ancien_mot_de_passe = ($('mon_compte_ancien_mot_de_passe').value != '') ? MD5($('mon_compte_ancien_mot_de_passe').value) : '';
		var pars = 'action=mon_compte';
		pars += '&entete=' + $('mon_compte_entete').value;
		pars += '&skin=' + $('mon_compte_theme').value;
		pars += '&skin_id=' + $('mon_compte_theme')[$('mon_compte_theme').selectedIndex].getAttribute('skin_id');
		pars += '&cache_temps=' + ($('mon_compte_cache_temps_heure').value*3600 + $('mon_compte_cache_temps_minute').value*60);
		pars += '&cache_auto=' + $('mon_compte_code_obligatoire').value;
		pars += '&reset_cpt=' + $('mon_compte_reset_cpt').checked;
		pars += '&type_aff_nb=' + $('mon_compte_nb_lien_tag').value;
		pars += '&nb_lien_clic=' + $('mon_compte_nb_lien_clic').value;
		if ($('mon_compte_nb_lien_tag').value != ssofast_type_aff_nb) {
			pars += '&tags=true';
		}
		pars += '&genere_code=' + ($('mon_compte_generateur_code_taille').value*1 + ($('mon_compte_generateur_code_special').checked+$('mon_compte_generateur_code_nombre').checked*2+$('mon_compte_generateur_code_majuscule').checked*4+$('mon_compte_generateur_code_minuscule').checked*8)/100);
		pars += '&email=' + encodeURIComponent($('mon_compte_email').value);
		pars += '&realName=' + encodeURIComponent($('mon_compte_realName').value);
		pars += '&nouveau_mot_de_passe=' + nouveau_mot_de_passe;
		pars += '&ancien_mot_de_passe=' + ancien_mot_de_passe;
		sso.envoie(pars);
	},
	//Envoie des donn?es au serveur, affiche l'indicateur
	envoie : function (pars){
		$('sso_indic').style.visibility = '';
		if(pars.indexOf('action=click')==-1 && pars.indexOf('action=affiche_news')==-1){
			sso.desactive_sso();
			t = setTimeout('sso.active_sso();', 5000);
		}
		//Definit une erreur de communication, le sereur doit la mettre ? "false"
		sso_erreur_communication = true;
//		var tmp = pars.substring(pars.indexOf('action=')+7);
//		action_ajax[action_ajax.length] = (tmp.indexOf('&')!=-1) ? tmp.substring(0, tmp.indexOf('&')) : tmp;
//		t1 = new Date();
		new Ajax.Request('donnee.php',{parameters:pars,onComplete:showResponse});
	},
	test_url : function(){
		var pars = 'action=test_url&url=' + encodeURIComponent($('options_url').value);
		sso.envoie(pars);
	},
	test_url_resultat : function(el){
		if($('options_ligne_test_url')){
 			if(el.indexOf('select_test_url')!=-1){
				el += sso.encadre_input('<input style="border:none;" class="bouton_vide" id="options_test_url_remplacer" onclick="$(\'options_url\').value=$(\'select_test_url\').value.substring(4);" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.test_url_remplacer + '"/>', 'bouton_fond', true);
			}
			var mydiv = document.createElement('div');
			mydiv.innerHTML = sso.encadre_input('<div id="cadre_test_url">' + el + '</div>', 'input_connection', true);
			while($('options_ligne_test_url').firstChild){
				$('options_ligne_test_url').removeChild($('options_ligne_test_url').firstChild);
			}
			$('options_ligne_test_url').appendChild(mydiv);
		}
	},
	//Autodetection du formulaire si absent de la base de donn?e (essaye 1 fois)
	autodetecte_formulaire : function(url, id, discret){
		if(lien_recup!=id){
			lien_recup = id;
			compte_recup = 0;
		}
		if(!compte_recup){
			if(!discret){
				compte_recup++;
				$('iframe_autodetect').setAttribute('discret', 'false');
			} else {
				$('iframe_autodetect').setAttribute('discret', 'true');
			}
			$('iframe_autodetect').src = 'autodetecte_formulaire.php?' + Math.random() + '&url=' + url;
		} else {
			if(!discret){
				var txt = Locale.formulaire_absent;
				var pos = txt.indexOf('{url}');
				txt = txt.substring(0, pos) + url + txt.substring(pos + 5);
				sso.alerte(txt, 'rouge');
				sso.options();
			}
		}
	},
	test_autodetect : function(){
		if(recup_old == $('iframe_autodetect').src){
			if($('iframe_autodetect').getAttribute('discret')=='true'){
				sso.test_url();
			} else {
				sso.recup_envoie();
			}
		}
		recup_old = $('iframe_autodetect').src;
	},
	test_import_bookmarks : function(){
	},
	//Teste les champs du formulaire suivant le "type" et envoie les donn?es au serveur
	test_formulaire : function(type){
		var erreur = false;
		switch (type){
			case '':
				$('titre_formulaire').innerHTML = Locale.inscription_titre;
				break;
			case 'connection':
				$('titre_formulaire').innerHTML = Locale.login_verification;
				$('titre_formulaire').style.visibility = 'hidden';
				break;
			case 'email':
				$('titre_formulaire').innerHTML = Locale.notes.texte_oublie_mdp.join('');
				break;
		}
		if ((type=='' || type=='connection') && $('nom_utilisateur').value == ''){
			erreur = true;
			$('txt_nom_utilisateur').className = 'texte_erreur';
			$('txt_nom_utilisateur').onmouseover = function(){ sso.alerte(Locale.erreur_nom_utilisateur); }
		} else if($('txt_nom_utilisateur')){
			$('txt_nom_utilisateur').className = '';
			$('txt_nom_utilisateur').onmouseover = function(){}
		}
		if ((type=='' || type=='connection') && $('mot_de_passe').value == ''){
			erreur = true;
			$('txt_mot_de_passe').className = 'texte_erreur';
			$('txt_mot_de_passe').onmouseover = function(){ sso.alerte(Locale.erreur_taille_mot_de_passe); }
		} else if($('txt_mot_de_passe')){
			$('txt_mot_de_passe').className = '';
			$('txt_mot_de_passe').onmouseover = function(){}
		}
		if (type=='' && ($('mot_de_passe').value != $('confirme_mot_de_passe').value || $('mot_de_passe').value == '')){
			erreur = true;
			$('txt_confirme_mot_de_passe').className = 'texte_erreur';
			$('txt_confirme_mot_de_passe').onmouseover = function(){ sso.alerte(Locale.erreur_mot_de_passe); }
		} else if($('txt_confirme_mot_de_passe')){
			$('txt_confirme_mot_de_passe').className = '';
			$('txt_confirme_mot_de_passe').onmouseover = function(){}
		}
		if (type=='' || type=='email'){
			var pos = $('email').value.indexOf('@');
			if(pos==-1 || $('email').value.substring(pos).indexOf('.')==-1 || $('email').value.substring(pos).indexOf('.')>$('email').value.substring(pos).length-3){
				erreur = true;
				$('txt_email').className = 'texte_erreur';
				$('txt_email').onmouseover = function(){ sso.alerte(Locale.erreur_email); }
			} else if($('txt_email')){
				$('txt_email').className = '';
				$('txt_email').onmouseover = function(){}
			}
		}
		if (type=='' && $('code_securite').value == ''){
			erreur = true;
			$('txt_code_securite').className = 'texte_erreur';
			$('txt_code_securite').onmouseover = function(){ sso.alerte(Locale.erreur_taille_code_securite); }
		} else if($('txt_code_securite')){
			$('txt_code_securite').className = '';
			$('txt_code_securite').onmouseover = function(){}
		}
		if (type=='' && ($('code_securite').value != $('confirme_code_securite').value || $('code_securite').value == '')){
			erreur = true;
			$('txt_confirme_code_securite').className = 'texte_erreur';
			$('txt_confirme_code_securite').onmouseover = function(){ sso.alerte(Locale.erreur_code_securite); }
		} else if($('txt_confirme_code_securite')){
			$('txt_confirme_code_securite').className = '';
			$('txt_confirme_code_securite').onmouseover = function(){}
		}
		if (!erreur){
			var pars
			switch (type){
				case '':
					pars = 'action=inscription&nom_utilisateur=' + $('nom_utilisateur').value + '&mot_de_passe=' + MD5($('mot_de_passe').value) + '&email=' + $('email').value + (($('code_securite').value!='') ? '&code_securite=' + MD5($('code_securite').value) :'');
					break;
				case 'connection':
					pars = 'action=connection&nom_utilisateur=' + $('nom_utilisateur').value + '&mot_de_passe=' + MD5($('mot_de_passe').value);
					$('titre_formulaire').innerHTML = Locale.login_verification;
					$('titre_formulaire').style.visibility = '';
					break;
				case 'email':
					pars = 'action=oublie_mdp&email=' + $('email').value;
					break;
			}
			sso.envoie(pars);
		}
	},
	//Page de Connection utilisateur
	connection : function(){
		//Initialisation des variables
		var nom_utilisateur = mot_de_passe = '';
		//Cache l'indicateur
		$('sso_indic').style.visibility = 'hidden';
		sso.affiche_page(Page.connection(nom_utilisateur, mot_de_passe));
		var tab_a = $('txt_home').getElementsByTagName('a');
		for(var i=0; el=tab_a[i]; i++){
			href = el.getAttribute('href').split('/');
			href = href[href.length-1];
			href = href.split('.html');
			el.href = 'javascript:void(0);';
			if(href[1]==''){
				if(href[0]=='faq'){ el.onclick = function(){ sso.chargepage('faq'); } } else
				if(href[0]=='guide_utilisation'){ el.onclick = function(){ sso.chargepage('guide_utilisation'); } }
			} else if(href[1]=='#AutoLog'){
				if(href[0]=='faq'){ el.onclick = function(){ sso.chargepage('faq', 'AutoLog'); } }
			}
		}
		sso.set_footer_bas();
		sso.envoie('action=affiche_news');
		//Focus sur le nom d'utilisateur
        $('nom_utilisateur').focus();
		Event.observe(document, 'mousemove', showPosition, false);
	},
	login : function(){
		sso.alerte();
		//Initialisation des variables
		var nom_utilisateur = mot_de_passe = '';
		//Cache l'indicateur
		$('sso_indic').style.visibility = 'hidden';
		//Si le nom d'utilisateur et le mot de passe sont d?j? renseign?s, recuperation de leur valeur
		if($('nom_utilisateur') && $('mot_de_passe')){
			nom_utilisateur = $('nom_utilisateur').value
			if (nom_utilisateur!=''){
				mot_de_passe = $('mot_de_passe').value
			}
		}
		$('sso_cadre_login').innerHTML = Page.login(nom_utilisateur, mot_de_passe);
		//Focus sur le nom d'utilisateur
   		$('nom_utilisateur').focus();
	},
	//Page Inscription utilisateur
	inscription : function(){
		sso.alerte();
		//Cache l'indicateur
		$('sso_indic').style.visibility = 'hidden';
		//Initialisation des variables
		var nom_utilisateur = mot_de_passe = '';
		//Si le nom d'utilisateur et le mot de passe sont d?j? renseign?s, recuperation de leur valeur
		if($('nom_utilisateur') && $('mot_de_passe')){
			nom_utilisateur = $('nom_utilisateur').value
			if (nom_utilisateur!=''){
				mot_de_passe = $('mot_de_passe').value
			}
		}
		$('sso_cadre_login').innerHTML = Page.inscription(nom_utilisateur, mot_de_passe);
		if(nom_utilisateur==''){
			//Focus sur le nom d'utilisateur
			$('nom_utilisateur').focus();
		} else if(mot_de_passe==''){
			//
			$('mot_de_passe').focus();
		} else {
			//
			$('confirme_mot_de_passe').focus();
		}
	},
	//Page Oublie de Mot de Passe
	oublie_mdp : function(){
		sso.alerte();
		//Cache l'indicateur
		$('sso_indic').style.visibility = 'hidden';
		$('sso_cadre_login').innerHTML = Page.oublie_mdp();
		//Focus sur l'email
		$('email').focus();
	},
	login_forum : function(){
		var expires = new Date ();
		expires.setTime (expires.getTime() - (24 * 60 * 60 * 1000));
		setCookie('PHPSESSID', '', expires), '/';
		setCookie('SMFCookie802', '', expires, '/forum/', '.www.ssofast.com');
		var form = document.createElement('div');
		form.innerHTML = Formulaires['sso_forum'];
		$('formulaire').innerHTML = '';
		$('formulaire').appendChild(form);
		form.lastChild.submit();
	},
	//Deconnection
	deconnection : function(){
		if($('cadre_alerte')){
			$('cadre_alerte').style.display='none';
		}
		if($('focus')){
			$('focus').style.display = 'none';
			$('focus').style.left = '-50px';
			$('focus').style.top = '-50px';
		}
		tutorial_pos = '';
		if (t_decompte) {
			clearTimeout(t_decompte);
		}
		if (t_alerte) {
			clearTimeout(t_alerte);
		}
		t = t_compteur = swap_old = alerte_old = id_cible_old = void(0);
		var expires = new Date ();
		expires.setTime (expires.getTime() - (24 * 60 * 60 * 1000));
		setCookie('PHPSESSID', '', expires, '/');
		setCookie('SMFCookie802', '', expires, '/forum/', '.www.ssofast.com');
		setCookie('ssofast_session_id', '', expires, '/');
		deleteCookie('ssofast_session_id');
		sso.connection();
	},
	//Debut de page
	header : function() {
		Repertoires = new Array();
		Liens = new Array();
		Tags = new Array();
		Formulaires = new Array();
		if($('sso_clef_de_cryptage')){
			var clef = $('sso_clef_de_cryptage').value;
		}
		//Cache l'indicateur
		$('sso_indic').style.visibility = 'hidden';
		sso.affiche_page(Page.header(clef));
		Event.observe('focus', 'mouseover', function(){$('focus').style.display='none';});
		Event.observe('sso_clef_de_cryptage', 'keyup', function(){sso.tutorial('sso_clef_de_cryptage');});
		Event.observe('sso_clef_de_cryptage', 'click', function(){sso.tutorial('sso_clef_de_cryptage');});
		Event.observe('bouton_verrouiller', 'click', function(){sso.test_tutorial();});
		Event.stopObserving(document, 'mousemove', showPosition, false);
		//Focus sur la clef de cryptage
		$('sso_clef_de_cryptage').focus();
		if($('sso_clef_de_cryptage').value != ''){
			test_code($('sso_clef_de_cryptage').value, true, 'cell_test_code');
		}
	},
	swap_mon_compte : function(){
		var obj1 = $('mon_compte_page1');
		var obj2 = $('mon_compte_page2');
		if(obj1.style.display == ''){
			obj1.style.display = 'none';
			obj2.style.display = '';
			$('mon_compte_avance').innerHTML = Locale.mon_compte_retour;
		} else {
			obj1.style.display = '';
			obj2.style.display = 'none';
			$('mon_compte_avance').innerHTML = Locale.mon_compte_avance;
		}
		if(ssofast_tutorial==1){
			clearTimeout(t);
			sso.tutorial('mon_compte_tutorial', obj1.style.display);
		}
	},
	test_genere_code : function(){
		var code = $('mon_compte_generateur_code_special').checked + $('mon_compte_generateur_code_nombre').checked*2 + $('mon_compte_generateur_code_majuscule').checked*4 + $('mon_compte_generateur_code_minuscule').checked*8;
		if(!code){
			$('mon_compte_generateur_code_nombre').checked = true;
			$('mon_compte_generateur_code_minuscule').checked = true;
		}
	},
//"Mon Compte"
	mon_compte : function(){
		sso.test_affichage('cadre_mon_compte');
		if($('cadre_mon_compte')){
			$('header').removeChild($('cadre_mon_compte'));
			if(ssofast_tutorial==1){
				clearTimeout(t);
				sso.tutorial('sso_forum');
			}
		} else {
			var cadre = '<div id="cadre_mon_compte" ' + (ie?'style="filter:alpha(opacity=0);"':'style="opacity:0;"') + ' class="cadre_mon_compte">';
			cadre += '<form id="form_cadre" onsubmit="sso.modifie_compte();return false;">';
			cadre += '<table width="100%" align="center" cellspacing="0" cellpadding="5"><tbody>';
			cadre += '<tr><th align="left">' + Locale.mon_compte + '</th><th align="right"><div id="mon_compte_bouton_fermer" class="bouton_fermer" onclick="sso.mon_compte();" title="' + Locale.btn_fermer + '"></div></th></tr>';
			cadre += '<tr>';
			cadre += '<td align="left"><input id="mon_compte_tutorial" type="checkbox" style="border:none;" onclick="sso.set_tutorial(this.checked?1:0);sso.alerte();"' + (ssofast_tutorial==1?'checked':'') + '> ' + Locale.mon_compte_affiche_tutorial + '</td>';
			cadre += '<td align="right">';
			cadre += '<table cellspacing="0" cellpadding="0" class="bouton_vide" onclick="sso.swap_mon_compte();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';"><tbody>';
			cadre += '<tr><td>' + sso.encadre_input('&nbsp;<span id="mon_compte_avance">' + Locale.mon_compte_avance + '</span>&nbsp;', 'bouton_fond', true) + '</td></tr>';
			cadre += '</tbody></table>';
			cadre += '</td>';
			cadre += '</tr><tr><td colspan="2">';
			cadre += '<table id="mon_compte_page1" width="100%" align="center" cellspacing="8" cellpadding="0"><tbody><tr>';
			cadre += '<td>' + Locale.mon_compte_entete + ' : </td><td>';
			el = '<select style="width:145px;" id="mon_compte_entete" onchange="sso.envoie(\'action=change_entete&ssofast_entete=\' + this.value);" onkeyup="sso.envoie(\'action=change_entete&id=\' + this.value);">';
			var choix_entete = ssofast_choix_entete;
			var entete = ssofast_entete;
			el += '<option value="0" ' + (entete==0 ? 'selected' : '') + '>' + Locale.mon_compte_entete_desactive + '</option>';
			for(i=0;obj=choix_entete[i];i++){
				val = obj.split(',');
				el += '<option value="' + val[0] + '" ' + ((val[0]==entete) ? 'selected' : '') + '>' + val[1] + '</option>';
			}
			el += '</select>';
			cadre += sso.encadre_input(el, 'input_connection', true);
			cadre += '</td></tr><tr>';

			cadre += '<td>' + Locale.mon_compte_theme + ' : </td><td>';
			el = '<select style="width:145px;" id="mon_compte_theme" onchange="sso.set_skin(this.value);" onkeyup="sso.set_skin(this.value);">';
			var choix_theme = ssofast_choix_skin;
			var skin = getCookie('ssofast_skin');
			for(i=0;obj=choix_theme[i];i++){
				val = obj.split(',');
				el += '<option skin_id="' + val[0] + '" value="' + val[1] + '" ' + ((val[1]==skin) ? 'selected' : '') + '>' + val[1] + ' (' + val[2] + ')</option>';
			}
			el += '</select>';
			cadre += sso.encadre_input(el, 'input_connection', true);
			cadre += '</td></tr><tr>';
			cadre += '<td>' + Locale.mon_compte_code_obligatoire + ' : </td><td>';
			el = '<select style="width:145px;" id="mon_compte_code_obligatoire">';
			el += '<option value="0" ' + (ssofast_cache_auto==0 ? 'selected' : '') + '>' + Locale.mon_compte_voir_favoris + '</option>';
			el += '<option value="1" ' + (ssofast_cache_auto==1 ? 'selected' : '') + '>' + Locale.mon_compte_cacher_favoris + '</option>';
			el += '</select>';
			cadre += sso.encadre_input(el, 'input_connection', true);
			cadre += '</td></tr><tr>';

			cadre += '<td>' + Locale.mon_compte_cache_temps + ' : <br/>(0 ' + Locale.mon_compte_heure + ' 0 ' + Locale.mon_compte_minute + ' = ' + Locale.mon_compte_cache_temps_desactive + ')</td><td valign="top">';
			temps = ssofast_cache_temps;
			heure = Math.floor(temps/3600);
			minute = Math.floor((temps%3600)/60);
			second = temps%60;
			cadre += '<table cellspacing="2" cellpadding="0"><tbody><tr>';
			el = '<input id="mon_compte_cache_temps_heure" value="' + heure + '" autocomplete="OFF" style="width:15px;" onchange="if(isNaN(this.value)){this.value=0;}if(this.value>99){this.value=99;}"/>';
			cadre += '<td>' + sso.encadre_input(el, 'input_connection', true) + '</td><td>' + Locale.mon_compte_heure + '</td>';
			el = '<input id="mon_compte_cache_temps_minute" value="' + minute + '" autocomplete="OFF" style="width:15px;" onchange="if(isNaN(this.value)){this.value=0;}if(this.value>59){this.value=59;}"/>';
			cadre += '<td>' + sso.encadre_input(el, 'input_connection', true) + '</td><td>' + Locale.mon_compte_minute + '</td>';
			cadre += '</tbody></table></td></tr><tr>';
			cadre += '<td colspan="2"><div style="float:right;padding-right:10px;"><input id="mon_compte_reset_cpt" type="checkbox"' + (ssofast_reset_cpt==1 ? ' checked' : '') + '/></div>';
			cadre += Locale.mon_compte_reset_cpt + ' : </td></tr><tr>';

//			cadre += '<td>' + Locale.mon_compte_nb_lien_tag + ' : </td><td>';
			el = '<input id="mon_compte_nb_lien_tag" value="' + ssofast_type_aff_nb + '" autocomplete="OFF" style="width:25px;" onchange="if(isNaN(this.value)){this.value=10;}if(this.value<1){this.value=10;}"/>';
			cadre += '<td colspan="2"><div style="float:right;padding-right:10px;">' + sso.encadre_input(el, 'input_connection', true) + '</div>';
			cadre += Locale.mon_compte_nb_lien_tag + ' : ';
			cadre += '</td></tr><tr>';
//			cadre += '<td>' + Locale.mon_compte_nb_lien_clic + ' : </td><td>';
			el = '<input id="mon_compte_nb_lien_clic" value="' + ssofast_nb_lien_clic + '" autocomplete="OFF" style="width:25px;" onchange="if(isNaN(this.value)){this.value=5;}if(this.value<1){this.value=5;}"/>';
			cadre += '<td colspan="2"><div style="float:right;padding-right:10px;">' + sso.encadre_input(el, 'input_connection', true) + '</div>';
			cadre += Locale.mon_compte_nb_lien_clic + ' : ';
			cadre += '</td></tr><tr>';
			cadre += '<td>' + Locale.mon_compte_email + ' : </td><td>';
			el = '<input id="mon_compte_email" value="' + ssofast_email + '" autocomplete="OFF"/>';
			cadre += sso.encadre_input(el, 'input_connection', true);
			cadre += '</td></tr><tr>';
			cadre += '<td>' + Locale.mon_compte_nom_forum + ' : </td><td>';
			el = '<input id="mon_compte_realName" value="' + ssofast_realName + '" autocomplete="OFF"/>';
			cadre += sso.encadre_input(el, 'input_connection', true);
			cadre += '</td></tr>';
			cadre += '</tboby></table>';

			cadre += '<table id="mon_compte_page2" style="display:none;" width="100%" align="center" cellspacing="0" cellpadding="5"><tbody><tr>';
			cadre += '<td width="50%">' + Locale.mon_compte_generateur_code + ' : </td><td>';
			cadre += '<table cellspacing="2" cellpadding="0"><tbody><tr>';
			var genere_code = ssofast_genere_code;
			var genere_code_taille = Math.floor(genere_code);
			el = '<input id="mon_compte_generateur_code_taille" value="' + genere_code_taille + '" autocomplete="OFF" style="width:15px;" onchange="if(isNaN(this.value)){this.value=8;}if(this.value<1){this.value=8;}if(this.value>99){this.value=99;}"/>';
			cadre += '<td>' + sso.encadre_input(el, 'input_connection', true) + '</td><td>' + Locale.mon_compte_generateur_code_taille + '</td>';
			cadre += '</tbody></table></td></tr><tr><td colspan="2">';
			cadre += '<table cellspacing="2" cellpadding="0" align="center"><tbody><tr>';
			var options = Math.round((genere_code - genere_code_taille)*100);
			cadre += '<td><input type="checkbox" id="mon_compte_generateur_code_special"' + (options%2 ? ' checked' : '')  + ' onchange="sso.test_genere_code();"/> ' + Locale.mon_compte_generateur_code_special + '</td>';
			options = Math.floor(options/2);
			cadre += '<td><input type="checkbox" id="mon_compte_generateur_code_nombre"' + (options%2 ? ' checked' : '')  + ' onchange="sso.test_genere_code();"/> ' + Locale.mon_compte_generateur_code_nombre + '</td>';
			options = Math.floor(options/2);
			cadre += '<td><input type="checkbox" id="mon_compte_generateur_code_majuscule"' + (options%2 ? ' checked' : '')  + ' onchange="sso.test_genere_code();"/> ' + Locale.mon_compte_generateur_code_majuscule + '</td>';
			options = Math.floor(options/2);
			cadre += '<td><input type="checkbox" id="mon_compte_generateur_code_minuscule"' + (options%2 ? ' checked' : '')  + ' onchange="sso.test_genere_code();"/> ' + Locale.mon_compte_generateur_code_minuscule + '</td>';
			cadre += '</tr></tbody></table>';
			cadre += '</td></tr><tr>';
			cadre += '<td align="center" valign="top">';
			cadre += '<table cellspacing="0" cellpadding="0" class="txt_contact" onclick="sso.import_bookmarks();" onmouseover="this.className=\'txt_contact\';$(\'bouton_importer\').className=\'bouton_importer2\'" onmouseout="this.className=\'txt_contact\';$(\'bouton_importer\').className=\'bouton_importer\'"><tbody>';
			cadre += '<tr><td height="13"></td><td width="10"></td><td rowspan="2" valign="bottom"><div id="bouton_importer" class="bouton_importer"></div></td></tr>';
			cadre += '<tr><td>' + sso.encadre_input('<input id="sso_import_bookmarks" class="bouton_vide" style="border:none;" type="button" value="' + Locale.mon_compte_importer + '"/>', 'bouton_fond', true) + '</td></tr>';
			cadre += '</tbody></table>';
			cadre += '</td>';
			cadre += '<td align="center" valign="top">';
			cadre += '<table cellspacing="0" cellpadding="0" class="txt_contact" onclick="sso.exporter($(\'sso_export_module\').checked);" onmouseover="this.className=\'txt_contact\';$(\'bouton_exporter\').className=\'bouton_exporter2\'" onmouseout="this.className=\'txt_contact\';$(\'bouton_exporter\').className=\'bouton_exporter\'"><tbody>';
			cadre += '<tr><td height="13"></td><td width="10"></td><td rowspan="2" valign="bottom"><div id="bouton_exporter" class="bouton_exporter"></div></td></tr>';
			cadre += '<tr><td>' + sso.encadre_input('<input id="sso_export_bookmarks" class="bouton_vide" style="border:none;" type="button" value="' + Locale.mon_compte_exporter + '"/>', 'bouton_fond', true) + '</td></tr>';
			cadre += '</tbody></table><br/>';
			cadre += '<input id="sso_export_module" type="checkbox" style="border:none;"/> ' + Locale.mon_compte_export_module;
			cadre += '</td></tr><tr>';
			cadre += '<tr><td>' + Locale.mon_compte_change_mdp + ' : </td><td>';
			el = '<input type="password" id="mon_compte_nouveau_mot_de_passe" autocomplete="OFF"/>';
			cadre += sso.encadre_input(el, 'input_connection', true) + '</td></tr>';
			cadre += '<td colspan="2" align="center">';
			cadre += '<table cellspacing="0" cellpadding="0" class="txt_contact" onclick="sso.change_code();" onmouseover="this.className=\'txt_contact\';$(\'bouton_change_code\').className=\'bouton_change_code2\'" onmouseout="this.className=\'txt_contact\';$(\'bouton_change_code\').className=\'bouton_change_code\'"><tbody>';
			cadre += '<tr><td height="13"></td><td width="10"></td><td rowspan="2" valign="bottom"><div id="bouton_change_code" class="bouton_change_code"></div></td></tr>';
			cadre += '<tr><td>' + sso.encadre_input('<input id="sso_change_code" class="bouton_vide" style="border:none;" type="button" value="' + Locale.mon_compte_change_code + '"/>', 'bouton_fond', true) + '</td></tr>';
			cadre += '</tbody></table>';
			cadre += '</td>';
			cadre += '</tr></tboby></table></td>';
			cadre += '</tr><tr><td colspan="2"><hr/></td>';
			cadre += '</tr><tr>';
			cadre += '<td colspan="2">' + Locale.mon_compte_reclame_mdp + ' : ';
			el = '<input type="password" id="mon_compte_ancien_mot_de_passe" autocomplete="OFF"/>';
			cadre += '<div style="float:right;padding-right:15px;">' + sso.encadre_input(el, 'input_connection', true) + '</div>';
			cadre += '</td></tr><tr><td>';
			cadre += sso.encadre_input('<input style="border:none;" class="bouton_vide" id="mon_compte_modifier" onclick="sso.modifie_compte();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.btn_valider + '"/>', 'bouton_fond', true);
			cadre += '</td></tr></tbody></table>';
			cadre += '<input type="submit" value="" style="border:none;width:0px;height:0px;"/></form></div>';
			$('header').innerHTML += cadre;
			Event.observe('mon_compte_entete', 'focus', function(){sso.tutorial('mon_compte_entete');});
			Event.observe('mon_compte_theme', 'focus', function(){sso.tutorial('mon_compte_theme');});
			Event.observe('mon_compte_cache_temps_heure', 'focus', function(){sso.tutorial('mon_compte_cache_temps_heure');});
			Event.observe('mon_compte_cache_temps_minute', 'focus', function(){sso.tutorial('mon_compte_cache_temps_minute');});
			Event.observe('mon_compte_code_obligatoire', 'focus', function(){sso.tutorial('mon_compte_code_obligatoire');});
			Event.observe('mon_compte_nb_lien_tag', 'focus', function(){sso.tutorial('mon_compte_nb_lien_tag');});
			Event.observe('mon_compte_email', 'focus', function(){sso.tutorial('mon_compte_email');});
			Event.observe('mon_compte_realName', 'focus', function(){sso.tutorial('mon_compte_realName');});
			Event.observe('mon_compte_avance', 'mouseover', function(){sso.tutorial('mon_compte_avance');});
			Event.observe('mon_compte_generateur_code_taille', 'focus', function(){sso.tutorial('mon_compte_generateur_code_taille');});
			Event.observe('mon_compte_generateur_code_special', 'mouseover', function(){sso.tutorial('mon_compte_generateur_code_special');});
			Event.observe('mon_compte_generateur_code_nombre', 'mouseover', function(){sso.tutorial('mon_compte_generateur_code_nombre');});
			Event.observe('mon_compte_generateur_code_majuscule', 'mouseover', function(){sso.tutorial('mon_compte_generateur_code_majuscule');});
			Event.observe('mon_compte_generateur_code_minuscule', 'mouseover', function(){sso.tutorial('mon_compte_generateur_code_minuscule');});
			Event.observe('sso_import_bookmarks', 'mouseover', function(){sso.tutorial('sso_import_bookmarks');});
			Event.observe('sso_export_bookmarks', 'mouseover', function(){sso.tutorial('sso_export_bookmarks');});
			Event.observe('sso_export_module', 'mouseover', function(){sso.tutorial('sso_export_module');});
			Event.observe('mon_compte_nouveau_mot_de_passe', 'focus', function(){sso.tutorial('mon_compte_nouveau_mot_de_passe');});
			Event.observe('sso_change_code', 'mouseover', function(){sso.tutorial('sso_change_code');});
			Event.observe('mon_compte_ancien_mot_de_passe', 'focus', function(){sso.tutorial('mon_compte_ancien_mot_de_passe');});
			Rico.Corner.round($('cadre_mon_compte'), {blend:false, color:'transparent'});
			new Effect.Opacity('cadre_mon_compte', {duration:0.5, from:0.2, to:1});
			sso.alerte();
			if(ssofast_tutorial==1){
				clearTimeout(t);
				t = setTimeout('sso.tutorial(\'mon_compte_tutorial\');', 500);
			}
		}
	},
	//Importation bookmarks
	import_bookmarks : function(){
		sso.test_affichage('cadre_importer');
		if($('cadre_importer')){
			$('header').removeChild($('cadre_importer'));
			if($('tutorial')){
				sso.alerte();
			}
		} else {
			if (sso.verif_droit(true)) {
				var cadre = '<div align="center" ' + (ie?'style="filter:alpha(opacity=0);"':'style="opacity:0;"') + ' id="cadre_importer" class="cadre_importer">';
				cadre += '<form enctype="multipart/form-data" action="import_bookmarks.php" target="sso_output_import" method="post" id="sso_form_import" style="display:inline">';
				cadre += '<table width="100%" align="center" cellspacing="0" cellpadding="5"><tbody><tr>';
				cadre += '<th align="left">' + Locale.mon_compte_importer + '</th><th align="right"><div class="bouton_fermer" onclick="sso.import_bookmarks();" title="' + Locale.btn_fermer + '"></div></th></tr>';
				cadre += '<tr><td align="center" colspan="2"><input type="file" id="sso_import" name="sso_import" onchange="$(\'sso_form_import\').submit(); $(\'sso_form_import\').innerHTML = Locale.patienter;$(\'sso_output_import\').style.display=\'\';"/></td>';
				cadre += '</tr></tbody></table></form>';
				cadre += '<iframe id="sso_output_import" name="sso_output_import" src="about:blank" style="display:none;border:none;height:25px;"/>';
				cadre += '</div>';
				$('header').innerHTML += cadre;
				$('sso_output_import').onload = function(){ this.onload = function(){ this.onload = function(){ sso.envoie('action=initialise'); } } }
				Rico.Corner.round($('cadre_importer'), {blend:false, color:'transparent'});
				new Effect.Opacity('cadre_importer', {duration:0.5, from:0.2, to:1});
				sso.alerte();
			}
		}
	},
	test_affichage : function(cadre){
		if($('focus')){
			$('focus').style.display = 'none';
		}
		if($('cadre_importer') && cadre!='cadre_importer'){
			$('header').removeChild($('cadre_importer'));
		}
		if($('cadre_change_code') && cadre!='cadre_change_code'){
			$('header').removeChild($('cadre_change_code'));
		}
		if($('cadre_mon_compte') && cadre!='cadre_mon_compte'){
			$('header').removeChild($('cadre_mon_compte'));
		}
		if($('cadre_options') && cadre!='cadre_options'){
			$('header').removeChild($('cadre_options'));
		}
		sso.centre_cadre('cadre_alerte');
	},
	exporter : function(sso_export_module){
		$('formulaire').innerHTML = '<iframe src="export_bookmarks.php?sso_export_module=' + sso_export_module + '"/>';
	},
	//Remplacement code de securite
	change_code : function(){
		sso.test_affichage('cadre_change_code');
		if($('cadre_change_code')){
			$('header').removeChild($('cadre_change_code'));
			if($('tutorial')){
				sso.alerte();
			}
		} else {
			if (sso.verif_droit(true)) {
				var cadre = '<div align="center" ' + (ie?'style="filter:alpha(opacity=0);"':'style="opacity:0;"') + ' id="cadre_change_code" class="cadre_change_code">';
				cadre += '<table width="100%" align="center" cellspacing="0" cellpadding="5"><tbody><tr>';
				cadre += '<th align="left">' + Locale.mon_compte_change_code + '</th><th align="right"><div class="bouton_fermer" onclick="sso.change_code();" title="' + Locale.btn_fermer + '"></div></th></tr>';
				cadre += '<tr><td id="txt_ancien_code">' + Locale.change_code_ancien_code + '</td><td>';
				el = '<input type="password" id="sso_ancien_code"/>';
				cadre += sso.encadre_input(el, 'input_connection', true);
				cadre += '</td></tr>';
				cadre += '<tr><td id="txt_nouveau_code">' + Locale.change_code_nouveau_code + '</td><td>';
				cadre += '<table cellspacing="0" cellpadding="0"><tbody><tr><td>';
				cadre += '<table id="table_test_code2" cellspacing="1" width="100%" style="border:1px solid;"><tr><td id="cell_test_code2" height=5 width="10%" bgcolor="red"></td><td></td></tr></table>';
				el = '<input type="password" autocomplete="OFF" id="sso_nouveau_code" onKeyUp="test_code(this.value, false, \'cell_test_code2\');"/>';
				cadre += sso.encadre_input(el, 'input_connection', true);
				cadre += '</td></tr></tbody></table>';
				cadre += '</td></tr>';
				cadre += '<tr><td id="txt_confirme_nouveau_code">' + Locale.change_code_confirme_nouveau_code + '</td><td>';
				el = '<input type="password" id="sso_confirme_nouveau_code"/>';
				cadre += sso.encadre_input(el, 'input_connection', true);
				cadre += '</td></tr>';
				cadre += '<tr><td>';
				cadre += '<table id="change_code_modifier" cellspacing="0" cellpadding="0" class="bouton_vide" onclick="sso.envoie_change_code();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';"><tbody>';
				cadre += '<tr><td>' + sso.encadre_input('&nbsp;' + Locale.btn_modifier + '&nbsp;', 'bouton_fond', true) + '</td></tr>';
				cadre += '</tbody></table>';
				cadre += '</td></tr>';
				cadre += '</tbody></table>';
				cadre += '</div>';
				$('header').innerHTML += cadre;
				$('sso_ancien_code').select();
				$('sso_ancien_code').focus();
				Rico.Corner.round($('cadre_change_code'), {blend:false, color:'transparent'});
				new Effect.Opacity('cadre_change_code', {duration:0.5, from:0.2, to:1});
				sso.alerte();
			}
		}
	},
	//Modifie code
	envoie_change_code : function(ok){
		var ancien_code = $('sso_ancien_code').value;
		var nouveau_code = $('sso_nouveau_code').value;
		var confirme_nouveau_code = $('sso_confirme_nouveau_code').value;
		if(MD5(ancien_code) != ssofast_code_securite){
			$('txt_ancien_code').className = 'texte_erreur';
			$('txt_ancien_code').onmouseover = function(){ sso.alerte(Locale.erreur_ancien_code); }
			return false;
		} else {
			$('txt_ancien_code').className = '';
			$('txt_ancien_code').onmouseover = function(){}
		}
		if(nouveau_code==''){
			$('txt_nouveau_code').className = 'texte_erreur';
			$('txt_nouveau_code').onmouseover = function(){ sso.alerte(Locale.erreur_nouveau_code); }
			return false;
		} else {
			$('txt_nouveau_code').className = '';
			$('txt_nouveau_code').onmouseover = function(){}
		}
		if(nouveau_code != confirme_nouveau_code){
			$('txt_confirme_nouveau_code').className = 'texte_erreur';
			$('txt_confirme_nouveau_code').onmouseover = function(){ sso.alerte(Locale.erreur_confirme_nouveau_code); }
			sso.alerte('Les codes ne correspondent pas');
			return false;
		} else {
			$('txt_confirme_nouveau_code').className = '';
			$('txt_confirme_nouveau_code').onmouseover = function(){}
		}
		if(nouveau_code == ancien_code){
			sso.change_code();
			sso.alerte(Locale.erreur_code_identique);
			return false;
		}
		var pars = 'action=change_code&c=' + MD5(nouveau_code);
		var nom, mdp;
		for(var i=0; obj=Liens[i]; i++){
			if(obj['nom_utilisateur'] || obj['mot_de_passe']){
				nom = sso.decrypte(decodeURIComponent(obj['nom_utilisateur']));
				mdp = sso.decrypte(decodeURIComponent(obj['mot_de_passe']));
				if (ok){
					obj['nom_utilisateur'] = encodeURIComponent(sso.crypte(nom, nouveau_code));
					obj['mot_de_passe'] = encodeURIComponent(sso.crypte(mdp, nouveau_code));
				} else {
					pars += '&i[]=' + obj['id'];
					pars += '&n[]=' + encodeURIComponent(sso.crypte(nom, nouveau_code));
					pars += '&m[]=' + encodeURIComponent(sso.crypte(mdp, nouveau_code));
				}
			}
		}
		if(ok){
			ssofast_code_securite = MD5(nouveau_code);
			$('sso_clef_de_cryptage').value = nouveau_code;
			test_code(nouveau_code, true, 'cell_test_code');
			sso.change_code();
		} else {
			sso.envoie(pars);
		}
	},
	//Message d'alerte (couleur = non specifi?, rouge ou vert)
	alerte : function(alerte, couleur, temps){
		if(t_alerte){
			clearTimeout(t_alerte);
		}
		if(!alerte && $('cadre_alerte').style.display==''){
			$('cadre_alerte').innerHTML = '';
			$('cadre_alerte').style.display='none';
		} else if (alerte){
			alerte = '<table cellpadding="5"><tbody><tr><td class="cadre_alerte_' + (couleur ? couleur : 'neutre') + '">' + alerte + '</td></tr></tbody></table>';
			if(alerte!=alerte_old || !temps){
				alerte_old = alerte;
				$('cadre_alerte').innerHTML = sso.encadre_input(alerte, '', true);
				$('cadre_alerte').className = 'cadre_alerte';
				$('cadre_alerte').style.display='';
				if(!$('sso_formulaire')){
					sso.centre_cadre('cadre_alerte');
				} else {
					$('cadre_alerte').style.margin = '10px 10px 10px 0px;';
				}
				new Effect.Opacity('cadre_alerte', {duration:0.5, from:0.2, to:1});
				if (temps!='sans'){
						temps = temps ? temps : 3000 * alerte.split('<br').length;
						t_alerte = setTimeout('try{new Effect.Opacity(\'cadre_alerte\', {duration:1, from:0.9, to:0});setTimeout(\'$(\\\'cadre_alerte\\\').innerHTML=\\\'\\\';\', 1000);}catch(e){$(\'header\').removeChild($(\'cadre_alerte\'));}', temps);
				}
			}
		}
	},
	//Affiche la page txt
	chargepage : function(page, pos){
		var new_page = '<div id="sso_logo_bis" class="logo"></div>';
		new_page += '<div align="center" class="bouton_retour" onclick="sso.set_footer_bas();"><< ' + (getCookie('ssofast_session_id')?Locale.btn_retour_ssofast:Locale.btn_retour_connection) + '</div>';
		new_page += '<div class="txt_home" id="doc_pages">';
		new_page += eval('Locale.pages.' + page).join('');
		new_page += '</div>';
		new_page += '<div align="center" class="bouton_retour" onclick="sso.set_footer_bas();"><< ' + (getCookie('ssofast_session_id')?Locale.btn_retour_ssofast:Locale.btn_retour_connection) + '</div>';
		$('footer_page').innerHTML = new_page;
		sso.taille_fenetre();
		$('doc_pages').style.height = (sso_ty - $('sso_logo_bis').offsetHeight - $('footer_ligne').offsetHeight - 150) + 'px';
		sso.set_footer_haut();
		if(pos){
			$(pos).innerHTML = '<font color="blue"><i>' + $(pos).innerHTML + '</i></font>';
			setTimeout('$(\'doc_pages\').scrollTop=$(\''+pos+'\').offsetTop-$(\'doc_pages\').offsetTop;', 1250);
		}
	},
	affiche_page : function(page){
		document.body.innerHTML = page;
		document.body.setAttribute('onresize', 'sso.repositionne();');
	},
//Messages en bas des liens
	message : function(texte){
		$('sso_messages').innerHTML = texte;
	},
//Ouvre l'URL
	ouvre_url : function(obj, avec_form){
		if (ssofast_reset_cpt==1) {
			sso.reset_compteur();
		}
		id = obj.parentNode.parentNode.id.split('_')[1].substring(1);
		sso.envoie('action=click&id=' + id);
		for(i=0; obj=Liens[i]; i++){
			if(obj['id']==id){
				break;
			}
		}
		var nom_utilisateur = sso.decrypte(unescape(decodeURIComponent(obj['nom_utilisateur'])));
		var mot_de_passe = sso.decrypte(unescape(decodeURIComponent(obj['mot_de_passe'])));
		//Recuperation de l'URL
		var url_popup = obj['url'];
		var url = url_page = '';
		if (url_popup!=void(0) && url_popup!=''){
			var tab_url = url_popup.split('?');
			if(tab_url.length>1){
				var data = tab_url[1];
			}
			var tab_url = tab_url[0].split('/');
			if(tab_url[tab_url.length-1].indexOf('.')>-1 || tab_url[tab_url.length-1]==''){
				var url_page = tab_url.pop();
			}
			if(tab_url[0].indexOf(':')>-1){
				var url_protocole = tab_url[0];
				tab_url.splice(0,2);
			}
			url = tab_url.join('/');
		}
		if(url==''){
			if(url_page!=''){
				url = url_page;
				url_page = '';
			} else {
				return false;
			}
		}
		//Si un formulaire est present
		if (Formulaires[url]!='' && Formulaires[url]!=void(0) && (obj['nom_utilisateur'] || obj['mot_de_passe']) && (nom_utilisateur!='' || mot_de_passe!='') && avec_form){
			var action;
			var form = document.createElement('div');
			form.innerHTML = Formulaires[url];
			element = form.getElementsByTagName('input');
			for(i=0; val=element[i]; i++){
				//Remplace "{nom}" par le nom d'utilisateur dans le formulaire
//				if(val.value == '{nom}'){
//					val.value = nom_utilisateur;
				if((p=val.value.indexOf('{nom}')) > -1){
					val.value = val.value.substring(0, p) + nom_utilisateur + val.value.substring(p + 5, val.value.length);
				}
				//Remplace "{mdp}" par le mot de passe dans le formulaire
//				if(val.value == '{mdp}'){
//					val.value = mot_de_passe;
				if((p=val.value.indexOf('{mdp}')) > -1){
//					val.value = mot_de_passe;
					val.value = val.value.substring(0, p) + mot_de_passe + val.value.substring(p + 5, val.value.length);
				}
				if(val.value.indexOf('{md5}') > -1){
					val.value = MD5(val.value.substring(5));
					alert(val.value);
				}
			}
			$('formulaire').innerHTML = '';
			//Rajoute le formulaire ? l'element de validation des formulaires
			$('formulaire').appendChild(form);
			if(form.lastChild.getAttribute('target')!='sso_blank'){
				form.lastChild.setAttribute('target', '_blank');
			}
			//Valide le formulaire
			if(avant=form.lastChild.getAttribute('sso_avant')){
				$('sso_blank').src = avant;
			} else {
				form.lastChild.submit();
			}
		} else if(url!=''){
			//Si pas de formulaire
			//Si le protocole est "ftp:"
			if(url_protocole == 'ftp:'){
				url_popup = 'ftp://' + nom_utilisateur + ':' + mot_de_passe + '@' + url_popup.substring(6);
			}
			//Ouvre le lien
			window.open(url_popup);
		}
	},
	swap_onunload : function(){
		if (tmp = document.body.getAttribute('onunload_tmp')) {
			document.body.setAttribute('onunload', tmp);
			document.body.removeAttribute('onunload_tmp');
		} else {
			tmp = document.body.getAttribute('onunload');
			document.body.setAttribute('onunload_tmp', tmp);
			document.body.setAttribute('onunload', 'window.location=\'' + window.location.toString() + '\';');
			setTimeout('sso.swap_onunload();', 3000);
		}
	},
	popup : function(){
		if($('formulaire').lastChild && $('formulaire').lastChild.lastChild){
			sso.swap_onunload();
			if(pop=$('formulaire').lastChild.lastChild.getAttribute('sso_popup')){
				window.open(pop, '_blank', '');
			} else if($('formulaire').lastChild.lastChild.getAttribute('sso_avant')){
				$('formulaire').lastChild.lastChild.submit();
				$('formulaire').innerHTML = '';
				$('sso_blank').src = 'about:blank';
			}
		}
	},
//Crypte le nom d'utilisateur et le mot de passe
	crypte : function(texte, clef_de_cryptage){
		if(!clef_de_cryptage){
			clef_de_cryptage = $('sso_clef_de_cryptage').value;
		}
		//Cryptage si la clef de cryptage n'est pas vide
		if(clef_de_cryptage != ''){
			return crypt_text(texte, clef_de_cryptage);
		}
	},
//Decrypte le nom d'utilisateur et le mot de passe
	decrypte : function(texte){
		var clef_de_cryptage = $('sso_clef_de_cryptage').value;
		if (clef_de_cryptage != ''){
			return decrypt_text(texte, clef_de_cryptage);
		} else {
			return texte;
		}
	},
//Creation d'un nouveau repertoire ou lien
	nouveau : function(type){
		if (sso.verif_droit(true)) {
			sso.envoie('action=nouveau&nom=' + ((type=='lien') ? Locale.btn_nouveau_lien : Locale.btn_nouveau_dossier) + '&type=' + type);
		}
	},
	desactive_sso : function(texte){
		if(ie){
			var tab_sel = document.getElementsByTagName('select');
			for(var i=0; obj=tab_sel[i]; i++){
				obj.style.visibility = 'hidden';
			}
		}
		sso.taille_fenetre();
		var cadre = document.createElement('div');
		cadre.id = 'fond_desactive';
		if (texte){
			cadre.className = 'fond_desactive';
		} else {
			cadre.className = 'fond_desactive_vide';
		}
		cadre.style.width = sso_tx + 'px';
		cadre.style.height = sso_ty + 'px';
		document.body.appendChild(cadre);
		if($('cadre_alerte')){
			$('cadre_alerte').style.zIndex = 110;
		}
		if (texte){
			sso.alerte(texte, '', 'sans');
		}
		if ($('sso_clef_de_cryptage')) {
			$('sso_clef_de_cryptage').setAttribute('disabled', true);
		}
	},
	active_sso : function(){
		if($('fond_desactive')){
			if ($('sso_clef_de_cryptage')) {
				$('sso_clef_de_cryptage').removeAttribute('disabled');
				$('sso_clef_de_cryptage').focus();
			}
			if($('cadre_alerte')){
				$('cadre_alerte').style.zIndex = 1;
			}
			document.body.removeChild($('fond_desactive'));
			if(ie){
				var tab_sel = document.getElementsByTagName('select');
				for(var i=0; obj=tab_sel[i]; i++){
					obj.style.visibility = '';
				}
			}
		}
	},
	test_tutorial : function(){
		if (ssofast_type_aff==0) {
			if($('liens') && $('liens').childNodes.length>1){
				if($('reps').childNodes.length>0){
					tutorial_pos='sso_messages';
				} else {
					tutorial_pos='sso_nouveau_rep';
				}
			} else if($('reps') && $('reps').childNodes.length>0){
				tutorial_pos='bouton_type_aff';
			} else {
				tutorial_pos='sso_nouveau_lien';
	 		}
		} else {
			if ($('sso_tags').getElementsByTagName('div').length>1 || $('sso_tags').getElementsByTagName('font').length>1) {
				tutorial_pos='sso_mon_compte';
			} else {
				tutorial_pos='sso_tags';
			}
		}
		sso.tutorial();
	},
//Tutorial
	tutorial : function(from, type){
		if (!$('sso_clef_de_cryptage')) {
			return false;
		}
		if (from) {
			tutorial_pos=from;
		}
		clearTimeout(t);
		if(ssofast_tutorial==1){
			if(tutorial_pos==''){
				tutorial_pos='sso_clef_de_cryptage';
				if(ssofast_type_aff==0 && $('reps').childNodes.length==0 && $('liens').childNodes.length==1){
					var texte = Locale.notes.texte_tutorial.join('');
					texte += '<table align="right" cellspacing="0" cellpadding="0" class="bouton_vide" onclick="sso.active_sso();sso.tutorial();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';"><tbody>';
					texte += '<tr><td>' + sso.encadre_input('&nbsp;' + Locale.btn_continuer + '&nbsp;', 'bouton_fond', true) + '</td></tr>';
					texte += '</tbody></table>';
					sso.desactive_sso(texte);
					return false;
				}
			}

			if(ssofast_donnee_verrouille==1){ tutorial_pos = 'bouton_verrouiller'; }
			if ($('sso_clef_valide').className!='clef_decryptage_valide' && !$('sso_mon_compte')){ tutorial_pos='sso_clef_de_cryptage'; }
			if ($('sso_clef_de_cryptage').value!='' && tutorial_pos=='sso_clef_de_cryptage'){ tutorial_pos='sso_clef_valide'; }
			if(tutorial_pos=='sso_clef_valide' && $('sso_clef_valide').className=='clef_decryptage_valide'){
				sso.test_tutorial();
				return false;
			}
			var texte = '<table id="tutorial" cellspacing="0" cellpadding="0"><tbody>';
			texte += '<tr><th>' + Locale.tutorial_titre + '</th></tr>';
			texte += '<tr><td>&nbsp;</td></tr>';
			from = tutorial_pos;
			if (type) {
				if (type=='rep' && from=='options_nom') {
					from = 'options_nom_bis';
				}
				if (type=='rep' && from=='options_valider') {
					from = 'options_valider_bis';
				}
				if (type=='none' && from=='mon_compte_tutorial') {
					tutorial_pos = from = 'mon_compte_generateur_code_taille';
				}
			}
			texte += '<tr><td>' + (Locale.tutorial[from]?Locale.tutorial[from]:'') + '</td></tr>';
			var next = false;
			var actu = false;
			if($('form_cadre')){
				var el = $('form_cadre').elements;
				for(i=0; obj=el[i]; i++){
					if(obj.id == tutorial_pos){
						actu = true;
					}
					if(actu && i<el.length-1 && el[i+1].id && el[i+1].id != 'options_valider' && findPosX($(el[i+1].id))>findPosX($('form_cadre'))){
						next = el[i+1].id;
						if(Locale.tutorial[next]){
							actu = false;
						}
					}
				}
			}

			if(next){
				texte += '<tr><td align="right">' + sso.encadre_input('<input style="border:none;" class="bouton_vide" id="" onclick="tutorial_pos=\''+next+'\';sso.tutorial();" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value="' + Locale.btn_continuer + ' >>"/>', 'bouton_fond', true) + '</td></tr>';
			} else {
				texte += '<tr><td>&nbsp;</td></tr><tr><td>&nbsp;</td></tr>';
			}

			$('formulaire').innerHTML = Locale.pages.guide_utilisation.join('');
			id_cherche = 'tutorial_' + tutorial_pos;
			if($(id_cherche)){
				texte += '<tr><td><hr>' + Locale.tutorial_savoir_plus + ' :<br/><div style="float:left">' + $(id_cherche).getAttribute('texte') + '&nbsp;</div>' + sso.encadre_input('<input style="border:none;" class="bouton_vide" id="" onclick="sso.chargepage(\'guide_utilisation\', \'' + id_cherche + '\');" onmouseover="this.className=\'bouton_vide2\';" onmouseout="this.className=\'bouton_vide\';" type="button" value=" >>"/>', 'bouton_fond', true) + '</td></tr>';
				$('formulaire').innerHTML = '';
			}
			texte += '</tbody></table>';
			sso.alerte(texte, '', 'sans');
			if(tutorial_pos!=''){
				if($(tutorial_pos) && (tutorial_pos!=id_cible_old || $('focus').style.display=='none')){
					id_cible_old = tutorial_pos;
					sso.cible(tutorial_pos);
					var trouve = false;
					if($('form_cadre')){
						var el = $('form_cadre').elements;
						for(i=0; obj=el[i]; i++){
							if(obj.id == tutorial_pos){
								trouve = true;
							}
						}
					}
					if($('cadre_options') && trouve){
						$('cadre_alerte').style.left = findPosX($('cadre_options')) + $('cadre_options').offsetWidth + 10 + 'px';
					} else if($('cadre_mon_compte') && trouve){
						$('cadre_alerte').style.left = findPosX($('cadre_mon_compte')) + $('cadre_mon_compte').offsetWidth + 10 + 'px';
					}
				}
			} else {
				$('focus').style.display = 'none';
			}
		}
	},
	set_tutorial : function(type){
		if($('cadre_mon_compte')){
			$('header').removeChild($('cadre_mon_compte'));
		}
		$('cadre_alerte').style.display='none';
		$('focus').style.display = 'none';
		clearTimeout(t);
		sso.envoie('action=set_tutorial&tutorial=' + type);
	},
	cible : function(id, dx, dy){
		if($('focus').getAttribute('cible')!=id){
			sso.taille_fenetre();
			var posx = findPosX($(id)) + Math.round($(id).offsetWidth/2) + (dx?dx:0);
			var posy = findPosY($(id)) + Math.round($(id).offsetHeight/2) + (dy?dy:0);
			$('focus').style.left = posx - 25 + 'px';
			$('focus').style.top = posy - 25  + 'px';
			if(posx + $(id).offsetWidth > sso_tx){
				posx = sso_tx - $(id).offsetWidth - 25;
			}
			if (sso_tx - posx - 25 < 200) {
				posx = sso_tx - 225;
			}
			$('cadre_alerte').style.left = posx + 25 + 'px';
			$('cadre_alerte').style.top = posy + 25 + 'px';
			$('focus').setAttribute('cible', id);
			$('focus').style.display = '';
		} else {
			$('focus').style.display = 'none';
		}
	},
	centre_cadre : function(id){
		sso.taille_fenetre();
		$(id).style.top = Math.round((sso_ty - $(id).offsetHeight) / 2) + document.body.scrollTop + 'px';
		if($('cadre_options')){
			$('cadre_alerte').style.left = findPosX($('cadre_options')) + $('cadre_options').offsetWidth + 10 + 'px';
		} else if($('cadre_mon_compte')){
			$('cadre_alerte').style.left = findPosX($('cadre_mon_compte')) + $('cadre_mon_compte').offsetWidth + 10 + 'px';
		} else {
			posx = Math.round((sso_tx - $(id).offsetWidth) / 2) + document.body.scrollLeft;
			$(id).style.left = posx + 'px';
		}
	},
	repositionne : function(){
		if($('footer')){
			if(findPosY($('footer'))>0){
				sso.set_footer_bas();
			} else {
				sso.set_footer_haut();
				sso.taille_fenetre();
				$('doc_pages').style.height = (sso_ty - $('sso_logo_bis').offsetHeight - $('footer_ligne').offsetHeight - 150) + 'px';
			}
		}
		if($('cadre_alerte') && $('cadre_alerte').style.display==''){
			if(!$('sso_formulaire')){
				sso.centre_cadre('cadre_alerte');
			}
		}
		if($('focus') && $('focus').style.display=='' && $('focus').getAttribute('cible')){
			var id = $('focus').getAttribute('cible');
			$('focus').setAttribute('cible', '');
			sso.cible(id);
			if(ssofast_tutorial==1){
				var trouve = false;
				if($('form_cadre')){
					var el = $('form_cadre').elements;
					for(i=0; obj=el[i]; i++){
						if(obj.id == id){
							trouve = true;
						}
					}
				}
				if($('cadre_options') && trouve){
					$('cadre_alerte').style.left = findPosX($('cadre_options')) + $('cadre_options').offsetWidth + 10 + 'px';
				} else if($('cadre_mon_compte') && trouve){
					$('cadre_alerte').style.left = findPosX($('cadre_mon_compte')) + $('cadre_mon_compte').offsetWidth + 10 + 'px';
				}
			}
		}
		if($('fond_desactive')){
			sso.taille_fenetre();
			$('fond_desactive').style.width = sso_tx + 'px';
			$('fond_desactive').style.height = sso_ty + 'px';
		}
	},
	reset_compteur : function(){
		clearTimeout(t_decompte);
		if(ssofast_cache_temps>0){
			t_compteur = ssofast_cache_temps;
			sso.set_digit(t_compteur);
			if($('sso_clef_de_cryptage').value!=''){
				t_decompte = setTimeout('sso.decompte();', 500);
			}
		} else {
            digit = '-72px 0px';
			$('digit1').style.backgroundPosition = digit;
            $('digit2').style.backgroundPosition = digit;
			$('digitsep').style.backgroundPosition = digit;
			$('digit3').style.backgroundPosition = digit;
            $('digit4').style.backgroundPosition = digit;
			$('digitsep2').style.backgroundPosition = digit;
			$('digit5').style.backgroundPosition = digit;
            $('digit6').style.backgroundPosition = digit;
		}
	},
	set_digit : function(temps){
		var heure = Math.floor(temps/3600);
		var digit1 = Math.floor(heure/10);
		var digit2 = heure - 10*digit1;
		digit1 = digit1>0 ? digit1 : 12;
		digit2 = heure>0 ? digit2 : 12;
		var digitsep = heure > 0 ? 10 : 12;

		var minute = Math.floor((temps%3600)/60);
		var digit3 = Math.floor(minute/10);
		var digit4 = Math.floor(minute - 10*digit3);
		digit3 = heure>0 || digit3>0 ? digit3 : 12;
		var digitsep2 = temps-Math.floor(temps)==0 ? 10 : 12;

		var second = temps%60;
		var digit5 = Math.floor(second/10);
		var digit6 = Math.floor(second - 10*digit5);
		$('digit1').style.backgroundPosition = (-6*digit1) + 'px 0px';
		$('digit2').style.backgroundPosition = (-6*digit2) + 'px 0px';
		$('digitsep').style.backgroundPosition = (-6*digitsep) + 'px 0px';
		$('digit3').style.backgroundPosition = (-6*digit3) + 'px 0px';
		$('digit4').style.backgroundPosition = (-6*digit4) + 'px 0px';
		$('digitsep2').style.backgroundPosition = (-6*digitsep2) + 'px 0px';
		$('digit5').style.backgroundPosition = (-6*digit5) + 'px 0px';
		$('digit6').style.backgroundPosition = (-6*digit6) + 'px 0px';
	},
	decompte : function(){
		if(ssofast_tutorial==0){
			t_compteur -= .5;
			sso.set_digit(t_compteur);
			if(t_compteur>0){
				t_decompte = setTimeout('sso.decompte();', 500);
			} else {
				clearTimeout(t_decompte);
				$('sso_clef_de_cryptage').value = '';
				$('sso_clef_de_cryptage').readOnly=false;
				$('sso_clef_de_cryptage').focus();
				test_code('', true, 'cell_test_code');
                digit = '-66px 0px';
                digit_sep = '-60px 0px';
                $('digit1').style.backgroundPosition = digit;
                $('digit2').style.backgroundPosition = digit;
                $('digitsep').style.backgroundPosition = digit_sep;
			    $('digit3').style.backgroundPosition = digit;
                $('digit4').style.backgroundPosition = digit;
		      	$('digitsep2').style.backgroundPosition = digit_sep;
	       		$('digit5').style.backgroundPosition = digit;
                $('digit6').style.backgroundPosition = digit;
			}
		}
	},
	encadre_input : function(input, nomclass, inverser){
		var c = inverser ? 'bouton_cadre_fonce' : 'bouton_cadre_clair';
		var page = '<table cellspacing="0" cellpadding="0"><tbody>';
		page += '<tr><td></td><td height="1" class="' + c + '"></td></tr>';
		page += '<tr><td width="1" class="' + c + '"></td><td class="' + nomclass + '">' + input + '</td><td width="1" class="' + c + '"></td></tr>';
		page += '<tr><td></td><td height="1" class="' + c + '"></td></tr>';
		page += '</tbody></table>';
		return page;
	},
	genere_code : function(){
		var genere_code = ssofast_genere_code;
		var genere_code_taille = Math.floor(genere_code);
		var options = Math.round((genere_code - genere_code_taille)*100);
		var special = options%2;
		options = Math.floor(options/2);
		var nombre = options%2;
		options = Math.floor(options/2);
		var majuscule = options%2;
		options = Math.floor(options/2);
		var minuscule = options%2;
		options = Math.floor(options/2);
		for(cpt=0; cpt<100; cpt++){
			code = '';
			while (code.length<genere_code_taille){
				var chr = Math.round(Math.random()*90)+32;
				if(!special && (chr<48 || chr>57 && chr<65 || chr>90 && chr<97)){ continue; }
				if(!nombre && chr>47 && chr<58){ continue; }
				if(!majuscule && chr>64 && chr<91){ continue; }
				if(!minuscule && chr>96){ continue; }
				code += String.fromCharCode(chr);
			}
			if (test_code(code, false) >= genere_code_taille){ break; }
		}
		return code;
	}
}