(function($){
	window.CSF = {
		Init: function() {
			CSF.Navigation.Init();
			CSF.DropDownMenus();
			CSF.ContactUs();
			CSF.MailingList();
			CSF.EmailInit();
			CSF.Marquee.Init();
		},
		Marquee: {
			ChangeTab: function(event, newEle) {
				$tabbedModule = $(event.target);
				
				if( $tabbedModule.data('current-tab') == newEle ) return;
				$tabbedModule.data('current-tab', newEle);
				
				var currentIndex = $tabbedModule.data('tabs').index( newEle );
				
				var hideTabs = $tabbedModule.data('tabs').parent();
				var hideContent = $tabbedModule.data('tabContent').find('li');
				
				var showTabs = $(newEle).parent();
				var showContent = $tabbedModule.data('tabContent').find('li:nth-child(' + ( currentIndex + 1 ) + ')');
				
				hideTabs.removeClass('on');
				showTabs.addClass('on');
				
				if( $tabbedModule.hasClass('fadeTransition') ) { 
					hideContent.fadeOut(500, function() {
						 $(this).removeClass('on');
					});
					
					showContent.fadeIn(500, function() {
						$(this).addClass('on'); 
					});
				} else {
					hideContent.removeClass('on');
					showContent.addClass('on');
				}
			},
			Init: function() {
				$(".tabbedModule").each(function() {
					var $tabbedModule = $(this)
						.bind('change-tab', CSF.Marquee.ChangeTab )
						.data('tabContent', $(this).find('.tabber'))
						.data('tabs', $(this).find('ul.thumbs a'));

					// fix the height issue if we're animated
					if( $tabbedModule.hasClass('fadeTransition') ){
					
						var forceHeight = $tabbedModule.data('tabContent').find('li').height();
						if( $tabbedModule.data('tabContent').next().length > 0 ) {
							var currentPadd = parseInt( $tabbedModule.data('tabContent').next().css('padding-top') );
							$tabbedModule.data('tabContent').next().css('padding-top', currentPadd + forceHeight);
						} else {
							$tabbedModule.data('tabContent').parent().css({height: forceHeight + 'px' });
						}
					}
					
					if( $tabbedModule.hasClass('marqueeModule') ) {
						$tabbedModule.data('tabContent').find('li').append( $('<div class="overlay"></div>"') );
					}
					
					if( $tabbedModule.hasClass('timedModule') ) {
						$tabbedModule.data('change-timer', setInterval(function() {
							var nextEle = $tabbedModule.data('tabs').parent('.on').next().find('a').get(0);
							if( nextEle === undefined ) {
								nextEle = $tabbedModule.data('tabs').get(0);
							}
							$tabbedModule.trigger('change-tab', [ nextEle ] );
						}, 5000 ) );
					}
					
					// set the events, lets go
					$tabbedModule.data('tabs')
						.voidLink()
						.click(function() {
							clearInterval( $tabbedModule.data('change-timer') );
							$tabbedModule.trigger('change-tab', [ this ] );
							$(this).blur();
							return false;
						});
					
					
					
					$tabbedModule.trigger('change-tab', [ $tabbedModule.data('tabs').get(0) ] );
				});
			}
		},
		EmailInit: function() {
			$('.parasEmail').setEmail('paras');
			$('.valantisEmail').setEmail('valantis');
		},
		DropDownMenus: function( ele ) {
			$('ul#mainNav li').hover(
				function() { $(this).addClass('hover'); },
				function() { $(this).removeClass('hover'); }
			);				
		},
		MailingList: function() {
			var $emailEle = $("#email");
			
			if( $emailEle.length > 0 ) {
				$emailEle.watermarkText('E-mail Address');
			
				$("#joinButton")
					.click(function() { 
						$.getJSON( '/lib/add_email.php', { email: $emailEle.val() }, 
							function(jsonObj) {
								switch( jsonObj.code ) {
									case 1:
										$('#joinMailing').html('<p>Thanks for joining our mailing list!</p>');
										break;
									case 2:
										alert('This E-mail has already been added to our mailing list.');
										break;
									case 3: 
										alert('You have entered an invalid E-mail address. Please check it and try again.');
										break;
								}
							}
						);
					});
			}
			
		},
		Navigation: {
			MainNavSelector: '#mainNav a',
			ActiveModuleSelector: '.activatedModule a',
			DefaultPages: [ "index.php" ],
			Init: function(){
				var arr = location.pathname.replace("#nojs","").split("/");
				
				CSF.Navigation.__CURRENT_PAGE = arr.pop();
				CSF.Navigation.__CURRENT_PATH = arr;
				
				CSF.Navigation.Highlight.MainNav();
				CSF.Navigation.Highlight.ActiveModules();
			},
			Highlight: {
				ElementsByPath: function( selector ) {
					// duplicate the array with slice
					var arr = CSF.Navigation.__CURRENT_PATH.slice();
	
					// keep a blank array of elements in case there are no links to set active
					var eles = $([]);
	
					// makes ure there's only 1 slash in the begining, when splitting, its an empty string
					while( arr[1] == "" ) { arr.shift(); };
	
					// if we don't find any elements on this level, then go 1 level up and keep trying.
					while ( arr.length > 1 && eles.length == 0 ) {
						var pathSelector = selector + '[href^="' + unescape( arr.join("/") ) + '"]';
						eles = $(pathSelector);
						arr.pop();
					}
					
					return eles;
				},
				ElementsByPage: function( selector ) {
					var path = CSF.Navigation.__CURRENT_PATH.join("/");
					path += "/";
					selector += "[href=" + path + CSF.Navigation.__CURRENT_PAGE + "]";
					return $(selector);
				},
				ActiveModules: function() {
					CSF.Navigation.Highlight.ElementsByPage( CSF.Navigation.ActiveModuleSelector ).parent().addClass("selected");
				},
				MainNav: function() {
					var eles = CSF.Navigation.Highlight.ElementsByPath( CSF.Navigation.MainNavSelector );
					
					if( eles.length === 0 ) {
						eles = CSF.Navigation.Highlight.ElementsByPage( CSF.Navigation.MainNavSelector );
					}
					
					eles.parents('li:last').find('a').addClass('active');
				}
			}
		},
		ContactUs: function() {
			var $howDidYouHearEle = $('#howDidYouHear');
			if( $howDidYouHearEle.length > 0 ) {
				
				var $tellUsWhereLBLEle = $('#tellUsWhereLBL');
				var $tellUsWhereTXTEle = $('#tellUsWhereTXT');
				
				var showHideContactBox = function() {
					if( $(this).val() == 'Other' ) {
						$tellUsWhereLBLEle.removeClass('hide');
						$tellUsWhereTXTEle.removeClass('hide');
					} else {
						$tellUsWhereLBLEle.addClass('hide');
						$tellUsWhereTXTEle.addClass('hide');
					}
				};
						
				$howDidYouHearEle
					.change( showHideContactBox )
					.change();
				
				$('#submitComment').click(function() {
					if( $('#name').val().length === 0 ) {
						alert( 'Please fill in a name.' );
						$('#name').focus();
						return false;
					}
					
					if( $('#e-mail').val().length === 0 ) {
						alert( 'Please fill in an email address.' );
						$('#e-mail').focus();
						return false;
					}
				});
			}
		}
	};
}(jQuery));