/*global IMVU, YAHOO, Option, Recaptcha, escape, document, window */
/*jslint forin: true, white: true, undef: true, immed: true */
if (typeof IMVU === 'undefined') {
    IMVU = {};
}

function detach_elt(elt) {
    if (!elt) {
        return;
    }
    if (!elt.parentNode) {
        return;
    }
    elt.parentNode.removeChild(elt);
}

function html_escape(s) {
    return s;
}

function enableGiftDropdowns() {
    var s = YAHOO.util.Dom.get('gift_product_id');
    if (s) {
        s.selectedIndex = -1;
        s.selectedIndex = 0;
        s.disabled = false;
    }
    s = YAHOO.util.Dom.get('gift_track_id');
    if (s) {
        s.selectedIndex = -1;
        s.selectedIndex = 0;
        s.disabled = false;
    }
}

function rebuildProductDropdown(giftListInfo, sendMessageInfo) {
    var i, x, s = YAHOO.util.Dom.get('gift_product_id');
    if (!s || s.nodeName !== 'SELECT') {
        return;
    }
    while (s.length) {
        s.remove(0);
    }

    IMVU.messagePopup.fromInlineEmail.gift_handler(giftListInfo);

    s.options[s.length] = new Option('(no gift)', 0);

    s.options[s.length] = new Option("--- " + sendMessageInfo.recipient_name + "'s wish list ---", -3);
    for (i = 0; i < giftListInfo.product.recipient_wishlist.length; i++) {
        x = giftListInfo.product.recipient_wishlist[i];
        IMVU.MessageWidget.cacheProduct(x);
        s.options[s.length] = new Option(" (" + x.price + " cr) " + x.name, x.pid);
    }
    s.options[s.length] = new Option("--- My gift list (add from IMVU catalog pages) ---", -2);
    for (i = 0; i < giftListInfo.product.sender_giftlist.length; i++) {
        x = giftListInfo.product.sender_giftlist[i];
        IMVU.MessageWidget.cacheProduct(x);
        s.options[s.length] = new Option(" (" + x.price + " cr) " + x.name, x.pid);
    }
}

function rebuildMusicDropdown(giftListInfo, sendMessageInfo) {
    var i, x, s = YAHOO.util.Dom.get('gift_track_id');
    if (!s || s.nodeName !== 'SELECT') {
        return;
    }
    var price = sendMessageInfo.music_track_price;
    while (s.length) {
        s.remove(0);
    }
    s.options[s.length] = new Option('(no gift)', 0);
    s.options[s.length] = new Option("--- " + sendMessageInfo.recipient_name + "'s wish list ---", -3);
    for (i = 0; i < giftListInfo.music.recipient_wishlist.length; i++) {
        x = giftListInfo.music.recipient_wishlist[i];
        IMVU.MessageWidget.cacheTrack(x);
        s.options[s.length] = new Option(" (" + price + " cr) " + x.ArtistName + ": " + x.Title, x.TrackId);
    }
    s.options[s.length] = new Option("--- My wish list (add from music catalog pages) ---", -2);
    for (i = 0; i < giftListInfo.music.sender_wishlist.length; i++) {
        x = giftListInfo.music.sender_wishlist[i];
        IMVU.MessageWidget.cacheTrack(x);
        s.options[s.length] = new Option(" (" + price + " cr) " + x.ArtistName + ": " + x.Title, x.TrackId);
    }
}

function rebuildGiftDropdowns(giftListInfo, sendMessageInfo) {
    rebuildProductDropdown(giftListInfo, sendMessageInfo);
    rebuildMusicDropdown(giftListInfo, sendMessageInfo);
}

function refreshGiftDropdownsForRecipient(recipient_id, sendMessageInfo) {
    var cb = {
        success: function (o) {
            try {
                var giftListInfo = JSON.parse(o.responseText);
            } catch (e) {
                return;
            }
            rebuildGiftDropdowns(giftListInfo, sendMessageInfo);
            enableGiftDropdowns();
        }
    };

    YAHOO.util.Connect.asyncRequest(
        'POST',
        '/api/message_gifts.php',
        cb,
        JSON.stringify({recipient_id: recipient_id}));
}

function showGift() {
    YAHOO.util.Dom.removeClass('mw-gift-display', 'inactive');
    YAHOO.util.Dom.removeClass('mw-gift-wrap-spacer', 'inactive');
    YAHOO.util.Dom.removeClass('mw-gift-wrap', 'inactive');
    IMVU.messagePopup.dialog.center();
}

function doRecaptcha() {
    Recaptcha.create('6Ld0qQIAAAAAAKkCoYnFy5rhDhgve0nImaOeHtc4',
        'recaptcha-holder', {
            theme: 'red',
            callback: function () {
                IMVU.messagePopup.dialog.center();
            }
        }
    );
}

