(function($) {
	$.fn.boltFeed = function(type) {
    var query = $(this).attr('data-query');
	var account = $(this).attr('data-account') ?  '@' + $(this).attr('data-account') : '';
    var increment = $(this).attr('data-increment') || 3;
    var count = 0;
    var boltContainer = $(this);
    var containerTitle = 'Farmhouse Modern\'s BO.LTs';
    
    //For Setting A Single Picture
  	if(type == 'single') {
  		$(this).each(function() {
    		if ($(this).attr('data-query') == '' || $(this).attr('data-query') == ' ') {
    		  console.log('please make sure your query fields are set up');
    		} else {
         	var query = $(this).attr('data-query');
         	var account = $(this).attr('data-account') ?  '@' + $(this).attr('data-account') : '';
          	var title = $(this).find('img').attr('alt');
          	var search = '&text=' + encodeURIComponent(query) + ' ' + account;
          	var container = $(this);
          	getImage(search, title, container);
    		}
  		});
    }
    
    //For Setting A whole Feed
    if(type == 'feed') {
      if (query == '' || query == ' ') {
        console.log('please make sure your query fields are set up');
      } else {
        var search = '&text=' + encodeURIComponent(query) + ' ' + account + '&count=' + increment + '&offset=' + (count*increment);
        getFeed(search);
      }
    }
    
    
		function getFeed(searchQuery) {
      $.ajax({
    			url: 'https://api.bo.lt/public/search/bolt.jsonp',
    			data: searchQuery,
    			dataType: 'JSONP',
    			crossDomain: 'true',
    			type: 'GET',
    			timeout: 20000,
    			success: function(data, status, request) {
    	    		if(!data.error){
    	    			console.log(data.bolts);
    	    			setFeed(data.bolts);
    	    		} else {
    	    			console.log('there was an error: ' + data.error.type);
    	    		}
    			},
    			error: function(data) {
    				console.log(data.error.type);
    				console.log('error');
    			}
      });
    };    
    
		function getImage(searchQuery, title, container) {
      $.ajax({
    			url: 'https://api.bo.lt/public/search/bolt.jsonp',
    			data: searchQuery,
    			dataType: 'JSONP',
    			crossDomain: 'true',
    			type: 'GET',
    			timeout: 20000,
    			success: function(data, status, request) {
    	    		if(!data.error){
    	    			setImage(data.bolts[0], container, title, data.bolts[0].default_url);
    	    			//console.log(data.bolts[0]);
    	    		} else {
    	    			console.log('there was an error: ' + data.error.type);
    	    			console.log(searchQuery);
    	    		}
    			},
    			error: function(data) {
    				//console.log(data.error.type);
    				//console.log('error');
    			}
      });
    };
    
    function setImage(bolt, container, title, url) {
      var frame = container;
      frame.find('a').attr("title", title);
      if(frame.find('a').attr("href") == '' || frame.find('a').attr("href") == null ) {
      	frame.find('a').attr({"href": url, "target": "_blank"});
      }
    	frame.find('img').attr("src", bolt.thumbnail_url);
    };
    
    function setFeed(boltArray) {
      //set entries
      var i = 0;
      for(i; i <= boltArray.length - 1; i++) {
        setFeedEntry(boltArray[i]);
      }
      boltContainer.css({"width" : 300, "padding" : "5px", "font-size" : "1.2em", "text-align" : "center"});
      
      //create header for container
      var containerHead = $(document.createElement('div')).css({"font-size" : "1.4em", "padding-top" : ".6em"}).text(containerTitle).prependTo(boltContainer);
      //create and set more button
      var moreButton = $(document.createElement('div')).attr("id", "bolt-feed-less-button").addClass("bolt-feed-button");
      moreButton.css({"text-align" : "center","color" : "#999","width" : "100%", "cursor" : "pointer", "display" : "none"});
      moreButton.html("---View More---").appendTo(boltContainer);
      
      //create and set less button
      var lessButton = $(document.createElement('div')).attr("id", "bolt-feed-more-button").addClass("bolt-feed-button");
      lessButton.css({"text-align" : "center","color" : "#999","width" : "100%", "cursor" : "pointer", "display" : "none"});
      lessButton.html("---View Less---").insertAfter(containerHead);
      
      //if we're on the second set or higher show the less button
      if (count > 0) {
        lessButton.show();
      } else {
        lessButton.hide();
      }
      
      //if the increment reaches the end thens how the more button
      if (i == increment) {
        moreButton.show();
        //console.log(count);
      } else {
        moreButton.hide();
      }
      
      lessButton.click(function() {
        count --;
        //console.log(count);
        boltContainer.children().remove();
        search = '&text=' + encodeURIComponent(query) + ' ' + account + '&count=' + increment + '&offset=' + (count*increment);
        getFeed(search);
      });
      
      moreButton.click(function() {
        count ++;
        boltContainer.children().remove();
        search = '&text=' + encodeURIComponent(query) + ' ' + account + '&count=' + increment + '&offset=' + (count*increment);
        getFeed(search);
      });
    };

    function setFeedEntry(bolt) {
      var link = bolt.default_url;
      var imgSource = bolt.thumbnail_url;
      var username = bolt.creation_username || 'anonymous';
      var comment = bolt.comment || '';
      
      var entry = $(document.createElement('div')).addClass('cbolt').css({"text-align" : "center", "margin" : "10px"});
      var imageAnchor = $(document.createElement('a')).attr({"href" : link, "target" : "_blank"}).css({"width" : "270px", "display" : "block", "margin" : "0 auto"});
      var image = $(document.createElement('img')).css({"width" : "270px", "text-align" : "center", "display" : "block"}).attr("src", imgSource).appendTo(imageAnchor);
      var comment = $(document.createElement('div')).addClass("comment").css({"font-size" : "94%", "color" : "#333", "padding-top" : ".4em"}).html('"' + comment + '"');
      var nameAnchor = $(document.createElement('a')).css({"color" : "#555", "cursor" : "pointer"}).attr({"href" : "http://bo.lt/app/user/" + username, "target" : "_blank"}).text(username);
      var name = $(document.createElement('div')).addClass("name").css({"font-size" : "80%", "color" : "#333", "padding-bottom" : "1em"}).html("Shared by: ").append(nameAnchor);
      
      entry.append(imageAnchor, comment, name).appendTo(boltContainer);
    };
	};
})(jQuery);
