function show_details(obj){
	if(obj){
		if(obj.parentNode.style.height == 'auto'){
			obj.parentNode.style.height = '16px';
			obj.parentNode.style.zIndex = 0;
		}else{
			obj.parentNode.style.height = 'auto';
			obj.parentNode.style.zIndex = 1;		
		}
	}else{
		return false;
	}
	return true;
}
	
function d2(x) 
{
   	if (x<0) return x ;
   	if (x<=9) return '0'+x ;
   	return ""+x ;
}
 
function d22(x, y) 
{
  	return ""+d2(x)+"_"+d2(y) ;
}
	
function vtvi_getlevel()	
{
	//alert("getlevel "+IMG_sizes.length);
  	var i=0 ;
  	if (isNaN(CTX["ZOOM"])) return 0 ;
    for (i=0;i <CTX["NAFORM"];++i) 
    {
    	if (CTX["ZOOM"] <= CTX["AFORM"][i]["LARG"]) 
    	{
    	  // if (i==0) return 0 ;
			var nx = Math.floor((CTX["WLARG"]*CTX["AFORM"][i]["LARG"])/(CTX["WDALX"]*CTX["ZOOM"])+0.99) ;
			var ny = Math.floor((CTX["WHAUT"]*CTX["AFORM"][i]["HAUT"])/(CTX["WDALX"]*CTX["ZOOM"])+0.99) ;
			if ((nx*ny>25) && (i>0))	// trop de sous images, on déclasse
			{
			  // 	alert("getlevel sous-classe "+(i-1)) ;
	   		  return i-1 ;
			}
			// alert("getlevel "+i+" "+WIN_zoom+" "+IMG_sizes[i]) ;
        return i ;
      }
    }
    if (CTX["NAFORM"]<=0) return 0 ;
    return CTX["NAFORM"]-1 ;
 }
 
 function vtvi_precalc()
 {
    CTX["ZOOMY"] = Math.floor(CTX["HAUT"]*CTX["ZOOM"]/CTX["LARG"]) ;
//    document.write("ZOOMY="+CTX["ZOOMY"]+"<br>") ;
 	var WIN_level = CTX["WIN_level"] = vtvi_getlevel() ;
 	// taille reelle de l'image utilisee pour ce niveau de zoom
	CTX["IMG_realX"] = parseInt(CTX["AFORM"][WIN_level]["LARG"],10) ;
	CTX["IMG_realY"] = parseInt(CTX["AFORM"][WIN_level]["HAUT"],10) ;
// 	GDBG = "imgreal "+CTX["IMG_realX"]+" "+CTX["IMG_realY"]+"<br>" ;
	//taille de chaque dalle ajustee au zoom
	CTX["WIN_zdalleX"] = Math.floor(CTX["WDALX"]*CTX["ZOOM"]/CTX["IMG_realX"]) ;
	CTX["WIN_zdalleY"] = Math.floor(CTX["WDALY"]*CTX["ZOOM"]/CTX["IMG_realX"]) ;
	// nb de dalles dans chaque direction
	CTX["WIN_nbX"] = Math.floor((CTX["IMG_realX"]+CTX["WDALX"]-1)/CTX["WDALX"]) ;
	CTX["WIN_nbY"] = Math.floor((CTX["IMG_realY"]+CTX["WDALY"]-1)/CTX["WDALY"]) ;
//    GDBG += "wnb "+CTX["WIN_nbX"]+" "+CTX["WIN_nbY"]+"<br>" ;
 }

 function vtvi_last_size_X()
 {
   var x = CTX["WIN_nbX"]-1 ;
   return Math.floor((CTX["IMG_realX"] - x*CTX["WDALX"])*CTX["ZOOM"]/CTX["IMG_realX"]) ;
 }

 function vtvi_last_size_Y()
 {
   var y = CTX["WIN_nbY"]-1 ;
   return Math.floor((CTX["IMG_realY"] - y*CTX["WDALY"])*CTX["ZOOM"]/CTX["IMG_realX"]) ;
 }
 
 // donne la taille reelle ajustee au zoom de la dalle concernee
 function vtvi_real_size(x, y) 
 {
	var szY = CTX["WIN_zdalleY"] ;
   	if (y==(CTX["WIN_nbY"]-1)) szY = vtvi_last_size_Y();
   	var szX = CTX["WIN_zdalleX"] ;
   	if (x==(CTX["WIN_nbX"]-1)) szX = vtvi_last_size_X();
  	// if (x==0 && y==0) alert(x+" "+y+" => "+szX+" "+szY+ " z:"+ WIN_zoom+" "+IMG_realX) ;
  	// if (x==(WIN_nbX-1) && y==(WIN_nbY-1)) alert(x+" "+y+" => "+szX+" "+szY+ " z:"+ WIN_zoom+" "+IMG_realX) ;
   	return Array(szX, szY) ;
 }
 
 //
 // calcule quelles dalles sont visibles selon la position, la taille de la fenetre et la rotation.
 //
 
 function vtvi_get_window_view(posX, posY) 
 {	
    // incr = Math.floor(incr*WIN_zoom/IMG_realX)
    var sty ;
    var stx ;
    var sty2 ;
    var stx2 ;
    var offset = 0 ;

    switch(CTX["ROT"])	
    {
    	default :
		case 'A' :     
		    stx = Math.floor(-posX/CTX["WIN_zdalleX"]) ;
		    stx2 = Math.floor((-posX+CTX["WLARG"]-1)/CTX["WIN_zdalleX"]) ;
		    sty = Math.floor(-posY/CTX["WIN_zdalleY"]) ;
		    sty2 = Math.floor((-posY+CTX["WHAUT"]-1)/CTX["WIN_zdalleY"]) ;
		    break ;
		case 'B' :
		    offset = vtvi_last_size_Y() ;
		    sty = Math.floor((-posX-offset)/CTX["WIN_zdalleY"]) ;
		    sty = CTX["WIN_nbY"] - sty - 2 ;
		    sty2 = Math.floor((-posX-offset+CTX["WLARG"]-1)/CTX["WIN_zdalleY"]) ;
		    sty2 = CTX["WIN_nbY"] - sty2 - 2 ;		 
		    stx = Math.floor(-posY/CTX["WIN_zdalleX"]) ;
		    stx2 = Math.floor((-posY+CTX["WHAUT"]-1)/CTX["WIN_zdalleX"]) ;
		    break ;
		case 'C' :     
		    offset = vtvi_last_size_X() ;
		    stx = Math.floor((-posX-offset)/CTX["WIN_zdalleX"]) ;
		    stx = CTX["WIN_nbX"] - stx - 2 ;
		    stx2 = Math.floor((-posX-offset+CTX["WLARG"]-1)/CTX["WIN_zdalleX"]) ;
		    stx2 = CTX["WIN_nbX"] - stx2 - 2 ;
		    // GDBG += "nbx="+CTX["WIN_nbX"]+" off="+offset+" posx="+posX+" dal="+CTX["WIN_zdalleX"]+" larg="+CTX["WLARG"]+"<br>" ;
		    offset = vtvi_last_size_Y() ;
		    sty = Math.floor((-posY-offset)/CTX["WIN_zdalleY"]) ;
		    sty = CTX["WIN_nbY"] - sty - 2 ;
		    sty2 = Math.floor((-posY+CTX["WHAUT"]-1)/CTX["WIN_zdalleY"]) ;
		    sty2 = CTX["WIN_nbY"] - sty2 - 2 ;
		    break ;
		case 'D' :     
		    offset = vtvi_last_size_X() ;
		    stx = Math.floor((-posY-offset)/CTX["WIN_zdalleX"]) ;
		    stx = CTX["WIN_nbX"] - stx - 2 ;
		    stx2 = Math.floor((-posY-offset+CTX["WHAUT"]-1)/CTX["WIN_zdalleX"]) ;
		    stx2 = CTX["WIN_nbX"] - stx2 - 2 ;
		    sty = Math.floor(-posX/CTX["WIN_zdalleY"]) ;
		    sty2 = Math.floor((-posX+CTX["WLARG"]-1)/CTX["WIN_zdalleY"]) ;
		    break ;
   }

    // normalisation
    if (stx>stx2) { var tmp = stx; stx= stx2; stx2 = tmp; }
    if (sty>sty2) { var tmp = sty; sty= sty2; sty2 = tmp; }
    if ( CTX["WIN_nbX"] <= stx2) stx2 = CTX["WIN_nbX"]-1 ;
    if ( CTX["WIN_nbY"] <= sty2) sty2 = CTX["WIN_nbY"]-1;
    if (stx<0) stx=-1 ;
    if (sty<0) sty=-1 ;
    if (stx2<0) stx=-1 ;
    if (sty2<0) sty=-1 ;
	return Array(stx, sty, stx2, sty2) ;
 }
 
 function vtvi_generdiv() 
 {
  	// alert (""+WIN_width + " " + WIN_zoom);
  	var $res = "<div id='l0' name='l0' style='position:relative;width:"+
  		CTX["WLARG"]+"px;height:"+CTX["WHAUT"]+"px;overflow:hidden;clip:inherit;border:solid 1px "+CTX["LCOLOR"]+"'>\n" ;
  //	$res = "<div id='l0' name='l0' style='position:relative;width:"+
  //		CTX["WLARG"]+"px;height:"+CTX["WHAUT"]+"px;border:solid 1px "+CTX["LCOLOR"]+"'>\n" ;

  	return $res ;
 }

 function vtvi_poscentre(x, y)
 {
  	var X = Math.floor(CTX["ZOOM"]*x/10000-CTX["WLARG"]/2) ;
  	var Y = Math.floor(CTX["ZOOM"]*y/10000-CTX["WHAUT"]/2) ;
  	return Array(X, Y) ;
 }
 
 function vtvi_position(offX, offY, winX, winY)
 {
 //   alert(offX+" "+offY+" "+winX+" "+winY) ;
  	vtvi_precalc() ;
  	
	lb = getLayer("l0");
  	var gpl = getPageLeft(lb) - getPageScrollX() ;
	var gpt = getPageTop(lb) - getPageScrollY() ;
	
    var ZX = CTX["ZOOM"] ;
    var ZY = CTX["ZOOMY"] ;
    var X = winX - offX - gpl ;
    var Y = winY - offY - gpt ;
    if ((CTX["ROT"]=='B') || (CTX["ROT"]=='D'))
    {
      X = winY - offY - gpt ;
      Y = winX - offX - gpl ;
    }
    X = Math.floor(CTX["LARG"]*X/ZX) ;
    Y = Math.floor(CTX["HAUT"]*Y/ZY) ;
    switch(CTX["ROT"])
    {
      case 'A':
      	break ;
      case 'B':
      	Y = CTX["HAUT"] - Y ;
      	break ;
      case 'C':
      	X = CTX["LARG"] - X ;
      	Y = CTX["HAUT"] - Y ;
      	break ;
      case 'D':
      	X = CTX["LARG"] - X ;
      	break ;
    }
//  alert(gpl+" "+gpt+" "+offX+" "+offY+" "+winX+" "+winY+" "+ZX+" "+ZY+" "+CTX["LARG"]+" "+CTX["HAUT"]+" -> "+X+" "+Y) ;
    return Array(X, Y) ;
 }

 function vtvi_genertable(X, Y) 
 {
//  	document.write("X="+X+" Y="+Y+" ZOOM="+CTX["ZOOM"]+" L="+CTX["WLARG"]+" H="+CTX["WHAUT"]+" x="+x+" y="+y+"<br>") ;		
  	vtvi_precalc() ;
  	vtvi_setvisumap() ;
  	var $res = "<div id='inner' name='inner' style='top:"+(-Y)+"px;left:"+(-X)+"px;position:absolute;'>\n" ;
//  	alert(CTX["ZOOMY"]) ;
    var ZX = CTX["ZOOMY"] ;
    var ZY = CTX["ZOOM"] ;
    if ((CTX["ROT"]=='A') || (CTX["ROT"]=='C'))
    {
       ZX = CTX["ZOOM"] ;
       ZY = CTX["ZOOMY"] ;
    }
    var att = vtvi_attr_image(CTX["ROT"]) ;
   // var att = "&ROT="+CTX["ROT"] ;
  // alert (att);
    $res += "<img id='imbase' name='imbase' style='top:0px;left:0px;width:"+ZX+"px;height:"+ZY+
    		"px;position:absolute;' src='visui.php?IMAGE="+CTX["IMAGE"]+"&SI=img0"+att+"'>\n" ; 
  	
   $res += "<div id='innerL' name='innerL' style='border:none;top:0px;left:0px;width:"+ZX+"px;height:"+ZY+"px;position:absolute'>\n" ;
  	var v = vtvi_get_window_view(-X, -Y) ;
    GDBG = (v[0]+" "+v[1]+" "+v[2]+" "+v[3]+"<br>") ;
    var tv = "W"+v.join(",") ;
 	var a1 = vtvi_get_table(v[0], v[1], v[2], v[3]) ;
        if (a1 == "") 
	{
	  tv = "Wnone" ;
          a1 = "<img style='top:0px;left:0px;width:"+ZX+"px;height:"+ZY+
    		"px;position:absolute;' src='images/shim.gif'>\n" ; 
	} 
 	$res += a1 ;
	$res += "</div>\n" ;
	$res += vtvi_setvisumapdiv() ;
//    $res += "<img id='immap' name='immap' style='top:0px;left:0px;width:"+ZX+"px;height:"+ZY+
//    		"px;position:absolute;border:none;' src='images/shim.gif' usemap='#visumap'>\n" ; 
//  	$res += "<div id='objs' name='objs' style='top:0px;left:0px;position:absolute;'>") ;
//  	$res += get_objs() ;
  	$res += "<div id='zzonb' name='zzonb' style='top:0px;left:0px;font-size:0px;border:dotted 2px "+CTX["CCOLOR"]+";width:1px;height:1px;position:absolute;visibility:hidden;'></div>" ;
  	$res += "</div>\n" ;
  	return Array($res, tv) ;
 }
 
  function vtvi_setvisumap()
  {
    vtvi_updvisumapdiv() ;
    /*
    var i, j ;
    var lb = getLayer("visumap");
    // alert(lb.innerHTML) ;
    if (!lb) return ;
    var res = "" ;    
    for (i=0; i<CTX["PALEO_COORD"].length;++i) 
    {
      var ac = CTX["PALEO_COORD"][i].split(",") ;
      res += "<area shape="+ac[0]+" coords='" ;
      for (j=1; j<ac.length; j+=2)
      {
        if (j>1) res += "," ;
        res += Math.floor(ac[j]*CTX["ZOOM"]/CTX["LARG"]) ;
        res += "," ;
        res += Math.floor(ac[j+1]*CTX["ZOOMY"]/CTX["HAUT"]) ;
      }
      res += "' href='#' alt='"+CTX["PALEO_TEXT"][i]+"' title='"+CTX["PALEO_TEXT"][i]+"' />" ;
    }
    lb.innerHTML = res ;
    */
  }

  function vtvi_map_cvt_X(x)
  {
     return Math.floor(x*CTX["ZOOM"]/CTX["LARG"]) ;
  }

  function vtvi_map_cvt_Y(y)
  {
     return Math.floor(y*CTX["ZOOMY"]/CTX["HAUT"]) ;
  }

  function vtvi_setvisurotate(left, top, width, height)
  {
      var newleft = left ;
      var newtop = top ;
      var newwidth = width ;
      var newheight = height ;
      switch(CTX["ROT"])
      {
        case 'A' :
         break ;
        case 'B' :
        	newleft = CTX["ZOOMY"] - top - height ;
        	newtop = left ;
        	newwidth = height ;
        	newheight = width ;
         break ;
        case 'C' :
        	newtop = CTX["ZOOMY"] - top - height ;
        	newleft = CTX["ZOOM"] - left - width ;
         break ;
        case 'D' :
        	newtop = CTX["ZOOM"] - left - width ;
        	newleft = top ;        	
        	newwidth = height ;
        	newheight = width ;
         break ;
      }
      return Array(newleft, newtop, newwidth, newheight) ; 
  }

  function vtvi_setvisupaleocoord(ac)
  {	
  	var vtvi_left,  vtvi_top,  vtvi_width,  vtvi_height;
    if (ac.length < 6)
    {
        vtvi_left = vtvi_map_cvt_X(ac[0]) ;
        vtvi_top = vtvi_map_cvt_Y(ac[1]) ;
        vtvi_width = vtvi_map_cvt_X(ac[2])-vtvi_left ;
        vtvi_height = vtvi_map_cvt_Y(ac[3])-vtvi_top ;
        var ar =  vtvi_setvisurotate(vtvi_left, vtvi_top, vtvi_width, vtvi_height) ;       
        vtvi_left = ar[0] ;
        vtvi_top = ar[1] ;
        vtvi_width = ar[2] ;
        vtvi_height = ar[3] ;
    } else {
        vtvi_left = vtvi_map_cvt_X(ac[0]) ;
        vtvi_top = vtvi_map_cvt_Y(ac[1]) ;
        vtvi_width = ac[2] ;
        vtvi_height = ac[3] ;
        var ar =  vtvi_setvisurotate(vtvi_left, vtvi_top, 0, 0) ;       
        vtvi_left = ar[0] - ac[4] ;
        vtvi_top = ar[1] - ac[5];
    }

    return Array(vtvi_left, vtvi_top, vtvi_width, vtvi_height) ; 
  }

  function vtvi_setvisumapdiv(){
    var i, j ;
    var res = "" ;    
    var vtvi_left ;
    var vtvi_top ;
    var vtvi_width ;
    var vtvi_height ;
    for (i=0; i<CTX["PALEO_COORD"].length;++i) 
    {
      var ac = CTX["PALEO_COORD"][i].split(",") ;
	  var ar = vtvi_setvisupaleocoord(ac) ;
      vtvi_left = ar[0] ;
      vtvi_top = ar[1] ;
      vtvi_width = ar[2] ;
      vtvi_height = ar[3] ;
      if(ac.length<6){
      	res += vtvi_insert_paleo(i, "mapdiv"+i, "position:absolute;top:"+vtvi_top+"px;left:"+vtvi_left+"px;width:"+vtvi_width+"px;height:"+vtvi_height+"px;") ;      	
      }else{
       	res += vtvi_insert_paleo(i, "mapdiv"+i, "position:absolute;top:"+vtvi_top+"px;left:"+vtvi_left+"px;width:"+vtvi_width+"px;height:"+vtvi_height+"px;", 1) ;      	     	
      }

      set_zone_paleo("mapdiv"+i);
    }
    return res ;
  }

  function vtvi_updvisumapdiv()
  {
    var i ;
    for (i=0; i<CTX["PALEO_COORD"].length;++i) 
    {
      var ac = CTX["PALEO_COORD"][i].split(",") ;
	  var ar = vtvi_setvisupaleocoord(ac) ;
      vtvi_left = ar[0] ;
      vtvi_top = ar[1] ;
      vtvi_width = ar[2] ;
      vtvi_height = ar[3] ;
      
      var lb = getLayer("mapdiv"+i) ;
      if (lb)
      {
        lb.style.top = ""+vtvi_top+"px" ;
        lb.style.left = ""+vtvi_left+"px" ;
        lb.style.width = ""+vtvi_width+"px" ;
        lb.style.height = ""+vtvi_height+"px" ;
        // alert("npos: "+top+" "+left+" "+height+" "+width) ;
      }
    }
  }

 
  // fonction permettant de replacer l'image de base sans aficher le tableau des images --> utilisé pour les zooms successifs de la molette
  function vtvi_resettable(X, Y, keep) 
 	{
  	var l0 = getLayer("inner");
	  if (l0) {
	  	l0.style.top 	= ""+(-Y)+"px" ;
	  	l0.style.left = ""+(-X)+"px" ;
		}

		
  	vtvi_precalc() ;
   	var ZX = CTX["ZOOMY"] ;
    var ZY = CTX["ZOOM"] ;
    if ((CTX["ROT"]=='A') || (CTX["ROT"]=='C'))   {
       ZX = CTX["ZOOM"] ;
       ZY = CTX["ZOOMY"] ;
    }
 
   	var im = getLayer("imbase");
	  if (im) {
	  	im.style.width = ""+ZX+"px";
      im.style.height = ""+ZY+"px" ;
		}
    
    var ll = getLayer("innerL");
	  if (ll) {
	  	ll.style.width 	= ""+ZX+"px" ;
	  	ll.style.height = ""+ZY+"px" ;
	  	if (keep==0) ll.innerHTML = "<img style='top:0px;left:0px;width:"+ZX+"px;height:"+ZY+"px;position:absolute;' src='images/shim.gif'>\n";
		}
		
		return false;
}
    
 //
 // calcule la table des images visibles selon pos, rotation et fenetre
 //
 function vtvi_get_table(p0x, p0y, p1x, p1y) 
 {
   if (CTX["WIN_level"]==0) return "" ;
   var buf = "<table id='l0t' name='l0t' cellpadding='0' cellspacing='0' border='0' style='border-collapse:collapse'>" ;
   buf += vtvi_get_intable(p0x, p0y, p1x, p1y) ;
   buf += "</table>\n" ;  
   return buf ;
 }

 function vtvi_set_table(X, Y, oldTable)
 {
   var oldT = oldTable ;
// alert("vtvi_set_table "+X+" "+Y+" "+oldT) ;
   vtvi_precalc() ;
   var ZX = ""+CTX["ZOOMY"]+"px" ;
   var ZY = ""+CTX["ZOOM"]+"px" ;
   if ((CTX["ROT"]=='A') || (CTX["ROT"]=='C'))
   {
       ZX = ""+CTX["ZOOM"]+"px" ;
       ZY = ""+CTX["ZOOMY"]+"px" ;
   }
   var l0 = getLayer("innerL") ;
   var im = getLayer("imbase") ;
   if (!l0) 
   {
     if (CTX['WIN_level']==0)
     {
       //moveLayerTo("inner", -X, -Y) ;
       l0 = getLayer("inner") ;
       l0.style.top = ""+(-Y)+"px" ;
       l0.style.left = ""+(-X)+"px" ;
       if (im)
       {
         im.style.width = ZX ;
         im.style.height = ZY ;
       }
     } else { 
       var a1 = vtvi_genertable(X, Y) ;
       if ((oldT != a1[1]) || force)
       {
        var Table = getLayer("l0") ;
        Table.innerHTML = a1[0] ;
	oldT = a1[1] ;
       }
     }
   } else {
     var v = vtvi_get_window_view(-X, -Y) ;
     var tv = "W"+v.join(",") ;
   // alert(tv+" ["+oldT+"]") ;
     if ((tv != oldT)) // &&(CTX['WIN_level']>0))
     {
       var buf = vtvi_get_table(v[0], v[1], v[2], v[3]) ;
       if (buf == "") 
       {
	  oldT = "Wnone" ;
          buf = "<img style='top:0px;left:0px;width:"+ZX+"px;height:"+ZY+
    		"px;position:absolute;' src='images/shim.gif'>\n" ; 
       } else oldT = tv ; 
       l0.innerHTML = buf ;
     }
     // moveLayerTo("inner", -X, -Y) ;
     var l1 = getLayer("inner") ;
     l1.style.top = ""+(-Y)+"px" ;
     l1.style.left = ""+(-X)+"px" ;
     l1.style.width = ZX ;
     l1.style.height = ZY ;
     l0.style.width = ZX ;
     l0.style.height = ZY ;
     if (im)
     {
       im.style.width = ZX ;
       im.style.height = ZY ;
     }
   }
   return oldT ;
 } 

 function vtvi_get_intable(p0x, p0y, p1x, p1y) 
 {
   var buf = "" ;
   var lt ;
   var ht ;
   var nc ; // nb images en largeur
   var offset ; // temp calcul larg ou haut derniere dalle
   var sz ;
   //
   // calcul de la marge haute
   //
   switch(CTX["ROT"])
   {
     default :
     case 'A' :
     	ht = p0y*CTX["WIN_zdalleY"] ; // hauteur non affichée
     	if (p0y > CTX["WIN_nbY"]) ht=0 ; // rien d'affiche
     	nc = p1x-p0x+1 ;
     	if (p0x<0) nc = p1x+1 ;  //
     	lt = (p1x+1)*CTX["WIN_zdalleX"] ;
     	if (p1x >= (CTX["WIN_nbX"]-1)) lt = CTX["ZOOM"] ;
     break ;
     case 'B' :
		offset = vtvi_last_size_Y() ;
     	lt = offset + (CTX["WIN_nbY"]-p0y-1) * CTX["WIN_zdalleY"] ;
     	if (p0y<0) lt = CTX["ZOOMY"] ;
     	if (p0y>=CTX["WIN_nbY"]) lt=0;
     	ht = p0x*CTX["WIN_zdalleX"] ;
     	nc = p1y-p0y ;
     	if (p1y<(CTX["WIN_nbY"]-1)) nc++ ;
     	if (p0y<0) nc = p1y+1 ;
     break ;
     case 'C' :
		offset = vtvi_last_size_Y() ;
     	ht = offset + (CTX["WIN_nbY"]-p1y-2)*CTX["WIN_zdalleY"] ; // hauteur non affichée
     	if (p1y >= (CTX["WIN_nbY"]-1)) ht=0 ;      	
     	nc = p1x-p0x ;
     	if (p0x<0) nc = p1x ;
     	if (p1x<(CTX["WIN_nbX"]-1)) nc++ ;  //     	
		offset = vtvi_last_size_X() ;
     	lt = offset + (CTX["WIN_nbX"]-p0x-1)*CTX["WIN_zdalleX"] ;
     	if (p0x <= 0) lt = CTX["ZOOM"] ;
     break ;
     case 'D' :
		offset = vtvi_last_size_X() ;
     	lt = (p1y+1)*CTX["WIN_zdalleX"] ;
     	if (p1y >= (CTX["WIN_nbY"]-1)) lt = CTX["ZOOMY"] ;
     	ht = offset+(CTX["WIN_nbX"]-p1x-2)*CTX["WIN_zdalleX"] ;
     	if (p1x>=(CTX["WIN_nbX"]-1)) ht=0;
     	if (p1x==(CTX["WIN_nbX"]-2)) ht=offset;
     	nc = p1y-p0y ;
     	if (p0y>0) nc++ ;
     	if (p0y<=0) nc = p1y+1 ;
     break ;
   }
   if (ht>0 && lt>0)
     buf += "<tr><td colspan="+(nc+1)+"><img style=\"width:"+lt+"px;height:"+ht+"px;\" src=\"images/shim.gif\"></td></tr>\n" ;
    //
   // calcul de la marge gauche
   //
   switch(CTX["ROT"])
   {
     default :
     case 'A' :
     	lt = p0x*CTX["WIN_zdalleX"] ;
     	if (p0x < 0) lt = 0 ;
     	for (i=p0y; i<=p1y; ++i)
     	  if (i>=0)
     	  {
     	    buf += "<tr>" ;
     	    var sz = vtvi_real_size(0, i) ;
     	  	if (lt>0)
     	  	  buf += " <td style='padding:0;border:0;'><img style=\"width:"+lt+"px;height:"+sz[1]+"px;\" src=\"images/shim.gif\"></td>\n" ;
     		for (j=p0x; j<=p1x; ++j)
       	   	  if (j>=0)
     	      {
     	        sz = vtvi_real_size(j, i) ;
     	  	    buf += "  <td>"+vtvi_insert_image(j, i, sz[0], sz[1], CTX["ROT"])+"</td>\n" ;
     	      }
     	    buf += "</tr>\n" ;
     	  }
     break ;
     case 'B' :
     	lt = vtvi_last_size_Y() ; // last case height
     	if (p1y >= CTX["WIN_nbY"]-1) lt=0 ;
     	if (p1y < CTX["WIN_nbY"]-2) lt += (CTX["WIN_nbY"]-2-p1y) * CTX["WIN_zdalleY"] ;
   //  alert(p1y+" "+CTX["WIN_nbY"]+" "+lt) ;
     	if (p1y < 0) lt = 0 ;
     	for (i=p0x; i<=p1x; ++i)
     	  if (i>=0)
     	  {
     	    buf += "<tr>" ;
     	    var sz = vtvi_real_size(i, 0) ;
     	  	if (lt>0)
     	  	  buf += " <td><img style=\"width:"+lt+"px;height:"+sz[0]+"px;\" src=\"images/shim.gif\"></td>\n" ;
     		for (j=p1y; (j>=p0y && j>=0); --j)
     	      {
     	        sz = vtvi_real_size(i, j) ;
     	  	    buf += "  <td>"+vtvi_insert_image(i, j, sz[1], sz[0], CTX["ROT"])+"</td>\n" ;
     	      }
     	    buf += "</tr>\n" ;
     	  }
     break ;
     case 'C' :
        lt = vtvi_last_size_X() ;
        if (p1x >= CTX["WIN_nbX"]-1) lt=0 ;
     	if (p1x < CTX["WIN_nbX"]-2) lt += (CTX["WIN_nbX"]-p1x-2)*CTX["WIN_zdalleX"] ;
     	if (lt < 0) lt = 0 ;
     	for (i=p1y; i>=p0y; --i)
     	  if (i>=0)
     	  {
     	    buf += "<tr>" ;
     	    var sz = vtvi_real_size(0, i) ;
     	  	if (lt>0)
     	  	  buf += " <td><img style=\"width:"+lt+"px;height:"+sz[1]+"px;\" src=\"images/shim.gif\"></td>\n" ;
     		for (j=p1x; (j>=p0x && j>=0); --j)
     	      {
     	        sz = vtvi_real_size(j, i) ;
     	  	    buf += "  <td>"+vtvi_insert_image(j, i, sz[0], sz[1], CTX["ROT"])+"</td>\n" ;
     	      }
     	    buf += "</tr>\n" ;
     	  }
     break ;
     case 'D' :
     	lt = p0y*CTX["WIN_zdalleY"] ;
     	if (p0y < 0) lt = 0 ;
   //  alert(p1y+" "+CTX["WIN_nbY"]+" "+lt) ;
     	for (i=p1x; i>=p0x && i>=0; --i)
     	  {
     	    buf += "<tr>" ;
     	    var sz = vtvi_real_size(i, 0) ;
     	  	if (lt>0)
     	  	  buf += " <td><img style=\"width:"+lt+"px;height:"+sz[0]+"px;\" src=\"images/shim.gif\"></td>\n" ;
     		for (j=p0y; (j<=p1y); ++j)
      		  if (j>=0)
     	      {
     	        sz = vtvi_real_size(i, j) ;
     	  	    buf += "  <td>"+vtvi_insert_image(i, j, sz[1], sz[0], CTX["ROT"])+"</td>\n" ;
     	      }
     	    buf += "</tr>\n" ;
     	  }
     break ;
   }
      
   return buf ;
  }
  
  
  /*fonction qui permet de travailler avec les classname*/
	function getElementsByClassName(strClass, strTag, objContElm) {
	  strTag = strTag || "*";
	  objContElm = objContElm || document;
	  var objColl = objContElm.getElementsByTagName(strTag);
	  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
	  var arr = new Array();
	  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
	  var arrClass = strClass.split(delim);
	  for (var i = 0, j = objColl.length; i < j; i++) {
	    var arrObjClass = objColl[i].className.split(' ');
	    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
	    var c = 0;
	    comparisonLoop:
	    for (var k = 0, l = arrObjClass.length; k < l; k++) {
	      for (var m = 0, n = arrClass.length; m < n; m++) {
	        if (arrClass[m] == arrObjClass[k]) c++;
	        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
	          arr.push(objColl[i]);
	          break comparisonLoop;
	        }
	      }
	    }
	  }
	  return arr;
	}
	// To cover IE 5.0's lack of the push method
	Array.prototype.push = function(value) {
	  this[this.length] = value;
	}
  
  
  /*fonction qui permet de gérer les réactions au survol sur d'autres éléments que des liens pour IE6*/
	sfHover = function(elements) {
		if(document.all){
			var sfEls = elements;
			for (var i=0; i<sfEls.length; i++) {
				sfEls[i].onmouseover=function() {
					this.className+=" sfhover";
				}
				sfEls[i].onmouseout=function() {
					this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
				}
			}
		}
	}

