var _version = "1.0";
var _elapsedMinutes = 0
var _windowWidth;
var _frm = document.forms[0];

setTimeout('UpdateSessionTimeout()', 60000)

//BrowserInfo object
BrowserInfo = function()
{
    this.isMac = false;
    this.isOpera = false;
    this.isNetscape4 = false;
    this.isNetscape6 = false;
    this.isKonqueror = false;
    this.isIE4 = false;
    this.isIE5 = false; 
    this.isIE55 = false;
    
    this.isMac = (navigator.userAgent.indexOf("Mac") != -1);
    this.isOpera = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode);
    this.isNetscape4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4);
    this.isNetscape6 = (document.getElementById) ? true : false;
    this.isKonqueror = (this.isNetscape6 && /konqueror/i.test(navigator.userAgent));
    this.isIE4 = (document.all) ? true : false;
    
    if (this.isIE4) 
    {
        var agent = navigator.userAgent;
        
        if (/MSIE/.test(agent)) 
        {
	        var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
	        
	        if (versNum >= 5)
	        {
		        this.isIE5 = true;
		        this.isIE55 = (versNum>=5.5&&!this.isOpera) ? true : false;
		        
		        if(this.isNetscape6) this.isNetscape6 = false;
	        }
        }
        
        if (this.isNetscape6) this.isIE4 = false;
    }
}
//BrowserInfo object



//FunctionInfo object
FunctionInfo = function(fx)
{
    var _fx = fx;
    
    this.isNull = (_fx == null);
    
    this.getSignature = getSignature;
    function getSignature()
    {
        var results = ParseFunction(_fx);
        return results["Signature"];
    }

    this.getName = getName;
    function getName()
    {
        var results = ParseFunction(_fx);
        return results["Name"];
    }

    this.getBody = getBody;
    function getBody()
    {
        var results = ParseFunction(_fx);
        return results["Body"];
    }

    function ParseFunction(fx)
    {
        var f;
        
        if(typeof(fx) == "function")
        {
            f = fx.toString();
        }
        else
        {
            f = fx;
        }
        
        var results = new Array();    
        
        if(f == null)
        {
            results["Name"] = "";
            results["Args"] = "";
            results["Body"] = "";
            results["Signature"] = "";
        }
        else
        {
            var regex = /function\s*(\w*)\s*\(([^\)]*)\)/;
	        var matches = f.match(regex);
	        var body = f.substring(f.indexOf("{") + 1, f.lastIndexOf("}"));
            
            results["Name"] = matches[1];
            results["Args"] = matches[2];
            results["Body"] = body;
            results["Signature"] = matches[1] + "(" + matches[2] + ")";
        }
        
        return results;
    }
}
//FunctionInfo object

function UpdateSessionTimeout()
{
    _elapsedMinutes++
    
    var minutesRemaining = _timeoutMinutes - _elapsedMinutes;    
    var statusMessage = "";

	if(minutesRemaining < 1 && window.opener == null)
	{
	    statusMessage = "Your session has expired. Refresh any page to log back in.";
	    
		SetWindowStatus(window, statusMessage);
		//alert(statusMessage + "\n\nCurrent Time: " + Date());
	}
	else 
	{
	    statusMessage = "Your session will timeout in " + minutesRemaining.toString() + " minute";
        
        if(minutesRemaining != 1)
        {
            statusMessage += "s";
        }
    
        statusMessage += ". Refresh any page to refresh your session.";
    
	    SetWindowStatus(window, statusMessage);
		setTimeout('UpdateSessionTimeout()', 60000)
	}
}

function IsNull(element)
{
    return (typeof(element) == "undefined" || element == null);
}

function IfNull(obj, replacement)
{
    if(IsNull(obj))
    {
        return replacement;
    }
    else
    {
        return obj;
    }
}

function Trim(text)
{
    if(text == null)
    {
        text = "";
    }
    else
    {
        text = RTrim(LTrim(text));
    }
    
    return text;
}

function LTrim(text)
{
    return text.replace(/^(\s+)?(.*)/, '$2');
}

function RTrim(text)
{
    return text.replace(/(.|\n*)(\s+)?$/, '$1');
}

function Replace(text, find, replace)
{
    find = "/" + find + "/g";
    return text.replace(find, replace);
}

