//------------------------------------------------------------------------------
//                              -= OSI2I =-
//------------------------------------------------------------------------------
// Description:
//  Objet Modal (Creation de fenetres modales)
//
// Version:
//   20/06/2007 - RLA - V1.00
//    - Creation du fichier
// 11/03/2008 - DCH - 
// -  correction de la gestion des select caches
//------------------------------------------------------------------------------

//Libele par defaut

var OSMODAL_DEFAULT_LBL_VALIDATE = 'Valider';
var OSMODAL_DEFAULT_LBL_CANCEL   = 'Annuler';
var OSMODAL_DEFAULT_LBL_CLOSE    = 'Fermer';
var OSMODAL_DEFAULT_LBL_YES      = 'Oui';
var OSMODAL_DEFAULT_LBL_NO       = 'Non';
var OSMODAL_DEFAULT_LBL_USERNAME = 'Utilisateur';
var OSMODAL_DEFAULT_LBL_PASSWORD = 'Mot de passe';

//Class pas defaut
var OSMODAL_DEFAULT_CLASS_BACK   = 'modalBack';
var OSMODAL_DEFAULT_CLASS_BOX    = 'modalBox';

//Images
var OSMODAL_IMG_BTN_OK   = 'medias/images/16x16/check.gif';
var OSMODAL_IMG_BTN_NOK  = 'medias/images/16x16/uncheck.gif';

//Type de boite modal
var OSMODAL_NONE     = null;
var OSMODAL_INFO     = 'medias/images/32x32/info.gif';
var OSMODAL_WARN     = 'medias/images/32x32/warn.gif';
var OSMODAL_ERROR    = 'medias/images/32x32/error.gif';
var OSMODAL_ASK      = 'medias/images/32x32/ask.gif';
var OSMODAL_LOGIN    = 'medias/images/32x32/password.gif';

var OSMODAL_PROCESS  = 'medias/images/32x32/process.gif';
//Divers
var OSMODAL_DEBUG = 0;
var osModalLayer = new Array();
var osModalLayerDelete = new Array();

//Generateur de ID unique
var osModalID = 1;
osModalID = function(){
      return osModal++;
}

//Class osModalBox
osModalBox = function( modal ){
  this.modal      = null;
  this.used       = false;
  this.onYes      = null;
  this.onNo       = null;
  this.onCancel   = null;
  this.xhr		  = null; //Pour le module de login

  //Affectation des callBax
  this.setCallback = function( onYes, onNo ){
    this.onYes      = onYes;
    this.onNo       = onNo;
  }
}

