//Prototypes
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/, ''); };

var SiSTeR = SiSTeR === undefined ? {} : SiSTeR;
SiSTeR.Apps = {};
//SISTER APP CONSTANTS
SiSTeR.Apps.PICTURES = 'PicturePlayerApp';
SiSTeR.Apps.CONTACT = 'ContactTheDealer';
SiSTeR.Apps.INCIDENT = 'IncidentReport';
SiSTeR.Apps.SHARE = 'ShareApplication';
SiSTeR.Apps.EMBED = 'GetLinkHTML';

SiSTeR.Config = SiSTeR.Config == undefined ? {} : SiSTeR.Config;
SiSTeR.Config.set = function(v,d)
{
    this[v] = this[v] != undefined ? this[v] : d;
};
SiSTeR.queued = [];
SiSTeR.PlayerTypes = {};

SiSTeR.PlayerTypes.SWF = 'SWF';
SiSTeR.PlayerTypes.HTML = 'HTML';

SiSTeR.Playlist = {};
SiSTeR.READY = false;
SiSTeR.InitOverride = false;
SiSTeR.Config.set('width',480);
SiSTeR.Config.set('height',300);
SiSTeR.Config.set("wmode","window");
SiSTeR.Config.set('volume','80');
SiSTeR.Config.set('autoplay',true);
SiSTeR.Config.set('pubid','3DF');
SiSTeR.Config.set('startApp','');
SiSTeR.Config.set('completeApp','');
SiSTeR.Config.set('containerid','SiSTeR');
SiSTeR.Config.set('poster','http://3df.pod0.sister.tv/3df/3df-dist-2.0/vcl-title.jpg');
SiSTeR.Config.set('defaultPoster','http://3df.pod0.sister.tv/3df/3df-dist-2.0/vcl-title.jpg');
SiSTeR.Config.set('logo',null);
SiSTeR.Config.set('language','en-US');
SiSTeR.Config.set('title',SiSTeR.Config.poster);//Deprecated But Kept for Support
SiSTeR.Config.set('playerType',SiSTeR.PlayerTypes.SWF);

SiSTeR.Players = {
    load: function(pubid) {
        SiSTeR.Config.pubid = pubid;
        Draw3DFPlayer();
    }
};

SiSTeR.getElementById = function(value) {
    return document.getElementById(value);
};

SiSTeR.queue = function(func, apply) {
    SiSTeR.queued.push({'function': func, 'apply': apply});
};

SiSTeR.parseQueue = function()
{
    for(var i = 0; i < SiSTeR.queued.length; i++) {
	var func = SiSTeR.queued[i]['function'];
	var app = SiSTeR.queued[i]['apply'];
	func.apply(app);
    }
};

SiSTeR.Path = '';
SiSTeR.ParsedURL =
    {
        'url':null,
        'basename':null,
        'domain':null,
        'dirname':null,
        'querystring':null,
        'query':null,
        'parse': function(u)
        {

            this.url = u;
            this.basename = u.substring(u.lastIndexOf('/') + 1,u.indexOf('?'));
            this.domain = u.substring(u.indexOf('http://') + 7).substring(0,u.substring(u.indexOf('http://') + 7).indexOf('/'));
            this.dirname = u.substring(u.indexOf('http://') + 7 + this.domain.length,u.lastIndexOf('/')+1);
            this.querystring= u.substring((u.indexOf('?')) + 1);
            this.query = new Object();
            SiSTeR.Path = u.replace(/SiSTeR\.js.*/,'');
            //SiSTeR.Path = u.replace(/sdk\/SiSTeR\.js.*/,'');


            if(SiSTeR.Path.trim() === '')
            {
                SiSTeR.Path = './';
            }


            var separator = ',';
            var query = this.querystring;

            if ( query.length < 1 )
            {
                return false;
            }

            var keypairs = new Object();
            var n = 1;
            while (query.indexOf('&') > -1)
            {
                keypairs[n] = query.substring(0,query.indexOf('&'));
                query = query.substring((query.indexOf('&')) + 1);
                n++;
            }

            keypairs[n] = query;

            for (i in keypairs)
            {
                var keyName = keypairs[i].substring(0,keypairs[i].indexOf('='));
                var keyValue = keypairs[i].substring((keypairs[i].indexOf('=')) + 1);
                while (keyValue.indexOf('+') > -1)
                {
                    keyValue = keyValue.substring(0,keyValue.indexOf('+')) + ' ' + keyValue.substring(keyValue.indexOf('+') + 1);
                }
                keyValue = unescape(keyValue);

                if (this.query[keyName])
                {
                    this.query[keyName] = this.query[keyName] + separator + keyValue;
                } else {
                    this.query[keyName] = keyValue;
                }
            }
            return this;
        }
    };
