var now = new Date();
var rLog = /^[A-ZА-ЯЁ]{1,15}[-_]{0,1}[0-9A-ZА-ЯЁ]{1,14}[-_]{0,1}[0-9A-ZА-ЯЁ]{1,13}$/i;
var rPass = /^[-0-9A-Za-zА-Яа-я_]{3,15}$/;
var users = new Array();

var eFormFlag = false;

function setCookie(name, value, expires) {
	if (!name || !value) return false;
	var str = name + '=' + encodeURIComponent(value);
	
	if (expires) str += '; expires=' + expires.toGMTString();
	
	document.cookie = str;
	return true;
}

function getCookie(name) {
	var pattern = "(?:; )?" + name + "=([^;]*);?";
	var regexp  = new RegExp(pattern);
	
	if (regexp.test(document.cookie)) return decodeURIComponent(RegExp["$1"]);
	
	return false;
}

function deleteCookie(name) {
	setCookie(name, null, new Date(0));
	return true;
}

var rLogin = getCookie('rLogin');
var rPassw = getCookie('rPassw');

function ebHover(flag) {
 flag = flag || "true";
 if(flag != "true") $("a[href='#enter'] img").attr("src", "images/iEnter.gif");
 else $("a[href='#enter'] img").attr("src", "images/iEnter_hover.gif");
}
function rbHover(flag) {
 flag = flag || "true";
 if(flag != "true") $("a[href='#registr'] img").attr("src", "images/iRegistr.gif");
 else $("a[href='#registr'] img").attr("src", "images/iRegistr_hover.gif");
}

function cPanelHide(func){
 func = func || function(){};
 $("#cPc").stop();
 $("#cPc").slideUp("normal", function(){ $("#cPc").empty(); func(); } );
}

