// testing
function trace(content, add) {
	if (add) {
		$('#tdp').html($('#tdp').html()+content);
	} else {
		$('#tdp').html(content);
	}
}

$(document).ready(function(){
	
	// creating sliced image
	justBecause = new sliceObj('paranoid','sliceDump',5);
	justBecause.sliceUp();
	
	// button fucntionality
	$('#button').click(function(){
		if (btn.active) {
			if (!btn.flkr) {
				btn.startFlkr();
				btn.flkrVirgin = false;
			} else {
				btn.stopFlkr();
			}
		} else if (!btn.freeze) {
			btn.freeze = true
			$(this).animate({'background-color':'#000','opacity':'.1'},1000)
			var leftName = new growText('moenen erbuer | design','leftName','right');
			var leftMail = new growText('moenen@shapish.com','leftMail','right',function(){
				$('#moenenContact').html("<a id='leftMail' href='mailto:moenen@shapish.com'>moenen@</a><a href='http://www.shapish.com' target='blank'>shapish.com</a>")
			})
			var rightName = new growText('code | tobias boonstoppel','rightName','left')
			var rightMail = new growText('boonstoppel@gmail.com','rightMail','left')
		} else if (!btn.flkrVirgin){
			if(btn.flkr) {
				btn.stopFlkr();
			} else {
				btn.startFlkr();
			}
		}
	});
	$("#button").hover(
		function() {
			if (!btn.freeze) { btn.boo(true) }
		},
		function() {
			if (!btn.freeze) { btn.boo(false) }
		}
	);
	
});







////////////////////////////////////////////////////////////////
/////* SLICED IMAGE *///////////////////////////////////////////
////////////////////////////////////////////////////////////////

// creating slice object
function sliceObj(id, dump, sliceWidth) {
	this.img = document.getElementById(id);
	this.sliceWidth = sliceWidth;
	this.infect = Math.ceil(this.img.width/this.sliceWidth);
	this.dump = $('#'+dump);
	this.ar = new Array();
};

// slice up the image
sliceObj.prototype.sliceUp = function() {
	this.armed = true;
	for (var i=0; i<this.infect; i++) {
		var slice = document.createElement('div');
		slice.style.width = this.sliceWidth+'px';
		slice.style.height = this.img.height+'px';
		slice.setAttribute('class', 'slice');
		slice.setAttribute('id', 's'+i);
		slice.style.background = 'url('+this.img.src+') '+(i*-this.sliceWidth)+"px 0 no-repeat";
		slice.rLeft = (Math.random()-.5)*40;
		slice.masterObj = this;
		$(this.dump)[0].appendChild(slice);
		this.ar.push(slice);
		slice.shockWave = shockWave;
		$(slice).mouseover(function(){
			if(this.masterObj.armed) {
				this.shockWave()
				btn.active = false;
			}
		})
	}
}
// break down the image
function shockWave() {
	this.sliceNr = parseFloat(this.id.replace('s',''));
	this.masterObj.armed = false;
	for (var i=0; i<this.masterObj.infect*2; i++) {
		var curSliceNr = (this.sliceNr-this.masterObj.infect)+i;
		var curSlice = this.masterObj.ar[curSliceNr];
		if(curSlice) {
			curSlice.drop = drop;
			curSlice.masterObj = this.masterObj;
			curSlice.drop(i);
		}
	}
}

// drop slices
function drop(i) {
	var factor = this.masterObj.infect-Math.abs(i-this.masterObj.infect);
	var invFactor = this.masterObj.infect-factor;
	if (factor == 0) {
		factor = 1;
	}
	var r = 20+Math.random()*40
	var slice = this;
	setTimeout(function(){
		$(slice).animate({'top':600+'px' , 'left': slice.rLeft+'px','opacity':0},1500,'easeInCubic')
	},invFactor*r)
}







////////////////////////////////////////////////////////////////
/////* BUTTON */////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

// button rollover animation
var btn = new Object();
btn.active = true;
btn.flkr = false;
btn.freeze = false;
btn.flkrVirgin = true;
btn.boo = function(bool) {
	btn.clr = '';
	if (btn.active) {
		btn.clr = '#00c27b';
	} else {
		btn.clr = '#000';
	}
	if (bool) {
		$('#button').animate({'width':'20','height':'20','margin-top':'-75px','margin-left':'-10px','opacity':'1','background-color':btn.clr},400,'easeOutElastic');
	} else {
		$('#button').animate({'width':'10','height':'10','margin-top':'-70px','margin-left':'-5px','opacity':'.2','background-color':'#000'},400,'easeOutBounce');
	}
}

