(function($) {
	var tmplMatch = {
		imgsrc: 'media.m'.split('.'),
		imglink: 'link'.split('.'),
		imgtitle: 'title'.split('.')
	};
			
$.fn.flickrFeed = function(options) {
	var opts 		= $.extend({}, $.fn.flickrFeed.defaults,options),
		that 		= $(this),
		flickrTmpl 	= $.tmpl(opts.template),
		strToObj 	= $.location.strToObj
	;
	
	
	function initFlickr(e) {
		var that = $(this),
			linkUrl, 
			linkObj = {};
			
		function handleAjaxSuccess(data, status) {
			var items = data.items;
			var flickrItems = '';
			
			$.each(items, function(i, item){
				if(i < opts.maxItemCount) {
					var t = $.transformObj(item, tmplMatch);
					if(t.imgsrc){
						t.bigImgsrc = t.imgsrc.replace(/\_m.jpg$/, '_b.jpg');
					}
					flickrItems += flickrTmpl(t);
				}
			});
			
			that.removeClass('flickr-loading');
			$(opts.flickrWrapper, that[0]).html($.tmpl(opts.wrapperTmpl, {items: flickrItems}));
			opts.complete.apply(this, [data, status, that]);
			
		}
		
		function requestData() {
			$.ajax({
				cache: false,
				url: linkUrl,
				data: linkObj,
				success: handleAjaxSuccess,
				error: opts.complete,
				dataType: 'jsonp',
				jsonp: 'jsoncallback'
			});
		}
		if(!opts.linkUrl) {
			linkUrl = $(opts.linkAnchor, that).attr('href');
			linkObj = strToObj(linkUrl);
			linkUrl = linkUrl.substring(0, linkUrl.lastIndexOf('?'));
			linkObj.format = 'json';
		} else {
			linkUrl = opts.linkUrl;
		}
		
		requestData();
	}
	
	return this
		.addClass('flickr-loading')
		.each(initFlickr)
		.bind('flickrRefresh', initFlickr);
	
	
};	

$.fn.flickrFeed.defaults = {
	linkAnchor: 'a.rss',
	flickrWrapper: '#flickr-wrapper',
	maxItemCount: 9,
	complete: function(){},
	wrapperTmpl: '<%=items%>',
	template: '<div class="flickr_badge_image"><a href="<%=imglink%>"><img src="<%=imgsrc%>" alt="<%=imgtitle%>" title="<%=imgtitle%>" width="" height=""/></a></div>'
};
})(jQuery);