//Class osModal
osModal = function( objName, divName ){
  this.objName      = objName;
  this.divName      = divName;
  this.boxs         = new Array();

  this.lblValidate = OSMODAL_DEFAULT_LBL_VALIDATE;
  this.lblCancel   = OSMODAL_DEFAULT_LBL_CANCEL;
  this.lblClose    = OSMODAL_DEFAULT_LBL_CLOSE;
  this.lblYes      = OSMODAL_DEFAULT_LBL_YES;
  this.lblNo       = OSMODAL_DEFAULT_LBL_NO;
  this.lblUsername = OSMODAL_DEFAULT_LBL_USERNAME;
  this.lblPassword = OSMODAL_DEFAULT_LBL_PASSWORD;
  
  this.styleBack  = OSMODAL_DEFAULT_CLASS_BACK;
  this.styleBox   = OSMODAL_DEFAULT_CLASS_BOX;
  
  this.imgBtnOk   = OSMODAL_IMG_BTN_OK;
  this.imgBtnNok  = OSMODAL_IMG_BTN_NOK;
  this.imgProcess  = OSMODAL_PROCESS;
  
  

   
  
  this.SelectFixed = function(){
  

	
	if(osModalLayer.length > 0){
			 var elmts = document.getElementsByTagName('select');
			 var modal_current = document.getElementById('modalObj' + osModalLayer[osModalLayer.length-1] + 'b');
		

			 if(modal_current != null){
				
				//var id_modal_current = osModalLayer[osModalLayer.length-1];
			 		// je cache tt sauf la fentre courante
				for (i = 0; i < elmts.length; ++i){
					var obj = elmts[i];	
					if (!obj || !obj.offsetParent)	continue;	
					
					var obj2 = ParentNodeModal(obj,modal_current.id);
					if(obj2 != false){
						
						
						if(modal_current.id == obj2.id){
							obj.style.visibility = 'visible';
						}else{
							obj.style.visibility = 'hidden';
						}
					}else{
					
						
						obj.style.visibility = 'hidden';
					}
				}
				
			}else{
				
				for (i = 0; i < elmts.length; ++i){
					var obj = elmts[i];	
					if (!obj || !obj.offsetParent)	continue;	
					obj.style.visibility = 'hidden';
				
				}
			
			
			
			}

	}else{

		var elmts = document.getElementsByTagName('select');
		for (i = 0; i < elmts.length; ++i){
				var obj = elmts[i];	
				if (!obj || !obj.offsetParent)	continue;	
				obj.style.visibility = 'visible';
			
		}
	
	}
    
  }
  
 
  /*this.ParentNodeModal = function(obj,id){
		
		var stat = true;
	  
		var Node = obj;
		
		while(stat == true){
	
			
		
			if(Node.parentNode == null){
				stat = false;
				return Node;
			}else{
				Node = Node.parentNode;
			}
			
			 
			if(Node.id == 'modalObj' + id + 'b'){
				stat = false;
				return Node;
			}
			
		
		}
		
		
		
   
   }*/
   

   this.overlapControl = function(id,visible){	
   
   	var i;
	var elmts = document.getElementsByTagName('select');

	if(visible == true){
	
		// recherche lelement en dessous de lid
		for(i=0;i<osModalLayer.length;i++){
				if(id == osModalLayer[i]){
					var modal_current = document.getElementById('modalObj' + osModalLayer[i] + 'b');
					var id_modal_current = osModalLayer[i];
				}
		}
		// je cache tt sauf la fentre courante
		for (i = 0; i < elmts.length; ++i){
			var obj = elmts[i];	
			if (!obj || !obj.offsetParent)	continue;	
			
	
			var obj2 = ParentNodeModal(obj,modal_current.id);
			
			if(modal_current.id == obj2.id){
				obj.style.visibility = 'visible';
			}else{
				obj.style.visibility = 'hidden';
			}
		
		}
	}else{
	
		var aff = false;
		// recherche lelement en dessous de lid
		for(i=0;i<osModalLayer.length;i++){
				if(id == osModalLayer[i]){
					if(i == 0){ 
					    aff = true;
						var modal_current = document.getElementById('modalObj' + osModalLayer[i] + 'b');
						var id_modal_current = osModalLayer[i];
					}else{
						var modal_current = document.getElementById('modalObj' + osModalLayer[i-1] + 'b');
						var id_modal_current = osModalLayer[i-1];
					}
				}
		}
		
		// je cache tt sauf la fentre courante
		for (i = 0; i < elmts.length; ++i){
			var obj = elmts[i];	
			if (!obj || !obj.offsetParent)	continue;	
		
				
				var obj2 = ParentNodeModal(obj,modal_current.id);
				
				if(modal_current.id == obj2.id){
					if(aff == true){
						obj.style.visibility = 'hidden';
					}else{
						obj.style.visibility = 'visible';
					}
				}else{
					if(aff == true){
						obj.style.visibility = 'visible';
					}else{
						obj.style.visibility = 'hidden';
					}

				}
		
		
		}
	
	
	}	
	
  }
  
  

  //Recupere un Handle libre
  this.getFree = function(){
    var buffer='';
    for(var id=0;id<this.boxs.length;id++){
      if ( !this.boxs[id].used ){
        this.boxs[id].used = true;		
        return id;
      }
    }
    this.boxs[id]      = new osModalBox(this);
    this.boxs[id].used = true;
    //Creation de la box
    buffer += '<div id=' + this.objName + id + ' name=' + this.objName + id + ' class="' + this.styleBack + '" >';
    buffer += '<div id=' + this.objName + id + 'b name=' + this.objName + id + 'b  class="' + this.styleBox + '">';
    buffer += '</div>';
    buffer += '</div>';
    elmt = getElement( this.divName );
    elmt.innerHTML += buffer;		
    return id;
  }
  
  //Libere une box
  this.close = function( id ){
     if ( id >=  this.boxs.length ) return;
     this.hide( id );
     box   = document.getElementById(this.objName + id + 'b');
     box.innerHTML = ''; 
	 box.style.margin = '200px auto';
	 box.style.width = '400px'; 
	 
     this.boxs[id].used = false
  }
  
  //Affiche une box
  this.show = function( id, content ){

    if ( id >=  this.boxs.length ) return;
    if ( content ){
      box   = document.getElementById(this.objName + id + 'b');
      box.innerHTML = content;
    }
   main  = document.getElementById(this.objName + id);
   main.style.visibility = 'visible';	

  
   // ajout de lid dans le tableau de layer
   var present = false;
   for(i=0;i<osModalLayer.length;i++){
			if(osModalLayer[i] == id){
				present = true;
			}
    }

	if(present == false){
		osModalLayer[osModalLayer.length] = id;
	}

   
   this.overlapControl(id,true);  


    return id;
  }
  
  //Cache une box
  this.hide = function( id ){
    if ( id >=  this.boxs.length ) return;
    main  = document.getElementById(this.objName + id);
    main.style.visibility = 'hidden';

	//alert(id);
	this.overlapControl(id,false);
	
	// suppression du layer du tableau
	for(i=0;i<osModalLayer.length;i++){
	
			if(id == osModalLayer[i]){
				osModalLayer.splice(i,1);
			}
	}


  }
  
  //Handle click
  this.click = function( id, callparam ){
    eval( 'var func = this.boxs[id].' + callparam + ';' );
    this.close( id );
    if ( func ) func.call( this );
  }
  
  //Handle connect
  this.connect = function( id ){    	
	var frm = getElement( 'frmLogin' + id );	
	if ( !frm ) return;	
    var username = frm.username.value;
	var password = frm.password.value;	
	if ( username == '' ) return;	
    this.close( id );
	this.xhr.onAuthenticate(username, password);	    
  }
  
  //Messagebox
  this.msgbox = function( msg, type, onOk ){
    var id = this.getFree();
    this.boxs[id].setCallback( onOk );
    var buffer = '';
    buffer  += ( !type ) ? '' : '<img src="' + type + '" border="0"><br/><br/>';
    buffer  += msg + '<br/><br/>';
    buffer += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onYes\' ); log = 1;"><img src="' + this.imgBtnOk + '" border="0" align="absmiddle">&nbsp;' + this.lblValidate + '</button>';
    return this.show( id, buffer );	
  }
  
    //Messagebox
  this.box = function( msg, type, onOk ){
    var id = this.getFree();
    this.boxs[id].setCallback( onOk );
    var buffer = '';
    buffer  += ( !type ) ? '' : '<img src="' + type + '" border="0"><br/><br/>';
    buffer  += msg + '<br/><br/>';
    buffer += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onYes\' ); log = 1;"><img src="' + this.imgBtnNok + '" border="0" align="absmiddle">&nbsp;' + this.lblClose + '</button>';
   return this.show( id, buffer );	
  }
  
      //attente
  this.waiting = function( msg, type){
    var id = this.getFree();
    var buffer = '';
    buffer  += ( !type ) ? '' : '<img src="' + type + '" border="0"><br/><br/>';
    buffer  += msg + '<br/><br/>';
	buffer  += '<img src="' + this.imgProcess + '" border="0" align="absmiddle" />';
   return this.show( id, buffer );	
  }
  
  //Confirm
  this.confirm = function( msg, type, onYes, onNo ){
    var id = this.getFree();
    this.boxs[id].setCallback( onYes, onNo );
    var buffer  = '';
    buffer  += ( !type ) ? '' : '<img src="' + type + '" border="0"><br/><br/>';
    buffer  += msg + '<br/><br/>';
    buffer  += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onYes\' )"><img src="' + this.imgBtnOk + '" border="0" align="absmiddle">&nbsp;' + this.lblYes + '</button>';
    buffer  += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onNo\' );"><img src="' + this.imgBtnNok + '" border="0" align="absmiddle">&nbsp;' + this.lblNo + '</button>';
    return this.show( id, buffer );
  }
  
  //Login
  this.login = function( xhr ){
    var buffer='';
    var id = this.getFree();
	this.xhr = xhr;
	var msg = xhr.getText();	
    buffer += '<img src="' + OSMODAL_LOGIN + '" border="0"><br/><br/>';
    buffer += (msg) ? msg + '<br/><br/>' : '';
    buffer += '<form name="frmLogin' + id + '" id="frmLogin' + id + '" onSubmit="return false;">';
    buffer += '<table width="100%" border="0" style="border-collapse: collapse" cellspacing="0" cellpadding="0"><tr><td align="center">';
    buffer += '<table width="250" border="0" style="border-collapse: collapse" cellspacing="0" cellpadding="4">';
    buffer += '<tr>';
    buffer += '<td align="left"><strong>' + this.lblUsername + '</strong></td>';
    buffer += '<td align="left"><input type="text" name="username" size="20"/></td>';
    buffer += '</tr>';
    buffer += '<tr>';
    buffer += '<td align="left"><strong>' + this.lblPassword + '</strong></td>';
    buffer += '<td align="left"><input type="password" name="password" size="20"/></td>';
    buffer += '</tr>';
    buffer += '<tr>';
    buffer += '<td colspan="2" align="center"><br/>';
    buffer  += '<button onclick="javascript:' + this.objName + '.connect(' + id + '); log = 1;"><img src="' + this.imgBtnOk + '" border="0" align="absmiddle">&nbsp;' + this.lblValidate + '</button>';
    buffer  += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onNo\' ); log = 1;"><img src="' + this.imgBtnNok + '" border="0" align="absmiddle">&nbsp;' + this.lblCancel + '</button>';
    buffer += '</td>';
    buffer += '</tr>';
    buffer += '</table>';
    buffer += '</td></tr></table>';
    buffer += '</form>';

    return this.show( id, buffer );
  }

  
      //Messagebox DCH 02/11/2007
    this.boxYes = function( msg, type, onOk ){
    var id = this.getFree();
    this.boxs[id].setCallback( onOk );
    var buffer = '';
    buffer  += ( !type ) ? '' : '<img src="' + type + '" border="0"><br/><br/>';
    buffer  += msg + '<br/><br/>';
    buffer += '<button onclick="javascript:' + this.objName + '.click(' + id + ', \'onYes\' )"><img src="' + this.imgBtnOk + '" border="0" align="absmiddle">&nbsp;' + this.lblYes + '</button>';
    return this.show( id, buffer );	
  }
  


}

  function ParentNodeModal(node,iden){
   
			//iden = 'modalObj' + iden + 'b';
   
			while(node != null){
			
				node = node.parentNode;
			
				if(node){
					if(node.id == iden){
						return node;
					}
				}
				
			}
			return false;
   
   
}

