var originalText;
var currentCheckboxId;

$(document).ready(function() {

    jQuery('.with-param').append("<i class='ico' title='Varianter'></i>");
    jQuery('.with-param .ico').live('click', function() {
        document.location.href = jQuery(this).prev().attr('href');
    });
    
	if ($('#tabs').length > 0)
	{
		initTabs();
	}
	
	var $checkboxes = $('.gift .wrap input');
	
	if ($checkboxes.length)
	{
		$checkboxes.each(function()
		{
			var $checkBox = $(this);
			
			bindTipEvents($checkBox);
			
			// Toggle icon
			$checkBox.bind('changeIcon', function()
			{
				var $label = $(this).parent();
				
				if ($label.hasClass('clicked'))
				{
					$label.removeClass('clicked');
					$label.removeClass($label.data('type') + 'Clicked');
				}
				else
				{
					$label.addClass('clicked ' + label.data('type') + 'Clicked');
				}
			});
			
			var label = $(this).parent();
			label.data('type', label.attr('class'));
			
			// Checked if checkbox alreddy is checked and set correct icon
			if ($(this).is(':checked'))
			{
				label.addClass('clicked ' + label.data('type') + 'Clicked');
			}
			
			var textarea = $checkBox.parent().find('textarea');
			
			// Open thickbox
			$checkBox.parent().bind('openThickbox', function()
			{
				var thickBoxId = $checkBox.next().attr('id');
				
				// Save the original text to global variable and set current checkbox id to variable
				originalText = textarea.val();
				currentCheckboxId = $checkBox.attr('id');
				
				// Open thickbox
				tb_show("Til og fra kort", "?TB_inline=true&height=205&width=320&inlineId="+thickBoxId+"&modal=false", null);
			});
			
			// set validation on texearea
			textarea.keydown(function(event)
			{
				var textValue = $(this).val();
				var lineLength = textValue.split('\n').length;
				var lineLimit = 10;
				var charLength = textValue.length;
				var charLimit = 150;
				var allowedKeys = [8,16,17,18,33,34,35,36,37,38,39,40,46];
				
				if( jQuery.inArray(event.keyCode, allowedKeys) == -1 )
				{
					if (lineLength > lineLimit)
					{
						$(this).parent().find('span.lines')
							.css( { color: '#ec0a13' })
							.animate( { color: '#000000' }, { queue: false, duration: 2000 } );
						
						return false;
					}
					
					if (charLength > charLimit)
					{
						$(this).parent().find('span.charters')
							.css( { color: '#ec0a13' })
							.animate( { color: '#000000' }, { queue: false, duration: 2000 } );
						
						return false;
					}
				}
				
				return true;
			});
			
			// set events on delete and save buttons
			$checkBox.parent().find('.previous a').click(function()
			{
				tb_remove('delete');
				$checkBox.parent().removeClass('clicked');
				$checkBox.attr('checked', false);
				
				return false;
			});
			
			$checkBox.parent().find('.next a').click(function()
			{
				tb_remove('save');
				
				return false;
			});
		});
		
		// Add events
		$checkboxes.click(function(e)
		{
			// If card is clicked and checked
			if ($(this).parent().hasClass('card'))
			{
				$(this).attr('checked', true)
					.parent()
					.addClass('clicked')
					.addClass('cardClicked')
					.trigger('openThickbox');
				
				// check gift
				var $gift = $(this).parents('td.gift').find('.gift input');
				if (!$gift.is(':checked'))
				{
					$gift.attr('checked', true);
					$gift.trigger('changeIcon');
				}
				
				// check swap
				var $swap = $(this).parents('td.gift').find('.swap input');
				if (!$swap.is(':checked'))
				{
					$swap.attr('checked', true);
					$swap.trigger('changeIcon');
				}
			}
			// Otherwise remove checked on card
			else if ($(this).parent().hasClass('gift') && !$(this).is(':checked'))
			{
				$(this).trigger('changeIcon');
				
				var $card = $(this).parents('td.gift').find('.card input');
				if ($card.is(':checked'))
				{
					$card.attr('checked', false);
					$card.trigger('changeIcon');
				}
			}
			// Otherwise if gift is checked
			else if ($(this).parent().hasClass('gift') && $(this).is(':checked'))
			{
				$(this).trigger('changeIcon');
				
				var $swap = $(this).parents('td.gift').find('.swap input');
				if (!$swap.is(':checked'))
				{
					$swap.attr('checked', true);
					$swap.trigger('changeIcon');
				}
			}
			else
			{
				$(this).trigger('changeIcon');
			}
			
			calculateProductsWithGiftWrap();
		});
		
		
		bindCombinedGiftWrapping();
	}
});

