// SITE DBI
// 11/10/2003 - Net Créateurs (www.net-createurs.com)
// MANAGEMENT DES LIENS

// links management v 4.01
var mx,my;
function IEgetxy() {
	mx=event.screenX;		//mouse click interceptor : pos vs screen (not vs window)
	my=event.screenY;
}

function NSgetxy(e) {
	mx=e.screenX;
	my=e.screenY;
}

if(!_country) var _country='fr';
var mess=new Array();
mess['fr']= new Array('Le lien','est introuvable');
mess['uk']= new Array('The link','is unknown');

var IE= document.all;
var NS = !IE && self.document.layers;
var NS6= !IE && document.getElementById;
var MAC= navigator.appVersion.indexOf("Mac")>-1;

// Browsers adjustments
var fen_cx=0,fen_cy=0,step=1;	// resizeTo (smooth opening) offsets
var fen_hx=0,fen_hy=0;			// window.open (hard opening) offsets
if(IE) {
	document.onmousedown = IEgetxy;
	nav_ver=parseFloat(navigator.appVersion.substring(navigator.appVersion.indexOf("MSIE") + 5));
	if(nav_ver>=4) {	// compensations IE 4 ou 5
		if(MAC) fen_cy= (nav_ver<5) ? -3 : 0;				// Mac
		else {fen_cx=6; fen_cy=25;fen_hx=-4;fen_hy=-4}		// PC
	}
}

else if(NS || NS6) {
	window.captureEvents(Event.MOUSEDOWN);
	window.onmousedown=NSgetxy;
	if(NS6) {fen_cx=9; fen_cy=48}
}

// -- estimation de la vitesse du poste
var d=new Date(),f=d.getTime()+ 100, j;	// délai 100 msec
while(d.getTime()<f && step<1500) {
	d=new Date();
	j=self.screen.availWidth;
	step++;
}
if(step>1) {
	if(IE || NS6) step=1+Math.floor(step/50);
}

var lscreen=screen.availWidth;			// largeur écran
var hscreen=screen.availHeight;		// hauteur écran dispo

