jQuery.fn.expanded = function(buttonNames,expandedCallBack) {
	var settings = {
		opened  :"c-opened",
		opened_hover:"c-opened-hover",
		closed :"c-closed",
		closed_hover:"c-closed-hover"
    };
	
    if(buttonNames) {
       jQuery.extend(settings, buttonNames);
    };	
    
	
	var button =$(this);
	var parentContainer=button.parent();
	var openCloseContainer =$(parentContainer).next();
	
	
	var event ={
		changeBackGroud:function(isOn){
			if (button.hasClass(settings.opened)){
				if (isOn)
				  button.addClass(settings.opened_hover);
				else
				  button.removeClass(settings.opened_hover);
			}
			else
			if (button.hasClass(settings.closed)){
				if (isOn)
				  button.addClass(settings.closed_hover);
				else
				  button.removeClass(settings.closed_hover);
			}
		},	
		taggetHide:function(){
		    button.removeClass(settings.opened);
		    button.removeClass(settings.opened_hover);
		    button.addClass(settings.closed);
		    openCloseContainer.hide();
		},
		
		taggetShow:function(){
		    button.removeClass(settings.closed);
		    button.removeClass(settings.closed_hover);
		    button.addClass(settings.opened);    
		    openCloseContainer.show();			
		    if (typeof expandedCallBack =='function'){
		    	expandedCallBack(button,openCloseContainer);
		    }
		},	
		
		
		ShowOrHideTragget:function(){
			if (button.hasClass(settings.opened)){
			    return event.taggetHide();
			}			
			else 
			if (button.hasClass(settings.closed)){
				return event.taggetShow();
			}
		}
	}
	
	function bindMouseEvent(){
	    button
		        .mouseover(function(){
		        	event.changeBackGroud(true);
		        	return button;
	            })
	            .mouseout(function(){
	                event.changeBackGroud(false);
	                return button;
	            });	
	    button.click(function(){
	    	event.ShowOrHideTragget();	
	    });		
	}	
	bindMouseEvent();
	
	var initShow =button.hasClass(settings.opened);
	if (!initShow)
		event.taggetHide(button);
	else
	    event.taggetShow(button);
	
}
