AgilePHP.BannerRotator = {

		author : 'Jeremy Hahn',
		copyright: 'Make A Byte, inc',
		banners : [],

		/**
		 * Performs an AJAX request using the AgilePHP MVC system, which invokes
		 * AdController::getAds to return a JSON formatted array of banner objects.
		 */
		rotateBanners : function() {

			    AgilePHP.MVC.setController( 'BannerController' );
			    AgilePHP.MVC.processRequest( this.bannerHandler );
		},

		/**
		 * AJAX callback handler for rotateBanners. Parses the JSON array containing
		 * the banners available for rotation and begins the rotation process.
		 * 
		 * @param {Object} The XMLHttpRequest object as returned by AgilePHP.MVC.processRequest
		 * @return void 
		 */
		bannerHandler : function( xhr ) {

				try {

					var banners = eval( '(' + xhr.responseText + ')' );
					if( banners.length ) {

						AgilePHP.BannerRotator.banners = banners;
						setTimeout( 'AgilePHP.BannerRotator.rotate()', 5000 );
					}
				}
				catch( e ) {

					AgilePHP.debug( e );
				}
		},

		/**
		 * Displays a random banner every 5 seconds. The same banner can be displayed may be
		 * shown more than once, but never one right after the other.
		 * 
		 * @param lastBanner The banner array index which was last shown.
		 * @return void
		 */
		rotate : function( lastBanner ) {

				var rand = Math.floor( Math.random() * (this.banners.length) );

				// Dont show the same banner twice in a row
				if( lastBanner != undefined && lastBanner == rand ) {

					this.rotate( rand );
					return;
				}

				var html = ( AgilePHP.BannerRotator.banners[rand].url != null ) ? 
					  '<a href="' + AgilePHP.BannerRotator.banners[rand].url + '"><img border="0" src="' + AgilePHP.BannerRotator.banners[rand].src + '"/></a>'
					  : '<img border="0" src="' + AgilePHP.BannerRotator.banners[rand].src + '"/>';

				document.getElementById( 'banner' ).innerHTML = html;
				setTimeout( 'AgilePHP.BannerRotator.rotate( ' + rand + ')', 5000 );
		}
}
