﻿$.fn.inlineVideo = function(o) {
    o = o || { WIDTH: 480, HEIGHT: 320 };
    o.flashsettings = o.flashsettings || {};
    return this.each(function() {
        var videoFrame = $(this);
        var options = {
          WIDTH: videoFrame.attr("videoWidth")||o.WIDTH||480,
          HEIGHT: videoFrame.attr("videoHeight")||o.HEIGHT||320,
          flashvars: o.flashvars||{},
          flashparams: o.flashparams || { allowFullScreen: true, wmode: 'transparent' },
          flashattr: o.flashattr || {},
          flashsettings: {
            swfurl: o.flashsettings.swfurl || "/common/flash/videoplayerNB.swf",
            alternateContent: o.flashsettings.alternateContent || ".alternateContent",
            alternateId: o.flashsettings.alternateId,
            version: o.flashsettings.version || "9.0.0",
            xiswfurl: o.flashsettings.xiswfurl||"/common/flash/expressInstall.swf"
          },
          coverImage: o.coverImage||"img.coverImg",
          coverImagePlay: o.coverImagePlay||"img.coverImgPlay",
          videoBox: o.videoBox || "div.videoBox",
          videoPlayer: o.videoPlayer || "div.videoPlayer",
          playButton: o.playButton || "a.playButton",
          closeButton: o.closeButton || "a.closeButton",
          duration: o.duration || 700
        }
        options.flashparams.wmode = 'transparent';
        //if (videoFrame.attr("videoFile")) options.flashvars.videoFile = videoFrame.attr("videoFile");
        if (videoFrame.attr("videoLink")) options.flashvars.mediaURL = videoFrame.attr("videoLink");
        if ( videoFrame.attr("videoAutoplay") ) options.flashvars.autoPlay = videoFrame.attr("videoAutoplay");
        if ( videoFrame.attr("videoLoop") ) options.flashvars.loop = videoFrame.attr("videoLoop");
        if ( videoFrame.attr("videoImage") ) options.flashvars.teaserURL = videoFrame.attr("videoImage");
        if ( videoFrame.attr("videoColor") ) options.flashvars.controlColor = videoFrame.attr("videoColor");
        if ( videoFrame.attr("videoBackColor") ) options.flashvars.controlBackColor = videoFrame.attr("videoBackColor");

        var img = videoFrame.find(options.coverImage);
        var imgPlay = videoFrame.find(options.coverImagePlay);
        var box = videoFrame.find(options.videoBox);
        var player = videoFrame.find(options.videoPlayer);
        var playButton = videoFrame.find(options.playButton);
        var closeButton = videoFrame.find(options.closeButton);
        var doWork = function(){
          var isLoaded = false;
          var hi = parseInt(img.css("height"))||img.height()||img.attr('height');
          var wi = parseInt(img.css("width"))||img.width()||img.attr('width');
          var H = options.HEIGHT;
          var W = options.WIDTH;
          var a = H*1.0/W;
          var b = 0;
          if ( W-wi!=0 ) {
            a = (H - hi) * 1.0 / (W - wi);
            b = (hi * W - H * wi) * 1.0 / (W - wi);
          }
          var prevWidthImg = wi;
          var imgNotActive = false;
          imgPlay.width(wi);
          imgPlay.height(hi);
          videoFrame.width(wi);
          box.width(wi);
          videoFrame.show();
          
          var doPlay = function() {
              if ( imgNotActive )
                return;
              imgNotActive = true;
              imgPlay.hide();
              playButton.hide();
              //in the animation, h will be h(w)=a*w+b
              videoFrame.animate({ width: W }, {
                  duration: options.duration,
                  easing: "swing",
                  step: function() {
                      var w = $(this).width();
                      if ( w > prevWidthImg ) {
                        box.width(w);
                        img.width(w);
                        img.height(parseInt(a * w + b));
                        prevWidthImg = w;
                      }
                  },
                  complete: function() {
                      if (!isLoaded) {
                          isLoaded = true;
                          try {
                              var flashvars = options.flashvars;
                              var params = options.flashparams;
                              var attributes = options.flashattr;
                              var flashsettings = options.flashsettings;
                              if ( !flashsettings.alternateId ) {
                                var alt = videoFrame.find(flashsettings.alternateContent);
                                if ( alt.size()>0 )
                                  flashsettings.alternateId = alt[0].id;
                              }
                              swfobject.embedSWF(
                                  flashsettings.swfurl,
                                  flashsettings.alternateId,
                                  "" + W,
                                  "" + H,
                                  flashsettings.version,
                                  flashsettings.xiswfurl,
                                  flashvars,
                                  params,
                                  attributes
                              );
                          } catch (ex) {
                              alert(ex.message);
                          }
                      }
                      img.hide();
                      player.show();
                      closeButton.show();
                  }
              });
          };
          imgPlay.click(doPlay);
          img.click(doPlay);
          playButton.click(doPlay);
          closeButton.click(function() {
              $(this).hide();
              player.hide();
              img.show();
              videoFrame.animate({ width: wi }, {
                  duration: options.duration,
                  easing: "swing",
                  step: function() {
                      var w = $(this).width();
                      if ( w<prevWidthImg ) {
                        box.width(w);
                        img.width(w);
                        img.height(parseInt(a * w + b));
                        prevWidthImg = w;
                      }
                  },
                  complete: function() {
                      imgNotActive = false;
                      playButton.show();
                      imgPlay.show();
                  }
              });
          });
        };
        /*
        //a bit of a change
        var memImg = new Image();
         
        memImg.onerror = function (evt){
          alert(this.src + " can't be loaded.");
        }
        memImg.onload = function (evt){
          alert(this.src + " is loaded: "+memImg.width+"x"+memImg.height);
          img.width(memImg.width);
          img.height(memImg.height);
          doWork();
        }
        memImg.src = img[0].src;
        */
        if ( img[0].complete )
          doWork();
        else
          img.load(doWork);
    });
}	    
$.fn.inlineFixVideo = function(o) {
    o = o || { WIDTH: 480, HEIGHT: 320 };
    o.flashsettings = o.flashsettings || {};
    return this.each(function() {
        var videoFrame=$(this);
        var options = {
          WIDTH: videoFrame.attr("videoWidth")||o.WIDTH||480,
          HEIGHT: videoFrame.attr("videoHeight")||o.HEIGHT||320,
          flashvars: o.flashvars||{},
          flashparams: o.flashparams || { allowFullScreen: true, wmode: 'transparent' },
          flashattr: o.flashattr || {},
          flashsettings: {
            swfurl: o.flashsettings.swfurl || "/common/flash/videoplayerNB.swf",
            alternateContent: o.flashsettings.alternateContent || ".alternateContent",
            alternateId: o.flashsettings.alternateId,
            version: o.flashsettings.version || "9.0.0",
            xiswfurl: o.flashsettings.xiswfurl||"/common/flash/expressInstall.swf"
          }
        }
        options.flashparams.wmode = 'transparent';
        //if (videoFrame.attr("videoFile")) options.flashvars.videoFile = videoFrame.attr("videoFile");
        if (videoFrame.attr("videoLink")) options.flashvars.mediaURL = videoFrame.attr("videoLink");
        if ( videoFrame.attr("videoAutoplay") ) options.flashvars.autoPlay = videoFrame.attr("videoAutoplay");
        if ( videoFrame.attr("videoLoop") ) options.flashvars.loop = videoFrame.attr("videoLoop");
        if ( videoFrame.attr("videoImage") ) options.flashvars.teaserURL = videoFrame.attr("videoImage");
        if ( videoFrame.attr("videoColor") ) options.flashvars.controlColor = videoFrame.attr("videoColor");
        if ( videoFrame.attr("videoBackColor") ) options.flashvars.controlBackColor = videoFrame.attr("videoBackColor");
        var H = options.HEIGHT;
        var W = options.WIDTH;
        try {
            var flashvars = options.flashvars;
            var params = options.flashparams;
            var attributes = options.flashattr;
            var flashsettings = options.flashsettings;
            if ( !flashsettings.alternateId ) {
              var alt = videoFrame.find(flashsettings.alternateContent);
              if ( alt.size()>0 )
                flashsettings.alternateId = alt[0].id;
            }
            swfobject.embedSWF(
                flashsettings.swfurl,
                flashsettings.alternateId,
                "" + W,
                "" + H,
                flashsettings.version,
                flashsettings.xiswfurl,
                flashvars,
                params,
                attributes
            );
        } catch (ex) {
            alert(ex.message);
        }
    });
}
