﻿/*
Created:    5/11/2010
Created By: Kelly Arnold
Purpose:    Capture Browser Specific events
            Determine if Browser is compatible, this has been moved Server Side
            Reads JavaScript cookie values
*/

function KeyCode(e) {
    //written by Kelly Arnold
    //window.event = IE, e.which = FF
    return window.event ? window.event.keyCode : e.which;
}

function IsTabKey(e) {
    //written by Kelly Arnold
    //returns whether event was Tab Key
    //remember to use onKeyDown in textBox
    if (KeyCode(e) == 9) return true;
    else return false;
}

function IsEnterKey(e) {
    //written by Kelly Arnold
    //returns whether event was Event Key
    //remember to use onKeyDown in textBox
    if (KeyCode(e) == 13) return true;
    else return false;
}

function WindowSize() {
    //written by Kelly Arnold
    //returns object with Height/Width Properties describing Window Size
    return ViewablePageSize;
}

function WindowHeight() {
    //written by Kelly Arnold
    //returns object with Height Property describing Window Size
    return ViewablePageSize.Height;
}

function WindowWidth() {
    //written by Kelly Arnold
    //returns object with Width Property describing Window Size
    return ViewablePageSize.Width;
}

function MouseX(evt) {
    //written by Kelly Arnold
    //returns Mouse Location X coordinate
    return MouseLocation(evt).X;
}

function MouseY(evt) {
    //written by Kelly Arnold
    //returns Mouse Location Y coordinate
    return MouseLocation(evt).Y;
}

function ValidBrowser() {
    //written by Kelly Arnold
    //returns true/false whether current browser is supported, NOTE: moved Server Side

    var Browser = BrowserDetails();
    var Versions = null;

    if (Browser.Agent != "Unknown") Versions = Browser.Version.split(".");
    else return false;

    switch (Browser.Agent)
    {
        case "Firefox":
            //***************************
            //**Version 3.6.3 or better**
            //***************************

            //No Major Version or Major Version < 3 : FAIL
            if (Versions[0] == null || Versions[0] < 3) return false;
            //Major Version > 3 : PASS
            else if (Versions[0] > 3) return true;
            else {
                //Major Version = 3 : Continue
                //Major Version = 3, Minor Version < 6 : FAIL
                if (Versions[1] == null || Versions[1] < 6) return false;
                else if (Versions[1] > 6) return true;
                else {
                    //Major Version = 3, Minor Version = 6 : Continue
                    //Major Version = 3, Minor Version = 6, Change Version < 3 : FAIL
                    if (Versions[2] == null || Versions[2] < 3) return false;
                    else return true;
                }
            }

            return false;   //everything else FAILs
            break;
        case "IE":
            //***********************
            //**Version 8 or better**
            //***********************

            if (Versions[0] != null && Versions[0] >= 8) return true;
            return false;
            break;
        case "Opera":
            //***************************
            //**Version 10.51 or better**
            //***************************

            //No Major Version or Major Version < 10 : FAIL
            if (Versions[0] == null || Versions[0] < 10) return false;
            //Major Version > 10 : PASS
            else if (Versions[0] > 10) return true;
            else {
                //Major Version = 10 : Continue
                //Major Version = 10, Minor Version < 51 : FAIL
                if (Versions[1] == null || Versions[1] < 51) return false;
                else return true;
            }

            return false;
            break;
        case "Chrome":
            //**********************************
            //**Version 4.1.249.1064 or better**
            //**********************************

            //No Major Version or Major Version < 4 : FAIL
            if (Versions[0] == null || Versions[0] < 4) return false;
            //Major Version > 4 : PASS
            else if (Versions[0] > 4) return true;
            else {
                //Major Version = 4 : Continue
                //Major Version = 4, Minor Version < 1 : FAIL
                if (Versions[1] == null || Versions[1] < 1) return false;
                //Major Version = 4, Minor Version > 1 : PASS
                else if (Versions[1] > 51) return true;
                else {
                    //Major Version = 4, Minor Version = 51 : Continue
                    //Major Version = 4, Minor Version = 51, Change Version < 249 : FAIL
                    if (Versions[2] == null || Versions[2] < 249) return false;
                    //Major Version = 4, Minor Version = 51, Change Version > 249 : PASS
                    else if (Versions[2] > 249) return true;
                    else {
                        //Major Version = 4, Minor Version = 51, Change Version = 249 : Continue
                        //Major Version = 4, Minor Version = 51, Change Version = 249, Build? Version < 1064 : FAIL
                        if (Versions[3] == null || Versions[3] < 1064) return false;
                        //Major Version = 4, Minor Version = 51, Change Version = 249, Build? Version > 1064 : PASS
                        else if (Versions[3] > 1064) return true;
                        else return true;
                    }
                }
            }

            return false;
            break;
        case "Safari":
            //***************************
            //**Version 4.0.5 or better**
            //***************************

            //No Major Version or Major Version < 4 : FAIL
            if (Versions[0] == null || Versions[0] < 4) return false;
            //Major Version > 4 : PASS
            else if (Versions[0] > 4) return true;
            else {
                //Major Version = 4 : Continue
                //Major Version = 4, Minor Version < 0 : FAIL
                if (Versions[1] == null || Versions[1] < 0) return false;
                else if (Versions[1] > 0) return true;
                else {
                    //Major Version = 4, Minor Version = 0 : Continue
                    //Major Version = 4, Minor Version = 0, Change Version < 5 : FAIL
                    if (Versions[2] == null || Versions[2] < 5) return false;
                    else return true;
                }
            }

            return false;   //everything else FAILs
            break;
        default:
            return false;
            break;
    }
}

