$(document).ready(function(){
	
	Setup_Menu();
	Fix_FooterPosition();
	$('.carousel').Setup_Carousel();
	$('.homepageSlideshow').Setup_HomepageSlideshow();
	$('fieldset').Setup_Fieldset();
	$('.itemsList').Uniform_Heights();
	
	$('img').error(function(){
		$(this).hide();
	});
	
});


/* @ Questionnaire - Teste Epworth
   ==================================================================== */
   
function SetupQuestionnaire_TesteEpworth(senderURL) {
	
	var $fieldset = $('fieldset#epworth');
	var $submit = $fieldset.find('#submit');	
	
	$submit.click(function(){
		
		var senderURL = $(this).attr('href');
		var senderEmail = $(this).attr('title');
		
		var question1 = Number($fieldset.find('#question_1').val());
		var question2 = Number($fieldset.find('#question_2').val());
		var question3 = Number($fieldset.find('#question_3').val());
		var question4 = Number($fieldset.find('#question_4').val());
		var question5 = Number($fieldset.find('#question_4').val());
		var question6 = Number($fieldset.find('#question_4').val());
		var question7 = Number($fieldset.find('#question_4').val());
		var question8 = Number($fieldset.find('#question_4').val());
		
		var result = question1 + question2 + question3 + question4 + question5 + question6 + question7 + question8;
		
		var userName = $fieldset.find('#txtUserName').val();
		var userMail = $fieldset.find('#txtUserMail').val();
		
		if (userName == '' || userMail == '') {
			alert('Preencha todos os campos, por favor');
			return false;
		} else {
			if (IsMailValid(userMail) == false) {
				alert('Introduza um email válido, por favor');
				return false;
			}
		}
		
		$.ajax({
		  url: senderURL,
		  type: 'POST',
		  dataType: 'html',
		  data: {
		  	senderEmail: senderEmail,
		  	userName: userName,
		  	userMail: userMail,
		  	result: result
		  },
		  success: function(data) {
		    alert('Formulário enviado!');
		    ResetForm();
		  },
		  error: function(error) {
			alert('Não foi possível submeter o questionário!');
		  }
		});	
		
		return false;
	});
	
	function ResetForm() {
		$fieldset.find('#question_1').val(0);
		$fieldset.find('#question_2').val(0);
		$fieldset.find('#question_3').val(0);
		$fieldset.find('#question_4').val(0);
		$fieldset.find('#question_5').val(0);
		$fieldset.find('#question_6').val(0);
		$fieldset.find('#question_7').val(0);
		$fieldset.find('#question_8').val(0);
		$fieldset.find('#txtUserName').val('');
		$fieldset.find('#txtUserMail').val('');
	};
	
};


/* @ Questionnaire - Teste Richmond
   ==================================================================== */
   
function SetupQuestionnaire_TesteRichmond(senderURL) {
	
	var $fieldset = $('fieldset#richmond');
	var $submit = $fieldset.find('#submit');	
	
	$submit.click(function(){
		
		var senderURL = $(this).attr('href');
		var senderEmail = $(this).attr('title');
		
		var question1 = Number($fieldset.find('#question_1').val());
		var question2 = Number($fieldset.find('#question_2').val());
		var question3 = Number($fieldset.find('#question_3').val());
		var question4 = Number($fieldset.find('#question_4').val());
		
		var result = question1 + question2 + question3 + question4;
		
		var userName = $fieldset.find('#txtUserName').val();
		var userMail = $fieldset.find('#txtUserMail').val();
		
		if (question1 == -1 || question2 == -1 || question3 == -1 || question4 == -1 || userName == '' || userMail == '') {
			alert('Preencha todos os campos, por favor');
			return false;
		} else {
			if (IsMailValid(userMail) == false) {
				alert('Introduza um email válido, por favor');
				return false;
			}
		}
		
		$.ajax({
		  url: senderURL,
		  type: 'POST',
		  dataType: 'html',
		  data: {
		  	senderEmail: senderEmail,
		  	userName: userName,
		  	userMail: userMail,
		  	result: result
		  },
		  success: function(data) {
		    alert('Formulário enviado!');
		    ResetForm();
		  },
		  error: function(error) {
			alert('Não foi possível submeter o questionário!');
		  }
		});	
		
		return false;
	});
	
	function ResetForm() {
		$fieldset.find('#question_1').val(-1);
		$fieldset.find('#question_2').val(-1);
		$fieldset.find('#question_3').val(-1);
		$fieldset.find('#question_4').val(-1);
		$fieldset.find('#txtUserName').val('');
		$fieldset.find('#txtUserMail').val('');
	};
	
};


/* @ Questionnaire - Teste Fagerstrom
   ==================================================================== */
   
