/* @hudson_ */
(
    function($)
    {
        $.fn.customBox = function(settings)
        {
            var config =
            {
                extraClasses    : null,
                excludeClasses  : null,
                swapID          : false,
                forceDimensions : true,
                controls        :
                {
                    active  : 'active'
                }
            };
            
            if(settings)$.extend(true, config, settings);
            
            return this.each
            (
                function(counter)
                {
                    var target = $(this),
                    props      =
                    {
                        width  : target.width(),
                        height : target.height(),
                        id     : target.attr('id'),
                        classes: target.attr('class')
                    },
                    replacement =
                        $(document.createElement('label'))
                            .addClass(props.classes)
                            .css({'margin-left': target.css('margin-left')}),
                    clone = target.clone().addClass('transparent').appendTo(replacement);
                    
                    if(config.extraClasses != null)
                        replacement.addClass(config.extraClasses);

                    if(config.excludeClasses !=null)
                        replacement.removeClass(config.excludeClasses);

                    if(config.keepID && props.id != '')
                    {
                        replacement.attr('id',props.id);
                        clone.removeAttr('id');
                    }
                    

                    if(config.forceDimensions)
                        replacement.css({width:target.css('width'), height: target.css('height')});

                    switch(true)
                    {
                        case this.tagName.toLowerCase() == 'select':
                        
                            //IE6: não é possível tornar um select box transparente
                            if($.browser.msie && $.browser.version < 7)return;
                            
                            var label = $(document.createElement('span'))
                                        .addClass('holder')
                                        .prependTo(replacement)
                                        .html(this.options[this.selectedIndex].text);
                            
                            //Select boxes personalizados
                            clone.bind
                            (
                                    'change keypress keyup',
                                    function()
                                    {
                                            $('span.holder', this.parentNode)
                                                .html(this.options[this.selectedIndex].text);
                                    }
                            )
                            .bind('focus',function()
                            {
                                $(this.parentNode)
                                    .addClass(config.controls.active);
                            })
                            .bind('blur',function()
                            {
                                $(this.parentNode)
                                    .removeClass(config.controls.active);
                            });

                        break;
                    
                        case this.getAttribute('type').toLowerCase() == 'radio' ||
                             this.getAttribute('type').toLowerCase() == 'checkbox':
                        
                           if(this.checked)replacement.addClass('checked');

                           //Radio / checkboxes personalizados
                           clone.bind
                           (
                                'click',
                                function(e)
                                {
                                    $(this.form.elements[this.name]).each(function(){$(this.parentNode).removeClass('active checked');});
                                    $(this.parentNode).addClass('checked');
                                }
                           ).bind
                           (
                                'focus',
                                function(e)
                                {
                                    $(this.parentNode).addClass('active');
                                }
                           ).bind
                           (
                                'blur',
                                function(e)
                                {
                                    $(this.parentNode).removeClass('active');
                                }
                           );
                        
                        break;
                    }
                    
                    target.replaceWith(replacement);
                    
                }
            );
        }
    }
)(jQuery);