// ===============================
//  PUBLIC INPUTS (linkto - nameof)
// ===============================
var fname,nw;
function linkto(target,t,name,par) {
	if(target.charAt(0)=='!') {		// target = adresse url destination
		target=target.substring(1);
		if(t) return target;
		else {
			if(self.document.location.href==target) self.document.location.reload();
			else self.document.location.href=target;
		}
	}
	else {
		var l=ilink[target];				//target address
		var z=new Array(),chromeless=false;
		if(!l) alert(mess[_country][0] + ' "' + target + '" ' + mess[_country][1] + ' !');
		else if (l!='#') {
			var smooth= (l.charAt(0)=="~");
			if(smooth) {
				l=l.substring(1);
				smooth= smooth && !NS;
			}
			if(l.substring(0,6)=="popup:") l=l.substring(6);
			z=l.split(",");
			l=z[0];							// Adresse réelle
			if(l.charAt(l.length-1)=='_') {
				l=l.substring(0,l.length-1);
				chromeless= !NS;			// ouverture d'une fenêtre sans cadre 
			}
			if(!name) name=z[5];			// nom de fenêtre externe éventuel
			if(l=='$user')	{
				l=name						// lien utilisateur
				name="xtrn"
			}

			if(l.substring(0,3) == "www") {
				if(!t) l="http://" + l;
			}
			if(chromeless) {
				var p=chrome_src.lastIndexOf('/') + 1;
				if(!p) p=chrome_src.length;
				l=chrome_src + '?' + get_rpath(l,_path + chrome_src.substring(0,p));
			}
			else l= get_rpath(l)						//tranform path to relative

			if(!t) {
				var vide=linkto('blank',1);				// add page vierge
				var mpar= new Array();
				if(par) {
					mpar=par.toString().split('|');		//adds '?params' or '"params" to the URL
					if(mpar[0]) {
						if(mpar[0].charAt(0) != '#') mpar[0]= '?' + mpar[0];
						l+= mpar[0];
					}
					if(mpar[1]) z[1]=mpar[1];
					if(mpar[2]) z[2]=mpar[2];
					if(mpar[3]) z[3]=mpar[3];
					if(mpar[4]) z[4]=mpar[4];
				}
				if(!z[1]) {		// z[1] <> 0 ? oui -> coordonnée X d'une popup
					if(name && name.charAt(0) != '_') {			//open URL in new window
						var fenpar="";
						if(smooth) {
							fenpar="width=10,height=10,left=1,top=1,menubar=yes,location=yes,toolbar=yes,adressbar=yes,scrollbars=yes,status=yes,resizable=yes";
							if(chromeless) fenpar+=",fullscreen" // élimine les bordures
							nw=window.open(vide,name,fenpar);
						}
						else nw=window.open(vide,name);			// fenpar="" efface les menus, toolbars etc...  sous NS4
						if(smooth) setTimeout('finewin(nw,1,0,0);nw.document.location.href="' + l + '";nw.focus()',200);
																// délai évite plantage IE5/5.5 si fen ré-ouverte sur URL incorrecte
						else {
							nw.document.location.href=l;
							nw.focus();
						}
					}
					else {										//open URL in same window
						if(name) name=name.substring(1);		// remove 1st '_'
						else if(smooth) finewin(self,1,0,0);	//must be done before changing the URL...
						if(name) top.frames[name].document.location.href=l;
						else self.document.location.href = l;
					}
				}
				else {									//open URL in a popup window
					if(!name) name='';
					if('zoom' + name==this.name) name+="x";	// évite de razer la fnêtre actuelle avant la fin du script...
					if(fname && !fname.closed) fname.close();
					var fenpar="menubar=no,toolbar=no,status=no,adressbar=no,resizable=no,location=no,"
					if(chromeless) fenpar+="fullscreen,"	// élimine les bordures

					// ascenceurs
					if(z[4]<0) { fenpar+="scrollbars=yes,"; z[4]=-z[4] }
					else fenpar+="scrollbars=no,";

					// coordonnées relatives / absolues ?
					if(z[3]<0) { z[3]=-z[3]; var p_relative=true } else var p_relative=false;

					// compensations de largeur
					if(z[3]) {
						if(smooth) {
							z[3]=parseFloat(z[3])+fen_cx	// Compensation L/H
							z[4]=parseFloat(z[4])+fen_cy;
						}
						else {
							z[3]=parseFloat(z[3])+fen_hx	// Compensation L/H
							z[4]=parseFloat(z[4])+fen_hy;
						}
					}

					var x0=parseFloat(z[1]);			// posit X init coin H/G
					var y0=parseFloat(z[2]);
					var x1=parseFloat(Math.abs(z[3]));	// taille X finale
					var y1=parseFloat(z[4]);
					if(p_relative) { x0+= mx-x1; y0+= my-y1 }

					// vérif débordements d'écran éventuels
					if(x1>lscreen-40) x1=lscreen-40; if(y1>hscreen-60) y1=hscreen-60;
					if(x0<20) x0=20; if(y0<30) y0=30;
					if(x0+x1>lscreen-20) x0=lscreen-x1-20;
					if(y0+y1>hscreen-30) y0=hscreen-y1-30;

					if(smooth) {
						var xi=100, yi=100;				// initial x/y size
						var xr=mx-(xi/2), yr=my-(yi/2)-10;
						if(xr<10) xr=10; if(yr<10) yr=10;
						fenpar+="width="+xi + ",height=" + yi + ",left="+xr + ",top="+yr;
					}
					else fenpar+="width=" + x1 + ",height="+ y1 + ",top=" + y0 + ",left=" + x0;

					if(!xr) var xr=0;	// Bug NS 4.01
					if(!yr) var yr=0;

					popup_open(smooth,vide,name,fenpar,l,xr,yr,x0,y0,x1,y1);
				}
			}
		}
		if(t) return l;
	}
}


function nameof(target) {
	var n=(target.charAt(target.length-1)=="#") ? target.substring(0,target.length-1) : target;
	var j="";
	n=iname_of(n);
	for (i in ilink) if (iname_of(ilink[i]) == n) j=i;
	return j;
}

// ==================================================
// INTERNAL FUNCTIONS - never use from external calls
// ==================================================

