
//
// clas = ref to item to be turned into a pager (could be #id, .class, or whatever)
// options overrides settings
//

$.fn.pager = function(clas, options) {
	
	var settings = {		
		navId: 'nav',
		navClass: 'nav',
		navAttach: 'append',
		highlightClass: 'highlight',
		prevText: '&laquo;',
		nextText: '&raquo;',
		linkText: null,
		linkWrap: null,
		height: null,
		interval: 1500,
		loopAround:false,
		transition:'',
		transitionTime:300
	}

	if(options) $.extend(settings, options);
	
		
	return this.each( function () {
		
		var me = $(this);
		var size;
	  	var i = 0;		
		var navid = '#'+settings.navId;
		function pager_next_item() {
			if(i + 1 < size) {
					return(i+1);
				} else {
				    return(0);
			}
		}
		function pager_rotate () {
			hide();
			i=pager_next_item();
			show();
			highlight();
		}
		
		function init () {
			size = $(clas, me).not(navid).size();
			if(settings.height == null) {			
				settings.height = getHighest();
			}
//			alert('position of ' + $(me).attr("id") + ' is ' + $(me).attr('position'));
			$(me).attr('position','relative'); // put this in stylesheet instead?
			$(me).attr('margin-top','22px'); //  total hacks! why?
			$(me).find(clas).not(navid).attr({position:'absolute',top:'0px',left:'0px'});
			$(me).find(clas).not(navid).hide();
			
			if(size > 1) {
				makeNav();
				highlight();
				show();
			}			
			sizePanel();
			if(settings.linkWrap != null) {
				linkWrap();
			}
			console.log("me is " + me);
	        $(me).hover(
	          function() {
				  console.log("hover_in");
				  // what is "this" pointing to?
                    clearInterval(this.pager_interval);
                    
              }, 
			  
              function() {     
			  	console.log("hover_out");
	               this.pager_interval = setInterval(pager_rotate,settings.interval);                
             }
            );
		
			this.pager_interval = setInterval(pager_rotate,settings.interval);                
		}
		
		
		function makeNav () {		
			var str = '<div id="'+settings.navId+'" class="'+settings.navClass+'">';
			str += '<a href="#" rel="prev">'+settings.prevText+'</a>';
			for(var i = 0; i < size; i++) {
				var j = i+1;
				str += '<a class="'+ settings.navClass +'link" href="#" rel="'+j+'">';
				str += (settings.linkText == null) ? j : 
				(settings.linkText.length==1 ? settings.linkText[0] : settings.linkText[j-1]);				
				str += '</a>';
			}
			str += '<a href="#" rel="next">'+settings.nextText+'</a>';
			str += '</div>';
			switch (settings.navAttach) {		
				case 'before':
					$(me).before(str);
					break;
				case 'after':		
					$(me).after(str);
					break;
				case 'prepend':
					$(me).prepend(str);
					break;
				default:
					$(me).append(str);
					break;
			}
		}
		
		function hide() {
			var hide = $(me).find(clas).not(navid).get(i);
			switch (settings.transition) {
				case 'fade':
					
					$(hide).fadeOut(settings.transitionTime);
					break;
				default:
					$(hide).hide();
					break;
			}
		}
		
		function show () {
		
			var show = $(me).find(clas).not(navid).get(i);
			switch (settings.transition) {
				case 'fade':
					
					$(show).fadeIn(settings.transitionTime);
					break;
				default:
					
					$(show).show();
					break;
			}
		}		
		
		// bug was in here-- must look for the generated nav object, not the source object
		function highlight () {

			$(navid).find('a').removeClass(settings.highlightClass);
			var show = $(navid).find('a').get(i+1);		// something here goofy	
			$(show).addClass(settings.highlightClass);
			
		}

		function sizePanel () {
			if($.browser.msie) {
			//    alert("height: " +  settings.height );
				$(me).find(clas).not(navid).css( {
					height: settings.height 
				});
					
			} else {
			//    alert("minheight: " +  settings.height );
				$(me).find(clas).not(navid).css( {
					minHeight: settings.height
				});
			}
		}
		function getHighest () {
			var highest = 0;
			$(me).find(clas).not(navid).each(function () {
				
				if(this.offsetHeight > highest) {
					highest = this.offsetHeight;
				}
			});
			highest = highest + "px";
			return highest;
		}
		function getNavHeight () {
			var nav = $(navid).get(0);
			return nav.offsetHeight;
		}
		function linkWrap () {
			$(me).find(navid).find("a").wrap(settings.linkWrap);
		}
		
		function navClick () {
			if($(this).attr('rel') == 'next') {
				if(i + 1 < size) {
					i = i+1;
				} else { 
				    if (!(settings.loopAround)) { return false;}
				}
			} else if($(this).attr('rel') == 'prev') { 
				if(i > 0) {	
					i = i-1;
				} else { 
				   if  (!(settings.loopAround)){return false; }
				}
			} else {		
				var j = $(this).attr('rel');	
				i = j-1;		
			}
			show();
			highlight();
			return false;
        }
        
		init();	
		$(navid).find("a").click(navClick);	

	});	
}
