(function ($) {
	
	$.artisanship = function (options) {
		return $.artisanship.impl.init(options);
	};
	
	$.fn.artisanship = function (options) {
		return $.artisanship.impl.init(this, options);
	};
	
	/*
	 * default options
	 */
	$.artisanship.defaults = {
	    index:  0,
	    res:    {}
	};
	
	$.artisanship.impl = {
		
		/*
		 * options
		 */
		opts:           null,
		
		/*
		 * helper
		 */
		helper:         {},
		
		/*
		 * Initialize the page
		 */
		init: function (options) {
            
            var self = this;
            
            this.opts = $.extend({}, $.artisanship.defaults, options);
            
            // helpers
            self.helper.container = $('div.page-artisanship');
            self.helper.list = self.helper.container.find('ul.artisanshipitem-collection');
            self.helper.tabs = $('<ul class="tabitem-collection"></ul>').insertAfter(self.helper.list);
            self.helper.prev = $('<a class="prev-artisanshipitem prev-artisanshipitem-disabled" href="#">' + self.opts.res.previous + '</a>').appendTo(self.helper.container);
            self.helper.next = $('<a class="next-artisanshipitem" href="#">' + self.opts.res.next + '</a>').appendTo(self.helper.container);
            
            self.helper.list.children().each(function(i, item){
                
                var $title = $(item).find('.artisanshipitem-title');
                var $tab = $('<li class="tabitem"><a href="#">' + $title.text() + '</a></li>').appendTo(self.helper.tabs);
                
                if (i == self.opts.index)
                {
                    $(item)
                        .addClass('artisanshipitem-active')
                        ;
                    
                    $tab
                        .addClass('tabitem-active')
                        ;
                }
                
                // initialize cufon
                Cufon.replace($title, {
                    fontFamily: 'Helvetica Neue LT Std'
                });
                Cufon.now();
                
            });
            
            // bind tab click
            self.helper.tabs.find('a').click(function(e){
                e.preventDefault();
                
                var $li = $(this).parent();
                
                if ($li.hasClass('tabitem-active'))
                    return;
                
                self.opts.index = $li.prevAll().length;
                
                self.page(self.opts.index);
                
            });
            
            // bind prev click
            self.helper.prev.click(function(e){
                e.preventDefault();
                
                self.page(self.opts.index--);
                
            });
            
            // bind next click
            self.helper.next.click(function(e){
                e.preventDefault();
                
                self.page(self.opts.index++);
                
            });
            
			return self;
		},
		
		/*
		 * Page
		 */
		page: function (p) {
		    
		    var self = this;
		    var $tab = $(self.helper.tabs.children()[self.opts.index]);
		    var $item = $(self.helper.list.children()[self.opts.index]);
            
            if (self.opts.index == 0)
            {
                self.helper.prev
                    .addClass('prev-artisanshipitem-disabled')
                    ;
            }
            else
            {
                self.helper.prev
                    .removeClass('prev-artisanshipitem-disabled')
                    ;
            }
            
            if (self.opts.index == self.helper.list.children().length - 1)
            {
                self.helper.next
                    .addClass('next-artisanshipitem-disabled')
                    ;
            }
            else
            {
                self.helper.next
                    .removeClass('next-artisanshipitem-disabled')
                    ;
            }
            
            $tab
                .addClass('tabitem-active')
                .siblings()
                .removeClass('tabitem-active')
                ;
            
            $item
                .addClass('artisanshipitem-active')
                .siblings()
                .removeClass('artisanshipitem-active')
                ;
		    
		    
		    return;
		}
		
	};
})(jQuery);