var requestURI = '',
templateDir = '',
headerColor = 'w',
allParticles = [],
iTickCount = 0,

kHeaderWidth = 900,
kHeaderHeight = 152,
kNewParticleGovernor = 4,
kMaxParticlesNum = 6,
kMaxParticleScale = 12,
kMaxParticleSpeed = 6,
kMinParticleStartX = 700,
kMaxParticleStartX = 1150,

headerParticleCanvas,
headerParticleContext;


function changeClass (elementID, newClass) {
	var element = document.getElementById(elementID);
	element.setAttribute("class", newClass); //For Most Browsers
	element.setAttribute("className", newClass); //For IE; harmless to other browsers.
}

function checkColor(){
	//Determine header color
	if(requestURI.indexOf('work') > -1){
		headerColor = 'y';
	}else if(requestURI.indexOf('blog') > -1){
		headerColor = 'w';
	}else{
		switch(requestURI){
			case '/work/':
				headerColor = 'y';
				break;
			case '/about/':
				headerColor = 'r';
				break;
			case '/resume/':
				headerColor = 'b';
				break;
			case '/blog/':
				headerColor = 'w';
				break;
			case '/':
				headerColor = 'w';
				break;
			default:
				headerColor = 'y';
				break;
		}
	}
	
	//Set header color
	if(headerColor == 'y'){
		changeClass('header','header_y');
		changeClass('footer','stripe_bkg_y');
	}else if(headerColor == 'r'){
		changeClass('header','header_r');
		changeClass('footer','stripe_bkg_r');
	}else if(headerColor == 'b'){
		changeClass('header','header_b');
		changeClass('footer','stripe_bkg_b');
	}else{
		changeClass('header','header_w');
		changeClass('footer','stripe_bkg_w');
	}
}

function manageHeaderVersion() {
	//Check for canvas context
	var headerBkgCanvas = document.createElement('canvas');
	if(headerBkgCanvas.getContext){
		//Set up background canvas
		var headerBkgDIV = document.getElementById('headerBkg');
		headerBkgCanvas.width = kHeaderWidth;
		headerBkgCanvas.height = kHeaderHeight;
		headerBkgCanvas.style.marginTop = '-18px';
		headerBkgCanvas.style.zIndex = '1';
		headerBkgDIV.appendChild(headerBkgCanvas);
		var headerBkgContext = headerBkgCanvas.getContext('2d');
				
		//Load bbackground images
		var headerBkg = new Image();
		headerBkg.src = templateDir+'/img/stripePattern_'+headerColor+'.png'; 
		headerBkg.onload = function() { 
			for(var x = 0; x < kHeaderWidth; x += 9) {
				for(var y = 0; y < kHeaderHeight; y += 10) {
					headerBkgContext.drawImage(headerBkg, x, y);
				} 
			}
			
			//Load logo image (in onLoad to ensure logo is on top of bkg)
			var headerLogo = new Image(); 
			headerLogo.src = templateDir+'/img/headerTitle.png'; 
			headerLogo.onload = function() { 
				headerBkgContext.drawImage(headerLogo, 0, 0); 
			};
		};
		
		//Set up particle canvas
		headerParticleCanvas = document.createElement('canvas');
		headerParticleCanvas.width = kHeaderWidth;
		headerParticleCanvas.height = kHeaderHeight;
		headerParticleCanvas.style.marginTop = '-'+kHeaderHeight+'px';
		headerParticleCanvas.style.zIndex = '2';
		headerBkgDIV.appendChild(headerParticleCanvas);
		headerParticleContext = headerParticleCanvas.getContext('2d');
		
		//Setup animation
		setInterval(onTick, 1000/30);
		
	}else{
		//Set up SWFObject for SWF header
		swfobject.embedSWF(
						   templateDir+'/img/header_particles.swf', 
						   'headerBkg', 
						   kHeaderWidth, 
						   kHeaderHeight, 
						   '9',
						   templateDir+'/includes/expressinstall.swf',
						   {bkgColor: headerColor},
						   {menu:'false',wmode:'transparent'});
	}
}

function onTick(){
	//Create new particle
	if(allParticles.length < kMaxParticlesNum && iTickCount % kNewParticleGovernor == 0){
		var randScale = Math.random() * kMaxParticleScale;
		var newRadius = randScale * 5;
		var newParticle = new headerParticle(
								kMinParticleStartX + (Math.random() * (kMaxParticleStartX - kMinParticleStartX)), 
								0 - newRadius, 
								newRadius, 
								(kMaxParticleSpeed / randScale)
								);
		allParticles.push(newParticle);
	}
	
	//Clear drawing context
	headerParticleCanvas.width = kHeaderWidth;
	headerParticleCanvas.height = kHeaderHeight;
	
	//Move particles
	for(var i = 0; i < allParticles.length; i++){
		var thisParticle = allParticles[i];
		thisParticle.render(headerParticleContext);
		thisParticle.update();
		
		//Check for out of bounds and recycle
		if(thisParticle.posY - thisParticle.radius > kHeaderHeight){
			allParticles.splice(allParticles.indexOf(thisParticle), 1);
			thisParticle = null;
		}		
	}
	
	iTickCount++;
}


$(document).ready(function() {
	$("#navigation > li > a").hover(
						function(event){
							$(this).animate({opacity: .25}, 0);
							$(this).animate({opacity: 1}, 400);
						 }
						 ,function(event){
							 /*
							 $(this).animate({opacity: .5}, 0);
							 $(this).animate({opacity: 1}, 200);
							 */
						 });
						 
	checkColor();
	manageHeaderVersion();
});
