(function() { var initializing = false, fnTest = /xyz/.test(function() { xyz; }) ? /\b_super\b/ : /.*/; this.Class = function() { }; Class.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) { return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if (!initializing && this.init) this.init.apply(this, arguments); } Class.prototype = prototype; Class.constructor = Class; Class.extend = arguments.callee; return Class; }; })();
function loadData(url, isAsync, resultType, successHandler) { var delimiter = url.indexOf('?') > 0 ? '&' : '?'; url += delimiter + 'token=' + Math.ceil(Math.random() * 999999) + '-' + Math.ceil(Math.random() * 999999); $.ajax({ type: 'GET', url: url, dataType: resultType, async: isAsync || false, success: successHandler }); }
var PlayerType = {
    Silverlight: 'silverlight',
    Wmp: 'ms',
    Flash: 'flash',
    Real: 'real',
    AllSilverlight: 'allsilverlight',
    Unknown: 'unknown',
    toCode: function(playerType) {
        switch (playerType) {
            case PlayerType.Wmp: return 1;
            case PlayerType.Real: return 2;
            case PlayerType.Flash: return 3;
            case PlayerType.Silverlight: return 4;
            default: return -1;
        }
    }
};
var SourceType = { Live: 'Live', OnDemand: 'OnDemand' }
var PlayerState = {
    Playing: 'Playing',
    Stopped: 'Stopped',
    Paused: 'Paused',
    Buffering: 'Buffering',
    Closed: 'Closed',
    Opening: 'Opening',
    Waiting: 'Waiting',
    Unknown: 'Unknown',
    Complete: 'Complete',
    toCode: function(state) {
        switch (state) {
            case PlayerState.Playing: return 3;
            case PlayerState.Stopped: return 1;
            case PlayerState.Paused: return 2;
            case PlayerState.Buffering: return 6;
            case PlayerState.Opening: case PlayerState.Waiting: return 7;
            case PlayerState.Complete: return 8;
            case PlayerState.Closed: return 0;
            default: return -1;
        }
    },
    fromCode: function(code) {
        switch (code) {
            case 3: return PlayerState.Playing;
            case 1: return PlayerState.Stopped;
            case 2: return PlayerState.Paused;
            case 6: return PlayerState.Buffering;
            case 7: return PlayerState.Waiting;
            case 8: return PlayerState.Complete;
            case 0: return PlayerState.Closed;
            default: return PlayerState.Unknown;
        }
    }
};
function isOnDemand(vodOnly) {
    return vodOnly !== 'hidden';
}
function getBaseUrl(url) {
    var lastSlashIndex = -1;
    for (var i = 0; i < url.length; i++) {
        var ch = url.charAt(i);
        if (ch == '/') lastSlashIndex = i;
        else if (ch == '?') break;
    }
    return (lastSlashIndex < 0) ? '' : url.slice(0, lastSlashIndex + 1);
}
function isNullOrBlank(str) {
    return !str || /^[\s]*$/i.test(str);
}
function isImageUrl(url) {
    return url && /(.jpg|.jpeg|.gif|.png)$/i.test(url);
}
function isUrlLocal(url) {
    var baseUrl = getBaseUrl(url.toLowerCase());
    return isNullOrBlank(baseUrl) || baseUrl == getBaseUrl(window.location.href.toLowerCase()) || baseUrl == 'http://medicalmedia.upmc.com/webtraining/neuro/okada041907/'.toLowerCase() || baseUrl.indexOf('file://') == 0;
}
function buildVideoUrl(playerType, asx, src, page, defaultMediaUrl, additionalQuery) {
    var slEnabled = (playerType == PlayerType.Silverlight);
    var url = page || 'video.htm';
    var q = new Accordent.QueryString();
    q.add('player', playerType);
    if (additionalQuery) q.append(additionalQuery);

    var videoUrl = unescape(defaultMediaUrl);
    if (!videoUrl || videoUrl == '') {
        q.add('defaulturl', '1');
        videoUrl = asx;
        if (slEnabled === true) {
            if (src && __slInstalled) {
                try {
                    //Handle MAC SL1.0 no CC
                    for (var i = 0; i < __slInstalled.length; i++) {
                        var version = parseInt(__slInstalled[i]);
                        if (version == 1) {
                            videoUrl = src;
                            break;
                        }
                    }
                } catch (e) { }
            }
        }

        q.add('mediaUrl', videoUrl);
    }

    //Add parent's query string
    q.append(window.location.search);
    return '{0}{1}'.format(url, q.toString());
}
function evalOnOff(boolList, defaultValue) {
    if (!boolList) return defaultValue;
    var excepted = false;
    for (var i = 0; i < boolList.length; i++) {
        if (boolList[i] === true) {
            excepted = true;
            break;
        }
    }
    return !excepted && defaultValue;
}
function toSeconds(timeSpan) {
    try {
        var time = 0; var subs = timeSpan.split(':'); for (var i = 0; i < subs.length; i++)
            time += Math.round(parseInt(subs[i], 10) * Math.pow(60, subs.length - i - 1)); return time;
    }
    catch (e) { return -1; }
}
function hide(element) {
    visible(element, false);
}
function show(element) {
    visible(element, true);
}
function visible(element, isVisible) {
    if (element && typeof (element) == 'string')
        element = document.getElementById(element);
    if (!element) return;
    if (isVisible == undefined || isVisible == null) isVisible = true;
    element.style.display = !isVisible ? 'none' : 'block';
}
function parseCC(xml, lineSeparator) {
    var ccCollection = new Accordent.MarkerCollection();
    var results = getTagValues(xml, 'BODY');
    var syncTags = results[0].split('</SYNC>');
    for (var i = 0; i < syncTags.length; i++) {
        var syncText = closeTag(syncTags[i], 'SYNC');
        if (!syncText) continue;
        results = getTagValues(syncText, 'SYNC', true);
        var time = parseInt(results['start']) / 1000.0;
        var pTags = results[0].split('</P>');
        var ccText = '';

        var separator = '';
        for (var j = 0; j < pTags.length; j++) {
            var pText = closeTag(pTags[j], 'P');
            if (!pText) continue;
            results = getTagValues(pText, 'P', true);
            if (results['id'] && results['id'] !== '' && results[0] !== '') ccText += '{0}: '.format(results[0]);
            else {
                var tableTags = results[0].split('</table>');
                if (tableTags.length > 1) {
                    for (var h = 0; h < tableTags.length; h++) {
                        var tableText = closeTag(tableTags[h], 'table');
                        if (tableText) {
                            ccText += '{0}{1}'.format(separator, getTagValues(tableText, 'table')[0].trim());
                            separator = lineSeparator;
                        }
                    }
                }
                else {
                    ccText += results[0];
                    separator = lineSeparator;
                }
            }
        }

        ccCollection.add('CAPTION', ccText, time);
    }
    return ccCollection;
}
function getTagValues(xml, tag, readAttributes) {
    var sIndex = xml.indexOf(tag); if (sIndex >= 0)
        sIndex = xml.indexOf('>', sIndex); var eIndex = xml.lastIndexOf(tag); if (eIndex >= 0)
        eIndex -= 2; var result = [formatXmlValue(xml.substring(sIndex + 1, eIndex))]; if (readAttributes === true && sIndex > 0) {
        var pairs = xml.substring(0, sIndex).split(' '); for (var i = 0; i < pairs.length; i++) {
            var position = pairs[i].indexOf('='); if (position >= 0)
                result[pairs[i].substring(0, position).toLowerCase()] = pairs[i].substring(position + 1);
        }
    }
    return result;
}
function formatXmlValue(val) {
    var cdata = { open: '<![CDATA[', close: ']]>' };
    if (val && val.length >= (cdata.open.length + cdata.close.length) && val.substring(0, cdata.open.length) == cdata.open) {
        var closeTag = val.substring(val.length - cdata.close.length);
        if (closeTag == cdata.close)
            return val.slice(cdata.open.length, val.length - closeTag.length);
    }
    return val;
}
function closeTag(text, tag) { var index = text.indexOf('<' + tag); if (index < 0) return null; return text.substring(index) + '</' + tag + '>'; }
function trim(str, charList) { if (!str) return str; var list = charList || [' ', '\f', '\n', '\r', '\t']; var range = {}; range[1] = -1; range[-1] = str.length; var top = str.length; var direction = 1; var current = 0; var offset = 0; while ((current * direction) < top && direction >= -1) { var found = false; for (var i = 0; i < list.length; i++) { if (str.charAt(current - offset) == list[i]) { found = true; break; } } if (found) range[direction] = current - offset; else { top = 0; current = str.length + direction; offset = 1; direction -= 2; } current += direction; } return (range[1] > range[-1]) ? '' : str.slice(range[1] + 1, range[-1]); }
String.prototype.format = function() { var pattern = /\{\d+\}/g; var args = arguments; return this.replace(pattern, function(capture) { return args[capture.match(/\d+/)]; }); }; String.prototype.trim = function() { a = this.replace(/^\s+/, ''); return a.replace(/\s+$/, ''); }; function replaceAll(text, strA, strB) {
    while (text.indexOf(strA) != -1) { text = text.replace(strA, strB); }
    return text;
}
if (!window.Accordent)
    window.Accordent = {};
