﻿// checks whether requirements for viewing webinar are met on client machine/browser
function ClientRequirement(
    id,
    label,
    status,
    result,
    message
)
{
    this.ID = id;
    this.Label = label;
    this.Status = status;
    this.Result = result;
    this.Message = message;
    this.ErrorNumber = 0;
    this.RowHtml = RequirementTableRow;
}


function RequirementTableRow() {
    return '<tr>'
        + '<td class="irs-req-lbl" style="width:200px;">'
        + this.Label
        + '</td>'

        + '<td class="irs-req-lbl" style="width:400px;">'
        + this.Result
        + '</td>'

        + ((this.ErrorNumber > 0)
            ?
            '<td class="irs-req-errno" style="width:100px;">Failed <sup>' + this.ErrorNumber + '</sup></td>'
            :
            '<td class="irs-req-ok" style="width:100px;">OK</td>'
            )

        + '</tr>';
}

var message = "";

var test_id = 'irs-req-met';
var error_id = 'irs-req-err';


var req_ns = 'not supported';

var aReq = new Array();
// aReq['java'] = req_ns;
aReq['os'] = new ClientRequirement('os','Operating System',0,'not recognized','');
aReq['scr_res'] = new ClientRequirement('scr_res','Screen Resolution',0,'not supported','');
aReq['color_depth'] = new ClientRequirement('color_depth','Screen Color Depth',0,'not supported','');
aReq['browser'] = new ClientRequirement('browser','Browser',0,'not recognized','');
aReq['flash'] = new ClientRequirement('flash','Flash',0,'not supported','');
aReq['connection_type'] = new ClientRequirement('connection_type','Connection',0,'not supported','');

var aReqError = new Array();
var req_errors = 0;

// make flash versionStr a global
var versionStr;

function clickIE() {
    if (document.all) {
        (message);
        return false;
    }
}

function clickNS(e) {
    if (document.layers||(document.getElementById&&!document.all)) {
        if (e.which == 2 || e.which == 3) {
            (message);
            return false;
        }
    }
}

function check_requirements() {
    if (document.layers) {
        document.captureEvents(Event.MOUSEDOWN); document.onmousedown = clickNS;
    } else {
        document.onmouseup = clickNS; document.oncontextmenu = clickIE;
    }
    document.oncontextmenu = new Function("return false")

    aReq['os'].Result = BrowserDetect.OS;

//    // java
//    if (pluginlist.indexOf("Java") > -1) { aReq['java']="Support Java scripts: OK"; }
//    else { aReqError.push("Please install the <a href='http://java.sun.com/products/plugin/downloads/''_blank'>Java Plug-in from Sun Microsystems</a>"); }

    // screen res
    aReq['scr_res'].Result = screen.width + 'x' + screen.height;
    if ((screen.width < 1024) || (screen.height < 768))
    {
        ReqError('scr_res',"Screen resolution must be at least 1024 x 768 pixels");
    }

    // screen color depth
    aReq['color_depth'].Result = screen.colorDepth;
    if (screen.colorDepth < 24) {
        ReqError('color_depth',"Screen color depth must be millions of colors (24 bit)");
    }

    // browser version
    
    if (navigator.userAgent.indexOf('Mac') != -1) { // is mac
        if (navigator.userAgent.indexOf('Safari') != -1) { aReq['browser'].Result = "Safari"; }  // is safari
        else { ReqError('browser',"Please use the Safari web browser"); } // non safari
    }
    else { // could be linux, but assume win
        switch (BrowserDetect.browser) {
            case 'Explorer':
                aReq['browser'].Result = 'Internet Explorer version '
                        + BrowserDetect.version;
                if (parseFloat(BrowserDetect.version) < 6.0){
                    ReqError('browser',"Please use <a href='http://www.microsoft.com/ie/''_blank'>Internet Explorer 6.0 or later</a>");
                }
                break;
            case 'Firefox':
                aReq['browser'].Result = 'Firefox version '
                        + BrowserDetect.version;
                if (parseFloat(BrowserDetect.version) < 3.0) {
                    ReqError('browser',"Please use Firefox version 3.0 or later</a>");
                }
                break;
            case 'Chrome':
                aReq['browser'].Result = 'Chrome version '
                        + BrowserDetect.version;
                if (parseFloat(BrowserDetect.version) < 1.0){
                    ReqError('browser',"Please use Chrome version 1 or later</a>");
                }
                break;
            default:
                ReqError('browser',"Unrecognized browser</a>");
                break;
        }
//        document.write('<p class="accent">You\'re using ' + BrowserDetect.browser + ' ' + BrowserDetect.version + ' on ' + BrowserDetect.OS + '!</p>');
    
    
//        iever = checkVersion();
//        if (iever == 1) { aValid.push("Internet Explorer version: OK<BR>"); }
//        else { aReqError.push("Please use <a href='http://www.microsoft.com/ie/''_blank'>Internet Explorer 6.0 or later</a>"); }
    }

    // Flash player version
    var hasReqestedVersion = DetectFlashVer(7, requiredMinorVersion, requiredRevision);
    aReq['flash'].Result = versionStr;
    if (!hasReqestedVersion) {
        ReqError('flash', "Please install <a href='http://www.adobe.com/go/getflashplayer''_blank'>Flash Player 9 or newer</a>");
        }

    CheckConnectionSpeed(
        '/images/backgrounds/DiscussionAnchorTitle_bk.bmp',
        118326
        );
}

var ccs_img;
var ccs_src;   // Picture to load
var ccs_size; 	 // Size of picture
var ccs_delay = 100;
var ccs_nb = -1;
var ccs_delay_max = 120000; // 
var timer1 = 0; var timer2 = 0;
var ccs_result = "";