function disableGiftDropdowns() {
    var s = YAHOO.util.Dom.get('gift_product_id');
    if (s && s.nodeName === 'SELECT') {
        s.selectedIndex = -1;
        s.selectedIndex = 0;
        s.disabled = true;
    }
    s = YAHOO.util.Dom.get('gift_track_id');
    if (s && s.nodeName === 'SELECT') {
        s.selectedIndex = -1;
        s.selectedIndex = 0;
        s.disabled = true;
    }
}

function onRecipientChange(event, sendMessageInfo) {
    var s = YAHOO.util.Dom.get('choose_recipient_id');
    var recipient_id = parseInt(s.value, 10);
    disableGiftDropdowns();
    if (recipient_id) {
        YAHOO.util.Dom.get('hidden-recipient_id').value = recipient_id;
        refreshGiftDropdownsForRecipient(recipient_id, sendMessageInfo);
        sendMessageInfo.recipient_name = s.options[s.selectedIndex].text;
    }
}

function onGiftwrapChange(event, sendMessageInfo) {
    var s = YAHOO.util.Dom.get('gift_wrap_id');
    var i = parseInt(s.value, 10);
    var path = sendMessageInfo.gift_wrap_choices[i].image;
    path = path.replace(" ", "%20");
    var nv = 'url(http://userimages.imvu.com' + path + ')';
    YAHOO.util.Dom.setStyle('giftwrap', 'background-image', nv);
}

function showGiftDisplayInfo(gift_display_info) {
    var mgi = YAHOO.util.Dom.get('mw-gift-image');
    mgi.setAttribute('src', gift_display_info['image-url']);
    YAHOO.util.Dom.removeClass(mgi, 'music');
    YAHOO.util.Dom.removeClass(mgi, 'product');
    YAHOO.util.Dom.addClass(mgi, gift_display_info['image-class']);
    var mgs = YAHOO.util.Dom.get('mw-gift-sidetext');
    mgs.innerHTML = gift_display_info.sidetext;
    var mgil = YAHOO.util.Dom.get('mw-gift-image-link');
    mgil.href = gift_display_info['image-link-to'];
}

function hideGift() {
    YAHOO.util.Dom.addClass('mw-gift-wrap-spacer', 'inactive');
    YAHOO.util.Dom.addClass('mw-gift-wrap', 'inactive');
    YAHOO.util.Dom.addClass('mw-gift-display', 'inactive');
    YAHOO.util.Dom.addClass('mw-gift-note', 'inactive');
    var t = YAHOO.util.Dom.get('gift_track_id');
    var p = YAHOO.util.Dom.get('gift_product_id');
    if (t) {
        t.value = 0;
    }
    if (p) {
        p.value = 0;
    }
    IMVU.messagePopup.dialog.center();
}

function onGiftProductChange() {
    YAHOO.util.Dom.get('hidden-gift_track_id').value = 0;
    YAHOO.util.Dom.get('gift_track_id').value = 0;
    var s = YAHOO.util.Dom.get('gift_product_id');
    var i = parseInt(s.value, 10);
    YAHOO.util.Dom.get('hidden-gift_product_id').value = i;
    if (i < 1) {
        hideGift();
        return;
    }
    var gift_display_info = IMVU.MessageWidget.getGiftDisplayInfo('product', i);
    showGiftDisplayInfo(gift_display_info);
    showGift();
}

function onGiftTrackChange() {
    YAHOO.util.Dom.get('hidden-gift_product_id').value = 0;
    YAHOO.util.Dom.get('gift_product_id').value = 0;
    var s = YAHOO.util.Dom.get('gift_track_id');
    var i = parseInt(s.value, 10);
    YAHOO.util.Dom.get('hidden-gift_track_id').value = i;
    if (i < 1) {
        hideGift();
        return;
    }
    var gift_display_info = IMVU.MessageWidget.getGiftDisplayInfo('track', i);
    showGiftDisplayInfo(gift_display_info);
    showGift();
}

function onTextChange() {
    var e = YAHOO.util.Dom.get('charcount');
    var t = YAHOO.util.Dom.get('message_text');
    e.innerHTML = t.value.length;
}

function onClose() {
    IMVU.messagePopup.finished();
}

function reloadRecaptcha() {
    try {
        Recaptcha.reload();
    } catch (e) {}
}

function displayStatusMessage(clz, msg) {
    YAHOO.util.Dom.removeClass('message-send-status', 'good');
    YAHOO.util.Dom.removeClass('message-send-status', 'bad');
    YAHOO.util.Dom.addClass('message-send-status', clz);
    if (clz === 'bad') {
        reloadRecaptcha();
    }
    if (clz === 'bad') {
        msg = "<div id='message-error'>" + msg + "</div>";
    }
    if (msg) {
        YAHOO.util.Dom.get('message-send-status').innerHTML = msg;
        IMVU.messagePopup.dialog.center();
    }
}

