﻿var _Windows = 'Windows';
var _Mac = 'Mac';
var _Linux = 'Linux';
var _Unknown = 'Unknown';
var _Explorer = 'Explorer';
var _Safari = 'Safari';
var _Firefox = 'Firefox';
var _Opera = 'Opera';
var _Beta1 = '2.0.30226';
var _Beta2 = '2.0.30523';
var _RTM = '2.0.31005';

function IsSilverlightEnabled() {
    var version = GetSilverlightVersion();
    var installed = (version == _RTM);
    var enabled = installed;
    try {
        if (GetSilverlightEnabled() == false)
            enabled = false;
    }
    catch (err) {
        enabled = installed;
    }
    return enabled;
}

function InitializeSilverlight() {
    var notice = document.getElementById('injected');
    if (notice != null) {
        var browserMessage = '';
        var generalMessage = '';

        var browserName = BrowserDetect.browser;
        var browserVersion = BrowserDetect.version;
        var clientOS = BrowserDetect.OS;
        var silverlightVersion = GetSilverlightVersion();

        var restartRequired = true;
        var silverlightSupported = false;
        var useMoonlight = false;
        var usingBeta1 = (silverlightVersion == _Beta1);
        var usingBeta2 = (silverlightVersion == _Beta2);

        if (clientOS == _Windows) {
            if (browserName == _Explorer) {
                silverlightSupported = true;
                if (silverlightVersion != '') {
                    restartRequired = false;
                }
            } else if (browserName == _Firefox && browserVersion > 1) {
                silverlightSupported = true;
            }
        }
        else if (clientOS == _Mac) {
            if (browserName == _Safari) {
                silverlightSupported = true;
            } else if (browserName == _Firefox && browserVersion > 1) {
                silverlightSupported = true;
            }
        }
        else if (clientOS == _Linux) {
            useMoonlight = true;
        }

        if (silverlightSupported) {
            if (usingBeta1 || usingBeta2) {
                if (usingBeta1) {
                    generalMessage = 'You have the '
                }
                else if (usingBeta2) {
                    generalMessage = 'You have the second ';
                }
                generalMessage += 'Beta preview of Silverlight&nbsp;2.0, when you need the final version of Silverlight&nbsp;2.0.&nbsp ';
            } else {
                generalMessage = '';
            }
            generalMessage += '<strong>Click here to install Silverlight&nbsp;2.0.</strong>';
            browserMessage += 'When installation is complete, ';
            if (restartRequired)
                browserMessage += 'restart your browser to activate the Silverlight content.';
            else
                browserMessage += 'refresh (press F5) your browser to activate the Silverlight content.';
        }
        else if (useMoonlight) {
            generalMessage += 'Linux support for Silverlight is provided by the ';
            generalMessage += '<a href="http://www.mono-project.com/Moonlight">Moonlight</a> project.';
        }
        else {
            generalMessage += 'Your browser may not be supported by Microsoft Silverlight. ';
            generalMessage += 'Please view the <a href="http://www.microsoft.com/silverlight/system-requirements.aspx">';
            generalMessage += 'system requirements</a> for more information.';
        }
        if (silverlightSupported == false) {
            var coverup = document.getElementById('get_silverlight');
            if (coverup) { coverup.style.display = 'none'; }
        }

        notice.innerHTML =
            '<p class="browser_general">' + generalMessage + '</p>' +
            '<p class="browser_specific">' + browserMessage + '</p>';
    }
}

function GetSilverlightEnabled() {
    if (document.enableSilverlight == null) {
        ParseQueryString();
    }
    return document.enableSilverlight;
}

function Goto(appPath, query) {
    var currentSectionAndPanel = GetStartSectionAndPanel();
    if (currentSectionAndPanel) {
        currentSectionAndPanel = GetStartSectionAndPanel().toLowerCase();
        var dontMove = (currentSectionAndPanel == "#home") && (query != 'silverlight');
        var join = (appPath != null && appPath.length > 1) ? '/' : '';
        var urlPath = (dontMove) ? '' : GetPathForRedirect(currentSectionAndPanel);
        var urlQuery = (query) ? '?' + query : '';
        window.location = appPath + join + urlPath + urlQuery;
    }
}

