// Prevent errors if firebug not installed - remove from production
/*
if (window.console === undefined)
{
	window.console = {log: function(){}};
}
*/


/**
 * Global Variables
 */
var ANIMATING = false;
var ANIMATIONTIME = 450;
var SLIDERTIME = 8000;
var cartHide;
var currentFeature = 0;
var autoSlider;


/**
 * Event binding/initial setup
 */
	$(document).ready(function()
	{
		$('input[type=text]').placeholder();
	
		//send drop down
		$('#top_cart .friend').click(showSendDropDown);
		$('#top_cart #send_drop .close').click(hideSendDropDown);
		$('#top_cart #send_drop .send').click(sendToAFriend);
	
		//cart drop down
		$('#top_cart .cart').click(showCartDropDown);
		$('#top_cart #cart_drop .close').click(hideCartDropDown);
		
		// Find and launch links - LINK INSIDE DIV MUST HAVE CLASS 'link'!
		$('.small_feature, .shop_callout, #footer dl, .scroll_area ul li, #shop_container .shop_item, .featured_shop_callout, .shop_callout').divLink();
        
        //Home page
        $('.feature_text.active').css({display: 'block'});
        $('.feature_indicator li a').click(clickSlide);
        if($('.feature_indicator'))
        	autoSlider = setTimeout(autoSlide, SLIDERTIME);
        
        $('#more_products').scrollbar({ vertical: false, trackwidth: 645 });
        $('#more_products li').hover(function() {
			$(this).css({zIndex: '1000'});
		}, function() {
			$(this).css({zIndex: '0'});
		});		
		
		//Products Details
		$('#tabs .tabs_nav li').click(changeTab)
		$('.product_image_container li a').click(swapProductImage);
		$('a.share').each(function() {
			var url = $(this).attr('href');
			url = url.replace('theurl', window.location);
			$(this).attr('href', url);
		});
		
		//Shop
		$('#shop_container .add_cart').tooltip(15, 15);
		$('.shop_item').hover(function() { $(this).addClass('hover'); }, function() { $(this).removeClass('hover'); });
		$(".add_to_cart").click(function() {
			if(cartHide)
			{
				clearTimeout(cartHide);
			}
			cartHide = setTimeout(hideCartDropDown, 5000);
			$("#cart_contents").load("http://www.bodygoodiesonline.com/ajax/add-to-cart/?product=" + $(this).attr("href").substr(1));
			$.scrollTo(0, ANIMATIONTIME);
			return false;
		});
		$("#checkout_steps ul li a").click(function() {
			if($(this).attr("href") == "#")
			{
				return false;
			}
		});
		$('.panel').eq(0).scrollbar();
		
		
		$("#comment_form .star").hover(starsHoverOver, starsHoverOut).click(starsClick);
		
		//form stuff
		$('.newsletter_signup').submit(newsletterSignUp);
		$('#signup_form').submit(validateRegistration);
		$('#billing').submit(validateBilling);
		$('#shipping_form').submit(validateShipping);
		$('#same_as_billing').change(sameAsBilling);
		$('#pay_form').submit(validatePayment);

		$('#password_request').submit(requestPassword);
		$('#comment_form').submit(submitReview);
		
		loadFooterTweet();
	});


	
/**
 * Event handlers
 */
 
//main feature swapping
function autoSlide(event) 
{
	if(autoSlider)
	{
		clearTimeout(autoSlider);
	}
	autoSlider = setTimeout(autoSlide, SLIDERTIME);
	currentFeature ++;
	if(currentFeature == $('.feature_indicator li').length)
	{
		currentFeature = 0;
	}
	slideMainFeature(currentFeature);
}

function clickSlide() 
{
	if(autoSlider)
	{
		clearTimeout(autoSlider);
	}
	currentFeature = $('.feature_indicator li').index($(this).parents('li'));
	slideMainFeature(currentFeature);
	return false;
}

function slideMainFeature(index) 
{
	if(ANIMATING)
	{
		return false;
	}
	ANIMATING = true;
	
	$('.feature_indicator li .selected').removeClass('selected');
	$('.feature_indicator li:eq(' + index + ')').find('a').addClass('selected');
	
	$('.feature_slider').animate({left: '-' + (614*index) + 'px'}, {duration: ANIMATIONTIME});
	$('.feature_text.active').removeClass('active').fadeOut(ANIMATIONTIME/2, function() {
		$('.feature_text.f-text-0' + (index+1)).fadeIn(ANIMATIONTIME/2).addClass('active');
		ANIMATING = false;
	});
};


