	//var xc=0 ;
	//var yc=0 ;
	var orgX = -1 ;
	var orgY = -1 ;
	
	//var orgL0x = 0 ;
	//var orgL0y = 0 ;
	var orgLBx = 0 ;
	var orgLBy = 0 ;
	var mouseOK = 0 ;

	var PPmove = 0 ;


//--------------------------------
// FONCTIONS pour les curseurs
//--------------------------------
								
var iZS = 79;			// taille en pixel de l'echelle du zoom, de la luminosite et du contraste à l'ecran

var vt_visu_setCurseur_zoom = function(val, init) {
  var pCz = document.getElementById("curseur_zoom");
  if (!pCz) return false;
  if (!init) {
    var pos = iZS - Math.floor((iZS * val) / 100);
    if (pos > iZS) pos = iZS;
    if (pos < 0) pos = 0;
    pCz.style.top = pos+"px";
    //alert("vt_visu_setCurseur_zoom ---------- pCz.style.top : "+pCz.style.top+" val : "+val);
  }
  pCz.style.display = 'block';
}


var vt_visu_ClickCurseur_zoom = function(event) {
  var pEz = document.getElementById("echelle_zoom");
  if (!pEz) return false;
	var iY = Math.floor((iZS - event.clientY + getPageTop(pEz))*100/ iZS);
	//var iY = Math.floor((getPageBottom(pEz) - event.clientY )*100/ iZS);
  //alert("event.clientY : "+event.clientY+" getPageTop(pEz) : "+getPageTop(pEz)+" iY :"+iY);
  if (iY>100) iY = 100;
  else if (iY<0) iY=0;
  return zoom(iY,0,0,1) ;
}

var iLCL = iLCC = 0;
var vt_visu_setCurseur_lumcon = function(type, val, init) {
  var pCz = document.getElementById("curseur_"+type);
  if (!pCz) return false;
  if (init) { if (type == "con") iLCC = val; else iLCL = val; }
  val = Math.floor((iZS * val) / 100);
  if (val > iZS) val = iZS;
  if (val < 0) val = 0;
  pCz.style.left = val+"px";
  pCz.style.display = 'block';
}

var vt_visu_ClickCurseur_lumcon = function(type, event) {
  var pEz = document.getElementById("echelle_"+type);
  if (!pEz) return false;
  var pCz = document.getElementById("curseur_"+type);
  if (!pCz) return false;
  var iX = Math.floor((event.clientX - getPageLeft(pEz)) * 100 / iZS);
  var iRef = (type == "con") ? iLCC : iLCL;
  iX = (iX > iRef) ? Math.floor((iX-iRef) / 5) : -(Math.floor((iRef-iX) / 5));
  return (type == "con") ? CONT(iX) : LIGHT(iX);
}

var iBS = 570;
var vt_visu_getNumImg = function (e) {
	var eX, eY;
	if (document.all) {
		eX = event.clientX + document.documentElement.scrollLeft;
		eY = event.clientY + document.documentElement.scrollTop;	
	}	else {  // grab the x-y pos.s if browser is NS
		eX = e.pageX;
		eY = e.pageY;		
	}  
	if (eX < 0) eX = 0;
	if (eY < 0) eY = 0;	
  var pReg = YAHOO.util.Dom.getRegion( "barre_defile_echelle" );
	var bIn = ((eY > pReg.top) && (eY < pReg.bottom));
	if (bIn) bIn = ((eX > pReg.left) && (eX < pReg.right));
  var iw = iBS; // (pReg.right-11) - (pReg.left+12);
  var il = eX - (pReg.left-7);
  if ( il <= 0 )  il = 1;
  
  var iImg = parseInt(((il/iw)*iNbMaxAAfficher), 10);
  if (iImg <= 0) iImg=1;
  if (iImg >= iNbMaxAAfficher) iImg=iNbMaxAAfficher; 
  //window.status = iImg+" -- "+bIn+" -- "+eX+" -- "+pReg.left+" -- "+pReg.right+" -- "+eY+" -- "+pReg.top+" -- "+pReg.bottom+" -- "+iNumCurrentAAfficher+" -- "+iNbMaxAAfficher;
  return [iImg, bIn, eX, eY, iw];
}
var vt_visu_ClickCurseur_barre = function(event) {
  if (document.getElementById("barre_defile").bReload) return true;
 	var aRes = vt_visu_getNumImg(event);
  if (aRes[0] != iNumCurrentAAfficher) {
 		if (!aRes[1]) {// si c'est false c'est que le user a lacher la souris en dehors de la zone du curseur, on repositionne le curseur sur l'image courante
 			var pourcenNbImg  = parseInt((iBS/iNbMaxAAfficher)*iNumCurrentAAfficher, 10);
			//(iNumCurrentAAfficher/iNbMaxAAfficher)*aRes[4], 10);
			document.getElementById('curseur').style.left = pourcenNbImg+'px';
 		} else {// sinon on change d'image
 		  document.getElementById("barre_defile").bReload = true; 
   		document.location = "?INBAAFFICHER="+aRes[0];
 		}
  }
  return false;
}
// gestion des attributs title de la barre de défilement
function vt_visu_OverCurseur_barre(e) {
  if (!tt) return true;
 	var aRes = vt_visu_getNumImg(e);
 	if (aRes[1]) {
  	tt.setBody ('Image n°'+aRes[0] );
  	tt.cfg.setProperty("x", aRes[2]);
 	}	
	return true;
}


// Show the debug window
function showDebug() {
  window.top.debugWindow = window.open("","Debug","left=0,top=0,width=300,height=700,scrollbars=yes,status=yes,resizable=yes");
  window.top.debugWindow.opener = self;
  window.top.debugWindow.document.open();
  window.top.debugWindow.document.write(
  "<HTML><HEAD><TITLE>Debug Window</TITLE></HEAD><BODY><PRE>\n");
  window.top.debugWindow.focus();
}
//showDebug();
// If the debug window exists, then write to it
function debug(text) {
  if (window.top.debugWindow && ! window.top.debugWindow.closed) {
    window.top.debugWindow.document.write(text+"\n");
  }
}