var chat = {
 loading: function(flag){
  flag = flag || "true";
  if(flag != "true") $("#loader").hide();
  else $("#loader").show();
 },

// Отправка-загрузка данных //
 load: function(url, func, data) {
  data = data || "";
  func = func || new Function();
  $.ajax({
	url: 'chat/'+ url +'.php',
	cache: 'false',
	dataType: 'xml',
	type: 'post',
	data: data,
	beforeSend: function(){
	 chat.loading("true");
	},
	success: function(xml){
//	 alert($(xml).text());
	 func($(xml));
	 chat.parse($("cmd", xml));
	},
	error: function(XMLHttpRequest, textStatus){
	 func(false);
	 chat.showError(lang.err00 + ": " + textStatus);
	},
	complete: function(){
	 chat.loading("false");
	}
  });
 },
 parse: function(xml){
  $(xml).map(function(){
   var command = $(this).attr("name");
   var param;
   if(chat[command] != undefined){
	if($(this).children().length > 0){
	 param = new Object();
	 for(var i=0; i < $(this).children().length; i++) if ($(this).children().get(i).tagName.toLowerCase() != undefined) param[$(this).children().get(i).tagName.toLowerCase()] = $($(this).children().get(i)).text();
	} else param = $(this).text();
	if(param != "") chat[command](param);
	else chat[command]();
   }
  });
 },
 
 open: function(url){
  cPanelHide(function(){
	$("#cPc").load("/chat/"+url);
	$("#cPc").slideDown();
  });
 },
 
 cPanel: function(x, h){
  h = h || false;
  cPanelHide(function(){
	if(h != false && h < 260) $("#cPc").html("<style>div#cPc {height: " + h + "px;}</style>" + x);
	else $("#cPc").html(x);
	$("#cPc").slideDown();
  });
 },

 showError: function(text){
  if(lang[text] != undefined) $("#error span").html(lang[text]);
  else $("#error span").html(text);
  setTimeout(function(){ $("#error span").empty(); }, 5000);
 },

 banStatus: function(t){
  if(t < 0) chat.showError(lang.infBlock1);
  else {
	 var expire = new Date(t*1000);
	 var mins = expire.getMinutes();
	 if (mins < 10) mins = ":0" + mins;
	 else mins = ":" + mins;
	 var dt = expire.getDate() + " " + lang.infMonths[expire.getMonth()] + " " + expire.getFullYear() + " " + expire.getHours() + mins;
	 chat.showError(lang.infBlock2 + " " + dt);
  }
 },

 showEForm: function(flag){
  flag = flag || "true";
  if(flag != "true") {
	eFormFlag = false;
	$("#eForm").slideUp("normal", function(){ ebHover("false"); });
  } else {
	eFormFlag = true;
	$("#eForm").slideDown("normal", function(){ ebHover(); });
	chat.select();
  }
 },

 select: function(){
  if(rLog.test($("#login").val())) $("#passwd").select();
  else $("#login").select();
 },

 remember: function(flag){
  flag = flag || "true";
  if(flag != "true") {
	$("a[href='#remember'] img").attr("src", "images/rememberOff.gif");
	$("#remember").val("false");
  } else {
	$("a[href='#remember'] img").attr("src", "images/rememberOn.gif");
	$("#remember").val("true");
  }
 },
 
 // AJAX-Загрузка списка посетителей онлайн
 loadUsers: function(){
  $.ajax({
	url: 'chat/online.php?self=true',
	cache: 'false',
	dataType: 'xml',
	beforeSend: function(){
	 $("#online span").text("...");
	},
	success: function(xml){
	 $("#uList").empty();
 	 //Поиск сообщений об ошибках
	 var errList = new Array();
	 errList = $("error", xml).map(function(){
	  if(isNaN($(this).attr("num")) == false && lang["err" + $(this).attr("num")] != undefined) {
		return lang["err" + $(this).attr("num")];
	  } else return $(this).text();
	 });
	 //если ошибки не найдены - обрабатываем результат
	 if(errList.length == 0) {
	  users = new Array();
	  users = $("user", xml).map(function(){
		return {
			id: $(this).attr("id"),
			login: $("login", this).text(),
			sex: $("sex", this).text(),
			status: $("status", this).text(),
			group: $("group", this).text()
		};
	  });
	  for(i=0; i < users.length; i++){
		chat.addUser(users[i]);
	  }
	  if(users.length > 0) $("#online span").html(lang.lblOnline[1].replace(/\[num\]/g,"<b> " + users.length + "</b>"));
	  else $("#online span").html(lang.lblOnline[0]);
	 }
	}
  });
 },
//Добавление нового посетителя в список онлайна
 addUser: function(usr){
  var av;
  if(usr.group == 1) {
	av="admin.gif";
  } else if(usr.group == 2) {
	av="moder.gif";
  } else av="user.gif";
  // var udom = "<div id='u"+usr.id+"'><table width='100%' cellpadding='2' cellspacing='0'><tr><td width='34' align='center'><a href='userinfo.php?uid="+usr.id+"' target=_blank><img src='users/s_avatars/"+av+"'></a></td><td align='left' valign='middle'><a href='#u"+usr.id+"' class='usr'>"+usr.login+"</a></td><td width='15'><a href='#i"+usr.id+"' class='usr'>X</a></td></tr></table></div>";
  // $("#uList").append(udom);
 },

 /*   AJAX - АВТОРИЗАЦИЯ   */
 enter: function(){
  if (rLog.test($("#login").val().replace(/\s/g, "_")) == false){
	chat.showError(lang.err3);
	$("#login").focus();
	return false;	
  } else if (rPass.test($("#passwd").val()) == false){
	chat.showError(lang.err4);
	$("#passwd").focus();
	return false;
  } else {
	var data = $("#logForm").serialize();
	chat.load("login", false, data);
  }
 },

 rEnter: function(login){
	$("#login").val(login);
	$("#passwd").val("");
	chat.cPanel("Поздравляем, "+login+", Вы успешно зарегистрировались. Пожалуйста, проверьте свою электронную почту", 50);
	$("a[href='#enter']").click();
 },

 go: function(){
  if($("#remember").val() == "true") { //Запоминаем на 3 суток, если вход успешен и стоит флажок
	var expdate = new Date();
    var mte = expdate.getTime() + (3*24*60*60*1000);
    expdate.setTime(mte);
	setCookie("rLogin", $("#login").val(), expdate);
	setCookie("rPassw", $("#passwd").val(), expdate);
  } else {
	deleteCookie("rLogin");
	deleteCookie("rPassw");
  }

  window.location.href = "chat.php";
 }

}