Accordent.QueryString = function(queryString) { if (!queryString) return; var urlParts = queryString.split('?'); if (urlParts.length > 2 || urlParts.length <= 0) return; queryString = urlParts[urlParts.length - 1]; var _pairs = queryString.split('&'); for (var i = 0; i < _pairs.length; i++) { var pos = _pairs[i].indexOf('='); if (pos >= 0) { var key = _pairs[i].substring(0, pos).toLowerCase(); var value = escape(_pairs[i].substring(pos + 1)); this[key] = value; } } }
Accordent.QueryString.prototype = { has: function(searchKey) { for (var key in this) { if (key == searchKey) return true; } return false; }, add: function(key, value) { this[key] = value; }, append: function(queryString) { var q = new Accordent.QueryString(queryString); for (var key in q) { if (q[key] && (typeof (q[key]) == 'string')) this.add(key, unescape(q[key])); } }, toString: function() { var prefix = '?'; var q = ''; for (var key in this) { if (typeof (this[key]) != 'function') { q += prefix + key + '=' + this[key]; prefix = '&'; } } return q; } }
Accordent.StringBuilder = function(value) { this._subStrings = [value]; }
Accordent.StringBuilder.prototype = { append: function(value) {
    if (value)
        this._subStrings.push(value); return this;
}, appendFormat: function() {
    var args = arguments; if (args.length > 0) {
        var value = args[0]; for (var i = 1; i < args.length; i++)
            value = replaceAll(value, '{' + (i - 1) + '}', args[i]); this._subStrings.push(value);
    }
    return this;
}, clear: function() { this._subStrings.length = 1; }, toString: function() { return this._subStrings.join(''); }
};
Accordent.Chapter = function(id, title, timeSpan, index) { this._id = (id == undefined || id == null) ? -1 : index; this._index = (index == undefined || index == null) ? -1 : index; this._title = title; this._timeSpan = timeSpan; this._time = -1; if (typeof (timeSpan) == 'string') { this._time = toSeconds(timeSpan); } }
Accordent.Chapter.prototype = { getId: function() { return this._id; }, getTitle: function() { return this._title; }, getTime: function() { return this._time; }, getIndex: function() { return this._index; } }
Accordent.ChapterCollection = function() {
    var _items = []; this.add = function(id, title, timeSpan) { var index = _items.length; _items.push(new Accordent.Chapter(id, title, timeSpan, index)); return index; }
    this.getItem = function(index) { return _items[index]; }
    this.getLength = function() { return _items.length; }
    this.find = function(timeMark) {
        for (var i = _items.length - 1; i >= 0; i--) {
            if (_items[i].getTime() <= timeMark)
                return _items[i];
        }
        return null;
    }
}
Accordent.Marker = function(type, text, timeMark, index) {
    var _originalText = text; var _index = (index == undefined || index == null) ? -1 : index; var _type = type; var _time = timeMark; var _text = _originalText; var _region = null; var _rendered = false; var delimiter = '&&'; var index = _originalText.indexOf(delimiter); if (index > 0) { _text = _originalText.slice(0, index); _region = _originalText.substr(index + delimiter.length); }
    this.hasRendered = function() { return _rendered; }
    this.getIndex = function() { return _index; }
    this.getType = function() { return _type; }
    this.getTime = function() { return _time; }
    this.getRegion = function() { return _region; }
    this.getText = function() { return _text; }
    this.render = function() { _rendered = true; }
}
Accordent.MarkerCollection = function(totalDurationInSeconds) {
    var _items = []; this._duration = totalDurationInSeconds; this.add = function(type, text, time) { var marker = new Accordent.Marker(type, text, time, _items.length); _items.push(marker); return marker; }
    this.getItem = function(index) { return _items[index]; }
    this.getLength = function() { return _items.length; }
    this.find = function(timeMark) {
        for (var i = _items.length - 1; i >= 0; i--) {
            if (_items[i].getTime() <= timeMark)
                return _items[i];
        }
        return null;
    }
}
Accordent.EventRegistration = function(element, type, handler, useCapture, isSilverlight) { this._element = element; this._type = type; this._handler = handler; this._useCapture = useCapture || false; this._isSilverlight = isSilverlight || false; }
Accordent.EventRegistration.prototype = { start: function() {
    if (this._isSilverlight === true)
        this._handler = this._element.addEventListener(this._type, this._handler); else if (this._element.addEventListener)
        this._element.addEventListener(this._type, this._handler, this._useCapture); else
        this._element.attachEvent("on" + this._type, this._handler); return this;
}, stop: function() {
    if (this._isSilverlight === true)
        this._element.removeEventListener(this._type, this._handler); else if (this._element.removeEventListener)
        this._element.removeEventListener(this._type, this._handler, this._useCapture); else
        this._element.detachEvent("on" + this._type, this._handler); return this;
}
}
Accordent.EventRegistrationList = function() { this._list = []; }
Accordent.EventRegistrationList.prototype = { add: function(element, type, handler, useCapture, isSilverlight, autoStart) { var newReg = new Accordent.EventRegistration(element, type, handler, useCapture, isSilverlight); if (!autoStart || autoStart === true) newReg.start(); this._list.push(newReg); return newReg; }, addSL: function(element, type, handler) { return this.add(element, type, handler, false, true, true); }, remove: function(element, type, listener) { }, dispose: function() {
    for (var i = 0; i < this._list.length; i++) { this._list[i].stop(); delete this._list[i]; }
    delete this._list;
}
}