function SetupQuestionnaire_TesteFagerstrom(senderURL) {
	
	var $fieldset = $('fieldset#fagerstrom');
	var $submit = $fieldset.find('#submit');	
	
	$submit.click(function(){
		
		var senderURL = $(this).attr('href');
		var senderEmail = $(this).attr('title');
		
		var question1 = Number($fieldset.find('#question_1').val());
		var question2 = Number($fieldset.find('#question_2').val());
		var question3 = Number($fieldset.find('#question_3').val());
		var question4 = Number($fieldset.find('#question_4').val());
		var question5 = Number($fieldset.find('#question_5').val());
		var question6 = Number($fieldset.find('#question_6').val());
		
		var result = question1 + question2 + question3 + question4 + question5 + question6;
		
		var userName = $fieldset.find('#txtUserName').val();
		var userMail = $fieldset.find('#txtUserMail').val();
		
		if (question1 == -1 || question2 == -1 || question3 == -1 || question4 == -1 || question5 == -1 || question6 == -1 || userName == '' || userMail == '') {
			alert('Preencha todos os campos, por favor');
			return false;
		} else {
			if (IsMailValid(userMail) == false) {
				alert('Introduza um email válido, por favor');
				return false;
			}
		}
		
		$.ajax({
		  url: senderURL,
		  type: 'POST',
		  dataType: 'html',
		  data: {
		  	senderEmail: senderEmail,
		  	userName: userName,
		  	userMail: userMail,
		  	result: result
		  },
		  success: function(data) {
		    alert('Formulário enviado!');
		    ResetForm();
		  },
		  error: function(error) {
			alert('Não foi possível submeter o questionário!');
		  }
		});	
		
		return false;
	});
	
	function ResetForm() {
		$fieldset.find('#question_1').val(-1);
		$fieldset.find('#question_2').val(-1);
		$fieldset.find('#question_3').val(-1);
		$fieldset.find('#question_4').val(-1);
		$fieldset.find('#question_5').val(-1);
		$fieldset.find('#question_6').val(-1);
		$fieldset.find('#txtUserName').val('');
		$fieldset.find('#txtUserMail').val('');
	};
	
};


/* @ Questionnaire - Calculo IMC
   ==================================================================== */
   
function SetupQuestionnaire_CalculoIMC(senderURL) {
	
	var $fieldset = $('fieldset#calculoIMC');
	var $submit = $fieldset.find('#submit');
	
	OnlyNumbersInput($fieldset.find('#txtHeight'));
	
	$submit.click(function(){
		
		var senderURL = $(this).attr('href');
		var senderEmail = $(this).attr('title');
		
		var height = $fieldset.find('#txtHeight').val();
		var weight = $fieldset.find('#txtWeight').val();
		var userName = $fieldset.find('#txtUserName').val();
		var userMail = $fieldset.find('#txtUserMail').val();
		
		if (height == '' || weight == '' || userName == '' || userMail == '') {
			alert('Preencha todos os campos, por favor');
			return false;
		} else {
			if (IsMailValid(userMail) == false) {
				alert('Introduza um email válido, por favor');
				return false;
			}
		}

		$.ajax({
		  url: senderURL,
		  type: 'POST',
		  dataType: 'html',
		  data: {
		  	senderEmail: senderEmail,
		  	userName: userName,
		  	userMail: userMail,
		  	height:height,
		  	weight:weight
		  },
		  success: function(data) {
		    alert('Formulário enviado!');
		    ResetForm();
		  },
		  error: function(error) {
		  	alert('Não foi possível submeter o questionário!');
		  }
		});	
		
		return false;
	});
	
	function ResetForm() {
		$fieldset.find('#txtHeight').val('');
		$fieldset.find('#txtWeight').val('');
		$fieldset.find('#txtUserName').val('');
		$fieldset.find('#txtUserMail').val('');
	};
	
};


function OnlyNumbersInput($input){

	$input.keydown(function(e){

		var key;
		var keychar;
		
		if (window.event)
		   key = window.event.keyCode;
		else if (e)
		   key = e.which;
		else
		   return true;
		
		keychar = String.fromCharCode(key);
		
		// control keys
		if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27))
		   return true;
		
		// numbers
		else if ((("0123456789").indexOf(keychar) > -1))
		   return true;
		
		// decimal point jump
		else if ((key==190))
			return true;
		   
		else
		   return false;	
	
	});

};

function IsMailValid(mail) {
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(mail);	
};

/* @ Uniform Heights
   ==================================================================== */

(function($){  
	$.fn.Uniform_Heights = function(pluginSettings) {
	
		var defaultSettings = {
			childClass:'.item'
		};
		var settings = $.extend(defaultSettings, pluginSettings);
	
		return this.each(function(){
			
			var maxHeight = 0;
			
			$(this).find(settings.childClass).each(function(){
				if (maxHeight < $(this).height()) {
					maxHeight = $(this).height();
				}
			});

			$(this).find(settings.childClass).each(function(){
				$(this).height(maxHeight);
			});			
			
		});
		
	};
})(jQuery);


