
    //From prototype.js                
    var PeriodicalExecuter = new Class({
        // name: 'PeriodicalExecuter',
        initialize: function(callback, frequency) {
        
            this.callback = callback;
            this.frequency = frequency;
            this.currentlyExecuting = false;

            this.registerCallback();
        },

        registerCallback: function() {
        
            this.stop();
            this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
            return this;
        },

        execute: function() {
        
            this.callback(this);
            return this;
        },

        stop: function() {
        
            if (!this.timer) return this;
            clearInterval(this.timer);
            this.timer = null;
            return this;
        },

        onTimerEvent: function() {
        
            if (!this.currentlyExecuting) {
            
                try {
                
                    this.currentlyExecuting = true;
                    this.execute();
                } finally {
                
                    this.currentlyExecuting = false;
                }
            }
                
            return this;
        }
    });

    var CountDown = new Class({options: {
    
            date: null,
            onChange: $empty,
            onComplete: $empty
        },
        initialize: function (options) {
    
            this.setOptions(options);
            
            this.timer = new PeriodicalExecuter(this.update.bind(this), 1);
        },
        update: function () {
        
            var time = Math.floor((this.options.date.getTime() - new Date().getTime()) / 1000);
            
            if(time <= 0) time = 0;
            
            var stop = time == 0;
            
            var countdown = {days: Math.floor(time / (60 * 60 * 24)), 'time': time};
            
            time %= (60 * 60 * 24);
            
            countdown.hours = Math.floor(time / (60 * 60));
            time %= (60 * 60);
            countdown.minutes = Math.floor(time / 60);
            countdown.second = time % 60;
            
            this.fireEvent('onChange', countdown);
            
            if(stop) {
            
                this.timer.stop();
                this.fireEvent('onComplete');
            }
        },
        Implements: [Options, Events]
    });


