/* 
Created by: Kenrick Beckett
Modified by: Stagas

Name: Chat Engine
*/

var instanse = false;
var state;
var mes;
var file;

//var iGeneratedTime = new Date((startdate).replace(/-/g,"/").replace(/[TZ]/g," ")).getTime() / 1000;

function Chat() {
	this.begin = beginChat;
    this.update = updateChat;
    this.send = sendChat;
	this.getState = getStateOfChat;
}

function secsLessThan(date_str,secs){

var iNow = (new Date().getTime() / 1000);
var iGeneratedTime = (new Date((date_str).replace(/-/g,"/").replace(/[TZ]/g," ")).getTime() / 1000) + timeGap;
var iDiff = Math.round(iGeneratedTime < iNow ? iNow - iGeneratedTime : -1);

return ((iDiff <= secs) ? true : false);
}

function prettyDate(date_str){

var iNow = (new Date().getTime() / 1000);
var iGeneratedTime = (new Date((date_str).replace(/-/g,"/").replace(/[TZ]/g," ")).getTime() / 1000) + timeGap;
var iDiff = Math.round(iGeneratedTime < iNow ? iNow - iGeneratedTime : -1);

var sText = "";
if (iDiff < 1) {
sText = "μόλις τώρα"
} else {
var iSeconds = iDiff % 60;

iDiff = (iDiff - iSeconds) / 60;
var iMinutes = iDiff % 60;

iDiff = (iDiff - iMinutes) / 60;
var iHours = iDiff % 24;

iDiff = (iDiff - iHours) / 24;
var iDays = iDiff;

var iWeeks = Math.floor(iDays / 7);
var iMonths = Math.floor(iDays / 30); // approximately

sText = "";
sText += (iMonths > 0 ? "πριν " + (iMonths == 1 ? "ένα μήνα" : iMonths + " μήνες") + " ": "");
if (iMonths == 0) {
sText += (iWeeks > 0 ? "πριν " + (iWeeks == 1 ? "μία εβδομάδα" : iWeeks + " εβδομάδες") + " ": "");
if (iWeeks == 0) {
daysAdd = '';
if (iDays > 0) {
	if (iDays == 1) { daysAdd += "χθές"; } else if (iDays == 2) { daysAdd+="προχθές"; } else { daysAdd+="πριν " + iDays + " μέρες"; }
	daysAdd+=" ";
}
sText += daysAdd;
if (iDays == 0) {
sText += (iHours > 0 ? "πριν " + (iHours == 1 ? "μια ώρα" : iHours + " ώρες") + " ": "");
if (iHours == 0) {
sText += (iMinutes > 0 ? "πριν " + (iMinutes == 1 ? "ένα λεπτό" : iMinutes + " λεπτά") + " ": "");
if (iMinutes == 0) {
sText += (iSeconds > 0 ? "πριν " + iSeconds + " δευτερόλεπτ" + (iSeconds == 1 ? "ο" : "α") + " ": "");
}
}
}
}
}
//((iWeeks==1 && iMonths==0 || iDays==1 && iWeeks==0) ? null : sText += " ago");
}
return sText;
};


jQuery.fn.prettyDate = function(){
	return this.each(function(){
		var date = prettyDate(jQuery(this).attr('rel'));
		if ( date )
			jQuery(this).text( date );
	});
};


//gets the state of the chat
function getStateOfChat(){
	if(!instanse){
		 instanse = true;
		 $.ajax({
			   type: "POST",
			   url: "/process.php",
			   data: {  
			   			'function': 'getState',
						'file': file
						},
			   dataType: "json",
			
			   success: function(data){
				   state = data.state;
				   instanse = false;
			   }
			});
	}	 
}

function checkUsers(){

	var $chatnicks=$('#chat-area .chatnick');
	var nicksend=$chatnicks.length;
	if (nicksend>15) {
		var nickstart=nicksend-15;
	} else {
		var nickstart=1
	}
	$chatnicks.slice(nickstart,nicksend).each(function() {
		var nick=$(this).text();
		var when=$(this).attr('rel');
		
		if (secsLessThan(when,600)) {
			var backcolor=$(this).css('background-color');
		
			found=$('#allusers').html().indexOf(nick);

			if (found==-1) {
				nick = '<span class="chatnick" style="background-color:' + backcolor + '">' + nick + '</span';
				$('#allusers').append(' ' + nick);
			}
		}
	});
}

//Updates the chat
function updateChat(){
	 if(!instanse){
		 instanse = true;
	     $.ajax({
			   type: "POST",
			   url: "/process.php",
			   data: {  
			   			'function': 'update',
						'state': state,
						'file': file
						},
			   dataType: "json",
			   
			   success: function(data){
				   if(data.text){
						e = document.getElementById('chat-area');
						//set your "pin" variable to false by default
						var blnPinScrollbar = false;
						//if the scrollbar is at the very 
						//bottom before updating the div, 
						//then set the pin variable to true
						if(e.scrollTop > (e.scrollHeight - 450)){
							blnPinScrollbar = true;
						}

						for (var i = 0; i < data.text.length; i++) {
                            $('#chat-area').append($("<p>"+ data.text[i] +"</p>"));
							$(".chatdate").prettyDate();							
                        }								  
				   }

					if(blnPinScrollbar){
						e.scrollTop = e.scrollHeight;
					}

				   checkUsers();
				//document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight;
				
				   instanse = false;
				   state = data.state;
			   }
			});
	 }
	 else {
		 setTimeout(updateChat, 1500);
	 }
}

function beginChat(){
	 if(!instanse){
		 instanse = true;
	     $.ajax({
			   type: "POST",
			   url: "/process.php",
			   data: {  
			   			'function': 'update',
						'state': state-80,
						'file': file
						},
			   dataType: "json",
			   
			   success: function(data){
				   if(data.text){
						for (var i = 0; i < data.text.length; i++) {
                            $('#chat-area').append($("<p>"+ data.text[i] +"</p>"));
							$(".chatdate").prettyDate();							
                        }								  
				   }
				   instanse = false;
				   state = data.state;
				   $(".chatdate").prettyDate();
				   checkUsers();
				   setInterval(function() {
						$(".chatdate").prettyDate()
					},60000);
				   document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight;
			   }
			});
	 }
	 else {
		 setTimeout(beginChat, 500);
	 }
}

//send the message
function sendChat(message, nickname)
{       
    updateChat();
     $.ajax({
		   type: "POST",
		   url: "/process.php",
		   data: {  
		   			'function': 'send',
					'message': message,
					'nickname': nickname,
					'file': file
				 },
		   dataType: "json",
		   
		   success: function(data){
			   updateChat();
		   }
		});
}

