if (typeof console == "undefined" || typeof console.log == "undefined") {
	var console = { log: function() {}, error: function(txt){return false} };
}

/** Librairie **/

/** 
	Encode query params url
		1: replace '+' by '%20'
**/
function encodeQueryParams(qp){
	return qp.replace(/\s/g, '%20').replace(/\#/g, '%23');
}



/** Fonctions étendant jQuery **/

$.fn.extend({

	/** Closable permet de fermer une element lorsque l'on clique en dehors.
	 *  Elle est utilisé pour le treenode.
	 *  elementId  	doit corresponde à  l'id de l'élément (sans '#' devant).
	 *  speed		une string contenant la vitesse d'animation (ex: '200', '1000', 'fast', 'slow'), par défaut: 'fast'
	 */
	closable : function(elementId, speed){
		$(document).bind("click", function(event) {
		if($(event.target).parents("#" + elementId).length == 0){
				$("#" + elementId + ":visible").fadeOut((speed) ? speed : "fast");
			}
		});
	},

	/** Affecter la selection unique pour un groupe de checkbox */
	group : function(){$(this).click( function(){if ($(this).attr("checked")) $(this).siblings().attr("checked", !$(this).attr("checked"));});},

	/** Desactive le double post sur un lien, bouton, input **/
	disable :function(){
		if ($(this).is("a")){$(this).click(function(){$(this).unbind("click").click(function(){return false;});return true;});
		} else if ($(this).is("button") || $(this).is("input")){$("button, input").unbind('click');}
	},
	
	/** Detection du browser ie6 **/
	ie6: function(){return ($.browser.msie && $.browser.version == '6.0') ? true : false;},
	
	
	ajaxWait: function(fromTop, opacity){
		var opacity = (opacity == undefined) ? 0.2 : opacity; 
		if(!fromTop){
			fromTop = 0;
		}
		
		if ($(this).attr('ajaxWait')){
			var id = $(this).attr('ajaxWait');
			$('#loader-' + id).each(function(){$(this).remove();});
			$(this).removeAttr('ajaxWait');
			$(this).fadeTo(0, 1, function(){$(this).css({opacity: 'none'})});
			cornify();
			tooltipify();
			selectboxify();
		} else {
			var id_time = new Date().getTime();
			$(this).fadeTo(0, opacity);
			$(this).attr('ajaxWait', id_time);            
		   	
		  	var nElt = $('<div id="loader-' + id_time + '" class="ajax-loader"></div>');
		  	nElt.append('<div class="anim"/><div>');
		  	nElt.append('<div>' + $.fn.ajaxWait.defaults.waitMessage + '</div>');
		  	$('body').append(nElt);
		   	
			var loader  = $('#loader-' + id_time);
			loader.css({
				top	: ($(this).offset().top + ((fromTop != 0) ? fromTop : $(this).height()/2)) - loader.height()/2 + 'px', 
				left: ($(this).offset().left + $(this).width()/2) - loader.width()/2 + 'px', 
				display: 'block'
			});
			loader.fadeTo($.fn.ajaxWait.defaults.animSpeed, 1);    
		
		}
	},
	
	ajaxWaitTabs: function(opacity){
		var opacity = (opacity == undefined) ? 0.2 : opacity; 
		var	fromTop = 0;
		
		if ($(this).attr('ajaxWaitTabs')){
			var id = $(this).attr('ajaxWaitTabs');
			$('#loader-' + id).each(function(){$(this).remove();});
			$(this).removeAttr('ajaxWaitTabs');
			$(this).fadeTo(0, 1, function(){$(this).css({opacity: 'none'})});
			cornify();
			tooltipify();
			selectboxify();
		} else {
			var id_time = new Date().getTime();
			$(this).fadeTo(0, opacity);
			$(this).attr('ajaxWaitTabs', id_time);            
		   	
		  	var nElt = $('<div id="loader-' + id_time + '" class="ajax-loader-tabs"></div>');
		  	nElt.append('<div class="anim"/><div>');
		  	nElt.append('<div>' + $.fn.ajaxWaitTabs.defaults.waitMessage + '</div>');
		  	$('body').append(nElt);
		   	
			var loader  = $('#loader-' + id_time);
			loader.css({
				top	: ($(this).offset().top + ((fromTop != 0) ? fromTop : $(this).height()/2)) - loader.height()/2 + 'px', 
				left: ($(this).offset().left + $(this).width()/2) - loader.width()/2 + 'px', 
				display: 'block'
			});
			loader.fadeTo($.fn.ajaxWaitTabs.defaults.animSpeed, 1);    
		
		}
	},
	
		ajaxWaitLayer: function(fromTop, opacity){
		var opacity = (opacity == undefined) ? 0.2 : opacity; 
		if(!fromTop){
			fromTop = 0;
		}
		
		if ($(this).attr('ajaxWaitLayer')){
			var id = $(this).attr('ajaxWaitLayer');
			$('#loader-' + id).each(function(){$(this).remove();});
			$(this).removeAttr('ajaxWaitLayer');
			$(this).fadeTo(0, 1, function(){$(this).css({opacity: 'none'})});
			cornify();
			tooltipify();
			selectboxify();
		} else {
			var id_time = new Date().getTime();
			$(this).fadeTo(0, opacity);
			$(this).attr('ajaxWaitLayer', id_time);            
		   	
		  	var nElt = $('<div id="loader-' + id_time + '" class="ajax-loader-layer"></div>');
		  	nElt.append('<div class="anim"/><div>');
		  	nElt.append('<div>' + $.fn.ajaxWaitLayer.defaults.waitMessage + '</div>');
		  	$('body').append(nElt);
		   	
			var loader  = $('#loader-' + id_time);
			loader.css({
				top	: ($(this).offset().top + ((fromTop != 0) ? fromTop : $(this).height()/2)) - loader.height()/2 + 'px', 
				left: ($(this).offset().left + $(this).width()/2) - loader.width()/2 + 'px', 
				display: 'block'
			});
			loader.fadeTo($.fn.ajaxWaitLayer.defaults.animSpeed, 1);    
		
		}
	},
	
	ajaxWaitSearch: function(fromTop, opacity){
		var opacity = (opacity == undefined) ? 0.2 : opacity; 
		var fromTop = 0;

		
		if ($(this).attr('ajaxWaitSearch')){
			var id = $(this).attr('ajaxWaitSearch');
			$('#loader-' + id).each(function(){$(this).remove();});
			$(this).removeAttr('ajaxWaitSearch');
			$(this).fadeTo(0, 1, function(){$(this).css({opacity: 'none'})});
			cornify();
			tooltipify();
			selectboxify();
		} else {
			var id_time = new Date().getTime();
			$(this).fadeTo(0, opacity);
			$(this).attr('ajaxWaitSearch', id_time);            
		   	
		  	var nElt = $('<div id="loader-' + id_time + '" class="ajax-loader-search"></div>');
		  	nElt.append('<h1>' + $.fn.ajaxWaitSearch.defaults.search + '</h1>');
		  	nElt.append('<div class="separator"/><div>');
		  	nElt.append('<div class="anim"/><div>');
		  	nElt.append('<div><ul class="fleche"><li style="padding-left:12px">' + $.fn.ajaxWaitSearch.defaults.waitMessage + '</li></ul></div>');
		  	$('body').append(nElt);
		   	
			var loader  = $('#loader-' + id_time);
			loader.css({
				top	: ($(this).offset().top + ((fromTop != 0) ? fromTop : $(this).height()/2)) - loader.height()/2 + 'px', 
				left: ($(this).offset().left + $(this).width()/2) - loader.width()/2 + 'px', 
				display: 'block'
			});
			loader.fadeTo($.fn.ajaxWaitSearch.defaults.animSpeed, 1);    
		
		}
	}

});

$.fn.ajaxWait.defaults = {waitMessage : 'Loading data',animSpeed	: 'slow'};
$.fn.ajaxWaitLayer.defaults = {waitMessage : 'Loading data',animSpeed	: 'slow'};
$.fn.ajaxWaitTabs.defaults = {waitMessage : 'Loading data', search : 'Loading...',animSpeed	: 'slow'};
$.fn.ajaxWaitSearch.defaults = {waitMessage : 'Loading data',animSpeed	: 'slow'};

