// Array.random( range ) - Return a random element, optionally up to or from range
Array.prototype.random = function( r ) {
 var i = 0, l = this.length;
 if( !r ) { r = this.length; }
 else if( r > 0 ) { r = r % l; }
 else { i = r; r = l + r % l; }
 return this[ Math.floor( r * Math.random() - i ) ];
};

// Array.shuffle( deep ) - Randomly interchange elements
Array.prototype.shuffle = function( b ) {
 var i = this.length, j, t;
 while( i ) {
  j = Math.floor( ( i-- ) * Math.random() );
  t = b && typeof this[i].shuffle!=='undefined' ? this[i].shuffle() : this[i];
  this[i] = this[j];
  this[j] = t;
 }
 return this;
};

var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var RS = { 
	oca: {
		setup: function() {
			Dom.addClass(document.body, "dynamic"); 
			var swaps = Dom.getElementsByClassName("swapimg","img");
			for (var i=0; i<swaps.length; i++) {
				swaps[i].in_src = "/img/dynamic/"+swaps[i].id.replace("img_","")+".jpg";
				swaps[i].out_src = swaps[i].src;
				swaps[i].onmouseover = RS.oca.swapin;
				swaps[i].onmouseout = RS.oca.swapout;
				// preload
				var img = document.createElement("img");
				img.src = swaps[i].in_src;
			}

			var movieTriggers = Dom.getElementsByClassName("movieSwitcher","a");
			for (var i=0; i<movieTriggers.length; i++) {
                movieTriggers[i].onclick = RS.oca.showMovie;
			}			
			
			var switchers = Dom.getElementsByClassName("imageSwitcher","a");
			for (var i=0; i<switchers.length; i++) {
				switchers[i].switchers = switchers;
				switchers[i].onclick = RS.oca.imgswitch;
				if (i+1 < switchers.length) {
					switchers[i].nextSwitcher = switchers[i+1];
				} else {
					switchers[i].nextSwitcher = switchers[0];					
				}
			}	
			
			if (switchers.length > 0) {
				var mainimg = document.getElementById("mainimg");
				mainimg.currentSwitcher = switchers[0];
				mainimg.onclick = RS.oca.mainimgSwitch;
				mainimg.style.cursor = "pointer";
			}
			
			var links = document.getElementsByTagName("a");		
			for (var i=0; i<links.length; i++) {
				var bgImage;
				if (bgImage = Dom.getStyle(links[i],"background-image")) {
					if (bgImage.match(/\.png/i)) {
						if (bgImage.match(/-on\.png/i)) {
							// preload the off image
							var offImg = bgImage.replace(/url\(|\)/gi,"").replace(/-on\.png/i,".png");
							var preloadImg = document.createElement("img");
							preloadImg.src = offImg;
						} else {
							// preload the on image
							var onImg = bgImage.replace(/url\(|\)/gi,"").replace(/\.png/i,"-on.png");;
							var preloadImg = document.createElement("img");
							preloadImg.src = onImg;
						}											
					}
				}
			}	
			
		},
		mainimgSwitch: function() {
			this.currentSwitcher = this.currentSwitcher.nextSwitcher;
			for (var i=0; i < this.currentSwitcher.switchers.length; i++) {
				Dom.removeClass(this.currentSwitcher.switchers[i],"current");
			};
			Dom.addClass(this.currentSwitcher,"current");
			this.src = this.currentSwitcher.href;
			return false;			
		},
		imgswitch: function() {
            RS.oca.hideMovie();		    
			var mainimg = document.getElementById("mainimg");
			if (mainimg) {
			    Dom.setStyle(mainimg,'display','block');
				for (var i=0; i < this.switchers.length; i++) {
					Dom.removeClass(this.switchers[i],"current");
				};
				Dom.addClass(this,"current");
				mainimg.src = this.href;
				return false;
			}
		},
		hideMovie: function() {
        var movie = null;
		  if (movie = document.getElementById('movie')) {
		      if (movie.tagName.toUpperCase() == 'VIDEO') {
		          movie.parentNode.removeChild(movie);
		      } else {
		          swfobject.removeSWF('movie');		          
		      }
		  } 
          Dom.removeClass(Dom.getElementsByClassName("movieSwitcher","a"),"current");
		},
		showMovie: function() {
		    RS.oca.hideMovie();
		    Dom.addClass(this,"current");		    
            Dom.removeClass(Dom.getElementsByClassName("imageSwitcher","a"),"current");
            // find the container
            var image = document.getElementById('image');
			var mainimg = document.getElementById("mainimg");
			if (mainimg) {
			    Dom.setStyle(mainimg,'display','none');
            }
            var postersrc = null;
            var movieImages = Dom.getElementsByClassName("movieImage","img",this);
            if (movieImages.length) {
                postersrc = movieImages[0].src;
            }       
            // Is this an mp4 file?
            if (this.href.match(/\.mp4$/i)) {
                var video = document.createElement('video');
                // can we use HTML 5 video?
                if (typeof video.canPlayType === 'function' && video.canPlayType('video/mp4;codecs="avc1.4D401E, mp4a.40.2"') != 'no') {                
                    video.id = 'movie';
                    if (postersrc != null) {
                        video.poster = postersrc;                    
                    }
                    video.src = this.href;
                    video.width = 684;
                    video.height = 423;
                    video.controls = true;
                    video.autoplay = false;
                    Dom.setStyle(video, 'background-color', '#221e1f');
                    image.appendChild(video);
                    return false;
                }                
            }
            if (swfobject.hasFlashPlayerVersion('9')) {
                // video container div
                var movie = document.createElement('div');
                movie.id = 'movie';
                image.appendChild(movie);
                // swfobject
                var flashvars = {
                    allowfullscreen: 'true',
                    displayheight: 423,
                    backcolor: '0x#404041',
                    screencolor: '0x#221e1f',
                    controlbar: 'over',
                    skin: '/swf/plain.swf',
                    icons: 'false',
                    file: this.href
                };
                if (postersrc != null) {
                    flashvars.image = postersrc;
                }
                var params = {
                  menu: "false"
                };
                var attributes = {
                };            
                swfobject.embedSWF("/swf/player.swf", "movie", "684", "423", "9.0.0",null, flashvars, params, attributes);
                return false;                
            }
        },
		swapin: function() {
			this.src = this.in_src;
		},
		swapout: function() {
			this.src = this.out_src;
		},
		showMasthead: function() {
			var titleImage = titleImages[Math.floor(Math.random()*titleImages.length)];
			var title = document.getElementById("title");
			var masthead = document.createElement("div");
			masthead.id = "masthead";
			masthead.style.background = "url(/img/dynamic/"+titleImage.src+")";				
			title.appendChild(masthead);			
		},
		showMainimg: function() {
		    RS.oca.hideMovie();
			var image = mainImages[Math.floor(Math.random()*mainImages.length)];
			var mainimgContainer = document.getElementById("mainimgContainer");			
			var mainimg = document.createElement("img");
			mainimg.id = "mainimg";
			mainimg.setAttribute("width",684);
			mainimg.setAttribute("height",325);
			mainimg.src = "/img/dynamic/"+image.src;
			mainimgContainer.appendChild(mainimg);			
		},
		waitNext: function() {
			window.setTimeout('RS.oca.mainimg.fadeout.animate()',4000);
			if (!RS.oca.mainimg.currentImage.preload) {
				RS.oca.mainimg.currentImage.preload = document.createElement("img");
				RS.oca.mainimg.currentImage.preload.src = '/img/dynamic/'+RS.oca.mainimg.currentImage.nextImage.src;
			}
		},	
		fadeNext: function() {
			RS.oca.mainimg.currentImage = RS.oca.mainimg.currentImage.nextImage;
			RS.oca.mainimg.src = '/img/dynamic/'+RS.oca.mainimg.currentImage.src;
			RS.oca.mainimg.fadein.animate();
		},				
		indexSetup: function() {
		    RS.oca.showMainimg();
		    
			var fadeInAttrs = {opacity: {to: 1.0}};
			var fadeOutAttrs = {opacity: {to: 0.0}};		    
			// the container imag
			RS.oca.mainimg = document.getElementById("mainimg");
			RS.oca.mainImages = mainImages;
			Dom.setStyle(RS.oca.mainimg, 'opacity', 0.0);

			for (var i=0; i < RS.oca.mainImages.length; i++) {
				if (i+1 < RS.oca.mainImages.length) {
					RS.oca.mainImages[i].nextImage = RS.oca.mainImages[i+1];
				} else {
					RS.oca.mainImages[i].nextImage = RS.oca.mainImages[0];
				}

			};

			RS.oca.mainimg.fadein = new YAHOO.util.Anim(RS.oca.mainimg,fadeInAttrs,0.8,YAHOO.util.Easing.easeIn);
			RS.oca.mainimg.fadeout = new YAHOO.util.Anim(RS.oca.mainimg,fadeOutAttrs,0.7,YAHOO.util.Easing.easeOut);
			RS.oca.mainimg.fadein.onComplete.subscribe(RS.oca.waitNext);
			RS.oca.mainimg.fadeout.onComplete.subscribe(RS.oca.fadeNext);

			RS.oca.mainImages.shuffle();

			RS.oca.mainimg.currentImage = RS.oca.mainImages.random();
			RS.oca.mainimg.src = '/img/dynamic/'+RS.oca.mainimg.currentImage.src;
			
			RS.oca.mainimg.onload = function() {
				RS.oca.mainimg.fadein.animate();
			}
		}
	}
};

Event.onAvailable("title",RS.oca.showMasthead, RS.oca, true);
Event.onDOMReady(RS.oca.setup, RS.oca, true);