$(function() {
  
  $('[data-lazyload]').each(function() {
    var $placeholder = $(this);
    var url = $placeholder.attr('data-lazyload');
    $.get(url, function(data) {
      if (data) {
        $placeholder.replaceWith(data);        
      }
    });
    
  });
  
  
  if($('#autocomplete_schools').size() > 0)
  {
    var $search = $('#school_selector');
        
    var $list = $('#autocomplete_schools');
    var $schools = $list.find('ul > li');
    
    $schools.live('click', function(e) {
      var $li = $(this).closest('li');
      $li.addClass('selected').siblings('li.selected').removeClass('selected');
      pickSelectedSchool();
    });
    
    function selectNextSchool() {
      var $opts = $list.find('li:visible');

      var $sel = $opts.filter('li.selected:not(:last-child)');
      var $next;
      
      if ($sel.size() == 0) {
        $next = $opts.filter(':first');
      } else {
        $next = $opts.filter('li.selected').removeClass('selected').nextAll('li:visible:first');
      }
      $next.addClass('selected');
    }
    function selectPrevSchool() {
      var $opts = $list.find('li:visible');

      var $sel = $opts.filter('li.selected');
            
      var $prev;
      
      if ($sel.size() == 0) {
        $prev = $opts.filter(':last');
      } else {
        $prev = $opts.filter('li.selected').removeClass('selected').prevAll('li:visible:first');
      }
      $prev.addClass('selected');
    }

    function pickSelectedSchool() {

      var $sel = $list.find('li:visible').filter('li.selected');
      var $member_company = $('#member_company');
      
      if ($sel.size() == 0) {
        $member_company.val('');
        return;
      }
      
      var school = $sel.attr('data-school-title');
      var school_id = $sel.attr('data-school-id');
      
      $member_company.val(school_id);
      $search.val(school);
      
      $list.hide();
      
      select_teacher($('#member_company'), $('#member_teacher'));
      
    }
    
    $search.live('keydown', function(e) {
      switch (e.which)
      {
        case 13:case 93:pickSelectedSchool();return;break;
        case 40:selectNextSchool();return;break;
        case 38:selectPrevSchool();return;break;
        case 39:case 37:return;break;
      }      
    });
    
    $search.live('keyup change', function(e) {

      if(e.which == 13 ||e.which == 93 ||e.which == 37 ||e.which == 38 ||e.which == 39 ||e.which == 40)
        return;

      $this = $(this);
      var search = $this.val().toLowerCase();
      
      if (search == '' || search.length < 3) {
        $list.hide();
        return false;
      }
      
      var $matches = $schools.filter(function(index) {
        var school = $(this).attr('data-school-title').toLowerCase();
        var city = $(this).attr('data-school-city').toLowerCase();
        
        if (school.indexOf(search) != -1 || city.indexOf(search) != -1) {
          return true;
        }
        return false;
      });
      $schools.hide();
      $matches.show();
      $list.show();
    });    
  }
  
  $('[data-api]').live('click', do_api);
  $('.people-search input').live('keypress', function(e) { if (e.which == 13) { $(this).next('button').click();} })
});

function do_api(evt) {
  evt.preventDefault();
  var $this = $(this);
  var method = $this.attr('data-api');
  
  if (typeof YD != 'undefined' && typeof YD[method] != 'undefined')
  {
    YD[method]($this);
    return;    
  }
  
  console.log('Api method "'+method+'" does not exist.');
}

var YD = {
  
  base_url : '/_api/',

  send_friend_request : function($elm) {

    if ($elm.hasClass('disabled')) return;
    var method = 'send_request';
    var friend_id = $elm.attr('data-friend-id');
    var action = $elm.attr('data-action');
    var text = $elm.attr('data-text');

    if (!friend_id) return;

    $.get(YD.base_url+method+'/'+friend_id, function (data) {
      if (data.success == true) {
        switch (action) {
          default:
          case 'reload':
            location.reload();
            break;
          case 'disable':
            $elm.addClass('disabled').find('span').text(text)
            break;
        }
      } else {
        alert(data.message);
      }
    });
    
  },
  
  confirm_friend_request : function($elm) {

    var method = 'confirm_request';
    var friend_id = $elm.attr('data-friend-id');

    if (!friend_id) return;

    $.get(YD.base_url+method+'/'+friend_id, function (data) {
      if (data.success == true) {
        location.reload();
      } else {
        alert(data.message);
      }
    });
    
  },
  
  deny_friend_request : function($elm) {

    var method = 'deny_request';
    var friend_id = $elm.attr('data-friend-id');

    if (!friend_id) return;

    if (confirm('Wil je dit vriendschapsverzoek echt weigeren?')) {
      $.get(YD.base_url+method+'/'+friend_id, function (data) {
        if (data.success == true) {
          location.reload();
        } else {
          alert(data.message);
        }
      });      
    }
    
  },
  
  retract_friend_request : function($elm) {
    
    var method = 'retract_request';
    var friend_id = $elm.attr('data-friend-id');
    var action = $elm.attr('data-action');
    if (!friend_id) return;

    if (confirm('Wil je dit vriendschapsverzoek echt intrekken?')) {
      $.get(YD.base_url+method+'/'+friend_id, function (data) {
        if (data.success == true) {
          switch(action) {
            default:
            case 'reload':
              location.reload();
              break;
            case 'remove-parent':
              $elm.parent().remove();
              break;
          }
        } else {
          alert(data.message);
        }
      });      
    }
    
  },
  
  get_people : function($elm) {
    var method = 'get_people';
    
    var query = $($elm.attr('data-query')).val();
    var $results = $($elm.attr('data-results'));
    
    if (!query || $results.size() == 0)
      return;
    
    toggle_loading(true);
    
    var params = {
      'query' : query,
      'not_self' : 1
    };
    
    $.ajax({
      url : YD.base_url+method,
      data : params,
      success : function(data, status, xhr) {

        toggle_loading(false);
        
        if (data.success == true)
        {
          var html = '';
          for(var i=0;i<data.results.length;i++)
          {
            var person = data.results[i];
            if (person.screen_name)
            {
              html += '<li><a href="/profiel/'+person.member_id+'" target="_blank">'+person.screen_name+'</a>';
              
              if (person.is_friend == true)
              {
                html += '<span class="friend-button disabled"><span>Je bent al bevriend</span></span>';
              } else if (person.request_sent == true) {
                html += '<span class="friend-button disabled"><span>Vriendverzoek is al verzonden</span></span>';
              } else {
                html += '<span class="friend-button" data-friend-id="'+person.member_id+'" data-api="send_friend_request" data-action="disable" data-text="Vriendverzoek is verzonden" ><span>Verzend vriendverzoek</span></span>';
              }              
              
              html += '</li>';              
            }
          }
        } else {
          html = '<li class="tac">'+data.message+'</li>';
        }
        $results.html(html);
      },
      type : 'post',
      dataType : 'json'
    });
    
  }

  
  
  
};
