/**
 * @author Mark Cremer <info@ikmarkcremer.nl>
 * @version 0.1
 * @uses Jquery <http://www.jquery.com>
 * @uses Jqueryflickr <http://www.projectatomic.com/2008/04/jquery-flickr>
 * @uses fancybox <http://www.stefanoverna.com/log/fancybox-flickrss-wordpress>
 * @uses javascript Function.prototype.bind <http://www.digital-web.com/articles/scope_in_javascript/>
 */
/**
 * helper function to create delegate
 * @param {Object} obj
 */
Function.prototype.bind = function(obj)
{
    var method = this, temp = function()
    {
        return method.apply(obj, arguments);
    };
    
    return temp;
}

/**
 *
 * @param {Object} args
 */
function jqueryflickr(args)
{

    /**
     * @var init object
     */
    this.args = args;
    
    /**
     * fancybox
     */
    this.callback_fancybox = function(el)
    {
    
        $("[id='jqueryflickr_" + args.photoset_id + "'] a").fancybox({
            'zoomSpeedIn': 300,
            'zoomSpeedOut': 300,
            'overlayShow': true
        });
        
        /*
         * remove loading div
         */
        $("[id='jqueryflickr_" + args.photoset_id + "'] div:eq(0)").remove();
        
        this.pagingManager();
    }
    
    
    /**
     *
     * @param {Object} args
     */
    this.jqueryflickrLoad = function()
    {
    
        /*
         * first remove content in photocontainer
         */
        $("[id='jqueryflickr_" + args.photoset_id + "'] *").remove();
        
        /*
         * add loading div
         */
        $("[id='jqueryflickr_" + args.photoset_id + "']").append("<div class=\"loading-large\"></div>");
        
        
        /*
         * load new photos
         */
        jQuery("[id='jqueryflickr_" + args.photoset_id + "']").flickr({
            api_key: args.api_key,
            per_page: args.per_page,
            type: args.type,
            photoset_id: args.photoset_id,
            user_id: args.user_id,
            
            /*
             * bind function to callback event. call or apply execute
             * the function imediately so bind is needed
             */
            callback: this.callback_fancybox.bind(this),
            page: args.page
        });
        
    }
    
    /**
     * handles paging buttons
     */
    this.pagingManager = function()
    {
    
        /*
         * get paging data
         * input:eq(0): current page,
         * input:eq(1): total number of pages,
         * input:eq(2): images per page,
         * input:eq(3): total number of images
         */
        var curpage = $("[id='jqueryflickr_" + args.photoset_id + "'] input:eq(0)").val();
        var totalPages = $("[id='jqueryflickr_" + args.photoset_id + "'] input:eq(1)").val();
        var imagesPerPage = $("[id='jqueryflickr_" + args.photoset_id + "'] input:eq(2)").val();
        var totalImages = $("[id='jqueryflickr_" + args.photoset_id + "'] input:eq(3)").val();
        
        /*
         * temp
         * @todo delegate
         */
        var scopeHelperRef = this;
        
        /*
         * hide previous button
         */
        if (curpage == 1) 
        {
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").addClass("disabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").removeClass("enabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").unbind('click');
        }
        else 
        {
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").addClass("enabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").removeClass("disabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(0)").unbind('click').click(function()
            {
                scopeHelperRef.args.page--;
                scopeHelperRef.jqueryflickrLoad();
            });
            
        }
        
        /*
         * hide next button
         */
        if (curpage == totalPages) 
        {
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").addClass("disabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").removeClass("enabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").unbind('click');
        }
        else 
        {
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").addClass("enabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").removeClass("disabled");
            $("[id='jqueryflickr-paging_" + args.photoset_id + "'] a:eq(1)").unbind('click').click(function()
            {
                scopeHelperRef.args.page++;
                scopeHelperRef.jqueryflickrLoad();
            });
        }
        
    }
    
}

