var
	imgArray = null ;
	nbImages = 0 ;
	swapped = new Array ;

function preLoad () {
	if (document.images) {
		var
			imgList = preLoad.arguments ;
			baseURL = document.location.href ;
		if (imgList.length%2) stopAll('Attention : nombre de paramètres de preLoad impair. Arrêt recommandé.') ;
		nbImages=(imgList.length)>>1;
		if (!imgArray) imgArray = new Array() ;
		for (var i=baseURL.length;baseURL.charAt(i)!='/';i--);
		baseURL=baseURL.slice(0,i+1);
		for (var i=0, j=0;i<nbImages;i++) {
			imgArray[j] = baseURL+imgList[j++];
			if (typeof(imgList[j])=='string') {
				imgArray[j] = new Array(1) ;
				imgArray[j][0] = new Image ;
				imgArray[j][0].src = imgList[j++];
			} else {
				imgArray[j] = new Array(imgList[j].length) ;
				for (var zz=0;zz<imgList[j].length;zz++) {
					imgArray[j][zz] = new Image ;
					imgArray[j][zz].src = imgList[j][zz];
				}
				j++;
			}
		}
	}
	return true ;
}

function focusImg () {
	if (document.images) {
		var
			docObject = null ;
			index = 0 ;
			arg = focusImg.arguments ;
			nbArg = arg.length ;
			docName = null ;
			tmp = null ;
			objType = null ;
		for (var count=0;count<nbArg;count++) {
			tmp=typeof(arg[count]);
			objType=(tmp=='string')?1:((tmp=='object')?2:0);
			if (!objType) stopAll('focusImg : Mauvais type de paramètre.') ;
			if ((objType==2) && (arg[count].length!=2)) stopAll('focusImg : Mauvais nombre d\'éléments dans le vecteur.') ;
			docName = (objType==1)?arg[count]:arg[count][0] ;
			index = (objType==2)?Number(arg[count][1]):0 ;
			docObject = eval('document.images["' + docName +'"]') ;
			if (typeof(docObject)=='undefined') stopAll(docName+' : Image inexistante.');
			for (var i=0;(i<nbImages) && (docObject.src!=imgArray[i<<1]);i++) ;
			if (i>=nbImages) stopAll('Image non préchargée ('+docObject.src+').') ;
			i=(i<<1) + 1 ;
			hardSwap(docObject,imgArray[i][index]);
			swapped=push(swapped,docName,i,index);
		}
	}
	return true ;
}

function restoreImg () {
	if (document.images) {
		var
			docName = null ;
			docObject = null ;
			index = 0 ;
			arg = restoreImg.arguments ;
			nbArg = arg.length ;
		for (var i=0;i<nbArg;i++) {
			swapped = bubble(swapped,arg[i]) ;
			index	= getLast(swapped) ;
			swapped = pop(swapped) ;
			zz 	= getLast(swapped) ;
			swapped = pop(swapped) ;
			docName = arg[i] ;
			swapped = pop(swapped) ;
			docObject = eval('document.images["' + docName +'"]') ;
			hardSwap(docObject,imgArray[zz][index]);
		}
	}
	return true ;
}

function stopAll ( ErrorMsg ) {
	alert('Erreur critique :\n'+ErrorMsg) ;
}

function hardSwap ( Img1, Img2 ) {
	var
		swp = Img1.src ;
	Img1.src = Img2.src ;
	Img2.src = swp ;
}

function push ( Tab ) {
	var
		arg = push.arguments ;
	for (var i=0;i<(arg.length-1);i++) Tab=Tab.concat(arg[1+i]) ;
	return Tab;
}

function getLast ( Tab ) {
	return Tab[Tab.length-1] ;
}

function pop ( Tab ) {
	return Tab.slice(0,Tab.length-1) ;
}

function bubble ( Tab, Name ) {
	var
		tmp = null ;
		l = Tab.length ;
	for (var i=0;(i<l) && (Name!=Tab[i]);i+=3) ;
	if (i>=l) stopAll('Objet non trouvé ('+Name+').') ;
	l-=3 ;
	for (var j=0;j<3;j++) {
		tmp=Tab[i+j];
		Tab[i+j]=Tab[l+j];
		Tab[l+j]=tmp;
		tmp=null;
	}
	return Tab ;
}
