MadAlley = {};

/**
 * Sets functionality when page loads
 */
MadAlley.Init = function(){
	
	// Kicks off "Our Approach" pagination
	if ($('#approachSlides').length){
		MadAlley.OurApproach();	
	}
	
	// Our Services Accordian
	if ($('#accordion').length){
		$('#accordion').accordion({
			active: false,
			collapsible: true,
			autoHeight: false
		}).show();
	}
	
	// contact page form handling
	if ($('#contactForms').length) {
		MadAlley.ContactForms();
	}
	
	// Homepage slider functionality
	if ($('#slidesMask').length) {
		MadAlley.InitHomepageSlider();
	}
	
}

/**
 * Functionality for the contact page
 */
MadAlley.ContactForms = function(){
	
	// contact forms url
	var ajaxUrl = '/wp-content/themes/madison_alley/process.php';
	
	// Contact Form Validation
	$('#contactForms input').labelInput();
	$('#contactForms textarea').labelInput();
	
	$.validator.addMethod('nameLabel',function(value,element){
		return (value != 'Name*') ? true : false;
	}, 'This field is required');
	$.validator.addMethod('messageLabel',function(value,element){
		return (value != 'Message*') ? true : false;
	}, 'This field is required');
	$('#sendMessageForm').validate({
		submitHandler: function(form){
			
			// submit form data
			$.ajax({
				type : "POST",
				url : ajaxUrl,
				data: $(form).serialize(),
				success : function(data, status){
					$('#msgFormStatus').remove();
					var status = $('<div />').attr('id', 'msgFormStatus').css({
						'padding-top': '11px',
						'display':'none'
					}).html('<p>'+data+'</p>');
					$(form).before(status);
					$(status).fadeIn(150);
					$(form).css('visibility', 'hidden');
				},
				error : function(){
					$(form).before('<div id="msgFormStatus" class="error"><p>Sorry an error occured, please try again.</p></div>');
				}
			});
			
		},
		onkeyup: false,
		rules: {
			nameStr: {
				required: true,
				nameLabel: true
			},
			emailAddressStr: {
				required: true,
				email: true
			},
			messageStr: {
				required: true,
				messageLabel: true
			}
		},
		errorPlacement: function(error, element){
			$(element).parent('div').before(error);
		},
		highlight: function(element, errorClass, validClass){
			$(element).parent('div').addClass('error');
		},
		unhighlight: function(element, errorClass, validClass){
			$(element).parent('div').removeClass('error');
		}
	});
	$('#stayConnectedForm').validate({
		submitHandler: function(form){
			
			// submit form data
			$.ajax({
				type : "POST",
				url : ajaxUrl,
				data: $(form).serialize(),
				success : function(data, status){
					$('#emailFormStatus').remove();
					var status = $('<div />').attr('id', 'emailFormStatus').css({
						'height': '36px',
						'padding-top': '11px',
						'display':'none',
						'margin-bottom': '50px'
					}).html('<p>'+data+'</p>');
					$(form).before(status);
					$(status).fadeIn(150);
					$(form).hide();
				},
				error : function(){
					$(form).before('<div id="emailFormStatus" class="error"><p>Sorry an error occured, please try again.</p></div>');
				}
			});

		},
		onkeyup: false,
		rules: {
			newsletterEmailStr: {
				required: true,
				email: true
			}
		},
		errorPlacement: function(error, element){
			$(element).parents('.left').first().before(error);
		},
		highlight: function(element, errorClass, validClass){
			$(element).parent('div').addClass('error');
		},
		unhighlight: function(element, errorClass, validClass){
			$(element).parent('div').removeClass('error');
		}
	});
	
	$('.btnSubmit', '#contactForms').click(function(){
		var form = $(this).parents('form').get(0);
		$(form).submit();
		return false;
	});
	
}


/**
 * Kicks off the Our Approach pagination
 */
MadAlley.OurApproach = function(){
	
	var currApproachSlide=0;
	var approachSlides = $('li','#approachSlides');
	$('.linkSlide', '#approachSlides').click(function(){
		if ($(this).hasClass('linkForward')){
			MadAlley.ChangeApproachSlide(currApproachSlide, 1, approachSlides);
			currApproachSlide++;	
		} else {
			MadAlley.ChangeApproachSlide(currApproachSlide, -1, approachSlides);
			currApproachSlide--;
		}
		return false;
	});
	
}


/**
 * Takes the current approach slide displayed, and the direction to paginate
 * and displays the new slide, and changes the pagination buttons accordingly.
 * 
 * @author Brian Fegan
 * @param {Object} oldIndex
 * @param {Object} dir
 * @param {Object} approachSlides
 */