function BrowserDetails() {
    //written by Kelly Arnold
    //returns Browser object with Agent,Version Properties

    var Browser = new Object();
    var UserAgent = navigator.userAgent.toString().toLowerCase();

    Browser.Platform = navigator.platform;

    if (UserAgent.indexOf("firefox") > -1) {
        //mozilla/5.0 (windows; u; windows nt 6.1; en-us; rv:1.9.2.3) gecko/20100401 firefox/3.6.3
        Browser.Agent = "Firefox";
        Browser.Version = UserAgent.split(" ")[9].split("/")[1];
    }
    else if (UserAgent.indexOf("msie") > -1) {
        //mozilla/4.0 (compatible; msie 8.0; windows nt 6.1; win64; x64; trident/4.0; .net clr 2.0.50727; slcc2; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; mddr; .net4.0c; .net4.0e)
        Browser.Agent = "IE";
        Browser.Version = UserAgent.split(" ")[3].replace(";","");
    }
    else if (UserAgent.indexOf("opera") > -1) {
        //opera/9.80 (windows nt 6.1; u; en) presto/2.5.22 version/10.51
        Browser.Agent = "Opera";
        Browser.Version = UserAgent.split(" ")[7].split("/")[1];
    }
    else if (UserAgent.indexOf("chrome") > -1) {
        //mozilla/5.0 (windows; u; windows nt 6.1; en-us) applewebkit/532.5 (khtml, like gecko) chrome/4.1.249.1064 safari/532.5
        Browser.Agent = "Chrome";
        Browser.Version = UserAgent.split(" ")[11].split("/")[1];
    }
    else if (UserAgent.indexOf("safari") > -1) {
        //mozilla/5.0 (windows; u; windows nt 6.1; en-us) applewebkit/531.22.7 (khtml, like gecko) version/4.0.5 safari/531.22.7
        Browser.Agent = "Safari";
        Browser.Version = UserAgent.split(" ")[11].split("/")[1];
    }
    else {
        Browser.Agent = "Unknown";
        Browser.Version = "Unknown";
    }

    return Browser;
}

function ViewablePageSize() {
    //written by Kelly Arnold
    //returns pageCoordinates object with Height,Width Properties

    if (document.documentElement.clientHeight) {
        var pageWidth;
        var pageHeight;
        var pageCoordinates = new Object();

        //FireFox (>= 3.5.7, Opera (>= 10.10), Safari (>= version 4.0.4)
        if (window.innerHeight) {
            if (window.opera) {//Opera
                pageWidth = window.pageXOffset + window.innerWidth;
                pageHeight = window.pageYOffset + window.innerHeight;
            }
            else {//FireFox, Safari
                if (window.scrollMaxX) {//Firefox
                    pageWidth = window.innerWidth + window.scrollMaxX;
                    pageHeight = window.innerHeight + window.scrollMaxY;
                }
                else {//Safari
                    pageWidth = document.documentElement.scrollWidth;
                    if (document.documentElement.scrollHeight > document.documentElement.clientHeight) pageHeight = document.documentElement.scrollHeight;
                    else pageHeight = document.documentElement.clientHeight + 30;
                }
            }
        }
        else {//IE (>= 8.0.6001.18702)
            pageWidth = document.documentElement.scrollWidth;
            if (document.documentElement.scrollHeight > document.documentElement.clientHeight) pageHeight = document.documentElement.scrollHeight;
            else pageHeight = document.documentElement.clientHeight + 30;
        }

        pageCoordinates.Height = pageHeight.toString();
        pageCoordinates.Width = pageWidth.toString();
        return pageCoordinates;
    }
}

function MouseLocation(evt) {
    //written by Kelly Arnold
    //return Mouse Object with X,Y Properies

    var Mouse = new Object();

    if (evt == null) {
        alert("Event target is required.");
        Mouse = null;
        return null;
    }
    else {
        if (evt.pageX) {
            MouseX = evt.pageX.toString();
            MouseY = evt.pageY.toString();
        }
        else if (evt.clientX) {
            Mouse.X = evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
            Mouse.Y = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        }
    }

    return Mouse;
}

function GetCookieValue(CookieName) {
    //written by Billy Sam

    var CookieValue = "";
    var CookieStart = -1;
    var CookieEnd = -1;

    try {
        if (document.cookie.length > 0) {
            CookieStart = document.cookie.indexOf(CookieName + "=");
            if (CookieStart > -1) {
                CookieStart += CookieName.length + 1;
                CookieEnd = document.cookie.indexOf(";", CookieStart);

                if (CookieEnd < 0) CookieEnd = document.cookie.length;

                CookieValue = unescape(document.cookie.substring(CookieStart, CookieEnd));
            }
        }
    }
    catch (err) {
        alert("The following error occurred while retrieving cookie value.\n" + err.description);
    }

    return cookie_value;
}
