$(function(){
	
	$('body').removeClass('js-disabled').addClass('js-enabled');

	// top bar categories dropdown
	$('#top_categories').showCategories();
	
	// my account dropdown
	$('#nav_my_account>a').showAccountOptions();
	
	// raffle list
	$('.raffle_list .raffle').showInfoPanels();
	$('.raffle_list .button').loadMoreRafflesHandler();
	
	// raffle thumb swapout
	$('#raffle_thumb').swapOutBigImages();
	
	// entering JS
	$('#enter>form').showTotal().confirmOnEntrySubmit();
	
	// raffle info and payment CVV explanations
	$('#verification_value_link, #remaining_link, #available_link, #gift_voucher_link, #charity_selector_link, #admin_fee_link, #charity_select_link').showInformationPopup();

	// add + remove animation in basket
	$('input.remove').click(animateRemove);
	$('tr.new_ticket').animateAdd();

	// save + retrieve scrollposition in basket
	$('#scroll_position').handlePageReload();

	// autoclearing text inputs
	$('#search .text').clearDefault();

    // auto validate for playername on signup
    $('#playername input').autoValidateForPlayername();

	//raffle countdown
	$('.end_date').countdownDate();
	
	// description tooltips for charities
	$('.description_tooltip').descriptionTooltip();
	
	$('.email_count_button').incrementEmailCount();
	
	$('#payment_form').submit(function(){
		$(this).find('input.submit').attr('disabled',true);
	});

});


$.fn.descriptionTooltip = function() {
		var description = $('.charity_description');
		$(this).mouseover(function(){
			description.addClass('show_description');
		});
		description.bind('mouseleave',function(){
			description.removeClass('show_description');
		});
}

$.fn.countdownDate = function() {
	return this.each(function(){
		endDate = $(this);
		var countdowndate = new Date(endDate.text());
		if(endDate.parents('#countdown').length) {
			endDate.countdown({until:  countdowndate, compact: true });
		} else {
			endDate.countdown({until:  countdowndate, format: 'WDHMS' });
		}
	});
}


$.fn.autoValidateForPlayername = function() {
  return this.each(function(){
    var timeout;
    var myDiv = $('#playername div');
    var input = this;
    $(this).keyup(function(e){
      myDiv.text("Checking availability...").removeClass('good bad hidden');
      window.clearTimeout(timeout);
      timeout = window.setTimeout(function(){
        if (input.value.length > 2){
          $.ajax({  url: 'account/auto_validate_for_player_name', 
                    data: {username: input.value}, 
                    complete: function(data){
                      if (data.status == 202){
                        myDiv.text(data.responseText).removeClass('hidden bad').addClass('good');
                      } else {
                        myDiv.text(data.responseText).removeClass('hidden good').addClass('bad');
                      }
                    }
          });
        } else {
          myDiv.text("Checking availability...").removeClass('good bad').addClass('hidden');
        }
      }, 500);
    });
  });
};

$.fn.showCategories = function() {
	return this.each(function(){
		var container = $(this);
		$('>h2>a',this).click(function(){
			container.toggleClass('open');
			return false;
		});
	});
}

$.fn.showAccountOptions = function() {
	return this.each(function(){
		$(this).click(function(){
			$(this).parent().toggleClass('open');
			return false;
		});
	});
}

$.fn.showInfoPanels = function() {
	return this.each(function(){
		var thumb = $('>.thumb,.raffle_status',this);
		$(this).bind('mouseenter',function(){
			thumb.animate({opacity:0.01},'fast');  // instead of fading fully out leave <a> to be clicked on
		}).bind('mouseleave',function(){
			thumb.animate({opacity:1},'fast');
		});
	});
}

$.fn.swapOutBigImages = function() {
	return this.each(function(){
		var bigImage = $('#raffle_image');
		$('a',this).click(function(){
			bigImage.attr('src',$(this).attr('href'));
			return false;
		});
	});
}

$.fn.showTotal = function() {
	return this.each(function(){
		
		// create total display
		var total = $('<p id="total">Total: <span>£</span></p>');
		var totalVal = $('span',total);
		var price = parseFloat($('#price>strong').text().replace(/£/,''))
		$('input.submit',this).before(total);
		
		if(!isNaN(price)) { // don’t run on free raffles
			// check the field and update the total value
			$('input.text',this).keyup(function(){
				var number = parseInt($(this).attr('value'),10);
				if(!isNaN(number) && number!=0) {
					totalVal.text(number2currency(number*price));
				} else {
					totalVal.text('£');
				}
			});
		} else {
			totalVal.text('£0')
		}
		
		function number2currency(number) {
			number = Number(number).toFixed(2).split('.');
			number[0] = number[0].split("").reverse().join("");
			number[0] = number[0].match(/\d{1,3}/g).join(",");
			number[0] = number[0].split("").reverse().join("");
			if (number[1] == 0) {
				number[1] = "";
			} else {
				number[1] = "." + number[1];
			}
			return '£'+number[0] + number[1];
		}
		
	});
}