// delayed popup open / close
function popup_open(smooth,vide,name,fenpar,l,xr,yr,x0,y0,x1,y1) {
	var ok=false;
	if(!fname || fname.closed) {
		fname=window.open(vide,'zoom'+name,fenpar);
		if(fenpar.indexOf('fullscreen')>-1) {		// Fenêtre chromeless -> ajustement immédiat taille/pos
			if(smooth) {
				fname.moveTo(xr,yr);
				fname.resizeTo(110,130);	
			}
			else {
				fname.moveTo(x0,y0);
				fname.resizeTo(x1,y1);
			}
		}
		setTimeout('popup_open('
			+ smooth  + ',"'
			+ vide  + '","'
			+ name  + '","'
			+ fenpar  + '","'
			+ l + '",'
			+ xr + ','
			+ yr + ','
			+ x0 + ','
			+ y0 + ','
			+ x1 + ','
			+ y1 + ')',	50
		);
	}

	else {
		if(fname.document.bgColor) ok= verif_owner(vide);
		if(!ok) {
			if(fname.document.bgColor) fname.close();	// évite de cumuler les retards de clics
			setTimeout('popup_open('
				+ smooth  + ',"'
				+ vide  + '","'
				+ name  + '","'
				+ fenpar  + '","'
				+ l + '",'
				+ xr + ','
				+ yr + ','
				+ x0 + ','
				+ y0 + ','
				+ x1 + ','
				+ y1 + ')',	50
			);
		}

		else {
			fname.focus();
			if(smooth) finewin(fname,2,xr,yr,x0,y0,x1,y1);
			fname.document.location.href = l;
			if(NS6 && fenpar.indexOf('scrollbars=no')>-1) fname.scrollbars.visible=false;	// Bug NS6
		}
	}
}


function verif_owner(add) {
	var x=add, i=x.lastIndexOf('/'), a=fname.document.location.href;
	if(i>-1) x=x.substring(i+1);
	if(NS6) return(true)
	else return(a.substring(a.length-x.length) == x);
}


// - smoothly enlarge a window; Step = nb of steps
function finewin(wname,mux,xr,yr,xf,yf,lf,hf) {
	if(!xf) xf=0;								// posit x/y finale
	if(!yf) yf=0;
	if(!lf) lf=lscreen;							// dim. l/h finales
	if(!hf) hf=hscreen;
	var max= (yf>lf) ? yf : lf;
	var s=mux*(1 + Math.floor(max*step/1000));	// nb de steps à utiliser
	if(s<4) s=4;
	else if(s>10) s=10;
	var li=110;									// dimensions l/h initiales
	var hi=130;									// 110 / 130 vs 100/00 cause bords & barre de menu inclus
	if(!xr) xr=0;								// position x/y de départ
	if(!yr) yr=0;
	var dx=(xf-xr)/s;
	var dy=(yf-yr)/s;
	var dl=(lf-li)/s;
	var dh=(hf-hi)/s;

	// -- sizing loop
	while(lf-li > dl) {
		li+=dl; hi+=dh; xr+=dx; yr+=dy;
		wname.moveTo(xr,yr);
		wname.resizeTo(li,hi);
	}

	// -- final resize / move
	wname.moveTo(xf,yf);
	wname.resizeTo(lf,hf);
}

//- extract name + ext of a file
function iname_of(nfic) {
	var n=nfic;
	var i=n.lastIndexOf("/");
	if (i>-1) n=nfic.substring(i+1);
	return n;
}

function get_rpath(t,s) {
	if(!s) var s=_path;		// Path target = celui de la page
	var lien='', nom='';
	if(t.substring(0,3) == "www" || t.substring(0,7) == "http://") return(t);
	else {
		var i=t.lastIndexOf("/");
		if (i>-1) {
			if(i<t.length-1) nom=t.substring(i+1);	// nom du fichier
			else nom='';
			t=t.substring(0,i);						// et son path vs root du site
		}
		else {
			nom=t;
			t='';
		}
		t=t.split('/');

		i=s.lastIndexOf("/");
		if (i>-1) s=s.substring(0,i);
		else s='';
		s=s.split('/');

		i=0;
		while(s[i] && s[i]==t[i]) i++;		// recherche de la rupture des 2 branches
		var j=i;
		while(s[i++]) lien+= '../';			// on remonte jusqu'au point de rupture
		while(t[j] || t[j+1]) {
			if(t[j]) lien+= t[j] + '/';		// et on ajoute le reste d'arborescence target
			j++;
		}
		return(lien + nom);					// nom de fichier source éventuel
	}
}


