function setFlag( src, val ) {
	$.get('/chat/setFlag/', {'flag':val},
		function(data) {
		  if( data == true ) {
			$('#userLocalFlag').attr('src', src );
			$('#flags_box').css('display', 'none' );
			$('#flags_box').stopTime();
		  }
		}
	);
}

function tagSmiley( code ) {
	text = $('#message').val();
	if(text=='message') {
		text='';
	}
	$('#message').val(text+code);
}

// Clear default value of the name field
// + change the name field text color
function set_focus_n(t) {
  if (t.defaultValue == t.value)
  t.value = '';
}


// Clear default value of the message field
// + change the message field text color
function set_focus_m(t) {

  if (t.defaultValue == t.value)
  t.value = '';

}


// Submit on Enter key press
// The function taken from http://www.ryancooper.com/resources/keycode.asp
function checkKeycode(e) {

  var keycode;

  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;

  if(keycode == 13)
  {
  sendMessage();
  return false;
  }
  else return true;

}


// Replace bad words with symbols
function filterBW(message) {

  for (var i=0; i < badwords.length; i++) {
  var pattern=new RegExp("\\b("+badwords.join("|")+"){1,}\\b",'gi');
  var replacement = "*!*?*";
  text = message.replace(pattern,replacement);
  }

  return text;

}


// Validate user input and alert if something goes wrong
function checkInput(name, message) {
	var input_e = "";

	input_e += checkName(name);
	input_e += checkChars(name);
	input_e += checkSpam(name);
	if(input_e=='') {
		input_e += checkUniqueName(name);
	}
	input_e += checkMessage(message);
	input_e += checkChars(message);
	input_e += checkSpam(message);

	if (input_e != "") {
		$('#chatErrors div').html(input_e);
		$('#chatErrors').css('display','block');
		$('#chatErrors').oneTime(15000,
			function() {
				$('#chatErrors').css('display','none');
			}
		);
		return false;
	}

	return true;
}


function checkUniqueName(name) {
	var stamp = Math.floor( Math.random( ) * ( 10000000 + 1 ) );
	var error = '';

	jQuery.ajax({
		url: '/chat/checkName/?name=' + name + '&stamp=' + stamp,
		success: function(result) {
			if(result==2) {
				error = "At this point in the chat has already used this name. Please try using a different name!<br />";
			}
		},
		async: false
	});
	return error;
}

// Check for restricted tags and attributes
function checkChars(msg) {

  var error = "";

  for (var i=0; i < characters.length; i++) {

  if (msg.indexOf(characters[i])!= -1)
  {
  error = "Some tags are not allowed. Please use 'http://' if you want to send a url.<br />";
  }

  }

  return error;

}


// Check a message against the banned words list
function checkSpam(msg) {

  var error = "";

  for (var i=0; i < spamwords.length; i++) {

  var pattern = new RegExp("\\b("+spamwords.join("|")+"){1,}\\b",'gi');

  if (pattern.test(msg))
  {
  error = "Your message contains a banned word.<br />";
  }
  }

  return error;

}


// Validate a name
function checkName(name) {
	var error="";

	if (name == "" || name == "name" ) {
		error = "You didn't enter a name.<br />";
	} else if( name.match(/^\w+$/) == null ) {
		error = "The name may include Latin letters, figures and underline symbol only.<br />";
	}

	for (var i=0; i < badwords.length; i++) {
		var pattern = new RegExp("\\b("+badwords.join("|")+"){1,}\\b",'gi');
		if ((name.length > 26)||(pattern.test(name))) {
			error = "The name is longer than 26 or contains characters that are not allowed. Please choose another one.<br />";
		}
	}
	return error;
}

// Validate a message
function checkMessage(message) {
	var error="";

	if (message=="" || message=="message") {
		error = "You didn't enter a message.<br />";
	}

	if (message.length > 400) {
		error = "The message is longer than 400 characters.<br />";
	}

	return error;
}


// Get messages from database each 5 seconds
function getChatData() {
  var stamp = Math.floor( Math.random( ) * ( 10000000 + 1 ) );
  $.getJSON( '/chat/', {'stamp': stamp},
    function(data) {
      if( data ) {
		displayChatData(data);
      }
    }
  );
  setTimeout('getChatData()',10000);
}

// Display messages
function displayChatData(data) {
	var post=document.getElementById('content');
	if(!post || !data.items) {
		return;
	}

	var newText = document.createElement('div');

	for (i = 0; i < data.items.length; i++) {

		var date = data.items[i].date;
		var name = data.items[i].name;
		var message = data.items[i].message;
		var user = document.createElement('div');
		user.className = 'user';

		var sname = document.createElement('span');
		sname.className = 'name';
		sname.appendChild(document.createTextNode(name));

		var sflag = document.createElement('span');
		sflag.className = 'flag';
		sflag.innerHTML = data.items[i].flag;

		var stext = document.createElement('span');
		stext.className='text';
		stext.innerHTML += filterBW(message);

		var sdate = document.createElement('span');
		sdate.className='date';
		sdate.appendChild(document.createTextNode(date));

		user.appendChild(sdate);
		user.appendChild(sflag);
		user.appendChild(sname);
		user.appendChild(stext);

		post.appendChild(user);
		newText.appendChild(user);

		scroller.init();
	}
	if( post.innerHTML != newText.innerHTML ) {
		post.innerHTML = newText.innerHTML;
	}
}


// Send a message
function sendMessage() {
  var token = $('#token').val();
  var name = $('#name').val();
  var message = $('#message').val();


  if (!checkInput(name, message)) {
  	return;
  }

  $.post('/chat/save/', {'token': token, 'name': name, 'message': message},
    function(data) {
      if( data ) {
		displayChatData(data);
      }
    }
  )

  var post = document.getElementById('content');
  var scrollbar = document.getElementById('scroller');
  post.style.position = 'absolute';
  post.style.top = '0px';
  post.style.bottom = '0px';
  post.style.position = 'relative';
  scrollbar.style.top="0px";
  document.getElementById('message').value = '';
  document.getElementById('message').focus();
}


// Initialize chat
function startChat() {
	var cform = document.getElementById('cform');
	var name = document.getElementById('name');
	var msg = document.getElementById('message');
	var submit = document.getElementById('submit');
	var smiley_box = document.getElementById('smiley_box');

	if (sm_options == 'no') {
		smiley_box.style.display = "none";
	}

	cform.onkeydown = checkKeycode;
	name.onfocus = function () {set_focus_n(this);}
	msg.onfocus = function () {set_focus_m(this);}
	submit.onclick = sendMessage;

	msg.value = 'message';

	getChatData();
}

window.onload = startChat;

function viewBlock(id) {
	$('#'+id).css( 'display', 'block' );
  	$('#'+id).stopTime();
}

function hiddenBlock(id) {
  $('#'+id).stopTime();
  $('#'+id).oneTime(1000,
    function() {
      $(this).css('display', 'none');
    }
  );
}