if(!IMVU) IMVU = {};
if(!IMVU.AvatarCard) {
    IMVU.AvatarCard = {};
    IMVU.AvatarCard.avatarPopup = new YAHOO.widget.Dialog('avatar-popup', {
        width:'480px'
        ,modal:true
        ,zIndex:5900
        ,draggable:false
        ,fixedcenter:true
        ,close:true
        ,visible:false
    });
    IMVU.AvatarCard.showPopup = function(cid) {
        IMVU.AvatarCard.avatarPopup.hide();
        IMVU.loading.showPopup("Loading...");
        IMVU.AvatarCard.avatarPopup.render(document.body);
        IMVU.AvatarCard.avatarPopup.innerElement.style.display = "block";

        var showErrorDialog = function (errorHtml) {
            var errorDialog = new YAHOO.widget.SimpleDialog(
                "avatarWidgetErrorDialog", 
                {
                    modal: true,
                    visible: false,
                    draggable: false,
                    width: "500px",
                    fixedcenter: true
                }
            );
            errorDialog.setHeader("Error");
            errorDialog.setBody(errorHtml);
            errorDialog.render(document.body);
            errorDialog.show();
        };
        
        var cb = {
            success: function(o) {
                var error = "", redirect_url = "";
                
                try { 
                    var userInfo = JSON.parse(o.responseText); 
                    if (userInfo.error) {
                        error = userInfo.error;
                    } else if (!userInfo.avname) {
                        error = "An unknown error occurred."; 
                    }
                }
                catch(e) { 
                    error = "An unknown error occurred."; 
                }
                
                if (error == "") {
                    IMVU.AvatarCard.updateData(userInfo);
                } else {
                    IMVU.AvatarCard.avatarPopup.hide();
                    IMVU.loading.hidePopup();
                    
                    var errorHtml = "Sorry, we were unable to show you information on the avatar you requested.\n<br>" + error;
                    showErrorDialog(errorHtml);
                }
            },
            failure: function(o) {
                IMVU.AvatarCard.avatarPopup.hide();
                IMVU.loading.hidePopup();
                
                showErrorDialog("A network error has occurred.");
            }
        };
        
        YAHOO.util.Connect.setForm();
        YAHOO.util.Connect.asyncRequest('GET', '/api/avatarcard.php?cid='+cid, cb);
    }
    IMVU.AvatarCard.updateData = function(userInfo) {
        YAHOO.util.Dom.get('avatar-popup-name').innerHTML = userInfo.avname;
        YAHOO.util.Dom.get('avatar-popup-pic-link').href = userInfo.url;
        YAHOO.util.Dom.get('avatar-popup-pic').src = userInfo.avpic_url;
        YAHOO.util.Dom.get('avatar-popup-since').innerHTML = userInfo.registered;
        YAHOO.util.Dom.get('avatar-popup-gender').innerHTML = userInfo.gender; 
        if(userInfo.age != 'NA') {
            YAHOO.util.Dom.get('avatar-popup-age').style.display = '';
            YAHOO.util.Dom.get('avatar-popup-age-years').innerHTML = userInfo.age;
        } else {
            YAHOO.util.Dom.get('avatar-popup-age').style.display = 'none';
        }
        var apNode = YAHOO.util.Dom.get('avatar-popup-ap');
        if (apNode) {
            if(userInfo.show_ap) {
                apNode.style.display = '';
            } else {
                apNode.style.display = 'none';
            }
        }
        if(userInfo.show_ageverify) {
            YAHOO.util.Dom.get('avatar-popup-age-verify').style.display = '';
        } else {
            YAHOO.util.Dom.get('avatar-popup-age-verify').style.display = 'none';
        }
        if(userInfo.show_vip) {
            YAHOO.util.Dom.get('avatar-popup-vip').style.display = '';
        } else {
            YAHOO.util.Dom.get('avatar-popup-vip').style.display = 'none';
        }
        if(userInfo.show_badgecount) {
            YAHOO.util.Dom.get('avatar-popup-badge-count').style.display = '';
            YAHOO.util.Dom.get('avatar-popup-badge-number').innerHTML = userInfo.badge_count;
            YAHOO.util.Dom.get('avatar-popup-badge-count').className = 'badgecount-link sprite-holder level-'+userInfo.badge_level;
            YAHOO.util.Dom.get('avatar-popup-badge-count').title = userInfo.badge_count + ' badges';
            YAHOO.util.Dom.get('avatar-popup-redundant-badge-count').innerHTML = '('+userInfo.badge_count+')';
        } else {
            YAHOO.util.Dom.get('avatar-popup-badge-count').style.display = 'none';
        }
        YAHOO.util.Dom.get('avatar-popup-location').innerHTML = userInfo.location;
        YAHOO.util.Dom.get('avatar-popup-tagline').innerHTML = userInfo.tagline;
        if(userInfo.online) {
            YAHOO.util.Dom.get('avatar-popup-online').style.display = '';
            YAHOO.util.Dom.get('avatar-popup-invite').style.display = '';
            YAHOO.util.Dom.get('avatar-popup-invite').href = 'imvu:StartIM?avatar='+userInfo.avname+'&fromSite=1';
            YAHOO.util.Dom.get('avatar-popup-offline').style.display = 'none';
        } else {
            YAHOO.util.Dom.get('avatar-popup-online').style.display = 'none';
            YAHOO.util.Dom.get('avatar-popup-invite').style.display = 'none';
            YAHOO.util.Dom.get('avatar-popup-offline').style.display = '';
        }
        YAHOO.util.Dom.get('avatar-popup-visit-homepage').href = userInfo.url;
        if(userInfo.is_friend) {
            YAHOO.util.Dom.get('avatar-popup-add-buddy').style.display = 'none';
            YAHOO.util.Dom.get('avatar-popup-remove-buddy').style.display = '';
        } else {
            YAHOO.util.Dom.get('avatar-popup-add-buddy').style.display = '';
            YAHOO.util.Dom.get('avatar-popup-remove-buddy').style.display = 'none';
        }
        YAHOO.util.Dom.get('avatar-popup-badges-owner').innerHTML = userInfo.avname;

        for(var badgeid in userInfo.badge_layout) {
            var info = userInfo.badge_layout[badgeid];
            IMVU.badgeTooltip.setDesc(badgeid, info.description);
        }
        YAHOO.util.Dom.get('avatar-popup-badges-list').innerHTML = userInfo.badge_area_html;

        for (var badgeid in userInfo.badge_layout) {
            YAHOO.util.Event.purgeElement(badgeid);
            YAHOO.util.Event.addListener(badgeid, 'click', IMVU.badgeTooltip.show, badgeid);
        }

        IMVU.AvatarCard.avatarPopup.setHeader(userInfo.avname);
        IMVU.AvatarCard.avatarPopup.render(document.body);
        IMVU.AvatarCard.avatarPopup.innerElement.style.display = "block";

        IMVU.AvatarCard.avatarPopup.center();
        IMVU.AvatarCard.avatarPopup.show();
        IMVU.loading.hidePopup();
        YAHOO.util.Event.purgeElement('avatar-popup-send-message');
        YAHOO.util.Event.addListener('avatar-popup-send-message', 'click', function(e) {
            YAHOO.util.Event.stopEvent(e); 
            IMVU.AvatarCard.avatarPopup.hide();
            IMVU.messagePopupShow({force_recipient_id:userInfo.cid});
            return false;
        });
        YAHOO.util.Event.purgeElement('avatar-popup-ok');
        YAHOO.util.Event.addListener('avatar-popup-ok', 'click', function() {
            IMVU.AvatarCard.avatarPopup.hide();
            return false;
        });
        YAHOO.util.Event.purgeElement('avatar-popup-add-buddy');
        YAHOO.util.Event.addListener('avatar-popup-add-buddy', 'click', IMVU.AvatarCard.addBuddy, userInfo);
        YAHOO.util.Event.purgeElement('avatar-popup-remove-buddy');
        YAHOO.util.Event.addListener('avatar-popup-remove-buddy', 'click', IMVU.AvatarCard.removeBuddy, userInfo);
        YAHOO.util.Event.purgeElement('avatar-popup-block-user');
        YAHOO.util.Event.addListener('avatar-popup-block-user', 'click', IMVU.AvatarCard.blockUser, userInfo);
    }
    IMVU.AvatarCard.addBuddy = function(e, userInfo) {
        YAHOO.util.Event.stopEvent(e); 
        IMVU.AvatarCard.avatarPopup.hide();
        IMVU.loading.showPopup("Working...");
        var cb = {
            success: function(o) {
                IMVU.loading.hidePopup();
                try { var result = JSON.parse(o.responseText); }
                catch(e) { return; }
                IMVU.okMessageBox.showPopup('Buddy Added', 'A buddy request has been sent to '+userInfo.avname);
            },
            failure: function(o) {
                IMVU.loading.hidePopup();
                IMVU.okMessageBox.showPopup('Error', 'There was an error communicating with the server.<br>  Please try again later.');
            }
        };
        YAHOO.util.Connect.asyncRequest('POST', '/api/service/buddies/buddy_requests_service.php', cb, 'cid='+userInfo.viewer_cid+'&otheruser='+userInfo.cid+'&command=accept&dont_want_list=1');
    }
    IMVU.AvatarCard.removeBuddy = function(e, userInfo) {
        YAHOO.util.Event.stopEvent(e); 
        IMVU.AvatarCard.avatarPopup.hide();
        IMVU.loading.showPopup("Working...");
        var cb = {
            success: function(o) {
                IMVU.loading.hidePopup();
                try { var result = JSON.parse(o.responseText); }
                catch(e) { return; }
                IMVU.okMessageBox.showPopup('Buddy Removed', userInfo.avname + ' has been removed from your buddy list.');
            },
            failure: function(o) {
                IMVU.loading.hidePopup();
                IMVU.okMessageBox.showPopup('Error', 'There was an error communicating with the server.<br>  Please try again later.');
            }
        };
        YAHOO.util.Connect.asyncRequest('POST', '/api/service/buddies/buddy_requests_service.php', cb, 'cid='+userInfo.viewer_cid+'&otheruser='+userInfo.cid+'&command=remove&dont_want_list=1');
    }
    IMVU.AvatarCard.blockUser = function(e, userInfo) {
        YAHOO.util.Event.stopEvent(e); 
        IMVU.AvatarCard.avatarPopup.hide();
        IMVU.loading.showPopup("Working...");
        var cb = {
            success: function(o) {
                IMVU.loading.hidePopup();
                try { var result = JSON.parse(o.responseText); }
                catch(e) { return; }
                IMVU.okMessageBox.showPopup('User Blocked', userInfo.avname + ' will no longer be able to send you messages<br>or chat with you.<br><br>Go to your <a href="/catalog/web_blocked_list.php">Block List</a> to manage who you have blocked.');
            },
            failure: function(o) {
                IMVU.loading.hidePopup();
                IMVU.okMessageBox.showPopup('Error', 'There was an error communicating with the server.<br>  Please try again later.');
            }
        };
        YAHOO.util.Connect.asyncRequest('POST', '/api/service/buddies/buddy_requests_service.php', cb, 'cid='+userInfo.viewer_cid+'&otheruser='+userInfo.cid+'&command=block&dont_want_list=1');
    }
    IMVU.AvatarCard.olcids = {};
    IMVU.AvatarCard.observeOnlineStatus = function(cid) {
        cid = parseInt(cid);
        IMVU.AvatarCard.olcids[cid] = 1;
    }
    IMVU.AvatarCard.onlinePing = function() {
        YAHOO.util.Connect.setForm();
        var cb = {
            success : function(o) {
                try { var result = JSON.parse(o.responseText); }
                catch(e) { return; }
                for(var cid in result) {
                    var elts = YAHOO.util.Dom.getElementsByClassName('awonline-'+cid, 'div');
                    if(result[cid]) {
                        YAHOO.util.Dom.addClass(elts, 'olstatus-available');
                    } else {
                        YAHOO.util.Dom.removeClass(elts, 'olstatus-available');
                    }
                }
            }
        };
        var olstr='';
        for(var cid in IMVU.AvatarCard.olcids) {
            if(olstr) olstr += ",";
            olstr += cid;
        }
        YAHOO.util.Connect.asyncRequest('GET', '/catalog/web_status_updater.php?ol=1&list='+olstr, cb);
    }
    YAHOO.util.Event.onDOMReady(function() {
        IMVU.AvatarCard.onlinePing();
        setInterval("IMVU.AvatarCard.onlinePing()", 5*60*1000);
    });
}

