$AR = function() {
    var v = {
        root: '',
        fi: '',
        bi: ''
    };
    return {
        log: function() {
            if (window.console && window.console.firebug) {
                console.log.apply(null, arguments);
            } else if (window.console && console.log) {
                console.log(arguments[0]);
            }
        },
        set_var: function(k, v0) {
            v[k] = v0;
        },
        get_var: function(k) {
            return v[k];
        },
        gi: function(s, r) {
            return s.replace(r, '');
        },
        nn: function(n) {
            var n2 = parseInt(n,0);
            if (isNaN(n2)) {
                n2 = 0;
            }
            return n2;
        },
        is_image: function(url) {
            try {
                ext = url.split('.').reverse()[0].toLowerCase();
            } catch(e) {
                ext = '';
            }
            var imgs = ['jpg', 'jpeg', 'gif', 'png'];
            for (var i = imgs.length - 1; i >= 0; i--) {
                if (ext == imgs[i]) {
                    return true;
                }
            }
            return false;
        },
        go: function(url) {
            document.location.href = url;
        },
        gbid: function(id) {
            return document.getElementById(id);
        },
        ro: function(id, src) {
            try {
                this.gbid(id).src = src;
            }
            catch(e) {}
        },
        post_reload: function(u, v) {
            //alert(u);
            if (v) {} else {
                v = {
                    'a': 0
                };
            }
            $.post(u, v,
            function(data) {
                window.location.reload();
                return false;
            });
        }
    };
} ();

