var fader ={
	currentSlide: 0,
	slides: [],
	infos: [],
	numOfSlides: 0,
	horizontalOffset: 500,
	effectOptions: {duration: 0.35, queue: 'end'},
	
	moveSlide: function(direction){
		var horizontalOffset = 0;
		var currentIndex = 0;
		var nextIndex = 0;
		var animate = false;
				
		if(direction == 'left'){
			horizontalOffset = 0 - fader.horizontalOffset;
			currentIndex = fader.currentSlide;
			nextIndex = fader.currentSlide + 1;
			fader.currentSlide += 1;
			
			if(fader.currentSlide == fader.numOfSlides){
				fader.currentSlide = 0;
				nextIndex = 0;
			}
			animate = true;
		}
		if(direction == 'right'){
			horizontalOffset = fader.horizontalOffset;
			currentIndex = fader.currentSlide;
			nextIndex = fader.currentSlide - 1;
			fader.currentSlide -= 1;
			
			if(fader.currentSlide < 0){
				fader.currentSlide = fader.numOfSlides - 1;
				currentIndex = 0;
				nextIndex = fader.numOfSlides - 1;
			}
			animate = true;
		}
		if(typeof(direction) == 'number'){
			if(direction != fader.currentSlide){
				if(direction >= fader.currentSlide){
					horizontalOffset = 0 - fader.horizontalOffset;					
				}else{
					horizontalOffset = fader.horizontalOffset;
				}
				currentIndex = fader.currentSlide;
				nextIndex = direction;
				fader.currentSlide = direction;
				animate = true;
			}else{
				animate = false;
			}
		}
		
		if(animate){
			new Effect.Parallel([
				new Effect.Morph(fader.slides[currentIndex],{style: 'left: ' + horizontalOffset + 'px;', sync:true}),
				new Effect.Fade(fader.slides[currentIndex],{sync:true, afterFinish: function(effect){
					effect.element.setStyle({
						left: '0px'
					});
				}}),
				new Effect.Fade(fader.infos[currentIndex],{sync:true}),
	
				new Effect.Appear(fader.slides[nextIndex],{sync:true}),		
				new Effect.Appear(fader.infos[nextIndex],{sync:true})
			],fader.effectOptions);
			
			fader.updateButtons();		
		}		
	},
	
	updateButtons: function(){
		var faderIndicatorButtons = $$('#fader_indicator li');
		for (var i=0; i < faderIndicatorButtons.length; i++) {
			if(parseInt(i) === parseInt(fader.currentSlide)){
				faderIndicatorButtons[i].addClassName('active');
			}else{
				faderIndicatorButtons[i].removeClassName('active');
			}
		};
	},
	
	next: function(){
		fader.moveSlide('left');
	},
	prev: function(){
		fader.moveSlide('right');
	},
	init: function(){
		if ($('slider')){
			fader.slides = $$('#slider li');
			fader.infos = $$('#big_ideas dl');
			fader.numOfSlides = fader.slides.length;
			
			// setup indicator
			$('slider').insert({bottom: '<ol id="fader_indicator"></ol>'})
			var indicator = $('fader_indicator');
			for (var i=0; i < fader.numOfSlides; i++) {
				indicator.innerHTML += '<li></li>'
			};
			var firstLi = $$('#fader_indicator li')[0];
			firstLi.addClassName('active');
			indicator.setStyle({width: (fader.numOfSlides * firstLi.getWidth()) + 'px'});
			indicator.setStyle({left: ($('slider').getWidth()/2) + 'px'});
			indicator.setStyle({marginLeft: '-' + (indicator.getWidth()/2) + 'px'});
			
			var faderIndicatorButtons = $$('#fader_indicator li');
			for (var i=0; i < faderIndicatorButtons.length; i++) {
				faderIndicatorButtons[i].observe('click', function(){
					fader.moveSlide(faderIndicatorButtons.indexOf(this));
				})
			};						
			// Next Image
			$('sliderNext').observe('click',function(event){
				event.stop();
				fader.next();
			}).onclick = function(){return false;}
			// Previous Image
			$('sliderPrevious').observe('click',function(event){
				event.stop();
				fader.prev();
			}).onclick = function(){return false;}			
			fader.updateButtons();		
		}
	}
}

var urlCount = 0;
function addURL() {
	var parentList = $('additional_programming').select('ol.formList').first();
	var liTemplate = new Template('<li id="url_#{index}"><label for="id_url_#{index}" id="for_url_#{index}">Example URL:</label><input type="text" name="url[]" id="id_url_#{index}" class="textField" /><a href="#remove" title="Remove this URL" class="removeURL" onclick="removeURL(this); return false;">-</a></li>')
	urlCount++;
	
	var templateObj = {
		index: urlCount
	}
	
	parentList.insert({bottom:liTemplate.evaluate(templateObj)});
	parentList.select('input[type="text"]').last().focus();
}

function removeURL(elem) {
	$(elem).up('li').remove();
}

function adjustForm(elem) {
	var careers = $(elem);
	var codeAdditions = $('additional_programming');
	switch(careers.value) {
		case "Web Developer":
		case "User Interface Developer":
		case "User Interface Designer":
		case "Senior User Interface Designer":
			if(!codeAdditions.visible()) {
			  $('id_portfolio_url').removeClassName('ignore');
			  $('id_portfolio_url').focus();
			  $('id_portfolio_url').blur();
			  $('req_portfolio_url').show();
			  codeAdditions.show();
			}
		break;
		default:
			if(codeAdditions.visible()) {
			  $('id_portfolio_url').addClassName('ignore');
			  $('id_portfolio_url').focus();
			  $('id_portfolio_url').blur();
			  $('req_portfolio_url').hide();
			  codeAdditions.hide();
			}
		break;
	}
}

$(document).observe('dom:loaded',function(){
	window.___formValidators = [];
	$$('form.formValidate').each(function(e){
		window.___formValidators.push(new FormValidator(e,{
			"Name" : "A name is required",
			"Email" : "A valid email address is required",
			"Phone" : "A phone number is required"
		}));
	});
	
	// Initialize testimonials container if it exists
	if($('client-testimonials_container')){
		new Cycler("client_testimonials","client_logos",{
			delay: 10
		});
	}
	
	// Initialize the home page project fader
	fader.init();
	
	// Blue contact form
	if($('contact_form_blue_wrapper')){
		$('blue_contact_us').observe('click',function(event){
			event.stop();
			$('contact_form_blue_prompt').fade({duration:0.25, afterFinish: function(){
				$('contact_form_blue').appear({duration:0.25});
			}});
		}).onclick = function(){ return false; }	
	}
	
	if($('form_container')){
		$$('#form_container, #blue_form').each(function(e){
			e.insert({top:'<input type="hidden" name="cerberus" value="1" id="id_cerberus" />'});
		});
	}
	
	if($('link_add_url')) {
		$('link_add_url').observe('click',function(event){
			event.stop();
			addURL();
		});
	}
});