// show the send form
function showSendDropDown()
{
	hideCartDropDown();
	$('#send_drop').fadeIn(ANIMATIONTIME/3);
	return false;
};
//hide the send form
function hideSendDropDown()
{
	$('#send_drop').fadeOut(ANIMATIONTIME/3);
	return false;
};
//reset the send form
function resetSendDropDown()
{
	$('#send_drop form').html('<h6>Send to A Friend</h6><p><input type="text" name="send_name" value="your name" title="your name" /><input type="text" name="send_email" value="your email" title="your email" /><input type="text" name="friend_name" value="your friend\'s name" title="your friend\'s name" /><input type="text" name="friend_email" value="your friend\'s email" title="your friend\'s email" /></p><h6>Message</h6><p><textarea name="send_message" rows="" cols=""></textarea><a href="<?=$www_root?>#" class="send">Send</a></p>');
};


// show the cart contents
function showCartDropDown()
{
	hideSendDropDown();
	$('#cart_drop').fadeIn(ANIMATIONTIME/3);
	return false;
};
//hide the cart contents
function hideCartDropDown()
{
	if(cartHide)
	{
		clearTimeout(cartHide);
	}
	$('#cart_drop').fadeOut(ANIMATIONTIME/3);
	return false;
};


//swap product image
function swapProductImage(event)
{
	if(ANIMATING)
	{
		return false;
	}
	ANIMATING = true;
	
	$('.thumbs .selected').removeClass('selected');
	$(this).parent('li').addClass('selected');
	
	var newImage = new Image();
	
	$(newImage).load(function () {
		$(this).css({opacity: 0});
		$('.large_image').append($(this));
		$(this).animate({opacity: 1}, function() {
			$('.large_image img').eq(0).remove();
			ANIMATING = false;
		});
	}).error(function () {
		ANIMATING = false;
	}).attr('src', $(this).attr('href'));
	
	return false;
};

function changeTab()
{
	var index = $('#tabs .tabs_nav li').index($(this));
	
	$('.tabs_nav li.selected').removeClass('selected');
	$('.tabs_nav li').eq(index).addClass('selected');
	
	$('.panel.active').removeClass('active');
	$('.panel').eq(index).addClass('active')
	if(!$('.panel.active').hasClass('ui-scrollable'))
	{
		$('.panel.active').scrollbar();
	}
	return false;
}




/**
 * General functions
 */
// Load newest tweet
var loadFooterTweet = function ()
{
	if($('#footer_tweet').length != 0)
	{
		$.getJSON("http://twitter.com/status/user_timeline/bodygoodies.json?count=1&callback=?", function(data){ 
			$.each(data, function(i, item) { 
				$("#footer_tweet").html("<p>" + checkForLink(item.text) + "</p> <span>" + calcRelativeTime(item.created_at) + " via " + item.source + "</span>"); 
			}); 
		});
	}
};
// Search tweet for http:// and make it a link!
var checkForLink = function (text)
{
	return text.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(t) {
		return t.link(t);
	});
};
// Figure out relative time of tweet
var calcRelativeTime = function (time_value) {
	var values = time_value.split(" ");
	time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
	var parsed_date = Date.parse(time_value);
	var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
	var delta = parseInt((relative_to.getTime() - parsed_date) / 1000, 10);
	delta = delta + (relative_to.getTimezoneOffset() * 60);
	  
	var r = '';
	if (delta < 60) {
		r = 'a minute ago';
	} else if(delta < 120) {
		r = 'couple of minutes ago';
	} else if(delta < (45*60)) {
		r = (parseInt(delta / 60, 10)).toString() + ' minutes ago';
	} else if(delta < (90*60)) {
		r = 'an hour ago';
	} else if(delta < (24*60*60)) {
		r = '' + (parseInt(delta / 3600, 10)).toString() + ' hours ago';
	} else if(delta < (48*60*60)) {
		r = '1 day ago';
	} else {
		r = (parseInt(delta / 86400, 10)).toString() + ' days ago';
	}
	  
	return r;
};