function ResolveUrl(relativeUrl)
{
    var url = relativeUrl;
    
    if(relativeUrl != null && relativeUrl.length > 0 && relativeUrl.charAt(0) == '~')
    {
        url = "";
        
        if(_appVirtualRoot != "/")
        {
            url = _appVirtualRoot + "/";
        }
        
        url += relativeUrl.substr(1);
    }
    
    return url;
}

function ArrayIndexOf(array, value)
{
    var index = -1;
    
    for(var i = 0; i < array.length; i++)
    {
        if(array[i] == value)
        {
            index = i;
            break;
        }
    }
    
    return index;
}

function RegisterTextAreas()
{
    var textAreas = document.getElementsByTagName("textarea");
    
    for(var i = 0; i < textAreas.length; i++)
    {
        RegisterTextEvents(textAreas[i]);        
    }
}

function RegisterTextEvents(txtBox)
{
    if(typeof(txtBox._MaxLength) == "string")
    {
        var currentOnKeyUp = txtBox.onkeyup;
        txtBox.onkeyup = function()
            {
                CountRemainingCharacters(this);
                
                if(currentOnKeyUp != null)
                {
                    return currentOnKeyUp();
                }
            }
        
        var currentOnKeyPress = txtBox.onkeypress;
        txtBox.onkeypress = function()
            {
                var retVal = true;
                
                if(currentOnKeyPress != null)
                {
                    retVal = currentOnKeyPress();
                }
                
                if(typeof(retVal) != "boolean")
                {
                    retVal = true;                       
                }
                
                retVal = retVal && EnforceMaxLength(this);            
                
                return retVal;
            }
            
        var currentOnChange = txtBox.onchange;
        txtBox.onchange = function()
            {
                CountRemainingCharacters(this);
                
                if(currentOnChange != null)
                {
                    return currentOnChange();
                }                    
            }
            
        CountRemainingCharacters(txtBox);
    }
}

function HideAnchorStatusText()
{
    var anchors = document.getElementsByTagName("a");
    
    for(var i = 0; i < anchors.length; i++)
    {
        var currentOnMouseOver = anchors[i].onmouseover;
        var currentOnMouseOut = anchors[i].onmouseout;
        
        if(currentOnMouseOver == null)
        {
            anchors[i].onmouseover = function(){return SetWindowStatus(this.innerText);};            
        }
        
        if(currentOnMouseOut == null)
        {
            anchors[i].onmouseout = function(){return SetWindowStatus('');}
        }
    }
}

function IsLocal()
{
    return (window.location.hostname.toLowerCase() == "localhost");
}

function ValidatePage()
{
    var pageIsValid = true;
    
    if(typeof(Page_ValidationActive) != "undefined" && Page_ValidationActive)
    {
        pageIsValid = Page_ClientValidate();
    }
    
    return pageIsValid;
}

function RaisePageEvent()
{
    if(arguments.length > 0)
    {
        _frm.__PAGEEVENT.value = arguments[0];
        
        if(arguments.length > 1)
        {
            var eventArgs = "";
            
            for(var i = 1; i < arguments.length; i++)
            {
                eventArgs += ":$:" + arguments[i];
            }
            
            _frm.__PAGEEVENTARGS.value = eventArgs.substr(3);
        }
        
        _frm.submit();
    }
}

function RaiseQueryStringPageEvent()
{
    if(arguments.length > 0)
    {
        var url = window.location.href;

        url = SetQueryStringValue("__PAGEEVENT", arguments[0]);
        url = SetQueryStringValue("__ARGCOUNT", (arguments.length - 1));

        if(arguments.length > 1)
        {
            for(var i = 1; i < arguments.length; i++)
            {
                url = SetQueryStringValue("__PAGEEVENTARG" + (i - 1).toString(), arguments[i]);
            }
        }

        window.location = url;
    }
}

function RemoveQueryStringEvents()
{
    var url = GetUrlWithoutQueryString(_frm.action);
    var queryStringArray = GetQueryStringArray(_frm.action);

    for(var i = 0; i < queryStringArray.length; i++)
    {
        if(queryStringArray[i][0].indexOf("__PAGEEVENT") != -1)
        {
            queryStringArray[i][1] = null;
        }
    }

    url = url + ConvertQueryStringArrayToString(queryStringArray, true);

    _frm.action = url;    
}

