(function($) {
	$(function() {
		var debug=false;
		var success_ajaxInitBlocs = function(data) {
			if (debug && typeof(console)!='undefined') console.log("success_ajaxInitBlocs("+data+") ...");
			var err = false;
			if (data==null) {
				if (debug && typeof(console)!='undefined') console.log("success_ajaxInitBlocs("+data+") ... ended");
				return true;
			}
			boError.clear();
			$.each(data.errors, function(key, val) {
				var $this = this;
				if ($this!=null && $this!='') {
					if (err==false) {
						err=true;
						var msg = boi18n.getMessage("/bov3/wcm", "general_there_are_errors", $this);
						boError.setTitle(msg)							
					} else {
						var msg = boi18n.getMessage("/bov3/wcm", "dataindex_detail_error", $this);
						boError.addDetail( msg );
					}
				}
			});
			if (err) {
				boError.show();
				if (debug && typeof(console)!='undefined') console.log("success_ajaxInitBlocs("+data+") ... ended2");
				return false;
			}
			if (debug && typeof(console)!='undefined') console.log("success_ajaxInitBlocs("+data+") ... ended3");
			return true;
		}
		
		/**
		* @class
		* @name boBlocs
		* @static
		* @version 1.0
		*/
		"boBlocs".namespace(/** @lends boBlocs.prototype	*/ {
			/**
			 * Recherche à partir de l'élément html indiqué le bloc dans lequel se trouve l'élément.<br/>
			 * Retourne le code du bloc courant.
			 * @param elementHtml un element se trouvant dans le bloc 
			 */
			getBlocCode: function( elementHtml ) {
				var $item = $(elementHtml);
				return $item.closest(".contentBloc").attr('id');
			},
			/**
			 * Retourne un objet représentant les paramétres du bloc ayant pour code.
			 * @param blocCode code du bloc
			 */
			getParametersObject: function(blocCode) {
				var str = boBlocs.getParametersString(blocCode);
				if (str==null) return new Object();
				try {
					return $.evalJSON(str);
				} catch( e) {
					//boError.setTitle("erreur sur lecture json de "+str).show();
					// tant pis si ce n'est pas un objet json ...
					return new Object();
				}
			},
			/**
			 * Retourne la chaîne de caractère stockée comme paramétres du bloc.
			 * @param blocCode code du bloc
			 */
			getParametersString: function(blocCode) {
				var res = "";
				$.ajax({
					url:boState.getContextPath()+'/bov3/dataindex/actions/ajaxReadBloc.jspz',
					async: false,
					cache:false,
					type:'post',
					context: {
						blocCode: blocCode
					},
					data:{
						action:'readParams',
						code:blocCode
					},
					dataType: 'json',
					success: function(data) {
						if (success_ajaxInitBlocs(data)) {
							res = data.params;
						}
					}
				});
				if (debug && typeof(console)!='undefined') console.log("getParametersString("+blocCode+")="+res+"");
				return res;
			},
			/**
			 * Enregistre les paramétres pour un bloc.<br/>
			 * @param blocCode code du bloc
			 * @param params Object json contenant tous les paramétres pour le bloc
			 */
			saveParametersObject: function(blocCode, params) {
				if (typeof(params)=='undefined') return; // Mauvais nombre de parametre et cela va poser des pbs ...
				if (params==null) boBlocs.saveParametersString(blocCode, "");
				else boBlocs.saveParametersString(blocCode, $.toJSON(params));
			},
			/**
			 * Enregistre les paramétres pour un bloc.<br/>
			 * @param blocCode code du bloc
			 * @param params Chaîne de caractères représentant tous les paramétres pour le bloc
			 */
			saveParametersString: function(blocCode, params) {
				if (typeof(params)=='undefined') return; // Mauvais nombre de parametre et cela va poser des pbs ...
				if (debug && typeof(console)!='undefined') console.log("saveParametersString("+blocCode+","+params+") ...");
				$.ajax({
					url:boState.getContextPath()+'/bov3/dataindex/actions/ajaxInitBlocs.jspz', 
					cache:false,
					type:'post',
					context: {
						blocCode: blocCode
					},
					data:{
						redirect: 'json',
						action:'update',
						code:blocCode, 
						params: params
					},
					dataType: 'json',
					success: function(data) {
						if (debug && typeof(console)!='undefined') console.log("saveParametersString("+blocCode+","+params+").success() ...", data);
						if (success_ajaxInitBlocs(data)) boBlocs.reload(blocCode);
						if (debug && typeof(console)!='undefined') console.log("saveParametersString("+blocCode+","+params+").success() ... ended");
					}
				});
//				if (debug && typeof(console)!='undefined') console.log("saveParametersString("+blocCode+","+params+") ... ended");
			},
			/**
			 * Rafraichi l'interface du bloc.<br/>
			 * Affiche ou cache les boutons +/- ...
			 * @param blocCode code du bloc
			 */
			refreshUI: function(blocCode) {
				var $bloc= $("#"+blocCode);
				$bloc.find("div.blocPadd").trigger('refreshUI');
			},
			/**
			 * Recharge complétement le bloc.<br/>
			 * 
			 * @param blocCode code du bloc
			 */
			reload: function(blocCode) {
				var $bloc= $("#"+blocCode);
				if ($bloc==null || $bloc.size()==0) {
					if (debug && typeof(console)!='undefined') console.log("reload("+blocCode+") ... pas de bloc");
					return;
				}
				if (debug && typeof(console)!='undefined') console.log("reload("+blocCode+") ... on a bloc",$bloc);
				$.ajax({
					url: boState.getContextPath()+"/bov3/dataindex/content/ajaxGetBlocContent.jspz",
					async: true,
					context: {
						bloc: $bloc
					},
					data: {
						code: $bloc.attr('id')
					},
					dataType: 'html',
					success: function(data) {
						this.bloc.find("div.blocDivContent").first().html( data );
						this.bloc.find("div.blocPadd").trigger('refreshUI');
					}
				});
				if (debug && typeof(console)!='undefined') console.log("reload("+blocCode+") ... ended");
			}
		});

		
	});
})(jQuery);



