﻿// JScript File
Type.registerNamespace("Xanga.Socnet.Webui.Client");

Xanga.Socnet.Webui.Client.Sorter = function(listProviderFn) {
    var _listProviderFn = listProviderFn;
    var _sortedList = new Array();
    var _sortFn = null;
    
    // Uses the function that was passed in to get a list of items that
    // should be sorted.  If the list of items is not in array form
    // it is converted before being returned.
    this.getItems = function() {
        var dsItems = _listProviderFn();
        
        if (!Array.isInstanceOfType(dsItems)) {
            arrItems = new Array();
            for (var c in dsItems) arrItems.push(dsItems[c]);
            dsItems = arrItems;
        }
        
        return dsItems;
    }
    
    this.getSortedList = function() {
        if (_sortedList.length == 0 )
            return listProviderFn();
        else
            return _sortedList;
    }
    
    this.setCriteria = function(criteria) {
        switch (criteria) {
            case "name":
                _sortFn = this.nameSort;
                break;
            case "fname":
                _sortFn = this.firstNameSort;
                break;
            case "uname":
                _sortFn = this.usernameSort;
                break;
            case "update":
                _sortFn = this.updateSort;
                break;
            case "cxndate":
                _sortFn = this.cxndateSort;
                break;
            case "createddate":
                _sortFn = this.createddateSort;
                break;
            case "location":
                _sortFn = this.metroSort;
                break;
            default:
                alert("Fell through!");
        }
    }
    
    this.update = function() {
        _sortedList = this.getItems();
        _sortedList.sort(_sortFn);
    }
    
    this.send
    
    ///////////////////////////////////////////////////////////////////////////
    // Sorting functions                                                     //
    ///////////////////////////////////////////////////////////////////////////
    this.firstNameSort = function(a, b) {
        var f1 = a.getFirstName();
        var f2 = b.getFirstName();
        if (f1 == null || f1 == "") return (f2 == null || f2 == "") ? 0 : 1;
        if (f2 == null || f2 == "") return -1;
        f1 = f1.toLowerCase();
        f2 = f2.toLowerCase();
        return ((f1 < f2) ? -1 : ((f1 > f2) ? 1 : 0));
    }

    this.usernameSort = function(a, b) {
        var u1 = a.getUsername();
        var u2 = b.getUsername();
        if (u1 == null || u1 == "") return (u2 == null || u2 == "") ? 0 : 1;
        if (u2 == null || u2 == "") return -1;
        u1 = u1.toLowerCase();
        u2 = u2.toLowerCase();
        return ((u1 < u2) ? -1 : ((u1 > u2) ? 1 : 0));
    }

    this.updateSort = function(a, b) {
        var u1 = a.getLastUpdateLong();
        var u2 = b.getLastUpdateLong();
        return ((u2 < u1) ? -1 : ((u2 > u1) ? 1 : 0));
    }

    this.cxndateSort = function(a, b) {
        var u1 = a.getConnectDateLong();
        var u2 = b.getConnectDateLong();
        return ((u2 < u1) ? -1 : ((u2 > u1) ? 1 : 0));
    }

    this.createddateSort = function(a, b) {
        var u1 = a.getDateCreatedLong();
        var u2 = b.getDateCreatedLong();
        return ((u2 < u1) ? -1 : ((u2 > u1) ? 1 : 0));
    }

    this.metroSort = function(a, b) {
        var u1 = a.getMetroName();
        var u2 = b.getMetroName();
        if (u1 == null || u1 == "" || u1 == "No Metro!") return (u2 == null || u2 == "" || u2 == "No Metro!") ? 0 : 1;
        if (u2 == null || u2 == "" || u2 == "No Metro!") return -1;
        u1 = u1.toLowerCase();
        u2 = u2.toLowerCase();
        return ((u1 < u2) ? -1 : ((u1 > u2) ? 1 : 0));
    }

    this.nameSort = function(a, b) {
        var u1 = a.getName().toLowerCase();
        var u2 = b.getName().toLowerCase();
        return ((u1 < u2) ? -1 : ((u1 > u2) ? 1 : 0));
    }
}
Xanga.Socnet.Webui.Client.Sorter.registerClass("Xanga.Socnet.Webui.Client.Sorter", null, Sys.IDisposable);