  function cycleBanner(imageid) {
  		var d= document.getElementById(imageid);
  		if(d && d.banners.length>0) {
	  		d.currentBannerIndex= (d.currentBannerIndex+1) % d.banners.length;
	  		var currentBanner= d.banners[d.currentBannerIndex];
	  		for(var i=0; i<d.bannerImg.length; ++i) {
  				d.bannerImg[i].src= currentBanner.image;
  			}
	  		for(var i=0; i<d.bannerCaption.length; ++i) {
	  			d.bannerCaption[i].innerHTML= currentBanner.caption;
	  		}
	  		for(var i=0; i<d.bannerLink.length; ++i) {
	  			d.bannerLink[i].href= currentBanner.link;
	  		}
	  		
			window.setTimeout("cycleBanner('"+imageid+"')", d.timeout);
  			
  		}
  }

  function startBanner(imageid) {
    	var d= document.getElementById(imageid);
  		if(d) {
  			
  			var b=d.getElementsByTagName("IMG");
  			
  			d.bannerCaption= new Array();
			d.bannerLink= new Array();
			d.bannerImg= new Array();
  			
	   		for(var i=0; i<b.length; ++i) {
	   			if(b[i].getAttribute('dojoType')=='bannerImage' ) {
		  			d.bannerImg.push(b[i]);
	   			}
	   		}
			
  			b=d.getElementsByTagName("span");
	   		for(var i=0; i<b.length; ++i) {
	   			if(b[i].getAttribute('dojoType')=='bannerCaption' ) {
		  			d.bannerCaption.push(b[i]);
	   			}
	   		}
  			
  			b=d.getElementsByTagName("a");
	   		for(var i=0; i<b.length; ++i) {
	   			if(b[i].getAttribute('dojoType')=='bannerLink' ) {
		  			d.bannerLink.push(b[i]);
	   			}
	   		}

			d.banners= new Array();
  			if(typeof eval(d.getAttribute('initialBannersProvider')) == "function")  {
  				var f= eval(d.getAttribute('initialBannersProvider'));
	  			d.banners= f();
			}  			
			
			

			
  			d.currentBannerIndex= Math.floor(Math.random() *  d.banners. length);
  			
  			var a= d.getAttribute('timeout');
  			if(a)  {
	  			d.timeout= a;
  				a= d.getAttribute('reloadFromServerTimeout');
				if(a) {
					d.serverTimeout= a;
					window.setTimeout("reloadBannerFromServer('"+imageid+"')",  d.serverTimeout);
				}
				cycleBanner(imageid);
			}
  			
  		}
   }
   
   function reloadBannerFromServer(imageid) {
    	var banner= document.getElementById(imageid);
  		if(banner) {
  			if(banner.getAttribute('serverUrl'))  {
	  			loadBannerFromServer(banner.getAttribute('serverUrl'), banner);
  			} else if(typeof eval(banner.getAttribute('onReload')) == "function")  {
  				var f= eval(banner.getAttribute('onReload'));
  				f(banner);
			}  			
  			window.setTimeout("reloadBannerFromServer('"+imageid+"')",  banner.serverTimeout);
		}
   }

   function loadBannerFromServer(serverUrl, banner) {
	dojo.io.bind(
		{
			url: serverUrl,
			method: "post",
		    content: {
		        bannername: banner.id,
		        timestamp: new Date().getTime() /* prevent caching. really needed?*/
		    },
			load: function(type, data, evt) {
						banner.currentBannerIndex=0;
						banner.banners= data;
					},
			error: function(type, error) {
						// alert("error " + type + " " + error); 
					},
			mimetype: "text/json"
		}
	);   
   	
   }


   
   function startBanners() {
   		var b= document.getElementsByTagName("DIV");
   		for(var i=0; i<b.length; ++i) {
   			if('banner'==b[i].getAttribute('dojoType') ) {
   				startBanner(b[i].id);
   			}
   		}
   }
   
