//JavaScript Document
//jQuery
$(document).ready(
	function() {
		
		/**
		 * FORM FUNCTIONS
		 */
		 
		//REPLACE FORM FIELDS VALUES ON FOCUS
		function elementSupportsAttributes(element, attribute) {
			var test= document.createElement(element);
			if (attribute in test) {
				return true;
			} else {
				return false;
			}
		}
		
		if ( !elementSupportsAttributes('input', 'placeholder') ) {
		
			var inputArray = new Array();
			
			$(':input:not(:hidden,:button,:submit)').each(function(){
				var value = $(this).attr('placeholder');
				$(this).attr('value', value);
				inputArray.push(value);
			});
			
			$(':input:not(:hidden,:button,:submit)').focus(function(event){
				var index = $(':input:not(:hidden,:button,:submit)').index(this);
				var value = $(this).attr('value');
				if (value == inputArray[index]){
					$(this).attr('value', '');
				}
			});
			
			$(':input:not(:hidden,:button,:submit)').blur(function(event){
				var index = $(':input:not(:hidden,:button,:submit)').index(this);
				var value = $(this).attr('value');
				if (value == ''){
					$(this).attr('value', inputArray[index]);	
				}
			});
		
		}
		
		//FORM VALIDATION
		
		//Validate each form field on...
		$(':input:not(:hidden,:button,:submit)').bind('click change focus keyup', function() {
			validateField( this );
		});
		
		//
		function validateField( field ) {
			var type = $(field).attr('name');
			
			if( type == 'name' || type == 'message' || type == 'address' || type == 'city' || type == 'bill-name' || type == 'bill-address' || type == 'bill-city' ) {
				markValid( field, checkBasic( field ) );
				return checkBasic( field );
			}
			
			if( type == 'email' ) {
				markValid( field, checkEmail( field ) );
				return checkEmail( field );
			}
			
			if( type == 'phone' ) {
				markValid( field, checkPhone( field ) );
				return checkPhone( field );
			}
			
			if( type == 'subject' || type == 'course' ) {
				markValid( field, checkSelect( field ) );
				return checkSelect( field );
			}
			
			if( type == 'birthdate' ) {
				markValid( field, checkDate( field ) );
				return checkDate( field );
			}
			
			if( type == 'zip' || type == 'bill-zip' ) {
				markValid( field, checkNumber( field ) );
				return checkNumber( field );
			}
			
			if( type == 'experience' ) {
				markValid( field, checkSelectMultiple( field ) );
				return checkSelectMultiple( field );
			}
			
			if( type == 'accept-terms' ) {
				markValid( $(field).closest('div'), checkCheckbox( field ) );
				return checkCheckbox( field );
			}
			
		}
		
		//
		function markValid( field, valid ) {
			if (valid) {
				$(field).removeClass('invalid').addClass('valid');
			} else {
				$(field).removeClass('valid').addClass('invalid');
			}
		}
		
		//
		$('input[name=same-bill]').change( function() {
			
			var set = $(this).closest('fieldset');
			var inputs = set.children('input');
			
			if( $(this).is(':checked') ) {
				
				inputs.removeAttr('required');
				inputs.attr( 'disabled', 'disabled' );
				inputs.removeClass();
				
				var name = $('fieldset[name=step2] input[name=name]').val();
				var address = $('fieldset[name=step3] input[name=address]').val();
				var zip = $('fieldset[name=step3] input[name=zip]').val();
				var city = $('fieldset[name=step3] input[name=city]').val();
				
				inputs.fadeTo('fast', 0.5);
				
			} else {
				
				inputs.attr( 'required', 'required' );
				inputs.removeAttr('disabled');
				
				var name = $('input[name=bill-name]').attr('placeholder');
				var address = $('input[name=bill-address]').attr('placeholder');
				var zip = $('input[name=bill-zip]').attr('placeholder');
				var city = $('input[name=bill-city]').attr('placeholder');
				
				inputs.fadeTo('fast', 1);
				
			}
			
			$('input[name=bill-name]').val(name);
			$('input[name=bill-address]').val(address);
			$('input[name=bill-zip]').val(zip);
			$('input[name=bill-city]').val(city);
			
		});
		
		//
		function validateForm( form ) {
			
			var errors = new Array();
			
			$( ':input:not(:hidden,:button,:submit)', form ).each( function(){
				
				validateField( this );
				
				if( $(this).attr('required') !== undefined ) {
					errors.push( validateField(this) );
				}
				
			});
			
			var valid = jQuery.inArray(false, errors);

			if ( valid ) {
				return true;
			} else {
				alert('Please fill all the fields.');
				return false;
			}
		}
	
		//
		function checkBasic( field ){
			if ( $(field).attr('value').length == 0 || $(field).attr('value') == $(field).attr('placeholder') ){
				return false;
			}
			else {
				return true;
			}
		}
		
		function checkEmail( field ){
			var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
			return filter.test( $(field).attr('value') );
		}
		
		function checkPhone( field ){
			var filter = /^[0-9 +() + -]+$/;
			return filter.test( $(field).attr('value') );
		}
		
		function checkSelect( field ){
			if ( $(field).attr('selectedIndex') == 0 ){
				return false;
			}
			else {
				return true;
			}
		}
		
		function checkSelectMultiple( field ){
			if ( $('option:selected', field).size() < 1 ){
				return false;
			}
			else {
				return true;
			}
		}
		
		function checkDate( field ) {
			var filter = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
			return filter.test( $(field).attr('value') );
		}
		
		function checkNumber( field ) {
			return ( $(field).attr('value') - 0 ) == $(field).attr('value') && $(field).attr('value').length > 0;
		}
		
		function checkCheckbox( field ){
			return field.checked;
		}
		
		
		$('.contact-form, .registration-form').submit( function(){
			
			var form = $(this);
			
			if ( validateForm( this ) ) {
				
				$.post(
					form.attr('action'),		//url	A string containing the URL to which the request is sent
					form.serialize(),			//data	A map or string that is sent to the server with the request.
					
					//success	A callback function that is executed if the request succeeds
					function(response, status, request){
						// do something with response
						alert( stripTags(response) );
					}
					
					//dataType	The type of data expected from the server (text, xml, json)
				);
			}
			//Prevent default
			return false;
		});
		
		//
		function stripTags( string ){
			
			return string.replace(/(<([^>]+)>)/ig,"");
		}
		
		//EVENTS REEL SLIDE
		var eventsReel = {
		
			speed:300,
			slide:450,
		 
			init:function(){
				
				var n = $('#events-reel article').length - 1;
				var reelWidth = eventsReel.slide * n;
				//alert(browserWidth);
				
				$('#events-reel').css('width', reelWidth + 20 );
				
				$('#reel-right').click(function(event){
					if(!event.detail || event.detail==1){
						var startPos = $('#events-reel .reel').position().left;
						//
						var newX = eventsReel.slide - startPos;
						var overflowing = getOverflow( startPos, reelWidth);
						
						if ( overflowing ) {
						
							$('#events-reel .reel').animate({left:'-' + newX}, eventsReel.speed);
						
						}
					}
					return false;
				});
		 		
				$('#reel-left').click(function(event){
					if(!event.detail || event.detail==1){
						var startPos = $('#events-reel .reel').position().left;
						//
						var newX = eventsReel.slide + startPos;
						
						if (newX <= 20) {
						
							$('#events-reel .reel').animate({left: newX}, eventsReel.speed);
						
						}
					}
					return false;
				});
				
			}
		};
		
		function getOverflow( pos, size ){
			
			var browserWidth = $(window).width();
			
			if ( pos + size >= browserWidth ) {
				return true;
			} else {
				return false;
			}
		}
		
		eventsReel.init();
		
		//EVENTS COURSES TABS
		var currentTab = $('#courses .courses-list li:first');
		var currentCourse = $('#courses article:first');
		
		currentTab.addClass('current');
		
		$('#courses article').each(function(){
			$(this).hide();			  
		});
		
		currentCourse.show();
		
		$('#courses .courses-list li a').click(function(event){
			
			event.preventDefault();
			
			var tab = $(this).parent();
			var courseName = $(this).attr('href');
			var course = $( '#courses ' + courseName );
			
			currentCourse.hide();
			course.show();
			
			currentTab.removeClass('current');
			tab.addClass('current');
			
			currentCourse = course;
			currentTab = tab;
		
		});
		
		//
		$('.box-button').each(function(){
			$(this).css('cursor', 'pointer');
		});
		
		$('.box-button').click(function(event){
			var url = $(this).find('a').attr('href');
			window.location = url;
		});
		
		
		//AD BANNERS
		function switchBanner() {
			$('#ad > a').hide();
			var banner_count = $('#ad a').length;
			var banner_index = Math.floor( Math.random()*banner_count );
			$('#ad a').eq(banner_index).show();
		};
		switchBanner();
		
		/* rotate banners every n secs
		var banner_index = 0;
		
		function switchBanner() {
			$('#ad a').eq(banner_index).hide();
			
			var banner_count = $('#ad a').length;
			if (banner_index >= (banner_count - 1)) {
				banner_index = 0;
			} else {
				banner_index += 1;
			}
			
			$('#ad a').eq(banner_index).show();
		};
		setInterval(switchBanner, 7000);
		*/
		
		//End jQuery
	}
); 