function bindTipEvents(checkBox)
{
	$label = checkBox.prev();
	$title = $label.attr('title');
	
	if ($title != '')
	{
		// Remove title
		$label.removeAttr('title');
		
		// Add tooltip to label
		var showEffect = $.browser.msie == true ? 'none' : 'fade';
		
		$label.simpletip(
		{
			content: $title,
			fixed: true,
			offset: [7,0],
			showEffect: showEffect,
			hideEffect: 'none'
		});
	}
}

function bindCombinedGiftWrapping()
{
	var $checkboxes = $('td.gift div.gift input:checkbox');
	var $chooser = $('table.tblBasket tr.giftCombined');
	
	if ($chooser.length == 1)
	{
		// Calculate after every refresh
		calculateProductsWithGiftWrap();
		
		/*$checkboxes.each(function(e)
		{
			$(this).click(function()
			{
				calculateProductsWithGiftWrap();
			});
		});*/
	}
}

function calculateProductsWithGiftWrap()
{
	var $checkboxes = $('.gift .gift input:checkbox');
	var products = 0;
	var giftwrap = 0;
	
	$.each($checkboxes, function(e, i)
	{
		var $checkbox = $(this);
		var checked = $checkbox.is(':checked');
		
		if ( checked )
		{
			// Add one for each checked checkbox
			giftwrap++;
			
			// Add the number of products to giftwrap
			var $values = $checkbox.parents('td.gift').prev().find('input.formfield');
			products = products + parseInt($values.val());
		}
	});
	
	// Show or hide the giftCombined div
	animateCombinedGiftWrap( products, giftwrap );
}

function isScrolledIntoView(elem)
{
	var docViewTop = $(window).scrollTop();
	var docViewBottom = docViewTop + $(window).height();

	var elemTop = $(elem).offset().top;
	var elemBottom = elemTop + $(elem).height();

	return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
}

function animateCombinedGiftWrap( products, giftwrap )
{
	var $chooser = $('table.tblBasket tr.giftCombined');
	
	if ( showHideCombinedGiftWrap( products, giftwrap ) == true )
	{
		$chooser.show();
		
		if ( isScrolledIntoView( $chooser ) == false && !$chooser.find('input:checkbox').is(':checked') && !$chooser.hasClass('scrolled') )
		{	
			var targetOffset = $chooser.offset().top;
			
			$('html,body').animate({
				scrollTop: targetOffset-100
			}, 800)
			.find('table.tblBasket tr.giftCombined').addClass('scrolled').find('td')
				.delay(800)
				.animate({
					backgroundColor: '#304798',
					color: '#ffffff'
				}, 1200)
				.delay(2500)
				.animate({
					backgroundColor: '#ffffff',
					color: '#585653'
				}, 1400);
		}
	}
	else
	{
		$chooser.hide().find('input:checkbox').attr('checked', false);
	}
}

