/* ****************************** SCRIPT LOGIC  ******************************** */

$(function(){
	
	/*==================== BANNER ====================*/
	
	
	$('.bannerCycler').cycler({
		selectorText : {
			viewPort : '.viewPort',
			slide : '.bannerContainer',
			navParent : '.controlPanel'
		},
		settings : {
			type : 'fade',
			animDuration : 500,
			easing : 'linear',
			delay : 5000,
			createNav : true
		},
		classes : {
			navContainer : 'navigationContainer',
			navSelect : 'selected'
		}
	});
	
	/*==================== ACCORDIAN ====================*/
	
	$('.articleTree').accordian({
		wrapper : '.wrapper',
		title	: 'a.monthHolder',
		content	: 'ul',
		closeClass : 'closed'
	});
	
	$('#leftNavAnchor').accordian({
		wrapper : '.wrapper',
		title	: '._jsSwitch',
		content	: '.subMenu',
		closeClass : 'closed'
	});
	
	
	/* ==================== FORMS ====================== */

	/*
	$.fn.formConfig.defaults = {
		listeners		: { 'click': '._jsTriggerFormSubmit' },			// Listeners (type, selector - relative to parent form) //
		disableListener	: true,											// Whether to disable listener on submit //
		ajaxSubmit		: false,										// Submit via AJAX POST request //
		ajaxDataType	: 'json',										// What kind of data response is expected //
		ajaxTimeout		: 20000, // Milisecond timeout //				// When to abandon AJAX call and throw error //
		ajaxKeyword		: 'ajax_on',										// What post var will be interpreted by PHP (to prevent normal output) //
		formElements	: 'input, select, textarea',					// What form elements to search for (jQuery selector) //
		formExceptions	: '._jsFormExp',								// What form elements to ignore //
		fnSuccess		: function( data, textStatus, xhr ){},			// What function to exec on success
		fnFailure		: function( data, textStatus, xhr ){},			// ... on failure //
		fnError			: function( xhr, textStatus, errorThrown ){},	// ... on error //
		validator		: {												// Optionally add validator to this form, and pass object as normal //
			...	
		}
	}; */
	
	$('._jsEnquiryForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.html();
			$a.addClass('disabled').html('Sending...').data('origHtml', origHtml);
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').html(origHtml);
			$form.find('._jsSubmitSuccess').show();
			var timer = setTimeout(function(){
				$form.find('._jsSubmitSuccess').hide();
			},10000);
			
		},
		fnFailure: function( $form, errorThrown ){
			$form.find('._jsTriggerFormSubmit').removeClass('disabled');
			$form.find('._jsSubmitFailed').show();
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			inputHints: true,
			failureCls:'valFailed',
			successCls:'valPassed'
		},
		disableListener:true
	});
	
	$('form._jsSubscribeForm').formConfig({
		validator: {
			inputTips:false,
			inputHints:true,
			successCls: 'valPassed',
			failureCls: 'valFailed'
		},
		resetForm : false,
		ajaxSubmit :true,
		fnSuccess : function ( $form ){
			var $default = $form.find('._jsDefault'),
			$success = $form.find('._jsSubmitSuccess'),
			$failed = $form.find('._jsSubmitFailed');
		
			$failed.add($default).hide();
			$success.show();
		},
		fnFailure : function ( $form ){
			var $default = $form.find('._jsDefault'),
			$success = $form.find('._jsSubmitSuccess'),
			$failed = $form.find('._jsSubmitFailed');
		
			$success.add($default).hide();
			$failed.show();
		}
	});
	
	$('form._jsFormHints').find('input, textarea').inputHints();
	
	$('#header ._jsSearchHeaderForm').formConfig({
		listeners: [
			{
				'onKeyEnter' : ['input._jsOnKeyEnterSubmit'],
				'click' : ['._jsTriggerFormSubmit' ]
			}
		],
		validator: {
			inputTips:false
		},
		onBeforeSubmit: function( $form ){
			var searchTerm = $form.find('._jsSearchHeaderFormInput').val();
			$form.attr('action', '?/search/#for/'+searchTerm);
		}
	});
	
	// Adding to cart forms. //
	$('._jsAddToCartForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit'],
				'onKeyEnter' : ['input']
			}
		],
		ajaxSubmit : true,
		resetForm : false,
		onBeforeSubmit: function( $form ){
			$form.find('._jsTriggerFormSubmit').addClass('disabled').html('Adding...');
			$form.find(':input').attr('disabled','disabled');
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			$form.find(':input').removeAttr('disabled');
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').addClass('added').html('Added!');
			
			var $cartWrapper = $('._jsCartWrapper');
			var $existingItemRow = $('._jsCartDropDownWrapper input[name="product_id"][value="'+data.product_id+'"]').parents('li').first();
			var $cartMenuBtn = $('._jsCartMenuBtn');
			var $cartList = $cartWrapper.find('._jsCartList');
			
			if( $existingItemRow.size() ){
				$existingItemRow.find('._jsItemCount').html(data.product_qty_string);
			}else{
				var $newItemRow = $('._jsCartliTemplate li').clone();
				$newItemRow.find('input[name="product_id"]').val(data.product_id);
				$newItemRow.find('._jsItem').attr('href',data.product_href);
				$newItemRow.find('._jsItemName').html(data.product_name).attr('href',data.product_href);
				$newItemRow.find('._jsItemCount').html(data.product_qty_string);
				$cartList.find('._jsCartUl').append($newItemRow);
			}
			
			$cartWrapper.data('open', true);
			$cartMenuBtn.addClass('hover');
			$cartWrapper.show();
			
			$form.find('[name="product_qty"]').val('1');
			
			$('._jsCartQtyCount').html(data.cart_qty_string);
			$cartWrapper.removeClass('hide').show();
			
			$('._jsCartEmptyImg').hide();
			$('._jsCartFullImg').show();
			$('._jsOpenCartBtn').show();
			$cartMenuBtn.removeClass('empty');
			_removeCartItemFormConfig();
			
			var timer = setTimeout(function(){
				$form.find('._jsTriggerFormSubmit').removeClass('added').html('Add to cart');
			},3000);
		},
		fnFailure: function( $form, errorThrown ){
			$form.find(':input').removeAttr('disabled');
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Add to cart');
			if(errorThrown){
				alert('Connection to internet failed');	
			}
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			failureCls:'valFailed',
			successCls:'valPassed'
		},
		disableListener:true
	});
	
	// Removing from cart forms. //
	_removeCartItemFormConfig = function(){
		$('._jsRemoveFromCartForm').formConfig({
			listeners: [
				{
					'click' : ['._jsTriggerFormSubmit']
				}
			],
			ajaxSubmit : true,
			onBeforeSubmit: function( $form ){
				$form.find('._jsTriggerFormSubmit').addClass('disabled');
			},
			fnSuccess: function( $form, data, textStatus, xhr ){
				$form.find('._jsTriggerFormSubmit').removeClass('disabled');
				
				/*
				* get back cart_qty, cart_qty_string.
				* change cart qty
				* remove li
				*/
				
				$form.parents('li').first().remove();
				$('._jsCartQtyCount').html(data.cart_qty_string);
				
				if( data.cart_qty <= 0 ){
					$('._jsCartWrapper').hide();
					$('._jsCartFullImg').hide();
					$('._jsCartEmptyImg').show();
					$('._jsOpenCartBtn').hide();
					
					$('._jsCartWrapper').data('open', false);
					$('._jsCartMenuBtn').removeClass('hover').addClass('empty');
				}
			},
			fnFailure: function( $form, errorThrown ){
				$form.find('._jsTriggerFormSubmit').removeClass('disabled');
				if(errorThrown){
					alert('Connection to internet failed');	
				}
			},
			ajaxKeyword:'ajax_on',
			validator: {
				inputTips:false,
				failureCls:'valFailed',
				successCls:'valPassed'
			},
			disableListener:true
		});
	}
	_removeCartItemFormConfig();
	
	// Login form for cart. //
	$('._jsCartLoginForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		resetForm : false,
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			$form.find('._jsTriggerFormSubmit').addClass('disabled').html('Sending...');
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
			
			// Remove qty, remove cart item, timer to go back to cart items and close cart. //
			var $cartWrapper = $('._jsCartWrapper');
			var $quoteSent = $cartWrapper.find('._jsQuoteSent');
			var $signIn = $cartWrapper.find('._jsSignIn');
			var $cartList = $cartWrapper.find('._jsCartList');
			var $closeCartBtn = $cartWrapper.find('._jsCloseCartBtn');
			
			var $qty = $('._jsCartQtyCount');
			var $cartEmptyImg = $('._jsCartEmptyImg');
			var $cartFullImg = $('._jsCartEmptyImg');
			
			$qty.html('Sent');
			$cartList.find('._jsCartUl').empty();
			$cartFullImg.hide();
			$cartEmptyImg.show();
			
			$signIn.hide();
			$quoteSent.show();
			$closeCartBtn.html('Close');
			
			$('._jsCartMenuBtn').removeClass('hover').addClass('empty');
			
			_hideCartTimer = setTimeout(function(){
				$cartWrapper.hide().data('open', false);
				$quoteSent.hide();
				$cartList.show();
				$('._jsOpenCartBtn').hide();
			},10000);
		},
		fnFailure: function( $form, errorThrown ){
			
			var $error = $form.find('._jsSignInError');
			
			$form.find(':input').addClass('valFailed')
			$error.html(errorThrown.error_string).show();
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
			
			/*
			* given back error_string
			* make the inputs red - give classes of invalid (valFailed)
			* show the error line : $('._jsSignInError') and popultae it with an error string from the server
			*/
			
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			inputHints:true,
			failureCls:'valFailed',
			successCls:'valPassed'
		},
		disableListener:true
	});
	
	// Guest equest form for cart. //
	$('._jsGuestCartRequestForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		resetForm : false,
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			$form.find('._jsTriggerFormSubmit').addClass('disabled').html('Sending...');
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
			
			// Remove qty, remove cart item, timer to go back to cart items and close cart. //
			var $cartWrapper = $('._jsCartWrapper');
			var $guestQuoteSent = $cartWrapper.find('._jsGuestQuoteSent');
			var $guestProcess = $cartWrapper.find('._jsGuestDetails');
			var $cartList = $cartWrapper.find('._jsCartList');
			var $closeCartBtn = $cartWrapper.find('._jsCloseCartBtn');
			
			var $qty = $('._jsCartQtyCount');
			var $cartEmptyImg = $('._jsCartEmptyImg');
			var $cartFullImg = $('._jsCartEmptyImg');
			
			$qty.html('Sent');
			$cartList.find('._jsCartUl').empty();
			$cartFullImg.hide();
			$cartEmptyImg.show();
			
			$guestProcess.hide();
			$guestQuoteSent.show();
			$closeCartBtn.html('Close');
			
			$('._jsCartMenuBtn').removeClass('hover').addClass('empty');
			
			_hideCartTimer = setTimeout(function(){
				$cartWrapper.hide().data('open', false);
				$guestQuoteSent.hide();
				$cartList.show();
				$('._jsOpenCartBtn').hide();
			},10000);
		},
		fnFailure: function( $form, errorThrown ){
			
			var $error = $form.find('._jsSignInError');
			
			$form.find(':input').addClass('valFailed')
			$error.html(errorThrown.error_string).show();
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
			
			/*
			* given back error_string
			* make the inputs red - give classes of invalid (valFailed)
			* show the error line : $('._jsSignInError') and popultae it with an error string from the server
			*/
			
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			inputHints:true,
			failureCls:'valFailed',
			successCls:'valPassed'
		},
		disableListener:true
	});
	
	// Forgot password form for cart. //
	
	$('._jsCartForgotPasswordForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		resetForm : false,
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			$form.find('._jsTriggerFormSubmit').addClass('disabled').html('Sending...');
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
			
			// Timer to go back to cart items and close cart. //
			var $cartWrapper = $('._jsCartWrapper');
			var $forgotPassword = $cartWrapper.find('._jsForgotPassword');
			var $passwordSent = $cartWrapper.find('._jsPasswordSent');
			var $cartList = $('._jsCartList');
			var $closeCartBtn = $cartWrapper.find('._jsCloseCartBtn');
			
			$forgotPassword.hide();
			$passwordSent.show();
			$closeCartBtn.html('Close');
			
			_hideCartTimer = setTimeout(function(){
				$cartWrapper.hide();
				$passwordSent.hide();
				$cartList.show();
			},10000);
		},
		fnFailure: function( $form, errorThrown ){
			var $error = $form.find('._jsPasswordRecoverError');
			
			$form.find(':input').addClass('valFailed')
			$error.html(errorThrown.error_string).show();
			$form.find('._jsTriggerFormSubmit').removeClass('disabled').html('Send');
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			inputHints: true,
			failureCls:'valFailed',
			successCls:'valPassed'
		},
		disableListener:true
	});
	
});
