if ( window.console == undefined || window.console.log == undefined ) {	window.console = { log:function(msg){ /* msg */ } } }
if ( typeof(window.billboard)=="undefined"){ billboard={}; }

billboard.games = new ( function($) {

    var me = this;
    me.init = function(){
		billboard.broadcaster.addListener( "pageLoaded", function() { me.onPageLoaded(); } );
		billboard.broadcaster.addListener( "userLoggedIn", function() { me.redirectLogin(); } );
    };

    me.redirectLogin = function(){
        if (billboard.section == 'games' && billboard.subsection == 'about'){
            billboard.history.setHash('/games/chart-game/start?c=' + (new Date()).getTime());
            return;
        } else if (
            (billboard.section == 'soyl' || billboard.section == 'games')
            && billboard.subsection != 'about'){
	    	billboard.history.setHash(billboard.history.hash + '?c=' + (new Date()).getTime());
	    	return;
	    }
    };

    me.onPageLoaded = function(){
		// soyl functions		
		$("#moyl-next").click(function(){
		billboard.user.requireLogin( function() { 
			$("#date-error").text('');
			$("#date-error").hide();
			var m = parseInt($("#moyl-form :input[name=month]").val(),10);
			var d = parseInt($("#moyl-form :input[name=day]").val(),10);
			var y = parseInt($("#moyl-form :input[name=year]").val(),10);
			var id = $("#moyl-form :input[name=id]").val();
			var s  = $("#moyl-form :input[name=s]").val();
			var eventSize = $("#moyl-form :input[name=eventsize]").val();
			var dObj = new Date();
			var dObjYr = dObj.getFullYear();
			if (isNaN(m) || isNaN(d) || isNaN(y) ) {
				$("#date-error").show();
				$("#date-error").text('Please enter month, date and year.');
				return;				
			}
			// validate data
			if ( m > 12 || m < 1 || d <= 0 || d > 31 || y < 1000) {
				$("#date-error").show();
				$("#date-error").text('Please re-enter a date in the format MM DD YYYY.');
				return;
			}
			if (y >dObjYr) {
				$("#date-error").show();
				$("#date-error").text('Please enter a date before the current year.');
				return;
			}
			if (y < 1958) {
				$("#date-error").show();
				$("#date-error").text('Sorry. Our chart data only goes back to 1958.');
				return;
			}
			var date = y+"-"+m+"-"+d;
			// generate the link
			var loc = billboard.history.hash;
			console.log( loc );
			var params = {};
			params["e"] = id;
			params["s"] = s;
			params["d"] = date;
			loc = updateQueryParams( loc, params );
			console.log( loc );
			loc = loc + "/#intro";
			//Publish to billboard and facebook
			if(s==eventSize){
			//Publish to activity page for user and followers
				billboard.social.trackActivity( null,
											"game", 
											" has updated their <a href='/soyl/list/"+billboard.user.username+"'>Soundtrack of Your Life!</a>",
											null );				
				billboard.facebook.publish("soyl","");
			}
			// redirect
			billboard.history.setHash( loc );
			});//requireLogin
		});
	
		$("#moyl-skip").click(function(){ 
		billboard.user.requireLogin( function() { 

			var loc = billboard.history.hash;
			var s  = $("#moyl-form :input[name=s]").val();					
			var eventSize = $("#moyl-form :input[name=eventsize]").val();
			var params = {};
			params["s"] = s;
			params["e"] = '';
			params["d"] = '';
			loc = updateQueryParams( loc, params );
			console.log( loc );
			loc = loc + "/#intro";

			//Publish to billboard and facebook
			if(s==eventSize){
			//Publish to activity page for user and followers
				billboard.social.trackActivity( null,
											"game", 
											" has updated their <a href='/soyl/list/"+billboard.user.username+"'>Soundtrack of Your Life!</a>",
											null );				
				billboard.facebook.publish("soyl","");
			}
			// redirect
			billboard.history.setHash( loc );
			});//requireLogin
		});
		
		
		

		if(!billboard.user.isLoggedIn())
		$('.moyl-title .btn .hide').show();
		$('.moyl-title .btn .hide').click(function(){
			billboard.user.requireLogin( function() { 
			billboard.user.hideForms();
			var soylModalHtml='<div class="soylModalMessage"><div>Your soundtrack has been saved. You can share it with your friends.</div></div>';
			
			billboard.modal.show(soylModalHtml,true);
			$('.moyl-title .btn .hide').hide();
			return;
			});
														
		});
		
		$("a.enter").click( function(){
			console.log("enter clicked");
			$("#date-error").text('');
			$("#date-error").hide();
			var event = $("#event-form :input[name=event-name]").val();
			var m = parseInt($("#event-form :input[name=month]").val(),10);
			var d = parseInt($("#event-form :input[name=day]").val(),10);
			var y = parseInt($("#event-form :input[name=year]").val(),10);
			var id = $("#event-form :input[name=id]").val();
			var dObj = new Date();
			var dObjYr = dObj.getFullYear();
			
			if (isNaN(m) || isNaN(d) || isNaN(y) ) {
				$("#date-error").show();
				$("#date-error").text('Please enter month, date and year.');
				return;				
			}

			if ( m > 12 || m < 1 || d <= 0 || d > 31 || y < 1000) {
				$("#date-error").show();
				$("#date-error").text('Please re-enter a date in the format MM DD YYYY.');
				return;
			}
			if (y >dObjYr) {
				$("#date-error").show();
				$("#date-error").text('Please enter a date before the current year.');
				return;
			}
			if (y < 1958) {
				$("#date-error").show();
				$("#date-error").text('Sorry. Our chart data only goes back to 1958.');
				return;
			}
			if (event.length==0) {
				$("#date-error").show();
				$("#date-error").text('Please enter an event name.');
				return;
			}
			
			var reg = /^[A-Za-z0-9_\-\.\`\!\@\$\%\^\&\*\(\)\-\_\=\[\]\;\:\\'\"\,\<\.\>\/]/;
			if(reg.test(event) == false) {
				$("#date-error").show();
				$("#date-error").text('Please enter an event name.');
				return;
			}
			
			date = y+"-"+m+"-"+d;
			
			// generate the link
			var loc = '/soyl/edit';
			console.log( loc );
			
			var params = {};
			params["e"] = id;
			params["t"] = event;
			params["d"] = date;

			loc = updateQueryParams( loc, params );
			console.log( loc );
		
			loc = loc + "/#intro";

			billboard.social.trackActivity( null,
										"game", 
										" has updated their <a href='/soyl/list/"+billboard.user.username+"'>Soundtrack of Your Life!</a>",
										null );	
			// redirect
			billboard.history.setHash( loc );
			//post to fb
			billboard.facebook.publish("soyl","Updated Event: \""+params["t"]+"\"");
		});

		// attach 'cancel' functionality
		$("a.cancel").click( function(){
			console.log("cancel clicked");
			$("#event-form :input").val('');
			$(window).scrollTop( $("#intro").offset().top );
		});

		// attach 'edit' functionality
		$(".edit").click( function() { 
			console.log("edit clicked");
			var event = $(this).parents(".track-row").find(".user-event").text();
			var id = $(this).parents(".track-row").find(".user-event-id").text();
			var dateStr = $(this).parents(".track-row").find(".user-event-date").text();

			var year = dateStr.split("-")[0];
			var month = dateStr.split("-")[1];
			var day = dateStr.split("-")[2];

			$("#event-form :input[name=event-name]").val( event );
			$("#event-form :input[name=id]").val( id );
			$("#event-form :input[name=month]").val( month );
			$("#event-form :input[name=day]").val( day );
			$("#event-form :input[name=year]").val( year );							
			$(window).scrollTop( $("#event-tab").offset().top );
		});

		$(".trash").click( function() { 
			billboard.social.trackActivity( null,
										"game", 
										" has updated their <a href='/soyl/list/"+billboard.user.username+"'>Soundtrack of Your Life!</a>",
										null );	
			billboard.facebook.publish("soyl", "Deleted event: \""+$(this).parents(".track-row").find(".user-event").text()+"\"" ); 
		});
		
		// chart game functions
		$('.pick-list .add-selection .add-remove').mouseover(function(){	
			pos = $(this).attr('id');
			$('.pick-list #detail-'+pos).css("display", "block"); 
			$(this).addClass('add');
			$(this).parent().css("zIndex","30");
		});
		$('.pick-list .add-selection .add-remove').mouseout(function(){	
			pos = $(this).attr('id');
			$('.pick-list #detail-'+pos).css("display", "none"); 
			$(this).removeClass('add');
			$(this).parent().css("zIndex","20");
		});
		
		$(".team-info #edit").click(function() { 
			$(".team-info div.team-name").toggle();
			$(".team-info a.edit-team").toggle();
		});
		$(".team-info #save").click( function() {
			me.saveTeamName();
		});
		$("#game-search-form").submit( function() { 
			  var keyword = $("#game-search-form :input[name=keyword]").val();
			  hash = "/games/chart-game/search?keyword="+keyword+ "&cachebust=" + (new Date()).getTime() + "#picks-section";
			  billboard.navigateToUrl( hash );
			  $(".ac_results").html("");
			  $(".ac_results").hide();
			  return false;
		 });
		 $("#game-search-form :input[name=keyword]").focus(function(){
				if($(this).val() == 'Search') $(this).val('');
		 });
		$("#game-search-form :input[name=keyword]").keypress(function(e){
			if (e.which == 13){
				$("#game-search-form").submit();
			}
		});
		$("#game-search-form :input[name=keyword]").autocomplete(
			"/search-suggest.json",
			{delay:300,	minChars:3,	matchContains:1,cacheLength:10,json:true,jsonLocation: 'response.body.list',jsonKey: 'name', 
				onItemSelect:function(){$("#game-search-form").submit();}
			});
		$("#invite-selected-top").click( function() {
			me.inviteFriends();
		 });
		
		$("#invite-selected-bottom").click( function() {
			me.inviteFriends();
		 });
		$(".game-start").click(function() {
			if (!billboard.user.isLoggedIn()){
				billboard.user.showForms();
				return false;
			} else {
				billboard.history.setHash('/games/chart-game/start?cachebust=' + (new Date()).getTime());
				billboard.social.trackActivity( null,
														"game", 
								" has selected his team for this week's <a href='/games/chart-game/about'>Chart Game</a>!",
								//" is playing the game Chart Attack <br /> <a href='/games/chart-game/about'>Find out more</a> ",
								null );
				billboard.facebook.publish("start-chartgame");
			}
		});
		
		
        if(readCookie("charts") != null){
            var charts = readCookie("charts").split(",");
            charts = charts.reverse();
            var recentCharts = '<div class="chart-header charts-background">Your Recently Viewed Charts</div>'
            var stop = charts.length > 5 ? 5 : charts.length;
            for (var i = 0; i < stop; i++){
                var chartData = charts[i].split("|");
                recentCharts += '<div class="chart-row"><a href="/charts/' + chartData[1] + '">' + chartData[0] + '</a><img src="/images/icons/arrow-white-right-chart.gif" /></div>'
            }
            $("#your-most-viewed-charts .your-most-viewed-charts").html(recentCharts);
            $("#your-most-viewed-charts").show();
            billboard.hijackLinks("#your-most-viewed-charts");
        }
        
        var images = $("img.chart-game-profile-image");
        for(var i = 0; i < images.length; i++){
        	billboard.social.execute(
				"rest/v1/attribute/user/get",
			    {user: images[i].id},
			    function(image) {
			    	return (function(data){
			    		if (data.error_code == 0) {
			    			if (data.attributes != null && data.attributes.length > 0){
				            	image.src = data.attributes[0].value;
				            }
				        }
			    	});
			    }(images[i])
			);
        }
    };
    
	me.saveTeamName = function( ){
		var teamName = $("#team-name-input [name=name]").val();

		$.ajax({
			   type: "POST",
			   url: "/games/chart-game/rename",
			   data: "name=" + teamName,
			   error: function(request,error) {
			       billboard.error("Error in renaming team");
			   },
			   success: function(msg){
				$(".team-info div.team-name").toggle();
				$(".team-info a.edit-team").toggle();
				$(".team-info #team-name").html(msg.replace(/(.*?)/g, "<wbr />"));
				}
			 });
	};
	
	me.inviteFriends = function() {
		
		var friends = $("#invite-to-chart-game-form :input[name=add]");
		
		$.ajax({
			   type: "POST",
			   url: "/games/chart-game/invite-selected",
			   data: friends.serialize(),
			   error: function(request,error) {
			   alert("Error in inviting friends");
			   },

			   success: function(msg){
				   $("#invite-selected-message").text(msg);
				   $("#invite-selected-message").show();
				}
			 });
	};

	me.paginate = function(index,total){
		$("#winners .pagination-group .on").removeClass("on");
		$("#winners .pagination-group #"+index).addClass("on");
		$("#winners .show-group").removeClass("show-group")
				.addClass("hide-group");
		$("#winners #group-"+index).removeClass("hide-group")
				.addClass("show-group");


	};

	
	
    //On Load
    $( function(){		
        me.init();
	});//End On Load

})(jQuery);

