/* Settings */
var chatReversed = false;
var maxChatMessages = false;

var liveFeedReversed = true;
var maxFeedMessages = 5;
var globalFeedScope = false;
var backendUrl = '/ajax/chat';
var userUrl = '/user/show/URI/URIplaceholder';

var chatMessageTemplate = '<p><span class="timestamp">%timestamp%</span> <span class="name">%name%</span>: <span class="message">%message%</span></p>';

/* Internal */

var lastChatMessageId = '';
var lastFeedItemId = '';

var chatMessageIds = new Array();
var feedItemIds = new Array();

var chatMessagesCount = 0;
var feedItemsCount = 0;

var inactiveUpdateTime = 5000;
var activeUpdateTime = 2000;
var inactiveSeconds = 30;
var lastActive = 0;
var fetchDelay = 2000;

function chatSetting(data, chatReversedP, maxChatMessagesP, backendUrlP, chatMessageTemplateP, userUrlP) {
    if (backendUrlP !== undefined) {
        backendUrl = backendUrlP;
    }
    if (userUrlP !== undefined) {
        userUrl = userUrlP;
    }
    if (chatMessageTemplateP !== undefined) {
        chatMessageTemplate = chatMessageTemplateP;
    }
	maxChatMessages = maxChatMessagesP;
	chatReversed = chatReversedP;
	if (data !== null) liveDataParse(data, true);
}

function feedSettings(data, liveFeedReversedP, maxFeedMessagesP, globalScopeP) {
	maxFeedMessages = maxFeedMessagesP;
	liveFeedReversed = liveFeedReversedP;
	globalFeedScope = globalScopeP;
	if (data !== null) liveDataParse(data, true);
}

function ajaxUpdaterInit() {
	setTimeout('getLiveData()', liveDataNextUpdateIn());
	lastActive = Number(new Date());
}

function liveDataNextUpdateIn() {
    return fetchDelay;
	if (lastActive < Number(new Date())-(inactiveSeconds*1000)) {
		return inactiveUpdateTime;
	} else {
		return activeUpdateTime;
	}
}

function getLiveData() {
	$.ajax({
		cache: false,
		url: backendUrl,
		data: 'return=updates&lastChatMessageId='+lastChatMessageId+'&lastFeedItemId='+lastFeedItemId+'&globalFeedScope='+globalFeedScope,
		dataType: 'json',
		success: function(root) { liveDataParse(root); },
		complete: function(e) { setTimeout('getLiveData()',liveDataNextUpdateIn()) }
	});
}

function liveDataParse(root, preload) {
    var dataFetched = false;
	if (preload == null){
		preload = false;
	}
	if ($('.chatWindow').length > 0 && root.chat.data != null) {
		$.each(root.chat.data.reverse(), function(i,item){
			if (chatMessageIds.indexOf(item.id) === -1) {
				chatMessageIds.push(item.id);
				timestamp = new Date(item.timestamp*1000);
				hours = timestamp.getHours().toString().length === 1 ? '0'+timestamp.getHours() : timestamp.getHours();
				minutes = timestamp.getMinutes().toString().length === 1 ? '0'+timestamp.getMinutes() : timestamp.getMinutes();
				timestamp = hours+':'+minutes;
                
                newLine = chatMessageTemplate
                    .replace('%timestamp%',timestamp);
                if (item.URI === '') {
                    newLine = newLine.replace('%name%',item.name);
                } else {
                    newLine = newLine.replace('%name%','<a href="'+item.URI+'">'+item.name+'</a>');
                }
                newLine = newLine
                    .replace('%URI%',item.URI)
                    .replace('%message%',item.message);
                    
				if (chatReversed) {
					$('.chatWindow').prepend(newLine);
					if (maxChatMessages !== false && maxChatMessages <= chatMessagesCount) {
						$('.chatWindow > p:last').remove();
					}
				} else {
					$('.chatWindow').append(newLine);
					if (maxChatMessages !== false && maxChatMessages <= chatMessagesCount) {
						$('.chatWindow > p:first').remove();
					}
					$(".chatWindow").animate({ scrollTop: $(".chatWindow").attr("scrollHeight") }, 1000);
				}
				chatMessagesCount = chatMessagesCount+1;
                dataFetched = true;
			}
		});
		lastChatMessageId = root.chat.timestamp;
	}
	
	if ($('.actions-feed').length > 0 && root.liveFeed != 'null' && root.liveFeed.data != 'null') {
		$.each(root.liveFeed.data.reverse(), function(i,item){
			if (feedItemIds.indexOf(item.id) === -1) {
				feedItemIds.push(item.id);
				if (preload) {
					newLine = '<div>';
				} else {
					newLine = '<div class="new-content">';
				}
				newLine = newLine+'<img class="icon" src="http://cm.youthportals.dk/images/icons/'+item.icon+'" alt="" /><p>'+item.text+'</p><p class="timestamp">'+item.timestamp+'</p></div>';
				if (liveFeedReversed) {
					$('.actions-feed').prepend(newLine);
					if (maxFeedMessages !== false && maxFeedMessages <= feedItemsCount) {
						$('.actions-feed > div:last').addClass('old-content');
					}
				} else {
					$('.actions-feed').append(newLine);
					if (maxFeedMessages !== false && maxFeedMessages <= feedItemsCount) {
						$('.actions-feed > div:first').addClass('old-content');
					}
					$(".actions-feed").animate({ scrollTop: $(".actions-feed").attr("scrollHeight") }, 1000);
				}
				feedItemsCount = feedItemsCount+1;
                dataFetched = true;
			}
		});
		lastFeedItemId = root.liveFeed.timestamp;
	}
    if (dataFetched) {
        fetchDelay = 2000;
    } else if (fetchDelay < 30000) {
        fetchDelay = Math.round(fetchDelay*1.5);
    }
    
	$('.old-content').fadeOut(2000,function () {
		$('.new-content').fadeIn(2000);
	});
}

function ajaxChatSend(messageField, sendButton) {
	if (messageField.val() == '') return;
	messageField.attr('disabled',true);
	sendButton.attr('disabled',true);
	$.ajax({
		cache: false,
		'url': backendUrl,
		'data': 'cmd=chatMessage&return=updates&message='+encodeURIComponent(messageField.val())+'&lastChatMessageId='+lastChatMessageId+'&lastFeedItemId='+lastFeedItemId, 
		dataType: "json",
		success: function(root){
			liveDataParse(root);
			messageField.val('').attr('disabled',false);
			sendButton.attr('disabled',false);
		}
	});
	messageField.val('Sender...');
	lastActive = Number(new Date());
}

function chatSend() {
	if ($('#chatMessage').val() == '') return;
	$('#chatMessage').attr('disabled','disabled');
	$('#chatSend').attr('disabled','disabled');
	$.ajax({
		cache: false,
		'url': backendUrl,
		'data': 'cmd=chatMessage&return=updates&message='+encodeURIComponent($('#chatMessage').val())+'&lastChatMessageId='+lastChatMessageId+'&lastFeedItemId='+lastFeedItemId, 
		dataType: "json",
		success: function(root){
			liveDataParse(root);
			$('#chatMessage').val('').attr('disabled','');
			$('#chatSend').attr('disabled','');
		}
	});
	$('#chatMessage').val('Sender...');
	lastActive = Number(new Date());
}

if(!Array.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){
            if(this[i]==obj){
                return i;
            }
        }
        return -1;
    }
}

function var_dump(obj) {
   if(typeof obj == "object") {
      return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
   } else {
      return "Type: "+typeof(obj)+"\nValue: "+obj;
   }
}
