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

$(function(){
	
	/* ==================== STICKY ROWS ====================== */
	
	$('._jsStickyTop').scrollPoint({
		pointClass : 'fixed',
		beforePointCallback : function( $this, scrollAmt ){
			$('#spacer').remove();
		},
		afterPointCallback : function( $this, scrollAmt ){
			var $spacer  = $('<div></div>', {'id':'spacer'});
			var height = $this.height();
			$spacer.css('height',height);
			$this.after($spacer);
		}
	});
	
	/* ==================== 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 //
			...	
		}
	}; */
	

	
	
	
	// Default form. //
	
	$('._jsDefaultForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.html();
			$a.addClass('disabled').data('origHtml', origHtml).find('span').html('Sending...');
			$form.find(':input:visible').attr('disabled',true);
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').html(origHtml);
			$form.find(':input:visible').removeAttr('disabled').val('');
			
			if( $.support.opacity ) $form.find('._jsSubmitSuccess').fadeIn();
			else $form.find('._jsSubmitSuccess').show();
		},
		fnFailure: function( $form, errorThrown ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').html(origHtml);
			$form.find(':input:visible').removeAttr('disabled');
			
			if( $.support.opacity ) $form.find('._jsSubmitFailed').fadeIn();
			else $form.find('._jsSubmitFailed').show();
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			failureCls : 'valFailed',
			successCls : 'valPassed',
			inputHints : true
		},
		disableListener:true
	}).find('input, textarea').inputHints();
	
	// Newsletter Subscription Form. //
	
	$('._jsNewsletterSubscribeForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit'],
				'onKeyEnter' : ['input']
			}
		],
		ajaxSubmit : true,
		onBeforeSubmit: function( $form ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.html();
			$a.addClass('disabled').data('origHtml', origHtml).html('Sending...');
			$form.find(':input:visible').attr('disabled',true);
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').html(origHtml);
			$form.find(':input:visible').removeAttr('disabled').val('');
			
			if( $.support.opacity ){
				$form.find('._jsDefault').fadeOut(500,function(){
					$form.find('._jsSubmitSuccess').fadeIn();
				});
			}else{
				$form.find('._jsDefault').hide();
				$form.find('._jsSubmitSuccess').show();
			}
			function runTimer(){
				var timeout = setTimeout(function(){
					$('._jsShowNewsletterSubscribeBtn:visible').click();
				}, 5000);
			}
		},
		fnFailure: function( $form, errorThrown ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').find('span').html(origHtml);
			$form.find(':input:visible').removeAttr('disabled');
			
			if( $.support.opacity ){
				$form.find('._jsDefault').fadeOut(500,function(){
					$form.find('._jsSubmitFailed').fadeIn();
				});
			}else{
				$form.find('._jsDefault').hide();
				$form.find('._jsSubmitFailed').show();
			}
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			failureCls : 'valFailed',
			successCls : 'valPassed',
			inputHints : true
		},
		disableListener:true
	}).find('input, textarea').inputHints();
	
	// News Filter Form. //
	
	$('._jsNewsFilterForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		onBeforeSubmit: function( $form ){
			var sectorId		= $form.find('._jsFilterBySector').val();
			var sector			= $form.find('._jsFilterBySector [value="'+sectorId+'"]').text().toLowerCase();
			var pdt				= $form.find('._jsFilterByMonth').val();
			var section			= $form.attr('action');
			
			if( !pdt ){
				var href		= sector == 'all' ? section+'/' : section+'/'+sector+'/';
			}else{
				var date		= new Date(pdt*1000); //Fri Jul 01 2011
				var dateArray	= date.toDateString().split(' ');
				var month		= dateArray[1].toLowerCase();
				var year		= date.getFullYear();
				var href		= sector == 'all' ? section+'/'+month+'_'+year : section+'/'+sector+'/'+month+'_'+year;
			}
			
			location.href = href;
			$form.find('._jsLoading').fadeIn(300);
			return false;
		}
	});
	
	// Load More News. //
	
	$('._jsLoadMoreNewsForm').formConfig({
		listeners: [
			{
				'click' : ['._jsTriggerFormSubmit']
			}
		],
		ajaxSubmit : true,
		resetForm : false,
		onBeforeSubmit: function( $form ){
			var $moreBtn = $form.find('._jsTriggerFormSubmit');
			var $moreWrapper = $('._jsMoreArticlesWrapper').last();
			var origHtml = $moreBtn.html();
			var busyHtml = $moreBtn.data('busyText');
			var doneHtml = $moreBtn.data('doneText');
			
			if( $moreBtn.data('showAll') ) return false;
			$moreBtn.addClass('disabled').data('origHtml', origHtml).html(busyHtml);
			
			$moreWrapper.slideDown(700, 'easeInOutQuart', function(){
				if( $moreBtn.data('doneLoading') ){
					$moreBtn.data('showAll', true).addClass('inactive').html(doneHtml);
					return false;
				}
			});
		},
		fnSuccess: function( $form, data, textStatus, xhr ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			var $pageNum = $form.find('._jsPageNumber');
			var pageNum = Number($pageNum.val());
			var $moreWrapper = $('._jsMoreArticlesWrapper').last();
			var $newMoreWrapper = $('<div></div>', {'class' : '_jsMoreArticlesWrapper'});
						
			/*
			Get back : content, show_more_amount, is_more
			*/
			$moreWrapper.after($newMoreWrapper);
			$newMoreWrapper.hide().html(data.content);
			$moreWrapper.removeClass('_jsMoreArticlesWrapper');
			$a.removeClass('disabled').html(origHtml);
			$pageNum.val(pageNum+1);
			if( data.is_more ) $a.html(origHtml);
			else $a.data('doneLoading', true);
		},
		fnFailure: function( $form, errorThrown ){
			var $a = $form.find('._jsTriggerFormSubmit');
			var origHtml = $a.data('origHtml');
			$a.removeClass('disabled').html(origHtml);
			
			if( $.support.opacity ){
				$form.find('._jsLoadMoreFailed').fadeIn();
			}else{
				$form.find('._jsLoadMoreFailed').show();
			}
		},
		ajaxKeyword:'ajax_on',
		validator: {
			inputTips:false,
			failureCls : 'valFailed',
			successCls : 'valPassed',
			inputHints : true
		},
		disableListener:true
	}).find('input, textarea').inputHints();
	
	
});
