var VLDA = {
	faderAnchors: ['ballet', 'jazz', 'contemporary', 'modern', 'tap'],
	currentFaderItem: undefined,
	duration: 300,
	autoFader: undefined,
	autoFaderInterval: 5000,
	autoFaderDuration: 1000,
	
	init: function() { // Run at DOM ready
		// new Fx.SmoothScroll();

		VLDA.substituteSubmits();
		VLDA.iQlogo();

		if(typeof(ReMooz) !== 'undefined') {
			ReMooz.assign($$('.thumbnails a'), {
				origin: 'img'
			});
			
			ReMooz.assign($$('.newsimage a'), {
				origin: 'img'
			});
			
			ReMooz.assign($$('.profilephoto a'), {
				origin: 'img'
			});
		}
		
		if($('enrolnowform')) {
			VLDA.initFormValidator();
		}
	},
	
	substituteSubmits: function() {
		$$('input[type=submit].replace').each(function(el) {
			var replacementSubmit = new Element('a');
			replacementSubmit.set('class', el.className);
			replacementSubmit.removeClass('replace');
			replacementSubmit.addClass('button');
			replacementSubmit.set('text', el.value);
			replacementSubmit.setStyle('cursor', 'pointer');
			replacementSubmit.onclick = function() {
				this.getParent('form').submit();
			}
			replacementSubmit.replaces(el);
		});
	},
	
	initFader: function() {
		if($('fader')) {
			$$('#fader ul a').each(function(item, index) {
				item.onclick = VLDA.faderButtonClick;
				item.onfocus = function() {
					if(this.blur) {
						this.blur();
					}
				};
			});
	
			VLDA.autoFader = setInterval(VLDA.fadeToNext, VLDA.autoFaderInterval);
			
			$$('#fader > div').each(function(item, index) {
				if(window.location.hash && VLDA.faderAnchors.contains(window.location.hash.substring(1))) {
					if(window.location.hash.substring(1) === item.getProperty('id')) {
						if(VLDA.autoFader) {
							clearInterval(VLDA.autoFader);
						}
						VLDA.currentFaderItem = item;
						item.fade('show');
						
						// Get its matching header
						$$('#fader a.active')[0].removeClass('active');
						$$('#fader li')[index].getElement('a').addClass('active');
					} else {
						item.fade('hide');
					}
				} else {
					if(item.getStyle('visibility') == 'hidden') {
						item.setStyle('visibility', 'visible');
						item.fade('hide');
					} else {
						VLDA.currentFaderItem = item;
						item.fade('show');
					}
				}
			});
		}
	},
        
	faderButtonClick: function() {
		if(VLDA.autoFader) {
			clearInterval(VLDA.autoFader);
		}
	
		if(!this.hasClass('active')) {
			// Deselect current list item
			this.getParent('ul').getElement('a.active').removeClass('active');
			// Select the new one
			this.addClass('active');
			
			// Fade the current module out
			VLDA.currentFaderItem.fade('hide');
			
			// Change to the selected module
			VLDA.currentFaderItem = $(this.href.substring(this.href.lastIndexOf('#') + 1));
			VLDA.currentFaderItem.set('tween', {duration: VLDA.duration, link: 'cancel', onComplete: VLDA.checkIfCurrentFaderItem});
			VLDA.currentFaderItem.fade('in');
		}
		
		return false;
	},
	
	fadeToNext: function() {
		// Get the currently selected item
		var currentlySelectedItem = $$('#fader a.active')[0];
		var currentlySelectedAnchor = currentlySelectedItem.href.substring(currentlySelectedItem.href.lastIndexOf('#') + 1);
		var currentlySelectedIndex = VLDA.faderAnchors.indexOf(currentlySelectedAnchor);
		if(currentlySelectedIndex != -1) {
			currentlySelectedIndex++;
			if(!VLDA.faderAnchors[currentlySelectedIndex]) {
				currentlySelectedIndex = 0;
			}
			
			// Deselect current list item
			$$('#fader a.active')[0].removeClass('active');
			// Select the new one
			$$('#fader a')[currentlySelectedIndex].addClass('active');
			
			// Fade the current module out
			VLDA.currentFaderItem.set('tween', {duration: VLDA.autoFaderDuration, link: 'cancel'});
			VLDA.currentFaderItem.fade('out');
			
			// Change to the selected module
			VLDA.currentFaderItem = $(VLDA.faderAnchors[currentlySelectedIndex]);
			VLDA.currentFaderItem.set('tween', {duration: VLDA.autoFaderDuration, link: 'cancel', onComplete: VLDA.checkIfCurrentFaderItem});
			VLDA.currentFaderItem.fade('in');
		}
	},
	
	checkIfCurrentFaderItem: function() {
		if(this.element.get('opacity') == 1 && this.element != VLDA.currentFaderItem) { // Just faded in, but this is no longer the current item
			this.element.fade('hide');
		}
	},
	
	iQlogo: function() {
		$('iqmultimedia').set('tween', {duration: 150, link: 'cancel'});
	
		$('iqmultimedia').addEvents({
			'mouseover': VLDA.iQlogoFocus,
			'focus': VLDA.iQlogoFocus,
			'mouseout': VLDA.iQReset,
			'blur': VLDA.iQReset
		});
	},
	
	iQlogoFocus: function() {
		if(!this.getNext().hasClass('logoduplicate')) {
			// Duplicate the element
			var duplicate = this.clone();
			duplicate.addClass('logoduplicate');
			duplicate.injectAfter(this);
			duplicate.addEvent('mouseout', VLDA.iQReset);
		}
		
		VLDA.iQHover();
	},
	
	iQHover: function() {
		$('iqmultimedia').fade('out');
	},
	
	iQReset: function(evt) {
		evt.stop();
		$('iqmultimedia').fade('in');
	},
	
	initFormValidator: function() {
		MooTools.lang.set('en-US', 'FormValidator', {
			email: 'Invalid email address.'
		});

		var enrolFormValidator = new FormValidator.Inline('enrolnowform', {
			serial: false
		});
		
		enrolFormValidator.add('validate-one-checkbox', {
			errorMsg: 'You must select at least one item.',
			test: function(element) {
				return element.getParent('div').getElements('input').some(function(otherField) {
					return otherField.get('checked');
				});
			}
		});
		
		enrolFormValidator.add('validate-dob', {
			errorMsg: 'Invalid date.',
			test: function(element) {
				if(FormValidator.getValidator("IsEmpty").test(element)) {
					return false;
				}

				var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/;
				if(!pattern.test(element.get("value"))) {
					return false;
				}
				
				var yearValue = RegExp.$3;
				if(yearValue.length == 2) {
					if(parseInt(yearValue, 10) > parseInt(new Date().getFullYear().toString().substring(2), 10)) {
						yearValue = '19' + yearValue;
					} else {
						yearValue = '20' + yearValue;
					}
				}

				var dateObject = new Date();
				dateObject.setFullYear(parseInt(yearValue, 10), parseInt(RegExp.$2, 10) - 1, parseInt(RegExp.$1, 10));
				if(parseInt(RegExp.$1, 10) == dateObject.getDate() && parseInt(RegExp.$2, 10) == (1 + dateObject.getMonth()) && parseInt(yearValue, 10) == dateObject.getFullYear()) {
					var dateRepresentation = dateObject.format('%d/%m/%Y');
					if(dateRepresentation != "invalid date"){
						element.set("value", dateRepresentation);
						return true;
					}
				}

				return false;
			}
		});
		
		// EvaluateOnSubmit is not compatible with our replaced submit button
		$('enrolnowform').getElement('a.button').onclick = function(evt) {
			var parentForm = this.getParent('form');
		
			if(parentForm.validate()) {
				parentForm.submit();
			}
		};
	}
};

window.addEvent('domready', VLDA.init);
window.addEvent('load', VLDA.initFader);