window.addEvent('domready', function(){
									 
	// *************** SCROLLING NAVIGATION
	var scroll = new Fx.Scroll(window, {duration: 1500, wait: false, transition: Fx.Transitions.quadInOut});
	/* onload, scroll to element six */		
	$$('.goto1').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('one'); });
	$$('.goto2').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('two');  });
	$$('.goto3').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('three'); });
	$$('.goto4').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('four'); });
	$$('.goto5').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('five'); });
	$$('.goto6').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('six'); });
	$$('.gotocontact').addEvent('click', function(event){ event = new Event(event).stop(); scroll.start(4300,1500) });
	$$('.gotoseminar').addEvent('click', function(event){ event = new Event(event).stop(); scroll.toElement('seminar'); });
									 
	// *************** TEXT SCROLL
	/*var scrollx = new Fx.Scroll('text-scroll', {duration: 100000, wait: false, transition: Fx.Transitions.linear, 
		onComplete: function(){
				this.toTop();
			}
	});*/

	// *************** DROP DOWN NAVIGATION
	/* applies to all instances of .dropdown */
	/* on mouse over, change the height of .dropdown*/
	$$('.dropdown').addEvent('mouseover', function(){ this.tween('height', 150); return false; /* alternative syntax to stop the event */ });	
	/* on mouse out, change the height back */
	$$('.dropdown').addEvent('mouseout', function(){ this.tween('height', 23); return false; /* alternative syntax to stop the event */ });
	
	
	// *************** TABBED NAV FOR AWARD SUBMISSION

	var form1 = new Fx.Slide('submission_form');
	var form2 = new Fx.Slide('how_to_enter');
	var form3 = new Fx.Slide('categories');
	var form4 = new Fx.Slide('rules_fees');
	
	form2.hide();
	form3.hide();
	form4.hide();
	
	
	$$('.goto_submission_form').addEvent('click', function(e){
		e.stop();
		scroll.toElement('one');
		form1.slideIn();
		form2.slideOut();
		form3.slideOut();
		form4.slideOut();
	});
	
	
	$$('.goto_how_to_enter').addEvent('click', function(e){
		e.stop();
		scroll.toElement('one');
		form1.slideOut();
		form2.slideIn();
		form3.slideOut();
		form4.slideOut();
	});
	
	
	$$('.goto_categories').addEvent('click', function(e){
		e.stop();
		scroll.toElement('one');
		form1.slideOut();
		form2.slideOut();
		form3.slideIn();
		form4.slideOut();
	});
	
	
	$$('.goto_rules_fees').addEvent('click', function(e){
		e.stop();
		scroll.toElement('one');
		form1.slideOut();
		form2.slideOut();
		form3.slideOut();
		form4.slideIn();
	});
	
	
	// *************** TABBED NAV FOR PANELS

	var pf1 = new Fx.Slide('thechairman');
	var pf2 = new Fx.Slide('advertising_panel');
	var pf3 = new Fx.Slide('design_panel');
	var pf4 = new Fx.Slide('interactive_panel');
	var pf5 = new Fx.Slide('dp_panel');
	
	pf2.hide();
	pf3.hide();
	pf4.hide();
	pf5.hide();
	
	
	$$('.goto_chairman').addEvent('click', function(e){
		e.stop();
		pf1.slideIn();
		pf2.slideOut();
		pf3.slideOut();
		pf4.slideOut();
		pf5.slideOut();
		scroll.toElement('five');
	});

	$$('.goto_advertising').addEvent('click', function(e){
		e.stop();
		pf1.slideOut();
		pf2.slideIn();
		pf3.slideOut();
		pf4.slideOut();
		pf5.slideOut();
		scroll.toElement('five');
	});

	$$('.goto_design').addEvent('click', function(e){
		e.stop();
		pf1.slideOut();
		pf2.slideOut();
		pf3.slideIn();
		pf4.slideOut();
		pf5.slideOut();
		scroll.toElement('five');
	});

	$$('.goto_dp').addEvent('click', function(e){
		e.stop();
		pf1.slideOut();
		pf2.slideOut();
		pf3.slideOut();
		pf4.slideOut();
		pf5.slideIn();
		scroll.toElement('five');
	});

	$$('.goto_interactive').addEvent('click', function(e){
		e.stop();
		pf1.slideOut();
		pf2.slideOut();
		pf3.slideOut();
		pf4.slideIn();
		pf5.slideOut(); 
		scroll.toElement('five');
	});
	
	
	// *************** TABBED NAV FOR SEMINAR

	var seminar1 = new Fx.Slide('seminar_info');
	var seminar2 = new Fx.Slide('seminar_form');
	
	seminar2.hide();	
	
	$$('.goto_seminar_info').addEvent('click', function(e){
		e.stop();
		scroll.toElement('seminar');
		seminar1.slideIn();
		seminar2.slideOut();
	});
	
	
	$$('.goto_seminar_form').addEvent('click', function(e){
		e.stop();
		scroll.toElement('seminar');
		seminar1.slideOut();
		seminar2.slideIn();
	});
	
	
	
	
	
	
	
	// *************** PRELOADING BAR
	var images = ['images/menu-bg.png','images/vignette-tl.png','images/vignette-tr.png','images/vignette-bl.png','images/vignette-br.png','images/background.jpg','images/bg-entryform.jpg', 'images/bg-profile.jpg', 'images/bg-about.jpg', 'images/theshow.png', 'images/download-kit.png'];
	var loader = new Asset.images(images, {
		onProgress: function(counter, index) {
			
			$('preloader-percentage').set('html', Math.round((counter+1)*100/images.length) + "%");
			$('preloader-counter').set('html', (counter+1));
			$('preloader-total').set('html', images.length);
			$('preloader-current').set('html', images[index] + " loaded").tween('color', ['#FFF', '#777']);
			
			},
		onComplete: function() {
			$$('.content-preloaded').setStyle('display','block');
			$$('.preloader').tween('opacity','0');
			scroll.toElement('two');
			//scrollx.toBottom();
		}
	});
	
	
	
	// *********** ACCORDION MENU
	

	var myAccordion = new Accordion('h3.toggler', 'div.element', {
		alwaysHide: true,
		display:-1,
		opacity: false,
		onActive: function(toggler, element){
			toggler.set('class', 'toggler active');
		},
		onBackground: function(toggler, element){
			toggler.set('class', 'toggler');
		}
	});

	var myAccordion2 = new Accordion('h3.toggler2', 'div.element2', {
		alwaysHide: true,
		display:-1,
		opacity: false,
		onActive: function(toggler, element){
			toggler.set('class', 'toggler active');
			toggler.getParent().getParent().setStyle("height", "auto"); 
		},
		onBackground: function(toggler, element){
			toggler.set('class', 'toggler');
		}
	});
	
	
	// *********** COUNTDOWN
	
	
            var date = new Date();
            
            // getMonth is 0 based, so 5 = June
			// deadline is June 17, 2010 at 23:59:59
            new CountDown({date: new Date(2010, 6, 9, 23, 59, 59),
            
                onChange: function (countdown) {
                
                    var html = '';
                    
                    html += (countdown.days <= 9 ? '0' : '' ) + countdown.days + ' day' + (countdown.days > 1 ? 's' : '') + ' '; 
                    html += (countdown.hours <= 9 ? '0' : '') + countdown.hours + ' hour' + (countdown.hours > 1 ? 's' : '') + ' '; 
                    html += (countdown.minutes <= 9 ? '0' : '') + countdown.minutes + ' min' + (countdown.minutes > 1 ? 's ' : '') + ' '; 
                    
                    html += ' left to submission deadline ';
                    
                    $('timer').set('html', html);
                },
                onComplete: function () { }
            });
	
	
	
}); 	