$.fn.confirmOnEntrySubmit = function() {
	return this.each(function(){
		$('input.submit',this).click(function(){
			var form = $(this).parents('form');
			var quantity = parseInt($('input.text',form).attr('value'),10);
			var authenticity_token = $('input[name=authenticity_token]').attr('value');
			var available = parseInt($('#tickets_available>strong').text(),10);
			
			// remove any error messages
			form.find('p.error').remove();
			
			// are you playing at least one ticket?
			if (isNaN(quantity) || quantity < 1) {
				form.prepend('<p class="error">You must play at least one ticket</p>');
			}
			// is it too many tickets?
			else if (available < quantity) {
				form.prepend('<p class="error">You can only buy a maximum of '+available+' tickets</p>');
			}
			// else async post and show confirmation popup
			else { 
				$.post(form.attr('action'),{quantity:quantity,authenticity_token:authenticity_token},function(data){
					// update basket quantity
					$('#top_basket a').text(parseInt($('#top_basket a').text(),10)+quantity);
					// show popup
					$(data).appendTo(form);
					$('#entry_confirmation').find('a:first').click(function(){
						$('#entry_confirmation').fadeOut(function(){
							$(this).remove();
						});
						//return false;
					});
				});
			}
			return false;
		});
	});
}

$.fn.loadMoreRafflesHandler = function() {
	return this.each(function(){
		// how many pages initially?
		var size = 2;
		var button = $(this);
		var raffleList = $(this).parents('.raffle_list:first').children('ul');
		var numerator = $('.numerator',this);
		var denominator = $('.denominator',this);
		var url = $('>a',this).attr('href').replace(/\?.*/,'');
		
		$('>a',this).click(function(){
			$.get(url,{size:size},function(data){
				// append the new data
				raffleList.children().remove();
				raffleList.append(data).children('.raffle').showInfoPanels();
				// update the denominator
				denominator.text($('>.raffle',raffleList).length);
				if(numerator.text() == denominator.text()) { button.remove(); }
				// increment page count
				size++;
				// redraw the page in IE 6+7
				if ($.browser.msie && $.browser.version < 8) document.body.className += "";
			},'html');
			return false;
		});
	});
}

$.fn.showInformationPopup = function(){
	return this.each(function(){
		var base = $(this).attr('id').replace(/_link/,'');
		var popup = $('#'+base+'_explanation').hide();
		var close = $('<a class="close"><img src="/images/button_close.png" alt="Close" /></a>')
		popup.append(close);
		
		$(this).add(close).click(function(){
			if(popup.is(':visible')) {
				popup.fadeOut('fast');
			} else {
				popup.show();
			}
			return false;
		})
	});
}

$.fn.clearDefault = function() {
	return this.each(function(){
		var value = $(this).attr('value');
		
		$(this).focus(function(){
			if($(this).attr('value') == value) $(this).attr('value','');
		}).blur(function(){
			if($(this).attr('value') == '') $(this).attr('value',value);
		});
	});
}

function animateRemove(e){
	e.preventDefault();
	var button = $(this);
	
	$('#scroll_position').attr('value',$(document).scrollTop());
	button.parents('tr:first').animate({opacity:0.01},function(){
		button.unbind('click').trigger('click');
	});
}
$.fn.animateAdd = function() {
	return this.each(function(){
		$(this).css('opacity',0).animate({opacity:1});
	});
}

$.fn.handlePageReload = function() {
	return this.each(function(){
		var scroll_position = $(this);
		if (scroll_position.attr('value') != "") {
			$(document).scrollTop(scroll_position.attr('value'))
		}
		scroll_position.parents('form').submit(function(){
			scroll_position.attr('value',$(document).scrollTop());
		});
	});
}

$.fn.incrementEmailCount = function() {
	return this.each(function(){
		var charityId = $(this).attr('rel');		
		$(this).click(function(){
			var p = $(this).prev('p');
			$.get('/baskets/increment_email_share',{charity:charityId},function(){
				console.log(p)
				p.text(parseInt(p.text(),10)+1);
			});
		});
	});
}