/**
* Fonctions utilitaires
*/

YAHOO.namespace ("Sqli.Utils"); 

YAHOO.Sqli.Utils.Tools = { 
	/**
	* Affiche une boite de confirmation
	* @param {String} le message
	* @param {Function} la fonction à declencher sur le oui
	* @param {String} le titre (optionnel)
	* @param {String} le texte du bouton oui (optionnel)
	* @param {String} le texte du bouton non (optionnel)
	* @param {String} la largeur de la fenetre (optionnel)
	* @param {boolean} est ce qu'on met une icone ? (optionnel)
	*/
 	confirm: function(message, callback, titre,libOk,libKo,width,icon, callbackKo){
		var handleOK = function() {
			if(callback!=null)
				callback.call();
	        this.hide();
		}
		var handleNot = function() {
			if(callbackKo!=null)
				callbackKo.call();
	        this.hide();
		}
		
		if(libOk == null)
			libOk = "Oui";
			
		if(libKo == null)
			libKo = "Non";
		
		withIcon = null;
		if(icon != null)
			withIcon = icon;
		
		
		dlg = new YAHOO.widget.SimpleDialog("dlg", { visible:false, width: "20em", close: false, fixedcenter:true, modal:true, draggable:false });
		
		
		if(titre == null)
			dlg.setHeader("Confirmation");
		else
			dlg.setHeader(titre);
		dlg.setBody(message);
		
		if(width != null)
			dlg.cfg.queueProperty("width",width);
		
		if(withIcon!=null)
			dlg.cfg.queueProperty("icon",withIcon);
		else
			dlg.cfg.queueProperty("icon",YAHOO.widget.SimpleDialog.ICON_HELP);
		
		dlg.cfg.resetProperty("buttons");
		if(libOk != "noButton"){
			if(libKo == "styleInvisible")
				dlg.cfg.queueProperty("buttons", [{ text:libOk, handler:handleOK }]);
			else
				dlg.cfg.queueProperty("buttons", [{ text:libOk, handler:handleOK },{ text:libKo, handler:handleNot}]);
		}
		
		dlg.render(document.body);
	    dlg.show();
		return false;
	},
	/**
	* Prépare une url afin de pouvoir lui rajouter des paramètres
	* @param {String} l'url
	* @return {String} l'url modifiée
	*/
	checkUrl: function(url){
		if(url.indexOf("?") == -1)
	   		url += "?";
	   	else if(url.substr(-1) != "?")
	   		url += "&";
	   	return url;
	},
	/**
	* Affiche une confirmation avant suppression
	* le paramètre id= sera rajouté tout seul
	* @param {String} le début de l'url à appeler pour la suppression, sans id
	* @param {String|int} la valeur de la clé qui sera mise dans le paramètre id=
	* @param {String} le titre de la confirm (optionnel)
	*/
	confirmDelete: function(url,id, title){
	   var msg = 'Confirmez vous la suppression de : '  + title + '?'; 
	   url = YAHOO.Sqli.Utils.Tools.checkUrl(url);
	   YAHOO.Sqli.Utils.Tools.confirm(msg,function(){document.location.href=url+'id='+id; });
	},
	/**
	* Permet de mettre à jour un select à partir d'un autre
	* L'url ne doit pas comporter le nom du paramètre attendu il sera rajouté.
	* Par exemple, url : action.do?method=list
	* Si le select source est multiple et qu'il y a plusieurs selections,
	* elles seront ajoutées et pourront être récupérées sous forme de tableau coté serveur.
	* Le serveur doit renvoyer une réponse JSON au format suivant :
	* {"ResultSet":{
	*	    "Result":[
	*			{"value":"1","label":"A","selected":1},
	*			{"value":"2","label":"B","selected":0}
	*	    ]}
	*	}
	* Il est possible d'utiliser la taglib sqli-yui:json-select-response pour cela
	* @param {Object} Le select source
	* @param {String} L'id du select de destination
	* @param {String} L'url qui fournira les éléments
	* @param {String} Le nom du paramètre à mettre dans l'url et qui contiendra les données 
	*/
	updateSelect: function(source,dest,url, paramName){
		url = YAHOO.Sqli.Utils.Tools.checkUrl(url);
		this.myDataSource = new YAHOO.util.DataSource(url);
	    this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
	    this.myDataSource.connXhrMode = "queueRequests";
	    this.myDataSource.responseSchema = {
	        resultsList: "ResultSet.Result",
	        fields: ["value","label","selected"]
	    };

       selUpd = new YAHOO.Sqli.Utils.SelectUpdater(dest);
       selected = new Array(); 
       for (var i = 0; i < source.options.length; i++) 
       	if (source.options[ i ].selected) 
       		selected.push(source.options[ i ].value);
       qStr = selected.join("&"+paramName+"=");
       this.myDataSource.sendRequest(paramName+"="+qStr, selUpd.doUpdate, selUpd);
	},
	/**
	* Affiche une boite de message d'erreur
	* @param {String} le message
	* @param {String}(optionnel) le titre
	* @param {boolean} est ce qu'on met une icone ? (optionnel)
	*/
 	error: function(message,titre,withIcon, withButtons){
		var handleOK = function() {
	        this.hide();
		}
		
		dlg = new YAHOO.widget.SimpleDialog("dlg", { visible:false, width: "30em", close: false, fixedcenter:true, modal:true, draggable:false });
		
		if(withIcon == null)
			withIcon = true;
		
		if(withButtons == null)
			withButtons = true;
		
		dlg.setHeader("Erreur");
		if(titre != null)
			dlg.setHeader(titre);
		dlg.setBody(message);
		if(withIcon)
			dlg.cfg.queueProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN);
		
		if(withButtons)
			dlg.cfg.queueProperty("buttons", [{ text:"Ok", handler:handleOK }]);
		dlg.render(document.body);
	    dlg.show();

		return false;
	}
}