function Content(location) {
    window.location = location + GetArticleID();
}

function Template(location) {
    window.location = location + GetTemplateID();
}

function GetStartSectionAndPanel() {
    return GetInnerHtml('silverlightParams');
}

function SetStartSectionAndPanel(section, panel, sheet, articleID, templateID) {
    var params = '#' + section;
    if (panel && panel.length > 0)
        params += '_' + panel;
    if (sheet && sheet.length > 0)
        params += '_' + sheet;
    SetInnerHtml('silverlightParams', params);
    SetInnerHtml('articleID', articleID);
    SetInnerHtml('templateID', templateID);
}

function ShowDebugMessage(message) {
    SetInnerHtml('debugMessage', message);
}

function GetArticleID() {
    return GetInnerHtml('articleID');
}

function GetTemplateID() {
    return GetInnerHtml('templateID');
}

function GetInnerHtml(id) {
    var result = '';
    var container = document.getElementById(id);
    if (container != null) {
        result = container.innerHTML;
    }
    return result;
}

function SetInnerHtml(id, html) {
    var container = document.getElementById(id);
    if (container != null) {
        container.innerHTML = html;
    }
}

function SetEditArticleAndTemplate(article, template) {
    var container1 = document.getElementById('articleID');
    if (container1 != null) {
        container1.innerHTML = article;
    }
    var container2 = document.getElementById('templateID');
    if (container2 != null) {
        container2.innerHTML = template;
    }
}

function IsJavascriptEnabled() {
    var enabled = true;
    try {
        if (GetJavascriptEnabled() == false)
            enabled = false;
    }
    catch (err) {
        enabled = true;
    }
    return enabled;
}

function GetJavascriptEnabled() {
    if (document.enableJavascript == null) {
        ParseQueryString();
    }
    return document.enableJavascript;
}

function IsStyleEnabled() {
    var enabled = true;
    try {
        if (GetStyleEnabled() == false)
            enabled = false;
    }
    catch (err) {
        enabled = true;
    }
    return enabled;
}

function GetStyleEnabled() {
    if (document.enableStyle == null) {
        ParseQueryString();
    }
    return document.enableStyle;
}

function ParseQueryString() {
    var pairs = null;
    var query = document.location.search.substring(1);
    if (query.length > 0) {
        query = query.replace(/\+/g, ' ');
        var pairs = query.split('&');
    }
    if (pairs != null && pairs.length > 0) {
        for (var i = 0; i < pairs.length; i++) {
            var pair = pairs[i].split('=');
            if (pair.length > 0) {
                var pairName = pair[0].toLowerCase();
                var pairValue = (pair.length > 1) ? pair[1].toLowerCase() : 'true';
                if (pairName == 'silverlight') { document.enableSilverlight = (pairValue == 'true'); }
                else if (pairName == 'nosilverlight') { document.enableSilverlight = (pairValue == 'false'); }
                else if (pairName == 'javascript') { document.enableJavascript = (pairValue == 'true'); }
                else if (pairName == 'nojavascript') { document.enableJavascript = (pairValue == 'false'); }
                else if (pairName == 'style') { document.enableStyle = (pairValue == 'true'); }
                else if (pairName == 'nostyle') { document.enableStyle = (pairValue == 'false'); }
                else if (pairName == 'apple' || pairName == 'mac') { document.emulateMac = (pairValue == 'true'); }
                else if (pairName == 'windows') { document.emulateWindows = (pairValue == 'true'); }
                else if (pairName == 'linux') { document.emulateLinux = (pairValue == 'true'); }
                else if (pairName == 'explorer') { document.emulateExplorer = (pairValue == 'true'); }
                else if (pairName == 'firefox') { document.emulateFirefox = (pairValue == 'true'); }
                else if (pairName == 'safari') { document.emulateSafari = (pairValue == 'true'); }
                else if (pairName == 'opera') { document.emulateOpera = (pairValue == 'true'); }
                else if (pairName == 'unknown') { document.emulateUnknown = (pairValue == 'true'); }
                else if (pairName == 'beta' || pairName == 'beta1') { document.emulateBeta1 = (pairValue == 'true'); }
                else if (pairName == 'beta2') { document.emulateBeta2 = (pairValue == 'true'); }
            }
        }
    }
    if (document.enableSilverlight == null) {
        document.enableSilverlight = true;
    }
}

