(function ($){
	$.fn.extend({
		photogallery: function(options){
			
			
			 var defaults = {  data:null,
			 						   kbshortcuts:true,
			 						   loop:true,
			 						   thumbs:null,
			 						   info:null,
			 						   nextlink:null,
			 						   prevlink:null,
			 						   meta:null,
			 						   desc1:null,
			 						   desc2:null,
			 						   metadelimiter:'/',
			 						   noimage:'../images/noimage.png'
			 						};  
              
            var options = $.extend(defaults, options);  
			
			return this.each(function(){
				var o = options;
				var obj = $(this);  
				
				 var images;
				 if(o.data ==null){
					images = $( "img", obj)
				}else{
					 imageList =  '<div>'
					for ( i = 0; i < o.data.length; i++ ) {
						imageList +=  '<a href="'+  o.data[i].src +'"></a>';
					}
					imageList +=  '</div>'
					images = $( "a", imageList)
				} 
				var mainhtml='<img class="photogallery-bigimage">';
				var thumbhtml ='<img class="prevthumb"  alt="previous image"/><img class="nextthumb"  alt="next image" />';
				var bigImage;
				var nextthumb;
				var prevthumb;
				var currentImageIndex=0;
				var nextIndex;
				var prevIndex;
				var totalItems = images.length;
						
				init();
				function init(){
					obj.html(mainhtml);
					obj.css({'width':'715px','height':'390px','overflow':'hidden','position':'relative'})
					bigImage= $('.photogallery-bigimage', obj);
					if(o.thumbs!=null){
						o.thumbs.html(thumbhtml);
						nextthumb = $('.nextthumb',o.thumbs);
						prevthumb = $('.prevthumb', o.thumbs);
						nextthumb.css({'cursor':'pointer'});
						prevthumb.css({'cursor':'pointer'});
					}
					 if(o.nextlink!=null){
					 	o.nextlink.css({'cursor':'pointer','position':'absolute','left':'665px','top':'174px'});
					 }
					 if(o.prevlink!=null){
					 	o.prevlink.css({'cursor':'pointer','position':'absolute','left':'10px','top':'174px'});
					 }
					 
					 
					
					 
				
					 
					initEvents();
					loadCurrent();
				}
				
				
				function initEvents(){
					if(o.thumbs!=null){
					 nextthumb.click(function (e) {nextImage()});
					
					 prevthumb.click(function (e) {prevImage()});
					}
					 if(o.nextlink!=null)o.nextlink.click(function (e) {nextImage()});
					 if(o.prevlink!=null)o.prevlink.click(function (e) {prevImage()});
					 if(o.kbshortcuts==true){
					 
					 $(document).keydown(function(e){
						   switch(e.keyCode) { 
							 case 39:// "right" arrow
								nextImage();
							 	break;
							 
							 case 37:// "left" arrow
							   	prevImage();
								break;
							}  });
					}
					slideShow = setInterval(nextImage, 8000);
				}
				
				function loadCurrent(){
					loadImage(images[currentImageIndex]);
					if(o.info!=null)showInfo(images[currentImageIndex].title);
					if(o.meta!=null)showMeta();
					if(o.thumbs!=null)showThumbs();
					if(o.desc1!=null)showDesc1();
					if(o.desc2!=null)showDesc2();
				}
				
				function loadImage(s){
				//console.log(s);
					if(s==null)return;
					bigImage.hide();
					$(bigImage).load(function () {
         			   $(this).fadeIn();
       				 }).error(function () {
            			// notify the user that the image could not be loaded
            			//console.log('error');
     				   }).attr('src', s);
				}
				
				function showInfo(i){
					if(o.info!=null)o.info.html(i);
				}
				
				function showMeta(){
					if(o.meta!=null)o.meta.html( (currentImageIndex +1) +o.metadelimiter+totalItems );
				}
				
				function showDesc1(){
					if(o.desc1!=null)jQuery(o.desc1).html( o.data[currentImageIndex].meta1  );
				}
				
				function showDesc2(){
					if(o.desc1!=null)jQuery(o.desc2).html( o.data[currentImageIndex].meta2  );
				}
				
				function showThumbs(){
					if(o.thumbs!=null){
						if(getNextIndex()!=currentImageIndex){
							nextthumb.attr('src', $(images[getNextIndex()]).children().attr('src'));
							nextthumb.css({'cursor':'pointer'});
							o.nextlink.css({'cursor':'pointer'});
						}else{
							nextthumb.attr('src', o.noimage);
							nextthumb.css({'cursor':'auto'});
							o.nextlink.css({'cursor':'auto'});
						}
						
						if(getPrevIndex()!=currentImageIndex){
							prevthumb.attr('src', $(images[getPrevIndex()]).children().attr('src'));
							prevthumb.css({'cursor':'pointer'});
							o.prevlink.css({'cursor':'pointer'});
						}else{
							prevthumb.attr('src', o.noimage);
							prevthumb.css({'cursor':'auto'});
							o.prevlink.css({'cursor':'auto'});
						}
					}
				}
				function nextImage(){
					var n = getNextIndex();
					if(n!=currentImageIndex){
						currentImageIndex=n;
						loadCurrent();
					}
				}
				
				function prevImage(){
					var n = getPrevIndex();
					if(n!=currentImageIndex){
						currentImageIndex=n;	
						loadCurrent();
					}
				}
				
				function getNextIndex(){
					if(currentImageIndex == totalItems-1){
						if(o.loop==true){
							return 0;
						}else{
							return currentImageIndex;
						}
					}else{
						return currentImageIndex + 1;
					}
				}
				
				function getPrevIndex(){
					if(currentImageIndex == 0){
						if(o.loop==true){
							return totalItems-1;
						}else{
							return currentImageIndex;
						}
					}else{
						return currentImageIndex - 1;
					}
				}
				
			
			});
		}
	})
}) (jQuery);