function newsletterSignUp()
{
	var allGood = true;
	var email = $(this).find('input[name=email]');
	if(!checkEmail(email.val()))
	{
		allGood = false;
		showError(email);
	}
	else
	{
		clearError(email);
	}
	
	if(allGood)
	{
		$(this).find('.submit').hide();
		$.ajax({
			type: "POST",
			url: "http://www.bodygoodiesonline.com/ajax/newsletter-signup/",
			data: { email: email.val() },
			success: function(data){
				$('.newsletter_signup').hide().parents('li').find('p').html(data);
				$('.newsletter_signup').hide().parents('div.left').find('p').html(data);
			}
		});
	}
	
	return false;
}


// FORMS AND VALIDATION

function sendToAFriend()
{
	var allGood = true;
	
	$('#top_cart #send_drop').find('input, textarea').each(function() {
		if($(this).val() == '' || $(this).val() == 'your name' || $(this).val() == 'your friend\'s name')
		{
			allGood = false;
			showError($(this));
		}
		else if($(this).attr('name') == 'send_email' || $(this).attr('name') == 'friend_email')
		{
			if(!checkEmail($(this).val()))
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				clearError($(this));
			}
		}
		else
		{
			clearError($(this));
		}
	});
	
	if(allGood)
	{
		var send_name = $('#top_cart #send_drop').find('input[name=send_name]').val();
		var send_email = $('#top_cart #send_drop').find('input[name=send_email]').val();
		var friend_name = $('#top_cart #send_drop').find('input[name=friend_name]').val();
		var friend_email = $('#top_cart #send_drop').find('input[name=friend_email]').val();
		var send_message = $('#top_cart #send_drop').find('textarea[name=send_message]').val();
		
		$.ajax({
			type: "POST",
			url: "http://www.bodygoodiesonline.com/ajax/send-to-friend/",
			data: { send_name: send_name, send_email: send_email, friend_name: friend_name, friend_email: friend_email, send_message: send_message },
			success: function(msg){
				$('#top_cart #send_drop form').html('<h6>Your Message Has Been Sent!</6>');
				setTimeout(hideSendDropDown, 5000);
				setTimeout(resetSendDropDown,5500);
			}
		});
	}
	
	return false;
}

function validateRegistration()
{
	var allGood = true;
	var password = '';
	var email = '';
	
	$(this).find('input.required, input[name=password], input[name=password_confirmation], select.required').each(function() {
		if($(this).val() == '')
		{
			allGood = false;
			showError($(this));
		}
		else if($(this).attr('name') == 'email')
		{
			if(!checkEmail($(this).val()))
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				email = $(this).val();
				clearError($(this));
			}
		}
		else if($(this).attr('name') == 'confirm_email')
		{
			if(!checkEmail($(this).val()) || $(this).val() != email)
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				clearError($(this));
			}
		}
		else if($(this).attr('name') == 'password')
		{
			password = $(this).val();
		}
		else if($(this).attr('name') == 'password_confirmation')
		{
			if($(this).val() != password)
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				clearError($(this));
			}
		}
		else
		{
			clearError($(this));
		}
	});
	
	if(!allGood)
	{
		if($(this).find('#error_message').css('display') == 'none')
		{
			$(this).find('#error_message').css({display: 'block'}).html('<p>Please fix the errors below before continuing.</p>');
		}
		return false;
	}
}

function validateBilling()
{
	var allGood = true;
	var password = '';
	var email = '';
	
	$(this).find('input.required, select.required').each(function() {
		if($(this).val() == '')
		{
			allGood = false;
			showError($(this));
		}
		else if($(this).attr('name') == 'email')
		{
			if(!checkEmail($(this).val()))
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				email = $(this).val();
				clearError($(this));
			}
		}
		else if($(this).attr('name') == 'confirm_email')
		{
			if(!checkEmail($(this).val()) || $(this).val() != email)
			{
				allGood = false;
				showError($(this));
			}
			else
			{
				clearError($(this));
			}
		}
		else
		{
			clearError($(this));
		}
	});
	
	if($('#create_account').attr('checked'))
	{
		$(this).find('input[name=password], input[name=password_confirmation]').each(function() {
			if($(this).val() == '')
			{
				allGood = false;
				showError($(this));
			}
			else if($(this).attr('name') == 'password')
			{
				password = $(this).val();
			}
			else if($(this).attr('name') == 'password_confirmation')
			{
				if($(this).val() != password)
				{
					allGood = false;
					showError($(this));
				}
				else
				{
					clearError($(this));
				}
			}
			else
			{
				clearError($(this));
			}
		});
	}
	
	
	if(!allGood)
	{
		if(!$(this).find('#error_message').length)
		{
			$(this).find('.required_fields').after('<div id="error_message" class="error_message" style="display: block;"><p>Please fix the errors below before continuing.</p></div>');
		}
		return false;
	}
}

