(function($){ $.fn.jqAlbumParser = function(options){ return this.each(function(index){ var it = this, $this = $(this); it.opts = $.extend({}, $.fn.jqAlbumParser.defaults, options); it.index = index; it.wrapper = it.opts.wrapper.split('>'); var cls = it.className; it.opts.webAlbum = (cls.match(/wa:(\w+)/)||[])[1] || it.opts.webAlbum; it.url = $.fn.jqAlbumParser.urlFix(it,$this.attr('href')); $this.bind(it.opts.triggerEvent, function(){ $.fn.jqAlbumParser.loadIndicator('build'); $('#jqAlbumParserID'+it.index).remove(); $.ajaxSetup({cache:true}); $.ajax({ type:'GET', url:it.url, success:function(data){$.fn.jqAlbumParser.toJson(data, it);}, dataType:'jsonp', cache:true
}); return false;});});}; $.fn.jqAlbumParser.toJson = function(json, it){ $.fn.jqAlbumParser.loadIndicator('log', 'Building Photo Array'); var obj = Object(), cleared = false; if(it.opts.webAlbum == 'picasa'){ obj = $.fn.jqAlbumParser.shuffle(json['feed']['entry'], it.opts.randomized); $.jqAlbumParser.photos[it.index] = {}; $.each(obj,function(i){ $.fn.jqAlbumParser.loadIndicator('log', 'Process JSON ' + (i+1) + ' of ' + obj.length); var elements = { tn : { url : obj[i]['media$group']['media$thumbnail'][it.opts.tnSize]['url']+'?imgmax=800', h : obj[i]['media$group']['media$thumbnail'][it.opts.tnSize]['height'], w : obj[i]['media$group']['media$thumbnail'][it.opts.tnSize]['width']
}, title : obj[i]['title']['$t'], full :{ url : obj[i]['media$group']['media$content'][0]['url']+'?imgmax=800', h : obj[i]['media$group']['media$content'][0]['height'], w : obj[i]['media$group']['media$content'][0]['width']
}
}; $.jqAlbumParser.photos[it.index][i]= elements;}); cleared = true;}
else if(it.opts.webAlbum == 'flickr'){ obj = $.fn.jqAlbumParser.shuffle(json['items'], it); $.jqAlbumParser.photos[it.index] = {}; $.each(obj,function(i){ $.fn.jqAlbumParser.loadIndicator('log', 'Process JSON ' + (i+1) + ' of ' + obj.length); var elements = { tn : { url : obj[i]['media']['m'].replace(/_m.jpg/, $.jqAlbumParser.flickrArray[it.opts.tnSize])
}, title : obj[i]['title'], full :{ url : obj[i]['media']['m'].replace(/_m/,'')
}
}; $.jqAlbumParser.photos[it.index][i]= elements;}); cleared = true;}
$.fn.jqAlbumParser.loadIndicator('log', 'End process JSON'); if(cleared)$.fn.jqAlbumParser.build(it);}; $.fn.jqAlbumParser.build = function(it){ $.fn.jqAlbumParser.loadIndicator('log', 'Start Build'); var cnt = it.wrapper.length; var child, $parent; if(cnt < 2){ return false;}
else{ $parent = $("<"+$.trim(it.wrapper[0])+">"); if(it.opts.appendTo == 'self'){ $(it).before($parent).hide();}
else{ $parent.appendTo(it.opts.appendTo);}
child = "<"+$.trim(it.wrapper[(cnt-1)])+">";}
var photos = $.jqAlbumParser.photos[it.index]; for(i in it.opts.parentAttr){ $parent.attr(i,it.opts.parentAttr[i]);}; $parent.attr('id','jqAlbumParserID'+it.index); for(i in photos){ var $it = $(child); var $img = $('<img src="'+photos[i][it.opts.buildFrom]['url']+'" alt="'+photos[i]['title']+'" title="'+photos[i]['title']+'"/>').appendTo($it); if(it.opts.includeHref){ var $a = $('<a/>').attr('href',photos[i]['full']['url']); $img.wrap($a);}
$parent.append($it); if(it.opts.count != null && it.opts.count-1 == i){ break;};}; $.fn.jqAlbumParser.loadIndicator('log', 'End Build'); $.fn.jqAlbumParser.callback(it,$parent);}; $.fn.jqAlbumParser.callback = function(item,$parent){ $.fn.jqAlbumParser.loadIndicator('log', 'Start Callback'); item.opts.pluginExec.apply($parent); item.opts.callback(); $.fn.jqAlbumParser.loadIndicator('hide');}; $.fn.jqAlbumParser.urlFix = function(it, url){ switch(it.opts.webAlbum){ case 'picasa':
return url.replace(/alt=rss/g,"alt=json"); case 'flickr':
return url +"&format=json&jsoncallback=?";}
}
$.fn.jqAlbumParser.shuffle = function(o, r){ if(r){ for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);}
return o;}; $.fn.jqAlbumParser.loadIndicator = function(option, txt){ switch(option){ case 'build':
if($('#jqAlbumParserLoader').size() == 0){ $('<div id="jqAlbumParserLoader">Started: jqAlbumParser</div>').appendTo('body')
.css({position:'relative',top:0,right:0,border:'1px solid #f00',background:'#efefef'});}
else{ $('#jqAlbumParserLoader').show();}; break; case 'hide':
$('#jqAlbumParserLoader').hide(); break; case 'log':
$('#jqAlbumParserLoader').text(txt); break;};}; $.jqAlbumParser = { photos : {}, flickrArray : Array('_s.jpg','_t.jpg','_m.jpg')
}; $.fn.jqAlbumParser.defaults = { wrapper : "ul > li", parentAttr : {}, webAlbum : null, triggerEvent: 'click', callback : function(){}, pluginExec : function(){}, tnSize : 0, appendTo : 'self', count : null, buildFrom : 'tn', randomized : false, includeHref : true
};})(jQuery); 