// ************************************************************************
// Fonctions ... venant de visu.html
// ************************************************************************

//--------------------------------
// FONCTIONS pour les IMAGES
//--------------------------------

	function PlaceImage(x, y, ld)	{
	  x = Math.floor(x) ;
	  y = Math.floor(y) ;
	  var lb = getLayer("inner");
	  lb.style.top = "" + y + "px" ;
	  lb.style.left = "" + x + "px" ;

	  //var l1 = getLayer("objs");
	  //if (l1) l1.style.left = "" + x + "px" ;
	  
	  //alert("PlaceImage "+x+" "+y+" "+ld);
	  if (ld)	set_table(-x, -y, 1) ; 
	  else reset_table(-x, -y, 1+ld);

	  placeCTRL() ;
	  IM_mode(0) ;
	}


  function set_table0(posX, posY, force)   {
    var a1 = vtvi_genertable(posX, posY) ;
    if ((WIN_settable != a1[1]) || force)
    {
      var Table = getLayer("l0") ;
      Table.innerHTML = a1[0] ;
      WIN_settable = a1[1] ;
      IM_mode(0) ;
    }
   // IM_mode(0) ;
    // set_objs() ;
  }
  
 	/* charge les images qui sont visibles dans la fenêtre indiquée
   posX,posY : position de l'image de fond  */
  function set_table(posX, posY, force)   {
    //if (WIN_settable == "") return set_table0(posX, posY, force) ;
    // disable this function for now
    // return set_table0(posX, posY, force) ;
    //
    if (force) WIN_settable = "" ;
    WIN_settable = vtvi_set_table(posX, posY, WIN_settable) ;
    IM_mode(0) ;
    // set_objs() ;
  }
  
	// ne charge pas le tableau d'images, seulement l'image de base
	function reset_table(posX, posY, keep)   {
    vtvi_resettable(posX, posY, keep) ;
    IM_mode(0) ;
  }

