/*
 * GENERAL FUNCTIONS FOR STARTABUTIK.SE
 */
$(document).ready(function() {

	// Hide ALL toplayers on click outside
	var $clickedElement;
	$(this).bind('click', function(e) {
		$clickedElement = $(e.target);
		
		if ( !$clickedElement.hasClass('toplayerShow') )
		{
			if ( !$clickedElement.hasClass('toplayer') && !$clickedElement.parents().hasClass('toplayer') || $clickedElement.hasClass('toplayerClose') )
			{
				// Hide toplayer
				$('.toplayer').hide();
				$('.toplayerBackground').hide();
			}
		}
	});

	// START: FEEDBACK

	var feedback = $('div#feedback');
	
	if ( feedback.size() > 0 )
	{
	
		var feedbackToggle = $('div#feedback a.toggle');
		var feedbackWidth = feedback.css('width');
		var feedbackLeft = feedback.css('left');
		var feedbackExpanded = false;
		var speed = 200;

		// Fade
		//feedback.css({ opacity : 0.8 });
		
		// Bind event
		feedbackToggle.bind('click', function() {
		
			// Animate
			
			if ( feedbackExpanded == false )
			{
				//feedback.animate({ 'left' : 0 }, {duration : speed, specialEasing: { width : 'linear' }, queue : false});
				animateFeedback({ 'left' : 0 });
				//feedback.toggleClass('expanded', 200);
				feedbackExpanded = true;
			}
			else
			{
				animateFeedback({ 'left' : feedbackLeft });
				feedbackExpanded = false;
			}
		
		});
		
		function animateFeedback(options) {
			feedback.animate(options, {duration: speed, queue: false});
		}
		
	}
	
	// END: FEEDBACK
	
	// START: FEEDBACK
	
	var contactForm = $('div.contactForm');
	if ( contactForm.size() > 0 )
	{
		
		// Validation
		var fields = contactForm.find(':input');
		var contactFormValid = $('div#contactFormValid');
		var contactFormInvalid = $('div#contactFormInvalid');
		
		// Validate each field on blur
		fields.bind('blur', function() {
			validateFields($(this), $(this).attr('name'), $(this).val());
		});
		
		// Process send button
		contactForm.find('.submit').bind('click', function() {
			
			// Build datastring
			var dataString = '';
			$.each(fields, function() { dataString +=  $(this).attr('name') + '=' + $(this).val() + '&' });
		
			$.ajax({
				url: "/ajax/contactForm.php?submit=true&method=ajax",
				type: "POST",
				data:  dataString,
				dataType: "json",
				success: function(response) {
				
					if ( response.valid == "true" )
					{
						// Show ok message
						contactFormInvalid.slideUp(200, function() {
							contactFormValid.slideDown(200);
						});
						
						// Reset form
						fields.removeClass('valid');
						fields.removeClass('invalid');
						fields.val('');
					}
					else if ( response.valid == "false" )
					{
						// Show invalid message
						contactFormValid.slideUp(200, function() {
							
							var errorMessages = 'Fyll i samtliga f&auml;lt<br />';
							$.each(response.errorMessages, function(key, value) {
								errorMessages += ' - ' + value + '<br />';
							});
							contactFormInvalid.html(errorMessages);
							
							contactFormInvalid.slideDown(200);
						});
						
						

						$.each(fields, function() {
						
							if ( $.inArray( $(this).attr('name'), response.invalidFields) > -1 )
							{
								$(this).addClass('invalid');
							}
						
						});
						
					}
				}
				
			});
			
			// Disable redirect
			return false;
			
		});
		
		// General validation function
		validateFields = function(field, name, value) {
		
			$.ajax({
				url: "/ajax/contactForm.php?method=ajax&name=" + name + '&value=' + value,
				dataType: "json",
				success: function(response) {
					
					if ( response.valid == "true" )
					{
						field.removeClass('invalid');
						field.addClass('valid');
					}
					else if ( response.valid == "false" )
					{
						field.removeClass('valid');
						field.addClass('invalid');
						//contactForm.find('input[name="valid"]').val('false');
					}
					
				}
			});
		}
	
	}
	
	// END: FEEDBACK
	
	// START: FOLLOW SCROLL
	
	var followScroll = $('div#followScroll');
	if ( followScroll.size() == 0 && contactForm.size() > 0 )
	{
		contactForm.attr('id', 'followScroll');
		followScroll = contactForm;
	}
	
	if ( followScroll.size() > 0 )
	{
	
		var followScrollOffsetTop = followScroll.offset().top - 15;
		var followScrollHeight = followScroll.outerHeight(true);
		var footerTop = $('div.footer').offset().top;
		var followScrollMaxTop = footerTop-followScrollHeight; // Can't scroll passed this value
		var paddings = parseInt(followScroll.css('padding-bottom')) + parseInt($('div.footer').css('padding-top'));
		
		// Set height manually (avoid safari/chrome bug)
        var childrenHeight = 0 ;
		followScroll.children().each(function(){
			childrenHeight += $(this).outerHeight(true);
		});
		followScroll.height( childrenHeight );
		
		// We need this to keep it at the same place
		var followScrollLeft = followScroll.offset().left;
		followScroll.css({left: followScroll.offset().left});
		
		// If we have some space to follow
		if ( followScrollHeight < $(window).height() || 1 == 1 )
		{
		
			// Observe window scroll
			$(window).bind('scroll', function() {
			
				// Update values since this can contain hidden elements
				followScrollHeight = followScroll.outerHeight(true);
				followScrollMaxTop = footerTop-followScrollHeight;
				footerTop = $('div.footer').offset().top;
				
				if ( $(this).scrollTop() < followScrollMaxTop - paddings ) // Don't overflow footer
				{
					// Reset
					followScroll.css({ top: '' });
					followScroll.removeClass('doFix');
				
					if ( $(this).scrollTop() > followScrollOffsetTop && !followScroll.hasClass('doFollow') )
					{
						followScroll.addClass('doFollow');
					}
					else if ( $(this).scrollTop() <= followScrollOffsetTop && followScroll.hasClass('doFollow') )
					{
						followScroll.removeClass('doFollow');
					}
				}
				else
				{
					// Set manual position
					followScroll.removeClass('doFollow');
					followScroll.addClass('doFix');
					followScroll.css({ top: (followScrollMaxTop - paddings) });
				}
			
			});
		
		}
		
	}
	
	// END: FOLLOW SCROLL
	
	// START: FUNCTIONS FORM TOPLAYER
	
	var showFunctionsForm = $('a#showFunctionsForm');
	if ( showFunctionsForm.size() > 0 )
	{
	
		// Get window width so we can position toplayer
		var documentWidth = $(this).width();
		
		// Set toplayer object
		var functionsFormToplayer = $('div#functionsFormToplayer');
		var functionsFormToplayerBackground = $('div#functionsFormToplayerBackground');
		
		// Fade background
		functionsFormToplayerBackground.css({ opacity : 0.25 });
	
		// Bind click
		showFunctionsForm.bind('click', function() {
		
			// Show toplayer
			functionsFormToplayerBackground.show();
			functionsFormToplayer.show();
			
			// Position it
			var functionsFormToplayerWidth = functionsFormToplayer.outerWidth(true);
			var left = (documentWidth/2)-(functionsFormToplayerWidth/2);
			functionsFormToplayer.css({'left': left+'px'});
			
		});
	
	}
	
	// END: FUNCTIONS FORM TOPLAYER
	
	// START: FUNCTIONS SWITCH CONTENT SELECT
	
	var filterBox = $('select#filterBox');
	if ( filterBox.size() > 0 )
	{
	
		// Get content
		var filterBoxContent = $('div.filterBoxContent');
		
		// Show selected content content
		var active = $('div#filterBoxContent_' + filterBox.val());
		active.show();
		active.addClass('active'); // We can display this before complete load with css
		
		filterBox.bind('change', function() {
		
			// Get value
			var val = $(this).val();
			
			// Fadeout old active and fade in new one
			active.fadeOut(200, function() {
				$('div#filterBoxContent_' + val).fadeIn(200, function() {
					active.removeClass('active'); // Remove active class
					active = $('div#filterBoxContent_' + val); // Set new shown
					active.addClass('active'); // Add active class to new
				});
			});
		
		});
		
	}
	
	// END: FUNCTIONS SWITCH CONTENT SELECT

});
