(function($){
    $.flickr = function(el, options){
        var base = this;
        
        base.$el = $(el);
        base.el = el;
        
        base.$el.data("flickr", base);
        
        base.photoString = "";
        base.photosLoaded = 0;
        base.groupData = {};
        
        base.init = function(){
            base.options = $.extend({},$.flickr.defaultOptions, options);
            
            //base.showLoading();
            
            //get flckr feed
            base.apicall = {};
            
            switch(base.options.type){
            	case "user": base.apicall = {method:'flickr.people.getPublicPhotos',user_id:base.options.id}; break;
            	case "group": base.apicall = {method:'flickr.groups.pools.getPhotos',group_id:base.options.id}; break; 
            	case "set": base.apicall = {method:'flickr.photosets.getPhotos',photoset_id:base.options.id}; break; 
            }
            $.getJSON(base.url(base.apicall),function(data){
            	base.buildPhotos(data);
            });           
        };
        
        base.buildPhotos = function(data){
        	var photos,photoString = "";
        	if(base.options.type === "set"){
        		photos = data.photoset.photo;
        	}else{
        		photos = data.photos.photo;
        	}
        	
        	
        	for(i = 0; i < photos.length; i++){
        		if(i === base.options.numPhotos){
        			break;
        		}
        		if(base.options.type === "group"){       			
        			base.$el.append("<div class='flickr-photo'><a id='photo_"+photos[i].id+"' href='http://www.flickr.com/photos/"+photos[i].owner+"/"+photos[i].id+"/in/pool-"+base.options.id+"' target='_blank'></a></div>");
        		}else if(base.options.type === "user"){
        			base.$el.append("<div class='flickr-photo'><a id='photo_"+photos[i].id+"' href='http://www.flickr.com/photos/"+base.options.id+"/"+photos[i].id+"' target='_blank'></a></div>");
        		}else if(base.options.type === "set"){
        			base.$el.append("<div class='flickr-photo'><a id='photo_"+photos[i].id+"' href='http://www.flickr.com/photos/"+data.photoset.ownername+"/"+photos[i].id+"/in/set-"+base.options.id+"' target='_blank'></a></div>");
        		}
        		
        		$.getJSON(base.url({method:'flickr.photos.getSizes',photo_id:photos[i].id}),function(data){
        			$("#photo_"+base.getParam(this.url,"photo_id")).append("<img src='"+data.sizes.size[0].source+"' border='0'/>");
        		});
        	}
        	base.$el.append("<br style='clear:both;'>");
        }
        
        base.showLoading = function(){
        	base.$el.html("loading...");
        };
        
        base.appendPhotos = function(){
        	base.$el.html(base.photoString);
        };
        
        base.url = function(o){
			var url =  'http://api.flickr.com/services/rest/?format=json&jsoncallback=?&api_key='+base.options.apikey;
			for (prop in o) {
				url += "&"+ prop + "=" + o[prop];
			}		
			return url;
		};
		
		base.getParam = function(url,name){
			name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
			var regexS = "[\\?&]"+name+"=([^&#]*)";
			var regex = new RegExp( regexS );
			var results = regex.exec(url);
			if( results == null ){
				return "";
			}else{
				return results[1];
			}
		};
		
        base.init();
    };
    
    $.flickr.defaultOptions = {
    	id:"42393290@N07",
    	apikey:"33fd5b05871593ec5fba3fab455c3739",
    	secret:"bbd4e165ef40a30b",
    	numPhotos:6,
    	type:"user"
    };
    
    $.fn.flickr = function(options){
        return this.each(function(){
            (new $.flickr(this, options));
        });
    };
    
})(jQuery);