var currentlyUpdating = false;
var photoUpdateTimer = 90;
var isLive = false;
var cheevoQueue = new Array();

$(document).ready(function() {

	format = checkAudio();

	mention = document.createElement('audio');

	mention.setAttribute('src', '/sounds/mention.'+format);
	mention.load();
	mention.addEventListener("load", function() {
	  $(".duration span").html(mention.duration);
	  $(".filename span").html(mention.src);
	}, true);
	
	if($('#chat').length > 0)
	{
		checkAudio();
		updateOnlineStatus();
		updateLive();
		setTimeout('updateUserList()',200);
		
		$('#chat-text').addClass('loading');
		updateChat();
		
		setTimeout('updateStill()',700);
		setTimeout('updateLive()',500);
	
		$('#chat-controls a').click(function(event){
			event.preventDefault();
			var toLoad = $(this).attr('href');
			$('.chat-module:visible').fadeOut(250,function(){
				$(toLoad).fadeIn(250);
			});
		});
	
		$('#chat-form').validate({
			submitHandler: function(form) {
				$(form).ajaxSubmit();
				$('#message').val('');
				updateChat();
			}
		});
	
	    if($('#slider').length > 0)
	    {
	    	setInterval("updateStill()",90000);
	    }
	    
	    if(thisUser != null)
		{
			setInterval('updateOnlineStatus()',300000);
			
		    setInterval("updateUserList()",10000);
		    
		    setTimeout("showCheevos()",10000);
		    
		    checkCheevos();
		    
		    $('.status-meta .reply').live('click',function(event){
		    	var user = $(this).parent().parent().children('.username').text();
		    	var currentMessage = $('#message').val();
		    	if(currentMessage.indexOf('@'+user) == -1)
		    	{
		    		$('#message').val('@'+user+' '+currentMessage);
		    		$('#message').focus();
		    	}
		    });
		    
		}
	    else
	    {
		    setInterval("updateUserList()",30000);
	    }
	    
	    setInterval("photoTimer()",1000);
	    
		setInterval("updateRecentTracks()",30000);
	    
	    $('.chat-module-trigger').click(function(event){
	    	target = $(this).attr('href');
	    	
	    	if($(target+':visible').length == 0)
	    	{
	    		$('.chat-module').fadeOut(250, function(){
	    			$(target).fadeIn(250, function(){
	    				if($('#chat-text ul li').length > 0)
	    				{
	    					$('#chat-text ul').scrollTo('li:last-child');
	    				}
	    			});
	    			
	    		});
	    	}
	    	
	    });
	}    
});

function photoTimer()
{
	if(isLive == true)
	{
		photoUpdateTimer--;
		$('#is-live').html('Detail update in <span id="stillUpdateTime">'+photoUpdateTimer+'</span>s.');
	}
	else
	{
		$('#is-live').text('Sweatshop Is Offline.');
	}
}

function updateStill()
{

	if(isLive == true || $('#slider ul').length == 0)
	{
		$('#slider').load('/still/update');
		
		photoUpdateTimer = 90;
	}
	else
	{
		$('#is-live').text('Sweatshop Is Offline.');
	}
	
}

function checkCheevos()
{
	$.ajax({
		type: 'GET',
		url: '/user/check_cheevos',
		dataType: "json",
		timeout: 15000,
		async: true,
		success: function(data) {
			if(data.achievements.length > 0)
			{
				for(var achievement in data.achievements)
				{
					cheevoQueue.push(data.achievements[achievement]);
				}
				
			}
			setTimeout("checkCheevos()",10000);
		},
		error: function(data) {
			setTimeout("checkCheevos()",10000);
		}
	});
	
}

function showCheevos()
{
	if(cheevoQueue[0] != undefined)
	{
		item = cheevoQueue.shift();
		$('#cheevos ul li .desc').html(item.desc);
		$('#cheevos ul li .name').html(item.name);
		$('#cheevos').animate({ width: 'show' });
		
		setTimeout("$('#cheevos').animate({ width: 'hide' })", 5000);
		
	}
	
	setTimeout('showCheevos()', 6500);
}

function updateOnlineStatus()
{
	$.ajax({
			type: 'POST',
			url: '/user/update_online_status'
		});
}

