var browserielt8 = Browser.ie && Browser.version < 8;

window.addEvent('domready', function() {
  $$('.js-link').set('href', '#').addEvent('click', function(e) {
    if (e) {
      e.stop();
      e.preventDefault();
    }
    return false;
  });

  // header toggle
  var headertoggle = $('header-more-toggle');
  if (headertoggle) {
    var headerfx = new Fx.Reveal('header-more-info', {
      onComplete: function() {
        headertoggle.toggleClass('header-more-open');

        if (!headertoggle.hasClass('header-more-open')) {
          Cookie.write('skillcast_intro', 1, {
            domain: $cookie_domain,
            duration: 365
          });
        }
      },
      transitionOpacity: !browserielt8
    });
  
    headertoggle.addEvent('click', headerfx.toggle.bind(headerfx));
    // info accordion
    var headeraccord = new Fx.Accordion($$('.header-info-block'), $$('.header-info-inner'), {
      show: 0,
      opacity: !browserielt8,
      onActive: function(toggler) {
        toggler.addClass('active');
        var splash = toggler.id.replace('block', 'splash');
        $(splash).reveal({ transitionOpacity: !browserielt8 });
      },
      onBackground: function(toggler) {
        toggler.removeClass('active');
        var splash = toggler.id.replace('block', 'splash');
        $(splash).dissolve({ transitionOpacity: !browserielt8 });
      }
    });
  }

  var hideLoginBox = function() {
    $('login-box').addClass('hidden');
  };

  var hideRegisterBox = function() {
    $('register-box').addClass('hidden');
  };

  if ($('login-toggle')) {
    $('login-toggle').addEvent('click', function() {
      var pos = $('login-toggle').getPosition('header');
      var left = pos.x - 600;
  
      $('password-box').setStyle('margin-left', left);
      $('login-box').setStyle('margin-left', left);
    });
  }

  $$([ '#login-toggle', '#login-close' ]).addEvent('click', function() {
    $('register-box').addClass('hidden');
    $('password-box').addClass('hidden');
    $('login-box').toggleClass('hidden');

    if (!$('login-box').hasClass('hidden')) {
      $('login-login').focus();
    }
  });

  $$([ '#password-toggle', '#password-close' ]).addEvent('click', function() {
    $('register-box').addClass('hidden');
    $('login-box').addClass('hidden');
    $('password-box').toggleClass('hidden');

    if (!$('password-box').hasClass('hidden')) {
      $('password-email').focus();
    }
  });

  $$([ '#register-toggle', '#register-close', '#register-link', '#header-register-1', '#header-register-2', '#header-register-3' ]).addEvent('click', function() {
    $('login-box').addClass('hidden');
    $('password-box').addClass('hidden');
    $('register-box').toggleClass('hidden');
  });

  document.addEvent('click', function(e) {
    var target = $(e.target);
    var parents = target.getParents();
    var hide = true;

    parents.unshift(target);
    parents.each(function(elem) {
      var id = elem.get('id') || '';
      if (elem.hasClass('error-tip') || id.match(/(login|register|password|subscribe|friend)/)) {
        hide = false;
      }
    });

    if (hide) {
      $('login-box').addClass('hidden');
      $('register-box').addClass('hidden');
      $('password-box').addClass('hidden');
      $('subscribe-box').addClass('hidden');

      hideError('email-subscribe');

      if ($('tell-a-friend-box')) {
        $('tell-a-friend-box').addClass('hidden');
      }
    }
  });

  $('login-form').addEvent('submit', function() {
    var login = $('login-login').get('value').trim(),
        password = $('login-password').get('value').trim(),
        remember = $('login-remember').get('checked') ? 1 : 0,
        valid = true;
    
    if (login.length) {
      $('login-login').removeClass('text-input-error');
    }
    else {
      $('login-login').addClass('text-input-error').focus();
      valid = false;
    }

    if (password.length) {
      $('login-password').removeClass('text-input-error');
    }
    else {
      $('login-password').addClass('text-input-error');
      
      if (valid) {
        $('login-password').focus();
        valid = false;
      }
    }

    if (valid) {
      $('login-inner').get('spinner').show(true);

      (new Request({
        url: this.get('action'),
        method: this.get('method'),
        data: {
          login: login,
          password: password,
          remember: remember,
          nocache: String.uniqueID()
        },
        onSuccess: function(response) {
          var result = JSON.decode(response);

          if (result) {
            $('login-form').removeEvents().submit();
          }
          else {
            $('login-header').addClass('hidden');
            $('login-error').removeClass('hidden');

            $('login-login').addClass('text-input-error');
            $('login-password').addClass('text-input-error');

            $('login-inner').unspin();
          }
        }
      })).send();
    }

    return false;
  });

  $('password-form').addEvent('submit', function() {
    var email = $('password-email').get('value').trim(),
        valid = true;
    
    if (email.length) {
      $('password-email').removeClass('text-input-error');
    }
    else {
      $('password-email').addClass('text-input-error').focus();
      valid = false;
    }

    if (valid) {
      $('password-inner').get('spinner').show(true);

      (new Request({
        url: this.get('action'),
        method: this.get('method'),
        data: {
          email: email,
          commit: true,
          nocache: String.uniqueID()
        },
        onSuccess: function(response) {         
          var result = JSON.decode(response);

          if (result) {
            window.location = $('password-form').get('action');
          }
          else {
            $('password-header').addClass('hidden');
            $('password-error').removeClass('hidden');

            $('password-email').addClass('text-input-error');

            $('password-inner').unspin();
          }
        }
      })).send();
    }

    return false;
  });

  $('register-password').addEvent('click', function() {
    $('register-password-repeat').removeClass('text-input-error');
  });

  $('register-password-repeat').addEvent('click', function() {
    var tip = $('register-password').retrieve('tip');
    if (tip) {
      tip.addClass('hidden');    
    }

    $('register-password').removeClass('text-input-error');
    $('register-password-repeat').removeClass('text-input-error');
  });

  $('register-form').addEvent('submit', function() {
    $('register-inner').get('spinner').show(true);

    (new Request({
      url: this.get('action'),
      method: this.get('method'),
      data: {
        register_login: $('register-email').get('value').trim(),
        register_password: $('register-password').get('value').trim(),
        register_password_repeat: $('register-password-repeat').get('value').trim(),
        nocache: String.uniqueID()
      },
      onSuccess: function(response) {         
        var result = JSON.decode(response);

        // ok
        if (result === true) {
          window.location = $('register-form').get('action');
        }
        // error
        else if (result.error) {
          var id = result.error.contains('email') ? 'register-email' : 'register-password';
          showError(id, result.descr);

          if (result.error.contains('password')) {
            $('register-password-repeat').addClass('text-input-error');
          }
        }

        $('register-inner').unspin();
      }
    })).send();

    return false;
  });

  $$('.likes').addEvent('click', function() {
    var e = this;
    if (e.hasClass('likes-disabled')) {
      return;
    }

    var id = e.get('id').split('-').getLast();

    // logged in
    if (typeof $user !== "undefined") {
      var r = new Request({
        url: '/user/like/',
        onSuccess: function(result) {
          var r = JSON.decode(result);

          // vote ok
          if (r) {
            showLikeResult('ok', e);
            var t = e.get('text').toInt();
            e.set('text', (t + 1).toString());
          }
          // already voted
          else {
            showLikeResult('error', e);
          }
        }
      });

      r.post({
        seminar: id,
        nocache: String.uniqueID()
      });
    }
    // not
    else {
      showLikeResult('not-logged-in', e);
    }

    return false;
  });

  $$([ '#like-ok', '#like-error', '#like-not-logged-in' ]).addEvent('click', function() {
    this.addClass('hidden');
  });

  $('subscribe-show').addEvent('click', function() {
    var pos = $('subscribe-show').getPosition();
    $('subscribe-box').setStyle('top', pos.y + 12).removeClass('hidden');
  });

  $('subscribe-close').addEvent('click', function() {
    hideError('email-subscribe');
    $('subscribe-box').addClass('hidden');
  });

  $$([ '#subscribe-submit', '#unsubscribe-submit' ]).addEvent('click', function() {
    var mode = this.get('id').contains('unsubscribe') ? 'remove' : 'add';
    $('subscribe-inner').get('spinner').show(true);

    hideError('email-subscribe');

    var r = new Request({
      url: '/subscription/' + mode,
      onSuccess: function(result) {
        $('subscribe-inner').get('spinner').hide(true);

        var r = JSON.decode(result);

        if (r.error) {
          showError('email-subscribe', r.error);
        }
        else if (r.success) {
          showSuccess('subscribe-box', r.success);
        }
      }
    });

    r.post({ email: $('email-subscribe').get('value') });
  });

  if (typeof $user !== "undefined" && $('tell-a-friend-show')) {
    $('tell-a-friend-show').addEvent('click', function() {
      var pos = $('tell-a-friend-show').getPosition();
      $('tell-a-friend-box').setStyles({ 'top': pos.y + 12, 'margin-left': pos.x - 840 }).removeClass('hidden');
    });

    $('tell-a-friend-close').addEvent('click', function() {
      $('tell-a-friend-box').addClass('hidden');
    });

    $('tell-a-friend-form').set('send', {
      onSuccess: function(result) {
        $('tell-a-friend-inner').get('spinner').hide(true);

        var r = JSON.decode(result);

        if (r.error) {
          showError('tell-a-friend-email', r.error);
        }
        else if (r.success) {
          showSuccess('tell-a-friend-message', r.success);
        }
      }
    });

    $('tell-a-friend-form').addEvent('submit', function() {
      hideError('tell-a-friend-email');
      $('tell-a-friend-inner').get('spinner').show();
      $('tell-a-friend-form').send();
      return false;
    });
  }

  if ($('partnership-register')) {
    $('partnership-register').addEvent('click', function() {
      if (typeof $user === "undefined") {
        var s = $(document.body).getScroll();
        scroll(s.x, 0);

        $('register-toggle').fireEvent('click');
      }
    });
  }

  if (typeof $user === "undefined") {
    if (!Cookie.read('skillcast_intro') && headertoggle) {
      headertoggle.fireEvent('click');
    }
  }
});