//--------------------------------
// FONCTIONS pour la ROTATION
//--------------------------------

	function ROTATE(step) {
		var oldWR = WIN_ROT ;
		if (step==0) 
		{
		 	if (WIN_ROT=='A') return false ;
			WIN_ROT='A';
			SetVisu_ROTATE_INIT();
		} else if (step==1){
			switch(WIN_ROT) {
				case undefined:
				case 'A' : WIN_ROT='B' ; break ;
				case 'B' : WIN_ROT='C' ; break ;
				case 'C' : WIN_ROT='D' ; break ;
				case 'D' : WIN_ROT='A' ; break ;
			}
  	} else {
			switch(WIN_ROT) {
				case undefined:
				case 'A' : WIN_ROT='D' ; break ;
				case 'B' : WIN_ROT='A' ; break ;
				case 'C' : WIN_ROT='B' ; break ;
				case 'D' : WIN_ROT='C' ; break ;
		  }
  	}
  	var lb = getLayer("inner");
  	var ares = getXY(lb) ;
  	var Ox = ares[0] ;
  	var Oy = ares[1] ;
  	var sh = WIN_ROT.charCodeAt(0)-oldWR.charCodeAt(0) ;
  	if (sh<0) sh+=4 ;
  	if (sh>4) sh-=4 ;
  	var temp ;
  	var wzx = Math.floor(WIN_width/2) ;
  	var wzy = Math.floor(WIN_height/2) ;
  	var Ox1 = Ox - wzx ;
  	var Oy1 = Oy - wzy ;
  	var NZ = CTX["ZOOM"] ;
  	var NZx = CTX["ZOOM"] ;
  	var NZy = CTX["ZOOMY"] ;
  	if (oldWR=='B' || oldWR=='D')
  	{
  	  NZx = CTX["ZOOMY"] ;
  	  NZy = CTX["ZOOM"] ;
  	}
// alert("deb "+wzx+" "+Ox+" "+Oy+" "+Ox1+" "+Oy1+" "+IMG_height+" "+IMG_width) ;
  	switch(sh)	
  	{
			case 1 : 
				Ox = wzx-(Oy1+NZy) ;
				Oy = Ox1 + wzy ;
				break ;
    	case 2 : 
    		Ox = -Ox1-NZx + wzx;
				Oy = -Oy1-NZy + wzy ;
				break ;
    	case 3 : 
				Oy = wzy-(Ox1+NZx) ;
				Ox = Oy1+wzx ;
 				break ;
      default: 
				break ;
  	}
  	// alert(cleanRoot()+"&ROT="+WIN_ROT+"&POSX="+Ox+"&POSY="+Oy+"&ZOOM="+NZ) ; return false ;
  	window.location = cleanRoot()+"&ROT="+WIN_ROT+"&POSX="+Ox+"&POSY="+Oy+"&ZOOM="+NZ ;
  	
  	var sUri ="flux.htm?sAsk=CHANG_ROT&sId="+escape(WIN_ROT);
   	var iRet = Vt_Req_file(sUri);
  	
  	return false ;
 	}

 	function cleanRoot() 
 	{
		var re0 = /\&ROT=[A-D]/;
		var re1 = /\&(ZOOM|POSX|POSY)=-?\d+/;
		var str = window.location.href ;
		str=str.replace(/#.*$/, "");
		var newstr=str.replace(re0, "");
		newstr=newstr.replace(re1, "");
		newstr=newstr.replace(re1, "");
		newstr=newstr.replace(re1, "");
		return newstr ;
	}

 	function getRoot() 
 	{
   	var re0 = /\?.*/;
   	var str = window.location.href ;
   	var newstr=str.replace(re0, "");
   	return newstr ;
 	}

	function SetVisu_ROTATE_SAVE() {
	   var sUri ="flux.htm?sAsk=SAVE_ROT&sRot="+escape(WIN_ROT);
	   var iRet = Vt_Req_file(sUri);
	   if (parseInt(iRet, 10)) alert("Enregistrement de la rotation effectué");
	}
	
	function SetVisu_ROTATE_INIT() {
	   var sUri ="flux.htm?sAsk=INIT_ROT";
	   var iRet = Vt_Req_file(sUri);
	   if (parseInt(iRet, 10)) alert("Retour aux paramètres (rotation) par défaut effectué");
	}

//--------------------------------
// FONCTIONS pour le ZOOM
//--------------------------------

// zoom=0% 		=> Image initiale 
// zoom=100% 	=> Pixel pour pixel 

  // Zoom quand on clique sur +/-
  function zoomp(val) {
  	alert(val);
    var coef_new = parseInt(WIN_adust_zoom,10) + parseInt(val,10);
   	if (coef_new>100) 			coef_new = 100;
  	else if (coef_new<0) 	coef_new=0;
   
    if (coef_new==0) zoom_reset() ;
    else zoom(coef_new,0,0,1) ;
    return false ;
  }
  
  // Zoom avec la roulette
  function zoomMolette(val)  {

    var coef_new = parseInt(WIN_adust_zoom,10) + parseInt(val,10);
  	/* 	if (coef_new>100) 			coef_new = 100; */
  	if (coef_new<0) 	coef_new=0;
   	if (coef_new==0) zoom_reset() ;
    else zoom(coef_new,0,0,-1) ;
    return false ;
  }
    
	function zoom(sz, Wsz, reset, reload) {	
   	var oldZ = WIN_zoom ;
    var lb = getLayer("inner");
    var ares = getXY(lb) ;

    if (reset==1) {
    	WIN_zoom = parseInt(WIN_zoom_init, 10) ;
			WIN_adust_zoom = 0;
		}
		else if (Wsz!=0) {
    	WIN_zoom = Wsz ;
    	WIN_adust_zoom = sz ;
    }
    else if (sz!=0) {
    	WIN_adust_zoom = sz ;
    	WIN_zoom = parseInt(parseInt(WIN_zoom_init, 10)+(IMG_width-parseInt(WIN_zoom_init, 10))*WIN_adust_zoom/100,10) ;
    }

    initZoom(WIN_zoom,WIN_adust_zoom) ;

    if (reset==1) {
      orgLBx = WIN_POSX ;
      orgLBy = WIN_POSY ;
    } else {
      orgLBx = Math.floor((WIN_zoom*(ares[0]-WIN_width/2)/oldZ) + WIN_width/2);
      orgLBy = Math.floor((WIN_zoom*(ares[1]-WIN_height/2)/oldZ) + WIN_height/2) ;
    }
    WIN_settable = "" ; // force reload
    vtvi_setvisumap() ;
    PlaceImage(orgLBx, orgLBy, reload) ;
   // IM_mode(0) ;
    vt_visu_setCurseur_zoom(WIN_adust_zoom) ;

    return false ;
  }
	
	function zoom_reset() {
     zoom(0, 0, 1,1) ;
  }

 	// fonction ne sert pas, mais reprise au cas ou
 /* function zoomshift(incr)
  {
    var lv = vtvi_getlevel() ;
    if (incr>0)
    {
      if (CTX["AFORM"][lv+1])
	return zoom(0, CTX["AFORM"][lv+1]["LARG"]) ;
    } else {
      if (lv>0)
	return zoom(0, CTX["AFORM"][lv-1]["LARG"]) ;
    }
    return false ;
  }  */
	
	function initZoom(zoom,coef) {
	  CTX["ZOOM"] = parseInt(zoom,10) ;
	  CTX["ADUST_ZOOM"] = parseInt(coef,10) ;
	  vtvi_precalc() ;
	}
	
	function SetVisu_ZOOM_SAVE() {
		var niveau_zoom = CTX["ADUST_ZOOM"];
		//alert('niveau de zoom : '+niveau_zoom+'%');
	  var sUri ="flux.htm?sAsk=SAVE_ZOOM&zoom="+niveau_zoom;
	  var iRet = Vt_Req_file(sUri);
	  if (parseInt(iRet, 10)) alert("Enregistrement du zoom effectué");	
	}	
	
	function SetVisu_ZOOM_RESET() {
	   zoom_reset();
	   var sUri ="flux.htm?sAsk=RESET_ZOOM";
	   var iRet = Vt_Req_file(sUri);
	   //if (parseInt(iRet, 10)) alert("Retour aux paramètres (zoom) par défaut effectué");
		 //window.location.reload();
	}	
	
	 var NbCoupsMolette=0;
  
	/*fonction qui permet de capturer les evenements de la molette de la souris*/
	function wheel(event){
    var delta = 0;

    if (!event) /* For IE. */
        event = window.event;
    if (event.wheelDelta) { /* IE/Opera. */
       delta = event.wheelDelta/120;
       /*In Opera 9, delta differs in sign as compared to IE. */
       if (window.opera) delta = -delta;
    } else if (event.detail) { /** Mozilla case. */
       /* In Mozilla, sign of delta is different than in IE.
       * Also, delta is multiple of 3.*/
       delta = -event.detail/3;
    }
    
    if (delta < 0) NbCoupsMolette --;
    else if (delta > 0) NbCoupsMolette ++;
    
    if (delta && ( NbCoupsMolette == 1 || NbCoupsMolette == -1 )) {
    	setTimeout("handle2()",500);
    }

		/*si n delta existe, on lance la fonction handle*/
    if (delta) handle(delta);
    
    /* Prevent default actions caused by mouse wheel.
    * That might be ugly, but we handle scrolls somehow
    * anyway, so don't bother here..
    */
    if (event.preventDefault) event.preventDefault();
		event.returnValue = false;
	}
	
	/*fonction qui est lancée lorsque on a capturé les evenements de la molette*/
	function handle(delta) {
   	var ValZoom = 5 * delta;
   	zoomMolette(ValZoom);
	}
	
	function handle2() {
   	zoom(WIN_adust_zoom,0,0,1) ;
    NbCoupsMolette = 0;
	}
	
//---------------------------------
// fonctions du zoom en restant cliqué sur les bouton +/-
//--------------------------------
	var val_zoom = 0;
	var startZoom = function (i){
		val_zoom+=i;
		//window.status = 'val_zoom : '+val_zoom;
		if(i>0) nivzoom = setTimeout("zoomMolette(val_zoom/2);startZoom(1);",50);
		else nivzoom   	= setTimeout("zoomMolette(val_zoom/2);startZoom(-1);",50);
		return false;
	};
	
	var stopZoom = function(){
		// si le clic en dure pas j'applique un niveau mini de zoom
		if(val_zoom>0 && val_zoom<=10){
			var coef_new = parseInt(WIN_adust_zoom,10)-val_zoom+10;
		}else if(val_zoom<0 && val_zoom>=-10){
			var coef_new = parseInt(WIN_adust_zoom,10)+val_zoom-10;			
		}else{
			var coef_new = parseInt(WIN_adust_zoom,10)+val_zoom;			
		}
  	if (coef_new<0)coef_new=0;
   	if (coef_new==0) zoom_reset() ;
    else zoom(coef_new,0,0,1) ;   
		val_zoom = 0;
		clearTimeout(nivzoom); 
		return false;
	};
	
	
//--------------------------------
// FONCTIONS pour CONTRASTE/LUMINOSITE
//--------------------------------

  function CONT(val)
  {
    if (val==0)
    {
      IMG_op = 50 ;
    } else {
      IMG_op += (val*5) ;
      if (IMG_op>100) IMG_op = 100 ;
      if (IMG_op<0) IMG_op = 0 ;
    }
    RefreshCL() ;
    vt_visu_setCurseur_lumcon("con", IMG_op) ;
    
    var sUri ="flux.htm?sAsk=CHANG_CONT";
    var iRet = Vt_Req_file(sUri);
    
    return false ;
  }

  function LIGHT(val)
  {
    if (val==0)
    {
      IMG_opL = 50 ;
    } else {
      IMG_opL += (val*5) ;
      if (IMG_opL>100) IMG_opL=100 ;
      if (IMG_opL<0) IMG_opL=0 ;
    }
    // var lb = getLayer("textL");
    // lb.innerHTML = ""+IMG_opL ; 
    RefreshCL() ;
    vt_visu_setCurseur_lumcon("lum", IMG_opL) ;
    
    var sUri ="flux.htm?sAsk=CHANG_LIGHT";
    var iRet = Vt_Req_file(sUri);
    
    return false ;
  }

	function SetVisu_CONTLUM_RESET() {
		IMG_op = 50;
		IMG_opL = 50;
		RefreshCL() ;
    vt_visu_setCurseur_lumcon("con", IMG_op) ;
    vt_visu_setCurseur_lumcon("lum", IMG_opL) ;
    
	  var sUri ="flux.htm?sAsk=RESET_CONTLUM&sCont="+escape(IMG_op)+"&sLum="+escape(IMG_opL);
	  var iRet = Vt_Req_file(sUri);
	  if (parseInt(iRet, 10)) alert("Mise à zéro du contraste et de la luminosité");
	}

	function SetVisu_CONTLUM_SAVE() {
	  var sUri ="flux.htm?sAsk=SAVE_CONTLUM_NEGATIF&sCont="+escape(IMG_op)+"&sLum="+escape(IMG_opL)+"&&sNeg="+escape(IMG_NEG);
	  var iRet = Vt_Req_file(sUri);
	  if (parseInt(iRet, 10)) alert("Enregistrement du contraste/luminosité/négatif effectué");
	}

	function RefreshCL()  {
	  var lb = getLayer("inner");
	  if (!lb) 
	  {
	    alert("fenetre inner non trouvee") ;
			return ;
	  }
	  var ares = getXY(lb) ;
	  WIN_settable="" ;
	  set_table0(-ares[0], -ares[1], 1) ;
	}

//--------------------------------
// FONCTIONS pour le NEGATIF
//--------------------------------

	function NEGATIF()
	{
		if (IMG_NEG == 1){
			document.getElementById("negatif").getElementsByTagName("img")[0].src="images/btn-negatif.gif";
			IMG_NEG = 0;
		}else{
			document.getElementById("negatif").getElementsByTagName("img")[0].src="images/btn-negatif-over.gif";			
			IMG_NEG = 1;
		}
		RefreshCL() ;
		
		var sUri ="flux.htm?sAsk=CHANG_NEGATIF&sId="+escape(IMG_NEG);
    var iRet = Vt_Req_file(sUri);
		
		return false;
	}

//--------------------------------
// FONCTIONS diverses
//--------------------------------

  // fonctions non utilisée actuellement, mais gardée au cas ou ...
  /*function RECENTER()  {
      IMG_op = 50 ;
      IMG_opL = 50 ;
       RefreshCL() ;
  }*/

	function getXY(layer)	{
	   var x = parseInt(getLeft(layer),10) ;
	   var y = parseInt(getTop(layer),10) ;
	   return new Array(x, y) ;
	}
	
	function non(){
	  return false ;
	}

  function print_url(imprim_index)
  {
    var lb = getLayer("inner");
   	var ares = getXY(lb) ;
   	var Ox = ares[0] ;
   	var Oy = ares[1] ;
   	
  	if(imprim_index && imprim_index==1){
     var url = "print.html?IMAGE="+IMG_base+"&DIR="+IMG_dir+
         "&ROT="+WIN_ROT+"&POSX="+Ox+"&POSY="+Oy+"&ZOOM="+WIN_zoom+"&imprim_param=1" ; 		
  	}else{	
      var url = "print.html?IMAGE="+IMG_base+"&DIR="+IMG_dir+
         "&ROT="+WIN_ROT+"&POSX="+Ox+"&POSY="+Oy+"&ZOOM="+WIN_zoom+"&imprim_param=0" ;		
  	}

         
    // ajout des options
    url += "&IMG_op="+IMG_op+"&IMG_opL="+IMG_opL+"&IMG_NEG="+IMG_NEG;
      
    return url ;
  }

  function save_url()
  {
    var lb = getLayer("inner");
   	var ares = getXY(lb) ;
   	var Ox = ares[0] ;
   	var Oy = ares[1] ;
  
    var url = "save.html?IMAGE="+IMG_base+"&DIR="+IMG_dir+
         "&ROT="+WIN_ROT+"&POSX="+Ox+"&POSY="+Oy+"&ZOOM="+WIN_zoom ;
         
    // ajout des options
    url += "&IMG_op="+IMG_op+"&IMG_opL="+IMG_opL+"&IMG_NEG="+IMG_NEG;
      
    return url ;
  }



	function ShowEtat() {
		alert("*"+getLayer("palette_nav").style.display+"*"+getLayer("palette_outils").style.display+"*");
	}

//--------------------------------
// FONCTIONS pour les palettes
//--------------------------------

	function SetVisu_OPCL(sId, bDD) { 
		toggle(sId);
	
	if (bDD && getLayer(sId).style.display == 'block') dd.initz();
	   var sUri ="flux.htm?sAsk=SAVE_OPCL&sId="+escape(sId);
	   Vt_Req_file(sUri);
		return false;
	}
	
	function toggle(div) {
		var ll = getLayer(div);
	 	if (!ll) return false ;
		if (ll.style.display == 'none'){ll.style.display = 'block' ;	
		}else{ll.style.display = 'none' ;	}
		
		
		if (div=='palette_nav') { 
			if (ll.style.display == 'none'){ hideCTRL() ;}
			else{placeCTRL();}
			if(document.getElementById('ico_palette_nav').src.split('-')[1]!='off.gif'){
				 document.getElementById('ico_palette_nav').src = document.getElementById('ico_palette_nav').src.split('.gif')[0]+'-off.gif';				
			}else{
				 document.getElementById('ico_palette_nav').src = document.getElementById('ico_palette_nav').src.split('-off.gif')[0]+'.gif';								
			}
		}
		if (div=='palette_outils') { 
			if(document.getElementById('ico_palette_outils').src.split('-')[1]!='off.gif'){
				 document.getElementById('ico_palette_outils').src = document.getElementById('ico_palette_outils').src.split('.gif')[0]+'-off.gif';				
			}else{
				 document.getElementById('ico_palette_outils').src = document.getElementById('ico_palette_outils').src.split('-off.gif')[0]+'.gif';								
			}
		}	
		return false ;		
	}

	function IM_palette()	{	
	  var lb = getLayer("palette_nav_titre") ;
	  lb.onmousedown=PPMoveDown ;
	  lb.onmouseup=PPMoveUp ;
	  lb.onmousemove=PPMoveMove ;
	  var lb = getLayer("palette_nav_top") ;
	  lb.onmousedown=PPMoveDown ;
	  lb.onmouseup=PPMoveUp ;
	  lb.onmousemove=PPMoveMove ;
	  var lb = getLayer("palette_nav_bottom") ;
	  lb.onmousedown=PPMoveDown ;
	  lb.onmouseup=PPMoveUp ;
	  lb.onmousemove=PPMoveMove ;
	  var lb = getLayer("palette_nav_left") ;
	  lb.onmousedown=PPMoveDown ;
	  lb.onmouseup=PPMoveUp ;
	  lb.onmousemove=PPMoveMove ;
	  var lb = getLayer("palette_nav_right") ;
	  lb.onmousedown=PPMoveDown ;
	  lb.onmouseup=PPMoveUp ;
	  lb.onmousemove=PPMoveMove ;
	}
	
	function PPMoveDown(e)	{
	  var ev=window.event? window.event : e
	   orgX = ev.clientX ;
	   orgY = ev.clientY ;
	
	   if (window.captureEvents) window.captureEvents(ev.MOUSEUP | ev.MOUSEMOVE); else
	   {
	     document.onmouseup=PPMoveUp;
	     document.onmousemove=PPMoveMove;
	   }
	
	   var lb = getLayer("palette_nav");
	   var ares = getXY(lb) ;
	   orgLBx = ares[0] ;
	   orgLBy = ares[1] ;
	   PPmove = 1 ;
	   return false ;
	}
	
	function PPMoveUp(e)	{
	  if (PPmove != 1) return false ;
	  var ev=window.event? window.event : e
	  PPMoveMove(e) ;
	  if (window.releaseEvents) window.releaseEvents(ev.MOUSEUP | ev.MOUSEMOVE);
	  PPmove = 0 ;
	  var lb = getLayer("palette_nav");
	  var sUri ="flux.htm?sAsk=MOUVE_OPCL&sId="+escape("palette_nav");
	  sUri += "&x="+lb.style.left+"&y="+lb.style.top;
	  Vt_Req_file(sUri);
	  placeCTRL() ;
	  return true ;
	}
	
	function PPMoveMove(e)	{
	  var ev=window.event? window.event : e
	  if (PPmove != 1) return false ;
	  var NorgX = orgX - ev.clientX ;
	  var NorgY = orgY - ev.clientY ;
	  var lb = getLayer("palette_nav");
	  if (lb)
	  {
	    lb.style.left = ""+(orgLBx - NorgX)+"px" ;
	    lb.style.top = ""+(orgLBy - NorgY)+"px" ;
	    hideCTRL() ;
	  }
	  return false ;   
	}
	
//--------------------------------
// FONCTIONS pour la palette Navigation
//--------------------------------
	
	function hideCTRL() {
    hideLayer("ICTRL") ;
  }
  
  function placeCTRL()  {
		// alert("placeCTRL");
    var WZ = CTX['ZOOM'] ;
    if (WIN_ROT=='B' || WIN_ROT == 'D') WZ = CTX['ZOOMY'] ;
   	var szx = Math.floor(WIN_width*WIN_CIMGx/WZ);
    var szy = Math.floor(WIN_height*WIN_CIMGx/WZ);
    var lb = getLayer("inner");
    if (!lb){
    	alert("fenetre inner non trouvee") ;
			return ;
    }
    var ares = getXY(lb) ;
   // if (ares[0]<ares[1]) {
    if (IMG_height<IMG_width || ares[0]<ares[1]  ) {
      var x = Math.floor((-1*ares[0]*WIN_CIMGx/WZ)) ;
    	var y = Math.floor((-1*ares[1]*WIN_CIMGx/WZ)) ;
   	}
    else {
    	var x = Math.floor((-1*ares[0]*WIN_CIMGy/WZ)/2) ;
    	var y = Math.floor((-1*ares[1]*WIN_CIMGy/WZ)/2) ;
    }
 	//	alert("placeCTRL "+ares[0]+" "+ares[1]+" "+x+" "+y);

    lb = getLayer("ICTRL");
    if (!lb){
      alert("fenetre ICTRL non trouvee") ;
			return ;
    }
		
		//si l'image de la palette est vertical (plus haute que large) la taille du cadre rouge est restreinte - simon
		var my_image = document.getElementById('palette_nav').getElementsByTagName('TABLE')[0].getElementsByTagName('IMG')[1];
		if(my_image.width<my_image.height ){
		//if (IMG_height>IMG_width) {
			if(szx >= 107){szx = 107;}
			if(szy >= 107){szy = 107;}
			if (CTX['ZOOM']==CTX['ZOOM_INIT']) x += 21;
		}
    lb.style.width = ""+(szx)+"px" ;
    lb.style.height = ""+(szy)+"px" ;
x += -4;y += -3; // pour les bords
	  moveLayerToLayer(lb, "DICTRL", x, y) ;
   	if(getLayer("palette_nav").style.display=='block' || !getLayer("palette_nav").style.display){
    	showLayer("ICTRL") ;
		}else{
			hideCTRL()
		}

   // alert(x+" "+y+" "+szx+" "+szy) ;
  }
	
	
//--------------------------------
// FONCTIONS pour les layers
//--------------------------------
	// fonction pour gerer le mode main(0) ou selection(1)
	function IM_mode(mode)	{
	  var lb = getLayer("visumap") ;
	  if (lb)	  {
	    if (mode==0)   {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUp ;
	      lb.onmousemove=MMoveMove ;
	    } else {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUpZ ;
	      lb.onmousemove=MMoveMoveZ1 ;
	    }
	    lb.onselectstart=non ;
	    lb.ondragstart=non ;
	  }

	  lb = getLayer("innerL") ;
	  if (lb)	  {
	    if (mode==0)   {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUp ;
	      lb.onmousemove=MMoveMove ;
	    } else {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUpZ ;
	      lb.onmousemove=MMoveMoveZ1 ;
	    }
	    lb.onselectstart=non ;
	    lb.ondragstart=non ;
	  }
	  
	  lb = getLayer("inner") ;
	  if (lb)  {
	    if (mode==0)  {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUp ;
	      lb.onmousemove=MMoveMove ;
	    } else {
	      lb.onmousedown=MMoveDown ;
	      lb.onmouseup=MMoveUpZ ;
	      lb.onmousemove=MMoveMoveZ1 ;
	    }
	    lb.onselectstart=non ;
	    lb.ondragstart=non ;
	  }
	  
	  lb = getLayer("ICTRL") ;
	  if (mode==0) {
	    lb.onmousedown=C_MMoveDown ;
	    lb.onmouseup=MMoveUp ;
	    lb.onmousemove=MMoveMove ;
	  } else {
	    lb.onmousedown=C_MMoveDown ;
	    lb.onmouseup=MMoveUpZ ;
	    lb.onmousemove=MMoveMoveZ2 ;
	  }
	  lb.onselectstart=non ;
	  lb.ondragstart=non ;
	  
	  lb = getLayer("DICTRL") ;
	  if (mode==0) {
	    lb.onmousedown=C_MMoveDown ;
	    lb.onmouseup=MMoveUp ;
	    lb.onmousemove=MMoveMove ;
	  } else {
	    lb.onmousedown=C_MMoveDown ;
	    lb.onmouseup=MMoveUpZ ;
	    lb.onmousemove=MMoveMoveZ2 ;
	  }
	  lb.onselectstart=non ;
	  lb.ondragstart=non ;
	  
	  lb = getLayer("zzonb") ;
	  if (lb)  {
	    lb.onmouseup=MMoveUpZ ;
	    lb.onmousemove=MMoveMoveZ ;
	    lb.onselectstart=non ;
	    lb.ondragstart=non ;
	  } else alert("zzonb missing") ;
	  
	  lb = getLayer("zzonc") ;
	  if (lb)  {
	    lb.onmouseup=MMoveUpZ ;
	    lb.onmousemove=MMoveMoveZ ;
	    lb.onselectstart=non ;
	    lb.ondragstart=non ;
	  }else alert("zzonc missing") ;
	  
	  if (mode==0)  { set_cursor("url(/visu2/images/curseur_main.ico), pointer") ; } 
	  else {          set_cursor("crosshair") ;  }
	  return false ;
	}
	
	function C_MMoveDown(e)	{
	   MMoveDown(e) ;
	   mouseOK = 2 ;
	   return false ;
	}
	
	function MMoveDown(e)	{
	  var ev=window.event? window.event : e
	   orgX = getPageX(ev) ;
	   orgY = getPageY(ev) ;
	   var lb = getLayer("inner");
	   var ares = getXY(lb) ;
	   orgLBx = ares[0] ;
	   orgLBy = ares[1] ;
	   mouseOK = 1 ;
	   //
	   // demo: get positon of click within the image
	   var xy = vtvi_position(orgLBx, orgLBy, orgX, orgY) ;
	   // alert("pos X="+xy[0]+" Y="+xy[1]) ;
	   //
	   // window.captureEvents(e.CLICK | e.MOUSEDOWN | e.MOUSEUP | e.MOUSEMOVE)
	  // if (WIN_mode) alert( orgX+" "+orgY+" "+getHeight(lb) ) ;
	   return false ;
	}
	
	function MMoveMove(e)	{
	  var ev=window.event? window.event : e
	  if (mouseOK==0) return false ;
	  var NorgX = orgX - getPageX(ev) ;
	  var NorgY = orgY - getPageY(ev) ;
	  if (mouseOK==2)
	  {
	    NorgX = -Math.floor(NorgX*WIN_zoom/WIN_CIMGx) ;
	    NorgY = -Math.floor(NorgY*WIN_zoom/WIN_CIMGx) ;
	  }
/*	  if ((orgLBy - NorgY) > WIN_height/2) return false ;
	  if ((orgLBx - NorgX) > WIN_width/2) return false ;
	  if ((orgLBy - NorgY)+ WIN_zoomY < WIN_height/2) return false ;
	  if ((orgLBx - NorgX) + WIN_zoom <WIN_width/2) return false ;
	*/
	  PlaceImage(orgLBx - NorgX, orgLBy - NorgY, 0) ;
	  return false ;   
	}
	
	function MMoveUp(e)	{
	  var ev=window.event? window.event : e
	  if (mouseOK==0) return false ;
	  var NorgX = orgX - getPageX(ev) ;
	  var NorgY = orgY - getPageY(ev) ;
	  if (mouseOK==2)
	  {
	    NorgX = -Math.floor(NorgX*WIN_zoom/WIN_CIMGx) ;
	    NorgY = -Math.floor(NorgY*WIN_zoom/WIN_CIMGx) ;
	  }
	  mouseOK = 0 ;  
	 // if ((orgLBy - NorgY) > WIN_height/2) return false ;
	 // if ((orgLBx - NorgX) > WIN_width/2) return false ;
	 // if ((orgLBy - NorgY)+ WIN_zoomY < WIN_height/2) return false ;
	 // if ((orgLBx - NorgX) + WIN_zoom <WIN_width/2) return false ;
	    
	  var posX = orgLBx - NorgX ;
	  var posY = orgLBy - NorgY ;
	  PlaceImage(posX, posY, 1) ;
	  // alert(GDBG) ;
	  /*  
	   var ares = getXY(getLayer("inner")) ;
	   orgLBx = ares[0] ;
	   orgLBy = ares[1] ;  
	   var wX = getPageLeft("l0") ;
	   var wY = getPageTop("l0") ;
	   var sX = getPageScrollX(top) ;
	   var sY = getPageScrollY(top) ;
	
	   var dX = Math.floor((-orgLBx+(WIN_width/2)+sX)/WIN_zoom*10000) ;
	   var dY = Math.floor((-orgLBy+(WIN_height/2)+sY)/WIN_zoom*10000) ;
	   var dXS = Math.floor((-orgLBx+(ev.clientX-wX)+sX)/WIN_zoom*10000) ;
	   var dYS = Math.floor((-orgLBy+(ev.clientY-wY)+sY)/WIN_zoom*10000) ;
	   top.status = "pos X="+dX+" Y="+dY+" Xs="+ dXS +" Ys="+dYS;
	  */
	  return false ; 
	}
	
	function MMoveMoveZ1(e)	{
	  if (mouseOK!=1) return false ;
	  MMoveMoveZ(e);
	  return false ;
	}
	
	function MMoveMoveZ2(e)	{
	  if (mouseOK!=2) return false ;
	  MMoveMoveZ(e);
	  return false ;
	}
	
	function MMoveMoveZ(e)	{
	  var ev=window.event? window.event : e ;
	  if (mouseOK==0) return false ;
	  var NorgX = orgX - getPageX(ev) ;
	  var NorgY = orgY - getPageY(ev) ;
	  var lb = 0 ;
	  // si le navigateur est IE, je modifie une valeur due au calcul du boxmodel
	  // dans IEle baordure est contenu dans le width alors que pour les autres la bordure est ajoutée au width
	  if(document.all){
	  	border_boxmodel = 6;
	  }else{
	  	border_boxmodel = 4;
	  }
	  if (mouseOK==1){
		  lb = getLayer("zzonb");//si on est dans le visuel principal
		  if (NorgX<0){
		    lb.style.left = ""+Math.floor((orgX+getPageScrollX())-((document.body.clientWidth-(parseInt(document.getElementById('container').style.width)))/2))-65-border_boxmodel-orgLBx+"px"; 
		    lb.style.width = ""+(-NorgX)+"px" ; 
		  } else {
		    lb.style.left = ""+Math.floor(ev.clientX+getPageScrollX()-((document.body.clientWidth-(parseInt(document.getElementById('container').style.width)))/2))-65-border_boxmodel-orgLBx+"px"; 
		    lb.style.width = ""+NorgX+"px" ; 
		  }
		  if (NorgY<0){
		    lb.style.top = ""+Math.floor(orgY+getPageScrollY()-68-border_boxmodel-orgLBy)+"px";
		    lb.style.height = ""+(-NorgY)+"px" ;
		  } else {
		    lb.style.top = ""+Math.floor(ev.clientY+getPageScrollY()-66-border_boxmodel-orgLBy)+"px";
		    lb.style.height = ""+NorgY+"px" ;
		  }
	  } else {
      lb = getLayer("container");
      var ares = getXY(lb) ;
      var gpl =  getPageLeft(lb) ;
      var gpt = getPageTop(lb) ;	  
	  	lb = getLayer("zzonc");//zone de la palette
      if (NorgX<0){
		    lb.style.left = ""+(orgX-gpl)+"px"; 
		    lb.style.width = ""+(-NorgX)+"px" ; 
	  	} else {
		    lb.style.left = ""+(getPageX(ev)-gpl)+"px"; 
		    lb.style.width = ""+NorgX+"px" ; 
	  	}
	  	if (NorgY<0){
		    lb.style.top = ""+(orgY-gpt)+"px";
		    lb.style.height = ""+(-NorgY)+"px" ;
	  	} else {
		    lb.style.height = ""+NorgY+"px" ;
		    lb.style.top = ""+(getPageY(ev)-gpt)+"px";
	 		}		
	  }
	  showLayer(lb);	   
	  return false ;
	}
	
	function MMoveUpZ(e)	{
	  var ev=window.event? window.event : e ;
	  if (mouseOK==0) return false ;
	  var lb = 0 ;
	  if (mouseOK==1)	  {
	    lb = getLayer("zzonb");
	  } else {
	    lb = getLayer("zzonc");
	  } 
	  hideLayer(lb);
	
	  lb.style.width = "1px" ;
	  lb.style.height = "1px" ;
	  lb.style.left = "0px" ;
	  lb.style.top = "0px" ;
	  lb.style.visibility="visible" ;
	
	  var NorgX = orgX - getPageX(ev) ;
	  var NorgY = orgY - getPageY(ev) ;
	  var szx = 0 ;
	  var szy = 0 ;
	  
	  if (mouseOK==2)	  {
	    szx = Math.floor((100*WIN_width/IMG_width)*(WIN_CIMGx/Math.abs(NorgX))) ;
	    szy = Math.floor((100*WIN_height/IMG_height)*(WIN_CIMGy/Math.abs(NorgY))) ;
	  } else {
	    szx = Math.floor((100*WIN_zoom/IMG_width)*(WIN_width/Math.abs(NorgX))) ;
	    szy = Math.floor((100*WIN_zoom/IMG_width)*(WIN_height/Math.abs(NorgY))) ;
	  }
	 //  alert(szx+" "+szy) ;
	  var nz = szx ;
	  var offX = 0 ;
	  var offY = 0 ;
	  if (szx > szy) nz = szy ;
	  if (nz > 500) nz = 500 ;
	  
	  if (szy > nz)	  {
	    offY = Math.floor(WIN_height*(1-nz/szy)/2) ;
	  } 
	  if (szx > nz)	  {
	    offX = Math.floor(WIN_width*(1-nz/szx)/2) ;
	  }
	  if (mouseOK==2)	  {
	    lb = getLayer("DICTRL");
	  } else {
	    lb = getLayer("l0");
	  }
	  var gpl = getPageLeft(lb) - getPageScrollX() ;
	  var gpt = getPageTop(lb) - getPageScrollY() ;
	  if (mouseOK==2)	  {
	    gpl += Math.floor((WIN_CIMGx0-WIN_CIMGx)/2) ;
	  }
	
	  lb = getLayer("inner");
	  
	  var ares = Array(0,0) ;
	  var oldZ = WIN_CIMGx ;
	  
	  if (mouseOK==1)	  {
	    ares = getXY(lb) ;
	    oldZ = WIN_zoom ;
	  } 
	  mouseOK = 0 ;

	  // calcul du zoom
    var oldz = WIN_zoom ;
	  WIN_zoom = Math.floor(IMG_width*nz/100) ;
    var il = vtvi_getlevel() ; 
 //  WIN_zoom = parseInt(CTX["AFORM"][il]["LARG"],10) ;
    
  	WIN_adust_zoom = Math.floor(100*(WIN_zoom-parseInt(WIN_zoom_init, 10))/(IMG_width-parseInt(WIN_zoom_init, 10))) ;
    initZoom(WIN_zoom,WIN_adust_zoom) ;

	  orgLBx = Math.floor((WIN_zoom*(ares[0]-WIN_width/2)/oldZ) + WIN_width/2) ;
    orgLBy = Math.floor((WIN_zoom*(ares[1]-WIN_height/2)/oldZ) + WIN_height/2) ;
	  
	  if (NorgX<0)	  {
	    orgLBx = (WIN_zoom*(ares[0]-(orgX-gpl))/oldZ) + offX ;
	  } else {
	    orgLBx = (WIN_zoom*(ares[0]-(ev.clientX-gpl))/oldZ) + offX ;    
	  }
	  if (NorgY<0)	  {
	    orgLBy = (WIN_zoom*(ares[1]-(orgY-gpt))/oldZ) + offY ;
	  } else {
	    orgLBy = (WIN_zoom*(ares[1]-(ev.clientY-gpt))/oldZ) + offY ;    
	  }
	  PlaceImage(orgLBx, orgLBy, 1) ;  
	  //IM_mode(0) ;
	  vt_visu_setCurseur_zoom(WIN_adust_zoom) ;
	  return false ;
	}
	
  function initLayer() {
    var lb = getLayer("inner");
    var ares = getXY(lb) ;
    orgLBx = ares[0] ;
    orgLBy = ares[1] ;
    if (WIN_POSX!=0 || WIN_POSY!=0) {
      orgLBx = WIN_POSX ;
      orgLBy = WIN_POSY ;
    }
    PlaceImage(orgLBx, orgLBy, 1) ;    
  }
  
  function set_cursor(type) {
	  var lb = getLayer("ICTRL");
    if (!lb) {
			alert("fenetre ICTRL non trouvee") ;
			return ;
    }
    lb.style.cursor = type;
		
    lb = getLayer("DICTRL");
    if (!lb) {
			alert("fenetre DICTRL non trouvee") ;
			return ;
    }
    lb.style.cursor = type;
		
    lb = getLayer("innerL");
    if (!lb) {
			alert("fenetre innerL non trouvee") ;
			return ;
    }
    lb.style.cursor = type;
		
    if (type=="url(/visu2/images/curseur_main.ico), pointer") {
      lb = getLayer("btn_mode1");
	    lb.src="images/btn_mode1_roll.gif"
//	    lb.src="images/main_roll.gif"
      lb = getLayer("btn_mode2");
	    lb.src="images/btn_mode2.gif"
//	    lb.src="images/zone.gif"
    } else {
      lb = getLayer("btn_mode1");
	    lb.src="images/btn_mode1.gif"
//	    lb.src="images/main.gif"
      lb = getLayer("btn_mode2");
	    lb.src="images/btn_mode2_roll.gif"
//	    lb.src="images/zone_roll.gif"
  	}
  }

//--------------------------------
// FONCTIONS pour les evenements
//--------------------------------


