jQuery.log = function (a) {
    if (window.console) {
        console.log(a)
    } else {}
};
(function ($) {
    $.fn.livingElements = function (g, h) {
        var j = {
            background: '#33CCFF',
            easing: 'swing',
            delay: 0,
            disableIE6: false,
            startOnLoad: false,
            triggerElementSelector: null,
            triggerElementStartEvent: 'focus',
            triggerElementStopEvent: 'blur',
            preAnimationStartOpacity: null,
            preAnimationDuration: 500,
            mainAnimationFade: true,
            mainAnimationStartOpacity: 1,
            mainAnimationEndOpacity: 0,
            mainAnimationScrollDirection: 'horizontal',
            mainAnimationStartBackgroundPositionX: 0,
            mainAnimationStartBackgroundPositionY: 0,
            mainAnimationEndBackgroundPositionX: null,
            mainAnimationEndBackgroundPositionY: null,
            mainAnimationContinous: true,
            mainAnimationDuration: 1000,
            mainAnimationSoftEndDuration: null,
            postAnimationEndOpacity: null,
            postAnimationDuration: 500
        };
        if (h) $.extend(j, h);
        j.averageOpacity = (j.mainAnimationStartOpacity + j.mainAnimationEndOpacity) / 2;
        var k;
        var l = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 5.5") != -1);
        var m = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);
        if ((l || m) && j.disableIE6) return this;
        this.each(function () {
            var d = {
                elementWidth: $(this).outerWidth(),
                elementHeight: $(this).outerHeight(),
                mainAnimationStartBackgroundPositionX: j.mainAnimationStartBackgroundPositionX,
                mainAnimationStartBackgroundPositionY: j.mainAnimationStartBackgroundPositionY
            };
            if (j.mainAnimationEndBackgroundPositionX === null) {
                if (j.mainAnimationScrollDirection == 'horizontal') d.mainAnimationEndBackgroundPositionX = d.elementWidth;
                else d.mainAnimationEndBackgroundPositionX = d.mainAnimationStartBackgroundPositionX
            } else d.mainAnimationEndBackgroundPositionX = j.mainAnimationEndBackgroundPositionX;
            if (j.mainAnimationEndBackgroundPositionY === null) if (j.mainAnimationScrollDirection == 'horizontal') d.mainAnimationEndBackgroundPositionY = d.mainAnimationStartBackgroundPositionY;
            else d.mainAnimationEndBackgroundPositionY = d.elementHeight;
            else d.mainAnimationEndBackgroundPositionY = j.mainAnimationEndBackgroundPositionY;
            d.averageBackgroundPositionX = (d.mainAnimationStartBackgroundPositionX + d.mainAnimationEndBackgroundPositionX) / 2;
            d.averageBackgroundPositionY = (d.mainAnimationStartBackgroundPositionY + d.mainAnimationEndBackgroundPositionY) / 2;
            if ($(this).css('position') == 'static') $(this).css('position', 'relative');
            $(this).children().css('position', 'absolute');
            var e = $(this).clone().empty().css('position', 'absolute').css('background', 'url(' + g + ')').css('width', d.elementWidth).css('height', d.elementHeight).attr('class', '').prependTo(this);
            var f = e.clone().css('background', j.background).css('backgroundPosition', d.mainAnimationStartBackgroundPositionX + 'px ' + d.mainAnimationStartBackgroundPositionY + 'px').prependTo(this);
            if (j.preAnimationStartOpacity !== null) f.css('opacity', j.preAnimationStartOpacity);
            else f.css('opacity', j.mainAnimationStartOpacity);
            if (l || m) {
                $.each([e], function (i, a) {
                    var b = a.css('background-image');
                    if (b.indexOf(".png") != -1) {
                        var c = b.split('url("')[1].split('")')[0];
                        a.css('background-image', 'none');
                        a.get(0).runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/input-mask.png',sizingMethod='scale')"
                    }
                })
            }
            if (j.triggerElementSelector == null || j.startOnLoad) {
                startAnimation(f, j, d)
            }
            if (j.triggerElementSelector != null) {
                $(this).children(j.triggerElementSelector).focus(function () {
                    if (j.triggerElementStartEvent == 'focus') startAnimation(f, j, d);
                    else if (j.triggerElementStopEvent == 'focus') endAnimation(f, j, d)
                });
                $(this).children(j.triggerElementSelector).blur(function () {
                    if (j.triggerElementStartEvent == 'blur') startAnimation(f, j, d);
                    else if (j.triggerElementStopEvent == 'blur') endAnimation(f, j, d)
                })
            }
        });
        return this;

        function startAnimation(a, b, c) {
            if (b.preAnimationStartOpacity !== null) {
                k = window.setTimeout(function () {
                    $.log(b.mainAnimationStartOpacity);
                    a.stop(true).animate({
                        'opacity': b.mainAnimationStartOpacity
                    }, b.preAnimationDuration, b.easing)
                }, b.delay)
            }
            k = window.setTimeout(function () {
                _animateMask(a, b, c)
            }, b.preAnimationDuration + b.delay)
        }
        function endAnimation(a, b, c) {
            window.clearTimeout(k);
            if (b.mainAnimationFade) {
                if (b.mainAnimationSoftEndDuration != null) a.stop(true).animate({
                    'opacity': b.mainAnimationStartOpacity
                }, b.mainAnimationSoftEndDuration, b.easing);
                else a.stop(true).css('opacity', b.mainAnimationStartOpacity)
            } else {
                if (b.mainAnimationSoftEndDuration != null) {
                    a.stop(true).animate({
                        backgroundPosition: '(' + c.mainAnimationStartBackgroundPositionX + 'px ' + c.mainAnimationStartBackgroundPositionY + 'px)'
                    }, b.mainAnimationSoftEndDuration, b.easing)
                }
            }
            if (b.postAnimationEndOpacity != null) {
                k = window.setTimeout(function () {
                    a.stop(true).animate({
                        'opacity': b.postAnimationEndOpacity
                    }, b.postAnimationDuration, b.easing);
                    window.setTimeout(function () {
                        a.stop(true).css('backgroundPosition', c.mainAnimationStartBackgroundPositionX + 'px ' + c.mainAnimationStartBackgroundPositionY + 'px')
                    }, b.postAnimationDuration)
                }, b.mainAnimationSoftEndDuration)
            }
        }
        function _animateMask(a, b, c) {
            $.log($(a).css('backgroundPosition'));
            if (b.mainAnimationFade) {
                if ((b.mainAnimationStartOpacity <= b.mainAnimationEndOpacity && parseFloat(a.css('opacity')) > b.averageOpacity) || (b.mainAnimationStartOpacity >= b.mainAnimationEndOpacity && parseFloat(a.css('opacity')) < b.averageOpacity)) {
                    a.stop(true).animate({
                        'opacity': b.mainAnimationStartOpacity
                    }, b.mainAnimationDuration, b.easing)
                } else {
                    a.stop(true).animate({
                        'opacity': b.mainAnimationEndOpacity
                    }, b.mainAnimationDuration, b.easing)
                }
            } else {
                var d;
                var e;
                if ($(a).css('backgroundPosition') == '0% 0%') {
                    d = 0;
                    e = 0
                } else {
                    var f = $(a).css('backgroundPosition').split('px');
                    d = parseFloat(f[0]);
                    e = parseFloat(f[1])
                }
                if ((c.mainAnimationEndBackgroundPositionX >= c.mainAnimationStartBackgroundPositionX && d > c.averageBackgroundPositionX) || (c.mainAnimationEndBackgroundPositionX <= c.mainAnimationStartBackgroundPositionX && d < c.averageBackgroundPositionX) || (c.mainAnimationEndBackgroundPositionY >= c.mainAnimationStartBackgroundPositionY && e > c.averageBackgroundPositionY) || (c.mainAnimationEndBackgroundPositionY <= c.mainAnimationStartBackgroundPositionY && e < c.averageBackgroundPositionY)) {
                    $.log(c.mainAnimationStartBackgroundPositionX + ' ' + c.mainAnimationStartBackgroundPositionY + ' ' + c.mainAnimationEndBackgroundPositionX + ' ' + c.mainAnimationEndBackgroundPositionY);
                    $(a).stop(true).animate({
                        backgroundPosition: '(' + c.mainAnimationStartBackgroundPositionX + 'px ' + c.mainAnimationStartBackgroundPositionY + 'px)'
                    }, b.mainAnimationDuration, b.easing)
                } else {
                    $(a).stop(true).animate({
                        backgroundPosition: '(' + c.mainAnimationEndBackgroundPositionX + 'px ' + c.mainAnimationEndBackgroundPositionY + 'px)'
                    }, b.mainAnimationDuration, b.easing)
                }
            }
            if (b.mainAnimationContinous) k = window.setTimeout(function () {
                _animateMask(a, b, c)
            }, b.mainAnimationDuration)
        }
        $.log($(elem).css('backgroundPosition'))
    }
})(jQuery);
