// _____________ [setSecuritePassword ]_____________
 /**
  * 
  **/
(function($) {
$.fn.setSecuritePassword = function( iNiveau ) {
   
    return this.each(function() {
		iNiveau =Math.max(0, Math.min(10,iNiveau) )
        var $jSecure=$(this);
		$('>div',$jSecure).attr('class',null);
		$('>div:lt('+iNiveau+')',$jSecure).attr('class','secure');
       	if( iNiveau <=3 ) {
			$('>p>em',$jSecure).html('Faible').attr('class','faible');
		}else if( iNiveau <=6 ) {
			$('>p>em',$jSecure).html('Moyen').attr('class','moyen');
		}else{
			$('>p>em',$jSecure).html('Fort').attr('class','fort');
		}
    })

}

})(jQuery);

// _____________ [jCheckBox ]_____________
 /**
  * Change l'aspect des boutons radio/checkbox
  **/
(function($) {
    $.fn.jCheckBox = function(options) {
        var opts = $.extend({}, $.fn.jCheckBox.defaults, options);
        return this.each(function() {
            var $this=$(this);
            var jform = $this.parents("form");
            var jInput =$('input',this);
            
            if( $('input',$this).attr("checked") ) $this.css({backgroundPosition:"0 0"})
            
            //neutralise les labels
            if( jInput.attr('id') !=''){
                $("label[@for='"+jInput.attr('id')+"']").bind('click',function(event){ 
                  event.preventDefault();
                  event.stopPropagation();
                  $this.trigger("click");
                })
            }
            $this.bind('click',function(event){ 
                event.stopPropagation();
                var jInput =$('input',this);
                
               
                if( jInput.attr("type")=="radio"){
					if( ! jInput.attr("checked")==true ) {
						jInput.attr("checked", !jInput.attr("checked") )
                    	var jform = jInput.parents("form");
                    	$("input[@type='radio'][@name='"+jInput.attr('name')+"']",jform).trigger("change");
					}
                }else{
					jInput.attr("checked", !jInput.attr("checked") )
                    jInput.trigger("change");
                }
            })
            $('input',$this).bind('change',function(){ 
                var jInput =$(this);
                if( jInput.attr("checked") ){
                    jInput.parent().css({backgroundPosition:"0 0"})
                }else{
                     jInput.parent().css({backgroundPosition:"-22px 0"})
                }
            })
        })
    }
    $.fn.jCheckBox.defaults = {w:-22}

})(jQuery);
// _____________ [ rubriqueMenu ]_____________
 /**
  * Initie le sous menu verticale des rubriques
  **/
(function($) {
$.fn.jRubriqueMenu = function() {
   
    return this.each(function() {
       $ulMenu = $(this);
	   $('>li',$ulMenu).each( function() { if($(this).children('ul').size()==0 ) $(this).addClass('nochild') })

	   $('>li>a', $ulMenu).click(function(event){
			$this = $(this);		  
			closeAll($ulMenu);
			$this.parent('li').addClass('open');
			if($this.attr('href')=='#') event.preventDefault();
		});
    })
	function closeAll( $ulMenu )
	{
		$('li',$ulMenu).removeClass('open');
	}
}

})(jQuery);

// _____________ [swapImage ]_____________
 /**
  * applique un effet rollover sur les images
  **/
(function($) {
$.fn.swapImage = function() {
   
    return this.each(function() {
        var $jImage=$(this);
        var src = $jImage.attr('src');
        var bgsrc = $jImage.css('background-image');
        if( src ){
            var oversrc = src.substring(0,src.length-4)+'_over'+src.substring(src.length-4,src.length);
            $jImage.bind('mouseover',function(){ $(this).attr({src:oversrc}) }) 
            $jImage.bind('mouseout',function(){ $(this).attr({src:src}) }) 
        }else if( bgsrc ){
            var iDec = 5;
            if( bgsrc.substring(bgsrc.length-2,bgsrc.length) =='")') iDec=6;
            var oversrc = bgsrc.substring(0,bgsrc.length-iDec)+'_over'+bgsrc.substring(bgsrc.length-iDec,bgsrc.length);
            $jImage.bind('mouseover',function(){ $(this).css({backgroundImage:oversrc}) }) 
            $jImage.bind('mouseout',function(){ $(this).css({backgroundImage:bgsrc}) }) 
        }
		if(oversrc){
			var preload = new Image();
			preload.src=oversrc;
		}
    })

}

})(jQuery);


