$.gallery ={
    opacity: 0.5,
    fadeDuration: 500,
    tbs: {},
    tbWidth: 70,
    tbHeight: 60,
    viewport: {},
    currIndex: 1,
    thumbcount: 0,
    init: function(selector)
    {        
        $(selector).click(function()
        {
            var id = this.id.replace('album-', '');
            $.gallery.build(id);            
            return false;
        });
    },
    build: function(id)
    {
        $.gallery.viewport = 
        {
            left:         $(window).scrollLeft(),
            top:          $(window).scrollTop(),
            clientWidth:  $(window).width(),
            clientHeight: $(window).height(),
            scrollWidth:  $(document).width(),
            scrollHeight: $(document).height()
        };
        //Overlay Div
        var overlay = document.createElement('div');
        $(overlay).attr('id', 'galleryOverlay');
        $(overlay).css(
        {
            display:   'none',
            position:  'absolute',
            top:       0,
            left:      0,
            width:     $.gallery.viewport.scrollWidth + 'px',
            height:    $.gallery.viewport.scrollHeight + 'px',
            opacity:   $.gallery.opacity
        });
        //Image Outer Container
        var outerContainer = document.createElement('div');
        $(outerContainer).attr('id', 'galleryOuterContainer');
        $(outerContainer).css(
        {
            position: 'absolute',
            top: -2000 + 'px',
            left: 0,
            width: $.gallery.viewport.scrollWidth + 'px'
            
        });
        
        //Add Close Link
        var closeLink = document.createElement('a');
        $(closeLink).attr(
        {
            id:    'galleryCloseLink',
            href:  '#',
            title: 'Close'
        });
        $(closeLink).html('Close');
        $(closeLink).click(function()
        {
            $.gallery.closeGallery();
            return false;
        });
        
        //Image Container
        var container = document.createElement('div');
        $(container).attr('id', 'galleryContainer');
        $(container).css(
        {
            position: 'relative'
        });
        var imageContainer = document.createElement('div');
        $(imageContainer).attr('id', 'galleryImageContainer');
        
        //Large Image
        var lrgImage = document.createElement('img');
        $(lrgImage).attr(
        {
           id: 'galleryLrgImage',
           src: '',
           alt: ''
        });
            
        //Caption
        var caption = document.createElement('p');
        $(caption).attr(
        {
           id: 'galleryCaption',
           align: 'center'
        });
        caption.innerHTML = "";
        
        //Next Link
        var nextLink = document.createElement('a'); 

        $(nextLink).attr(
        {
            href: '#',
            id: 'nextLink',
            title: 'Next'  
        });

        nextLink.innerHTML ="Next"; 
        
        $(nextLink).click(function () {
        	$.gallery.nextImage(id);
        });
        
        
        
        //Previous Link
        var prevLink = document.createElement('a'); 

        $(prevLink).attr(
        {
            href: '#',
            id: 'prevLink', 
            title: 'Previous' 
        });

        prevLink.innerHTML ="Prev"; 
        
        $(prevLink).click(function () {
        	$.gallery.prevImage(id);
        });

        
        //Image Scroller Container
        var scrollContainer = document.createElement('div');
        $(scrollContainer).attr('id', 'galleryScrollerContainer');
        
        var scroller = document.createElement('div');
        $(scroller).attr('id', 'galleryScroller');
        
        var prev = document.createElement('a');
        $(prev).attr(
        {
            href: '#',
            id: 'galleryPrev'  
        });
        var next = document.createElement('a');
        $(next).attr(
        {
            href: '#',
            id: 'galleryNext'  
        });
        
        //Build Dialogue
        $('body').append(overlay);
        $(outerContainer).append(container); 
        $(scrollContainer).append([prev, scroller, next]);
        $(imageContainer).append(lrgImage);
        $(container).append([closeLink, imageContainer, caption, nextLink, prevLink, scrollContainer]);
        $('body').append(outerContainer);
        
        $.gallery.setThumbs(id);
        $.gallery.showGallery(); 
        
    },
    loadImage: function(src)
    {
        var newImage = new Image();
        newImage.onload = function()
        {
            $('#galleryLrgImage').hide();
            $('#galleryImageContainer').animate(
            {
                height: newImage.height
            }, $.gallery.fadeDuration);
            
            $('#galleryLrgImage').attr(
            {
                src: src,
                width: newImage.width,
                height: newImage.height
            })
            .fadeIn($.gallery.fadeDuration);
        }
        newImage.src = src;
    },
    setThumbs: function(id)
    {
        var thumbsList = document.createElement('ul');
        $(thumbsList).attr({id: 'galleryThumbs'});
        var count = 0;
        $.each(photos[id].thumbs, function(i, val)
        {
            (count == 0)? $.gallery.loadImage(photos[id].thumbs[i].lrg_image) : null;
            (count == 0)? $('#galleryCaption').html('<b>'+photos[id].thumbs[i].title+'</b>') : null;
            
            $(thumbsList).append($.gallery.buildThumb(photos[id].thumbs[i].lrg_image, photos[id].thumbs[i].image, photos[id].thumbs[i].title));
            
            count++;            
        });
        $.gallery.thumbcount = count;
        
        $('#galleryScroller').append(thumbsList);              
       
        if($('#galleryScroller'))
        {
            $('#galleryScroller').jCarouselLite({
                btnNext: "#galleryNext",
                btnPrev: "#galleryPrev",
                visible: 6,
                speed: 800
            });
        }
        
        //Add triggers to carousel links
        $("#galleryThumbs a").click(function() 
        {
        	var src = $(this).attr('href');
            var alt = $(this).attr('title');
        	
            //Figure out the index
        	var indx = 1;
        	$.each(photos[id].thumbs, function(i, val)
            {
        		if(photos[id].thumbs[i].lrg_image == src)
        		{
        			 $.gallery.currIndex = indx;
        		}
        		indx++;
            });
        	
            
            $('#galleryCaption').html('<b>'+alt+'</b>');
            $.gallery.loadImage(src);
            return false;
        }); 
    },
    buildThumb: function(lrgSrc, src, alt)
    {
        var li = document.createElement('li');
        var link = document.createElement('a');
        var img = document.createElement('img');
        
        $(link).attr(
        {
        	href: lrgSrc,
        	title: alt
        });
        $(img).attr(
        {
            src:    src,
            width:  $.gallery.tbWidth,
            height: $.gallery.tbHeight,
            alt:    alt            
        });
        $(link).append(img);
        $(li).append(link);
        return li;
    },
    showGallery: function()
    {                
        $('#galleryOverlay').fadeIn($.gallery.fadeDuration, 
        function()
        {
            $('#galleryOuterContainer').hide();
            $('#galleryOuterContainer').css(
            {
                top: $.gallery.viewport.top + 'px'   
            })
            .fadeIn($.gallery.fadeDuration);
        });
    },
    closeGallery: function()
    {
        $('#galleryOuterContainer').fadeOut($.gallery.fadeDuration, 
        function()
        {
            $('#galleryOverlay').fadeOut($.gallery.fadeDuration, function()
            {
                $('#galleryOuterContainer').remove();
                $(this).remove();
            });
        });          
    },
    nextImage: function(id)
    {
    	if(photos.length == 0)
       	 	return false;
    	
    	if($.gallery.currIndex >= $.gallery.thumbcount)
    	{
    		$.gallery.currIndex = 0;
    	}
    	
    	var indx = 0;
    	$.each(photos[id].thumbs, function(i, val)
        {
    		if(indx == $.gallery.currIndex)
    		{
    			$.gallery.loadImage(photos[id].thumbs[i].lrg_image);
                $('#galleryCaption').html('<b>'+photos[id].thumbs[i].title+'</b>');
    		}
    		indx++;
        });
    	
    	$.gallery.currIndex = $.gallery.currIndex + 1;

    },
    
    prevImage: function(id)
    {
    	if(photos.length == 0)
       	 	return false;
    	
    	if($.gallery.currIndex < 2)
    	{
    		$.gallery.currIndex = $.gallery.thumbcount + 1;
    	}
    	
    	var indx = 0;
    	$.each(photos[id].thumbs, function(i, val)
        {
    		if(indx == $.gallery.currIndex - 2)
    		{
    			$.gallery.loadImage(photos[id].thumbs[i].lrg_image);
                $('#galleryCaption').html('<b>'+photos[id].thumbs[i].title+'</b>');
    		}
    		indx++;
        });
    	
    	$.gallery.currIndex = $.gallery.currIndex - 1;

    }
}