function sameAsBilling()
{
	if($(this).attr('checked'))
	{
		for(var key in billing_info)
		{
			$('#shipping_form').find('input[name=' + key +'], select[name=' + key +']').val(billing_info[key]);
		}
	}
	else
	{
		for(var key in billing_info)
		{
			$('#shipping_form').find('input[name=' + key +'], select[name=' + key +']').val('');
		}
	}
}

function validateShipping()
{
	var allGood = true;
	var password = '';
	
	$(this).find('input.required, input[name=phone], select.required').each(function() {
		if($(this).val() == '')
		{
			allGood = false;
			showError($(this));
		}
		else
		{
			clearError($(this));
		}
	});
	
	if(!allGood)
	{		
		if($(this).find('#error_message').css('display') == 'none')
		{
			$(this).find('#error_message').css({display: 'block'}).html('<p>Please fix the errors below before continuing.</p>');
		}
		return false;
	}
}

function validatePayment()
{
	var allGood = true;
	
	$(this).find('input.required, select.required').each(function() {
		if($(this).val() == '')
		{
			allGood = false;
			showError($(this));
		}
		else
		{
			clearError($(this));
		}
	});
	
	if(!allGood)
	{		
		if($(this).find('#error_message').css('display') == 'none')
		{
			$(this).find('#error_message').css({display: 'block'});
		}
		$(this).find('#error_message').html('<p>Please fix the errors below before continuing.</p>');
		return false;
	}
	else
	{
		$(this).find('.place_order').addClass('disabled');
	}
}

function checkEmail(email) {
	var filter = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
	if (filter.test(email)) {
		return true;
	}
	else
	{
		return false;
	}
}

function showError(el)
{
	el.addClass('error').prev('label').addClass('error');
}

function clearError(el)
{
	el.removeClass('error').prev('label').removeClass('error');
}



function requestPassword()
{
	var allGood = true;
	var form = $(this);
	$(this).find('input[name=email]').each(function() {
		if(!checkEmail($(this).val()))
		{
			allGood = false;
			showError($(this));
		}
		else
		{
			email = $(this).val();
			clearError($(this));
		}
	});
	if(allGood)
	{
		$.ajax({
			type: "POST",
			url: "http://www.bodygoodiesonline.com/ajax/request-password/",
			data: { email: email },
			success: function(data){
				form.find('.status').remove();
				if(data.substr(0, 1) != 'Y')
				{
					form.find('h2').after('<p class="status">' + data + '</p>');
				}
				else
				{
					form.find('p, input').remove();
					form.find('h2').after('<p class="status">' + data + '</p>');
				}
			}
		});
	}
	return false;
}



var starValue = 0;
function starsHoverOver()
{
	var index = $("#comment_form .star").index(this);
	updateStars(index);
}

function starsHoverOut()
{
	$("#comment_form .star").removeClass('active');
	if(starValue != 0)
	{
		updateStars(starValue);
	}
}

function starsClick()
{
	var index = $("#comment_form .star").index(this);
	updateStars(index);
	starValue = index;
	$('#comment_form input[name=review_rating]').val(index + 1);
}

function updateStars(index)
{
	for(var i = 0; i < 5; i++)
	{
		if(i <= index)
		{
			$("#comment_form .star").eq(i).addClass('active');
		}
		else
		{
			$("#comment_form .star").eq(i).removeClass('active');
		}
	}	
}

