// BEZIER CODE CREDT : 13thParallel.org BeziŽr Curve Code  by Dan Pupius (www.pupius.net)   \\

var kahalawai;

window.addEvent('domready', function() {
	kahalawai = new Kahalawai();
});

var Kahalawai = new Class({

	options: {},
	
	initialize: function() {
		
		this.ie6 = Browser.Engine.trident && Browser.Engine.version == 4;
		this.bubbleAnimationPeriodical = null;
		this.jellyFishPeriodical = null;
		this.mantaRayPeriodical = null;
		this.jellyFishAnimationStage = 0.0;
		this.mantaRayAnimationStage = 0.0;
		this.honoAnimationStage = 0.0;
		this.honoPeriodical = null;
		this.bubbleAsset = null;
		this.contentArea = $('SiteContent');
		this.oceanGradient = null;
		this.bubbleFrame = null;
		this.embedOceanGradient();	
		this.stageCoords = null;
		this.addLeft = null;
		this.addTop = null;
		this.subLeft = null;
		this.JP1 = null;
		this.JP2 = null;
		this.JP3 = null;
		this.JP4 = null;
		this.RP1 = null;
		this.RP2 = null;
		this.RT1 = null;
		this.RT2 = null;
		this.HP1 = null;
		this.HP2 = null;
		this.HT1 = null;
		this.HT2 = null;
		this.setCoordinates();
		
		if(this.contentArea.getSize().y > 30) {
			this.bubbleAsset = new Asset.image('/WebObjects/Kahalawai.woa/Contents/WebServerResources/images/ocean/bubbles2.gif', { 
				'id' : 'bubbleAsset', 
				'class' : 'hidden',
				onload: function() {
					this.oceanAnimationSetUp();
				}.bind(this)
			});
		}
		
		window.addEvent('resize', function() {
			this.embedOceanGradient();
			this.setCoordinates();
			this.oceanAnimationSetUp();
		}.bind(this));
	
	},

	setCoordinates : function() {
		this.stageCoords = $('SiteContent').getCoordinates();
		this.addLeft = this.stageCoords.left + this.stageCoords.width;
		this.addTop = this.stageCoords.top;
		this.subLeft = this.stageCoords.left;
		this.JP1 = this.coord(this.addLeft + 100, this.addTop + 20);
		this.JP2 = this.coord(this.addLeft + 20, this.addTop + 20 + Math.round(this.stageCoords.height * .33));
		this.JP3 = this.coord(this.addLeft + 100, this.addTop + 20 + Math.round(this.stageCoords.height * .63));
		this.JP4 = this.coord(this.addLeft + 55, this.addTop + this.stageCoords.height);
		this.RP1 = this.coord(this.subLeft, this.addTop + Math.round(this.stageCoords.height * .8));
		this.RP2 = this.coord(this.subLeft, this.addTop + Math.round(this.stageCoords.height * .2));
		this.RT1 = this.coord(this.subLeft - 2000, this.addTop + Math.round(this.stageCoords.height * .0));
		this.RT2 = this.coord(this.subLeft, this.addTop + 50);
		this.HP1 = this.coord(this.addLeft + 300, this.addTop + Math.round(this.stageCoords.height * .6));
		this.HP2 = this.coord(this.addLeft - 50, this.addTop + Math.round(this.stageCoords.height * .2));
		this.HT1 = this.coord(this.addLeft + 200, this.addTop + Math.round(this.stageCoords.height * .8));
		this.HT2 = this.coord(this.addLeft - 200, this.addTop + Math.round(this.stageCoords.height * .2));
	},

	coord : function (x,y) { 
		if(!x) var x=0; 
		if(!y) var y=0; 
		return {x: x, y: y}; 
	},

	B1 : function(t) { return t*t*t; },
	B2 : function(t) { return 3*t*t*(1-t); }, 
	B3 : function(t) { return 3*t*(1-t)*(1-t); },
	B4 : function(t) { return (1-t)*(1-t)*(1-t); },
	H1 : function(t) { return 2*t*t*t - 3*t*t + 1; },
	H2 : function(t) { return -2*t*t*t + 3*t*t; },
	H3 : function(t) { return t*t*t - 2*t*t + t; },
	H4 : function(t) { return t*t*t - t*t; },
	
	getHermite : function(percent, p1, p2, t1, t2) {
		var pos = kahalawai.coord();
		pos.x = Math.round(kahalawai.H1(percent) * p1.x + kahalawai.H2(percent) * p2.x + kahalawai.H3(percent) * t1.x + kahalawai.H4(percent) * t2.x);
		pos.y = Math.round(kahalawai.H1(percent) * p1.y + kahalawai.H2(percent) * p2.y + kahalawai.H3(percent) * t1.y + kahalawai.H4(percent) * t2.y);
		return pos;                       
	},

	getBezier : function(percent) {
		var pos = kahalawai.coord();
		pos.x = kahalawai.JP1.x * kahalawai.B1(percent) + kahalawai.JP2.x * kahalawai.B2(percent) + kahalawai.JP3.x * kahalawai.B3(percent) + kahalawai.JP4.x * kahalawai.B4(percent);
		pos.y = kahalawai.JP1.y * kahalawai.B1(percent) + kahalawai.JP2.y * kahalawai.B2(percent) + kahalawai.JP3.y * kahalawai.B3(percent) + kahalawai.JP4.y * kahalawai.B4(percent);
		return pos; 
	},

	initializeJellyFish : function() {
		if(kahalawai.jellyFishPeriodical) $clear(kahalawai.jellyFishPeriodical);
		kahalawai.jellyFishAnimationStage = 0.0;
		$('jellyFish').setStyle('display', 'block');
	},
	
	initializeMantaRay : function() {
		if(kahalawai.mantaRayPeriodical) $clear(kahalawai.mantaRayPeriodical);
		$('mantaRay').setStyle('display', 'block');
		kahalawai.mantaRayAnimationStage = 0.0;
	},

	initializeHono : function() {
		if(kahalawai.honoPeriodical) $clear(kahalawai.honoPeriodical);
		$('hono').setStyle('display', 'block');
		kahalawai.honoAnimationStage = 0.0;
		$('hono').setStyles({
			'opacity' : kahalawai.roundNumber(kahalawai.honoAnimationStage, 1),
			'width' : 0,
			'height' : 0
		});
	},

	jellyFishAnimation : function() {
	
		kahalawai.jellyFishAnimationStage+=0.005;
		var curpos = kahalawai.getBezier(kahalawai.jellyFishAnimationStage);
	
		$('jellyFish').setStyles({
			'top' : Math.round(curpos.y) + "px",
			'left' : Math.round(curpos.x) + "px",
			'opacity' : kahalawai.roundNumber(.7-kahalawai.jellyFishAnimationStage, 1),
			'height' : 90 - (90 * kahalawai.jellyFishAnimationStage / 2),
			'width' : 41 - (41 * kahalawai.jellyFishAnimationStage / 2)
		});
	
		if(kahalawai.jellyFishAnimationStage>0.99) {
			$('jellyFish').setStyle('display', 'none');
			$clear(kahalawai.jellyFishPeriodical);
		}			
	},

	honoAnimation : function() {
		kahalawai.honoAnimationStage+=0.0025;
		var curpos = kahalawai.getHermite(kahalawai.honoAnimationStage, kahalawai.HP1, kahalawai.HP2, kahalawai.HT1, kahalawai.HT2);
		$('hono').setStyles({
			'top' : Math.round(curpos.y) + "px",
			'left' : Math.round(curpos.x) + "px",
			'opacity' : kahalawai.roundNumber(kahalawai.honoAnimationStage, 1),
			'width' : Math.round(83 * kahalawai.honoAnimationStage),
			'height' : Math.round(63 * kahalawai.honoAnimationStage)
		});
		if(kahalawai.honoAnimationStage>0.99) {
			$('hono').setStyle('display', 'none');
			$clear(kahalawai.honoPeriodical);
		}
	},

	mantaRayAnimation : function() {
		kahalawai.mantaRayAnimationStage+=0.005;
		var curpos = kahalawai.getHermite(kahalawai.mantaRayAnimationStage, kahalawai.RP1, kahalawai.RP2, kahalawai.RT1, kahalawai.RT2);
		$('mantaRay').setStyles({
			'top' : Math.round(curpos.y) + "px",
			'left' : Math.round(curpos.x) + "px",
			'opacity' : kahalawai.roundNumber(.8-kahalawai.mantaRayAnimationStage, 1),
			'width' : 95 - (95 * kahalawai.mantaRayAnimationStage / 2),
			'height' : 101 - (101 * kahalawai.mantaRayAnimationStage / 2)
		});
		if(kahalawai.mantaRayAnimationStage>0.99) {
			$('mantaRay').setStyle('display', 'none');
			$clear(kahalawai.mantaRayPeriodical);
		}
	},
	
	embedOceanGradient: function() {
		if(this.oceanGradient) $(this.oceanGradient.canvas).dispose();
		this.oceanGradient = new Gradient(window.getCoordinates().width, this.contentArea.getSize().y, ['transparent', '#1b4090'], true);
		$(this.oceanGradient.canvas).addClass('oceanGradient');
		$(this.oceanGradient.canvas).set('id', 'oceanGradient');
		if(window.getSize().x > window.getCoordinates().width) {
			$(this.oceanGradient.canvas).setStyle('left', Math.floor((window.getSize().x.toInt() - window.getCoordinates().width) / 2));				
		}
		document.body.appendChild(this.oceanGradient.canvas);
	},
	
	oceanAnimationSetUp : function() {
		if(this.bubbleAnimationPeriodical) $clear(this.bubbleAnimationPeriodical);
		if(this.jellyFishPeriodical) $clear(this.jellyFishPeriodical);
		if(this.mantaRayPeriodical) $clear(this.mantaRayPeriodical);
		if(this.honoPeriodical) $clear(this.honoPeriodical);

		if(this.bubbleFrame) this.bubbleFrame.dispose();
		if($('bubbles')) $('bubbles').dispose();
		var bubbles = new Element('img', { 'src' : this.bubbleAsset.src });
		var area = $('SiteContent').getCoordinates();
		var wCoords = window.getCoordinates();
		this.bubbleFrame = new Element('div', 
			{ 'class' : 'bubbleFrame', 'id' : 'bubbleFrame', 'styles' : {
				'overflow-x' : 'hidden', 
				'height' : area.height,
				'width' : wCoords.width	
			} 
		});

		document.body.appendChild(this.bubbleFrame);
		bubbles.set({
			'id': 'bubbles',
			'styles' : {
				'left' : (wCoords.width - 2000)/2,
				'opacity' : 0.8,
				'position' : 'absolute',
				'top' : (bubbles.height) + "px",
				'zIndex' : -1
			}
		});
		bubbles.inject(this.bubbleFrame);
		this.bubbleAnimation();
		this.bubbleAnimationPeriodical = this.bubbleAnimation.periodical(15000);
	},
	
	roundNumber : function(num, dec) {
		var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
		return result;
	},
	
	bubbleAnimation: function() {
		var bubbles = $('bubbles');
		bubbles.setStyle('top', bubbles.height);
		var bubbleAnimationFx = new Fx.Tween(bubbles, {
			property : 'top',
			duration : 10000,
			fps: 24,
//			transition : Fx.Transitions.Cubic.easeOut, 
			onComplete: function() {
				kahalawai.initializeJellyFish();
				kahalawai.initializeMantaRay();
				kahalawai.initializeHono();
				kahalawai.jellyFishPeriodical = kahalawai.jellyFishAnimation.periodical(40);
				kahalawai.mantaRayPeriodical = kahalawai.mantaRayAnimation.periodical(40);
				kahalawai.honoPeriodical = kahalawai.honoAnimation.periodical(40);
			}
		});	
		bubbleAnimationFx.start(-1 * bubbles.height);					
	}

});