function updateChat()
{
	
	if(currentlyUpdating != true)
	{
		var currentTime = Math.round((new Date()).getTime() / 1000);

	
		currentlyUpdating = true;
		last_id = $('#chat-text ul li:last-child').attr('id');
		
		theTime = new Date().getTime();
		
		$.ajax({
			type: 'GET',
			url: '/chat/get_messages/'+last_id,
			success: function(data){
				if(data.messages.length > 0)
				{
					for(var message in data.messages)
					{
						var extraClass = '';
						var text = data.messages[message].text;
						var age = '';
					
						switch(data.messages[message].type)
						{
							case 'normal':
							
								if(thisUser != null && thisUser != '')
								{
									extraClass = '';
									if(text.indexOf('@'+thisUser) != -1)
									{
										extraClass = extraClass + 'mention';
										if(data.messages[message].is_new == true)
										{
											extraClass = extraClass + ' new';
										}
									}

								}
								
								if(currentTime - data.messages[message].created_at > 300)
								{
									age = 'old';
								}
								if(currentTime - data.messages[message].created_at > 600)
								{
									age = 'older';
								}
								if(currentTime - data.messages[message].created_at > 900)
								{
									age = 'oldest';
								}
								
								extraClass = extraClass + ' ' + age;
								
								var item = '<li id="'+data.messages[message].id+'" class="'+extraClass+' hide"><p><a href="/user/'+data.messages[message].user+'" class="username">'+data.messages[message].user_id+'</a>: '+text+' <span class="status-meta"><a href="#" class="reply">reply</a> <a href="http://twitter.com/share?url=http://sweatshop.tv&via=sweatshop_tv&text='+encodeURI(text)+'">tweet</a></span></p></li>';
							break;
							
							case 'action':
								var item = '<li id="'+data.messages[message].id+'" class="'+data.messages[message].type+' hide"><p><span class="username '+data.messages[message].user+'">'+data.messages[message].user+'</span> '+text+' <time class="chat-time" datetime="'+data.messages[message].created_at+'"></time></p></li>';
							break;
							
							case 'auction':
								var item = '<li id="'+data.messages[message].id+'" class="'+data.messages[message].type+' hide"><p><span class="username '+data.messages[message].user+'">'+data.messages[message].user+'</span>: '+text+'</p></li>';
							break;
							
						}
						
						
						$('#chat-text ul').append(item);
						
						if(data.messages[message].icon != false)
						{
							$('#'+data.messages[message].id+' .username').addClass('icon');
							$('#'+data.messages[message].id+' .username').css('background-image','url("'+data.messages[message].icon+'")');
						}
						
					}
					
				}
				
				$('#chat-text ul li.hide').fadeIn(250);
				$('#chat-text ul li').removeClass('hide');
				
				currentlyUpdating = false;
				
				if($('#chat-text').hasClass('loading'))
				{
					$('#chat-text').removeClass('loading');
				}
				
				if($('#chat-text ul li').length > 100)
				{
					var i = 0;
					while($('#chat-text ul li').length > 100)
					{
						$('#chat-text ul li:first').remove();
					}
				}
				
				if(isScrolledIntoView('#chat-text ul li:last-child') || !last_id)
				{
					$("#chat-text ul").attr({ scrollTop: $("#chat-text ul").attr("scrollHeight") });
				}
				
				$("#chat-text ul li.mention.new").animate({backgroundColor: '#ff9'},500,function(){$(this).removeClass('new'); });
				
				if($("#chat-text ul li.mention.new").length > 0)
				{
					mention.play();
				}
				
				var chatTimeout = setTimeout('updateChat()',1000);
			},
			error: function(data){
				currentlyUpdating = false;
				var chatTimeout = setTimeout('updateChat()',1000);
			},
			dataType: "json",
			async: true
		});

	}
	
}

function isScrolledIntoView(elem) {
    var docViewTop = $(window).scrollTop(),
        docViewBottom = docViewTop + $(window).height(),
        elemTop = $(elem).offset().top,
     elemBottom = elemTop + $(elem).height();
   //Is more than half of the element visible
   return ((elemTop + ((elemBottom - elemTop)/2)) >= docViewTop && ((elemTop + ((elemBottom - elemTop)/2)) <= docViewBottom));
}

function updateUserList()
{
	
	$.ajax({
		type: 'POST',
		url: '/chat/user_list/'+theTime,
		success: function(data){
			if(data != '')
			{
				$('#chat-users ul').html(data);
				$('#chat-user-count').text($('#chat-users ul li').length);
			}	
			
		},
		error: function(data){
			
		}
	});
}

function updateRecentTracks()
{
	theTime = new Date().getTime();
	$.ajax({
		type: 'POST',
		url: '/music/feed/'+theTime,
		success: function(data){
			if(data != '')
			{
				if($(data).children().attr('id') != $('#music ul li:first-child').attr('id'))
				{
					$('#music').fadeOut(250,function(){
						$('#music').html(data);
						$('#music').fadeIn();
					});
				}
			}	
			
		},
		error: function(data){
			
		}
	});
}

function updateLive()
{
	$.ajax({
		type: 'POST',
		url: '/welcome/is_live',
		success: function(data){
			if(data != '')
			{
				if(data == 1)
				{
					isLive = true;
				}
				else
				{
					isLive = false;
				}
			}	
			
		},
		error: function(data){
			
		}
	});
}

function checkAudio()
{
	var a = document.createElement('audio');
	var b = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
	var c = !!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, ''));
	if(b === true)
	{
		return 'mp3';
	}
	else
	{
		return 'ogg';
	}
}
