//
// CTMEmbedder
//
// Client side video embedder.
//
// JQuery is required.
//
// This tool is for Capture the Market customers only.  
//
// Kent.Johnson@fluid-consulting.com
//
// 01/23/2012 - Add support for multiple skins.
//


var CTMEmbedder = new function () {

    this.ctmpagedata = null;  // Data returned from page info request
    this.ctmwaitvar = true;   // True until the response for page info is returned 
    this.width = 5;           // Input Width
    this.height = 5;          // Input Height
    this.vpid = 0;            // Input VPID
    this.mediaplayer = null;  // Id of the div holding the player
    this.scriptloaded = 0;    // Number of scripts loaded
    this.timercount = 0;      // Number of times timer is started
    this.timerlength = 100;   // Time to wait for the scripts/video info to be loaded
    this.timermaxcount = 500; // Number of times to wait
    // URL for page info service
    //this.serviceurl = "http://ctmdev.fluid-consulting.com/Sandbox/PageEmbedQuery/tabid/186/Default.aspx?VPID=";
    this.serviceurl = "http://www.videoapt.com/PageEmbedQuery/tabid/181/Default.aspx?VPID=";

    this.setPageData = function (pd) {
        this.ctmpagedata = pd;
    };
    this.getPageData = function () {
        return this.ctmpagedata;
    };
    this.setWaitVar = function (wv) {
        this.ctmwaitvar = wv;
    };

    this.getWidth = function () {
        return this.width;
    };
    this.getHeight = function () {
        return this.height;
    };
    this.getMediaPlayer = function () {
        return this.mediaplayer;
    };
    this.incrementScriptLoaded = function () {
        this.scriptloaded++;
    }
    this.isApple = function () {
        if (navigator.userAgent.indexOf("iPhone") != -1 || navigator.userAgent.indexOf("iPhone") != -1) {
            return true;
        }
        else {
            return false;
        }
    };

    // Build the variable which are used for JW Player.
    this.getBasePlayerVars = function () {
        var playervars = {
            id: 'playerID',
            width: CTMEmbedder.getWidth(),
            height: CTMEmbedder.getHeight(),
            allowscriptaccess: 'always',
            allowfullscreen: 'true',
            controlbar: 'bottom',
            events: {
                onPlay: function (event) {
                    onMediaPlay(event);
                },
                onComplete: function (event) {
                    onMediaComplete("");
                },
                onTime: function (event) {
                    onMediaTime(event);
                },
                onPause: function (event) {
                    onMediaPause(event);
                },
                onBuffer: function (event) {
                    onMediaBuffer(event);
                },
                onIdle: function (event) {
                    onMediaIdle(event);
                },
                onError: function (event) {
                    onMediaError(event);
                }
            }
        };

        playervars["skin"] = "http://www.videoapt.com/JWPlayer/skins/" + this.ctmpagedata.skin;
        if (this.ctmpagedata.autostart == "1") {
            playervars["autostart"] = true;
        }
        else {
            playervars["autostart"] = false;
        }
        return playervars;
    };

    // Setup the tracker vars that apply to all embeddings
    this.setTrackerVars = function () {
        VPTracker.addAccount(this.ctmpagedata.ctmga);
        VPTracker.addAccount(this.ctmpagedata.mgmtga);
        VPTracker.addAccount(this.ctmpagedata.locga);
        VPTracker.setAction(this.ctmpagedata.action);
        VPTracker.setLabel(this.ctmpagedata.label);
        VPTracker.setVpid(this.ctmpagedata.vpid);
        VPTracker.setUserid("-1");
        VPTracker.setUrl(document.URL);
        VPTracker.setUseragent(navigator.userAgent);
        VPTracker.Tabid(0);
        VPTracker.setForceCrossDomain(1);
    };

    this.embedFailed = function () {
        var alternateContent = "<div style='color: red;'>Unable to load your video.<br /></div>";
        document.getElementById(this.mediaplayer).innerHTML = alternateContent;
    };

    // Actual embedding
    this.embedcode = function () {
        if (this.ctmpagedata === null) {
            this.embedFailed();
            return;
        }
        // Flash Server
        if (this.ctmpagedata.videoserver == "F") {


            var currentData = CTMEmbedder.getPageData();
            var hasProductInstall = DetectFlashVer(6, 0, 65);
            var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

            CTMEmbedder.setTrackerVars();
            VPTracker.setFlash(hasRequestedVersion);
            VPTracker.setServer(VPFLASHSERVER);
            VPTracker.pageLoad();

            if (!hasRequestedVersion) {
                var alternateContent = "<div style='color: blue;'>A plug-in is required to view the video.<br /> "
  	                                 + "This content requires the Adobe Flash Player.<br /> "
   	                                 + "<a href=http://www.adobe.com/go/getflash/>Get Flash</a> </div>";
                document.getElementById(this.mediaplayer).innerHTML = alternateContent;
            }
            else {


                var playervars = CTMEmbedder.getBasePlayerVars();
                playervars["flashplayer"] = 'http://www.videoapt.com/JWPlayer/player.swf';
                playervars["file"] =
                    "http://www.videoapt.com/Video/smilData/tabid/140/Default.aspx?VPID=" +
                        currentData.vpid + "&PMID=" + currentData.activevideoid;
                if (currentData.autostart == "0" && currentData.sspath.length > 0) {
                    playervars["image"] = currentData.sspath;
                }
                playervars["provider"] = "rtmp";
                playervars["rtmp.loadbalance"] = true;

                var x = CTMEmbedder.getMediaPlayer();
                jwplayer(CTMEmbedder.getMediaPlayer()).setup(playervars);
            }


        }
        // Internap Server
        else if (this.ctmpagedata.videoserver == "I") {
            if (this.isApple()) {

                var currentData = CTMEmbedder.getPageData()

                CTMEmbedder.setTrackerVars();
                VPTracker.setFlash(0);
                VPTracker.setServer(VPINTERNAPSERVER);
                VPTracker.setApple(1);
                VPTracker.pageLoad();

                var playervars = CTMEmbedder.getBasePlayerVars();
                playervars["file"] =
                        "http://capmarket.arr.internapcdn.net/capmarket/_definst_/inapcms/CMS"
                        + currentData.activevideoid + "/iphone/smil:" + currentData.activevideoid + ".smil/playlist.m3u8";

                if (currentData.sspath.length > 0) {
                    playervars["image"] = currentData.sspath;
                }
                else {
                    playervars["image"] =
                        "http://capmarket.arr.internapcdn.net/capmarket/inapcms/CMS"
                            + currentData.activevideoid + "/thumbnails/" + currentData.activevideoid + "thumbnail.png";
                }
                playervars["players"] = [{ type: "html5"}];


                jwplayer(CTMEmbedder.getMediaPlayer()).setup(playervars);


            }
            else {


                var currentData = CTMEmbedder.getPageData();
                var hasProductInstall = DetectFlashVer(6, 0, 65);
                var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

                CTMEmbedder.setTrackerVars();
                VPTracker.setFlash(hasRequestedVersion);
                VPTracker.setServer(VPINTERNAPSERVER);
                VPTracker.pageLoad();

                if (!hasRequestedVersion && !supports_video()) {
                    var alternateContent = "<div style='color: blue;'>A plug-in is required to view the video.<br /> "
  	                                 + "This content requires the Adobe Flash Player.<br /> "
   	                                 + "<a href=http://www.adobe.com/go/getflash/>Get Flash</a> </div>";
                    document.getElementById(this.mediaplayer).innerHTML = alternateContent;
                }
                else if (hasRequestedVersion) {
                    var playervars = CTMEmbedder.getBasePlayerVars();
                    playervars["flashplayer"] = 'http://www.videoapt.com/JWPlayer/player.swf';
                    playervars["file"] =
                            "http://capmarket.http.internapcdn.net/capmarket/inapcms/CMS"
                            + currentData.activevideoid + "/flash/" + currentData.activevideoid + ".smil";

                    if (currentData.autostart == "0" && currentData.sspath.length > 0) {
                        playervars["image"] = currentData.sspath;
                    }
                    playervars["provider"] = "rtmp";
                    playervars["rtmp.loadbalance"] = true;

                    jwplayer(CTMEmbedder.getMediaPlayer()).setup(playervars);
                }
                else {
                    var playervars = CTMEmbedder.getBasePlayerVars();
                    playervars["file"] =
                            "http://capmarket.http.internapcdn.net/capmarket/inapcms/CMS"
                            + currentData.activevideoid + "/iphone/" + currentData.activevideoid + "_300.mp4";

                    if (currentData.sspath.length > 0) {
                        playervars["image"] = currentData.sspath;
                    }
                    else {
                        playervars["image"] =
                            "http://capmarket.arr.internapcdn.net/capmarket/inapcms/CMS"
                              + currentData.activevideoid + "/thumbnails/" + currentData.activevideoid + "thumbnail.png";
                    }
                    playervars["players"] = [{ type: "html5"}];


                    jwplayer(CTMEmbedder.getMediaPlayer()).setup(playervars);
                }

            }
        }
        // Webserver
        else if (this.ctmpagedata.videoserver == "W") {


            var currentData = CTMEmbedder.getPageData();
            var hasProductInstall = DetectFlashVer(6, 0, 65);
            var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

            CTMEmbedder.setTrackerVars();
            VPTracker.setFlash(hasRequestedVersion);
            VPTracker.setServer(VPWEBSERVER);
            VPTracker.pageLoad();

            if (!hasRequestedVersion) {
                var alternateContent = "<div style='color: blue;'>A plug-in is required to view the video.<br /> "
  	                                 + "This content requires the Adobe Flash Player.<br /> "
   	                                 + "<a href=http://www.adobe.com/go/getflash/>Get Flash</a> </div>";
                document.getElementById(this.mediaplayer).innerHTML = alternateContent;
            }
            else {
                // redirect document write 
                var advertHtml = '';
                var oldWrite = document.write;
                document.write = function (str) { advertHtml += str; };

                AC_FL_RunContent(
                        "title", currentData.action,
                        "codebase", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0",
 			            "src", "http://www.videoapt.com/portals/0/filegallery/" + currentData.flashfilepath + currentData.flashfilename,
 			            "movie", "http://www.videoapt.com/portals/0/filegallery/" + currentData.flashfilepath + currentData.flashfilename,
 			            "width", CTMEmbedder.getWidth(),
 			            "height", CTMEmbedder.getHeight(),
                        "_cx", "7938",
                        "_cy", "5292",
			            "align", "left",
			            "id", "CTMPlayer",
			            "quality", "high",
			            "name", "CTMPlayer",
			            "allowScriptAccess", "always",
                        "allowFullScreen", "True",
                        "ShowControls", "1",
			            "type", "application/x-shockwave-flash",
                        "Base", "http://www.videoapt.com/portals/0/filegallery/" + currentData.flashfilepath,
			            "pluginspage", "http://www.macromedia.com/go/getflashplayer"
			        );
                document.getElementById(this.mediaplayer).innerHTML = advertHtml;
                // Restore document.write
                document.write = oldWrite;
            }

        }
        else {
            var alternateContent = "<div style='color: red;'>Unable to load your video.<br /></div>";
            document.getElementById(this.mediaplayer).innerHTML = alternateContent;
            return;
        }
    };

    this.getpagedata = function (data, textStatus, XMLHttpRequest) {
        CTMEmbedder.setPageData(data);
        CTMEmbedder.setWaitVar(false);
    };

    // Wait for the response and scripts.
    // Must limit the number of times the function is call because the request
    // may fail on Blackerry browsers avoiding an infinite wait loop.
    this.doctmwait = function () {
        this.timercount++;
        if (!this.ctmwaitvar && this.scriptloaded >= 4) {
            try {
                this.embedcode();
            }
            catch (e) {
                CTMEmbedder.embedFailed();
            }
        }
        else if (this.timercount > this.timermaxcount) {
            CTMEmbedder.embedFailed();
        }
        else {
            setTimeout("CTMEmbedder.doctmwait()", this.timerlength);

        }
    };
    this.getUID = function () {
        return (Math.random() * Math.pow(10, 17) +
               Math.random() * Math.pow(10, 17) +
               Math.random() * Math.pow(10, 17) +
               Math.random() * Math.pow(10, 17));
    };

    // The client uses this function. 
    this.embedCTMcode = function (vpid, width, height) {

        this.width = width;
        this.height = height;
        this.vpid = vpid;
        var spanid = "CTMPlayer" + this.getUID();
        document.writeln("<span id='" + spanid + "'\/>Loading...<\/span>");
        this.mediaplayer = spanid;
        var test = document.getElementById(spanid);
        // JasonP request do not have crossdomain restrictions.
        try {
            var geturl = this.serviceurl + vpid;
            jQuery.ajax({
                url: geturl,
                dataType: 'jsonp',
                success: CTMEmbedder.getpagedata,
                error: function (jqXHR, textStatus, errorThrown) { CTMEmbedder.embedFailed(); }
            });

            // The following statements must be last in this function to ensure
            // that all async commands are finished.
            this.loadScripts();
            this.doctmwait();
        }
        catch (e) {
            CTMEmbedder.embedFailed();
        }
    };

    // Load the java scripts required.
    // Datatype script ensures the request is allowed.
    this.loadScripts = function () {
        jQuery.ajax({
            url: 'http://www.google-analytics.com/ga.js',
            dataType: 'script',
            cache: true,
            error: function (jqXHR, textStatus, errorThrown) { CTMEmbedder.embedFailed(); },
            success: function () { CTMEmbedder.incrementScriptLoaded(); }
        });
        jQuery.ajax({
            url: 'http://www.videoapt.com/CTMPlayer/AC_OETags.js',
            dataType: 'script',
            cache: true,
            error: function (jqXHR, textStatus, errorThrown) { CTMEmbedder.embedFailed(); },
            success: function () { CTMEmbedder.incrementScriptLoaded(); }
        });
        jQuery.ajax({
            url: 'http://www.videoapt.com/CTMPlayer/video_page_ga.js',
            dataType: 'script',
            cache: true,
            error: function (jqXHR, textStatus, errorThrown) { CTMEmbedder.embedFailed(); },
            success: function () { CTMEmbedder.incrementScriptLoaded(); }
        });
        jQuery.ajax({
            url: 'http://www.videoapt.com/JWPlayer/jwplayer.js',
            dataType: 'script',
            cache: true,
            error: function (jqXHR, textStatus, errorThrown) { CTMEmbedder.embedFailed(); },
            success: function () { CTMEmbedder.incrementScriptLoaded(); }
        });
    }
};







