var people_names;

function people_setup() {
    if (!hb_auth.get_username()) {
        var url = escape('http://itp.nyu.edu/itp/data/people_browse.jsp');
        remote('hb/proxy/proxy.php?url=' + url, people_response);
    } else {
        remote('hb/itp/people.php?show=all', internal_people_response);
    }
    people_setup_filter();
    people_setup_search();
    people_names = [];
    var div = document.getElementById('people');
    div.style.height = (window.innerHeight - div.offsetTop - 40) + 'px';
}

function internal_people_response(response) {
    
    var holder = document.getElementById('people');
    var people = response.responseXML.getElementsByTagName('person');
    
    var list = '<ul id="people_list">';
    
    for (var i = 0; i < people.length; i++) {
        var person = people[i];
        var id = person.getAttribute('id');
        var type = person.getAttribute('type');
        var url = 'hb/itp/people.php?id=' + id;
        var name = person.getAttribute('name');
        
        people_names[i] = name.toLowerCase().replace(/[^a-z]/g, '');
        
        list += '<li id="person' + id + '" class="' + type + '">' +
                '<a href="' + url + '">' +
                name + '</a></li>';
    }
    
    list += '</ul>';
    holder.innerHTML = list;
    var links = holder.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        links[i].onclick = person_click;
    }
}

function people_response(response) {
    
    var holder = document.getElementById('people');
    var people = response.responseXML.getElementsByTagName('item');
    
    var list = '<ul id="people_list">';
    var person_type;
    for (var i = 0; i < people.length; i++) {
        var name = people[i].getElementsByTagName('name')[0].firstChild.nodeValue;
        var url = people[i].getAttribute('aliasURL').substr(3);
        
        people_names[i] = name.toLowerCase().replace(/[^a-z]/g, '');
        
        if (people[i].getAttribute('is_student') == '1') {
            person_type = 'students';
        } else if (people[i].getAttribute('is_faculty') == '1') {
            person_type = 'faculty';
        } else {
            person_type = 'alumni';
        }
        
        var id = people[i].getAttribute('id');
        
        list += '<li id="person' + id + '" class="' + person_type + '">' +
                '<a href="http://itp.tisch.nyu.edu/' + url + '">' +
                name + '</a></li>';
    }
    list += '</ul>';
    holder.innerHTML = list;
    var links = holder.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        links[i].onclick = person_click;
    }
}

function people_setup_filter() {
    var filter = document.getElementById('people_filter');
    filter.onchange = function() {
        
        var search = document.getElementById('people_search');
        if (!search.is_default) {
            people_search_update();
            return;
        }
        
        var people = document.getElementById('people');
        var items = people.getElementsByTagName('li');
        for (var i = 0; i < items.length; i++) {
            if (people_filter_check(items[i])) {
                items[i].style.display = 'list-item';
            } else {
                items[i].style.display = 'none';
            }
        }
    }
}

function people_filter_check(item) {
    var filter = document.getElementById('people_filter');
    var search_value = filter.options[filter.selectedIndex].value;
    if (search_value == 'all' || item.className == search_value) {
        return true;
    } else {
        return false;
    }
}

function people_setup_search() {
    var search = document.getElementById('people_search');
    search.is_default = true;
    search.default_value = search.value;
    search.onfocus = function() {
        if (this.is_default) {
            this.is_default = false;
            this.value = '';
        }
        people_search_interval();
        this.search_interval = setInterval('people_search_interval();', 500);
    }
    search.onblur = function() {
        if (this.value == '') {
            this.is_default = true;
            this.value = this.default_value;
        }
        clearInterval(this.search_interval);
    }
}

var search_counter = 0;
function people_search_interval() {
    var search = document.getElementById('people_search');
    if (!search.last_value || search.last_value != search.value) {
        search.last_value = search.value;
        people_search_update();
    }
}

function people_search_update() {
    var search = document.getElementById('people_search');
    var search_value = search.value.toLowerCase().replace(/[^a-z]/g, '');
    var search_values = search_value.split(' ');
    var list = document.getElementById('people_list');
    var items = list.getElementsByTagName('li');
    for (var i = 0; i < people_names.length; i++) {
        var name = people_names[i];
        var item = items[i];
        if (people_filter_check(item) &&
            (search.is_default || search_value == '' ||
             people_name_check(search_values, name))) {
             item.style.display = 'list-item';
        } else {
            item.style.display = 'none';
        }
    }
}

function people_name_check(search_values, name) {
    var found = true;
    for (var i = 0; i < search_values.length; i++) {
        if (search_values[i] == '') {
            continue;
        }
        if (name.indexOf(search_values[i]) == -1) {
            found = false;
        }
    }
    return found;
}

