jQuery.fn.accordion = function(options) {
    // options
    var SLIDE_DOWN_SPEED = 'slow';
    var SLIDE_UP_SPEED = 'fast';
    var startClosed = options && options.start && options.start == 'closed';
    var cookie = options && options.cookie ;
    var on = options && options.on && (typeof options.on == 'number' && options.on > 0) ? options.on - 1 : 0;
    return this.each(function() {
        jQuery(this).addClass('accordion'); // use to activate styling
        jQuery(this).find('dd').hide();
        jQuery(this).find('dt').click(function() {
            var current = jQuery(this.parentNode).find('dd:visible');
            var next = jQuery(this).find('+dd');
            if (current[0] != next[0]) {
                current.slideUp(SLIDE_UP_SPEED);
            } 
            var selectedIndex = -1;
            if (next.is(':visible')) {
                next.slideUp(SLIDE_UP_SPEED);
                //if selected item is closed then by the default behavior 
                //of the accordion widget all items are closed
                selectedIndex = -1;
                if ($(this).hasClass("widgetCollapse"))
                {
                    $(this).removeClass("widgetCollapse").addClass("widgetExpand");
                   //alert("Close");
                   // Reset style for non selected items
  		            $("dt.widgetCollapse").removeClass("widgetCollapse").addClass("widgetExpand");
               }
            } else {
                next.slideDown(SLIDE_DOWN_SPEED);
                //Set index
                selectedIndex = $("dt").index(this);
                
                if ($(this).hasClass("widgetExpand"))
                {
                    //Reset style for non selected items
                    $("dt.widgetCollapse").removeClass("widgetCollapse").addClass("widgetExpand");
                    $(this).removeClass("widgetExpand").addClass("widgetCollapse");  		            
                    //alert("Open");
                }
            }
            
            //Set cookie if parameter supplied
            if (cookie != undefined)
            {
                $.cookie(cookie, selectedIndex, {expires: 356});  
            }
        });

         //Apply cookie if parameter supplied
            if (cookie != undefined)
            {
                // Read cookie
                var selectedItem = $.cookie(cookie);

                //Set cookie to default if cookie does not exist
                if (selectedItem == null)
                {
                    $.cookie(cookie, '-1', {expires: 356});  
                    selectedItem= -1;
                }
                
                if (selectedItem == -1)
                {
                    // To allow default behavoir set to false
                    startClosed = false;
                } 
                else
                {
                    //Overide default behavoir
                    startClosed = true;
                    //Apply specific widget index
                    jQuery(this).find('dd:eq(' + selectedItem + ')').show();                  
                }
                //alert("Set to specific index:"+selectedItem);  
                              
        }
        
        if (!startClosed) {
            jQuery(this).find('dd:eq(' + on + ')').slideDown(SLIDE_DOWN_SPEED);
        }
    });
};
