//dynamicShadow - Creates a dynamic shadow for images
//Defaults to shadow.gif, 10 width, no offset
//Note: Prototype Framework
function dynamicShadow(shadowURL, containerID, shadowWidth, shadowOffset) {
	var shadowURL = (shadowURL == null) ? "../images/global/shadowTest.gif" : shadowURL;
	var containerID = (containerID == null) ? "page-container" : containerID;
	var shadowWidth = (shadowWidth == null) ? 10 : shadowWidth;
	var shadowOffset = (shadowOffset == null) ? 0 : shadowOffset;


	var images = $$(
		'#' + containerID + ' img.shadow,'
		+ '#' + containerID + ' img.shadowLeft,'
		+ '#' + containerID + ' img.shadowRight,'
		+ '#' + containerID + ' img.shadowCenter');
	var imageClone;
	var imageHeight;
	var imageWidth;
	var shadowContainer;
	var shadowDiv = [];

	images.each(function (imageObject) {
		imageClone = Object.extend(imageObject);
		imageHeight = imageObject.getHeight();
		imageWidth = imageObject.getWidth();
		imageClass = imageObject.className;

		// Create the Shadow Container
		shadowContainer = new Element('div');
		shadowContainer.addClassName('shadowContainer');
		shadowContainer.addClassName(imageClass);
		shadowContainer.setStyle({
			position: 'relative',
			padding: shadowWidth + 'px',
			width: imageWidth + 'px',
			height: imageHeight + 'px',
			background: 'transparent'
		});

		// Create Top Left Div
		shadowDiv[0] = new Element('div');
		shadowDiv[0].setStyle({
			position: 'absolute',
			top: 0,
			left: 0,
			width: shadowWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") top left no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[0] });

		// Create Top Right Div
		shadowDiv[1] = new Element('div');
		shadowDiv[1].setStyle({
			position: 'absolute',
			top: 0,
			right: 0,
			width: shadowWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") top right no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[1] });

		// Create Bottom Right Div
		shadowDiv[2] = new Element('div');
		shadowDiv[2].setStyle({
			position: 'absolute',
			bottom: 0,
			right: 0,
			width: shadowWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") bottom right no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[2] });

		// Create Bottom Left Div
		shadowDiv[3] = new Element('div');
		shadowDiv[3].setStyle({
			position: 'absolute',
			bottom: 0,
			left: 0,
			width: shadowWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") bottom left no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[3] });

		// Create Center Top Div
		shadowDiv[4] = new Element('div');
		shadowDiv[4].setStyle({
			position: 'absolute',
			top: 0,
			left: shadowWidth + 'px',
			width: imageWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") top center no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[4] });

		// Create Center Right Div
		shadowDiv[5] = new Element('div');
		shadowDiv[5].setStyle({
			position: 'absolute',
			top: shadowWidth + 'px',
			right: 0,
			width: shadowWidth + 'px',
			height: imageHeight + 'px',
			background: 'transparent url("' + shadowURL + '") center right no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[5] });

		// Create Center Bottom Div
		shadowDiv[6] = new Element('div');
		shadowDiv[6].setStyle({
			position: 'absolute',
			bottom: 0,
			right: shadowWidth + 'px',
			width: imageWidth + 'px',
			height: shadowWidth + 'px',
			background: 'transparent url("' + shadowURL + '") bottom center no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[6] });

		// Create Center Right Div
		shadowDiv[7] = new Element('div');
		shadowDiv[7].setStyle({
			position: 'absolute',
			top: shadowWidth + 'px',
			left: 0,
			width: shadowWidth + 'px',
			height: imageHeight + 'px',
			background: 'transparent url("' + shadowURL + '") center left no-repeat'
		});
		shadowContainer.insert({ bottom: shadowDiv[7] });

		imageObject.replace(shadowContainer);

		shadowContainer.insert({ bottom: imageClone });

	});

	return false;
}

//First and Last LI Selector
//Note: Prototype Driven
function liFirstLast() {
	var firstLIs = $$('ul > li:first-child');
	var lastLIs = $$('ul > li:last-child');

	firstLIs.each(function (liFirst) {
		liFirst.addClassName('first');
	});

	lastLIs.each(function (liLast) {
		liLast.addClassName('last');
	});
}

//External Link Helper
//Updates Links with External Relation to
//use target="_blank"
function externalLinks() {
	var links = $$('a[rel=external]');

	links.each(function (externalLink) {
		externalLink.writeAttribute('target', '_blank');
	});
}

//Input Clear
//Clears text inputs on a page on focus
//Note: Prototype driven
function inputClear() {
	var textInputs = $$('input[type="text"]');

	textInputs.each(function (textInput) {
		textInput.initialValue = textInput.value;
		textInput.observe('focus', function (event) {
			if (textInput.value == textInput.initialValue) {
				textInput.clear();
			}
		});
		textInput.observe('blur', function (event) {
			if (textInput.value.blank() == true) {
				textInput.value = textInput.initialValue;
			}
		});
	});
}

// Equal heights boxes
function equalHeight() {
	var longest = 0;
	$$('.grid ul li').each(function (element) {
	
		if (element.getHeight() > longest){
			longest = element.getHeight();
			
		};
		
	});
	$$('.grid ul li').each(function (box) {
		box.style.height = longest + 'px';
	});
}

// Carousel on home page
function homeCarousel() {
	var slides = $$('#breakout ul li');
	var slideButtons = $$('#breakout #menu ul li');
	var current = 0;
	var locked = false;
	
	if(!slides[0]) return false;

	slideButtons.each(function (slideButton, index) {
		slideButton.btnIndex = index;

		slideButton.observe('click', changeSlide);
	})

	// highlight first button
	slideButtons[0].addClassName('active');

	// auto rotate
	new PeriodicalExecuter(function (pe) {
		var lastSlide = current;
		

		current++;
		if (current >= 5) {
			current = 0;
		};

		slides[current].removeClassName('moved');
		slides[current].addClassName('moving');

		slideButtons[lastSlide].removeClassName('active');
		slideButtons[current].addClassName('active');

		new Effect.Move(slides[lastSlide], {
			x: -960, mode: 'relative', duration: .5,
			transition: Effect.Transitions.linear,
			afterFinish: function () {
				slides[lastSlide].removeClassName('active');
				slides[lastSlide].addClassName('moved');
				slides[lastSlide].setStyle({ left: 'auto', top: 'auto' });

				slides[current].addClassName('active');
				slides[current].removeClassName('moving');
			}
		});


		// when the button is clicked, stop the PeriodicalExecutor
		slideButtons.each(function (slideButton, index) {
			slideButton.btnIndex = index;

			slideButton.observe('click', function (evt) { pe.stop() });
		})

		// seconds
	}, 6);

	function changeSlide() {
		if (locked || this.btnIndex === current) {
			return false;
		}

		locked = true;

		var clickedButton = this.btnIndex;

		var direction = (this.btnIndex - current) / Math.abs(this.btnIndex - current);

		slides[clickedButton].removeClassName('moved');
		slides[clickedButton].addClassName('moving');

		slideButtons[current].removeClassName('active');
		slideButtons[clickedButton].addClassName('active');

		new Effect.Move(slides[current], {
			x: direction * -960, mode: 'relative', duration: .5,
			transition: Effect.Transitions.linear,
			afterFinish: function () {
				slides[current].removeClassName('active');
				slides[current].addClassName('moved');
				slides[current].setStyle({ left: 'auto', top: 'auto' });

				slides[clickedButton].addClassName('active');
				slides[clickedButton].removeClassName('moving');

				current = clickedButton;
				locked = false;
			}
		});
	}


}

// Cookie Functions
// Set the cookie 
function setCookie(name, value, expires, path, domain, secure) {
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime(today.getTime());

	/*
	if the expires variable is set, make the correct
	expires time, the current script below will set
	it for x number of days, to make it for hours,
	delete * 24, for minutes, delete * 60 * 24
	*/
	if (expires) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date(today.getTime() + (expires));

	document.cookie = name + "=" + escape(value) +
	((expires) ? ";expires=" + expires_date.toGMTString() : "") +
	((path) ? ";path=" + path : "") +
	((domain) ? ";domain=" + domain : "") +
	((secure) ? ";secure" : "");
}

// Read the cookie 
function readCookie(name) {
	var needle = name + "=";
	var cookieArray = document.cookie.split(';');
	for (var i = 0; i < cookieArray.length; i++) {
		var pair = cookieArray[i];
		while (pair.charAt(0) == ' ') {
			pair = pair.substring(1, pair.length);
		}
		if (pair.indexOf(needle) == 0) {
			return pair.substring(needle.length, pair.length);
		}
	}
	return null;
}

//Replacement for Window Onload - Loads before images, cross-browser
document.observe("dom:loaded", function () {
	//dynamicShadow('/images/global/shadow.png', 'page-container', 16, 0);
	inputClear();
	liFirstLast(); // Adds classes 'first' and 'last' to respective LIs
	equalHeight();
	homeCarousel();
});

// usage: log('inside coolFunc',this,arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function () {
	log.history = log.history || [];   // store logs to an array for reference
	log.history.push(arguments);
	if (this.console) {
		console.log(Array.prototype.slice.call(arguments));
	}
};

// catch all document.write() calls
(function (doc) {
	var write = doc.write;
	doc.write = function (q) {
		log('document.write(): ', arguments);
		if (/docwriteregexwhitelist/.test(q)) write.apply(doc, arguments);
	};
})(document);
