var Speedtyping = {
	
	fast_width: 400,
	
	medium_width: 300,
	
	normal_width: 200,
	
	span_margin: 50,
	
	screen_size: 900,
	
	time: 60,
	
	init: function() {
		
		// Define Global Variables here
		Speedtyping.start = 0;
		Speedtyping.nextgame = 0;
		Speedtyping.keyboard = $('tf_keyboard');
		Speedtyping.myDate = new Date();
		Speedtyping.uid = 0;
		Speedtyping.skip = 0;
		Speedtyping.first_name = '';
		
		Speedtyping.keyboardfx = new Fx.Tween(Speedtyping.keyboard, {
			duration: 1000,
			wait: false,
			transition: Fx.Transitions.Quad.easeOut
		});
		
		var dur = 120 * 1000;
		
		Speedtyping.fast = new Fx.Scroll('marquee_fast', {transition: Fx.Transitions.linear, duration: dur, wait: false});
		Speedtyping.slow = new Fx.Scroll('marquee_normal', {transition: Fx.Transitions.linear, duration: dur, wait: false});
		Speedtyping.medium = new Fx.Scroll('marquee_medium', {transition: Fx.Transitions.linear, duration: dur, wait: false});

		Speedtyping.lightface = new LightFace({ 
 			title: 'Connect With Facebook', 
			width: 600,
			//height: 300,
  			content: 'To have a better experience in The Speed Typing Challenge, please connect to Facebook!',
  			buttons: [
                        {
                            title: 'Connect With Facebook',
                            event: function()
                            {
                                FB.login(function(response) 
                                {
                                    if (response.session) 
                                    {
                                        // user successfully logged in
                                        Speedtyping.uid = response.session.uid;
                                
                                        FB.api('/me', function(response) {
                                            
                                            Speedtyping.first_name = response.first_name;
                                            //console.log('/me:' + Speedtyping.dump(response));
                                            
                                            Speedtyping.lightface.close();
                                            Speedtyping.new_game();
                                            
                                        });
                                    }
                                    else
                                    {
                                        // user cancelled login
                                    }
                                });
                            },
                            color: 'blue'
                   },
                   {
                       title: 'Maybe Later',
                       event: function() 
                       {
                           Speedtyping.skip = 1;
                           Speedtyping.new_game();
                           this.close();
                       }
                   }
            ]
        });
		
		$('b_submit').addEvent('click', function(e){
			e.stop();
			Speedtyping.submitname();
			
		});
		
		$('high_scores').addEvent('click', function(e){
			e.stop();
			//Speedtyping.highscores();
			
		});
		
		$('hsd').addEvent('click', function(e){
			e.stop();
			Speedtyping.highscores('d');
		});
		
		$('hsw').addEvent('click', function(e){
			e.stop();
			Speedtyping.highscores('w');
		});
		
		$('hsa').addEvent('click', function(e){
			e.stop();
			Speedtyping.highscores('a');
		});
		
		$('about').addEvent('click', function(e){
			e.stop();
			Speedtyping.about();
			
		});
		
		$('new_game').addEvent('click', function(e){
			
			e.stop();
			Speedtyping.new_game();
			
		});
		
		Speedtyping.init_keyboard();
	},
	
	new_game: function() {
	  
        if( Speedtyping.skip == 0 && Speedtyping.uid == 0 )
		{
		    // Ask the user to login
		    Speedtyping.lightface.open();
		    return;
		}
		
		Speedtyping.skip = 0;
		
		$('submission').setStyle('display','none');
		$('share').setStyle('display','none');
		
		$('hsdiv').setStyle('display','none');
		$('aboutdiv').setStyle('display','none');
		
		$('cover').fade('show');
		
		Speedtyping.keyboard.value = '';
		Speedtyping.keyboard.disabled = true;
		
		//if( Speedtyping.start )
		//if( Speedtyping.nextgame == 1 )
		//{
			
		    $('fast').set('html','');
			$('normal').set('html','');
			$('medium').set('html','');
			
			var marker = $('marker');
			var el = new Element('a',{'id': 'start','href': 'javascript:{}', 'html': 'Start'});
			marker.set('html','');
			el.inject(marker);
			
			$('countdown').setStyle('display','block');
								
			// show the marquee behind the countdown
			$('marquee').setStyle('display','none');
			
			// Set the scrollers to the start
			Speedtyping.fast.set(0,0);
			Speedtyping.slow.set(0,0);
			Speedtyping.medium.set(0,0);
			
			Speedtyping.start = 0;
		//}
		
		var url = Global.BaseURL + 'ajax.php?action=newgame&timer='+Speedtyping.myDate.getTime();
		
		$('ajax-loader').setStyle('display','block');
		
		new Request({
		    url: url,
		    method: 'get',
		    /*
		    useSpinner: true,
		    spinnerTarget: id+'_next',
		    spinnerOptions: {'class': 'spinner'},
		    */
		    onSuccess: function(responseText) {
		    	
		    	$('ajax-loader').setStyle('display','none');
		    	
		    	var obj = JSON.decode(responseText);
		    	var word = '';
		    	var normal = $('normal');
		    	
		    	normal.setStyle('width',(obj.count.normal*(Speedtyping.normal_width+Speedtyping.span_margin))+Speedtyping.screen_size);
		    	for (var key in obj.words.normal) 
		    	{
		    		if( !isNaN(key) )
		    		{
			    		word = obj.words.normal[key];
			    		word = word.toLowerCase();
			    		var el = new Element('div',{'id':'word_'+word, 'html': word, 'class':'word'});
			    		el.inject(normal);
		    		}
		    	}
		    	var medium = $('medium');
		    	medium.setStyle('width',(obj.count.medium*(Speedtyping.medium_width+Speedtyping.span_margin))+Speedtyping.screen_size);
		    	for (var key in obj.words.medium) 
		    	{
		    		if( !isNaN(key) )
		    		{
			    		word = obj.words.medium[key];
			    		word = word.toLowerCase();
			    		var el = new Element('div',{'id':'word_'+word, 'html': word, 'class':'word'});
			    		el.inject(medium);
		    		}
		    	}
		    	var fast = $('fast');
		    	fast.setStyle('width',(obj.count.fast*(Speedtyping.fast_width+Speedtyping.span_margin))+Speedtyping.screen_size);
		    	for (var key in obj.words.fast) 
		    	{
		    		if( !isNaN(key) )
		    		{
			    		word = obj.words.fast[key];
			    		word = word.toLowerCase();
			    		var el = new Element('div',{'id':'word_'+word, 'html': word, 'class':'word'});
			    		el.inject(fast);
		    		}
		    	}
		    	
		    	Speedtyping.init_countdown();
		    	
		    	// Clear counters
		    	Speedtyping.keystroke = new Array();
		    	Speedtyping.backspace = 0;
		    	Speedtyping.space = 0;
		    	Speedtyping.keypress = 0;
		    	Speedtyping.missed = 0;
		    	Speedtyping.missed1 = 0;
		    	Speedtyping.missed2 = 0;
		    	Speedtyping.missed3 = 0;
		    	Speedtyping.missed4 = 0;
		    	Speedtyping.missed5 = 0;
		    	Speedtyping.missed6 = 0;
		    	Speedtyping.got1 = 0;
		    	Speedtyping.got2 = 0;
		    	Speedtyping.got3 = 0;
		    	Speedtyping.tracker = obj.tracker;
		    	Speedtyping.globalcount = 1;
		    	Speedtyping.match = '';
		    	Speedtyping.match1 = '';
		    	Speedtyping.match2 = '';
		    	Speedtyping.match3 = '';
		    	Speedtyping.word_miss = '';
		    	Speedtyping.word_miss1 = '';
		    	Speedtyping.word_miss2 = '';
		    	Speedtyping.word_miss3 = '';
		    }
		}).send();
	      
	},
	
	init_countdown: function() {
		
		// Show start button
		$('cover').fade('out');
		
		// Add start listener
		$('start').addEvent('click',function(e){
			e.stop();
			
			Speedtyping.countdown();
			
			Speedtyping.start = 1;
		});
		
	},
	
	init_marquee: function() {
		
		//if( Speedtyping.nextgame == 0 )
		//{
    		
		//}
		
		Speedtyping.fast.toRight();
		Speedtyping.slow.toRight();
		Speedtyping.medium.toRight();
		
		Speedtyping.keyboard.disabled = false;
		Speedtyping.keyboard.focus();
	},
	
	init_keyboard: function() {
		
		if( Speedtyping.keyboard )
		{
			Speedtyping.keyboard.addEvents({
				'focus': function() {
					
					if( Speedtyping.start == 0 )
					{
						Speedtyping.keyboard.value = '';
					}
				},
				
				'keydown': function(event) {
					
					if ( event.key == 'space' || event.key == 'enter' )
					{
					    Speedtyping.keypress++;
						Speedtyping.check_word();
						Speedtyping.space++;
						Speedtyping.keystroke[Speedtyping.keypress] = "SPACER";
					}
					else if( event.key == 'backspace' )
					{
					    Speedtyping.keypress++;
						Speedtyping.backspace++;
						Speedtyping.keystroke[Speedtyping.keypress] = event.key;
					}
					else if( event.shift || event.control || event.key == 'shift' || event.key == 'control' )
					{
                        return false;
					}
					else
					{
					    Speedtyping.keypress++;
					    Speedtyping.keystroke[Speedtyping.keypress] = event.key;
					}
				}
			});
		}
	},
	
	start_timer: function() {
		
		Speedtyping.clock = $('clock');
		
		Speedtyping.time_left = Speedtyping.time;
		
		Speedtyping.clock.set('html', Speedtyping.time_left);
		
		Speedtyping.interval = Speedtyping.timer.periodical(1000);
	},
	
	timer: function() {
		
		Speedtyping.time_left--;
		Speedtyping.clock.set('html', Speedtyping.time_left);
		
		if( Speedtyping.time_left <= 0 )
		{
			$clear(Speedtyping.interval);
			Speedtyping.end_game();
		}
	},
	
	end_game: function() {
	    
	    Speedtyping.nextgame = 1;
		
		// Stop all marquees
		Speedtyping.fast.cancel();
		Speedtyping.slow.cancel();
		Speedtyping.medium.cancel();
		
		// Disable keyboard input
		Speedtyping.keyboard.value = '';
		Speedtyping.keyboard.disabled = true;
		
		// Get all missed words per line
		$('fast').getElements('div.word').each(function(el){
			if( !el.hasClass('hit') )
			{
				var pos = el.getPosition('screen');
				
				//if( pos.x < Speedtyping.screen_size )
				if( pos.x < 0 )
				{
					Speedtyping.missed1 = Speedtyping.missed1 + (el.get('html')+'').length;
				}
			}
		});
		$('normal').getElements('div.word').each(function(el){
			if( !el.hasClass('hit') )
			{
				var pos = el.getPosition('screen');
				
				//if( pos.x < Speedtyping.screen_size )
				if( pos.x < 0 )
				{
					Speedtyping.missed2 = Speedtyping.missed2 + (el.get('html')+'').length;
				}
			}
		});
		$('medium').getElements('div.word').each(function(el){
			if( !el.hasClass('hit') )
			{
				var pos = el.getPosition('screen');
				
				//if( pos.x < Speedtyping.screen_size )
				if( pos.x < 0 )
				{
					Speedtyping.missed3 = Speedtyping.missed3 + (el.get('html')+'').length;
				}
			}
		});
		
		// Get all correct words per line
		/**/
		// Fade main screen
		$('marquee').get('tween').start('opacity',0).chain(function(){
			
			// Remove marquee
			//$('marquee').setStyle('display','none');
			$('marquee').setStyles({'display':'none','opacity':1});
			
			// Show something else!
			$('countdown').setStyle('display','block');
			
			var marker = $('marker');
			
			marker.set('html','Game Over!');
			Speedtyping.markerfx.start('opacity',1).chain(function(){
				Speedtyping.markerfx.start('opacity',0).chain(function(){
					marker.set('html','Generating Score...');
					Speedtyping.markerfx.start('opacity',1).chain(function(){
						Speedtyping.markerfx.start('opacity',0).chain(function(){
							
							marker.set('html','');
							// Start here
							
							$('ajax-loader').setStyle('display','block');
							
							data = '';
							//data += '&keystroke='+JSON.encode(Speedtyping.keystroke);
							data += '&keystroke='+Speedtyping.keystroke;
							data += '&backspace='+Speedtyping.backspace;
							data += '&space='+Speedtyping.space;
							data += '&keypress='+Speedtyping.keypress;
							data += '&missed='+Speedtyping.missed;
							data += '&missed1='+Speedtyping.missed1;
							data += '&missed2='+Speedtyping.missed2;
							data += '&missed3='+Speedtyping.missed3;
							data += '&missed4='+Speedtyping.missed4;
							data += '&missed5='+Speedtyping.missed5;
							data += '&missed6='+Speedtyping.missed6;
							data += '&got1='+Speedtyping.got1;
							data += '&got2='+Speedtyping.got2;
							data += '&got3='+Speedtyping.got3;
							data += '&tracker='+Speedtyping.tracker;
							
							data += '&word_miss='+Speedtyping.word_miss;
							data += '&word_miss1='+Speedtyping.word_miss1;
							data += '&word_miss2='+Speedtyping.word_miss2;
							data += '&word_miss3='+Speedtyping.word_miss3;
							data += '&match='+Speedtyping.match;
							data += '&match1='+Speedtyping.match1;
							data += '&match2='+Speedtyping.match2;
							data += '&match3='+Speedtyping.match3;
							
							var url = Global.BaseURL + 'ajax.php';
							
							new Request({
							    url: url,
							    method: 'post',
							    /*
							    useSpinner: true,
							    spinnerTarget: id+'_next',
							    spinnerOptions: {'class': 'spinner'},
							    */
							    onSuccess: function(responseText) {
							    	
							    	$('ajax-loader').setStyle('display','none');
							    	
							    	var obj = JSON.decode(responseText);
							    	
							    	var html = '';
							    	html += 'SCORE: '+obj.score;
							    	html += 'FAST: '+obj.last_fast;
							    	html += 'NORMAL: '+obj.last_normal;
							    	html += 'MEDIUM: '+obj.last_medium;
							    	
							    	//alert(html);
							    	
							    	if( obj.error == "false" )
							    	{
							    	    // Score generation ok! 
							    	    
							    	    //Now, show modal to share the score using lightface if uid != 0
							    	    if( Speedtyping.uid == 0 )
							    	    {
							    	        var lightlogin = new LightFace({ 
                                     			title: 'Connect With Facebook', 
                                    			width: 600,
                                    			//height: 300,
                                      			content: 'To have a better experience in The Speed Typing Challenge, please connect with Facebook!',
                                      			buttons: [
                                                            {
                                                                title: 'Connect With Facebook',
                                                                event: function()
                                                                {
                                                                    lightlogin.close();
                                                                    FB.login(function(response)
                                                                    {
                                                                        if (response.session)
                                                                        {
                                                                            // user successfully logged in
                                                                            marker.set('html','');                                                                            
                                                                            
                                                                            Speedtyping.uid = response.session.uid;

                                                                            FB.api('/me', function(response) {
                                                                                
                                                                                Speedtyping.first_name = response.first_name;
                                                                                
                                                                                var lightscore = new LightFace({ 
                                                                         			title: 'Submit your score', 
                                                                        			width: 600,
                                                                        			//height: 300,
                                                                          			content: 'You just scored ' + obj.score + ' in <b>The Speed Typing Challenge!</b><br /><br />Tell your friends about this by sharing your score on Facebook!',
                                                                          			buttons: [
                                                                          			   {
                                                                          			       title:'Submit',
                                                                          			       event: function()
                                                                          			       {
                                                                          			           Speedtyping.fbshare();
                                                                          			           lightscore.close();
                                                                          			       },
                                                                          			       color: 'blue'
                                                                          			   },
                                                                          			   {
                                                                          			       title:'Maybe Later',
                                                                          			       event: function()
                                                                          			       {
                                                                          			           Speedtyping.submitname();
                                                                          			           lightscore.close();
                                                                          			       }
                                                                          			   }
                                                                          			]
                                        							    	    });
                                        							    	    
                                        							    	    lightscore.open();
                                                                                
                                                                            });
                                                                        }
                                                                        else
                                                                        {
                                                                            // user cancelled login
                                                                            marker.set('html',obj.score);
        							    	                                $('submission').setStyle('display','block');
                                                                        }
                                                                    });
                                                                },
                                                                color: 'blue'
                                                       },
                                                       {
                                                           title: 'Maybe Later',
                                                           event: function() 
                                                           {
                                                                marker.set('html',obj.score);
                                                                $('submission').setStyle('display','block');
                                                                lightlogin.close();
                                                           }
                                                       }
                                                ]
                                            });
                                            
                                            lightlogin.open();
							    	        
							    	        
							    	        
							    	        
							    	        
							    	        
							    	        
							    	        /*
							    	        
							    	        
							    	        
							    	        
							    	        
                                            console.log('before fb.login');
                                            
							    	        FB.login(function(response) 
                                            {
                                                console.log('i got a response');
                                                if (response.session) 
                                                {
                                                    console.log('inside response.session');
                                                    // user successfully logged in
                                                    Speedtyping.uid = response.session.uid;
                                            
                                                    FB.api('/me', function(response) {
                                                        
                                                        console.log('inside /me');
                                                        
                                                        Speedtyping.first_name = response.first_name;
                                                        
                                                        var lightscore = new LightFace({ 
                                                 			title: 'Submit your score', 
                                                			width: 600,
                                                			//height: 300,
                                                  			content: 'You just scored ' + obj.score + ' in <b>The Speed Typing Challenge!</b><br /><br />Tell your friends about this by sharing your score on Facebook!',
                                                  			buttons: [
                                                  			   {
                                                  			       title:'Submit',
                                                  			       event: function()
                                                  			       {
                                                  			           Speedtyping.fbshare();
                                                  			           lightscore.close();
                                                  			       },
                                                  			       color: 'blue'
                                                  			   },
                                                  			   {
                                                  			       title:'Maybe Later',
                                                  			       event: function()
                                                  			       {
                                                  			           Speedtyping.submitname();
                                                  			           lightscore.close();
                                                  			       }
                                                  			   }
                                                  			]
                							    	    });
                							    	    
                							    	    lightscore.open();
                                                    });
                                                }
                                                else
                                                {
                                                    console.log('no response.session');
                                                    
                                                    // user cancelled login
                                                    marker.set('html',obj.score);
        							    	        $('submission').setStyle('display','block');
                                                }
                                            });
                                            */
							    	    }
							    	    else
							    	    {
							    	        marker.set('html','');
							    	        
    							    	    var lightscore = new LightFace({ 
                                     			title: 'Submit your score', 
                                    			width: 600,
                                    			//height: 300,
                                      			content: 'You just scored ' + obj.score + ' in <b>The Speed Typing Challenge!</b><br /><br />Tell your friends about this by sharing your score on Facebook!',
                                      			buttons: [
                                      			   {
                                      			       title:'Submit',
                                      			       event: function()
                                      			       {
                                      			           Speedtyping.fbshare();
                                      			           lightscore.close();
                                      			       },
                                      			       color: 'blue'
                                      			   },
                                      			   {
                                      			       title:'Maybe Later',
                                      			       event: function()
                                      			       {
                                      			           Speedtyping.submitname();
                                      			           lightscore.close();
                                      			       }
                                      			   }
                                      			]
    							    	    });
    							    	    
    							    	    lightscore.open();
							    	    }
							    	    
							    	}
							    	else
							    	{
							    	    marker.set('html',obj.error_msg);
							    	}
							    	
									Speedtyping.markerfx.start('opacity',1);
									Speedtyping.score = obj.score;
									//Speedtyping.fbshare();
							    }
							}).send({'data':'action=submit'+data});
							
							// End here
							
						});
					});
				});
			});
		});
		/**/
	},
	
	countdown: function() {
		
		var marker = $('marker');
		
		Speedtyping.keyboard.focus();
		
		Speedtyping.markerfx = new Fx.Tween(marker, {
			duration: 200,
			duration: 500,
			wait: false,
			transition: Fx.Transitions.Quad.easeOut
		});
		
		Speedtyping.markerfx.start('opacity',0).chain(function(){
			marker.set('html','On your mark...');
			Speedtyping.markerfx.start('opacity',1).chain(function(){
				Speedtyping.markerfx.start('opacity',0).chain(function(){
					marker.set('html','Get set...');
					Speedtyping.markerfx.start('opacity',1).chain(function(){
						Speedtyping.markerfx.start('opacity',0).chain(function(){
							marker.set('html','Go!');
							Speedtyping.markerfx.start('opacity',1).chain(function(){
								
    							// Hide the countdown
    							$('countdown').setStyle('display','none');

								// Show the marquee
								$('marquee').setStyle('display','block');

								// Init marquee
								Speedtyping.init_marquee();

								// Start timer
								Speedtyping.start_timer();
								
							});
						});
					});
				});
			});
		});
	},
	
	check_word: function() {
		
		var correct = 0;
		var word = Speedtyping.keyboard.value.trim().toLowerCase();
		Speedtyping.keyboard.value = '';
				
		var word_span = $('word_'+word);
		
		if( word_span )
		{
			var position = word_span.getPosition('screen');
			
			if( position.x > 0 && position.x < Speedtyping.screen_size)
			{
				// 6, 83, 160
				correct = 1;
				if( position.y == 6 )
				{
					Speedtyping.got1 = Speedtyping.got1 + word.length;
					//Speedtyping.match1 = Speedtyping.match1 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.match1 = Speedtyping.match1 + word + ',';
					Speedtyping.globalcount++;
				}
				else if( position.y == 83 )
				{
					Speedtyping.got2 = Speedtyping.got2 + word.length;
					//Speedtyping.match2 = Speedtyping.match2 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.match2 = Speedtyping.match2 + word + ',';
					Speedtyping.globalcount++;
				}
				else if( position.y == 160 )
				{
					Speedtyping.got3 = Speedtyping.got3 + word.length;
					//Speedtyping.match3 = Speedtyping.match3 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.match3 = Speedtyping.match3 + word + ',';
					Speedtyping.globalcount++;
				}
				else
				{
				    //Speedtyping.match = Speedtyping.match + Speedtyping.globalcount + ':' + word + ',';
				    Speedtyping.match = Speedtyping.match + word + ',';
					Speedtyping.globalcount++;
				}
				//word_span.fade('out');
				word_span.set('morph',{
					'duration': 200,
					'transition': Fx.Transitions.Expo.easeIn
				}).morph({
					/*
					'height': 1000,
					'width': 1000,
					'position': 'fixed',
					'font-size': '300px',
					*/
					'opacity': 0,
					'color': '#008CFF'
					
				}).addClass('hit');
			}
			else
			{
				//Speedtyping.missed = Speedtyping.missed + word.length;
				if( position.y == 6 )
				{
					Speedtyping.missed4 = Speedtyping.missed4 + word.length;
					//Speedtyping.word_miss1 = Speedtyping.word_miss1 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.word_miss1 = Speedtyping.word_miss1 + word + ',';
					Speedtyping.globalcount++;
				}
				else if( position.y == 83 )
				{
					Speedtyping.missed5 = Speedtyping.missed5 + word.length;
					//Speedtyping.word_miss2 = Speedtyping.word_miss2 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.word_miss2 = Speedtyping.word_miss2 + word + ',';
					Speedtyping.globalcount++;
				}
				else if( position.y == 160 )
				{
					Speedtyping.missed6 = Speedtyping.missed6 + word.length;
					//Speedtyping.word_miss3 = Speedtyping.word_miss3 + Speedtyping.globalcount + ':' + word + ',';
					Speedtyping.word_miss3 = Speedtyping.word_miss3 + word + ',';
					Speedtyping.globalcount++;
				}
			}
		}
		else
		{
			Speedtyping.missed = Speedtyping.missed + word.length;
			//Speedtyping.word_miss = Speedtyping.word_miss + Speedtyping.globalcount + ':' + word + ',';
			Speedtyping.word_miss = Speedtyping.word_miss + word + ',';
			Speedtyping.globalcount++;
		}
		
		if( correct )
		{
			Speedtyping.keyboardfx.start('background-color','#008CFF', '#f0f0f0');
		}
		else
		{
			Speedtyping.keyboardfx.start('background-color','#FF0000', '#f0f0f0');
		}
		
	}, 
	
	dump: function (arr,level) {
        var dumped_text = "";
        if(!level) level = 0;
        
        //The padding given at the beginning of the line.
        var level_padding = "";
        for(var j=0;j<level+1;j++) level_padding += "    ";
        
        if(typeof(arr) == 'object') 
        { //Array/Hashes/Objects 
            
        	for(var item in arr) 
        	{
        		var value = arr[item];
        		
        		if(typeof(value) == 'object') 
        		{ //If it is an array,
        			dumped_text += level_padding + "'" + item + "' ...\n";
        			dumped_text += dump(value,level+1);
        		}
        		else 
        		{
        			dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
        		}
        	}
        }
        else 
        { //Stings/Chars/Numbers etc.
        	dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
        }
        return dumped_text;
    },
    
    load_ads: function() {
        
        
        
    },
    
    fbshare: function() {
    	
        FB.ui(
            { 
            	method: 'feed',
            	name: 'I just scored '+Speedtyping.score+' in The Speed Typing Challenge',
            	link: 'http://www.speedtyping.net/',
            	picture: 'http://www.speedtyping.net/assets/images/speedtyping-100x100.jpg',
            	description: 'See how fast you can type and compare your score with other players from all over the world! Try it now!',
                message: 'Can you beat my score?'
            },
            function(response) 
            {
                if( Speedtyping.uid != 0 )
                {
                    Speedtyping.submitname();
                }
                
                if (response && response.post_id) 
                {
                    
                }
            }
        );
		/*
    	FB.ui({
    		method: 'stream.publish',
    		message: 'Can you beat my score?',
    		attachment: {
				name: 'I just scored '+Speedtyping.score+' in Speed Typing Challenge',
				caption: '',
				description: 'See how fast you can type and compare your score with other players from all over the world! Try it now!',
				href: 'http://www.speedtyping.net/',
				media: [{
					type: 'image',
					href: 'http://www.speedtyping.net/',
					src: 'http://www.speedtyping.net/assets/images/speedtyping-100x100.jpg'
				}]
    		}
    	});
    	*/
    },
    
    tweet: function() {
    	
    	var message = 'I+just+scored+'+Speedtyping.score+'+in+Speed+Typing+Challenge!';
    	window.open( "http://twitter.com/share?url=http://www.speedtyping.net/&text="+message, "Tweet", "status=0,height=450,width=550,resizable=0" );
    },
    
    submitname: function() {
    	
    	// Get the name
    	if( Speedtyping.first_name == '' )
    	{
        	var name = $('tf_name').value;
    	}
    	else
    	{
    	    var name = Speedtyping.first_name;
    	}
    	
    	var url = Global.BaseURL + 'ajax.php';
    	var data = '';
    	data += '&tracker='+Speedtyping.tracker;
    	data += '&name='+name;
    	data += '&uid='+Speedtyping.uid;
    	
    	$('b_submit').setStyle('display','none');
    	$('submit_spinner').setStyle('display','inline');
    	
		new Request({
		    url: url,
		    method: 'post',
		    onSuccess: function(responseText) {
		    	
		    	var obj = JSON.decode(responseText);
		    	
		    	$('b_submit').setStyle('display','inline');
    			$('submit_spinner').setStyle('display','none');

		    	if( obj.error != "false" )
		    	{
		    		// Do something then exit
		    	    return false;
		    	}
		    	
		    	var html = 'You just scored '+obj.score+' pts in The Speed Typing Challenge, good for '+obj.rank+obj.suffix+' today!';
		    	
		    	if( Speedtyping.uid == 0 )
		    	{
		    		var box = new LightFace({ 
						title: 'Share your score', 
						width: 600,
						content: html,
						buttons: [
						   {
						       title:'Share via Facebook',
						       event: function()
						       {
						           Speedtyping.fbshare();
						           box.close();
						       },
						       color: 'blue'
						   },
						   {
						       title:'Share via Twitter',
						       event: function()
						       {
						           Speedtyping.tweet();
						           box.close();
						       },
						       color: 'blue'
						   },
						   {
						       title:'View Scores',
						       event: function()
						       {
						           Speedtyping.highscores('d');
						           box.close();
						       }
						   }
						]
					});
						
					box.open();
		    		
		    	    // Hide the submission
                    $('submission').setStyle('display','none');
                    //$('share').setStyle('display','block');
		    	}
		    	else
		    	{
		    		var box = new LightFace({ 
						title: 'Congratulations', 
						width: 600,
						content: html,
						buttons: [
						   {
						       title:'View Scores',
						       event: function()
						       {
						           Speedtyping.highscores('d');
						           box.close();
						       },
						       color: 'blue'
						   },
						   {
						       title:'Close',
						       event: function()
						       {
						           box.close();
						       }
						   }
						]
					});
						
					box.open();
		    	}
		    }
		}).send({'data':'action=submitname'+data});
    },
    
    highscores: function(target) {
    	
    	$('aboutdiv').setStyle('display','none');
    	$('hsdiv').setStyle('display','none');
    	$('cover').fade('show');
    	
    	var url = Global.BaseURL + 'ajax.php?action=hs'+target+'&timer='+Speedtyping.myDate.getTime();
		$('ajax-loader').setStyle('display','block');
		
		var hsdiv = $('hsdiv');
		hsdiv.set('html','');
		
		new Request({
		    url: url,
		    method: 'get',
		    onSuccess: function(responseText) {
		    	
		    	$('ajax-loader').setStyle('display','none');
		    	
		    	var obj = JSON.decode(responseText);
		    	
		    	var entries = obj.score_count;
		    	var scores = obj.scores;
		    	
		    	var html = '';
		    	if( target == 'w' )
		    	{
		    		html = 'Top Scores - This Week';
		    	}
		    	else if( target == 'a' )
		    	{
		    		html = 'Top Scores - All Time';
		    	}
		    	else
		    	{
		    		html = 'Top Scores - Today';
		    	}
		    	
		    	var heading = new Element('h2', { 'html': html });
		    	heading.inject(hsdiv);
		    	
		    	for( var i = 0; i < entries; i++ )
		    	{
		    		var el = new Element('div',{'class': 'score', 'html': (i+1) + '. ' + scores[i].score + ' - ' + scores[i].name });
	    			el.inject(hsdiv);
		    	}
		    	
		    	hsdiv.setStyle('display','block');
		    }
		}).send();
    },
    
    about: function() {
    	$('aboutdiv').setStyle('display','block');
    	$('hsdiv').setStyle('display','none');
    }
};

window.addEvent('domready', function(){
	Speedtyping.init();
});
