/**
 * Gestion de l'événement avant de quitter la page
 * 
 * Pr info : Si l'alerte apparait sur un élément nom voulu, il faut rajouter l'attribut onclick="noCloseIt"
 */
//F_CloseIt = true;
//if(F_EventBeforeUnload){
//	//window.onbeforeunload = CloseIt;
//}
function CloseIt(){   
	if(F_CloseIt){     
		//	event.returnValue = "Les modifications apport\u00E9es seront perdus si vous quittez cette page.";
		return "Les modifications apport\u00E9es seront perdus si vous quittez cette page.";
	}else{     
		F_CloseIt = true;  //Reset du flag à la valeur par défault
	}
}
	
function noCloseIt(browser){ 
	if (browser) {
		if (!is_array(browser)) {
			if (browser.toUpperCase() == TypeBrowser.toUpperCase()) 
				F_CloseIt = false;
			else //si different du 
 				F_CloseIt = true;
		}else{
			if(in_array(browser, TypeBrowser.toUpperCase())){
				F_CloseIt = false;
			}			
		}
	}else{ // Pas de pressision du browser -> flag à false 
		F_CloseIt = false;
	}
}

/**
 * Met à jour l'onglet sélèctionné dans un module déterminé
 * @param {Object} ongletId
 * @param {Object} moduleName
 * @param {Object} parentId
 */
function ongletClick(ongletId, moduleName, parentId, parametres){
	noCloseIt();
	var A_ongletLi = $('tabulation_header').getElementsByTagName('li');
		
	var objetAjax = new Ajax.Updater('content_middle', 'ajax/'+moduleName+'.ajax.php', {
		method: 'post',		
		onFailure: function(){
			//location.reload(true);
			alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
		},
		parameters: 'ongletId='+ongletId+'&parentId='+parentId+(parametres?parametres:''),
		evalScript : true,
		onLoading : function(){ 
			Element.show('systemeAttente'); 
		},
		onComplete: function(){ 
			//Réinitialisation des 'LI'
			for(var i in A_ongletLi)
				A_ongletLi[i].className="";
			/*Element.show('systemeAttente'); */
			Element.hide('systemeAttente');
			
			$('ongletLi_'+ongletId).className='tabCurrent';
			completeOnglet(ongletId);			
		}
	});
}
/**
 * Tri une liste selon une colonne définit
 * @param {Object} colonneName
 * @param {Object} fileAjax
 * @param {Object} moduleName
 */
function listeTri(colonneName,fileAjax, moduleName,elementUpd){
	var objetAjax = new Ajax.Updater(elementUpd, 'ajax/'+fileAjax+'.ajax.php', {
		method: 'post',
		onFailure: function(){
			//location.reload(true);
			alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
		},
		parameters: 'tri='+colonneName+'&moduleName='+moduleName,
		onComplete: function(){ completeListeTriPage(fileAjax);}
	});
}
/**
 * Gére la pagination d'un liste
 * @param {Object} numeroPage
 * @param {Object} fileAjax
 * @param {Object} moduleName
 */
function listePage(numeroPage,fileAjax, moduleName,elementUpd){
	var objetAjax = new Ajax.Updater(elementUpd, 'ajax/'+fileAjax+'.ajax.php', {
		method: 'post',
		onFailure: function(){
			//location.reload(true);
			alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
		},
		parameters: 'page='+numeroPage+'&moduleName='+moduleName,
		/*,onSuccess: moduleName+'Success'*/
		onComplete: function(){	completeListeTriPage(fileAjax);	}
	});
}
/**
 * Foncxtion aprés l'appel ajax d'un tri ou d'une pagination
 * @param {Object} fileAjax
 */
function completeListeTriPage(fileAjax)
{
	switch (fileAjax){
		case 'action_liste' :
			A_IdElement = new Array('action_liste_Action_DatePrevue','action_liste_Action_DateRealise');
			loadDatePicker(A_IdElement);
		break;
		case 'contrat_liste' :
			A_IdElement = new Array('contrat_liste_Contrat_DateDebut','contrat_liste_Contrat_DateFin');
			loadDatePicker(A_IdElement);
		break;
		case 'dossier_liste' :
			A_IdElement = new Array('Dossier_liste_Dossier_DateSinistre');
			loadDatePicker(A_IdElement);
		break;
	}
}

