
( function( $, window, document, undefined ) {

	$.root = $( document );

	$.root.ready( function() {

		body = $.root.find( 'body' );

		$( '<img />' ).attr( 'src', '/img/icons/loading.gif' );

		body.addClass( 'js' );

		body.find( '#introduction' ).introSlides();
		body.find( '.scroller'     ).setScroller();
		body.find( '#competitions' ).prepComp();
		body.find( '#contactus'    ).contactForm();
		body.find( '#newsletter'   ).newsletterTermsForSomeStupidReason();

	} );



	//	OUR PLUGINS

	( function() {

		$.prototype.introSlides = function() {
			var intro, triggers, slides;

			intro    = this;
			triggers = intro.find('ul.triggers');
			slides   = intro.find('ul.slides');

			intro.localScroll({ duration: 500, easing: 'swing' });

			triggers.find('li a')
				.bind('mouseenter', function() {
					var link, target;

					link   = $(this);
					target = link.parent().attr('class');

					link.addClass('hover').parent().siblings().find('a').removeClass('hover');

					slides.find('li.' + target).show().siblings().hide();
				})
				.first().trigger('mouseenter');

			return this;
		};



		$.prototype.prepComp = function() {
			var comp, inner, terms_block, scroller, controls, enter_form,
				enter_loading, submit_button;

			comp         = this;
			inner        = comp.find('div.inner');
			terms_block  = body.find('.terms');
			scroller     = inner.find('.scroller');
			controls     = inner.find('.scroller_control');
			enter_form   = inner.find('form');

			$('<p class="tc_link"><a href="#">Terms &amp; Conditions Apply</a></p>').appendTo(inner);
			$('<p class="close"><a href="#">Close This</a></p>').appendTo(terms_block);

			inner.find('p.tc_link a').bind('click', function() {
				body.find('p.tc_link').fadeOut();
				controls.fadeOut();
				scroller.fadeTo(500, 0.3);
				terms_block.fadeIn();

				return false;
			});

			terms_block.find('p.close a').bind('click', function() {
				body.find('p.tc_link').fadeIn();
				controls.fadeIn();
				scroller.fadeTo(500, 1);
				terms_block.fadeOut();

				return false;
			});

			$('<p class="loading"><span></span> Please Wait</p>').insertAfter(enter_form);
			$('<input type="hidden" name="ajax" value="true" />').appendTo(enter_form);

			enter_loading = scroller.find('p.loading');
			submit_button = enter_form.find('button');

			enter_form.bind('submit', function() {
				var form_action, form_data;

				comp.find('.sub_alert').remove();

				enter_form.fadeTo(500, 0.3);
				enter_loading.fadeIn();

				form_action = '/incs/actions/newsletter_signup.php';
				form_data   = enter_form.serialize();

				$.post(
					form_action,
					form_data,
					function(response) {
						//	SUCCESS!
						if (response.result == 'win') {
							$('<div class="sub_alert sub_thanks"><p>Thank you for registering!</p></div>').insertBefore(enter_form);
							enter_form.fadeOut().delay(500).remove();
							enter_loading.fadeOut();
						}
						//	OOOOOHHH FAAAAAAIIIILLL..
						else {
							enter_loading.fadeOut();
							enter_form.fadeTo(500, 1);
							$('<div class="sub_alert sub_error"><p>' + response.error + '</p></div>').insertAfter(enter_form);
						}
					},
					'json'
				);

				return false;
			});

			return this;
		};



		$.prototype.contactForm = function() {
			var contact_block, form, inner, loading, submit_button;

			contact_block = this;

			form  = contact_block.find('form');
			inner = contact_block.find('div.scroller');

			$('<p class="loading"><span></span> Please Wait</p>').appendTo(contact_block);
			$('<input type="hidden" name="ajax" value="true" />').appendTo(form);

			var loading = contact_block.find('p.loading');
			var submit_button = form.find('button');

			form.bind('submit', function() {
				var form_action, form_data;

				contact_block.find('.sub_alert').remove();

				form.fadeTo(500, 0.3);
				loading.fadeIn();

				form_action = '/incs/actions/contact.php';
				form_data   = form.serializeArray();

				$.post(
					form_action,
					form_data,
					function(response) {
						//	SUCCESS!
						if (response.result == 'win') {
							$('<div class="sub_alert sub_thanks"><p>Thank you for getting in touch!</p></div>').insertBefore(form);
							form.fadeOut().delay(500).remove();
							loading.fadeOut();
						}
						//	OOOOOHHH FAAAAAAIIIILLL..
						else {
							loading.fadeOut();
							form.fadeTo(500, 1);
							$('<div class="sub_alert sub_error"><p>' + response.error + '</p></div>').appendTo(inner);
						}
					},
					'json'
				);

				return false;
			});

			return this;
		};



		$.prototype.setScroller = function() {
			return this.each(function() {
				var settings, scroller, container, container_id, slideshow, slides,
					slide_width, slide_margin, slideshow_width, prev_button, next_button;

				settings = {
					gallery:  { exclude: 3, step: 4 },
					tips:     { exclude: 3, step: 4 },
					defaults: { exclude: 0, step: 1 }
				};

				scroller     = $(this);
				container    = scroller.closest('div.block');
				container_id = container.attr('id');

				if (settings[container_id]) {
					settings = settings[container_id];
				}
				else {
					settings = settings.defaults;
				}

				slideshow = scroller.find('ul:first');
				slides    = slideshow.find('li');

				slides_count = slides.length;

				if (slides_count == 1) return;

				slide_width     = slides.first().outerWidth();
				slide_margin    = parseInt(slides.first().css('marginLeft')) * 2;
				slideshow_width = (slide_width + slide_margin) * slides_count;

				slideshow.css('width', slideshow_width);

				$('<p class="scroller_control prev"><a href="#">Previous</a></p>').insertAfter(scroller);
				$('<p class="scroller_control next"><a href="#">Next</a></p>').insertAfter(scroller);

				body.find('.scroller_control').bind('click', function() {
					body.find('.sub_alert').remove();
				})

				prev_button = container.find('p.prev a');
				next_button = container.find('p.next a');

				scroller.serialScroll({
					cycle:    false,
					duration: 500,
					easing:   'swing',
					exclude:  settings.exclude,
					force:    true,
					items:    'li',
					jump:     false,
					lock:     false,
					next:     next_button,
					prev:     prev_button,
					step:     settings.step,
					stop:     true
				});

				slides.find( 'a[rel=gallery]' ).colorbox({
					opacity: 0.5,
					rel: 'gallery'
				});
			});
		};


		$.prototype.newsletterTermsForSomeStupidReason = function() {
			return this.each( function() {
				var container, inner, terms_link, terms_block;

				container   = $( this );
				inner       = container.find( 'div.inner' );
				terms_link  = container.find( 'a.terms_link' );
				terms_block = container.find( 'div.terms' );

				$('<p class="close"><a href="#">Close This</a></p>').appendTo(terms_block);

				terms_link.bind('click', function() {
					terms_block.fadeIn();
					return false;
				});

				terms_block.find('p.close a').bind('click', function() {
					terms_block.fadeOut();
					return false;
				});
			});
		};


	} )();

} )( jQuery, this, this.document );

