/**
 * Handles media (map, photos, video, etc.) for property details page.
 * Requires swfobject.js to work with YouTube and SlideshowPro
 *
 */

/**
 * "Waiting" notice
 */
var waitpanel_opts = { modal: false,
                       visible: true,
                       zindex: 10,
                       draggable: false,
                       fixedcenter: false,
                       xy: [$(window).width()/2 - 220, 350],
                       close: false };
var waitpanel = new YAHOO.widget.Panel("waitpanel", waitpanel_opts);
waitpanel.setHeader('Loading video tour...');
waitpanel.setBody('<img src="http://l.yimg.com/a/i/us/per/gr/gp/rel_interstitial_loading.gif" />');

/**
 * Called when the player is fully loaded and the API is ready to receive calls.
 * See http://code.google.com/apis/youtube/js_api_reference.html#onYouTubePlayerReady
 *
 * When the player has finished loading, hide the "waiting" panel.
 */
function onYouTubePlayerReady(playerid) {
    waitpanel.hide();
}

function get_shower(object, elementid, callback) {
    function show() {
        if (object.swf_loaded) {
            $('#' + elementid).show();
            object.hidden = false;
        } else {
            if (object.show_waitpanel) {
                waitpanel.render(document.body);
            }
            swfobject.embedSWF(object.url,
                               object.elementid,
                               object.size[0].toString(),
                               object.size[1].toString(),
                               object.swfversion.toString(),
                               false,
                               object.flashvars,
                               object.params,
                               object.attrs,
                               function (e) {
                                   if (e.success) { 
                                       object.hidden = false;
                                       object.swf_loaded = true;
                                   } else {
                                       waitpanel.hide();
                                   }
                                   if (typeof callback != 'undefined') {
                                       callback(e);
                                   }
            });
        }
    }
    return show;
}

function get_hider(object, elementid) {
    function hide() {
        $('#' + elementid).hide();
        object.hidden = true;
    }
    return hide;
}


var YOUTUBE_DEFAULTS = { element_id: 'ytplayer',
                         size: [364, 265],
                         urlpattern: 'http://www.youtube.com/v/KEY' +
                                     '&enablejsapi=1' +
                                     '&playerapiid=PLYRID' +
                                     '&hl=en&fs=1',
                         swfversion: 8,
                         flashvars: {},
                         params: { allowScriptAccess: "always",
                                   allowFullScreen: true,
                                   wmode: "transparent" },
                         attrs: { id: "myytplayer" },
                         show_waitpanel: true
};
function PropertyVideoTour(elementid, property, opts, callback) {
    options = opts || {};
    this.elementid = elementid;
    this.size = options.size || YOUTUBE_DEFAULTS.size;
    urlpattern = options.urlpattern || YOUTUBE_DEFAULTS.urlpattern
    this.swfversion = options.swfversion || YOUTUBE_DEFAULTS.swfversion;
    this.flashvars = options.flashvars || YOUTUBE_DEFAULTS.flashvars
    this.params = options.params || YOUTUBE_DEFAULTS.params;
    this.attrs = options.attrs || YOUTUBE_DEFAULTS.attrs;
    this.url = urlpattern.replace('KEY', property.youtube).replace(
                                                      'PLYRID', this.attrs.id);
    this.show_waitpanel = typeof options.show_waitpanel != "undefined" ?
                          options.show_waitpanel :
                          YOUTUBE_DEFAULTS.show_waitpanel;
    this.hidden = true;
    this.swf_loaded = false;
    this.show = get_shower(this, this.attrs.id, callback);
    this.hide = get_hider(this, this.attrs.id);
}

var SLIDESHOWPRO_DEFAULTS = { element_id: 'slideshow_pro',
                              size: [362, 312],
                              url: "/static/swf/slideshowpro.swf",
                              swfversion: 9,
                              flashvars: {
                                       initialURL: escape(document.location),
                                       paramXMLPath: '' },
                              params: { base: ".",
                                        bgcolor: "#FFFFFF",
                                        allowfullscreen: "false",
                                        wmode: "transparent" },
                              attrs: {}
};

function PropertyPhotoGallery(elementid, property, opts) {
    options = opts || {};
    this.elementid = elementid;
    this.url = options.url || SLIDESHOWPRO_DEFAULTS.url;
    this.size = options.size || SLIDESHOWPRO_DEFAULTS.size;
    this.swfversion = options.swfversion || SLIDESHOWPRO_DEFAULTS.swfversion;
    this.flashvars = options.flashvars || SLIDESHOWPRO_DEFAULTS.flashvars;
    this.flashvars.paramXMLPath = property.sspXMLurl;
    this.params = options.params || SLIDESHOWPRO_DEFAULTS.params;
    this.attrs = options.attrs || SLIDESHOWPRO_DEFAULTS.attrs;
    this.hidden = true;
    this.swf_loaded = false;
    this.show = get_shower(this, this.elementid);
    this.hide = get_hider(this, this.elementid);
}

