// -*- coding: utf-8 -*-

var TeleUtil = {};

TeleUtil.ensureParent = function (el, parent) {
  el = $(el);
  parent = $(parent);
  if (el.parentNode != parent) {
    el.remove();
    parent.appendChild(el);
    return true;
  }

  return false;
};

TeleUtil.locateIcon = function (owner) {
  return $(owner).getElementsByTagName("img")[0] || $(owner).parentNode.getElementsByTagName("img");
};

TeleUtil.setActivityIndicator = function (owner) {
  var loaded = false;
  var img = TeleUtil.locateIcon(owner);
  var oldSrc;
  if (img) {
    oldSrc = img.src;
    setTimeout(function () {
      if (!loaded)
        img.src = "/images/indicator.gif";
    }, 300);
  }

  return {
    loaded: function () {
      loaded = true;
      if (img && oldSrc)
        img.src = oldSrc;
    }
  };
};

TeleUtil.userId = -1;

TeleUtil.popup = new PopupWin(
  {
    contentFunc: function (wrapper, cont) {
      var activityIndicator = this.setActivityIndicator(TeleUtil.lastOwner);
      new UserInfoService().getUserInfoHtml(
        this.userId,
        this.wrapCont(
          function (html) {
            activityIndicator.loaded();
            wrapper.innerHTML = "<div class='user-info-text'>" + html + "</div>";
            cont();
          }.bind(this), function () { activityIndicator.loaded(); }));
    }.bind(TeleUtil),
    width: 300, // FIXME
    bottomThreshold: 100
  });

TeleUtil.showUserInfo = function (owner, userId)
{
  setTimeout(
    function () {
      if(userId)
      {
        if (owner != null)
          this.lastOwner = owner;

        this.userId = userId;
        this.popup.show(this.lastOwner);
      }
    }.bind(this), 20);
};

TeleUtil.wrapCont = function (cont, onError)
{
  return function (data) {
    if (data.error) {
      if (/access\s+denied/.test(data.error.message))
        alert('Сессия закончилась. Повторите вход в систему.');
      else
        console.error("JSON RPC ERROR: %s", data.error.message);
      if (onError) onError();
    }
    else
      cont(data.result);
  }.bind(this);
};

TeleUtil.toggleConsulting = function (el, courseId)
{
  var service = new UserInfoService();
  var img = $(el).getElementsByTagName("img")[0];
  service.isConsulting(
    courseId,
    TeleUtil.wrapCont(
      function (on)
      {
        var msg = on ? "Завершить онлайн-консультацию?" :
          "Начать онлайн-консультацию?";

        if (!confirm(msg))
          return;

        service.toggleConsulting(
          courseId,
          TeleUtil.wrapCont(
            function (on)
            {
              if (on)
                img.src = "/images/consult-on.gif";
              else
                img.src = "/images/consult-off.gif";
            }));
      }));
};

TeleUtil.attemptEdusysLogin = function attemptEdusysLogin () {
  if (!this.edusysUrl || !this.edusysLoginData)
    return;
  var m = document.cookie.match(/(?:^|;)\s*edusys_login=(\d+):([^\s;]+)/);
  if (m && m[1] == this.localUserId) {
    if (m[2] == "false") this.edusysLoginFailed();
    else this.edusysLoginOk();
  } else {
    var s = document.createElement("script");
    s.src = this.edusysUrl + "js-login?login_data=" +
      encodeURIComponent(this.edusysLoginData) +
      "&r=" + Math.random();
    document.body.appendChild(s);
  }
};

TeleUtil.EDUSYS_COOKIE_MAX_AGE = 600; // seconds

TeleUtil.edusysLoginOk = function edusysLoginOk () {
  document.cookie="edusys_login=" + this.localUserId +
    ":true;max-age=" + this.EDUSYS_COOKIE_MAX_AGE;
  if ($("edusys-login-form")) return;
  if (!$("edusys-login-form-place")) return;
  var form = document.createElement("form");
  form.id = "edusys-login-form";
  form.method = "post";
  form.action = this.edusysUrl + "auto-login";
  form.target = "_blank";
  var ldInput = document.createElement("input");
  ldInput.type = "hidden";
  ldInput.name = "login_data";
  ldInput.value = this.edusysLoginData;
  form.appendChild(ldInput);
  var submit = document.createElement("a");
  submit.className = "edusys-login-button";
  submit.innerHTML = "Перейти к новой платформе";
  Event.observe(submit, "click", function () { form.submit(); });
  form.appendChild(submit);
  $("edusys-login-form-place").appendChild(form);
};

TeleUtil.edusysLoginFailed = function edusysLoginOk () {
  document.cookie = "edusys_login=" + this.localUserId +
    ":false;max-age=" + this.EDUSYS_COOKIE_MAX_AGE;
};
