function get_time_difference(earlierDate, laterDate) {
       var nTotalDiff = laterDate.getTime() - earlierDate.getTime();
       var oDiff = new Object();
 
       oDiff.days = Math.floor(nTotalDiff/1000/60/60/24);
       nTotalDiff -= oDiff.days*1000*60*60*24;
 
       oDiff.hours = Math.floor(nTotalDiff/1000/60/60);
       nTotalDiff -= oDiff.hours*1000*60*60;
 
       oDiff.minutes = Math.floor(nTotalDiff/1000/60);
       nTotalDiff -= oDiff.minutes*1000*60;
 
       oDiff.seconds = Math.floor(nTotalDiff/1000);
 
       return oDiff;
}

// Banner Item object
function banner(id, leftPaneId, rightPaneId) {
	this.id = id;	
	this.selected = false;
	
	this.select = function() {
		this.selected = true;
		$('#' + id).addClass('selected');
	}
	
	this.deselect = function() {
		this.selected = false;
		$('#' + id).removeClass('selected');
	}
}

// BannerRotator object
function bannerRotator(objName) {

	// var - private properties, private methods
	var timestamp = new Date();
	
	var animationCompleted = true;
	
    var delay = 300;

	var selectedBanner = 0;
	
	var rotatorObj = objName;
	
	var bannerList = [];
	
	function init() {

		var banners = $('.banner-rotator .banner');
		var paging = $('.banner-rotator .paging');

		for (var i = 0; i < banners.length; i++) {
			
			bannerList[i] = new banner(banners[i].id);
			paging.append('<li id="slide_' + i + '" onclick="' + rotatorObj + '.goTo(' + i + ');"><a></a></li>');

		}
		
		bannerList[selectedBanner].select();
		$('#slide_' + selectedBanner).addClass('selected');

	}
    
    function construct() {
    	// this. - public properties, public methods
    	
		init();
		
		this.animationEnd = function() {
			return animationCompleted;
		}
		
		this.next = function() {
			timestamp = new Date();
			
			bannerList[selectedBanner].deselect();
			$('#slide_' + selectedBanner).removeClass('selected');

			setTimeout(function() {
					selectedBanner = (selectedBanner + 1) % bannerList.length;
					
					$('#slide_' + selectedBanner).addClass('selected');
					
					bannerList[selectedBanner].select();
				}, 
				delay
			);

		}
		
		this.previous = function() {
			timestamp = new Date();

			bannerList[selectedBanner].deselect();
			$('#slide_' + selectedBanner).removeClass('selected');

			setTimeout(function() {
					selectedBanner = (bannerList.length + selectedBanner - 1) % bannerList.length;

					$('#slide_' + selectedBanner).addClass('selected');
					
					bannerList[selectedBanner].select();
				}, 
				delay
			);

		}

		this.goTo = function(slide) {
			timestamp = new Date();

			bannerList[selectedBanner].deselect();
			$('#slide_' + selectedBanner).removeClass('selected');
			
			setTimeout(function() {
					selectedBanner = slide;
					
					$('#slide_' + selectedBanner).addClass('selected');
					
					bannerList[selectedBanner].select();
				}, 
				delay
			);

		}
		
		this.start = function(obj, interval) {
			timestamp = new Date();

			setInterval(function(){
					var now = new Date();
					
					timeDiff = get_time_difference(timestamp, now);
					
					if (timeDiff.seconds >= interval) {
						obj.next();
					}
				}, 
				1000
			);
		}
		
		this.refreshTimestamp = function() {
		
			timestamp = new Date();

		}

    }  // constructor
 
    return new construct();
}
