jQuery Form Transform Problem

jQuery Form Transform Problem

I am using a jQuery plugin to change the appearance of certain parts of my form, I believe that the plugin name is formTransform. When applying the jQuery to drop down list menus, the plugin works fine for two of them but then does not show the third one...it is almost as if there is a limit to how many drop down lists the plugin can apply to. The same thing happens for radio and check box groups.

I have looked at the code but can not see what would be causing this to happen. Any help would be appreciated. Thanks.

  1. (function($){
        var defaultOptions = {preloadImg:true};
        var jqTransformImgPreloaded = false;

        var jqTransformPreloadHoverFocusImg = function(strImgUrl) {
            //guillemets to remove for ie
            strImgUrl = strImgUrl.replace(/^url\((.*)\)/,'$1').replace(/^\"(.*)\"$/,'$1');
            var imgHover = new Image();
            imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-hover.$1');
            var imgFocus = new Image();
            imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-focus.$1');               
        };

    /******************************************************LABELS******************************************************/

        var jqTransformGetLabel = function(objfield){
            var selfForm = $(objfield.get(0).form);
            var oLabel = objfield.next();
            if(!oLabel.is('label')) {
                oLabel = objfield.prev();
                if(oLabel.is('label')){
                    var inputname = objfield.attr('id');
                    if(inputname){
                        oLabel = selfForm.find('label[for="'+inputname+'"]');
                    }
                }
            }
           
            if(oLabel.is('label')){return oLabel.css('cursor','pointer');}
            return false;
        };
       
        /* Hide all open selects */
        var jqTransformHideSelect = function(oTarget){
            var ulVisible = $('.jqTransformSelectWrapper ul:visible');
            ulVisible.each(function(){
                var oSelect = $(this).parents(".jqTransformSelectWrapper:first").find("select").get(0);
                //do not hide if click on the label object associated to the select
                if( !(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0)) ){$(this).hide();}
            });
        };
        /* Check for an external click */
        var jqTransformCheckExternalClick = function(event) {
            if ($(event.target).parents('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect($(event.target)); }
        };

        /* Apply document listener */
        var jqTransformAddDocumentListener = function (){
            $(document).mousedown(jqTransformCheckExternalClick);
        };   
               
        /* Add a new handler for the reset action */
        var jqTransformReset = function(f){
            var sel;
            $('.jqTransformSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function(){$('a:eq('+ sel +')', this).click();});});
            $('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked');
            $('input:checkbox, input:radio', f).each(function(){if(this.checked){$('a', $(this).parent()).addClass('jqTransformChecked');}});
        };


    /******************************************************BUTTONS******************************************************/

        $.fn.jqTransInputButton = function(){
            return this.each(function(){
                var newBtn = $('<button id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +' jqTransformButton"><span><span>'+ $(this).attr('value') +'</span></span>')
                    .hover(function(){newBtn.addClass('jqTransformButton_hover');},function(){newBtn.removeClass('jqTransformButton_hover')})
                    .mousedown(function(){newBtn.addClass('jqTransformButton_click')})
                    .mouseup(function(){newBtn.removeClass('jqTransformButton_click')})
                ;
                $(this).replaceWith(newBtn);
            });
        };
       
    /******************************************************TEXT FIELDS******************************************************/

        $.fn.jqTransInputText = function(){
            return this.each(function(){
                var $input = $(this);
       
                if($input.hasClass('jqtranformdone') || !$input.is('input')) {return;}
                $input.addClass('jqtranformdone');
       
                var oLabel = jqTransformGetLabel($(this));
                oLabel && oLabel.bind('click',function(){$input.focus();});
       
                var inputSize=$input.width();
                if($input.attr('size')){
                    inputSize = $input.attr('size')*10;
                    $input.css('width',inputSize);
                }
               
                $input.addClass("jqTransformInput").wrap('<div class="jqTransformInputWrapper"><div class="jqTransformInputInner"><div></div></div></div>');
                var $wrapper = $input.parent().parent().parent();
                $wrapper.css("width", inputSize+10);
                $input
                    .focus(function(){$wrapper.addClass("jqTransformInputWrapper_focus");})
                    .blur(function(){$wrapper.removeClass("jqTransformInputWrapper_focus");})
                    .hover(function(){$wrapper.addClass("jqTransformInputWrapper_hover");},function(){$wrapper.removeClass("jqTransformInputWrapper_hover");})
                ;
       
                /* If this is safari we need to add an extra class */
                $.browser.safari && $wrapper.addClass('jqTransformSafari');
                $.browser.safari && $input.css('width',$wrapper.width()+16);
                this.wrapper = $wrapper;
               
            });
        };
       
    /******************************************************CHECK BOXES******************************************************/
       
        $.fn.jqTransCheckBox = function(){
            return this.each(function(){
                if($(this).hasClass('jqTransformHidden')) {return;}

                var $input = $(this);
                var inputSelf = this;

                //set the click on the label
                var oLabel=jqTransformGetLabel($input);
                oLabel && oLabel.click(function(){aLink.trigger('click');});
               
                var aLink = $('<a href="#" class="jqTransformCheckbox"></a>');
                //wrap and add the link
                $input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>').parent().prepend(aLink);
                //on change, change the class of the link
                $input.change(function(){
                    this.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
                    return true;
                });
                // Click Handler, trigger the click and change event on the input
                aLink.click(function(){
                    //do nothing if the original input is disabled
                    if($input.attr('disabled')){return false;}
                    //trigger the envents on the input object
                    $input.trigger('click').trigger("change");   
                    return false;
                });

                // set the default state
                this.checked && aLink.addClass('jqTransformChecked');       
            });
        };

    /******************************************************RADIO BUTTONS******************************************************/
       
        $.fn.jqTransRadio = function(){
            return this.each(function(){
                if($(this).hasClass('jqTransformHidden')) {return;}

                var $input = $(this);
                var inputSelf = this;
                   
                oLabel = jqTransformGetLabel($input);
                oLabel && oLabel.click(function(){aLink.trigger('click');});
       
                var aLink = $('<a href="#" class="jqTransformRadio" rel="'+ this.name +'"></a>');
                $input.addClass('jqTransformHidden').wrap('<span class="jqTransformRadioWrapper"></span>').parent().prepend(aLink);
               
                $input.change(function(){
                    inputSelf.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
                    return true;
                });
                // Click Handler
                aLink.click(function(){
                    if($input.attr('disabled')){return false;}
                    $input.trigger('click').trigger('change');
       
                    // uncheck all others of same name input radio elements
                    $('input[name="'+$input.attr('name')+'"]',inputSelf.form).not($input).each(function(){
                        $(this).attr('type')=='radio' && $(this).trigger('change');
                    });
       
                    return false;                   
                });
                // set the default state
                inputSelf.checked && aLink.addClass('jqTransformChecked');
            });
        };
       
    /******************************************************TEXT AREA******************************************************/
       
        $.fn.jqTransTextarea = function(){
            return this.each(function(){
                var textarea = $(this);
       
                if(textarea.hasClass('jqtransformdone')) {return;}
                textarea.addClass('jqtransformdone');
       
                oLabel = jqTransformGetLabel(textarea);
                oLabel && oLabel.click(function(){textarea.focus();});
               
                var strTable = '<table cellspacing="0" cellpadding="0" border="0" class="jqTransformTextarea">';
                strTable +='<tr><td id="jqTransformTextarea-tl"></td><td id="jqTransformTextarea-tm"></td><td id="jqTransformTextarea-tr"></td></tr>';
                strTable +='<tr><td id="jqTransformTextarea-ml">&nbsp;</td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr">&nbsp;</td></tr>';   
                strTable +='<tr><td id="jqTransformTextarea-bl"></td><td id="jqTransformTextarea-bm"></td><td id="jqTransformTextarea-br"></td></tr>';
                strTable +='</table>';                   
                var oTable = $(strTable)
                        .insertAfter(textarea)
                        .hover(function(){
                            !oTable.hasClass('jqTransformTextarea-focus') && oTable.addClass('jqTransformTextarea-hover');
                        },function(){
                            oTable.removeClass('jqTransformTextarea-hover');                   
                        })
                    ;
                   
                textarea
                    .focus(function(){oTable.removeClass('jqTransformTextarea-hover').addClass('jqTransformTextarea-focus');})
                    .blur(function(){oTable.removeClass('jqTransformTextarea-focus');})
                    .appendTo($('#jqTransformTextarea-mm div',oTable))
                ;
                this.oTable = oTable;
                if($.browser.safari){
                    $('#jqTransformTextarea-mm',oTable)
                        .addClass('jqTransformSafariTextarea')
                        .find('div')
                            .css('height',textarea.height())
                            .css('width',textarea.width())
                    ;
                }
            });
        };

    /******************************************************SELECT FIELDS******************************************************/
       
        $.fn.jqTransSelect = function(){
            return this.each(function(index){
                var $select = $(this);
               
                if($select.hasClass('jqTransformHidden')) {return;}
                if($select.attr('multiple')) {return;}
           
                var oLabel  =  jqTransformGetLabel($select);
                /* First thing we do is Wrap it */
                var $wrapper = $select
                    .addClass('jqTransformHidden')
                    .wrap('<div class="jqTransformSelectWrapper"></div>')
                    .parent()
                    .css({zIndex: 1-index})
                ;
               
                /* Now add the html for the select */
                $wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>');
                var $ul = $('ul', $wrapper).css('width',$select.width()).hide();
                /* Now we add the options */
                $('option', this).each(function(i){
                    var oLi = $('<li><a href="#" index="'+ i +'">'+ $(this).html() +'</a></li>');
                    $ul.append(oLi);
                });
               
                /* Add click handler to the a */
                $ul.find('a').click(function(){
               
                        $('a.selected', $wrapper).removeClass('selected');
                        $(this).addClass('selected');   
                        /* Fire the onchange event */
                        if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) { $select[0].selectedIndex = $(this).attr('index'); $select[0].onchange(); }
                        $select[0].selectedIndex = $(this).attr('index');
                        $('span:eq(0)', $wrapper).html($(this).html());
                        $ul.fadeOut("fast");
                        return false;
                });
                /* Set the default */
                $('a:eq('+ this.selectedIndex +')', $ul).click();
                $('span:first', $wrapper).click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
                oLabel && oLabel.click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
                this.oLabel = oLabel;
               
                /* Apply the click handler to the Open */
                var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper)
                    .click(function(){
                        //Check if box is already open to still allow toggle, but close all other selects
                        if( $ul.css('display') == 'none' ) {jqTransformHideSelect();}
                        if($select.attr('disabled')){return false;}

                        $ul.slideToggle('fast', function(){                   
                            var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
                            $ul.animate({scrollTop: offSet});
                        });
                        return false;
                    })
                ;

                // Set the new width
                var iSelectWidth = $select.outerWidth();
                var oSpan = $('span:first',$wrapper);
                var newWidth = (iSelectWidth > oSpan.innerWidth())?iSelectWidth+oLinkOpen.outerWidth():$wrapper.width();
                $wrapper.css('width',newWidth);
                $ul.css('width',newWidth-2);
                oSpan.css({width:iSelectWidth});
           
                // Calculate the height if necessary, less elements that the default height
                //show the ul to calculate the block, if ul is not displayed li height value is 0
                $ul.css({display:'block',visibility:'hidden'});
                var iSelectHeight = ($('li',$ul).length)*($('li:first',$ul).height());//+1 else bug ff
                (iSelectHeight < $ul.height()) && $ul.css({height:iSelectHeight,'overflow':'hidden'});//hidden else bug with ff
                $ul.css({display:'none',visibility:'visible'});
               
            });
        };
        $.fn.jqTransform = function(options){
            var opt = $.extend({},defaultOptions,options);
           
            /* each form */
             return this.each(function(){
                var selfForm = $(this);
                if(selfForm.hasClass('jqtransformdone')) {return;}
                selfForm.addClass('jqtransformdone');
               
                //$('input:submit, input:reset, input[type="button"]', this).jqTransInputButton(); //Dont need to use this       
                //$('input:text, input:password', this).jqTransInputText(); //Dont need to use this       
                $('input:checkbox', this).jqTransCheckBox();
                $('input:radio', this).jqTransRadio();
                //$('textarea', this).jqTransTextarea(); //Dont need to use this
               
                if( $('select', this).jqTransSelect().length > 0 ){jqTransformAddDocumentListener();}
                selfForm.bind('reset',function(){var action = function(){jqTransformReset(this);}; window.setTimeout(action, 10);});
               
                //preloading dont needed anymore since normal, focus and hover image are the same one
                /*if(opt.preloadImg && !jqTransformImgPreloaded){
                    jqTransformImgPreloaded = true;
                    var oInputText = $('input:text:first', selfForm);
                    if(oInputText.length > 0){
                        //pour ie on eleve les ""
                        var strWrapperImgUrl = oInputText.get(0).wrapper.css('background-image');
                        jqTransformPreloadHoverFocusImg(strWrapperImgUrl);                   
                        var strInnerImgUrl = $('div.jqTransformInputInner',$(oInputText.get(0).wrapper)).css('background-image');
                        jqTransformPreloadHoverFocusImg(strInnerImgUrl);
                    }
                   
                    var oTextarea = $('textarea',selfForm);
                    if(oTextarea.length > 0){
                        var oTable = oTextarea.get(0).oTable;
                        $('td',oTable).each(function(){
                            var strImgBack = $(this).css('background-image');
                            jqTransformPreloadHoverFocusImg(strImgBack);
                        });
                    }
                }*/
           
            });
                   
        };//End of plugin

    })(jQuery);