function showHideCombinedGiftWrap( products, giftwrap )
{
	if ( giftwrap == 1 && products == 1)
	{
		return false;
	}
	else if ( giftwrap == 1 && products > 1)
	{
		return true;
	}
	else if ( giftwrap > 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function returnDefaultText(returnText)
{
	if (returnText == 'delete')
	{
		// Delete the value
		$('#TB_window .cardBox textarea').val('');
	}
	else if( returnText == 'save' )
	{
		var $checkbox  = $('#'+currentCheckboxId);
		
		if ($('#TB_window .cardBox textarea').val() == '')
		{
			$checkbox
				.attr('checked', false)
				.parent()
				.removeClass('clicked');
		}
		else
		{
			$checkbox
				.attr('checked', true)
				.parent()
				.addClass('clicked');
		}
	}
	else
	{
		// Return the value to the original value
		var $cardBox = $('#TB_window .cardBox textarea')
		$('#TB_window .cardBox textarea').val(originalText);
		
		// Remove checked
		if (originalText == '')
		{
			$('#'+currentCheckboxId)
				.attr('checked', false)
				.parent()
				.removeClass('clicked');
		}
	}
}

function initTabs()
{
	// Hide tab content
	$('#tabs .tabContent').hide();
	
	// Show first tab
	$('#tabs ul.tabNav li:first').addClass('selected').show();
	$('#tabs .tabContent:first').show();
}
function changeTab(tab)
{
	var currentTab = $(tab);
	
	// Remove selected classnames
	$('#tabs ul.tabNav li').removeClass('selected');
	
	// Add selected classname to LI
	currentTab.parent().addClass('selected');
	
	// Hide all tabContent
	$('#tabs .tabContent').hide();
	
	// Show selected tab
	var selectedTab = currentTab.attr('href');
	$(selectedTab).show();

	return false;
}

function addVariantToBasket(element, productId, layout)
{
    var link = $(element);
    var txtQuantity = link.parent().parent().parent().children('.qty').children('.formfield');
    addProduct(element, productId, layout, txtQuantity.val());
}

function addProduct(element, productId, layout)
{
    addProduct(element, productId, layout, '1');
}

function addProduct(element, productId, layout, quantity)
{
	// BasketLayout can be 'small' and 'medium'
	var link = $(element);
	var data = 
	{
		ProductId: productId,
		Quantity: quantity,
		BasketLayout: layout
	}

	$.ajax({
	    type: 'GET',
	    url: '/Services/AddToBasket.ashx',
	    cache: false,
	    data: data,
	    dataType: 'json',
	    success: function(result)
	    {
	        // feedback
	        link.parents('.product, .campaign-product, .variantAddToBasket').find('.feedback').remove();

	        var feedback;
	        if (result.freeGift)
	        {
	            feedback = $('<div class="feedback freeGift" />');
	        }
	        else
	        {
	            feedback = $('<div class="feedback" />');
	        }
	        animateFedback(feedback, link);

	        // Update basket
	        $('#basketWrapper').replaceWith(result.basketHtml);

	        $('#newItemL, #newItemR')
				.css({
				    backgroundColor: '#304798',
				    color: '#ffffff'
				})
				.delay(3000)
				.animate({
				    backgroundColor: '#e6e6e6',
				    color: '#666666'
				}, 800);
	    },
	    error: function()
	    {
	        link.parents('.product, .campaign-product, .variantAddToBasket').find('.feedback').remove();
	        var feedback = $('<div class="feedback feedBackError" />');
	        animateFedback(feedback, link);
	    }
	});
}

function animateFedback(feedback, link)
{
	if ($.browser.msie)
	{
		feedback
			.hide()
			.css( { top: '0px' } )
			.appendTo(link.parents('.product, .campaign-product, .variantAddToBasket'))
			.show()
			.delay(2500, function() { $(this).remove();  } );
	}
	else
	{
	    feedback
			.css({ opacity: 0 })
			.appendTo(link.parents('.product, .campaign-product, .variantAddToBasket'))
			.animate({ opacity: 1, top: '0px' }, 200)
			.animate({ top: '0px' }, 2000)
			.animate({ opacity: 0, top: '-10px' }, 300)
			.delay(0, function() { $(this).remove();  } );
	}
}

/*Extra product information*/
function toggleInfo(id,toggler)
{
    var el = document.getElementById(id);
    el.style.display = el.style.display == 'block' ? 'none' : 'block';

    var im = document.getElementById('toggler');
    im.className = im.className == 'closed' ? 'opened' : 'closed';
}

// Plugin's
$.fn.delay = function(time, callback) {
	jQuery.fx.step.delay = function(){};
	return this.animate({delay:1}, time, callback);
}

function showVariantBasketOverlay(el)
{
    var width = jQuery(el).parents('.product').find('.param-wind').outerWidth();

    if (jQuery(el).hasClass('show')) {
        jQuery(el).removeClass('show');
        jQuery(el).parents('.product').find('.param-wind').hide();
        jQuery('.product').css('z-index', '');
    } else {
        jQuery('.basket a').removeClass('show');
        jQuery('.product .param-wind').hide();
        jQuery('.product').css('z-index', '');
        jQuery(el).parents('.product').find('.param-wind').css('right', '-' + width + 'px').show();
        jQuery(el).addClass('show');
        jQuery(el).parents('.product').css('z-index', '50');
    }
}

function hideVariantBasketOverlay()
{
    jQuery('.product').find('.param-wind').hide();
    jQuery('.product').css('z-index', '');
}