function CheckConnectionSpeed(img_file_name, img_file_size) {
    // launch cx verification
    var dtTimeStamp = new Date();
    ccs_src = img_file_name + '?' + dtTimeStamp.valueOf();
    ccs_size = img_file_size;

    ccs_img = new Image();
    timer1 = new Date();
    timer1 = timer1.getTime();
    ccs_img.src = ccs_src + "?dummy=" + timer1;
    ccs_nb = 0;
    setTimeout("SpeedTimeCal()", ccs_delay);
}
function SpeedTimeCal() {
    var anim = "-"
    ccs_nb++;

    if (ccs_nb * ccs_delay >= ccs_delay_max) { // timed out
        ccs_result = ConnectionResult(0);
        aReq['connection_type'].Result = ccs_result;
        report_req_results();
    } else {
        if (ccs_img.complete) {
            timer2 = new Date(); timer2 = timer2.getTime();
            ccs_result = ConnectionResult(ccs_size / (timer2 - timer1));
            aReq['connection_type'].Result = ccs_result;
            report_req_results();
        } else {
            setTimeout("SpeedTimeCal()", ccs_delay)
        }
    }
}
function ConnectionResult(detected_speed) {
    ccs_nb = -1;
    res = "";
    ////set the speed rates range
    if (detected_speed == 0) {
        res = "Connection failed";
        ReqError('connection_type', "Connection failed");
    }
    if ((detected_speed > 0) && (detected_speed <= 3)) {
        res = "Dial-up modem 28k";
        ReqError('connection_type', "This webinar cannot be viewed via dial-up connection");    
        }
    if ((detected_speed > 3) && (detected_speed <= 6)) {
        res = "Dial-up modem 56k";
        ReqError('connection_type', "This webinar cannot be viewed via dial-up connection");
    }
    if ((detected_speed > 6) && (detected_speed <= 50)) {
        res = "Broadband ";
    }
    if ((detected_speed > 50) && (detected_speed <= 100)) {
        res = "Broadband";
    }
    if ((detected_speed > 100) && (detected_speed <= 200)) {
        res = "Broadband";
    }
    if (detected_speed > 200) {
        res = "Broadband/Local";
    }

    detected_speed = Math.round(detected_speed * 100) / 10;
    return res + " (" + detected_speed + " kbps)";
}

function ReqError(req_id, msg) {
    aReqError.push(msg);
    req_errors++;
    aReq[req_id].ErrorNumber = req_errors;
}

function report_req_results() {
    // report requirements not met
    var sRequirementsMessageHtml = '';
    var divReqSummaryBar = document.getElementById('req_summary_bar');
    var divReqSummary = document.getElementById('req_summary');

    if (aReqError.length > 0) {
        sRequirementsMessageHtml += '<div'
        + ' style="'
        + 'font: bold 16px arial;'
        + 'color: red;'
        + 'border: 2px red solid;'
        + 'padding: 10px;'
        + 'width:726px;'
        + '"'
        + '>'
        + "This system doesn't meet the following requirements:"
        + '<div'
        + ' style="'
        + 'color: Black;'
        + 'font: normal 14px arial;'
        + 'text-align: left;'
        + 'width: 500px;'
        + 'margin-left: 100px;'
        + '"'
        + '>'
        + '<ol>';
        for (i = 0; i < aReqError.length; i++) {
            sRequirementsMessageHtml += '<li>' + aReqError[i] + "</li>";
        }
        sRequirementsMessageHtml += '</ol>'
        + '</div>'
        + '</div>';
        var elErrors = document.getElementById(error_id);
        elErrors.innerHTML = sRequirementsMessageHtml;
        elErrors.style.display = 'block';
        divReqSummary.innerHTML = 'This system does not meet miniumum requirements';
        divReqSummaryBar.className = 'req_summary_err';
    }
    else {
        divReqSummary.innerHTML = 'This system meets minimum requirements';
        divReqSummaryBar.className = 'req_summary_ok';
    }
    var lnkRequirements = document.getElementById('irs-tr-btn');
    lnkRequirements.style.display='block';


}

function requirements_detail_table() {
    var sHtml = '';
    sHtml += '<table'
    + ' style="'
    + 'border-collapse: collapse;'
    + 'font: normal 12px arial;'
    + '"'
    + '>';
    
    sHtml += aReq['os'].RowHtml();
    sHtml += aReq['scr_res'].RowHtml();
    sHtml += aReq['color_depth'].RowHtml();
    sHtml += aReq['browser'].RowHtml();
    sHtml += aReq['flash'].RowHtml();
    sHtml += aReq['connection_type'].RowHtml();

    sHtml += '<tr>'
        + '<td class="irs-req-lbl" style="width:150px;">'
        + 'Audio'
        + '</td>'
        + '<td class="irs-req-lbl" colspan="2">'
        + 'This automated requirements test does not check audio.<br>'
        + 'Please ensure that your computer\'s sound system is functioning properly.'
        + '</td>'
    + '</tr>';

    sHtml += '<tr>'
    + '<td class="irs-req-lbl" colspan="10">'
    + '<div'
    + ' style="'
    + 'font: normal 14px arial;'
    + 'text-align: left;'
    + 'padding: 5px; 3px; 5px; 2px;'
    + 'width:700px;'
    + '"'
    + '>'
    + '<b>NOTE: If you will use a different system to participate in the webinar,</b><br>Browse to'
    + ' <a'
    + ' href="' + domain_root + 'IrsWebinar/IrsViewTest.aspx"'
    + '>'
    + domain_root + 'IrsWebinar/IrsViewTest.aspx'
    + '</a>'
    + '&nbsp;from that computer ahead of time'
    + ' to be sure it meets minimum system requirements.'
    + '</div>'
    + '</td>'
    + '</tr>';

    sHtml += '</table>';
    return sHtml;
}