﻿
var _isSafari = false;

function init()
{
    _isSafari = (navigator.userAgent.toLowerCase().indexOf("safari") > -1);        
}

var _zoomWindow = null;
var _zoomUrl = null;
var _cache = new cache();

function openZoomURL(sender, e, url)
{
    getZoom();
    repos(_zoomWindow, e);

    if(_zoomUrl != url)
    {
        var cached = _cache.Get(url);
        if(cached != null) // in cache
        {
            _zoomWindow.innerHTML = cached;
        }
        else
        {
            _zoomWindow.innerHTML = "Loading Details...";
            getPage(url, "_cache.Add(\"" + url + "\", oXml.responseText); _zoomWindow.innerHTML = oXml.responseText;");
        }
        _zoomUrl = url;
    }
    _zoomWindow.style.visibility = 'visible';
}

function cache()
{
    var _keys = new Array();
    var _values = new Array();
    var _hits = 0;

    this.Add =
        function(key, value)
        {
            _keys.push(key);
            _values.push(value);
        }
        
    this.Get =
        function(key)
        {
            var found = false;

            if(_keys.length > 0)
            {
                var i;
                for(i = 0; i < _keys.length; i++)
                {
                    if(_keys[i] == key)
                    {
                        found = true;
                        break;
                    }
                }
            }


            if(found)
            {
                _hits++;
                
                if(_hits > 1000) // empty cache
                {
                    this.Clear();
                }
                
                return _values[i];
            }
            else
            {
                return null;
            }
        }

    this.Clear =
        function()
        {
            _hits = 0;
            _keys.splice(0, _keys.length);
            _values.splice(0, _values.length);
        }        
}

function getZoom()
{
    if(_zoomWindow == null)
    {
        _zoomWindow = document.createElement("div");
        _zoomWindow.style.position = "absolute";
        _zoomWindow.style.padding = "3px";
        _zoomWindow.style.border = "1px solid #000000";
        _zoomWindow.style.backgroundColor = "#ffffff";
        document.body.appendChild(_zoomWindow);
    }
}

function repos(obj, e)
{

    var scrollOffset = document.body.scrollTop > 0 ? document.body.scrollTop : document.documentElement.scrollTop;
    var windowWidth = document.documentElement.offsetWidth;
    var windowHeight = isNaN(window.innerHeight) ? document.documentElement.offsetHeight : window.innerHeight;

    var left = e.clientX + 15;
    var top;
    if(_isSafari)
    {
        top = e.clientY + 15;
    }
    else
    {
        top = e.clientY + 15 + scrollOffset;
    }
     
    var width = obj.offsetWidth;
    if(left + width > windowWidth)
    {
        left = e.clientX - width - 15;
    }
    
    var height = obj.offsetHeight;
    if(top + height > windowHeight + scrollOffset)
    {
        if(_isSafari)
        {
            top = e.clientY - height - 15;
        }
        else
        {
            top = e.clientY + scrollOffset - height - 15;
        }
        
    }
    
    if(top < scrollOffset)
    {
        top = windowHeight + scrollOffset - height;
    }

    obj.style.top = new String(top) + "px";
    obj.style.left = new String(left) + "px";

}

function closeZoom()
{
    if(_zoomWindow != null)
    {
        _zoomWindow.style.visibility = "hidden";
    }
}

var debug = false;
function getPage(url, retFunc, post, errFunc)
{
    var oXml;

    try
    {
        oXml = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
              oXml = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
              oXml = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }

    if(oXml == null)
    {
        return;
    }

    oXml.onreadystatechange = 
        function()
        {
              if(oXml.readyState == 4)
              {
                    if(oXml.status == 200)
                    {
                          eval(retFunc);
                    }
                    else
                    {
                          if(debug)
                          {
                                var newWin = window.open();
                                newWin.document.write(oXml.responseText);
                          }
                          if(errFunc)
                          {
                                eval(errFunc);
                          }
                    }
              }
        }

    var verb = "GET";
    if(post && post != "")
    {
        verb = "POST";
    }
    else
    {
        post = null;
    }

    oXml.open(verb, url, true);
    try
    {
        oXml.send(post);
    }
    catch(e)
    {
        if(errFunc)
        {
              eval(errFunc);
        }
    }
}


function EachLetterUpper(strval) 
{	
    var pattern = /(\w)(\w*)/; // a letter, and then one, none or more letters 
    var a = strval.value.split(/\s+/g); // split the sentence into an array of words

    for (i = 0 ; i < a.length ; i ++ ) {
        var parts = a[i].match(pattern); // just a temp variable to store the fragments in.

        var firstLetter = parts[1].toUpperCase();
        var restOfWord = parts[2].toLowerCase();

        a[i] = firstLetter + restOfWord; // re-assign it back to the array and move on
    }
    
    strval.value = a.join(' '); // join it back together
}

function SingleSelect(regex,current)
{
    re = new RegExp(regex);

    for(i = 0; i < document.forms[0].elements.length; i++) 
    {
        elm = document.forms[0].elements[i];

        if (elm.type == 'checkbox') 
        {
            if (re.test(elm.name)) 
            {
                elm.checked = false;
            }
        }
    }

    current.checked = true;
}

