/*
* update_password_block : fonction helper créant une zone de modif du passwd sur les fiches users
*
* @authors Nicolas MARY
*/
function update_password_block(trigger_element){
    if(trigger_element.innerHTML == ' Modifier le mot de passe '){
        trigger_element.up('p').insert({after:'<p><label for="coord_cmdp_field">Confirmation *</label><input type="password" value="" name="coord_cmdp_field" id="coord_cmdp_field" /></p>'}).down('#'+trigger_element.id).update('annuler').up().previous('input[type="password"]').writeAttribute('class','').removeAttribute('disabled');                        
        if(trigger_element.up('form').down('input[type="submit"]') === undefined){
           trigger_element.up('form').insert('<input type="hidden" id="submit_witness" value=""/><input type="submit" class="button" value="valider" />'); 
        }
    }else{
        trigger_element.update(' Modifier le mot de passe ').up().previous('input[type="password"]').writeAttribute('class','ninja_field').writeAttribute('disabled','disabled').up('p').next('p').remove();
		if($('submit_witness')){
			$('submit_witness').next('input[type="submit"]').remove();
			$('submit_witness').remove();
		}
    }    
}//update_password_block

/*
* add_to_favorites : déclenche l'ajoût d'un prestataire à la liste des favoris d'un user
*
* @authors Nicolas MARY
*/
function add_to_favorites(id_user, id_presta, witness_element, add, local_path){
    if(!id_presta) return;
    add = add || true;
	local_path = local_path || './';	
	var url = local_path+"ajax/process_addition_to_favorites.php";
    var my_request = new Ajax.Request(url, {parameters:'user='+id_user+'&presta='+id_presta+'&add='+add, onSuccess: function(xhr){
        if(xhr.responseText.isJSON()){
            var serverReport = $H(xhr.responseText.evalJSON());
            if(Object.isUndefined(serverReport._object.action_result)){
                $(witness_element).innerHTML = 'Réponse serveur inattendue!';    
            }else{                
                if(Object.isUndefined(serverReport._object.report)){
                    $(witness_element).innerHTML = (serverReport._object.action_result)? "action réussie!": "action échouée!";    
                }else{
                    $(witness_element).update(serverReport._object.report);
                }
				if(serverReport._object.action_result){//rechargt page ssi succès
					if(add){
						window.location.reload();
					}else{
						window.location = window.location.pathname;
					}
				}                
            }
        }else{ 
            $('witness_element').innerHTML = 'Réponse serveur mal formée!';
            return;
        }
    }});
    return;
}//add_to_favorites

/*
* add_to_favorites : affiche en popup la fiche d'un prestataire
* 
* @param local_path : (optionnel) chemin relatif à l'emplacement du script de la fiche. ex: '../' ou './' (répertoire courant par défaut)
* @param tab : (optionnel) onglet de la fiche à afficher (1 par défaut)
* @authors Nicolas MARY
*/

function popup_fiche_presta(id_presta, tab, local_path){
    tab = tab || 1;
	local_path = local_path || './';
	var url = local_path+'fiche.php?idp='+id_presta+'&tab='+tab+'&pop=1';
    window.open(url,'popup_fiche_presta','width=830,height=600,scrollbars=1,resizable=yes');
    return;
}//popup_fiche_presta


function popup_contact_presta(id_presta, tab, local_path){
    tab = tab || 1;
	local_path = local_path || './';
	var url = local_path+'fiche_contact.php?idp='+id_presta;
    window.open(url,'popup_fiche_presta','width=830,height=600,scrollbars=1,resizable=yes');
    return;
}//popup_contact_presta
/*
* ajaxFormSubmissionHandler : requêteur et gestionnaire de réponse ajax générique pour la soumission de formulaire
* 
* @param dom_event : objet evenement automatiquement passé en 1er argument par Prototype
* @param requestHandlingModule (ou RHM) : module à implémenter renfermant les spécificités de la requête AJAX
* NB : Cette fonction suppose qu'une réponse bien formée du serveur (succès comme échec) soit un objet JSON
* 	   comportant une clé 'action_result' qui soit un booléen et une clé facultative 'report' qui sera affichée
*	   si elle est définie en cas de réponse négative ex: {"action_result":false, "report":'Le user n\'est pas connect&eacute;!'}
* @authors Nicolas MARY
* exemple de RHM : 
* 	var connectionRHM = {
*     reportTarget: $('server_report'),
*     url: './ajax/process_user_login.php',
*     params: function(){
*         return $('form_login_user').serialize()+'&client_form='+$('form_login_user').name;
*     },
*     success: function(){
*         this.reportTarget.update('<span class="success">Connexion effectuée!</span>');
*         window.location = 'view.php';
*     },
*     failure: function(){
*         if($A(arguments).size() && Object.isString(arguments[0])) 
*             this.reportTarget.update('<span class="failure">'+arguments[0]+'</span>');
*         else 
*             this.reportTarget.update('<span class="failure">Echec de la connexion! Aucun utilisateur n\'est enregistré sous ces identifiants...</span>');
*     }
* };
*/
function ajaxFormSubmissionHandler(dom_event, requestHandlingModule){
    // requestHandlingModule : {reportTarget:element, url:string, params:function(){}, failure:function(){}, success:function(){}}
    Event.stop(dom_event);        
    //suppression des éventuels message précédents
    $$('.error_element').each(function(elt){
        elt.removeClassName('error_element');
    });
    $$('span.error_msg').each(function(elt){
        elt.remove();
    });
    var callBack = function(xhr){
        if(xhr.responseText.isJSON()){           
            var reportList = $H(xhr.responseText.evalJSON());
            if(reportList.find(function(elt){return (elt[0] == "action_result")}) !== undefined){
                if(reportList._object.action_result){ 
                    requestHandlingModule.success(); 
                }else{
                    if (reportList._object.report) 
                        requestHandlingModule.failure(reportList._object.report);
                    else
                        requestHandlingModule.failure();
                }    
            }else{
                var summary = '';
                requestHandlingModule.reportTarget.update();
                reportList.each(function(pair){
                    $(pair.key).addClassName('error_element').insert({after:'<span class="error_msg"> '+pair.value+'</span>'});
                    summary += '<p>'+pair.value+'</p>';
                });
            }
        }else requestHandlingModule.reportTarget.innerHTML = '<span class="failure">Réponse serveur mal formée!</span>';
        return
    }//callBack
    var my_request = new Ajax.Request(requestHandlingModule.url, {parameters:requestHandlingModule.params(), onSuccess:callBack});
    return
}//ajaxFormSubmissionHandler



