/* 
	jQuery load twitter image
	Created on 18th Jul 2010 by hosimitu 
	Version 1.0.0
	Tish plugin replace a tag with img tag. ex:Twitpic, Movapic, ...etc.
*/
(function() {
	jQuery.fn.twitterimgload = function(options){
             var settings = {
                threshold    : 0,
                failurelimit : 0,
                event        : "scroll",
                effect       : "show",
                container    : window
            };

            if(options) {
                $.extend(settings, options);
            }


            // プラグイン内のthis は、$("div.target") など指定したHTML要素
            this.each(function() {
                var self = this;
                /* Save original only if it is not defined in HTML. */
                if (undefined == $(self).attr("original")) {
                    $(self).attr("original", $(self).attr("src"));
                }
                self.html(self.html().replace(/<a([\s\w"'=])href="http:\/\/movapic.com\/pic\/(\w+)"([\s\w"'=]+)>?>/ig, '<a$1href="http://movapic.com/pic/$2"$3><img src="http://movapic.com/pic/s_$2.jpeg" />'));
                
                /* When appear is triggered load original image. */
                $(self).one("appear", function() {
                    if (!this.loaded) {
                        $("<img />")
                            .bind("load", function() {
                                $(self)
                                    .hide()
                                    .attr("src", $(self).attr("original"))
                                    [settings.effect](settings.effectspeed);
                                self.loaded = true;
                            })
                            .attr("src", $(self).attr("original"));
                    };
                });

                /* When wanted event is triggered load original image */
                /* by triggering appear.                              */
                if ("scroll" != settings.event) {
                    $(self).bind(settings.event, function(event) {
                        if (!self.loaded) {
                            $(self).trigger("appear");
                        }
                    });
                }
            });
	};

        /* Convenience methods in jQuery namespace.           */
        /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */

        $.belowthefold = function(element, settings) {
            if (settings.container === undefined || settings.container === window) {
                var fold = $(window).height() + $(window).scrollTop();
            } else {
                var fold = $(settings.container).offset().top + $(settings.container).height();
            }
            return fold <= $(element).offset().top - settings.threshold;
        };

        $.rightoffold = function(element, settings) {
            if (settings.container === undefined || settings.container === window) {
                var fold = $(window).width() + $(window).scrollLeft();
            } else {
                var fold = $(settings.container).offset().left + $(settings.container).width();
            }
            return fold <= $(element).offset().left - settings.threshold;
        };

        $.abovethetop = function(element, settings) {
            if (settings.container === undefined || settings.container === window) {
                var fold = $(window).scrollTop();
            } else {
                var fold = $(settings.container).offset().top;
            }
            return fold >= $(element).offset().top + settings.threshold  + $(element).height();
        };

        $.leftofbegin = function(element, settings) {
            if (settings.container === undefined || settings.container === window) {
                var fold = $(window).scrollLeft();
            } else {
                var fold = $(settings.container).offset().left;
            }
            return fold >= $(element).offset().left + settings.threshold + $(element).width();
        };
        /* Custom selectors for your convenience.   */
        /* Use as $("img:below-the-fold").something() */

        $.extend($.expr[':'], {
            "below-the-fold" : "$.belowthefold(a, {threshold : 0, container: window})",
            "above-the-fold" : "!$.belowthefold(a, {threshold : 0, container: window})",
            "right-of-fold"  : "$.rightoffold(a, {threshold : 0, container: window})",
            "left-of-fold"   : "!$.rightoffold(a, {threshold : 0, container: window})"
        });

})(jQuery);