/**
 * Change la source d'une image
 * @param {Object} idImage
 * @param {Object} srcImage
 */
function changeImage(idImage,srcImage){
	$(idImage).src = srcImage;
}
/**
 * Affiche ou cache un element
 * @param {Object} idDiv
 */
function displayDiv(idDiv){
	if($(idDiv).style.display!='none'){
		$(idDiv).style.display='none';
		//Effect.SlideUp(idDiv);
	}else{
		$(idDiv).style.display='block';
		//Effect.SlideDown(idDiv);	
	}
}
/**
 * Affiche le formulaire de recherche (filtre)
 * @param {Object} idDiv
 * @param {Object} idImage
 */
function deployFiltre(idDiv,idImage,moduleName,modeleName)
{
	if($(idDiv).style.display!='none')
	{
		srcImage= COMMUNIMAGES_DIR+"fleche_droite.png";
	}else{
		srcImage= COMMUNIMAGES_DIR+"fleche_bas.png";
	}
	changeImage(idImage,srcImage);
	displayDiv(idDiv);
	var objetAjax = new Ajax.Request('ajax/displayFiltre.ajax.php',{
		method:'post',
		parameters:'module_nom='+moduleName+'&modele_nom='+modeleName
		});
}
/**
 * Affiche la page souhaitée dans un popup 
 * @param {Object} page nom de la page à afficher
 * @param {Object} name nom de la fenêtre
 * @param {Object} width Largeur
 * @param {Object} height Hauteur
 * @param {Object} parentId Id du formulaire parent
 * @param {Object} elementId Id de la ligne (pour la modification)
 */
function displayDialog(page, width, height, parentId, elementId,param){
	var screenHeight= screen.height;
	var screenWidth = screen.width;
	var popupTop  	= (screenHeight - height) / 2;
	var popupLeft 	= (screenWidth - width) / 2;
	if(!param)param=''; 
	window.open(APP_URL+'dialog/'+page+'.dialog.php?parentId='+parentId+'&elementId='+elementId+param, page, 'menubar=no, statusbar=no, width='+width+', height='+height+', top='+popupTop+', left='+popupLeft).focus();
}

/**
 * Affiche la page souhaitée dans un popup 
 * @param {Object} page nom de la page à afficher
 * @param {Object} name nom de la fenêtre
 * @param {Object} width Largeur
 * @param {Object} height Hauteur
 * @param {Object} parentId Id du formulaire parent
 * @param {Object} elementId Id de la ligne (pour la modification)
 */
function displayDialogPlugin(page, width, height, parentId, elementId,param){
	var screenHeight= screen.height;
	var screenWidth = screen.width;
	var popupTop  	= (screenHeight - height) / 2;
	var popupLeft 	= (screenWidth - width) / 2;
	if(!param)param=''; 
	window.open('dialog/'+page+'.dialog.php?parentId='+parentId+'&elementId='+elementId+param, page, 'menubar=no, statusbar=no, width='+width+', height='+height+', top='+popupTop+', left='+popupLeft).focus();
}
/**
 * Affiche la page souhaitée dans un popup 
 * @param {Object} page nom de la page à afficher
 * @param {Object} name nom de la fenêtre
 * @param {Object} width Largeur
 * @param {Object} height Hauteur
 * @param {Object} parentId Id du formulaire parent
 * @param {Object} elementId Id de la ligne (pour la modification)
 */
function displayDialogScroll(page, width, height, parentId, elementId,param){
	var screenHeight= screen.height;
	var screenWidth = screen.width;
	var popupTop  	= (screenHeight - height) / 2;
	var popupLeft 	= (screenWidth - width) / 2;
	if(!param)param=''; 
	window.open(APP_URL+'dialog/'+page+'.dialog.php?parentId='+parentId+'&elementId='+elementId+param, page, 'menubar=no, statusbar=no, scrollbars=yes, width='+width+', height='+height+', top='+popupTop+', left='+popupLeft).focus();
}
/**
 * Supprime un élément dans une liste se trouvant dans un formuleire et actualise la liste
 * @param {String} Div_Id
 * @param {String} page
 * @param {String} parentId
 * @param {String} elementId
 * @param {String} paramSup Parametre(s) suplémentaire(s) (Intervenant Interne ou Externe, Nom du module...)
 */