function person_click(event) {
    
    if (!event) {
        var event = window.event;
    }
    
    var link = event.target;
    if (link.nodeType == 3) {
        link = link.parentNode;
    }
    
    var main = document.getElementById('main');
    var person = main.insertBefore(document.createElement('div'), main.firstChild);
    person.innerHTML = '<div class="person block">' +
        '<dl class="controls">' +
        '<dt>' + link.firstChild.nodeValue + '</dt>' +
        '<dd class="primary"><ul class="tabs">' +
        '<li class="selected"><a href="#" rel="overview">Overview</a></li>' +
        '</ul></dd>' +
        '<dd class="secondary"><a href="#" class="close">Close<img src="images/close-off.gif"/></a></dd>' +
        '<br class="clear"/></dl>' +
        '<div class="content">' +
        '<span class="progress"><img src="images/progress.gif"/> Loading</span>' +
        '</div></div>';
    
    var close = person.getElementsByTagName('a')[1];
    close.onclick = function() {
        person.parentNode.removeChild(person);
        return false;
    }
    
    if (!hb_auth.get_username()) {
        var url = escape('http://itp.nyu.edu/itp/data/person_profile.jsp?id=../' +
                  link.getAttribute('href').substr(25));
        remote('hb/proxy/proxy.php?url=' + url, person_handler);
    } else {
        remote(link.getAttribute('href'), internal_person_handler);
    }
    
    return false;
}

function internal_person_handler(response) {
    var main = document.getElementById('main');
    var content = main.firstChild.firstChild.getElementsByTagName('div')[0];
    content.innerHTML = response.responseText;
}

function person_handler(response) {
    var main = document.getElementById('main');
    var content = main.firstChild.firstChild.getElementsByTagName('div')[0];
    var person = response.responseXML;
    
    var markup = '<div class="overview">';
    
    var thumb_search = person.getElementsByTagName('photo_thumbnail_url');
    
    if (thumb_search.length > 0 && thumb_search[0].firstChild) {
        
        var photo = true;
        
        var thumb = thumb_search[0].firstChild.nodeValue.toLowerCase();
        var thumb_url = 'http://itp.nyu.edu/itp_photos/' + thumb;
        
        var tabs = main.firstChild.getElementsByTagName('ul')[0];
        var li = tabs.appendChild(document.createElement('li'));
        li.innerHTML = '<a href="#" rel="photo">Photo</a>';
        
        var links = tabs.getElementsByTagName('a');
        links[0].onclick = function() {
            this.parentNode.className = 'selected';
            this.parentNode.parentNode.childNodes[1].className = '';
            content.childNodes[0].style.display = 'block';
            content.childNodes[1].style.display = 'none';
            return false;
        }
        links[1].onclick = function() {
            this.parentNode.className = 'selected';
            this.parentNode.parentNode.childNodes[0].className = '';
            content.childNodes[1].style.display = 'block';
            content.childNodes[0].style.display = 'none';
            return false;
        }
        
        markup += '<a href="#">' +
                  '<img src="' + thumb_url + '" class="thumb"/></a>';
    } else {
        photo = false;
    }
    
    var item = document.getElementById('person' + person.firstChild.getAttribute('id'));
    var name = item.firstChild.firstChild.nodeValue;
    var name_extra = person.getElementsByTagName('name_extra');
    
    if (name_extra && name_extra[0].firstChild) {
        name_extra = name_extra[0].firstChild.nodeValue;
        name_extra = ' <span class="name_extra">' + name_extra + '</span>';
    } else {
        name_extra = '';
    }
    
    var url = person.getElementsByTagName('url');
    if (url.length > 0 && url[0].firstChild) {
        var href = url[0].firstChild.nodeValue;
        markup += '<h2><a href="' + href + '">' + name + '</a>' +
                  name_extra + '</h2>';
    } else {
        markup += '<h2>' + name + name_extra + '</h2>';
    }
    
    
    
    bio_search = person.getElementsByTagName('bio');
    if (bio_search.length > 0 && bio_search[0].firstChild) {
        markup += '<h3>Bio</h3>' + bio_search[0].firstChild.nodeValue;
    }
    
    origin_search = person.getElementsByTagName('origin');
    if (origin_search.length > 0 && origin_search[0].firstChild) {
        markup += '<h3>Origin</h3>' + origin_search[0].firstChild.nodeValue;
    }
    
    background_search = person.getElementsByTagName('background');
    if (background_search.length > 0 && background_search[0].firstChild) {
        markup += '<h3>Background</h3>' + background_search[0].firstChild.nodeValue;
    }
    
    interests_search = person.getElementsByTagName('interests');
    if (interests_search.length > 0 && interests_search[0].firstChild) {
        markup += '<h3>Interests</h3>' + interests_search[0].firstChild.nodeValue;
    }
    
    markup += '</div>';
    
    if (photo) {
        var photo_search = person.getElementsByTagName('photo_url');
        markup += '<div class="photo">' +
                  '<img src="http://itp.nyu.edu/' +
                  photo_search[0].firstChild.nodeValue.toLowerCase() +
                  '"/></div>';
    }
    
    content.innerHTML = markup;
    
    if (photo) {
        var img = content.getElementsByTagName('img')[0];
        var link = img.parentNode;
        link.onclick = function() {
            links[1].parentNode.className = 'selected';
            links[0].parentNode.parentNode.childNodes[0].className = '';
            content.childNodes[1].style.display = 'block';
            content.childNodes[0].style.display = 'none';
            return false;
        }
    }
    
}

add_event(window, 'onload', people_setup);