function GetUrlWithoutQueryString(url)
{
    var index = url.indexOf("?");

    if(index != -1)
    {
        url = url.substr(0, index);
    }

    return url;
}

function GetQueryString(url)
{
    var queryStringArray = GetQueryStringArray(url);

    return ConvertQueryStringArrayToString(queryStringArray);
}

function GetQueryStringArray(url)
{
    var index = url.indexOf("?");
    var queryString = "";

    if(index != -1)
    {
        queryString = url.substr(index);
    }

    if(queryString.length > 1)
    {
        queryString = queryString.substr(1);
    }
    else
    {
        queryString = "";
    }

    var queryStringArray = queryString.split("&");
    var queryStringPairs = new Array(queryStringArray.length);

    for(var i = 0; i < queryStringArray.length; i++)
    {
        queryStringPairs[i] = queryStringArray[i].split("=");
    }

    return queryStringPairs;
}

function ConvertQueryStringArrayToUrl(url, queryStringArray)
{
    url = GetUrlWithoutQueryString(url);
    url += ConvertQueryStringArrayToString(queryStringArray, true);
    
    return url;
}

function ConvertQueryStringArrayToString(queryStringArray, includeQuestionMark)
{
    var queryString = "";

    for(var i = 0; i < queryStringArray.length; i++)
    {
        if(queryStringArray[i][1] != null && queryStringArray[i][1].length > 0)
        {
            queryString += "&" + queryStringArray[i].join("=");
        }
    }

    if(queryString.length > 0)
    {
        queryString = queryString.substr(1);

        if(includeQuestionMark != null && includeQuestionMark)
        {
            queryString = "?" + queryString;
        }
    }

    return queryString;
}

function GetQueryStringValue(url, key)
{
    var queryStringArray = GetQueryStringArray(url);
    var val = null;
    var index = IndexOfQueryString(queryStringArray, key);
    
    if(index != -1)
    {
        val = queryStringArray[index][1];
    }
    
    return val;
}

function SetQueryStringValue(url, key, value)
{
    var queryStringArray;
    var returnArray;
    
    if(typeof(url) == "string")
    {
        queryStringArray = GetQueryStringArray(url);        
        returnArray = false;
    }
    else
    {
        queryStringArray = url;
        returnArray = true;        
    }
    
    if(value != null)
    {
        value = encodeURIComponent(value);
    }
    
    var index = IndexOfQueryString(queryStringArray, key);
    
    if(index == -1)
    {
        queryStringArray[queryStringArray.length] = new Array(key, value);
    }
    else
    {
        queryStringArray[index][1] = value;    
    }
    
    if(returnArray)
    {
        return queryStringArray;
    }
    else
    {
        url = GetUrlWithoutQueryString(url);
        var queryString = ConvertQueryStringArrayToString(queryStringArray, true);
        return url + queryString;
    }
}

function IndexOfQueryString(queryStringArray, key)
{
    var i;

    for(i = 0; i < queryStringArray.length; i++)
    {
        if(queryStringArray[i][0] == key)
        {            
            break;
        }
    }
    
    if(i == queryStringArray.length)
    {
        i = -1;
    }
    
    return i;
}

function SetWindowWidth()
{
    if(document.layers)
    {
        _windowWidth = window.outerWidth;        
    }
    else
    {
        _windowWidth = document.body.clientWidth;                
    }        
}

function PatchFormActionAttribute()
{
    //Corrects ASP.NET issue with Url Rewriting    
    if(_frm != null && _frm.action != null)
    {    
        var i = window.location.href.lastIndexOf("/");
        _frm.action = window.location.href.substring(i + 1);
    }
}

var _currentOnResize = window.onresize;
window.onresize = function()
    {
        if(_currentOnResize != null)
        {
        }
        
        SetWindowWidth();
    }

var _currentOnLoad = window.onload;
window.onload = function()
    {
        if(_currentOnLoad != null)
        {
            _currentOnLoad();
        }
        
        SetWindowWidth();
        RemoveQueryStringEvents();
        RegisterTextAreas();        
        PatchFormActionAttribute();
        
        if(!IsLocal())
        {
            HideAnchorStatusText();
        }
    }