$(document).ready(function(){
 chat.loading("false");
 ebHover("false");
 rbHover("false");

 chat.loadUsers();

 if(rLogin && rPassw){
  $("#login").val(rLogin);
  $("#passwd").val(rPassw);
  chat.remember("true");
 } else chat.remember("false");

 // Надписи
 $("a[href='#enter'] img").attr("alt", lang.btnEnter);
 $("a[href='#registr'] img").attr("alt", lang.btnRegistr);
 $("a[href='#rePass']").text(lang.btnLostPassword);
 $("a[href='#remember'] span").text(lang.btnRemember);
 $("#copy span:first").text("© " + lang.chatCopyrights +", 2008 - " + now.getFullYear());

 // Кнопки
 $("a[href='#enter']").click(function(){
  if(rLog.test($("#login").val().replace(" ", "_")) == true && rPass.test($("#passwd").val()) == true && $("#error").text()==""){
	$("#logForm").submit();
  } else if(eFormFlag == false) chat.showEForm();
  else chat.showEForm("false");
  return false;
 });

 $("#logForm").submit(function(){
  chat.enter();
  return false;
 });

 $("a[href='#registr']").click(function(){
  var regForm = "<form name='register'><div class=\"efE1\" style='width:40%;text-align:right;'><img src=\"images/iLogin.gif\" width=\"53\" height=\"17\" alt=\"Login:\" style=\"margin-top: -10px;\" /></div> <div class=\"efE1\" style='width:50%;'><input type=\"text\" id=\"regLogin\" name=\"regLogin\" maxlength='15' /></div>";
  regForm += "<div class=\"efE1\" style='width:40%;text-align:right;'><img src=\"images/iPassword.gif\" width=\"62\" height=\"21\" alt=\"Password:\" style=\"margin-top: -10px;\" /></div><div class=\"efE1\" style='width:50%;'><input type=\"password\" name=\"regPassword\" id=\"regPassword\" maxlength='15' /></div>";
  regForm += "<div class=\"efE1\" style='width:40%; text-align:right;'>Повторите пароль:</div><div class=\"efE1\" style='width:50%;'><input type=\"password\" name=\"regPassword2\" id=\"regPassword2\" maxlength='15' /></div>";
  regForm += "<div class=\"efE1\" style='width:40%; text-align:right;'>E-Mail:</div><div class=\"efE1\" style='width:50%;'><input type=\"text\" name=\"regMail\" id=\"regMail\" maxlength='64' /></div>";
  regForm += "<div class=\"efE1\" style='width:40%; text-align:right;'>Пол:</div><div class=\"efE1\" style='width:50%;'><input type=\"radio\" name=\"regSex\" id=\"regSex\" value='0' checked /> - Муж. &nbsp;&nbsp; <input type=\"radio\" name=\"regSex\" id=\"regSex\" value='1' /> - Жен.</div>";
  regForm += "<div class=\"efE1\" style='width:100%; float:right'><input type=\"submit\" id=\"regSub\" value='Зарегистрироваться' /></div>";
  regForm += "</form>";
  chat.cPanel(regForm, 180);

  $("form[name='register']").submit(function(){
	if (rLog.test($("#regLogin").val().replace(" ", "_")) == false){
	 chat.showError(lang.err3);
	 $("#regLogin").focus();
	} else if (rPass.test($("#regPassword").val()) == false){
	 chat.showError(lang.err4);
	 $("#regPassword").focus();
	} else if ($("#regPassword2").val() != $("#regPassword").val()){
	 chat.showError("Пароли не совпадают");
	 $("#regPassword2").focus();
	} else {
	 var data = $("form[name='register']").serialize();
	 chat.load("register", false, data);
	}
	return false;
  });

  return false;
 });

 $("a[href='#rePass']").click(function(){
  return false;
 });

 $("a[href='#remember']").click(function(){
  if($("#remember").val() != "true") chat.remember("true");
  else chat.remember("false");
  chat.select();
  return false;
 });

 $("a[href='#close']").click(function(){
  cPanelHide();
  return false;
 });
 
 $("#banners").hover( function(){
  $(this).fadeTo("normal", 1);
 }, function(){
  $(this).fadeTo("normal", 0.3);
 });

 $("#copy").hover( function(){
  $(this).fadeTo("normal", 1);
 }, function(){
  $(this).fadeTo("normal", 0.5);
 });

});