function GetSilverlightVersion() {
    var version = '';
    var container = null;
    try {
        var control = null;
        if (window.ActiveXObject) {
            control = new ActiveXObject('AgControl.AgControl');
        }
        else {
            if (navigator.plugins['Silverlight Plug-In']) {
                container = document.createElement('div');
                document.body.appendChild(container);
                container.innerHTML = '<embed type="application/x-silverlight" src="data:," />';
                control = container.childNodes[0];
            }
        }
        if (control) {
            if (control.isVersionSupported('2.0.31005')) {
                version = _RTM;
            }
            else if (control.isVersionSupported('2.0.30523')) {
                version = _Beta2;
            }
            else if (control.isVersionSupported('2.0.30226')) {
                version = _Beta1;
            }
        }
    }
    catch (e) { }
    if (container) {
        document.body.removeChild(container);
    }
    if (document.emulateBeta1)
        version = _Beta1;
    else if (document.emulateBeta2)
        version = _Beta2;
    return version;
}

function GetPathForRedirect(sectionAndPanelName) {
    if (sectionAndPanelName.substring(0, 1) == '#')
        sectionAndPanelName = sectionAndPanelName.substring(1);
    var splits = sectionAndPanelName.split('_');
    var sectionName = (splits.length > 0) ? splits[0] : '';
    var panelName = (splits.length > 1) ? splits[1] : '';
    var sheetName = (splits.length > 2) ? splits[2] : '';
    var sectionPath = sectionName.toLowerCase();
    var panelPath = panelName.toLowerCase();
    var sheetPath = sheetName.toLowerCase();
    if (sectionPath == 'orphans')
        sectionPath = '';
    if (sectionPath == 'home')
        sectionPath = '';
    if (sectionPath.length > 0) sectionPath += '/';
    if (panelPath.length > 0) panelPath += '/';
    if (sheetPath.length > 0) sheetPath += '/';
    return sectionPath + panelPath + sheetPath;
}

function onSilverlightError(sender, args) {
    var address = window.location;
    if (address.indexOf('?') > 0)
        address += '&';
    else
        address += '?';
    address += 'nosilverlight';
    window.location = address;
}

// http://www.quirksmode.org/js/detect.html
var BrowserDetect = {
    init: function() {
        this.browser = this.getBrowser();
        this.version = this.getVersion();
        this.OS = this.getOS();
    },
    getBrowser: function() {
        var _browser = this.searchString(this.dataBrowser) || _Unknown;
        if (document.emulateFirefox) {
            _browser = _Firefox;
        }
        else if (document.emulateExplorer) {
            _browser = _Explorer;
        }
        else if (document.emulateSafari) {
            _browser = _Safari;
        }
        else if (document.emulateOpera) {
            _browser = _Opera;
        }
        else if (document.emulateUnknown) {
            _browser = _Unknown;
        }
        return _browser;
    },
    getVersion: function() {
        var _version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| _Unknown;
        return _version;
    },
    getOS: function() {
        var _os = this.searchString(this.dataOS)
            || _Unknown;
        if (document.emulateMac) {
            _os = _Mac;
        } else if (document.emulateWindows) {
            _os = _Windows;
        } else if (document.emulateLinux) {
            _os = _Linux;
        }
        return _os;
    },
    searchString: function(data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function(dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
		{
		    string: navigator.vendor,
		    subString: "Apple",
		    identity: _Safari
		},
		{
		    prop: window.opera,
		    identity: _Opera
		},
		{
		    string: navigator.userAgent,
		    subString: "Firefox",
		    identity: _Firefox
		},
		{
		    string: navigator.userAgent,
		    subString: "MSIE",
		    identity: _Explorer,
		    versionSearch: "MSIE"
		},
	],
    dataOS: [
		{
		    string: navigator.platform,
		    subString: "Win",
		    identity: _Windows
		},
		{
		    string: navigator.platform,
		    subString: "Mac",
		    identity: _Mac
		},
		{
		    string: navigator.platform,
		    subString: "Linux",
		    identity: _Linux
		}
	]

};

ParseQueryString();
BrowserDetect.init();