// 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 = {
	cre8: {
		setDynamic: function() {
			Dom.addClass(document.body, "dynamic");
		},
		setup: function() {
			var fadeInAttrs = {opacity: {to: 1.0}};
			var fadeOutAttrs = {opacity: {to: 0.0}};
			
			var projTrigs = Dom.getElementsByClassName("projTrig","a");
			for (var i=0; i<projTrigs.length; i++) {
				projTrigs[i].onmouseover = RS.cre8.swapBG;
			}
			var mainimg = document.getElementById("mainimg");
			if (mainimg) {
				
				RS.cre8.mainimg = mainimg;
				
				mainimg.fadein = new YAHOO.util.Anim(mainimg,fadeInAttrs,0.5,YAHOO.util.Easing.easeIn);
				mainimg.fadeout = new YAHOO.util.Anim(mainimg,fadeOutAttrs,0.25,YAHOO.util.Easing.easeOut);				
				
				var mainTrigs = Dom.getElementsByClassName("mainTrig","a");
				for (var i=0; i<mainTrigs.length; i++) {
					mainTrigs[i].mainimg = mainimg;
					mainTrigs[i].triggers = mainTrigs;
					mainTrigs[i].onclick = RS.cre8.swapMain;
					if (i+1 < mainTrigs.length) {
						mainTrigs[i].nextTrig = mainTrigs[i+1];
					} else {
						mainTrigs[i].nextTrig = mainTrigs[0];
					}
				}
				if (mainTrigs.length > 0) {
					var mainimg = document.getElementById("mainimg");
					mainimg.currentSwitcher = mainTrigs[0];
					mainimg.onclick = RS.cre8.nextMain;
					mainimg.style.cursor = "pointer";
				}
				RS.cre8.preloadNextImage();
			}

			if (RS.cre8.coverImages && RS.cre8.coverImages.length > 1) {
				// set up the image cycle

				// the container imag
				var coverImage = document.getElementById("coverImage");
				RS.cre8.mainimg = document.createElement("img");
				RS.cre8.mainimg.setAttribute("width","880");
				RS.cre8.mainimg.setAttribute("height","464");
				Dom.setStyle(RS.cre8.mainimg, 'opacity', 0.0);
				coverImage.appendChild(RS.cre8.mainimg);

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

				};

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

				RS.cre8.coverImages.shuffle();

				RS.cre8.mainimg.currentImage = RS.cre8.coverImages.random();
				RS.cre8.mainimg.src = RS.cre8.mainimg.currentImage.imageURL;
				
				RS.cre8.mainimg.onload = function() {
					RS.cre8.mainimg.fadein.animate();					
				}
			}
		},
		waitNext: function() {
			window.setTimeout('RS.cre8.mainimg.fadeout.animate()',4000);
			if (!RS.cre8.mainimg.currentImage.preload) {
				RS.cre8.mainimg.currentImage.preload = document.createElement("img");
				RS.cre8.mainimg.currentImage.preload.src = RS.cre8.mainimg.currentImage.nextImage.imageURL;
			}
		},
		fadeNext: function() {
			RS.cre8.mainimg.currentImage = RS.cre8.mainimg.currentImage.nextImage;
			RS.cre8.mainimg.src = RS.cre8.mainimg.currentImage.imageURL;
			RS.cre8.mainimg.fadein.animate();
		},
		nextMain: function() {
			this.currentSwitcher = this.currentSwitcher.nextTrig;
			for (var i=0; i < this.currentSwitcher.triggers.length; i++) {
				Dom.removeClass(this.currentSwitcher.triggers[i],"on");
			};
			RS.cre8.preloadNextImage();
			Dom.addClass(this.currentSwitcher,"on");
			this.fadeout.onComplete.subscribe(RS.cre8.fadeInMain);
			this.fadeout.animate();
			return false;
		},
		swapMain: function() {
			for (var i=0; i < this.triggers.length; i++) {
				Dom.removeClass(this.triggers[i],"on");
			};
			Dom.addClass(this,"on");
			RS.cre8.preloadNextImage();
			this.mainimg.fadeout.onComplete.subscribe(RS.cre8.fadeInMain);
			this.mainimg.fadeout.animate();
			this.mainimg.currentSwitcher = this;
			return false;
		},
		preloadNextImage: function() {
			var nextTrigger = RS.cre8.mainimg.currentSwitcher.nextTrig;
			if (nextTrigger.image == null) {
				// preload the image
				nextTrigger.image = document.createElement("img");
				nextTrigger.image.loaded = false;
				nextTrigger.image.onload = RS.cre8.imageLoaded;
				nextTrigger.image.src = nextTrigger.href;
			}			
		},
		imageLoaded: function() {
			this.loaded = true;
		},
		fadeInMain: function() {
			if (RS.cre8.mainimg.currentSwitcher.getAttribute("title")) {
				RS.cre8.mainimg.setAttribute("title",RS.cre8.mainimg.currentSwitcher.getAttribute("title"));
				RS.cre8.mainimg.setAttribute("alt",RS.cre8.mainimg.currentSwitcher.getAttribute("alt"));
			}
			if (!RS.cre8.mainimg.currentSwitcher.image.loaded) {
				RS.cre8.mainimg.currentSwitcher.image.onload = function () {
					this.loaded = true;
					RS.cre8.mainimg.src = this.src;					
					RS.cre8.mainimg.fadein.animate();
				}
			} else {
				RS.cre8.mainimg.src = RS.cre8.mainimg.currentSwitcher.href;
				RS.cre8.mainimg.fadein.animate();				
			}
		},
		swapBG: function() {
			var picFrame, picFrameId = "categoryImg"+this.id.replace(/col_([0-9]+)_[0-9]+/,"$1");
			if (picFrame = document.getElementById(picFrameId)) {
				Dom.setStyle(picFrame,"background-image",Dom.getStyle(this,"background-image"));
			}
		}
	}
};

// Event.onAvailable(document.body,RS.cre8.setDynamic, RS.cre8);
Event.onDOMReady(RS.cre8.setup, RS.cre8, true);

