/*
Shoot 'n Duck Game developed for Yoove.net Portfolio
(c) Copyright Michael Schindler 2011
All rights reserved!

Copying, modifying, usage of this script or parts of this script is strictly prohibited!
*/

jQuery.extend({
	random: function(X) {
	    return Math.floor(X * (Math.random() % 1));
	},
	randomBetween: function(MinV, MaxV) {
	  return MinV + jQuery.random(MaxV - MinV + 1);
	}
});


jQuery(document).ready(function() {

/* Defining Global Variables */
var score = 0;



/* Start Game in Blog Posting */
	jQuery('#game_post').each(function(){
		jQuery('#container').css({background: 'none'});
		
		jQuery('#logo').fadeOut(500);
		jQuery('#game_start').fadeOut(500);
		
		jQuery('#container').prepend(jQuery('<div id="game"></div>').hide().fadeIn(5000));
				
		
		jQuery('#game').ready(function() {
				jQuery('#game').css({'height':'430px','width':jQuery('#container').width(),'position':'absolute','top':'0','left':'0','zIndex':'10'});
			
				jQuery('#game').css({cursor: 'crosshair'});
								
				the_game();
					
		});
	
	});

/* -------------------------- */


/* Preparing Stage */
	jQuery('#game_start').click(function(){
		jQuery('#container').css({background: 'none'});
		
		jQuery('#logo').fadeOut(500);
		jQuery('#game_start').fadeOut(500);
		
		jQuery('#container').prepend(jQuery('<div id="game"></div>').hide().fadeIn(5000));
				
		
		jQuery('#game').ready(function() {
				jQuery('#game').css({'height':'430px','width':jQuery('#container').width(),'position':'absolute','top':'0','left':'0','zIndex':'10'});
			
				jQuery('#game').css({cursor: 'crosshair'});
								
				the_game();
					
		});
	
	});

/* Clouds */	
	function cloud11(startpos11) {
	
	if (!startpos11) { var startpos11 = -jQuery('#cloud_1_1').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_1_1.png" class="cloud" id="cloud_1_1" />');
		jQuery('#cloud_1_1').css({'left':startpos11,'top':'120px','zIndex':'50'});
		jQuery('#cloud_1_1').animate({left: jQuery('#container').width()},jQuery.randomBetween(40000,80000),'linear',function() {
				//jQuery('#cloud_1_1').remove();
				cloud11();
		});
	}
	
	function cloud12(startpos12) {
	
	if (!startpos12) { var startpos12 = -jQuery('#cloud_1_2').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_1_2.png" class="cloud" id="cloud_1_2" />');
		jQuery('#cloud_1_2').css({'left':startpos12,'top':'80px','zIndex':'60'});
		jQuery('#cloud_1_2').animate({left: jQuery('#container').width()},jQuery.randomBetween(40000,80000),'linear',function() {
				//jQuery('#cloud_1_2').remove();
				cloud12();
		});
	}
	
	
	function cloud21(startpos21) {
	
	if (!startpos21) { var startpos21 = -jQuery('#cloud_2_1').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_2_1.png" class="cloud" id="cloud_2_1" />');
		jQuery('#cloud_2_1').css({'left':startpos21,'top':'190px','zIndex':'70'});
		jQuery('#cloud_2_1').animate({left: jQuery('#container').width()},jQuery.randomBetween(10000,40000),'linear',function() {
				//jQuery('#cloud_2_1').remove();
				cloud21();
		});
	}
	
	function cloud22(startpos22) {
	
	if (!startpos22) { var startpos22 = -jQuery('#cloud_2_2').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_2_2.png" class="cloud" id="cloud_2_2" />');
		jQuery('#cloud_2_2').css({'left':startpos22,'top':'250px','zIndex':'80'});
		jQuery('#cloud_2_2').animate({left: jQuery('#container').width()},jQuery.randomBetween(10000,40000),'linear',function() {
				//jQuery('#cloud_2_2').remove();
				cloud22();
		});
	}
	
	
	function cloud23(startpos23) {
	
	if (!startpos23) { var startpos23 = -jQuery('#cloud_2_3').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_2_3.png" class="cloud" id="cloud_2_3" />');
		jQuery('#cloud_2_3').css({'left':startpos23,'top':'110px','zIndex':'90'});
		jQuery('#cloud_2_3').animate({left: jQuery('#container').width()},jQuery.randomBetween(10000,40000),'linear',function() {
				//jQuery('#cloud_2_3').remove();
				cloud23();
		});
	}

	
	function cloud31(startpos31) {
	
	if (!startpos31) { var startpos31 = -jQuery('#cloud_3_1').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_3_1.png" class="cloud" id="cloud_3_1" />');
		jQuery('#cloud_3_1').css({'left':startpos31,'top':'300px','zIndex':'100'});
		jQuery('#cloud_3_1').animate({left: jQuery('#container').width()},jQuery.randomBetween(10000,40000),'linear',function() {
				//jQuery('#cloud_3_1').remove();
				cloud31();
		});
	}
	
	
	function cloud32(startpos32) {
	
	if (!startpos32) { var startpos32 = -jQuery('#cloud_3_2').width(); }
	
		jQuery('#game').prepend('<img src="'+imgpath+'/cloud_3_2.png" class="cloud" id="cloud_3_2" />');
		jQuery('#cloud_3_2').css({'left':startpos32,'top':'70px','zIndex':'110'});
		jQuery('#cloud_3_2').animate({left: jQuery('#container').width()},jQuery.randomBetween(10000,40000),'linear',function() {
				//jQuery('#cloud_3_2').remove();
				cloud32();
		});
	}
	
	
/* Gimmicks */
	
	// x und y muss getrennt sein wegen startposy ...
	function balloon(startballoonx,startballoony) {
			
		jQuery('#game').prepend('<div class="balloon" id="balloon"><img src="'+imgpath+'/passenger.png" id="passenger" style="display:none;" /></div>');
	
		if (!startballoonx) { var startballoonx = jQuery('#balloon').width()*-1; }
		if (!startballoony) { var startballoony = jQuery.randomBetween(-400,100); var top_y = jQuery.randomBetween(-400,200); } else { var top_y = jQuery.randomBetween(-600,-100); }
	
		jQuery('#balloon').fadeIn(1000);
		jQuery('#balloon').css({cursor: 'crosshair'});
		jQuery('#balloon').css({'left':startballoonx,'top':startballoony,'zIndex':jQuery.randomBetween(50,120)});
		jQuery('#balloon').animate({left:jQuery('#container').width(),top:top_y},jQuery.randomBetween(70000,90000),'linear',function() {
				jQuery('#balloon').hide();
				jQuery('#balloon').remove();
				balloon();	
		});
		
		
	
		jQuery('#balloon').bind('click',function(e){
	
						var $the_balloon = jQuery('#balloon');
						var balloon_pos = $the_balloon.position();
						var $balloon_hit = jQuery('<div class="hit_balloon"></div>');
						var passenger = jQuery('#passenger');

						/* Passenger */
						var mouse_x = e.pageX - this.offsetLeft;
						var mouse_y = e.pageY - this.offsetTop;
						
							if (mouse_x>=150 && mouse_x<=170 && mouse_y>=390 && mouse_y<415 && jQuery('#passenger').is(":visible") == true ) {  
								score += 1000;
								update_score();
								hit_score(passenger.offset(),1000,passenger);
								
								jQuery('#passenger').stop();
								jQuery('#passenger').remove();
								
								var passenger_hit = true;
							}
							
							
						
						if(!passenger_hit == true){
							score -= 200;
							update_score();
							
							/* Display Hit Points (-200) */
							
							jQuery('#game').prepend($balloon_hit);
							$balloon_hit.css({'top':balloon_pos.top+300,'left':balloon_pos.left+$the_balloon.width()/2.5,'color':'red'});
							$balloon_hit.html(-200);
							$balloon_hit.animate({'top':balloon_pos.top-50, "opacity": "toggle"},1500);
							/* *** */
							
							
							jQuery('#balloon').stop();
							jQuery('#balloon').remove();
						
							balloon();
						}
						
		});
	}
	
	
/* Ducks */
		
		function duck1(startduck,respawn) {
			
			if (!startduck || startduck=="") { var startduck = jQuery('#container').width(); }
		
				var duck_speed = jQuery.randomBetween(10000,40000);
				var duck_level = jQuery.randomBetween(80,120);
				var top_pos = jQuery.randomBetween(40,250);
		
				var $duckduck = jQuery('<div class="duck1" style="background:url('+imgpath+'/duck_1.png) top left no-repeat;">&nbsp;</div>');
				jQuery('#game').prepend($duckduck);
										
			
				$duckduck.css({'left':startduck,'top':top_pos,'zIndex':duck_level});
				$duckduck.animate({left:'-100px'},duck_speed,'linear',function() {
					score -= 10;
					display_penalty(-10,top_pos);
					update_score();
					if (respawn!=0) {
						duck1();
					}
					$duckduck.remove();
				});
				
				animduck1($duckduck);
				
				
				$duckduck.bind('click',function(){
				
						score += 5;
						update_score();
						
						hit_score($duckduck.position(),5,$duckduck);

						$duckduck.stop();
						$duckduck.remove();
						if (respawn!=0) {
							duck1();
						}
						
				});
				
				
		}
		
		
		function duck2(startduck,respawn) {
			
			if (!startduck || startduck=="") { var startduck = jQuery('#container').width(); }
		
				var duck_speed = jQuery.randomBetween(10000,40000);
				var duck_level = jQuery.randomBetween(50,80);
				var top_pos = jQuery.randomBetween(40,250);
		
				var $duckduck = jQuery('<div class="duck2" style="background:url('+imgpath+'/duck_2.png) top left no-repeat;">&nbsp;</div>');
				jQuery('#game').prepend($duckduck);
										
			
				$duckduck.css({'left':startduck,'top':top_pos,'zIndex':duck_level});
				$duckduck.animate({left:'-100px'},duck_speed,'linear',function() {
					score -= 30;
					display_penalty(-30,top_pos);
					update_score();
					if (respawn!=0) {
						duck2();
					}					
					$duckduck.remove();
				});
				
				animduck2($duckduck);
				
				
				$duckduck.bind('click',function(){
				
						score += 15;
						update_score();
						
						hit_score($duckduck.position(),15,$duckduck);
						
						$duckduck.stop();
						$duckduck.remove();
						if (respawn!=0) {
							duck2();
						}
						
						
				});
				
		}
		
		
		function duck3(startduck,respawn) {
			
			if (!startduck || startduck=="") { var startduck = jQuery('#container').width(); }
		
				var duck_speed = jQuery.randomBetween(10000,20000);
				var duck_level = jQuery.randomBetween(10,49);
				var top_pos = jQuery.randomBetween(40,250);
		
				var $duckduck = jQuery('<div class="duck3" style="background:url('+imgpath+'/duck_3.png) top left no-repeat;">&nbsp;</div>');
				jQuery('#game').prepend($duckduck);
										
			
				$duckduck.css({'left':startduck,'top':top_pos,'zIndex':duck_level});
				$duckduck.animate({left:'-100px'},duck_speed,'linear',function() {
					score -= 100;
					display_penalty(-100,top_pos);
					update_score();
					
					if (respawn!=0) {
						duck3();	
					}
					$duckduck.remove();
				});
				
				
				$duckduck.bind('click',function(){
				
						score += 50;
						update_score();
						
						hit_score($duckduck.position(),50,$duckduck);
						
						$duckduck.stop();
						$duckduck.remove();
						if (respawn!=0) {
							duck3();
						}
				});
				
				animduck3($duckduck);
		}
	
	
		function animduck1(theduck) {
					
			jQuery.doTimeout( 300, function(){
				
					theduck.css({'background-position':'0 -65px'});
				
					jQuery.doTimeout( 300, function(){
						theduck.css({'background-position':'0 0'});
						animduck1(theduck);
					});
					
			});
	
		}	
		
		function animduck2(theduck) {
					
			jQuery.doTimeout( 300, function(){
				
					theduck.css({'background-position':'0 -49px'});
				
					jQuery.doTimeout( 300, function(){
						theduck.css({'background-position':'0 0'});
						animduck2(theduck);
					});
					
			});
	
		}
		
		function animduck3(theduck) {
					
			jQuery.doTimeout( 300, function(){
				
					theduck.css({'background-position':'0 -37px'});
				
					jQuery.doTimeout( 300, function(){
						theduck.css({'background-position':'0 0'});
						animduck3(theduck);
					});
					
			});
	
		}
	
	
/* Game */	

	function update_score() {
	
		if(score < 0){ jQuery('#score').css({'color':'red'}); } else { jQuery('#score').css({'color':'#666'}); }
		jQuery('#score').html(score);
	}
	
	
	function hit_score(position,score,theduck) {
		var $the_hit = jQuery('<div class="hit_score"></div>');
		
		jQuery('#game').prepend($the_hit);
	
		$the_hit.css({'top':position.top,'left':position.left+theduck.width()/2.5});
		$the_hit.html(score);
		$the_hit.animate({'top':position.top-50, "opacity": "toggle"},500);
		}
	
	function display_penalty(score,top_pos) {
		var $penalty = jQuery('<div class="penalty"></div>');
		
		jQuery('#game').prepend($penalty);
		$penalty.css({'top':top_pos,'left':'-50px','display':'none'});
		$penalty.html(score);
		$penalty.fadeIn(1000,function(){ $penalty.fadeOut(5000); });
	}
	
	function game_time(){
		jQuery('#game').prepend('<div id="game_time"></div>');
		jQuery('#game_time').countdown({until: +60, format:'MS',compact:1,onTick:make_harder,onExpiry:finish_game});
	}
	
	function make_harder(){
		var randomizer = jQuery.randomBetween(1,15);
		if (randomizer==3 || randomizer==6) { duck3('',0); }
		if (randomizer==10 ) { duck2('',0); }
		if (randomizer==12) { duck1('',0); }
		
		if (randomizer==13) { 
		jQuery('#passenger').fadeIn(300);
		jQuery.doTimeout( 8000, function(){		
			jQuery('#passenger').fadeOut(300); });
		}
		
	}
	
	function finish_game(){
		
		end_menu();
		jQuery('.duck1').stop();
		jQuery('.duck2').stop();
		jQuery('.duck3').stop();
		jQuery('#balloon').stop();
		
		jQuery('.duck1').remove();
		jQuery('.duck2').remove();
		jQuery('.duck3').remove();
		jQuery('#balloon').remove();
	}

	function the_game_ui() {
		
		jQuery('#game').prepend('<div id="score"></div>');
		jQuery('#score').css({'z-index':'200'});
	
	}
	
	function the_highscore(highscore) {
	
		jQuery('#end_menu').html('<img src="'+imgpath+'/shoot-n-duck-logo.png" />');
		jQuery('#end_menu').append(highscore);
		jQuery('#end_menu').append('<div style="text-align:center; margin-top: 10px;"><a href="#" onclick="return false;" id="restart_button"><img src="'+imgpath+'/restart.png" /></a></div>');
		
		
		jQuery('#restart_button').bind('click',function(){
			score = 0;
			jQuery('#end_menu').remove();
			
			jQuery('#cloud_1_1').stop();
			jQuery('#cloud_1_2').stop();
			jQuery('#cloud_2_1').stop();
			jQuery('#cloud_2_2').stop();
			jQuery('#cloud_2_3').stop();
			jQuery('#cloud_3_1').stop();
			jQuery('#cloud_3_2').stop();
			jQuery('#score').stop();
			jQuery('#game_time').stop();
		
			jQuery('#cloud_1_1').remove();
			jQuery('#cloud_1_2').remove();
			jQuery('#cloud_2_1').remove();
			jQuery('#cloud_2_2').remove();
			jQuery('#cloud_2_3').remove();
			jQuery('#cloud_3_1').remove();
			jQuery('#cloud_3_2').remove();
			jQuery('#score').remove();
			jQuery('#game_time').remove();
			
			
			the_game();
		});
		
	}

	
	
	function end_menu() {
	
		jQuery('#game').prepend('<div id="end_menu"><img src="'+imgpath+'/shoot-n-duck-logo.png" /><div id="end_score"></div><form><input type="text" value="Your Name" name="player_name" id="player_name" maxlength="15" /><p style="display:block; height: 30px;"><a href="#" onclick="return false;" id="save_button"><img src="'+imgpath+'/save.png" /></a></p></form><div style="margin:55px 0 0 0; padding: 0 10px 0 10px; height: 30px;"><a href="#" onclick="return false;" id="restart_button" style="display:block; width:112px; height:30px; float:left;"><img src="'+imgpath+'/restart.png" /></a><a href="#" onclick="return false;" id="highscore_button" style="display:block; width:139px; height:30px; float:right;"><img src="'+imgpath+'/highscore.png" /></a></div></div>');
		jQuery('#end_menu').hide();			
		jQuery('#end_menu').fadeIn(1000);
		jQuery('#end_score').html(score);
		
		jQuery('#player_name').css({'border':'0','margin':'2px'});
		
		jQuery('#player_name').bind('click',function(){
			jQuery(this).val("");
			jQuery(this).css({'border':'0','margin':'2px'});
		});
		
		
		jQuery('#restart_button').bind('click',function(){
			score = 0;
			jQuery('#end_menu').remove();
			
			jQuery('#cloud_1_1').stop();
			jQuery('#cloud_1_2').stop();
			jQuery('#cloud_2_1').stop();
			jQuery('#cloud_2_2').stop();
			jQuery('#cloud_2_3').stop();
			jQuery('#cloud_3_1').stop();
			jQuery('#cloud_3_2').stop();
		
			jQuery('#cloud_1_1').remove();
			jQuery('#cloud_1_2').remove();
			jQuery('#cloud_2_1').remove();
			jQuery('#cloud_2_2').remove();
			jQuery('#cloud_2_3').remove();
			jQuery('#cloud_3_1').remove();
			jQuery('#cloud_3_2').remove();
			jQuery('#score').remove();
			jQuery('#game_time').remove();
			
			the_game();
		});
		
		
		
		
		
		jQuery('#highscore_button').bind('click',function(){
			jQuery('#highscore_button').html('<img src="'+imgpath+'/loader.gif" id="loader" alt="loading" border="0" />');
					jQuery.ajax({
				   type: "POST",
				   url: filepath+"highscore.php",
				   data: "dummy=1",
				   success: function(msg){
					 the_highscore(msg)
					}
					});
		
		});
		
		
		
		
		
		
		
		
		jQuery('#save_button').bind('click',function(){
		
			if(jQuery('#player_name').val() != "Your Name" && jQuery('#player_name').val() != "") {	
				jQuery('#end_menu p').html('<img src="'+imgpath+'/loader.gif" id="loader" alt="loading" border="0" />');
				
					jQuery.ajax({
				   type: "POST",
				   url: filepath+"save_score.php",
				   data: "score="+score+"&name="+jQuery('#player_name').val(),
				   success: function(msg){
					 the_highscore(msg)
					}
					});
			} else {
				jQuery('#player_name').css({'border':'2px solid #FF0000','margin':'0'});
			}			
		
		})
		
	}
	

	function the_game() {

	
		the_game_ui();
		update_score();
		game_time();
	
		cloud11(1000);
		cloud12(100);
		cloud21(400);
		cloud22(900);
		cloud23(200);
		cloud31(200);
		cloud32(1000);
		
		balloon(300,-5);
		
		duck1(); duck2(); duck3(); 
		duck1(); duck2(); duck3();
	
	}	

	
	
	
});