function onSend(args) {
    displayStatusMessage('', '');
    var r = 0;
    try {
        r = parseInt(YAHOO.util.Dom.get('hidden-recipient_id').value, 10);
    } catch (e) {}
    if (!r) {
        displayStatusMessage('bad', "You must choose a contact to send to.");
        return;
    }

    YAHOO.util.Connect.setForm();
    var callback = {
        success: function (o) {
            IMVU.messagePopup.loadingDialog.hidePopup();
            try {
                var response = JSON.parse(o.responseText);
            } catch (e) {
                displayStatusMessage('bad', "There was an error communicating with the IMVU server.");
                return;
            }
            if (response.message_error && response.message_error !== 'no error') {
                displayStatusMessage('bad', response.message_error);
            } else {
                var msg = '';
                if (response.extra_messages) {
                    for (var i = 0; i < response.extra_messages.length; i++) {
                        msg = msg + "<br>" + response.extra_messages[i];
                    }
                }
                IMVU.messageCompleteShow('Message Sent', msg);
                IMVU.messagePopup.dialog.hide();

                var credits_element = YAHOO.util.Dom.get("credits_real_value");
                if (credits_element) {
                    credits_element.innerHTML = response.balance_credits_f;
                }

                var fredits_element = YAHOO.util.Dom.get("credits_promo_value");
                if (fredits_element) {
                    fredits_element.innerHTML = response.balance_promo_f;
                }
            }
        },
        failure: function (o) {
            IMVU.messagePopup.loadingDialog.hidePopup();

            displayStatusMessage('bad', "There was an error communicating with the IMVU server.");
        }
    };
    IMVU.messagePopup.loadingDialog.showPopup("Sending message...");

    var postargs = {};

    postargs.sender_id = YAHOO.util.Dom.get('hidden-sender_id').value;
    postargs.sauce = YAHOO.util.Dom.get('hidden-sauce').value;
    postargs.recipient_id = YAHOO.util.Dom.get('hidden-recipient_id').value;
    postargs.gift_track_id = YAHOO.util.Dom.get('hidden-gift_track_id').value;
    postargs.gift_album_id = YAHOO.util.Dom.get('hidden-gift_album_id').value;
    postargs.gift_product_id = YAHOO.util.Dom.get('hidden-gift_product_id').value;
    postargs.message_text = YAHOO.util.Dom.get('message_text').value;
    postargs.is_public = (YAHOO.util.Dom.get('is_public_checkbox').checked ? '1' : '');
    postargs.gift_wrap_id = YAHOO.util.Dom.get('gift_wrap_id').value;

    var recaptcha_challenge = YAHOO.util.Dom.get('recaptcha_challenge_field');
    var recaptcha_response = YAHOO.util.Dom.get('recaptcha_response_field');
    if (recaptcha_challenge) {
        postargs.recaptcha_challenge_field = recaptcha_challenge.value;
        postargs.recaptcha_response_field = recaptcha_response.value;
    }

    var postData = JSON.stringify(postargs);

    YAHOO.util.Connect.asyncRequest(
        'POST',
        '/api/send_message.php',
        callback,
        postData);
}