/* @ Fieldset
   ==================================================================== */
   
(function($){  
	$.fn.Setup_Fieldset = function(pluginSettings) {
	
		var defaultSettings = {
			parameter:'parameter_value'
		};
		var settings = $.extend(defaultSettings, pluginSettings);
	
		return this.each(function(){
			
			var $control = $(this);
			var $elements = $control.find('p');
			var $inputs = $elements.find('input').add($elements.find('textarea'));
			
			$inputs.each(function(){
			
				$(this).data('defaultValue', $(this).val());
				$(this).data('defaultClass', $(this).parent('span').parent('p').attr('class'));
				
			});
			
			$inputs.focus(function(){
				
				var defaultValue = $(this).data('defaultValue');
				var defaultClass = $(this).data('defaultClass');
				var customClass = $(this).data('defaultClass') + '_hover';
				
				$(this).parent('span').parent('p').removeClass(defaultClass);
				$(this).parent('span').parent('p').addClass(customClass);
				
				if ($(this).val() == defaultValue) {
					$(this).val('');
				}
				
			});
			
			$inputs.blur(function(){
				
				var defaultValue = $(this).data('defaultValue');
				var defaultClass = $(this).data('defaultClass');
				var customClass = $(this).data('defaultClass') + '_hover';
				
				$(this).parent('span').parents('p').removeClass(customClass);
				$(this).parent('span').parents('p').addClass(defaultClass);
				
				if ($(this).val() == '') {
					$(this).val(defaultValue);
				}
				
			});
			
		});
		
	};
})(jQuery);

   

/* @ Slideshow
   ==================================================================== */

(function($){  
	$.fn.Setup_HomepageSlideshow = function(pluginSettings) {
	
		var defaultSettings = {
			pageTimeout: 5000
		};
		var settings = $.extend(defaultSettings, pluginSettings);
	
		return this.each(function(){
			
			// -- Declarations --
			var $control = $(this);
			
			var $navigation = {
				items: $control.find('.navigation ul li'),
				selector: $control.find('.navigation .selector'),
				numItems: $control.find('.navigation ul li').size(),
				itemHeight: $control.find('.navigation ul li').first().outerHeight(true),
				currentItem: 0
			};
			
			var $photos = {
				items: $control.find('.photos div'),
				currentPhoto: 0,
				nextPhoto: 1,
				totalPhotos: $control.find('.photos div').size()
			};
			
			
			// -- Setup elements
			
			$navigation.items.first().addClass('current');
			$photos.items.hide();
			$photos.items.eq($photos.currentPhoto).addClass('current').show();
			

   			// -- Optioning methods
   			
   			$control.bind('Next', function(event) { GoToItem($navigation.currentItem + 1); });
   			$control.bind('Previous', function(event) { GoToItem($navigation.currentItem - 1); });
   			
   			
   			// -- Setup pager --
   			
   			$navigation.items.each(function(index, item){
   			
   				$(this).data('itemID', index).click(function(){
   					if ($(this).hasClass('current') == false) {
   						GoToItem($(this).data('itemID'));
   					}
   				});
   			
   			});
   			   			
   			
   			// -- Setup autoPaging
   			
   			if (settings.pageTimeout > 0) {
   			
   				var autoScrolling = true;
   				var scrollInterval = setInterval(function(){
   					
   					if(autoScrolling) {
   						GoToItem($navigation.currentItem + 1);
   					}
   					
   				}, settings.pageTimeout);
   				
   				$control.mouseover(function(){
   					autoScrolling = false;
   				}).mouseout(function(){
   					autoScrolling = true;
   				});
   			
   			}
   			
   			function GoToItem(item) {

				// requesting page higher the available pages
				if (item == $navigation.numItems) { item = 0; }
				
				// requesting page lower the available pages
				if (item == -1) { item = $navigation.numItems - 1 }
				
				var $currentPhoto = $photos.items.eq($navigation.currentItem);
				var $nextPhoto = $photos.items.eq(item);
				
				var direction = (item < $navigation.currentItem) ? -1 : 1;
				var numItems = Math.abs($navigation.currentItem - item);
				var topPosition = $navigation.itemHeight * direction * numItems;
				
				$nextPhoto.addClass('next').show();
				
				$currentPhoto.fadeOut(function(){
					$currentPhoto.removeClass('current');
					$nextPhoto.removeClass('next').addClass('current');
				});
   				
   				$navigation.selector.filter(':not(:animated)').animate({top: '+=' + topPosition}, 300, function(){
   					$navigation.currentItem = item;   		
   					$navigation.items.removeClass('current');
   					$navigation.items.eq(item).addClass('current');	
   				});
   				
   			};			
			
			
		});
		
	};
})(jQuery);