$AR.lib = {
    aff: 0,
    uc_id: '',
    uc_code: '',
    qsize: 0,
    fquota: 0,
    undo_o: null,
    lock: 0,
    lock_o: null,
    lock_e: null,
    last: -1,
    lock_key: false,
    lock_ent: false,
    mode: '',
    libmode: 0,
    profile: 0,
    get_lock: function() {
        this.lock += 1;
        return this.lock - 0;
    },
    get_file: function(id) {
        if ($AR.lib.libmode==1) {
            window.opener.arUpdateImageField(id);
            window.close();
        } else {
            window.open('file.asp?id='+id);
        }
    },
    get_ff: function(obj) {
        try {
            return obj.id.replace(/[0-9]*/g, '');
        } catch(ex) {
            return '';
        }
    },
    get_selected: function(){
        var ffs = [];
        $('.arlib-con-folder-selected').add(
            '.arlib-con-file-selected'
        ).each(
            function(){
                ffs.push(this.id);
            }
        );
        return ffs;
    },
    init: function(profile, fquota, uc_id, uc_code, libmode) {
        $AR.lib.profile = profile;
        $AR.lib.fquota = fquota;
        $AR.lib.uc_id = uc_id;
        $AR.lib.uc_code = uc_code;
        $AR.lib.libmode = libmode;
        $AR.lib.load_content(0, 1);

        //crumb listeners
        $('.arlib-a-crumb').live('click', $AR.lib.crumb_click);
        
        //upload listeners
        $('.arlib-q-btn').hover(
            function(){$(this).addClass('arlib-q-btn-hover');},
            function(){$(this).removeClass('arlib-q-btn-hover');}
        );
        $('.arlib-q-start').click(function() {
            $AR.lib.q_start();
            return false;
        });
        $('.arlib-q-stop').click(function() {
            swfu.cancelQueue();
            $AR.lib.file_hide(
                $('#arlib_q .arlib-q-item')
            );
            $AR.lib.qsize = 0;
            $('.arlib-con-screen').hide();
            $AR.lib.state('empty');
            return false;
        });
        $('.arlib-a-item-cancel').live('click',
        function() {
            var it = $(this).parent(
            '.arlib-q-item'
            )[0];
            var size = $(it).data('size');
            swfu.cancelUpload(it.id.replace('arlQ_', ''));
            $AR.lib.qsize -= size;
            $AR.lib.file_hide($(it));
            if (swfu.getStats().files_queued > 0) {
                $AR.lib.q_status();
            } else {
                $('.arlib-con-screen').hide();
                $AR.lib.state('empty');
            }
            return false;
        });

        //content listeners
        $('.arlib-con-folder').live('dblclick', this.folder_dblclick);
        $('.arlib-con-file').live('dblclick', this.file_dblclick);
        $('.arlib-con-item').live('click', this.item_click);
        $('.arlib-con-folder').live('mouseover', this.mouseover);
        $('.arlib-con-folder').live('mouseout', this.mouseout);
        $('.arlib-con-file').live('mouseover', this.mouseover);
        $('.arlib-con-file').live('mouseout', this.mouseout);

        //tree listeners
        $('.arlib-tree-folder').live('dblclick', this.tree_dblclick);
        $('.arlib-tree-folder').live('click', this.tree_click);
        $('.arlib-tree-folder').live('mouseover', this.tree_mouseover);
        $('.arlib-tree-folder').live('mouseout', this.tree_mouseout);

        //content buttons
        $('.arlib-btn').hover(
            function() {$(this).addClass('arlib-btn-hover');},
            function() {$(this).removeClass('arlib-btn-hover');}
        ).click($AR.lib.btn_click);

        //keyboard listeners
        $(document).keydown($AR.lib.keydown);
    },
    init2: function(data) {
        $('.arlib-con-item input').keyup(
            $AR.lib.item_keyup
        ).blur($AR.lib.item_blur);
        $AR.lib.clear();
        $AR.lib.state('empty');
        try {
            var aff_new = $AR.nn($('#arlib_new_id')[0].value);
            if (aff_new > 0) {
                var $o = $('#aff' + aff_new);
                $AR.lib.lock_o = $o[0];
                $AR.lib.lock_e = null;
                $o.addClass('arlib-con-folder-selected');
                $AR.lib.next2($AR.lib.get_lock(), 'item_click');
            }
        } catch(ex) {}
    },
    undo: function() {
        try {
            var $o = $($AR.lib.undo_o);
            $o.find('input')[0].value = $o.data('old');
            // $AR.log('undid: ' + $o.data('old'));
        } catch(ex) {
            // $AR.log('undo failed');
        }
        $AR.lib.undo_o = null;
    },
    del: function(){
        if (confirm(
            'Are you sure  you wish to permanently ' +
            'delete the selected items? This ' +
            'action cannot be undone.'
        )) { 
            $.post(
                'ajax.asp',
                {
                    'ajax': 'lib_action',
                    'action': 'delete',
                    'profile': $AR.lib.profile,
                    'affCurrent': $AR.lib.aff,
                    'ffs': $AR.lib.get_selected()
                },
                function(){$AR.lib.reload();}
            );
        }
    },
    reload: function(){
        $AR.lib.load_content($AR.lib.aff, 0);
    },
    move: function(){
        if ($AR.lib.mode=='move2') {
            var id = $AR.gi(
                $('.arlib-tree-folder-selected')[0].id,
                'arlib_tree'
            );
            $.post(
                'ajax.asp',
                {
                    'ajax': 'lib_action',
                    'action': 'move',
                    'profile': $AR.lib.profile,
                    'dest': id,
                    'ffs': $AR.lib.get_selected()
                },
                $AR.lib.pb_move
            );
        } else {
            $AR.lib.state('move');
            $('#arlib_preview').hide();
            $('#arlib_tree').html('').show().load(
                'ajax.asp?ajax=lib_action&action=tree&profile=' +
                $AR.lib.profile
            );
        }
    },
    clear: function() {
        $('#arlib_preview').hide();
        $('#arlib_tree').hide().html('');
        $AR.lib.lock = 0;
        $AR.lib.lock_o = null;
        $AR.lib.lock_e = null;
        $AR.lib.lock_key = false;
        $AR.lib.last = -1;
        $AR.lib.mode = '';
        $('.arlib-con-item').removeClass(
        'arlib-con-file-selected'
        ).removeClass(
        'arlib-con-folder-selected'
        ).removeClass(
        'arlib-con-folder-hover'
        ).removeClass(
        'arlib-con-file-hover'
        );
        $('.arlib-con-text').show();
        $('.arlib-con-edit').hide();
    },
    next1: function(action, obj, evt) {
        lock = $AR.lib.get_lock();
        $AR.lib.lock_o = obj;
        $AR.lib.lock_e = evt;
        setTimeout('$AR.lib.next2(' + lock + ',"' + action + '")', 250);
    },
    next2: function(lock, action) {
        if (lock != $AR.lib.lock) {
            return false;
        }
        $AR.lib.get_lock();
        var $o = $($AR.lib.lock_o);
        var e = $AR.lib.lock_e;
        var shift = false,
        ctrl = false;
        try {
            shift = e.shiftKey;
            ctrl = (e.ctrlKey || e.altKey);
        } catch(ex) {}
        var index = $('.arlib-con-item').index($o[0]);
        switch (action) {
            case 'item_click':
                var last = $AR.lib.last;
                var ffc = ($o[0].id.indexOf('aff') > -1) ? 'folder': 'file';
                if ($AR.lib.mode == 'edit') {
                    // locked
                    return false;
                } else if (shift && last > -1) {
                    // multi
                    var mn = Math.min(last, index);
                    var mx = Math.max(last, index);
                    var $g = $('.arlib-con-item').slice(
                    mn,
                    mx + 1
                    );
                    $('.arlib-con-item').removeClass(
                    'arlib-con-folder-selected'
                    ).removeClass(
                    'arlib-con-file-selected'
                    );
                    $g.filter('.arlib-con-folder').addClass(
                    'arlib-con-folder-selected'
                    );
                    $g.filter('.arlib-con-file').addClass(
                    'arlib-con-file-selected'
                    );
                    $AR.lib.state('multi');
                } else if (ctrl) {
                    //multi
                    $o.toggleClass('arlib-con-' + ffc + '-selected');
                    $AR.lib.last = index;
                    $AR.lib.state('multi');
                } else if (
                $o.hasClass('arlib-con-folder-selected') ||
                $o.hasClass('arlib-con-file-selected')
                ) {
                    // edit
                    $('.arlib-con-item').removeClass(
                    'arlib-con-folder-selected'
                    ).removeClass(
                    'arlib-con-file-selected'
                    ).removeClass(
                    'arlib-con-folder-hover'
                    ).removeClass(
                    'arlib-con-file-hover'
                    );
                    $o.addClass('arlib-con-' + ffc + '-selected');
                    $o.children('.arlib-con-text').hide();
                    $o.children('.arlib-con-edit').show();
                    var $in = $o.find('input')[0];
                    $in.select();
                    $in.focus();
                    $AR.lib.last = index;
                    $AR.lib.undo_o = $o[0];
                    $AR.lib.state('edit');
                } else {
                    $('.arlib-con-item').removeClass(
                    'arlib-con-folder-selected'
                    ).removeClass(
                    'arlib-con-file-selected'
                    );
                    $o.addClass('arlib-con-' + ffc + '-selected');
                    $AR.lib.last = index;
                    $AR.lib.state('selected');
                    if (ffc == 'file') {
                        $AR.lib.preview($o[0]);
                    }
                }
                break;
            case 'tree_click':
                $('.arlib-tree-folder').removeClass(
                    'arlib-tree-folder-selected'
                );
                $o.addClass('arlib-tree-folder-selected');
                $AR.lib.state('move2');
                break;
        }
        return false;
    },
    keydown: function(e) {
        var mode = $AR.lib.mode;
        var esc = {'selected':0,'move':0,'move2':0};
        if (mode in esc && e.keyCode == 27) {
            $AR.lib.clear();
            $AR.lib.state('empty');
        }
        if ($AR.lib.mode == 'selected' && e.keyCode == 46) {
            $AR.lib.del();
        }
    },
    mouseover: function() {
        if ($AR.lib.mode != '') {return false;}
        if ($(this).hasClass('arlib-con-folder')) {
            $(this).addClass('arlib-con-folder-hover');
            if ($(this).hasClass('arlib-folder-up')) {
                $(this).addClass('arlib-folder-up-hover');
            }
        } else {
            $AR.lib.preview(this);
        }
        return false;
    },
    mouseout: function() {
        if ($AR.lib.mode != '') {
            return;
        }
        if ($(this).hasClass('arlib-con-folder')) {
            $(this).removeClass('arlib-con-folder-hover');
            $(this).removeClass('arlib-folder-up-hover');
        } else {
            $(this).removeClass('arlib-con-file-hover');
            $('#arlib_preview').hide();
        }
        return;
    },
    tree_mouseover: function() {
        $(this).addClass('arlib-tree-folder-hover');
    },
    tree_mouseout: function() {
        $(this).removeClass('arlib-tree-folder-hover');
    },
    preview: function(obj) {
        var id = $AR.gi(obj.id, 'af');
        $(obj).addClass('arlib-con-file-hover');
        $('#arlib_preview_img').attr(
        'src', 'file.asp?type=preview&id=' + id
        );
        $('#arlib_preview').show();
    },
    format: function(n) {
        var kb = 1024;
        var mb = 1024 * kb;
        var gb = 1024 * mb;
        if (n < kb) {return n + " B";}
        if (n < mb) {return Math.round(n * 10 / kb) / 10 + " KB";}
        if (n < gb) {return Math.round(n * 10 / mb) / 10 + " MB";}
        return Math.round(n * 10 / gb) / 10 + " GB";
    },
    q: function(f) {
        $('#arlib_q').append(
        '<div id="arlQ_' +
        f.id +
        '" class="arlib-q-item">' +
        '<div class="arlib-q-item-bar">' +
        '<div class="arlib-q-item-fill">' +
        '</div></div>' +
        '<div class="arlib-q-item-name">' +
        f.name +
        '</div>' +
        '<a href="." class="arlib-a-item-cancel">X</a>' +
        '<div class="arlib-q-item-status">' +
        $AR.lib.format(f.size) +
        '</div></div>'
        );
        $it = $('#arlQ_' + f.id);
        $it.data('size', f.size);
        if (f.size > $AR.lib.fquota) {
            $it.addClass('arlib-file-big');
        }
        $AR.lib.qsize += f.size;
        $AR.lib.state('ready');
    },
    progress: function(f, bl, bt) {
        var p = Math.floor(100 * bl / bt);
        $('#arlQ_' + f.id + ' .arlib-q-item-fill'
        ).width(p + '%');
        $('#arlQ_' + f.id + ' .arlib-q-item-status'
        ).html('' + $AR.lib.format(bl) + '/' + $AR.lib.format(bt));
    },
    crumb_click: function() {
        id = $AR.gi(this.id, 'arlib_crumb');
        $AR.lib.load_content(id, 1);
        return false;
    },
    tree_click: function(e) {
        $AR.lib.next1('tree_click', this, e);
        return false;
    },
    tree_dblclick: function(e) {
        $AR.lib.get_lock();
        $('.arlib-tree-folder').removeClass(
            'arlib-tree-folder-selected'
        );
        $(this).addClass('arlib-tree-folder-selected');
        $AR.lib.state('move2');
        $AR.lib.move();
        return false;
    },
    item_click: function(e) {
        $AR.lib.next1('item_click', this, e);
        return false;
    },
    item_blur: function() {
        // $AR.log('blur');
        $AR.lib.blur_obj = this;
        setTimeout('$AR.lib.item_blur2()', 150);
    },
    item_blur2: function() {
        // $AR.log('blur2');
        var obj = $AR.lib.blur_obj,
            $item = $(obj).parents('.arlib-con-item'),
            old = $item.data('old'),
            ff = $AR.lib.get_ff($item[0]),
            id = $item[0].id.replace('aff', '').replace('af', '');
        if (obj.value == old) {
            $AR.lib.clear();
            $AR.lib.state('empty');
        } else {
            // $AR.log('renaming...');
            $.post(
            'ajax.asp',
            {
                'ajax': 'lib_action',
                'action': 'rename',
                'profile': $AR.lib.profile,
                'affCurrent': $AR.lib.aff,
                'ff': ff,
                'id': id,
                'name': obj.value
            },
            $AR.lib.pb_rename
            );
        }
    },
    item_keyup: function(e) {
        if ($AR.lib.lock_key) {
            $AR.lib.lock_key = false;
            // $AR.log('caught lock_key');
            return false;
        }
        // $AR.log('key: ' + e.keyCode);
        switch (e.keyCode) {
        case 27:
            // $AR.log('ESC');
            $AR.lib.undo();
            // $AR.log('ESC calling blur');
            this.blur();
            break;
        case 13:
            if ($AR.lib.lock_ent) {
                $AR.lib.lock_ent = false;
                return false;
            }
            // $AR.log('ENT calling blur');
            this.blur();
            break;
        }
        $AR.lib.lock_ent = false;
        return false;
    },
    folder_dblclick: function() {
        if ($AR.lib.mode == 'edit') {
            return false;
        }
        $AR.lib.get_lock();
        id = $AR.gi(this.id, 'aff');
        $AR.lib.load_content(id, 1);
        return false;
    },
    file_dblclick: function() {
        $AR.lib.get_lock();
        id = $AR.gi(this.id, 'af');
        $AR.lib.get_file(id);
        return false;
    },
    file_done: function(f) {
        $AR.lib.qsize -= f.size;
        $AR.lib.file_hide($('#arlQ_' + f.id));
        $AR.lib.q_status();
        $AR.lib.reload();
    },
    file_hide: function($i) {
        $i.fadeTo(1000, 0.1).slideUp(function() {
            $(this).remove();
        });
    },
    btn_click: function() {
        var $o = null;
        try {
            $o = $($AR.lib.lock_o);
        } catch(ex) {}
        switch ($AR.gi(this.id, 'arlib_btn_')) {
        case 'create':
            $AR.lib.load_content($AR.lib.aff, 0, 'new');
            break;
        case 'cancel':
            $AR.lib.undo();
            $AR.lib.clear();
            $AR.lib.state('empty');
            break;
        case 'choose':
            $AR.lib.get_file($AR.gi($o[0].id, 'af'));
            break;
        case 'open':
            $AR.lib.load_content($AR.gi($o[0].id, 'aff'), 1);
            break;
        case 'rename':
            if ($AR.lib.mode == 'selected') {
                $AR.lib.lock_e = null;
                $AR.lib.next2($AR.lib.get_lock(), 'item_click');
            }
            break;
        case 'del':
            $AR.lib.del();
            break;
        case 'move':
            $AR.lib.move();
            break;
        case 'download':
            $AR.lib.get_file($AR.gi($o[0].id, 'af'));
            break;
        }
        return false;
    },
    success: function(f, data) {
    },
    q_start: function() {
        var fq = $AR.lib.fquota;
        $bigs = $('.arlib-q-item').filter(function() {
            return $(this).data('size') > fq;
        });
        if ($bigs.length > 0 && fq > 0) {
            alert('Please remove any files from your queue that are larger than ' + $AR.lib.format(fq));
            return false;
        }
        if (swfu.getStats().files_queued > 0) {
            swfu.startUpload();
        }
        return false;
    },
    q_done: function(n) {
        $AR.lib.qsize = 0;
        $('.arlib-con-screen').hide();
        $AR.lib.state('empty');
    },
    q_status: function(t, m) {
        $s = $('#arlib_q_status');
        if (arguments.length == 0) {
            t = '';
        };
        if (t.length > 0) {
            $s.html(t);
        } else {
            try {
                n = swfu.getStats().files_queued;    
            } catch(ex){
                n = 0;
            }
            t = n + ' item';
            if (n != 1) {
                t += 's';
            }
            if (n > 0) {
                t += ', ' + $AR.lib.format($AR.lib.qsize) + ' Total';
            }
            $s.html(t);
        }

    },
    state: function(s) {
        $AR.log('state = ' + s);
        var last = $AR.lib.last;
        var ff = $AR.lib.get_ff($AR.lib.lock_o);
        var gui = {
            open: false,
            choose: false,
            rename: false,
            move: false,
            download: false,
            del: false,
            create: false,
            cancel: false
        };
        if (s.slice(0,4)!='move') {
            $('#arlib_tree').hide().html('');
        };
        switch (s) {
        case 'empty':
            $('.arlib-q-add').removeClass('arlib-q-add-hide');
            $AR.log('show add');
            $('.arlib-q-start').hide();
            $('.arlib-q-stop').hide();
            $('#arlib_btns').show();
            $('#arlib_crumb_on').show();
            $('#arlib_crumb_off').hide();
            $AR.lib.q_status();
            gui.create = true;
            break;
        case 'ready':
            $('.arlib-q-add').removeClass('arlib-q-add-hide');
            $('.arlib-q-start').show();
            $('.arlib-q-stop').show();
            $('#arlib_btns').hide();
            $('#arlib_crumb_on').hide();
            $('#arlib_crumb_off').show();
            $('#arlib_screen').hide();
            $('.arlib-con-screen').show();
            $AR.lib.clear();
            $AR.lib.q_status();
            break;
        case 'multi':
            $AR.lib.mode = 'selected';
            $('#arlib_preview').hide();
            gui.move = true;
            gui.del = true;
            gui.cancel = true;
            break;
        case 'paused':
            break;
        case 'selected':
            $AR.lib.mode = 'selected';
            $('.arlib-con-item').removeClass(
            'arlib-con-folder-hover'
            ).removeClass(
            'arlib-con-file-hover'
            );
            if (ff == 'aff' && last > -1) {
                gui.open = true;
            }
            if (ff == 'af' && last > -1) {
                gui.choose = true;
                gui.download = true;
            }
            gui.rename = true;
            gui.move = true;
            gui.del = true;
            gui.cancel = true;
            $('.arlib-q-add').addClass('arlib-q-add-hide');
            break;
        case 'edit':
            $AR.lib.mode = 'edit';
            var $o = $($AR.lib.lock_o);
            $AR.lib.undo_o = $o[0];
            $o.data('old', $o.find('input')[0].value);
            gui.rename = true;
            gui.cancel = true;
            break;
        case 'move':
            $AR.lib.mode = 'move';
            gui.cancel = true;
            break;
        case 'move2':
            $AR.lib.mode = 'move2';
            gui.cancel = true;
            gui.move = true;
            break;
        }
        for (var i in gui) {
            try {
                var $o2 = $('#arlib_btn_' + i);
                if (gui[i]) {
                    $o2.show();
                } else {
                    $o2.hide();
                }
            } catch(ex) {}
        }
    },
    pb_rename: function(data) {
        // $AR.log('pb_rename.');
        var d = data.replace(/[^0-9]*/g, '');
        if (d == '0') {
            $AR.lib.reload();
        } else {
            $AR.lib.lock_key = true;
            var t = '';
            switch (d) {
            case '1':
                t = 'An item with the name you specified ' +
                'already exists. Please choose a different name.';
                break;
            case '3':
                t = 'Invalid file extension. Please choose a ' +
                'different name.';
                break;
            default:
                t = 'An unspecified error occurred. Rename failed.';
            }
            // $AR.log('alerting');
            alert(t);
            $AR.lib.lock_ent = true;
            // $AR.log('done with alert');
            var $in = $($AR.lib.lock_o).find('input')[0];
            $in.select();
            $in.focus();
            // $AR.log('lock_key: ' + $AR.lib.lock_key);
            setTimeout('$AR.lib.lock_key = false;',300);
        }
    },
    pb_move: function(data){
        var d = data.replace(/[^0-9]*/g, '');
        if (d == '0') {
            $AR.lib.reload();
        } else {
            $AR.lib.lock_key = true;
            var t = '';
            switch (d) {
            case '1':
                t = 'One or more of the selected folders cannot be ' +
                'moved to the destination folder.';
                break;
            case '2':
                t = 'The destination folder already contains an item ' +
                ' with the same name as one of the items you are moving.';
                break;
            default:
                t = 'An unspecified error occurred. Move failed.';
            }
            alert(t);
        }
    },
    load_content: function(aff, crumb, action) {
        this.aff = aff;
        var act = (arguments.length > 2) ? '&action=' + action: '';
        if (swfu) {
            swfu.setPostParams({
                "aff": '' + aff,
                "uc_id": $AR.lib.uc_id,
                "uc_code": $AR.lib.uc_code
            });
        }
        // $AR.log('loading...');
        $('#arlib_con').load(
            'ajax.asp?ajax=lib_content&profile='+
            $AR.lib.profile+'&affCurrent=' + aff + act,
            $AR.lib.init2
        );
        // $AR.log('loaded.');
        if (crumb == 1) {
            $('#arlib_crumb').load(
                'ajax.asp?ajax=lib_crumb&profile='+
                $AR.lib.profile+'&affCurrent=' + aff
            );
        };
        return false;
    }
};