
;(function(){
    
    var ie  = !!(document.uniqueID);
    var ie7=!!( (ie7 = document.documentElement.currentStyle) && (typeof(ie7['msInterpolationMode'])!='undefined') );
    
    var $E = YAHOO.util.Event;
    var $D = YAHOO.util.Dom;
    var p_aHoveredElements = [];
    var p_aClickedElements = [];
    var p_nMouseDownTime ;

    var getButtonWrapper = function(e){
        
        var dEl = $E.getTarget(e);

        switch (dEl.tagName ){
            
            case 'A':;
            case 'INPUT':;
            break;

            default:;
            return null;
            break;
        }


        var s = $D.getStyle( dEl , 'listStyleImage' );
       
        if( s.indexOf('uihtmlbutton')<0) return null;
        
        if( ie ){
            dEl.hideFocus = 'true';
        }

        var dWrapper = dEl.parentNode.parentNode;
        return dWrapper;


    }


    var onMouseEnter = function(e){

        var dWrapper = getButtonWrapper(e);
        if(!dWrapper) return ;

        var n = p_aHoveredElements.length ; 
        if( n && p_aHoveredElements[ n-1 ] == dWrapper ) return true;
        
       
        p_aHoveredElements[ n  ]  = dWrapper ;
        $D.addClass( dWrapper , 'gui-btn-hover');

    };

    var onMouseLeave = function(e){
        
        var dWrapper = getButtonWrapper(e);
        if(!dWrapper) return ;
        
        if( !p_aHoveredElements.length ) return true; 
        var d,i;
        for(i=0;d=p_aHoveredElements[i];i++){
            $D.removeClass(d , 'gui-btn-hover');
        };
        p_aHoveredElements = [];
    };

    var onMouseDown = function(e){
       
        var dWrapper = getButtonWrapper(e);
        if(!dWrapper) return ;
        var n = p_aClickedElements.length ; 
        if( n && p_aClickedElements[ n-1 ] == dWrapper ) return true;
        p_aClickedElements[ n ] = dWrapper;
        $D.addClass( dWrapper , 'gui-btn-click' );
        p_nMouseDownTime = new Date();
        

    };

    var onMouseUp = function(e){

       
        if(  p_nMouseDownTime  ){
             //fix Safari 2, it seems fire both onMouseDown and onMouseUp quickly when only onMouseDown is actually triggerred.
             var n =  new Date() -  p_nMouseDownTime ; 
             if( n  < 60 ) {
                 return; 
             };
        };
       


        var d,i;
        for(i=0;d=p_aClickedElements[i];i++){
            $D.removeClass(d , 'gui-btn-click');
        };
        p_aClickedElements = [];
        p_nMouseDownTime = null;
        
    };


    if( ie && !ie7){
        //patch :hover selector for IE6
        $E.on(document, 'mouseover',onMouseEnter);
        $E.on(document, 'mouseout',onMouseLeave);
    }else{
        onMouseEnter = onMouseLeave = null;
    }

    $E.on(document, 'mousedown',onMouseDown);
    $E.on(document, 'mouseup',onMouseUp);




})();