/* @ Carousel
   ==================================================================== */
   
(function($){  
   	$.fn.Setup_Carousel = function(pluginSettings) {
   	
   		var defaultSettings = {
   			itemsPerPage:3,
   			pageTimeout: 5000
   		};
   		var settings = $.extend(defaultSettings, pluginSettings);
   	
   		return this.each(function(){
   			
   			// -- Declarations --
   			
   			var $control = $(this);
   			var $canvas = $control.find('.stage');
   			var $stage = $control.find('.items');
   			var $items = $control.find('.item');
   			var $pager = $control.find('.pager');
   			
   			var numItems = $items.size();
   			var pages = Math.ceil(numItems / settings.itemsPerPage);
   			var itemWidth = $items.first().outerWidth(true);
   			var pageWidth = itemWidth * settings.itemsPerPage;
   			var currentPage = 0;
   			
   			
   			// -- Init --
   			if (pages <= 1) {
   				// if there is only one page, we don't need to do anything
   				return false;
   			}
   			
   			
   			// -- Setup elements --
   			
   			$stage.width(pageWidth * pages);
   			$canvas.css('overflow-x', 'hidden');
   			
   			
   			// -- Setup pager --
   			
   			if (pages > 0) {
   				for (var i=0; i<pages; i++){
   					
   					var $page = $('<a>').attr('id', 'page_' + i)
   										.attr('href', '#')
   										.data('page', i);
   					
   					if (i == currentPage) {
   						$page.addClass('current');
   					}
   					
   					$page.click(function(){
   						GoToPage($(this).data('page'));
   						return false;
   					});
   					
   					$pager.append($page)
   				}
   			}
   			
   			
   			// -- Setup autoPaging
   			
   			if (settings.pageTimeout > 0) {
   			
   				var autoScrolling = true;
   				var scrollInterval = setInterval(function(){
   					
   					if(autoScrolling) {
   						GoToPage(currentPage + 1);
   					}
   					
   				}, settings.pageTimeout);
   				
   				$control.mouseover(function(){
   					autoScrolling = false;
   				}).mouseout(function(){
   					autoScrolling = true;
   				});
   			
   			}
   			
   			
   			// -- Pagings methods
   			
   			$control.bind('Next', function(event) { GoToPage(currentPage + 1); });
   			$control.bind('Previous', function(event) { GoToPage(currentPage - 1); });
   			
   			function GoToPage(page) {

				// requesting page higher the available pages
				if (page == pages) { page = 0; }
				
				// requesting page lower the available pages
				if (page == -1) { page = pages - 1 }
				
				// adjust pager
				$pager.find('a').removeClass('current');
				$pager.find('a:eq(' + page + ')').addClass('current');

				var direction = (page < currentPage) ? -1 : 1;
				var numPages = Math.abs(currentPage - page);
				var leftPosition = pageWidth * direction * numPages;
   				
   				$canvas.filter(':not(:animated)').animate({scrollLeft: '+=' + leftPosition}, 500, function(){
   					currentPage = page;
   					
   				});
   				
   			};
   			
   		});
   		
   	};
   })(jQuery);   
   

/* @ Menu 
   ==================================================================== */

function Setup_Menu(){
	
	var $menu = $('#header .menu');
	
	// hide child ul
	$menu.find('ul').hide();
	
	// when mouse enters each option, slide down childrens
	$menu.find('>li').mouseenter(function(){
		
		$(this).find('>a').addClass('hover');
		$(this).css('cursor', 'pointer');
		
		var $childrenMenu = $(this).find('ul');
		if ($childrenMenu.is(':visible') == false) {
			$childrenMenu.slideDown('fast');
		}
		
	});
	
	// when mouse leaves each option, slide up childrens
	$menu.find('>li').mouseleave(function(){
		
		$(this).find('>a').removeClass('hover');
		
		var $childrenMenu = $(this).find('ul');
		if ($childrenMenu.is(':visible') == true) {
			$childrenMenu.slideUp('fast');
		}
		
	});
	
	// setup current item if parent
	$menu.find('.current').parent('li').parent('ul').siblings('a').addClass('current');
	
	// click on parent li triggers its a
	$menu.find('>li').click(function(){
		var url = $(this).children('a').attr('href');
		window.location = url;
	});
	
};

/* @ 
   ==================================================================== */

function Fix_FooterPosition(){

	SetupDimentions();
	
	$(window).resize(function(){
		SetupDimentions();
	});

	function SetupDimentions(){

		var windowHeight = $(window).height();
		var headerHeight = $('#header').outerHeight();
		var mediaHeight = $('#media').outerHeight();
		var footerHeight = $('#footer').outerHeight();
		
		bodyHeight = windowHeight - headerHeight - mediaHeight - footerHeight;
		
		$('#body').css('min-height', bodyHeight);

	};

};