// start & stop the party
btn.startFlkr = function() {
	this.flkr = true;
	this.ivId = setInterval(function() {
		var clr = randomColor();
		document.body.style.background = clr;
	}, 50)
	soundManager.music.play();
}
btn.stopFlkr = function() {
	this.flkr = false;
	clearInterval(this.ivId);
	soundManager.music.pause();
}







////////////////////////////////////////////////////////////////
/////* TEXT EFFECT *////////////////////////////////////////////
////////////////////////////////////////////////////////////////

// text animation object
var growText = function(string, dump, dir, callback) {
	this.disp = new Array();
	this.rLetters = 'abcdefghijklmnopqrstuvwxyz1234567890';
	this.rTrail = 5;
	this.string = string;
	if (callback){ this.callback = callback;}
	this.dump = document.getElementById(dump)
	if (dir == 'left') {
		this.i = string.length-1;
		this.animate = growLeft;
	} else {
		this.i = 0;
		this.animate = growRight;
	}
	var thisHolder = this;
	this.ivId = setInterval(function(){thisHolder.animate()}, 100);
}

// animation for left & right side
growRight = function() {
	if (this.i-this.rTrail < this.string.length) {
		for (var j=0; j<=this.rTrail; j++) {
			if (this.i-j >= 0) {
				if (j == this.rTrail) {
					var rChar = this.string[this.i-this.rTrail]
				} else if (this.i-j < this.string.length) {
					var rChar = this.rLetters[Math.floor(Math.random()*this.rLetters.length)];
				}
				if (rChar) {
					this.disp[this.i-j] = rChar;
				}
			}
		}
		this.dump.innerHTML = this.disp.join('');
		this.i ++;
	} else {
		clearInterval(this.ivId)
		if (this.callback){ this.callback(); }
	}
}
growLeft = function() {
	if (this.i+this.rTrail >= 0) {
		for (var j=0; j<=this.rTrail; j++) {
			if (this.i+j < this.string.length) {
				if (j == this.rTrail) {
					var rChar = this.string[this.i+this.rTrail]
				} else if (this.i+j > 0) {
					var rChar = this.rLetters[Math.floor(Math.random()*this.rLetters.length)];
				}
				if (rChar) {
					this.disp[this.i+j] = rChar;
				}
			}
		}
		this.dump.innerHTML = this.disp.join('');
		this.i --;
	} else {
		clearInterval(this.ivId)
		if (this.callback){ this.callback(); }
	}
}







////////////////////////////////////////////////////////////////
/////* PARTY *//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

// tool functions
function d2h(d) {return d.toString(16);}
function h2d(h) {return parseInt(h,16);}
function twodigit(n) {
	str = n+'';
	if (str.length == 1) {
		return '0'+str;
	} else {
		return str;
	}
}

// return random color
function randomColor(gray){
	if (gray) {
		var grayMin = 150;
		var grayMax = 255;
	}
	//
	var rMin = 0;
	var gMin = 0;
	var bMin = 0;
	//
	var rMax = 255;
	var gMax = 255;
	var bMax = 255;
	//
	if (gray) {
		rR = twodigit(d2h(Math.floor(grayMin+Math.random()*(grayMax-grayMin))));
		rG = rR;
		rB = rR;
	} else {
		var rR = twodigit(d2h(Math.floor(rMin+Math.random()*(rMax-rMin))));
		var rG = twodigit(d2h(Math.floor(gMin+Math.random()*(gMax-gMin))));
		var rB = twodigit(d2h(Math.floor(bMin+Math.random()*(bMax-bMin))));
	}
	var rColor = '#'+rR+rG+rB;
	return rColor;
}







////////////////////////////////////////////////////////////////
/////* MUSIC *//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

// soundmanager
soundManager.url = 'swf/';
soundManager.onload = function() {
	soundManager.music = soundManager.createSound({
		id: 'bgMusic',
		url: 'music/wir_werden_sehen_solomun_vox_remix.mp3',
		volume: 50
	});
	//soundManager.music.play();
}







////////////////////////////////////////////////////////////////
/////* PARTY *//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

// key navigation
var keyObj = new Object();
document.onkeydown = keyCheck;
function keyCheck(e) {
	var keyID = (window.event) ? event.keyCode : e.keyCode;
	switch(keyID) {
		case 32:
		case 13:
			// SPACE & ENTER for play/pause
			if (!btn.flkr) {
				btn.startFlkr();
				btn.flkrVirgin = false;
			} else {
				btn.stopFlkr();
			}
			break;
	}
}
