(function($){
//==================================================
// animation functions
	
// FIXME $.fadein and $.fadeout may already be reserved by jquery - change these?
$.fadein = function(){
	$(this)
		.stop(true,false)
		.fadeTo('fast',1);
	}
$.fadeout = function(){
	$(this)
		.stop(true,false)
		.fadeTo('slow',0.7);
	}

$.rollover = function(){
	$(this)
		.stop(true,false)
		.animate({color:'red'},{ queue:true,duration:800});
	}
$.rollout = function(){
	$(this)
		.stop(true,false)
		.animate({color:'green'},{ queue:true,duration:800});
	}
	
//================================================
// pause

$.fn.pause = function(secs){
	return this.queue(function(){
		var el = this;
		setTimeout(function(){
			return $(el).dequeue();
			},secs);
		});
	};

//================================================
// document load

$(function(){
	
	// remove noscript
	$('body').removeClass('noscript');
	
	// handle variant selection
	var variantselectors = $('#telegram-variant li').each(function(){
		// handle li
		var li = $(this).click(function(e){
			var li = $(this);
			variantselectors.removeClass('selected');
			li.addClass('selected');
			li.data('radio').focus().click();
			$('#preview').fadeOut(300,function(){
				$(this).load(function(){
					$(this).fadeIn(300);
					})
					.attr('src','media/telegram-styles/'+telegram.style+'/previews/'+li.data('radio').val()+'.jpg');
				});
			//$('#preview').css('background-image','url(media/telegram-styles/'+telegram.style+'/previews/'+li.data('radio').val()+'.jpg)');
			return false;
			});
		// handle radio
		var radio = li.find('input:radio').eq(0).click(function(e){
			e.stopPropagation();
			variantselectors.removeClass('selected');
			$(this).data('li').addClass('selected');
			});
		// store radio in li
		li.data('radio',radio);
		// store li in radio and hide radio
		radio.data('li',li).css('display','none');
		});
	
	// handle date pickers
	$.datepicker._today = new Date();
	$.datepicker.noWeekendsOrDaysWhenAfter2 = function(date){
		var ret = [true,''];
		if (date.getDate()+'-'+date.getMonth()+'-'+date.getFullYear()==$.datepicker._today.getDate()+'-'+$.datepicker._today.getMonth()+'-'+$.datepicker._today.getFullYear()){
			//alert('NOW: '+$.datepicker._today.toDateString());
			if ($.datepicker._today.getUTCHours()>13){
				ret[0] = false;
				}
			}
		if (ret[0]){
			return $.datepicker.noWeekends(date);
			}
		return ret;
		}
		
	$('input.date').datepicker({
		minDate: 0,
		maxDate: '+2W',
		beforeShowDay: $.datepicker.noWeekendsOrDaysWhenAfter2,
		dateFormat: 'dd-mm-yy'
		});
	$('input.stampdate').css({textTransform:'uppercase'}).datepicker({
		dateFormat: 'dd M y'
		});
	
	// handle fullstop helper
	$('#fullstop-help').css({opacity:0,display:'block'});
	
	// handle telegram content editing
	var contenteditor = $('#telegram-content').focus().each(function(){
		// handle textarea
		var textarea = $(this).keyup(function(e){
			var textarea = $(this);
			// show fullstop helper
			if (e.keyCode==190){
				$('#fullstop-help').stop(true,true).fadeTo(300,1).pause(3500).fadeTo(300,0);
				}
			// replace full stops
			textarea.val(textarea.val().replace(/[\.]{2,100}/g,'…'));
			textarea.val(textarea.val().replace(/\.\s/g,' = '));
			var count = textarea.val().length;
			var remaining = textarea.data('remaining');
			if (remaining.length>0){
				remaining.text(Math.max(0,400-count));
				}
			if (count>400){
				textarea.val(textarea.val().substring(0,400));
				}
			})
		.blur(function(e){
			var textarea = $(this);
			// replace full stops
			textarea.val(textarea.val().replace(/[\.]{2,100}/g,'…'));
			textarea.val(textarea.val().replace(/\.\s/g,' = ').replace(/\.$/g,'='));
			});
		// handle letters-remaining
		var remaining = $('#letters-remaining');
		if (remaining.length>0){
			// count characters in textarea
			var count = textarea.val().length;
			remaining.text(400-count);
			}
		// store rmaining in textarea
		textarea.data('remaining',remaining);
		});
		
	// handle telegram colour changing
	var colourselectors = $('#telegram-colours li').each(function(){
		// handle li
		var li = $(this).click(function(e){
			var li = $(this);
			colourselectors.removeClass('selected');
			li.addClass('selected');
			li.data('radio').focus().click();
			var contenteditor = $('#telegram-content');
			if (contenteditor.length>0 && li.data('radio').val()){
				contenteditor.css('background-image','url(media/telegram-styles/'+telegram.style+'/editors/'+li.data('radio').val()+'.jpg)');
				}
			else{
				contenteditor.css('background-image','url(media/telegram-styles/'+telegram.style+'/editor.jpg)');
				}
			var envelope = $('#envelope');
			if (li.data('radio').val()){
				envelope.css('background-color','#'+li.data('radio').val());
				}
			else{
				envelope.removeAttr('style');
				}
			return false;
			});
		// handle radio
		var radio = li.find('input:radio').eq(0).click(function(e){
			e.stopPropagation();
			colourselectors.removeClass('selected');
			$(this).data('li').addClass('selected');
			});
		// store radio in li
		li.data('radio',radio);
		// store li in radio and hide radio
		radio.data('li',li).css('display','none');
		});
	
	// navigation animation
	$('#navigation .logo, #content .push-link a')
		.css({opacity:1})
		.mouseenter($.fadeout)
		.mouseleave($.fadein);
	//prettyPhoto	
	$("a.enlarge").prettyPhoto({opacity:0.6});
	
	
	
	// reminder form
	var $reminderForm = $('#reminder-form')
		.prependTo('body')
		.css({display: 'block'});
	$reminderForm
		.css({
			marginTop: (-($reminderForm.outerHeight())) + 'px'
			})
		.bind('slideopen', function(e){
			
			$reminderForm.animate({marginTop: 0}, {
				queue: false,
				duration: 400
				});
			
			$(document.body).animate({backgroundPosition: '0px ' + ($reminderForm.outerHeight()) + 'px'}, {queue: false, duration: 400});
			
			})
		.bind('slideclosed', function(e){
			
			$reminderForm.animate({marginTop: (-($reminderForm.outerHeight())) + 'px'}, {
				queue: false,
				duration: 400
				});
			
			$(document.body).animate({backgroundPosition: '0px 0px'}, {queue: false, duration: 400});
			
			});
	
	// replace FAQ link
	$('a.nav-faq')
		.attr('href', '#')
		.text('Not ready to send just yet?')
		.removeClass('nav-faq')
		.addClass('nav-reminder reminder-form-open');
	
	// reminder form openers
	var $reminderFormOpeners = $('a.reminder-form-open')
		.bind('click', function(e){
			$reminderForm.trigger('slideopen');
			e.preventDefault();
			});
	$('#navigation a.reminder-form-open').css({display: 'block'});
	
	// reminder form closers
	var $reminderFormClosers = $('a.reminder-form-close')
		.bind('click', function(e){
			$reminderForm.trigger('slideclosed');
			e.preventDefault();
			});
	
	// reminder datepicker
	$('#reminder-form input[name=date]').datepicker({
		minDate: 0,
		beforeShowDay: $.datepicker.noWeekendsOrDaysWhenAfter2,
		dateFormat: 'dd MM yy'
		});
		
	// reminder email input
	$('#reminder-form input[type=email]').bind('focus', function(e){
		if ($(this).val() == 'Please enter your email address'){
			$(this).val('')
			}
		});
	
	
	});

//================================================
})(jQuery);
