jQuery.fn.delay = function(millis,callBack){
    var object = $(this);
    $.extend(object,{callBack:callBack});
    return window.setTimeout(function() {
        object.callBack();
        return object;
    }, millis);
}

var message = {
	show:function(container,pane,response,closeOnEnd){
		pane
			.text(response.message)
			.css({display: 'none'})
			.attr('class','message')
			.removeClass('hidden')
			.addClass(response.msgType)
			.fadeIn()
			.delay(
				2000,
				function(){
					$(this)
						.css({display: 'block'})
						.addClass('hidden')
						.fadeOut('fast',function(){
							if(response.close){
								$(this).removeClass(response.msgType);
								if(closeOnEnd != undefined){
									closeOnEnd.call();
								}
							}else{
								message.focusOnField(container,response.msgType);
							}
						})
				}
			);
	},
	
	focusOnField:function(container,msgType){
		switch(msgType){
			case 'your-name-missing':
				$(container+' div.field-name input').get(0).focus();
				break;
			case 'your-email-missing':
			case 'your-email-error':
				$(container+' div.field-email input').get(0).focus();
				break;
			case 'recipient-name-missing':
				$(container+' div.field-recipient-name input').get(0).focus();
				break;
			case 'recipient-email-missing':
			case 'recipient-email-error':
				$(container+' div.field-recipient-email input').get(0).select();
				break;
			case 'text-missing':
				$(container+' div.field-comment textarea').get(0).focus();
				break;
		}
	}
};


var tools = {
	activeWindow:null,
	init:function(){
		$('.tools .recommend > a').click(tools.handleClick);
		$('.tools .recommend input.button').click(tools.send);
		$('.tools .recommend a.close').click(tools.close);
	},
	
	handleClick:function(e){
		e.preventDefault();
		var form = $(this).next('fieldset');
		
		if(form.hasClass('hidden')){
			tools.show(form);
		}else{
			tools.hide(form);
		}
	},
	
	show:function(form){
		$(form)
			.css({display: 'none'})
			.removeClass('hidden')
			.fadeIn();
	},
	
	hide:function(form){
		$(form)
			.css({display: 'block'})
			.addClass('hidden')
			.fadeOut();
	},
	
	close:function(e){
		e.preventDefault();
		var form = $(this).parents('fieldset');
		tools.hide(form);
	},
	
	send:function(e){
		e.preventDefault();
		
		var form = $(this).parents('fieldset');
		var postID = $(this).parents('li').children('a').attr('rel');
		var data = $(this).parents('fieldset').find('input:not([type=image])').serializeArray();
		var messagePane = $(this).next('div.message');
		var test = 'hepp';
		
		$.getJSON(
			'/Templates/Pages/Recommend.aspx?'+Math.random(),
			data,
			function(data){
				message.show('li.recommend',messagePane,data,function(){
					tools.hide(form);
				});
			}
		);
	}
}


var faq = {
	active:undefined,
	
	init:function(){
		$('.faq .content-body li > a').click(faq.handleClick);
		$('.faq .content-body .form > a').click(faq.handleClick);
		$('.js-faq .button').click(faq.sendQuestion);
	},
	
	handleClick:function(e){
		e.preventDefault();
		
		if($(this).parent().hasClass('open')){
			faq.closeAnswer($(this));
		}else{
			faq.openAnswer($(this));
		}
	},
	
	openAnswer:function(anchor){
		if(faq.active != undefined){
			faq.closeAnswer(faq.active);
		}
		anchor
			.next('div')
			.slideDown(
				'fast',
				function(){
					faq.active = anchor;
					anchor.parent().addClass('open');
				}
			);
	},
	
	closeAnswer:function(anchor){
		anchor
			.next('div')
			.slideUp(
				'fast',
				function(){
					faq.active = undefined;
					anchor.parent().removeClass('open');
				}
			);
	},
	
	closeForm:function(){
		faq.closeAnswer($('.faq .content-body .form > a'));
		$('input[type="text"],textarea').val('');
	},
	
	sendQuestion:function(e){
		e.preventDefault();
		var data = $(this).parents('fieldset').find('input:not([type=image]), textarea').serializeArray();
		var messagePane = $(this).next('div.message');
		
		$.getJSON(
			'/Templates/Pages/Question.aspx?'+Math.random(),
			data,
			function(response){
				message.show('.js-faq fieldset',messagePane,response,faq.closeForm);
			}
		);
	}
}

$(document)
	.ready(tools.init)
	.ready(faq.init)
	.ready(function(){
		$('a[rel="external"]').each(function(){
			$(this).attr('target','_blank');
		});
	});