MadAlley.ChangeApproachSlide = function(oldIndex, dir, approachSlides){
	
	var prevApproachSlideBtn = $('.linkPrevious','#approachSlides');
	var nextApproachSlideBtn = $('.linkForward','#approachSlides');
	var prevApproachSlideText = $(prevApproachSlideBtn).find('span');
	var nextApproachSlideText = $(nextApproachSlideBtn).find('span');
	
	var index = oldIndex + dir;
	var currSlide = $(approachSlides[index]);
	var nextSlide = $(approachSlides[index+1]);
	var prevSlide = $(approachSlides[index-1]);
	var slideTextSt;
	var slideTextEnd;
	
	$(approachSlides[oldIndex]).fadeOut(50,function(){
		if (prevSlide.length) {
			slideTextEnd = index * 2;
			slideTextSt = slideTextEnd - 1;
			prevApproachSlideText.html(slideTextSt + '-' + slideTextEnd);
			prevApproachSlideBtn.show();
		} else {
			prevApproachSlideBtn.hide();	
		}
		if (nextSlide.length) {
			slideTextEnd = (index+2) * 2;
			slideTextSt = slideTextEnd - 1;
			nextApproachSlideText.html(slideTextSt + '-' + slideTextEnd);
			nextApproachSlideBtn.show();
		} else {
			nextApproachSlideBtn.hide();
		}
		$(approachSlides[index]).fadeIn(200);
	});
	
}

/**
 * Kicks off the homepage slider functionality
 * 
 * @author Brian Fegan
 */
MadAlley.InitHomepageSlider = function(){
	
	var autoRotate = true;
	var autoRotateTimer = 7500;
	var slidePicsArr = $('li','#slidesList');
	var slideCopyArr = $('li','#slidesCopyList');
	var slidePicsHeight = slidePicsArr.height();
	var slideCopyHeight = slideCopyArr.height();
	var constant = 20;
	var minVal = 0;
	var maxVal = (slidePicsArr.length - 1) * constant;
	var sliderControlsOn = false;
	var autoRotateVal = minVal;
	
	$('li:gt(0)','#slidesList').remove();
	$('li:gt(0)','#slidesCopyList').remove();
	
	// Figures out which slides to show and animates them
	var doContentSlides = function(realignVal){
		
		// get index to slide to, append that slide
		realignVal = realignVal / constant;
		
		if (slidePicsArr[realignVal] != $('li', '#slidesList')[0]) {
		
			$('#slider').slider('disable');
			
			$('#slidesList').append(slidePicsArr[realignVal]);
			$('#slidesCopyList').append(slideCopyArr[realignVal]);
			
			// animate faster transition
			$('#slidesList').animate({
				top: '-' + slidePicsHeight + 'px'
			}, 750);
			
			// animate slower transition
			$('#slidesCopyList').animate({
				top: '-' + slideCopyHeight + 'px'
			}, 1000, function(){
			
				// when slower transition is done, remove old slide
				$('li:first-child', '#slidesList').remove();
				$('#slidesList').css('top', '0');
				
				$('li:first-child', '#slidesCopyList').remove();
				$('#slidesCopyList').css('top', '0');
				
				$('#slider').slider('enable');
				
			});
			
		}
		
	};
	
	// set up the slider
	$("#slider").slider({
		value: minVal,
		min: minVal,
		max: maxVal,
		step: 1,
		animate: 100,
		change: function(event, ui) {
			
			if (event.originalEvent) {
				
				// kill the auto rotate
				autoRotate = false;
				
				var checkVal = constant / 2;
				var realignVal = minVal;
				
				for (var i = 0; i < slidePicsArr.length; i++) {
					if (ui.value <= checkVal) {
						break;
					}
					else {
						checkVal = checkVal + constant;
						realignVal = realignVal + constant;
					}
				}
				
				// set handle position
				$("#slider").slider("value", realignVal);
				
				// animate slides based on this slider position
				doContentSlides(realignVal);
				
			}
		}
		
	}).find('a').html('<span class="arrowsOff"></span><span class="arrowLt"></span><span class="arrowRt">');
	
	var timer;
	$('a', '#slider').hover(function(){
		if (timer) clearTimeout(timer);
		MadAlley.SliderControlsOn();
	}, function(){
		timer = setTimeout(MadAlley.SliderControlsOff, 250);
	});
	
	// auto rotate the content
	var autoRotateSlides = function(){
		if (autoRotate){
			
			// find the next slider position to slide to
			autoRotateVal = autoRotateVal + constant;
			if (autoRotateVal > maxVal){
				autoRotateVal = minVal;
			}
			$("#slider").slider("value", autoRotateVal);
			
			// animate slides based on this slider position
			doContentSlides(autoRotateVal);
			
			// keep rotating
			setTimeout(function(){
				autoRotateSlides();
			}, autoRotateTimer);
			
		}	
	};
	
	// start the slide auto rotation
	setTimeout(function(){
		autoRotateSlides();	
	}, autoRotateTimer);
	
}

/**
 * Turns ON the slider handle visual cues
 * 
 * @author Brian Fegan
 */
MadAlley.SliderControlsOn = function(){
	$('.arrowsOff','#slider').stop(true, true).fadeOut(150);
	$('.arrowLt','#slider').stop(true, true).animate({
		left: '-7px'
	}, 150);
	$('.arrowRt','#slider').stop(true, true).animate({
		right: '-7px'
	}, 150);
}

/**
 * Turns OFF the slider handle visual cues
 * 
 * @author Brian Fegan
 */
MadAlley.SliderControlsOff = function(){
	$('.arrowsOff','#slider').stop(true, true).fadeIn(150);
	$('.arrowLt','#slider').stop(true, true).animate({
		left: '9px'
	}, 150);
	$('.arrowRt','#slider').stop(true, true).animate({
		right: '9px'
	}, 150);
}


$(document).ready(function(){
	MadAlley.Init();
});
