/**
 * jQuery jqGalScroll Plugin
 * Examples and documentation at: http://benjaminsterling.com/jquery-jqgalscroll-photo-gallery/
 *
 * @author: Benjamin Sterling
 * @version: 2.1
 * @copyright (c) 2007 Benjamin Sterling, KenzoMedia
 * @extendThanks Koesmanto Bong http://www.koesbong.com/
 *              Koes put a fire under my butt to improve this plugin
 *              and when I took too long he took what I had and added
 *              the horizontal scroll and in turn I ripped it from his
 *              hands and made it better :)
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *  
 * @requires jQuery v1.2.1 or later
 * @optional jQuery Easing v1.2
 *
 * @name jqGalScroll
 * @example $('ul').jqGalScroll();
 *
 * @Semantic requirements:
 *                              The structure fairly simple; the structure should consist
 *                              of a ul > li > img structure.
 *
 *      <ul>
 *              <li><img src="common/img/dsc_0003.thumbnail.JPG"/></li>
 *              <li><img src="common/img/dsc_0012.thumbnail.JPG"/></li>
 *      </ul>
 *
 * @param String ease
 *                                      refer to http://gsgd.co.uk/sandbox/jquery.easing.php for values
 *
 * @example $('#gallery').jqGalScroll({speed:1000});
 
 * @param String speed
 *                                      fast, slow, 1000, ext..
 *
 * @example $('#gallery').jqGalScroll({speed:1000});
 *
 * @param String height
 *                                      the default height of your wrapper
 *
 * @example $('#gallery').jqGalScroll({height:490});
 *
 * @param String titleOpacity
 *                                      the opacity of your title bar (if present)
 *
 * @example $('#gallery').jqGalScroll({titleOpacity:.70});
 *
 * @param String direction
 *                                      vertical horizontal diagonal
 *
 * @example $('#gallery').jqGalScroll({direction:'vertical'});
 *                      
 */
(function($) {
        $.fn.jqGalScroll = function(options){
                return this.each(function(i){
                        var el = this
                        el.curImage = 0;
                        el.jqthis = $(this).css({position:'relative'});
                        el.jqchildren = el.jqthis.children();
                        el.opts = $.extend({}, jqGalScroll, options);
                        el.index = i;
                        el.totalChildren = el.jqchildren.size();
                        var width,height;
                       
                        switch(el.opts.direction){
                                case 'horizontal':
                                        width = el.totalChildren *el.opts.width;
                                        height = el.opts.height;
                                        break;
                                case 'vertical':
                                        width = el.opts.width;
                                        height = el.totalChildren *el.opts.height;
                                        break;
                                default:
                                        width = el.totalChildren *el.opts.width;
                                        height = el.totalChildren *el.opts.height;
                                        break;
                        };
                       
                        el.container = $('<div id="jqGS'+i+'" class="jqGSContainer">').css({position:'relative'});
                        el.ImgContainer = $('<div class="jqGSImgContainer" style="height:'+el.opts.height+'px;position:relative;overflow:hidden">')
                                                                .css({height:el.opts.height,width:el.opts.width,position:'relative',overflow:'hidden'});
                        el.jqthis.css({height:height,width:width});
                       
                        el.jqthis.wrap(el.container);
                        el.jqthis.wrap(el.ImgContainer);
                        el.pagination = $('<div class="jqGSPagination">');
                        el.jqthis.parent().parent().append(el.pagination);
                        var jqul = $('<ul>').appendTo(el.pagination);
                        var pos = {x:0,y:0};
                       
                        el.jqchildren
                        .each(function(j){
                                var selected = '';
                                if(j == 0) selected = 'selected';
                               
                                var $a = $('<a href="#'+(j)+'" class="'+selected+'">'+(j+1)+'</a>').click(function(){
                                        var href = this.index;//href.replace(/^.*#/, '');
                                        el.pagination.find('.selected').removeClass('selected');
                                        $(this).addClass('selected');
                                        var params = {};
                                        if( el.opts.direction == 'diagonal'){
                                                params = {right:(el.opts.width*href),bottom:(el.opts.height*href)}
                                        }
                                        else if( el.opts.direction == 'vertical'){
                                                params = {bottom:(el.opts.height*href)}
                                        }
                                        else if( el.opts.direction == 'horizontal'){
                                                params = {right:(el.opts.width*href)}
                                        };
                                       
                                        el.jqthis.stop().animate(params,el.opts.speed, el.opts.ease);
                                        index = href;
                                        return false;
                                });

                                var n = $a.get(0);

                                n.index = j;

                                $('<li>').appendTo(jqul).append($a);

                                if( el.opts.direction == 'diagonal'){
                                        pos.x = j * el.opts.width;
                                        pos.y = j * el.opts.height;
                                }
                                else if( el.opts.direction == 'horizontal'){
                                        pos.x = j * el.opts.width;
                                }
                                else if( el.opts.direction == 'vertical'){
                                        pos.y = j * el.opts.height;
                                };

                                var jqchild = $(this).css({height:el.opts.height,width:el.opts.width,position:'absolute',left:pos.x, top:pos.y});

                                var jqimg = jqchild.find('img').hide()
                               
                                if(jqimg.parent().is('a')){
                                        var p = jqimg.parent();
                                        jqimg.get(0).linkHref = p.attr('href');
                                        p.remove();
                                        jqimg.appendTo(jqchild);
                                };

                                jqimg.click(function(){
                                        var next = n.index + 1;
                                        if((n.index + 1) == el.totalChildren ){
                                                el.pagination.find('[href$=#0]').click();
                                        }
                                        else{
                                                el.pagination.find('[href$=#'+next+']').click();
                                        }
                                });

                                var $loader = $('<div class="jqGSLoader">').appendTo(jqchild);
                                var $titleHolder = $('<div class="jqGSTitle">').appendTo(jqchild).css({opacity:el.opts.titleOpacity}).hide();
                                var image = new Image();
                                image.onload = function(){
                                        image.onload = null;
                                        $loader.fadeOut();
                                        jqimg.css({marginLeft:-image.width*.5,marginTop:-image.height*.5,position:'absolute',left:'50%',top:'50%'}).fadeIn();
                                        var alt = jqimg.attr('alt');
                                        if(typeof alt != 'undefined'){
                                                $titleHolder.text(alt).fadeIn();
                                        }
                                };
                                image.src = jqimg.attr('src');
                        });

                       
                }); // end : this.each(function()
        };  // end : $.fn.jqGalScroll
        jqGalScroll = {
                ease: null,
                speed:0,
                height: 500,
                width: 500,
                titleOpacity : .60,
                direction : 'horizontal' // vertical horizontal diagonal
        };
})(jQuery);