// _____________ [jBounceMenu ]_____________
 /**
  * Initie le sous menu horizontal
  **/
(function($) {
$.fn.jBounceMenu = function(options) {
    jQuery.extend( jQuery.easing,
    {
        easeInOutElastic:function (x, t, b, c, d) {
            var s=1.70158;var p=0;var a=c;
            if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
            if (a < Math.abs(c)) { a=c; var s=p/4; }
            else var s = p/(2*Math.PI) * Math.asin (c/a);
            return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
        }
    })
    
    var opts = $.extend({}, $.fn.jBounceMenu.defaults, options);
    return this.each(function() {
        var $jMenu=$(this);
        $('li>a',$jMenu).bind('mouseover',function(){ 
            var jLi = $(this).parent();
            $(this).parent().siblings('#rollover').show().stop().animate({left:jLi.offset().left  ,width: jLi.width() + 6},1500,'easeInOutElastic') 
        })
         $jMenu.bind('mouseleave',function(){ 
            var jLi =$('li.selected',this);
            if( jLi.size() >0 ){
                $('#rollover',this).stop().animate({left:jLi.offset().left,width:jLi.width() + 6 },1500,'easeInOutElastic') 
            }else{
                $('#rollover',this).stop().hide();
            }
        })
        
       var jLi =$('#sousmenu li.selected');
       if( jLi.size() >0 ) $('#rollover',$jMenu).stop().css({left:jLi.offset().left,width:jLi.width()+6 }) 
       else  $('#rollover',$jMenu).hide();
    
       $(window).bind('resize',function(){ if( jLi.size() >0 ) {$('#rollover',$jMenu).stop().css({left:jLi.offset().left,width:jLi.width()+6 })}   })
       $('#rollover',$jMenu).show();
    })

  $.fn.jBounceMenu.defaults = {
	fixWidth: 6
  };
}

})(jQuery);

// _____________ [jMenu ]_____________
 /**
  * Initie le menu horizontal du header
  **/
(function($) {
    var sMenuOpen;
    $.fn.jMenu = function(options) {
        var opts = $.extend({}, $.fn.jMenu.defaults, options);

        return this.each(function() {
            $this = $(this);
            var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
            sMenuOpen = o.selectedClass;
            var $openMenu = findOpenMenu($this)
            $this.data('openMenu',$openMenu);

            $this.bindIn('mouseleave',onLeave, 400,'jMenuSwap');
            $this.bind('mouseenter',onEnter);
            var dx = 0;
            $openMenu.removeClass(sMenuOpen);
            $this.children('li').each(function() {
                $menu = $(this);
                var mW = $menu.children('ul').width()
                var w = -( mW - $menu.width() ) /2;
                w = Math.max( w, o.xMin - dx );
                w = Math.min( w, o.xMax - dx - mW ) 
                
                $menu.children('ul').css({marginLeft:w})
                $menu.bind('mouseenter',open)
                dx +=  $menu.width();
            })
            $openMenu.addClass(sMenuOpen);
            
            });
    };

    function onEnter() { $(this).unBindIn('jMenuSwap'); }
    function onLeave()
    {
        $this = $(this);
        $this.children('li').removeClass(sMenuOpen);
        $this.data('openMenu').addClass(sMenuOpen)
    }

    // open
    function open()
    {
        $this = $(this);
        getJMenu($this).children('li').removeClass(sMenuOpen);
        $this.addClass(sMenuOpen);
    }
    // close
    function close() { $(this).removeClass(sMenuOpen); }
    // getJMenu
    function getJMenu( $menu ) { return $($menu).parent(); }
    // findOpenMenu
    function findOpenMenu($obj ) {  return $('li.'+sMenuOpen,$obj); };

    // plugin defaults
    $.fn.jMenu.defaults = {
        selectedClass: 'menuselect',
        xMin:0,
        xMax:490
    };
    
})(jQuery);
 // _____________ [bindIn ]_____________
 /**
  * Execute l'action apres x ms
  * 
  * @param options	(Objet) [Optionnel]  {'event','fAction','time','idEvent'}
  * OU
  * @param event	(String)
  * @param fAction	(Function)
  * @param time	(Number)
  * @param idEvent	(String)	[Optionnel]
  **/