if (typeof IMVU.MessageWidget === 'undefined') {

    IMVU.MessageWidget = (function () {
        var self = this;

        this.cachedTrackInfo = {};
        this.cachedAlbumInfo = {};
        this.cachedProductInfo = {};

        this.cacheTrack = function (x) {
            if (!x) {
                return;
            }
            if (!x.TrackId) {
                return;
            }
            try {
                var id = parseInt(x.TrackId, 10);
            } catch (e) {
                return;
            }
            self.cachedTrackInfo[id] = x;
        };

        this.cacheAlbum = function (x) {
            if (!x) {
                return;
            }
            if (!x.AlbumId) {
                return;
            }
            try {
                var id = parseInt(x.AlbumId, 10);
            } catch (e) {
                return;
            }
            self.cachedAlbumInfo[id] = x;
        };

        this.cacheProduct = function (x) {
            if (!x) {
                return;
            }
            if (!x.pid) {
                return;
            }
            try {
                var id = parseInt(x.pid, 10);
            } catch (e) {
                return;
            }
            self.cachedProductInfo[id] = x;
        };

        this.getAlbumCoverUrl = function (albumId, size) {
            return 'http://ib3.mcnemanager.com/scl/2/crp/11/sz/' + size + '/' + size + '/' + albumId + '.cover?dflt=imvu.jpg';
        };

        this.getGiftDisplayInfo = function (gift_type, gift_id) {
            var image_url, title, artist, sidetext;
            if (gift_type === 'track') {
                var Track = self.cachedTrackInfo[gift_id];
                image_url = self.getAlbumCoverUrl(Track.AlbumId, 80);
                title = html_escape(Track.Title);
                artist = html_escape(Track.ArtistName);
                sidetext = "<a class='giftlink' href='/music/album.php?id=" + Track.AlbumId + "'>" + title + "</a><br/>by <a class='giftlink' href='/music/artist.php?id=" + Track.ArtistId + "'>" + artist + "</a>";
                return {
                    'image-class' : 'music',
                    'image-url' : image_url,
                    'image-link-to' : '/music/album.php?id=' + Track.AlbumId,
                    'sidetext' : sidetext
                };
            } else if (gift_type === 'album') {
                var Album = self.cachedAlbumInfo[gift_id];
                image_url = self.getAlbumCoverUrl(Album.AlbumId, 80);
                title = html_escape(Album.AlbumName);
                artist = html_escape(Album.ArtistName);
                sidetext = "<a class='giftlink' href='/music/album.php?id=" + Album.AlbumId + "'>" + title + "</a><br/>by <a class='giftlink' href='/music/artist.php?id=" + Album.ArtistId + "'>" + artist + "</a>";
                return {
                    'image-class' : 'music',
                    'image-url' : image_url,
                    'image-link-to' : '/music/album.php?id=' + Album.AlbumId,
                    'sidetext' : sidetext
                };
            } else if (gift_type === 'product') {
                var Product = self.cachedProductInfo[gift_id];
                image_url = Product.image_url;
                sidetext = "<a title='Click for product information.' href='" + Product.product_url + "'>" + Product.name + "</a>";
                return {
                    'image-class' : 'product',
                    'image-url' : image_url,
                    'image-link-to' : Product.product_url,
                    'sidetext' : sidetext
                };
            }
        };

        this.fixArgs = function (args) {
            if (args.force_recipient_id) {
                args.recipient_id = args.force_recipient_id;
                args.force_recipient = 1;
            }
            if (args.force_gift_track_id) {
                args.gift_track_id = args.force_gift_track_id;
                args.force_gift = 1;
            }
            if (args.force_gift_album_id) {
                args.gift_album_id = args.force_gift_album_id;
                args.force_gift = 1;
            }
            if (args.force_gift_product_id) {
                args.gift_product_id = args.force_gift_product_id;
                args.force_gift = 1;
            }
            if (!args.title) {
                if (args.force_gift) {
                    args.title = 'Send Gift';
                } else {
                    args.title = 'Send Message';
                }
            }
        };

        this.getSendMessageInfo = function (args, onComplete) {
            YAHOO.util.Connect.setForm();
            var cb = {
                success: function (o) {
                    try {
                        var sendMessageInfo = JSON.parse(o.responseText);
                    } catch (e) {
                        IMVU.messagePopup.loadingDialog.hidePopup();
                        IMVU.okMessageBox.showPopup("An error occurred", "There was an error communicating with the IMVU server.");
                        return;
                    }
                    if (sendMessageInfo.error) {
                        IMVU.messagePopup.loadingDialog.hidePopup();
                        IMVU.okMessageBox.showPopup("An error occurred", sendMessageInfo.error);
                        return;
                    }
                    self.refreshMarkup(sendMessageInfo, args, onComplete);
                },
                failure: function (o) {
                    IMVU.messagePopup.loadingDialog.hidePopup();
                    IMVU.okMessageBox.showPopup("An error occurred", "There was an error communicating with the IMVU server.");
                }
            };
            var postargs = 'a=1';
            if (args.recipient_id) {
                postargs += "&recipient_id=" + args.recipient_id;
            }
            if (args.gift_track_id) {
                postargs += "&gift_track_id=" + args.gift_track_id;
            }
            if (args.gift_album_id) {
                postargs += "&gift_album_id=" + args.gift_album_id;
            }
            if (args.gift_product_id) {
                postargs += "&gift_product_id=" + args.gift_product_id;
            }
            YAHOO.util.Connect.asyncRequest('POST', '/api/service/messaging/send-message-info.php', cb, postargs);
        };

        this.refreshForcedRecipient = function (sendMessageInfo, args) {
            YAHOO.util.Dom.addClass('maybe-recipient-selector', 'inactive');
            YAHOO.util.Dom.removeClass('maybe-forced-recipient', 'inactive');
            YAHOO.util.Dom.removeClass('maybe-forced-recipient-spacer', 'inactive');

            YAHOO.util.Dom.get('hidden-recipient_id').value = args.recipient_id;
            YAHOO.util.Dom.get('forced_recipient_name').innerHTML = sendMessageInfo.recipient_name;
            refreshGiftDropdownsForRecipient(args.recipient_id, sendMessageInfo);
        };

        this.refreshRecipientSelector = function (sendMessageInfo, args) {
            YAHOO.util.Dom.addClass('maybe-forced-recipient', 'inactive');
            YAHOO.util.Dom.addClass('maybe-forced-recipient-spacer', 'inactive');
            YAHOO.util.Dom.removeClass('maybe-recipient-selector', 'inactive');

            var recipientSelector = YAHOO.util.Dom.get('choose_recipient_id');
            while (recipientSelector.length > 1) {
                recipientSelector.remove(1);
            }
            for (var bid in sendMessageInfo.buddies) {
                if (sendMessageInfo.buddies.hasOwnProperty(bid)) {
                    var buddy = sendMessageInfo.buddies[bid];
                    recipientSelector.options[recipientSelector.length] = new Option(buddy.name, buddy.cid, args.recipient_id === buddy.cid);
                }
            }
        };

        this.refreshRecipient = function (sendMessageInfo, args) {
            if (args.recipient_id && args.force_recipient) {
                this.refreshForcedRecipient(sendMessageInfo, args);
            } else {
                this.refreshRecipientSelector(sendMessageInfo, args);
            }
        };

        this.refreshGiftMarkup = function (sendMessageInfo, args) {
            var gift_display_info = {};
            var was_forced = false;
            var forced_music_gift = false;
            var x, artist_name;
            if (args.force_gift && args.gift_track_id) {
                was_forced = true;
                YAHOO.util.Dom.removeClass('maybe-forced-gift-track-id', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-album-id', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-product-id', 'inactive');

                forced_music_gift = true;
                YAHOO.util.Dom.get('hidden-gift_track_id').value = args.gift_track_id;
                var track_name = 'Track';
                artist_name = 'Artist';
                x = self.cachedTrackInfo[args.gift_track_id];
                if (x) {
                    track_name = x.Title;
                    artist_name = x.ArtistName;
                }
                YAHOO.util.Dom.get('mw-music-price-track').innerHTML = sendMessageInfo.music_track_price;
                YAHOO.util.Dom.get('mw-music-title-track').innerHTML = html_escape(track_name);
                YAHOO.util.Dom.get('mw-music-artist-track').innerHTML = html_escape(artist_name);
                gift_display_info = self.getGiftDisplayInfo('track', args.gift_track_id);
            } else if (args.force_gift && args.gift_album_id) {
                was_forced = true;
                YAHOO.util.Dom.removeClass('maybe-forced-gift', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-track-id', 'inactive');
                YAHOO.util.Dom.removeClass('maybe-forced-gift-album-id', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-product-id', 'inactive');

                forced_music_gift = true;
                YAHOO.util.Dom.get('hidden-gift_album_id').value = args.gift_album_id;
                var album_name = 'Album';
                artist_name = 'Artist';
                x = self.cachedAlbumInfo[args.gift_album_id];
                if (x) {
                    album_name = x.AlbumName;
                    artist_name = x.ArtistName;
                }
                YAHOO.util.Dom.get('mw-music-price-album').innerHTML = (parseInt(args.gift_album.TrackCount, 10) * parseInt(sendMessageInfo.music_track_price, 10));
                YAHOO.util.Dom.get('mw-music-title-album').innerHTML = html_escape(album_name);
                YAHOO.util.Dom.get('mw-music-artist-album').innerHTML = html_escape(artist_name);
                gift_display_info = self.getGiftDisplayInfo('album', args.gift_album_id);
            } else if (args.force_gift && args.gift_product_id) {
                was_forced = true;
                YAHOO.util.Dom.removeClass('maybe-forced-gift', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-track-id', 'inactive');
                YAHOO.util.Dom.addClass('maybe-forced-gift-album-id', 'inactive');
                YAHOO.util.Dom.removeClass('maybe-forced-gift-product-id', 'inactive');

                YAHOO.util.Dom.get('hidden-gift_product_id').value = args.gift_product_id;
                var price = 'product_price';
                var name = 'product_name';
                x = self.cachedProductInfo[args.gift_product_id];
                if (x) {
                    price = x.price;
                    name = x.name;
                }
                YAHOO.util.Dom.get('maybe-music-price').innerHTML = price;
                YAHOO.util.Dom.get('maybe-product-name').innerHTML = html_escape(name);
                gift_display_info = self.getGiftDisplayInfo('product', args.gift_product_id);
            }

            if (was_forced) {
                YAHOO.util.Dom.removeClass('maybe-forced-gift', 'inactive');
                YAHOO.util.Dom.addClass("maybe-forced-gift-reset-spacer", "inactive");
                YAHOO.util.Dom.addClass("maybe-forced-gift-reset", "inactive");
                showGift();
            } else {
                YAHOO.util.Dom.addClass('maybe-forced-gift', 'inactive');
                YAHOO.util.Dom.removeClass("maybe-forced-gift-reset-spacer", "inactive");
                YAHOO.util.Dom.removeClass("maybe-forced-gift-reset", "inactive");
                YAHOO.util.Dom.removeClass('maybe-choose-gift-instructions', 'inactive');
                YAHOO.util.Dom.removeClass('maybe-choose-gift-spacer', 'inactive');
                YAHOO.util.Dom.removeClass('maybe-choose-gift-product', 'inactive');
                YAHOO.util.Dom.removeClass('maybe-choose-gift-music', 'inactive');
            }

            YAHOO.util.Dom.removeClass('maybe-choose-gift-product-spacer', 'inactive');

            var gift_wrap_id = args.gift_wrap_id;

            var giftWrapSelector = YAHOO.util.Dom.get('gift_wrap_id');
            while (giftWrapSelector.length > 0) {
                giftWrapSelector.remove(0);
            }

            IMVU.messagePopup.fromInlineEmail.wrap_handler(sendMessageInfo, args.paper, args.gift_wrap_id);

            for (var gwid in sendMessageInfo.gift_wrap_choices) {
                if (sendMessageInfo.gift_wrap_choices.hasOwnProperty(gwid)) {
                    var gw = sendMessageInfo.gift_wrap_choices[gwid];
                    if (!gift_wrap_id) {
                        gift_wrap_id = gw.id;
                    }
                    giftWrapSelector.options[giftWrapSelector.length] = new Option(html_escape(gw.text), gw.id, gift_wrap_id === gw.id);
                }
            }

            var effect_class = sendMessageInfo.vip_giftpaper_effect;
            YAHOO.util.Dom.get('vip-wrapper').className = effect_class;

            if (gift_wrap_id && sendMessageInfo.gift_wrap_choices[gift_wrap_id]) {
                var gift_wrap_url = sendMessageInfo.gift_wrap_choices[gift_wrap_id].image;
                var giftwrapBackground = "url(http://userimages.imvu.com" + gift_wrap_url + ")";
                YAHOO.util.Dom.setStyle('giftwrap', 'background-image', giftwrapBackground);
            }

            YAHOO.util.Dom.get('mw-gift-image-link').href = gift_display_info['image-link-to'];
            var mwGiftImage = YAHOO.util.Dom.get('mw-gift-image');
            mwGiftImage.src = gift_display_info['image-url'] || '#';
            mwGiftImage.className = gift_display_info['image-class'];
            YAHOO.util.Dom.get('mw-gift-sidetext').innerHTML = gift_display_info.sidetext;
        };

        this.refreshSendButton = function (args) {
            var send_button_text = "Send Message";
            var send_button_class = '';
            if (false) {
            } else if (args.title === 'Give Music') {
                send_button_class = 'Buy_Gift_Button';
                send_button_text = ' ';
            } else if (args.title === 'Send Gift') {
                send_button_class = 'Buy_Gift_Button';
                send_button_text = ' ';
            } else if (args.title === 'Send Message') {
                send_button_class = 'Send_Message';
                send_button_text = ' ';
            } else {
                send_button_text = args.title;
            }
            var btn = YAHOO.util.Dom.get('btn_send');
            btn.className = send_button_class;
            btn.innerHTML = send_button_text;
        };

        this.refreshRecaptcha = function (sendMessageInfo) {
            if (sendMessageInfo.needs_recaptcha) {
                YAHOO.util.Dom.removeClass('maybe-recaptcha', 'inactive');
                doRecaptcha();
            } else {
                YAHOO.util.Dom.addClass('maybe-recaptcha', 'inactive');
            }
        };

        this.refreshMarkup = function (sendMessageInfo, args, onComplete) {
            this.cacheTrack(args.gift_track);
            this.cacheAlbum(args.gift_album);
            this.cacheProduct(args.gift_product);
            this.cacheTrack(sendMessageInfo.gift_track);
            this.cacheAlbum(sendMessageInfo.gift_album);
            this.cacheProduct(sendMessageInfo.gift_product);

            YAHOO.util.Dom.get('hidden-sauce').value = sendMessageInfo.sauce;
            YAHOO.util.Dom.get('hidden-sender_id').value = sendMessageInfo.cid;
            YAHOO.util.Dom.get('max_charcount').innerHTML = sendMessageInfo.max_message_length;
            YAHOO.util.Dom.get('message_text').value = '';
            YAHOO.util.Dom.get('is_public_checkbox').checked = true;
            YAHOO.util.Dom.get('hidden-recipient_id').value = '';
            YAHOO.util.Dom.addClass('mw-gift-wrap', 'inactive');
            YAHOO.util.Dom.addClass('mw-gift-display', 'inactive');
            YAHOO.util.Dom.get('message-send-status').innerHTML = '';
            YAHOO.util.Dom.get('hidden-gift_album_id').value = '';
            YAHOO.util.Dom.get('hidden-gift_track_id').value = '';
            YAHOO.util.Dom.get('hidden-gift_product_id').value = '';
            YAHOO.util.Dom.get('gift_product_id').value = 0;
            YAHOO.util.Dom.get('gift_track_id').value = 0;
            YAHOO.util.Dom.get('gift_wrap_id').value = 0;

            this.refreshRecipient(sendMessageInfo, args);
            this.refreshRecaptcha(sendMessageInfo);
            this.refreshGiftMarkup(sendMessageInfo, args);
            this.refreshSendButton(args);

            onComplete(sendMessageInfo);
        };

        return this;
    }());
}

IMVU.messagePopup = {};
IMVU.messagePopup.fromInlineEmail = {};
IMVU.messagePopup.allDoneEvent = new YAHOO.util.CustomEvent('allDone', null);
IMVU.messagePopup.finished = function () {
    IMVU.messagePopup.dialog.hide();
    IMVU.messagePopup.allDoneEvent.fire();
    var iframe = document.getElementById("message-dialog-iframe");
    if (iframe) {
        iframe.style.display = "none";
    }
};

IMVU.messagePopupHideCrossdomain = function () {
    var wrapper = document.getElementById("message-dialog-iframe-wrapper");
    wrapper.style.display = "none";

    var iframe = document.getElementById("message-dialog-iframe");
    iframe.src = "/catalog/web_send_message_placeholder.php";
};

IMVU.messagePopupShowCrossdomain = function (args) {
    YAHOO.util.Event.onAvailable("message-dialog-iframe", function () {
        var wrapper = YAHOO.util.Dom.get("message-dialog-iframe-wrapper");
        
        if (YAHOO.env.ua.ie > 0) {        
            var repositionWrapper = function () {
                var wrapper = YAHOO.util.Dom.get("message-dialog-iframe-wrapper");
                var newTop = document.getElementsByTagName("body")[0].scrollTop;
                YAHOO.util.Dom.setY(wrapper, newTop);
            };
            
            wrapper.style.position = "absolute";
            YAHOO.util.Event.addListener(window, "scroll", repositionWrapper);
            YAHOO.util.Event.addListener(window, "resize", repositionWrapper);
            repositionWrapper();
        }
        
        wrapper.style.display = "block";
    
        var iframe = YAHOO.util.Dom.get("message-dialog-iframe");
        var newDomain;
        if (document.domain.indexOf('localhost') != -1) {
            newDomain = "localhost.imvu.com";
        } else {
            newDomain = "www.imvu.com";
        }
        
        var uri = "http://" + newDomain + "/catalog/web_send_message_widget.php?crossdomain=1";
        for (var k in args) {
            uri = uri + "&" + encodeURI(k) + "=" + encodeURI(args[k]);
        }
        
        YAHOO.util.Event.addListener(iframe, "load", function () {
            IMVU.loading.hidePopup();
        });
        iframe.src = uri;
    });
};

IMVU.messagePopupRequiresCrossdomain = function () {
    return (document.domain.indexOf('avatar') != -1);
};

IMVU.messagePopupShow = function (args, loadingDialog) {
    if (!args) {
        args = {};
    }
    if (!loadingDialog) {
        loadingDialog = IMVU.loading;
    }
    IMVU.messagePopup.loadingDialog = loadingDialog;
    IMVU.messagePopup.loadingDialog.showPopup("Loading...");
    
    if (IMVU.messagePopupRequiresCrossdomain()) {
        return IMVU.messagePopupShowCrossdomain(args);
    }

    YAHOO.util.Event.onAvailable("message-dialog", function () {
        IMVU.messagePopup.dialog = new YAHOO.widget.Dialog("message-dialog", {
            modal: true,
            zIndex: 6000,
            draggable: false,
            fixedcenter: true,
            close: true,
            visible: false, /*$is_gift*/
            hideaftersubmit: false
        });
        IMVU.messagePopup.dialog.cancelEvent.subscribe(IMVU.messagePopup.finished);

        IMVU.messagePopup.dialog.hide();

        IMVU.MessageWidget.fixArgs(args);

        if (args.title) {
            YAHOO.util.Dom.get('message-dialog-hd').innerHTML = args.title;
        }

        if (args.selected_gift_id) {
            IMVU.messagePopup.fromInlineEmail.product_gift_id = parseInt(args.selected_gift_id, 10);
        }

        if (args.paper) {
            IMVU.messagePopup.fromInlineEmail.product_gift_wrap_id = args.gift_wrap_id = args.paper;
        }


        IMVU.MessageWidget.getSendMessageInfo(args, function (sendMessageInfo) {
            YAHOO.util.Event.purgeElement('choose_recipient_id');
            YAHOO.util.Event.addListener('choose_recipient_id', 'change', onRecipientChange, sendMessageInfo);
            YAHOO.util.Event.addListener('choose_recipient_id', 'keyup', onRecipientChange, sendMessageInfo);

            YAHOO.util.Event.purgeElement('gift_wrap_id');
            YAHOO.util.Event.addListener('gift_wrap_id', 'change', onGiftwrapChange, sendMessageInfo);
            YAHOO.util.Event.addListener('gift_wrap_id', 'keyup', onGiftwrapChange, sendMessageInfo);

            YAHOO.util.Event.purgeElement('gift_product_id');
            YAHOO.util.Event.addListener('gift_product_id', 'change', onGiftProductChange);
            YAHOO.util.Event.addListener('gift_product_id', 'keyup', onGiftProductChange);

            YAHOO.util.Event.purgeElement('gift_track_id');
            YAHOO.util.Event.addListener('gift_track_id', 'change', onGiftTrackChange);
            YAHOO.util.Event.addListener('gift_track_id', 'keyup', onGiftTrackChange);
            YAHOO.util.Event.purgeElement('message_text');
            YAHOO.util.Event.addListener('message_text', 'keyup', onTextChange);
            YAHOO.util.Event.addListener('message_text', 'input', onTextChange);
            YAHOO.util.Event.addListener('message_text', 'focus', function () {
                this.focused = true;
            });
            YAHOO.util.Event.addListener('message_text', 'blur', function () {
                this.focused = false;
            });

            YAHOO.util.Event.purgeElement('mw_btn_cancel');
            YAHOO.util.Event.addListener('mw_btn_cancel', 'click', onClose);

            YAHOO.util.Event.purgeElement('btn_send');
            YAHOO.util.Event.addListener('btn_send', 'click', onSend, args);

            IMVU.messagePopup.loadingDialog.hidePopup();

            IMVU.messagePopup.dialog.innerElement.style.display = "block";
            IMVU.messagePopup.dialog.render(document.body);
            IMVU.messagePopup.dialog.center();
            IMVU.messagePopup.dialog.show();

            YAHOO.util.Dom.get("message_text").focus();

            if (args.message_text) {
                YAHOO.util.Dom.get("message_text").value = args.message_text;
            }
        });
    });
};

IMVU.messageComplete = new YAHOO.widget.Dialog("buy-gift-complete", {
    modal: true,
    zIndex: 5500,
    draggable: false,
    fixedcenter: true,
    close: false,
    visible: false
});

IMVU.messageComplete.hideEvent.subscribe(IMVU.messagePopup.finished);
IMVU.messageCompleteShow = function (hdr, msg) {
    IMVU.messageComplete.setHeader(hdr);
    var button = "<div><button id='message-complete-ok'></button><div><br><br><br></div></div>";
    var body = msg + button;
    IMVU.messageComplete.setBody(body);
    IMVU.messageComplete.render(document.body);
    YAHOO.util.Event.purgeElement('message-complete-ok');
    YAHOO.util.Event.addListener('message-complete-ok', 'click', function () {
        IMVU.messageComplete.hide();
    });
    IMVU.messageComplete.innerElement.style.display = "block";
    IMVU.messageComplete.show();
};

IMVU.okMessageBox = new YAHOO.widget.Dialog('imvu-ok-message', {
    modal: true,
    zIndex: 5500,
    draggable: false,
    fixedcenter: true,
    close: false,
    visible: false
});

IMVU.okMessageBox.showPopup = function (hdr, msg) {
    var button = "<div><button id='imvu-ok-message-okbutton'></button><div><br><br><br></div></div>";
    var body = msg + button;
    IMVU.okMessageBox.setHeader(hdr);
    IMVU.okMessageBox.setBody(body);
    IMVU.okMessageBox.render(document.body);
    YAHOO.util.Event.purgeElement('imvu-ok-message-okbutton');
    YAHOO.util.Event.addListener('imvu-ok-message-okbutton', 'click', function () {
        IMVU.okMessageBox.hide();
    });
    IMVU.okMessageBox.show();
};

IMVU.messagePopup.fromInlineEmail.wrap_handler = function (sendMessageInfo, id, gift_wrap_id) {
    if (id) {
        var giftWrapSelector = YAHOO.util.Dom.get('gift_wrap_id');

        for (var gwid in sendMessageInfo.gift_wrap_choices) {
            if (sendMessageInfo.gift_wrap_choices.hasOwnProperty(gwid)) {
                var gw = sendMessageInfo.gift_wrap_choices[gwid];

                if (gw.id === id) {
                    var l = giftWrapSelector.length;
                    giftWrapSelector.options[l] = new Option(html_escape(gw.text), gw.id, sendMessageInfo.gift_wrap_id === gw.id);
                    giftWrapSelector.selectedIndex = l;
                    IMVU.messagePopup.fromInlineEmail.product_gift_wrap_id = '';
                    onGiftwrapChange(null, sendMessageInfo);
                }
            }
        }
    }
};

IMVU.messagePopup.fromInlineEmail.gift_handler = function (giftListInfo) {
    var i, x;
    if (IMVU.messagePopup.fromInlineEmail.product_gift_id) {
        var selected_pid = IMVU.messagePopup.fromInlineEmail.product_gift_id;
        var s = YAHOO.util.Dom.get('gift_product_id');

        for (i = 0; i < giftListInfo.product.recipient_wishlist.length; i++) {
            x = giftListInfo.product.recipient_wishlist[i];
            if (x.pid === selected_pid) {
                IMVU.MessageWidget.cacheProduct(x);
                i = s.length;
                s.options[i] = new Option(" (" + x.price + " cr) " + x.name, x.pid);
                s.selectedIndex = i;
                IMVU.messagePopup.fromInlineEmail.product_gift_id = '';
                onGiftProductChange();
                return;
            }
        }

        for (i = 0; i < giftListInfo.product.sender_giftlist.length; i++) {
            x = giftListInfo.product.sender_giftlist[i];
            if (x.pid === selected_pid) {
                IMVU.MessageWidget.cacheProduct(x);
                i = s.length;
                s.options[i] = new Option(" (" + x.price + " cr) " + x.name, x.pid);
                s.selectedIndex = i;
                IMVU.messagePopup.fromInlineEmail.product_gift_id = '';
                onGiftProductChange();
                return;
            }
        }
    }
};