function deleteElement(Div_Id, page, parentId, elementId, paramSup){
	if (confirm('Voulez-vous vraiment supprimer cet élément ?')) {
	
		var objetAjax = new Ajax.Updater(Div_Id, 'ajax/' + page, {
			method: 'post',
			onFailure: function(){
				//location.reload(true);
				alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
			},
			parameters: 'Element_Id=' + elementId + '&act=del&Parent_Id=' + parentId + (typeof paramSup != "undefined" ?paramSup:''),
			onLoading : function(){ 
				if($('systemeAttente'))
					Element.show('systemeAttente'); 
			},
			onComplete: function(){ 			
				if($('systemeAttente'))
					Element.hide('systemeAttente');	
				completeDelete(parentId);			
			}
		});
	}
}

/**
 * Récupère la liste des données du champ parent
 * @param {String} selectId
 */

function GetListSelect(selectId){
	A_ListSelect = new Array();
	var SelList = $(selectId);
	for (var i=0; i< SelList.length; i++){
		A_ListSelect[A_ListSelect.length] = SelList[i].value;
	}
	return A_ListSelect;
}
/**
 * Ajoute un élément à la liste de destination
 * @param {String} selectId
 * @param {String} newTxt
 * @param {String} newVal
 */
function addSelect(selectId, newTxt, newVal){
	newOption = new Option(newTxt, newVal, false, false);
	$(selectId).options[$(selectId).length] = newOption;
}

/**
 * Sélectionne les valeur dans la liste à la soumission du formulaire
 * @param selectId
 */
function selectValList(selectId){
	list = $(selectId);
	for (var i = 0; i < list.length; i++){
		list.options[i].selected = true;
	}
}
/**
 * Fonction servant à la mise à jour dynamique d'un div à partir d'un popup
 * @param {Object} Element_Id
 * @param {Object} Chantier_Id
 * @param {Object} page
 * @param {Object} type
 */
function updateListeDiv(elementId, parentId, page,type){
	var objetAjaxUpdateListeDiv = new Ajax.Updater(elementId, 'ajax/'+page, {
		method: 'post',
		onFailure: function(){
			//location.reload(true);
			alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
		},
		parameters: 'Parent_Id='+parentId+(type?'&type='+type:''),
		onComplete: function(){
			if(elementId == 'PhotoListe_Div')
				Shadowbox.setup(); 
		}
	});
}

/**
 * Message de confirmation de suppression d'un élément
 */
function Confirmation (){
	if (!confirm('Voulez-vous vraiment supprimer cet élément ?'))
  		return false;   
	return true;
}
/**
 * 
 * @param {Object} msg
 * @param {Object} cssClass
 * @param {Object} width
 * @param {Object} height
 */
function displayStaticModalMessage(msg, cssClass, width, height){
	messageObj = new DHTML_modalMessage();	// We only create one object of this class
	messageObj.setShadowOffset(5);	// Large shadow
	messageObj.setHtmlContent('<div>'+msg+'</div><br><button onclick="closeMessage()" class="btn_red_1">OK</button>');
	messageObj.setSize(width,height);
	messageObj.setCssClassMessageBox(cssClass);
	messageObj.setSource(false);	// no html source since we want to use a static message here.
	messageObj.setShadowDivVisible(false);	// Disable shadow for these boxes	
	messageObj.display();
}
/**
 * 
 */
function closeMessage(){
	messageObj.close();	
}
/*******************************************
 * TREEVIEW
 ******************************************/ 
/**
 * Charge le Treeview
 * @param {String} idElement 	(id du div à mettre à jour)
 * @param {String} fileAjax 	(fichier ajax a appeler)
 * @param {String} idParentAll 	(id du module en cours 		/ exemple: Dossier_Id pour l'onglet Intrevenant du module dossier)
 * @param {String} type 		(type du parametre 			/ exemple: order)
 * @param {String} param 		(paramétre selon le type 	/ exemple: down)
 * @param {String} idLigne 		(id du noeud du treeview 	/ exemple: Intervenant_Id)
 */