(function($) {
  $.fn.bindIn = function(options) {
	// Verifie si l'argument unique est un Object
	if( arguments.length ==1 && typeof(options)!='Object' ){
		debug( arguments[0] ,' Nombre d\'arguments invalide.'  );
		return;
	}
	// Crée un objet d'options, si les arguments sont multuples
	var aArgumentOrder = ['event','fAction','time','idEvent'];
	var ArgOptions = {};
	if( arguments.length > 1 ){
		for (var i = 0; i < arguments.length; i++){
			ArgOptions[ aArgumentOrder[i] ] = arguments[i]
		}
		options = ArgOptions
	}

	// Applique les arguments par défault
	var opts = $.extend({}, $.fn.bindIn.defaults, options);
	
	// parcours les éléments, et les renvoie
	return this.each(function() {
	$this = $(this);
	// Applique les options metas de chacun
	var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
	// bind l'action
	$this.bind( o.event ,
		function(){
			var $scope=$(this);
			var options = o;
            var sEvent = options.idEvent+':'+options.event
            
			if( $scope.data( sEvent ) ) {
				clearInterval( $scope.data(sEvent) );
			}
			$scope.removeData(sEvent);
			$scope.data(sEvent,
				setInterval(function(){
					clearInterval( $scope.data( sEvent ) );
					$scope.removeData( sEvent );
					
					$scope.__fAction = options.fAction;
					$scope.__fAction() ;
					
				}, options.time )
			)
		}
	);
	});
  };
  //
  // private function for debugging
  //
  function debug($obj, msg) {
	if (window.console && window.console.log)
	  window.console.log('bindIn Error on[ ' + $obj +'] :'+msg);
  };
  //
  // plugin defaults
  //
  $.fn.bindIn.defaults = {
	event: 'click',
	fAction:function( ){},
	time:1000,
	idEvent:'delayId'
	
  };
//
// end of closure
//
})(jQuery);


 // _____________ [unBindIn ]_____________
  /**
  * Annule l'éxecution de l'action bindIn 
  * 
  * @param _idEvent	(String) [Optionnel] Identifiant de l'action
  * @param _sTrigger	(String) [Optionnel] event, si non spécifié annulera tous les events standards jquery
  **/
(function($) {
    var aE=['mouseenter','mouseleave','mousedown','mousemove','mouseout','mouseover','mouseup','blur','change','click','dblclick','error','focus','keydown','keypress','keyup','load','resize','scroll','select','submit','unload'];
    $.fn.unBindIn = function(_idEvent,_sTrigger) {
        var options = {idEvent:_idEvent, sTrigger:_sTrigger}
    	var opts = $.extend({}, $.fn.unBindIn.defaults, options);
        return this.each(function() {
            $this = $(this);
        	var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
            if( o.sTrigger!=null ){
                var sEvent = o.idEvent+':'+o.sTrigger
                clearInterval( $this.data( sEvent ) );
            }else{
                for( i in  aE){
                  var sEvent = o.idEvent+':'+ aE[i];
                  clearInterval( $this.data( sEvent ) );
                }
            }
        })
    }
    
  // plugin defaults
  $.fn.unBindIn.defaults = {
	idEvent:'delayId',
    sTrigger:null
  };
})(jQuery);

// _____________ [ getMeta ]_____________
 /**
  * Retoune la valeur d'un champ passé en metadata dans l'attribut de classe ex:
  * <a href="#" class="{ key:value } etc.."/>
  * @param sName	(String) Nom de la clef 
 **/
(function($) {
    var regexp = /\{(\w+ ?: ?'[a-z0-9#\-_\.]*',?)+\}/gi;
    $.fn.getMeta = function(sName) {
        $this= $(this);
        var sC = $this.attr('class');
        var aR = sC.match(regexp);
        if( aR==null ) return '';
        for(var i=0;i<aR.length;i++){
            eval('var oM = '+aR[i]+';');
            if( oM[sName] ) return oM[sName];
        }
    }
})(jQuery);


