
/*!
 *
 * tumblrPost v0.4.2
 * created by Jonathan Armstrong (http://jonathanarmstrong.com)
 *
 * requires jQuery v1.4.2 and ja.base
 */

// tumblr post
JA.TumblrPost = function(settings, index, data) {

	// settings - extend/override default settings
	this.settings = $.extend({
			'containingElement':'',
			'generalTemplate':$([
				'<div class="post">',
					'<a class="anchor"><img class="image"/></a>',
					'<div class="info">',
						'<span class="caption"/>',
					'</div>',
				'</div>'
			].join('')),
			'quoteTemplate':$([
				'<div class="post">',
					'<div class="quote">',
						'<span class="author"/>',
					'</div>',
				'</div>'
			].join('')),
			'imageWidth':JA.TumblrStream.imageWidths.small,
			'intervalLength':300
		}, settings);

	//
	this.init(index, data)
};

	// init post
	JA.TumblrPost.prototype.init = function(index, data) {

		// init properties
		this.index = index;
		this.data = data;
		this.element = [];

		//
		this.build(data.type);
	};

	// build post
	JA.TumblrPost.prototype.build = function(type) {

		this.element = this.settings.generalTemplate.clone()
			.attr('id', this.data['id'])
			.find('a.anchor')
				.attr('href', this.data['photo-link-url'] || 'javascript:void(0);')
				.find('img.image')
					.attr({
						'src':this.data['photo-url-'+this.settings.imageWidth],
						'alt':this.data['id']
					})
				.end()
			.end()
			.find('.caption')
				.append(this.data['photo-caption'])
			.end()
			.appendTo(this.settings.containingElement)
		.end();

		var image = this.element.find('img.image');
		if (JA.utils.isNullorEmpty(image)) {
			this.settings.containingElement.trigger('JA.tumblrPost.finalized', [this.index])
		} else {
			if (image[0].complete) {
				this.finalize();
			} else {
				var context = this;
				image
					.bind({
                        'load': function() {
                            context.finalize();
                        },
                        'error': function() {
                            image
                                .parents('.post')
                                    .addClass('notLoaded')
                                .end()
                                .remove();
                            //
                            context.finalize();
                        }
                    });
			}
		}
	};

	// finalize post
	JA.TumblrPost.prototype.finalize = function() {

		var context = this;

		setTimeout(function() {
			context.settings.containingElement.trigger('JA.tumblrPost.finalized', [context.index])
		}, this.settings.intervalLength);
	};