function treeView(idElement,fileAjax,idParentAll,type,param,idLigne){
	var objetAjax = new Ajax.Updater(idElement, 'ajax/'+fileAjax+'_treeview.ajax.php', {
		method: 'post',		
		onFailure: function(){
			//location.reload(true);
			alert("Une erreur est survenue lors de l'appel AJAX.\nRecharger la page devrait résoudre le problème.")
		},
		parameters: 'type='+type+'&param='+param+'&idLigne='+idLigne+'&idParentAll='+idParentAll,
		evalScript : true,
		onLoading : function(){ 
			Element.show('systemeAttente'); 
		},
		onComplete: function(){ 
			Element.hide('systemeAttente');
			completeTreeView();			
		}
	});
}
/********************************************
 * DATEPICKER
 * ******************************************/
/**
 * Recharge le DataPicker (aprés un appel ajax: onglet, tri d'une liste, pagination d'une lise)
 * @param {Object} A_IdElement
 */
function loadDatePicker(A_IdElement){
	if(Object.isArray(A_IdElement)){
		for (var index = 0; index < A_IdElement.length; ++index) {
			var idElement = A_IdElement[index];  		
			datePickerController.destroyDatePicker(idElement);
			optionsDate = 'var opts = { '+
						  			'formElements:{"'+idElement+'":"d-sl-m-sl-Y"},'+
						  			'showWeeks:true,'+
						  			'statusFormat:"l-cc-sp-d-sp-F-sp-Y",'+
						  			'fillGrid:true,'+
						  			'constrainSelection:false};';
			eval(optionsDate); //EVAL obligatoire ... problème avec la variable 'idElement'
			datePickerController.createDatePicker(opts); 
		}
	}else{
		datePickerController.destroyDatePicker(A_IdElement);
		optionsDate = 'var opts = { '+
					  			'formElements:{"'+A_IdElement+'":"d-sl-m-sl-Y"},'+
					  			'showWeeks:true,'+
					  			'statusFormat:"l-cc-sp-d-sp-F-sp-Y",'+
					  			'fillGrid:true,'+
					  			'constrainSelection:false};';
		eval(optionsDate); //EVAL obligatoire ... problème avec la variable 'idElement'
		datePickerController.createDatePicker(opts); 
	}
}

/***********************************************
 * TOOLTIP AJAX
 * @param {Object} input
 ***********************************************/
function LoadTooltipAjax(nomfonction,idElement,time){
	//alert(nomfonction+','+idElement+','+time);
	timeoutID = window.setTimeout(function() {  eval(nomfonction);}, time);
}
function UnloadTooltipAjax(){
	window.clearTimeout(timeoutID);
}



/**
 * Fonction is_array()
 * @param {Object} input
 */
function is_array(input){    
	return typeof(input)=='object'&&(input instanceof Array);  
}

/**
 * Fonction in_array()
 */	
function in_array(array, p_val) {
    for(var i = 0, l = array.length; i < l; i++) {
        if(array[i] == p_val) {
            rowid = i;
            return true;
        }
    }
    return false;
}

/**
 * Formatage de champ décimal
 * @param {Object} element
 */
function formatDecimal(element){
	
	elmntValue = element.value;
	
	if(elmntValue == '')
		elmntValue = '0';
		
	var regEspace = new RegExp(" ", "g");
	var regVirgule = new RegExp(",", "g");
	
	elmntValue = elmntValue.replace(regEspace,"");	
	elmntValue = elmntValue.replace(regVirgule,"");
	elmntValue = elmntValue2 = parseFloat(elmntValue);
	
	elmntValue = Math.round((parseFloat(elmntValue)*100))/100;
	elmntValue = elmntValue.numberFormat("#,#.00") ;
	elmntValue = elmntValue.replace(regVirgule," ");
	element.value = elmntValue;
	
	return elmntValue2;
}