SiSTeR.sdk = function ()
{

    var jq; //Local Reference to jQuery
    setupJQuery();
    function setupJQuery() {

        if(window.jQuery === undefined)
        {
            requireScript('http://3df.pod0.sister.tv/3df/3df-dist-2.0/js/jquery-1.7.1.min.js',handleJQueryLoaded);
        }else {
            jq = window.jQuery;
            SiSTeR.jQuery = jq;
            parseURL();
            requireScript('http://3df.pod0.sister.tv/3df/3df-dist-2.0/js/flash_detect_min.js',handleFlashDetectLoaded);
        }
    }

    function handleJQueryLoaded()
    {
        jq = window.jQuery.noConflict(true);
        SiSTeR.jQuery = jq;
        parseURL();
        //requireScript('publisher.js',handlePublisher);
        requireScript(SiSTeR.Path + '/js/flash_detect_min.js',handleFlashDetectLoaded);

    }

    function handlePublisher() {
        Publisher.init();
    }

    function handleFlashDetectLoaded()
    {
        if(FlashDetect.installed && SiSTeR.Config.playerType !== 'HTML')
        {
            SiSTeR.PlayerType = 'SWF';
            requireScript(SiSTeR.Path + '/js/swfobject.js',handleSWFObjectLoaded);
        }else
        {
            requireScript(SiSTeR.Path + '/js/modernizr.js',handleHTMLLoaded);
            requireScript('http://load.tubemogul.com/core?playerID=P-2S6-PDO&bootloaderID=B-I5Z-IY2',handleHTMLLoaded);
        }
    }

    function handleSWFObjectLoaded()
    {
        init();
    }

    function handleHTMLLoaded()
    {
        try {
            if(Modernizr !== undefined && TM !== undefined)
            {
                if(supportsH264())
                {
                    SiSTeR.PlayerType = 'HTML';
                }else
                {
                    SiSTeR.PlayerType = 'NONE';
		}
                init();
            }
        } catch (x) {
        }

    }

    SiSTeR.Draw3DFPlayer = function()
    {
        if(SiSTeR.READY) {
            if(!this.obj)
            {
		var container = jq('#'+SiSTeR.Config.containerid+'[rel*="SiSTeR.vid"]');
		//var container = jq('div[id="' + SiSTeR.Config.containerid + '"][rel*="SiSTeR.vid"]');
                if( container.length  == 0)
                    container = null;
            }else {
                var container = this.obj;
                if( container === undefined )
                    container = null;
            }
            if(container !== null)
            {
                SiSTeR.div = container;
                jq(SiSTeR.div).html('');
                if(!this.mediaid)
                {
                    if(jq(container).attr('rel')) {
                        SiSTeR.mediaid = jq(container).attr('rel').match(/SiSTeR\.vid\[(.+?)\]/)[1].replace(/mediaid\:\/\//i,"");
                    }else {
                        return;
                    }
                } else {

                    SiSTeR.mediaid = this.mediaid;
                }
                if(jq(container).attr('rel') !== undefined && jq(container).attr('rel').indexOf('SiSTeR.pic') != -1)
                {
                    SiSTeR.Config.poster = jq(container).attr('rel').match(/SiSTeR\.pic\[(.+?)\]/)[1];
                }else
                {
                    SiSTeR.Config.poster = SiSTeR.Config.defaultPoster;
                }
                switch(SiSTeR.PlayerType)
                {
                case 'HTML':
                    DrawHTML();
                    break;
                case 'SWF':
                    DrawSWF();
                    break;
                case 'NONE':
                    DrawNone();
                    break;
                }
            }
        }else
        {
            SiSTeR.InitOverride = true;
            SiSTeR.queue(SiSTeR.Draw3DFPlayer,this);
        }
    };

    function DrawHTML()
    {
        var playlist = SiSTeR.Path + '/js-pl.php?c=playlist:' + SiSTeR.mediaid + "&p=" + SiSTeR.Config.pubid;
        jq.ajax({
                    url: playlist,
                    dataType: 'jsonp',
                    context: this,
                    success: function(data, textStatus, jqXHR) { playlistLoaded(data); }
                });
    }

    function loadPlayer()
    {
        var t = SiSTeR.Tracks.video;
        var playlist = [];
        for(var i = 0; i < t.length; i++)
        {
            var file = t[i];
            playlist.push(file);
        }
        var video = jq('<video></video>');
        var flashvars = {
            autoplay: SiSTeR.Config.autoplay,
            src: playlist[0],
            pubid: SiSTeR.Config.pubid,
            poster: SiSTeR.Config.poster,
            volume: 80,
            width: SiSTeR.Config.width,
            height: SiSTeR.Config.height - 30,
            controls: 'controls',
            id: 'SiSTeRVideoTag',
            'x-webkit-airplay': 'allow'
        };
        video.attr(flashvars);
        jq(SiSTeR.div).html('');
        jq(SiSTeR.div).append(video);

        setupTMTracker();
    }

    function setupTMTracker() {
        if ( TM )
        {
            SiSTeR.TMTracker = TM.InPlay.NewPlayer({
                                                       id: "SiSTeRVideoTag",
                                                       playerID: "P-2S6-PDO",
                                                       publisherID: SiSTeR.Config.pubid,
                                                       videoID: SiSTeR.trackerInfo.videoid,
                                                       playerTrackers: [SiSTeR.trackerInfo.trackerid]
                                                   });
        }
    }

    function playlistLoaded(playlist)
    {   var doc = playlist[0];

        SiSTeR.Playlist = {
            dealerMetadata: doc['dealer'],
            vehicleMetadata: doc['vehicle'],
            videoMetadata: doc['meta'],
            tracklist: doc['trackList']['track']
        };
        SiSTeR.trackerInfo = {'videoid': SiSTeR.Playlist.videoMetadata['videoid'], 'trackerid': SiSTeR.Playlist.videoMetadata['trackerid']};

        var t = {'video': [], 'audio': [], 'images': []};
        var hasMedia = false;
        if(typeof SiSTeR.Playlist.tracklist === 'object')
        {
            if(jq.isArray(SiSTeR.Playlist.tracklist))
            {
                for(var i = 0; i < SiSTeR.Playlist.tracklist.length; i++) {
                    var track = SiSTeR.Playlist.tracklist[i];
                    var type = track['type'];
                    var file = track['location'] !== undefined ? track['location'] : track['audio'];
                    var place = type == '2DF' ? t.audio : t.video;
                    if(file !== '' && file.indexOf(SiSTeR.mediaid) !== -1)
                    {
                        place.push(file);
                        hasMedia = true;
                    }
                }
            } else {
                var track = SiSTeR.Playlist.tracklist;
                var type = track['type'];
                var file = track['location'] !== undefined ? track['location'] : track['audio'];
                var place = type == '2DF' ? t.audio : t.video;
                if(file !== '' && file.indexOf(SiSTeR.mediaid) !== -1)
                {
                    place.push(file);
                    hasMedia = true;
                }
            }
        }else {
            console.log("There seem to be no files in the playlist",SiSTeR.Playlist);
        }
        SiSTeR.Tracks = t;
        if(hasMedia)
            loadPlayer();
        else
            DrawNone();

    }

    function DrawSWF()
    {
        var player = SiSTeR.Path + 'player.swf';
        var width = SiSTeR.Config.width;
        var height = SiSTeR.Config.height;
        var flashvars = {
            autostart: SiSTeR.Config.autoplay,
            mediaid: SiSTeR.mediaid,
            pubid: SiSTeR.Config.pubid,
            image: SiSTeR.Config.poster,
            volume: SiSTeR.Config.volume
        };
        if(SiSTeR.Config.startApp != '')
        {
            flashvars['startapp'] = SiSTeR.Config.startApp;
        }
        if(SiSTeR.Config.completeApp != '')
        {
            flashvars['completeapp'] = SiSTeR.Config.completeApp;
        }

        var params = {
            quality: 'high',
            scale: 'noscale',
            bgcolor:'0x000000',
            allowscriptaccess: 'always',
            allowfullscreen: 'true',
	    wmode: SiSTeR.Config.wmode
        };
        var attributes = {
            id: '3DF_Player'
        };
        var cont = jq('<div id="SiSTeRVideoTag"></div>');
        jq(SiSTeR.div).html('').append(cont);
        var divid = cont.attr !== undefined ? cont.attr('id') : cont.id;
	swfobject.embedSWF(player, divid, width, height, "10.0.0", "expressInstall.swf", flashvars, params, attributes);
    }

    function DrawNone()
    {
        if(SiSTeR.Config.ErrorImage != '')
        {
            var noimage = jq('<img></img>').attr('src',SiSTeR.Config.ErrorImage);
            jq(SiSTeR.div).append(noimage);
        }
    }

    function parseURL()
    {
        jq.each(jq(document).find('script'),function() {
                    var url = jq(this).attr('src');

                    if(url != undefined && url.indexOf('SiSTeR.js') != -1) {
                        SiSTeR.ParsedURL.parse(url);
                        SiSTeR.Config.set("ErrorImage",SiSTeR.Path + 'mobilena.png');
                    }
                });
    }

    function init()
    {
        jq(document).ready(function($) {
                               SiSTeR.READY = true;
                               SiSTeR.parseQueue();
                               if(SiSTeR.InitOverride !== true) {
                                   SiSTeR.Draw3DFPlayer();
                               }
                           });
    }

    function supportsH264()
    {
        var v = document.createElement('video');
        var can = v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');

        return can === "probably" || can === "maybe" ? true : false;
    }

    function requireScript(url,handler)
    {
        var s = document.createElement('script');
        s.setAttribute('type','text/javascript');
        s.setAttribute('src', url);
        s.onload = handler;
        s.onreadystatechange = function () {
            if(this.readyState == 'complete' || this.readyState == 'loaded')
            {
                handler();
            }
        };
        (document.getElementsByTagName('head')[0] || document.documentElement).appendChild(s);
    };
}
SiSTeR.sdk();
Draw3DFPlayer = SiSTeR.Draw3DFPlayer;
