// JavaScript Document
$('html').addClass('js');

var tbObj = {
	
	utils : {		
		
		isValidEmailAddress : function(emailAddress) {
			var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
			return pattern.test(emailAddress);
		},
		
	},
	
	setUpMenuAnimations : function(){
		
		if($.browser.msie){
			return false;
		}		
		
		$('#nav a').not('#nav li.active a').css({ backgroundPosition: "0 0" })
		.mouseover(function(){
			$(this).stop().animate(
				{ backgroundPosition : "(0 -180px)" }, 
				{ duration:500 }
			)
		})
		.mouseout(function(){
			$(this).stop().animate(
				{ backgroundPosition: "(0 0)" }, 
				{ duration:500 }
			)
		})
		
		$('.main-list a').mouseenter(function(){
			$(this).find('.img').css({ backgroundPosition: "-40px 0" })								 
			$(this).find('.img').stop().animate(
				{ backgroundPosition : "(-20px 0)" }, 
				{ duration: 200 }
			)
			Cufon.replace($(this).find('.cufonMe'));
		})
		$('.main-list a').mouseleave(function(){
			$(this).find('.img').stop().animate(
				{ backgroundPosition: "(0 0)" }, 
				{ duration: 200,
							complete:function(){
								$(this).css({ backgroundPosition : "(-40px 0)" })
							}
						}
			)
			Cufon.replace($(this).find('.cufonMe'), { color: '#010169' });
		})
		
	},	
	
	doCufonReplacement : function(){
		if($.browser.msie){
			return false;
		}
		Cufon.replace(".cufonMe");	
		Cufon.replace("#nav ul li a, #about-menu a", { hover: true });
		Cufon.now();
	},
		
	mycarouselCallback : function(carousel) {
		// Disable autoscrolling if the user clicks the prev or next button.
		/*carousel.buttonNext.bind('click', function() {
			carousel.startAuto(0);
		});
	
		carousel.buttonPrev.bind('click', function() {
			carousel.startAuto(0);
		})*/;
	
		// Pause autoscrolling if the user moves with the cursor over the clip.
		carousel.clip.hover(function() {
			carousel.stopAuto();
		}, function() {
			carousel.startAuto();
		});
	},
	
	initiateCarousel : function(){
		if( $('#mycarousel').length > 0 ){
			$('#mycarousel').cycle({
				fx: 'fade' // choose your transition type, ex: fade, scrollUp, shuffle, etc...
			});		
		}		
	},
		
	subnav : {
		
		changeScreen : function(linkObj){			
			$('.sub-nav-link').each(function(){
				var li = $(this).parents('li')
				li.removeClass('active');
				if ( li.find('ul').length > 0 ){
					li.find('ul').slideUp().addClass('hidden');
				}
			})
			var li = $(linkObj).parents('li');
			if ( li.find('ul').length > 0 ){
				li.find('ul a').removeClass('selected');
				li.find('ul').slideDown().removeClass('hidden');
				
				var id = $(linkObj).attr('href').split('screen=')[1];
				$('#screen'+id+' .subscreen').addClass('hidden');
				$('#screen'+id+' .subscreen:eq(0)').removeClass('hidden');
			}
			li.addClass('active');
			Cufon.replace(".sub-nav-link.cufonMe");
			
			//var index = $('.sub-nav-link').index(linkObj);
			
			$('.screen').addClass('hidden');
			var href = $(linkObj).attr('href');
			var id = href.split('screen=')[1];
			$('#screen'+id).removeClass('hidden');
		},
		
		init : function(){			
			$('a.sub-nav-link').bind('click',function(e){
				e.preventDefault();
				if($(this).parents('li').hasClass('active')){
					return false;
				}
				tbObj.subnav.changeScreen(this);
			})
			
			$('a.screenLink').bind('click',function(e){
				e.preventDefault();
				var thisHref = $(this).attr('href');
				var thisScreenId = thisHref.split('screen=')[1];
				var thisLink = null;
				$('a.sub-nav-link').each(function(i){
					var subNavHref = $(this).attr('href');
					var subNavScreenId = subNavHref.split('screen=')[1];
					if ( subNavScreenId == thisScreenId ){
						thisLink = $(this);	
						thisLink.trigger('click');
						$(window).scrollTop(); // ?
					}
				})
			});
			
			$('.csNav a').bind('click',function(e){
				e.preventDefault();
				if($(this).hasClass('selected')){
					return false;	
				} else {					
					var navId = $(this).parents('li').parents('li').attr('id');
					var screenId = 'screen' + navId.replace('sub-nav-','');
					
					$('#' + screenId + ' .subscreen').addClass('hidden');
					var index = $('#' + navId + ' .csNav a').index($(this));					
					$('#' + screenId + ' .subscreen:eq('+ (index+1) +')').removeClass('hidden');
					
					$('#' + navId + ' .csNav a').removeClass('selected');
					$(this).addClass('selected');
				}
			});
			
			$('.csNavInCopy a').bind('click',function(e){
				e.preventDefault();
				var screenId = $(this).parents('.screen').attr('id');
				var navId = 'sub-nav-' + screenId.replace('screen','')
				var index = $('#' + screenId + ' .csNavInCopy a').index($(this));
				$('#' + navId + ' .csNav a:eq('+index+')').trigger('click');
			});
			
		}
	},	
	
	courseTable : {
		
		init : function(){
			
			$('table.courseTable td').bind('mouseenter',function(){
				$(this).parents('tr').addClass('hover');
			}).bind('mouseleave',function(){
				$(this).parents('tr').removeClass('hover');
			})				
		}
		
	},	
	
	customerList : {
		
		init : function(){
			
			$('ul.customer-list li').bind('mouseenter',function(){
				$(this).addClass('hover');
			}).bind('mouseleave',function(){
				$(this).removeClass('hover');
			})				
		}
		
	},
	
	
	register : {
		
		init : function(){
			var that = this;
			$('#tbRegisterForm #uSubmit').bind('click',function(e){
				e.preventDefault();
				that.validateAndSend('#tbRegisterForm')
			})
			
			$('#tbRegisterForm .validate').each(function(){
				$(this).find('input').bind('click',function(){
					$(this).parents('.data').removeClass('error')
				})
				$(this).find('select').bind('change',function(){
					$(this).parents('.data').removeClass('error')
				})
			})
		},
		
		validateAndSend : function(formId){
			// resetting error states
			$(formId + ' .error').removeClass('error');
			var hasErrors = false;
			
			// validating fields
			var fieldsToBeValidated = $(formId + ' .validate');
			$(fieldsToBeValidated).each(function(index){
				if($(this).hasClass('typeText')){ // mandatory strings
					var uName = $(this).find('input').val()
					uName = uName.replace(/ /g,'');
					if( uName == '' ){
						$(this).addClass('error');
						hasErrors = true;
						console.log('string');
					}
				}
				if($(this).hasClass('typeEmail')){	// mandatory emails
					var uEmailAddress = $(this).find('input').val()
					if( !tbObj.utils.isValidEmailAddress( uEmailAddress )){
						$(this).addClass('error');
						hasErrors = true;		
						console.log('email');		 
					}
				}			
				if($(this).hasClass('typeSelect')){ // mandatory drop downs
					var uSelect = $(this).find('select').val();					
					if( uSelect == '' ){
						$(this).addClass('error');
						hasErrors = true;	
						console.log('select');
					}
				}
				if($(this).hasClass('typeNumber')){ // mandatory drop downs
					var uNumber = $(this).find('input').val();					
					if( uNumber == '' || isNaN(uNumber) || uNumber < 15 ){
						$(this).addClass('error');
						hasErrors = true;
						console.log('number');
					}
				}
				if($(this).hasClass('typeRadio')){ // mandatory radio buttons
					var radioButtons = $(this).find('input');
					var isChecked = false;
					for( var b = 0; b < radioButtons.length; b++ ){
						if( $(radioButtons[b]).attr('checked') == 'checked' ){
							isChecked = true;
						}
					}					
					if (!isChecked){
						$(this).addClass('error');
						hasErrors = true;
						console.log('radio');
					}					
				}
				if($(this).hasClass('typeCheckbox')){ // mandatory check boxes
					var checkbox = $(this).find('input');
					if( $(checkbox).attr('checked') != 'checked' ){
						$(this).addClass('error');
						hasErrors = true;
						console.log('checkbox');
					}					
				}
			});
			
			// send if no errors
			if( hasErrors ){
				console.log('practice');
				return false;
			} else {
				console.log('what');
				$(formId).submit();
			}
		
		}
	},		//register										
	
	
	contact : {
		
		init : function(){
			var that = this;
			$('#tbForm #uSubmit').bind('click',function(e){
				e.preventDefault();
				that.validateAndSend('#tbForm')
			})
			
			$('#tbForm .validate').each(function(){
				$(this).find('input').bind('click',function(){
					$(this).parents('.data').removeClass('error')
				})
			})
		},		
		
		validateAndSend : function(formId){
			// resetting error states
			$(formId + ' .error').removeClass('error');
			var hasErrors = false;
			
			// validating fields
			var fieldsToBeValidated = $(formId + ' .validate');
			$(fieldsToBeValidated).each(function(index){
				if($(this).hasClass('typeText')){
					var uName = $(this).find('input').val()
					uName = uName.replace(/ /g,'');
					if( uName == '' ){
						$(this).addClass('error');
						hasErrors = true;
					}
				}
				if($(this).hasClass('typeEmail')){
					var uEmailAddress = $(this).find('input').val()
					if( !tbObj.utils.isValidEmailAddress( uEmailAddress )){
						$(this).addClass('error');
						hasErrors = true;				 
					}
				}
			});
			
			// send if no errors
			if( hasErrors ){
				return false;
			} else {
				$(formId).submit();
			}
		
		}
	},		//contact
	
	
	
	
	banner : {
	
		paused : false,
		timer : '',
		
		init : function(){
			
			tbObj.banner.timer = setTimeout( function(){
				tbObj.banner.scrollUp();					 
			}, 5000);
			
		},
		
		scrollUp : function(){
			$(".banner .box ul").animate({
				top: '-47'							 
			}, 250, function(){
					// callback
					var topLi = $(".banner .box ul li:eq(0)");
					$(".banner .box ul").css('top','0px').append(topLi);
					tbObj.banner.init();
				})
		}	
		
	}// banner
}

$(document).ready(function(){
	tbObj.doCufonReplacement();
	tbObj.setUpMenuAnimations();
	tbObj.initiateCarousel();
	tbObj.contact.init();
	tbObj.register.init();
	tbObj.subnav.init();
	tbObj.courseTable.init();
	tbObj.customerList.init();
	tbObj.banner.init();
	/*
	tbObj.about.init();
	tbObj.setUpPostHoversStates();
	tbObj.setUpLightBoxImages();
	tbObj.setUpSubmitButton();
	tbObj.setUpMapFormSwitch();
	*/
})