function submitReview()
{
	var allGood = true;
	var form = $(this);
		
	$(this).find('input, textarea').each(function() {
		if($(this).val() == '')
		{
			allGood = false;
			showError($(this));
		}
		else
		{
			clearError($(this));
		}
	});
	
	if(allGood)
	{
		var product = form.find('input[name=product]').val();
		var rating = form.find('input[name=review_rating]').val();
		var title = form.find('input[name=review_title]').val();
		var comment = form.find('textarea[name=review_comment]').val();
		
		$.ajax({
			type: "POST",
			url: "http://www.bodygoodiesonline.com/ajax/submit-product-review/",
			data: { rating: rating, title: title, comment: comment, product: product },
			success: function(data){
				form.html(data);
			}
		});
	}
	
	return false;
}





/*
 * DivLink Plugin
 * Turns any div into a link based on a link with the class 'link' found in the div.
 * @author Ben Plum <bplum@gmail.com>
 */
(function($){
	$.fn.divLink = function()
	{	
		$(this).click(function() {
			window.location = $(this).find('a.link').attr('href');
			return false;
		});
	};
})(jQuery);


/**
 * jQuery Placeholder plugin:
 * Swaps input field text with placeholder on blur/focus
 *
 * @version 1.0
 * @author Zach Waugh <zwaugh@gmail.com>
 * http://zachwaugh.com/projects/jquery-plugins/placeholder.html
 * 
 * Copyright (c) 2009 Zach Waugh
 * Licensed under the MIT License - http://www.opensource.org/licenses/mit-license.html
 */
(function($){$.fn.placeholder=function(){return this.each(function(){$(this).focus(function(){if($(this).val()==$(this).attr("defaultValue")){$(this).val("")}});$(this).blur(function(){if($(this).val()===""){$(this).val($(this).attr("defaultValue"))}})})}})(jQuery);


/* 
 * Tooltip Plugin 1.1
 * Add Some Fancy Tooltips to Any Element
 * (Element MUST have a 'title' attribute set!)
 *
 * @author Ben Plum <bplum@gmail.com>
 * @version 1.1
 *
 * 1/14/10:
 * - Fixed IE6 artifact bug
 *
 * Copyright (c) 2009 Ben Plum MIT License
 */
(function($){

	// Defaults
	var offsetX = 10;
	var offsetY = 0;
	var charLimit = 45;

	//bind events
	$.fn.tooltip = function(x, limit)
	{
		offsetX = x;
		charLimit = limit;
		
		$(this).hover(buildTooltip, destroyTooltip).mousemove(moveTooltip);
	};

	//all the tooltip to the DOM
	function buildTooltip(event) 
	{
		var target = event.target;
			
		target.t = target.title;
		target.title = '';

		if(target.t.length > charLimit)
		{
			target.t = target.t.substr(0, charLimit) + '...';
		}
		
		$("body").append('<p id="tooltip"><span class="inner">' + this.t + '</span></p>');
		offsetY = $('#tooltip').height() / 2 - 7; //determine offsetY based on height
		
		if(event.pageX < $(window).width()*.65) {
			$("#tooltip")
				.css("left",(event.pageX + offsetX) + "px")
				.css("top",(event.pageY - offsetY) + "px")
				.fadeIn("fast");;
		} 
		else 
		{
			$('#tooltip').addClass('left');
			$("#tooltip")
				.css("left",(event.pageX - offsetX - $('#tooltip').width()) + "px")
				.css("top",(event.pageY - offsetY) + "px")
				.fadeIn("fast");;
		}
	}
	
	//remove the tooltip from the DOM
	function destroyTooltip(event) 
	{
		var target = event.target;
		target.title = target.t;
		$("#tooltip").unbind('mousemove').remove();
	}
	
	//make the tooltip follow the cursor
	function moveTooltip(event)
	{
		if(event.pageX < $(window).width()*.65) {
			$('#tooltip').removeClass('left');
			$("#tooltip")
				.css("left",(event.pageX + offsetX) + "px")
				.css("top",(event.pageY - offsetY) + "px");
		} 
		else 
		{
			if(!$("#tooltip").hasClass('left'))
			{
				$('#tooltip').addClass('left');
			}
			$("#tooltip")
				.css("left",(event.pageX - offsetX - $('#tooltip').width()) + "px")
				.css("top",(event.pageY - offsetY) + "px");
		}
	}	

})(jQuery);