var showLikeResult = function(type, parent) {
  $$([ '#like-ok', '#like-error', '#like-not-logged-in' ]).addClass('hidden');

  var e = $('like-' + type);
  var p = parent.getParent('.video-box');

  var coords = p.getCoordinates();
  var size = p.getSize();

  e.setPosition({ x: coords.left + 25, y: coords.top + size.y - 5 }).removeClass('hidden');
  e.addClass.delay(5000, e, 'hidden');
}

var showError = function(id, error, notip) {
  var el = $(id);
  if (el) {
    var tip = el.retrieve('error');
    el.addClass('text-input-error');

    if (tip) {
      tip.set('html', error);
      tip.removeClass('hidden');
    }
    else {
      if (!notip) {
        tip = new Element('div', { 'class': 'error-tip', 'html': error });
  
        var coords = el.getCoordinates();
        var size = el.getSize();
  
        tip.setPosition({ x: coords.left + 10, y: coords.top + size.y - 5 });
        tip.inject(document.body);
  
        tip.addEvent('click', tip.addClass.bind(tip, 'hidden'));
  
        el.store('error', tip);
      }

      var cb = function() {
        this.removeClass('text-input-error');
        var tip = el.retrieve('error');
        if (tip) {
          tip.addClass('hidden');
        }
      };

      el.addEvent('click', cb).addEvent('focus', cb);
    }
  }
};

var hideError = function(id) {
  var el = $(id);
  if (el) {
    el.removeClass('text-input-error');
    var tip = el.retrieve('error');
    if (tip) {
      tip.addClass('hidden');
    }
  }
};

var showSuccess = function(id, success) {
  var el = $(id);
  var coords = el.getCoordinates();
  var size = el.getSize();

  tip = new Element('div', { 'class': 'success-tip', 'html': success });
  tip.setPosition({ x: coords.left + 21, y: coords.top + size.y - 12 }).inject(document.body);
  tip.addEvent('click', function() {
    this.dissolve({ transitionOpacity: !browserielt8 });
  });

  tip.dissolve.delay(5000, tip, { transitionOpacity: !browserielt8 });
};

