(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>' + $(this).attr('value') + '</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');
                return true;
            });
            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.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"> </td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr"> </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());
            }
        });
    };
    $.fn.jqTransSelect = function () {
        return this.each(function (index) {
            var $select = $(this);
			var $selectID = $(this).attr('id');
            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().addClass($selectID).css({
                zIndex: 10 - index
            });
            $wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>');
            var $ul = $('ul', $wrapper).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.hide();
                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 oSpan = $('span:first', $wrapper);
            $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();
            $('textarea', this).jqTransTextarea();
            if ($('select', this).jqTransSelect().length > 0) {
                jqTransformAddDocumentListener();
            }
            selfForm.bind('reset', function () {
                var action = function () {
                    jqTransformReset(this);
                };
                window.setTimeout(action, 10);
            });
        });
    };
})(jQuery);
$(function () {
	if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
	} else {
    $("form.ageVerifier").jqTransform();
	}
});
