gg.ui.game = {
    
    board : null,
    userScore : null,    
    
	init: function() {
		var self = gg.ui.game;		
		self.game = gg.utility.decodeJSON($$('#game_data').value);
		self.swf =  gg.utility.decodeJSON($$('#swf').value);	
	
		self._initSend();
		self._initComments();
		self._initFavorites();	
		self._initTags();		
		
		self._initRatings();			
		self._writeSWF();
		
		self._initScoreBoard();
		
	
	    $('#reg_button').click(function(e) { pageTracker._trackEvent("game_page", "click_reg");  });
	    $('#rate_stars').click(function(e) { alert('hai')  });
		
		//Send our play ping
        setTimeout(function() { self._addPlay() }, 1000);		 		
	},
	

	
	_writeSWF: function() {
	    var self = gg.ui.game;
	    
	    //eval swf size
		var w = $('div.wrapper:nth(0)', $('#content'));
		var v = parseInt(self.swf.width) + 320;
		if(v && (v > 950)) { w.width(v); }
		
		//finally write the game	
		if(self.game.background) { color = self.game.background; } 
		var so = new SWFObject("http://media.funderoo.com/swf/"+self.game.media, "flashgame", self.swf.width, self.swf.height, "8");
		so.addParam("allowscriptaccess", "sameDomain");	
		so.write("game-swf");
	},
	
	_addPlay: function() {
	    var self = gg.ui.game;
	    gg.utility.AJAXRequest('addplay', {gameid: self.game.id});
	},
	
	_initTags: function() {
	    var self = gg.ui.game;
	    t = function(e) {
	        if(gg.user) {
	            $('#add-tag').toggleClass('hide'); 
    	        $('#add-tag-link').toggleClass('hide');                
	        } else {
	            gg.ui.login.show('You must be logged in to tag a game. Please login or register below.');
	        }	         
	        return false; 
	    };
		//$('#add-tag-link').click(t);
		//$('#add-tag-cancel').click(t);
		
		$('#add-tag').submit(function() { 
		    var o = {};
		    o.tag = $(this).children('input').val();		    
		    o.gameid = self.game.id
		    if(o.tag) {		        
		        if(gg.user)
		            o.userid = gg.user.id;
		    	            
		    	//TODO: show 'saving' anim
		    	//gg.ui.waiting($('#add-tag').insertSibling($.DIV()), 'Saving')
		        var s = function(r) {
		            $('#add-tag-link').click();
		            self._buildTags(r.data)
		        }		        
		        gg.utility.AJAXRequest('addTag', o, s);		       
                pageTracker._trackEvent("game_page", "add_tag");               
		    }
		    return false;		    	    
		});
	},
	
	//TODO does not replace elements correctly
	_buildTags: function(tags) {	    
	    var l = Array();
	    $.each(tags, function(i, item) {
	        l.push($.LI(null, $.A({ href: '/tag/'+item.name }, item.name)) );
	    });
	    $('#tag_list').empty().append(l);    
	},
	
	_initRatings: function() {
	    var self = gg.ui.game;
	    
		new gg.ui.Ratings($$('#stars'), self.game.stats.rating);
        	    
	    if($$('#rate_stars')) {	        
	        var r = new gg.ui.Ratings($$('#rate_stars'));
	        r.onRate = function() { pageTracker._trackEvent("game_page", "rate_game"); }
	    }		    
		
		if($$('#your_rating'))
            new gg.ui.Ratings($$('#your_rating'), parseFloat($$('#your_rating').innerHTML.replace(' ','')));
	},
	
	_initSend: function() {
		$('#sendtofriend-panel').jqm({ajax: '/tellfriend/'});
		$('#sendtofriend-link').click(function() { 
		    $('#sendtofriend-panel').jqm().jqmShow(); 
		    pageTracker._trackEvent("game_page", "send_friend_button");  
		    return false; 
		});
	},
	
	_initScore: function() {
	    var self = gg.ui.game;	   
	    if(gg.user.id) { 
		    $('#score-link').click(function(e) { $('#score-form').toggleClass('hide'); return false; });
		    $('#score-cancel').click(function(e) { $('#score-form').toggleClass('hide'); return false; });
		    $('#score-save').click(self._saveScore);
	    } else {
	        $('#score-link').click( function() { gg.ui.login.show('You must be logged in to save your score. Please login or register below.'); return false; });
	    }
	},
	
	_initScoreBoard: function() {
	    var self = gg.ui.game;
	    if($('#boards')) {
	        self.board = new gg.ui.ScoreBoard($('#score_board'), $('#board_list'), self._boardUpdate);	                
	    }	    
	},
	
	_boardUpdate : function(board) {
	    var self = gg.ui.game;

	    if(!gg.user.id) 
	        return;
	    
	    self.board.getUserScore(gg.user.id, function(s){
	        self.userScore = s;
    	    $('#user_score').html(gg.utility.commafy(self.userScore.score));
	    });
	},
	
	_saveScore: function() {
	    var self = gg.ui.game;
	    var o = { 'userid': gg.user.id, 'gameid': self.game.id, 'score': $.str_to_integer($$('#score-txt').value), 'level': $.str_to_integer($$('#level-txt').value) };
		var score = $$('#score-txt').value;
		var level = $$('#level-txt').value;
		var s = function(success) { 
			if((score != '') || (level != '')) {
				score != '' ? $('#score-data').empty().append(score) : $('#score-data').empty().append('--');
				level != '' ? $('#level-data').empty().append(level) : $('#level-data').empty().append('--');
				$('#score-panel').removeClass('hide');
			}
			$('#score-form').addClass('hide');				 
		}		
		var f = function(err) { log('message', 'There was a problem. Your score was not saved, please try again', 'error'); 
		gg.utility.AJAXFail(err); }	
		gg.utility.AJAXRequest('saveScore', o, s, f);			
		return false;
	},
	
	_initFavorites: function() {
	    var self = gg.ui.game;	    

        if(gg.user.id) {
            $('#favorite-add').click(function(i) {				
    			if(self.game) { 
    				$('#favorite-add').toggleClass('hide');
    				$('#favorite-load').toggleClass('hide');
    				var s = function() { $('#favorite-remove').toggleClass('hide'); $('#favorite-load').toggleClass('hide'); }	
    				gg.user.addFavorite(self.game, s);
    				pageTracker._trackEvent("game_page", "add_favorite");   
    			};	
    			return false;						
    		});	

    		$('#favorite-remove').click(function(i) {				
    			if(self.game) { 
    				$('#favorite-remove').toggleClass('hide');
    				$('#favorite-load').toggleClass('hide');
    				var s = function() { $('#favorite-add').toggleClass('hide'); $('#favorite-load').toggleClass('hide'); }
    				gg.user.removeFavorite(self.game, s); 
    				pageTracker._trackEvent("game_page", "remove_favorite");
    			};			
    			return false;				
    		});
        } else {
            $('#favorite-add').click(function() { gg.ui.login.show('You must be logged in to keep favorites. Please login or register below.'); return false; });
        }		
	},
	
	_initComments: function() {
	    //if user not logged in -> show login
	    if(!gg.user.id) {
	        $('#commentform').click(function(e){ gg.ui.login.show('You must be logged in to comment on a game. Please log in below.'); return false; });
	        $('#comment-form').addClass('inactive');
	    } else {
	        $('#commentform').click(function(e){ 
	            pageTracker._trackEvent("game_page", "add_comment");
	        });
	    }
		
	}
}
$(gg.ui.game.init);
