Version 2
    <script type="text/javascript">        
    function checkControlsVisibility(calendarElement){
                if (calendarElement.component.getCurrentYear()==2008){
                    #{rich:element('prevY')}.style.visibility='hidden';
                    if (calendarElement.component.getCurrentMonth()==0){
                        #{rich:element('prevM')}.style.visibility='hidden';
                    }else{
                        #{rich:element('prevM')}.style.visibility='visible';
                    }
                }else{
                    #{rich:element('prevY')}.style.visibility='visible';
                }
            }
    </script>
    
    <rich:calendar value="#{calendarBean.selectedDate}"
    oncurrentdateselect="if (event.rich.date &lt; new Date('1/1/2008')) return false;" 
    oncurrentdateselected="event.rich.component.selectDate(event.rich.date); checkControlsVisibility(this)"
    >
        <f:facet name="header">
            <h:panelGrid columns="5">
                <h:outputText value="{previousYearControl}" id="prevY"/>
                <h:outputText value="{previousMonthControl}" id="prevM"/>
                <h:outputText value="{currentMonthControl}" id="curr"/>
                <h:outputText value="{nextMonthControl}" id="nextM"/>
                <h:outputText value="{nextYearControl}" id="nextY"/>
            </h:panelGrid>
        </f:facet>
    </rich:calendar>
    

     

    simple sample according to forum request

     

    This sample just provides base idea and should be improved with additional dynamic date definition for concrete application cases.And server side validation should be added also because just client side validation could be just workarounded using simple debug tools.