

jQuery.fn.initRadioDropdownList = function() {
    if( this.hasClass("moveForBody") ) {
        this.parents(".filterBoxInner").addClass("moveForBody");
    } else {
        this.parents(".filterBoxInner").removeClass("moveForBody");
    }

	var target = this;
	var title = target.find("h3");
	var titleText = target.find("h3 span");
	var itemsContainer = target.find(".items");
	var items = itemsContainer.find(".item");
	var selectedItem = null;
	var labels = jQuery(".items label", target);
	var radios = jQuery(".items input", target);
	var labelWasClicked = false;
	
	items.bind("keypress",handleKeyPressed);
	
	
	labels
		.bind("mouseover",function(){jQuery(this).addClass("highlight")})
		.bind("mouseout",function(){jQuery(this).removeClass("highlight")});	
	radios.bind("focus",handleRadioFocus);
	radios.bind("blur",handleRadioBlur);
	title.bind("click",handleTitleClick);
	itemsContainer.bind("click",handleItemClick);
	jQuery(document).bind("click." + this.attr("id"),handleDocumentClick);
	
	fixMissingInlineClickHandler();
	initItemsWidth();
	updateTitle();
	updateSelected();
	
	function handleTitleClick(event) {
	    if( target.is(".open") ) {
	        close();
	    } else {
	        open();
	    }
	    return false;
	}
	function handleDocumentClick(event) {
	    var eventTarget = jQuery(event.explicitOriginalTarget)
	    if( eventTarget.is("input") || eventTarget.is("label") ) { return }
	    closeAndTimeUpdate();
	}
	function handleRadioFocus(event) {
	    if( !labelWasClicked ) {
	        open();
	    }
	    labelWasClicked = false;
	}	
	
	function handleKeyPressed(event) { 
	    if(event.which == 13) {
	        event.preventDefault();
	        closeAndTimeUpdate();
	    } 
	}
	
	function handleRadioBlur(event) {
	    if( target.is(".open") ) {
	        closeAndTimeUpdate();
	    }
	    labelWasClicked = false;
	}	
	function handleItemClick(event) {
	    if( "LABEL" == event.target.tagName.toUpperCase() ) { labelWasClicked = true; }
	    updateSelected();
	    if( labelWasClicked ) {
	        closeAndTimeUpdate();
	    }
	}
	function updateSelected() {
	    items.removeClass("selected");
	    selectedItem = items.filter(":has(input:checked)");
	    selectedItem.addClass("selected");
	}	
	function closeAndTimeUpdate() {
		target.addClass("closing");
		window.setTimeout(function(){
		    if( target.is(".closing") ) { 
		        close();
		        updateTitle()
		    }
		},50);
	}	
	function open() {
	    target.addClass("open").removeClass("closing");
	    closeOthers();
	}
	function close() {
	    target.removeClass("open").removeClass("closing");
	    labelWasClicked = false;
	}
	function closeOthers() {
        var allDropdowns = jQuery(".radioDropdownList");
	    allDropdowns.each(function(){
	        var isOtherDropdown = ( this != target.get(0) );
	        if( isOtherDropdown ) {
	            jQuery(this).removeClass("open");
	        }
	    });
	}
	function updateTitle() {
		var selected = jQuery("input:checked",itemsContainer);
		if( selected.size() == 0 ) { return }
		var label = jQuery("label[for="+selected.attr("id")+"]");
		titleText.text(label.text());
	}	
	function initItemsWidth() {
	    var PADDING_FACTOR = 1.3;
	    var PADDING_CONST = 4;
	    var MIN_WIDTH_PX = 270;
	    var maxLength = -1000;
	    labels.each(function() {
	        var len = jQuery(this).text().length;
	        maxLength = Math.max( maxLength, len );
	    });
	    maxLength = Math.round( PADDING_FACTOR * maxLength ) + PADDING_CONST;
	    itemsContainer.css("width",maxLength+"ex");
	    if( itemsContainer.width() < MIN_WIDTH_PX ) {
	        itemsContainer.css("width",MIN_WIDTH_PX+"px");
	    }
	}
	
	function fixMissingInlineClickHandler() {
	    var someItemsHaveHandlers = items.find("input[onclick]").size() > 0;
	    if( someItemsHaveHandlers ) {
	        items.each(function(index){
	            var input = jQuery(this).find("input");
	            if( input.attr("onclick") == null ) {
	                var id = input.attr("id");
	                if( id != null ) {
	                    id = id.replace(/\_/g,'$');
	                    input.bind("click",function(){
	                        window.setTimeout(function(){__doPostBack(id);},0);
	                    });
	                }
	            }
	        });
	    }
	}
}

jQuery.fn.clearRadioDropdownList = function() {
    var target = this;
	var title = target.find("h3");
	//var titleText = target.find("h3 span");
	var itemsContainer = target.find(".items");
	//var items = itemsContainer.find(".item");
	//var selectedItem = null;
	var labels = jQuery(".items label", target);
	var radios = jQuery(".items input", target);

	labels
		.unbind() //"mouseover",function(){jQuery(this).addClass("highlight")})
		.unbind();//"mouseout",function(){jQuery(this).removeClass("highlight")});	
	radios.unbind();//"focus",handleRadioFocus);
	//radios.bind("blur",handleRadioBlur);
	title.unbind();//"click",handleTitleClick);
	itemsContainer.unbind();//"click",handleItemClick);
	jQuery(document).unbind("click." + this.attr("id"));//"click",handleDocumentClick);
	this.empty();

}



