﻿// ##########
// Browser detection
var isIE = (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)); 
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In MSIE, the true version is after "MSIE" in userAgent
if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Opera, the true version is after "Opera" 
else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}




// ##########
// General variables and functions

// By default don't monitor scroll events
var monitorScrollEvents = false; 

// Gets the X position of an element
function findPosX(obj)
{
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
            curleft += obj.offsetLeft;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

// Gets the Y position of an element
function findPosY(obj)
{
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
            curtop += obj.offsetTop;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

// Toggles an object's visibility
function toggleVisibility(obj)
{
    try 
    {
        if (obj.style.display != "none")
            $(obj).fadeOut(250); 
        else
            $(obj).fadeIn(250); 
    }
    catch (e)
    {
        alert(e); 
    }
}

// Toggles an object's visibility via sliding 
function toggleSlide(obj)
{
    try 
    {
        if (obj.style.display != "none")
            $(obj).slideUp(250); 
        else
            $(obj).slideDown(250); 
    }
    catch (e)
    {
        alert(e); 
    }
}

// Slides an object down
function slideDown(obj)
{
    try 
    {
        $(obj).slideDown(250); 
    }
    catch (e)
    {
        alert(e); 
    }
}

// Slides an object up
function slideUp(obj)
{
    try 
    {
        $(obj).slideUp(250); 
    }
    catch (e)
    {
        alert(e); 
    }
}

// Check a file name
function isValidFileName(fileName)
{
    if (fileName && fileName.length > 0) 
    {
        if (fileName.match(/\\|\/|\*|\:|\?|\"|\<|\>|\|/)) 
            return false; 
        else
            return true; 
    }
    else
    {
        return false; 
    }
}

// Opens a view HTML window
function viewHtmlReport(reportType, filterInformation)
{
    window.open("report-html.aspx?report=" + escape(reportType) + "&filterInformation=" + filterInformation, "htmlreport"); 
}




// ##########
// Sets up the floating header for the reports page
function initialiseReportFloatingHeader()
{
    var hdr = document.getElementById("report_header"); 
    var tbl = document.getElementById("resultTable"); 
    var fhdr = document.getElementById("report_header_floating"); 
    
    // Copy header content into the floating header
    fhdr.style.width = tbl.style.width; 
    fhdr.innerHTML = hdr.innerHTML; 
}

// Control the floating header bar
function handleReportScroll()
{
    var elm = document.getElementById("contentRow"); 
    var tbl = document.getElementById("resultTable"); 
    var fhdr = document.getElementById("report_header_floating"); 
    
    // Floating headers for IE users
    if(typeof(document.media) == 'string')
    {
        // Position floating header bar
        fhdr.style.top = elm.scrollTop; 
    }
    // Foating headers for non IE users
    else if(typeof(window.print) == 'function')
    {
        // Position floating header bar
        fhdr.style.top = elm.scrollTop + "px"; 
    }
        
    // Fade in / fade out floating header bar
    if (elm.scrollTop > tbl.offsetTop)
    {
        if (fhdr.style.display == "none") 
        { 
            fhdr.style.display = "block"; 
        }
    }
    else
    {
        fhdr.style.display = "none"; 
    }
}

// Checks if a given array contains a value
function arrayContains(arrayObj, value)
{
    for (var x = 0; x < arrayObj.length; x++)
    {
        if (arrayObj[x] == value) return true; 
    }
    return false; 
}