
PhotoGallery = function() {
    var opts;
    var data;
    var imgWidth = 102;
    var isFirstLoad = true;
    
    return {
        init: function(options) {
            opts = options;
            
            $(opts.left).addClassName('disabled');
            $(opts.right).addClassName('disabled');
            
            $(opts.fullImg).setStyle({
                width: '560px',
                height: '560px',
                opacity: 0.8
            });            
            
            Event.stopObserving($(opts.left), 'click', PhotoGallery.moveLeft);
			Event.observe($(opts.left), 'click', PhotoGallery.moveLeft);
			
			Event.stopObserving($(opts.right), 'click', PhotoGallery.moveRight);
			Event.observe($(opts.right), 'click', PhotoGallery.moveRight);
			
			Event.stopObserving($(opts.fullImgTemp), 'load', PhotoGallery.loadBigImage);
			Event.observe($(opts.fullImgTemp), 'load', PhotoGallery.loadBigImage);
			
            new Ajax.Request(opts.Url, {
                method: 'post',
                evalScripts: true,
                onSuccess: function(trans) {
                    eval('data=' + trans.responseText);
                    PhotoGallery.start();
                }               
            });
        },
        
        start: function() {
            if(data.Recs.length > 5)
            {
                $(opts.right).removeClassName('disabled');
            }
            
            $(opts.strip).setStyle({
                    width: (imgWidth * data.Recs.length) + 'px'
            }); 
            
            data.Recs.each(function(cc) {
                var ele = new Element('img', {
                            src: cc.thumb,
                            'class': 'thumb'
                        });
                
                Event.observe(ele, 'click', PhotoGallery.thumbClick);        
                
                new Insertion.Bottom($(opts.strip), ele);
                
            });    
            
            PhotoGallery.loadFullImage(data.Recs[0].thumb); 
        },
        
        moveLeft: function(evt) {
            Event.stop(evt);
            
            if(!$(opts.left).hasClassName('disabled'))
            {
                Effect.MoveBy($(opts.strip), 0, imgWidth,  {
                    queue: {position:'end', scope: 'menuxscope', limit:1},
                    afterFinish: function() {
                        PhotoGallery.updateSlider();
                    }
                });                
            }
        },
        
        moveRight: function(evt) {
            Event.stop(evt);
            
            if(!$(opts.right).hasClassName('disabled'))
            {
                Effect.MoveBy($(opts.strip), 0, -imgWidth, {
                    queue: {position:'end', scope: 'menuxscope', limit:1},
                    afterFinish: function() {
                        PhotoGallery.updateSlider();
                    }
                });
            }
        },
        
        updateSlider: function() {
        
            if($(opts.strip).positionedOffset().left == 0)
            {
                $(opts.left).addClassName('disabled');
            }
            else
            {
                $(opts.left).removeClassName('disabled');
            }
            
            var len = 0;
            
            len = data.Recs.length - 5; 
  
            if($(opts.strip).positionedOffset().left == -(imgWidth * len))
            {
                $(opts.right).addClassName('disabled');
            }
            else
            {
                $(opts.right).removeClassName('disabled');
            }
        },
        
        thumbClick: function(evt) {
            Event.stop(evt);
            
            var thumb = Event.element(evt);            
            
            new Effect.Opacity($(opts.fullImg), { 
                    duration: 1.0,
                    transition: Effect.Transitions.linear,
                    from: 1.0, to: 0.1,
                    afterFinish: function(){
                        PhotoGallery.loadFullImage($(thumb).readAttribute('src'));
                    } });
        },
        
        loadFullImage: function(thumbSrc) {
            var ii;
            
            for(ii = 0; ii < data.Recs.length; ii++)
            {   
                if(data.Recs[ii].thumb == thumbSrc)
                {
                    $(opts.fullImgTemp).src = data.Recs[ii].full;
                    $(opts.title).innerHTML = data.Recs[ii].caption;
                    $(opts.status).innerHTML = '' + (ii+1) + ' of ' + data.Recs.length + ' Photos';
                    break;
                }
            }
        },
        
        loadBigImage: function(evt) {
            Event.stop(evt);
            
            if($(opts.fullImgTemp).readAttribute('src') == NYWine.imgRoot + 'none.gif')
            {
            
                isFirstLoad = false
                return;
            }

            var oldDim = $(opts.fullImg).getDimensions();
            var newDim = $(opts.fullImgTemp).getDimensions();
            
            var horPer = parseInt(newDim.width * 100.0 / oldDim.width);
            var verPer = parseInt(newDim.height * 100.0 / oldDim.height);
            
            $(opts.fullImg).src = $(opts.fullImgTemp).src;            
                
            horPer = (horPer == 99) ? 100 : horPer;
            verPer = (verPer == 99) ? 100 : verPer;
            
            if(horPer == 100 && verPer == 100)
            {
                S3();
                return;
            }   
            
            new Effect.Scale($(opts.fullImg), horPer, {
                    duration: 0.5,
                    scaleY: false,
                    afterFinish: function(){
                        S2();
                   } 
             });
            
            
            function S2() {
                new Effect.Scale($(opts.fullImg), verPer, {
                    duration: 0.5,
                    scaleX: false,
                    afterFinish: function(){
                        S3();
                    } 
                });                
            }
            
            function S3() {
                
                new Effect.Opacity($(opts.fullImg), { 
                        duration: 1.0,
                        transition: Effect.Transitions.linear,
                        from: 0.1, to: 1.0,
                        afterFinish: function(){
                            
                        } 
                 });
             }
        }
    };
}();
