(function ($) {
    var defaultOptions = { preloadImg: true }; var jqTransformImgPreloaded = false; var jqTransformPreloadHoverFocusImg = function (strImgUrl) { 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'); }; 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;
    }; var jqTransformHideSelect = function (oTarget) { var ulVisible = $('.jqTransformSelectWrapper ul:visible'); ulVisible.each(function () { var oSelect = $(this).parents(".jqTransformSelectWrapper:first").find("select").get(0); if (!(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0))) { $(this).hide(); } }); }; var jqTransformCheckExternalClick = function (event) { if ($(event.target).parents('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect($(event.target)); } }; var jqTransformAddDocumentListener = function () { $(document).mousedown(jqTransformCheckExternalClick); }; 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'); } }); }; $.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); }); }; $.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"); }); $.browser.safari && $wrapper.addClass('jqTransformSafari'); $.browser.safari && $input.css('width', $wrapper.width() + 16); this.wrapper = $wrapper;
        });
    }; $.fn.jqTransCheckBox = function () {
        return this.each(function () {
            if ($(this).hasClass('jqTransformHidden')) { return; }
            var $input = $(this); var inputSelf = this; var oLabel = jqTransformGetLabel($input); oLabel && oLabel.click(function () { aLink.trigger('click'); }); var aLink = $('<a href="#" class="jqTransformCheckbox"></a>'); $input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>').parent().prepend(aLink); $input.change(function () { this.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked'); }); aLink.click(function () {
                if ($input.attr('disabled')) { return false; }
                $input.trigger('click').trigger("change"); return false;
            }); this.checked && aLink.addClass('jqTransformChecked');
        });
    }; $.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; }); aLink.click(function () {
                if ($input.attr('disabled')) { return false; }
                $input.trigger('click').trigger('change'); $('input[name="' + $input.attr('name') + '"]', inputSelf.form).not($input).each(function () { $(this).attr('type') == 'radio' && $(this).trigger('change'); }); return false;
            }); inputSelf.checked && aLink.addClass('jqTransformChecked');
        });
    }; $.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); var $wrapper = $select.addClass('jqTransformHidden').wrap('<div class="jqTransformSelectWrapper"></div>').parent().css({ zIndex: 10 - index }); $wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>'); var $ul = $('ul', $wrapper).css('width', $select.width()).hide(); $('option', this).each(function (i) { var oLi = $('<li><a href="#" index="' + i + '">' + $(this).html() + '</a></li>'); $ul.append(oLi); }); $ul.find('a').click(function () {
                $('a.selected', $wrapper).removeClass('selected'); $(this).addClass('selected'); 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.slideUp("fast"); return false;
            }); $('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; var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper).click(function () {
                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;
            }); 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 }); $ul.css({ display: 'block', visibility: 'hidden' }); var iSelectHeight = ($('li', $ul).length) * ($('li:first', $ul).height()); (iSelectHeight < $ul.height()) && $ul.css({ height: iSelectHeight, 'overflow': 'hidden' }); $ul.css({ display: 'none', visibility: 'visible' });
        });
    }; $.fn.jqTransform = function (options) {
        var opt = $.extend({}, defaultOptions, options); return this.each(function () {
            var selfForm = $(this); if (selfForm.hasClass('jqtransformdone')) { return; }
            selfForm.addClass('jqtransformdone'); $('input:submit, input:reset, input[type="button"]', this).jqTransInputButton(); $('input:text, input:password', this).jqTransInputText(); $('input:checkbox', this).jqTransCheckBox(); $('input:radio', this).jqTransRadio(); if ($('select', this).jqTransSelect().length > 0) { jqTransformAddDocumentListener(); }
            selfForm.bind('reset', function () { var action = function () { jqTransformReset(this); }; window.setTimeout(action, 10); });
        });
    };
})(jQuery);
