// Version 1.0.0.0
// AppliedUwScripts.js

////////////////
//  CommandBar  
////////////////
var CommandBar = new CommandBar_class();
function CommandBar_class()
{
///// public methods
this.Init = public_void_Init;
function public_void_Init(submitId, cancelId, printId, deleteId, addId, okId)
{
    this.SubmitButtonId = submitId;
    this.CancelButtonId = cancelId; 
    this.PrintButtonId = printId; 
    this.DeleteButtonId = deleteId; 
    this.AddButtonId = addId; 
    this.OkButtonId = okId; 
}

// sets options according to Mode
this.SetMode = public_void_SetMode;
function public_void_SetMode(mode){ 
    try
    {
        EnsureCode();
        
        if(mode.toUpperCase() == 'EDIT' || mode.toUpperCase()=='ADD')
        {
            this.SubmitButton.disabled = false;
            this.CancelButton.disabled = false;
            this.PrintButton.disabled = false;
            this.DeleteButton.disabled = true;
            this.AddButton.disabled = true;
            this.OkButton.disabled = true;
        }
        if(mode.toUpperCase()=='DEFAULT')
        {
            this.SubmitButton.disabled = true;
            this.CancelButton.disabled = true;
            this.PrintButton.disabled = false;
            this.DeleteButton.disabled = false;
            this.AddButton.disabled = false;
            this.OkButton.disabled = false;
        }
    }
    catch(ex)
    {}
}

///// Private methods

// called to ensure variables are properly set.
function EnsureCode()
{
    try
    {
    CommandBar.SubmitButton = document.getElementById(CommandBar.SubmitButtonId);
    CommandBar.CancelButton = document.getElementById(CommandBar.CancelButtonId); 
    CommandBar.PrintButton = document.getElementById(CommandBar.PrintButtonId); 
    CommandBar.DeleteButton = document.getElementById(CommandBar.DeleteButtonId); 
    CommandBar.AddButton = document.getElementById(CommandBar.AddButtonId); 
    CommandBar.OkButton = document.getElementById(CommandBar.OkButtonId);
    }
    catch(ex)
    {} 
}
}

////////////////
//  ScriptHelper  
////////////////
var ScriptHelper = new ScriptHelper_class();
function ScriptHelper_class()
{
///// public methods

// opens url in a new window
this.OpenInNewWindow = public_void_OpenInNewWindow;
function public_void_OpenInNewWindow(url, windowName)
{
try
{
window.open(url, windowName);
}
catch(ex)
{ }
}

// adds a function to an event, usually OnLoad
// ie: AddEvent(window, 'load', <functionName>);
this.AddEvent = public_void_AddEvent;
function public_void_AddEvent(obj, evType, fn){ 
    try
    {
        if (obj.addEventListener){ 
        obj.addEventListener(evType, fn, false); 
        return true; 
        } else if (obj.attachEvent){ 
            var r = obj.attachEvent('on'+evType, fn); 
            return r; 
        } else { 
            return false; 
        }
    }
    catch(ex)
    {}
}

// adds a function call to the window.load event.
this.OnLoad = public_void_OnLoad;
function public_void_OnLoad(fn)
{
    this.AddEvent(window, 'load', fn);
}

// Closes the client window
this.CloseWindow = public_void_CloseWindow;
function public_void_CloseWindow()
{
try
{
    window.close();
}
catch(ex)
{ }
}

// Shows an alert box with message to user
this.Alert = public_void_Alert;
function public_void_Alert(message)
{
try
{
    window.alert(message);
}
catch(ex)
{ }
}

// will focus on control by Id
this.FocusOnControl = public_void_FocusOnControl;
function public_void_FocusOnControl(controlId)
{
try
{
    var targetControl = document.getElementById(controlId);
    targetControl.focus();
}
catch(ex)
{ }
}
}//END ScriptHelper_class



/////////////////
//  AuTextBox  
/////////////////
var AuTextBox = new AuTextBox_class();
function AuTextBox_class()
{
///// public methods

// usage: <input type=text name=ssn onkeypress="return AuTextBox.Mask(this, event, '###-##-####');">
//        This will force #'s, not allowing alphas where the #'s are, and auto add -'s
this.Mask = public_void_Mask;
function public_void_Mask(field, event, sMask) {
    function GetTarget(e) 
    {
        // IE5
        if (e.srcElement) {
                return e.srcElement;
        }
            if (e.target) {
                return e.target;
        }
    }

    function GetKeyCode(e) 
    {
        //IE5
        if (e.srcElement) {
                return e.keyCode
        }
        // NC5
        if (e.target) {
        return e.which
        }
    }

    function IsNumeric(c)
    {
        var sNumbers = "01234567890";
        if (sNumbers.indexOf(c) == -1)
                return false;
        else return true;
    }

    function IsAlpha(c)
    {
        var lCode = c.charCodeAt(0);
        if (lCode >= 65 && lCode <= 122 )
        {
                return true;
        }
        else
        return false;
    }

    function IsPunct(c)
    {
        var lCode = c.charCodeAt(0);
        if (lCode >= 32 && lCode <= 47 )
        {
                return true;
        }
        else
        return false;
    }
    
    //var sMask = "**?##?####";
	var MaskChars = "*?#A";
    var KeyTyped = String.fromCharCode(GetKeyCode(event));
    var targ = GetTarget(event);
    keyCount = targ.value.length;

	if(keyCount == sMask.length)
	{
		return false;
	}
      
      if ((sMask.charAt(keyCount+1) != '#') && (sMask.charAt(keyCount+1) != 'A' ) )
      {
         if ((sMask.charAt(keyCount) == '#') && !IsNumeric(KeyTyped))
         return false;

         if ((sMask.charAt(keyCount) == 'A') && !IsAlpha(KeyTyped))
         return false; 
         
         field.value = field.value + KeyTyped + sMask.charAt(keyCount+1);
         return false;
      }

      if (sMask.charAt(keyCount) == '*')
         return true;

      if ((sMask.charAt(keyCount) == '#') && IsNumeric(KeyTyped))
         return true;

      if ((sMask.charAt(keyCount) == 'A') && IsAlpha(KeyTyped))
         return true;        

      if ((sMask.charAt(keyCount+1) == '?') )
      {
         field.value = field.value + KeyTyped + sMask.charAt(keyCount+1);
         return true;
      }
      if (KeyTyped.charCodeAt(0) < 32) return true;
      
      if (sMask.charAt(keyCount) == KeyTyped)
      {
         return true;
      }
      
      if (keyCount == 0 && MaskChars.indexOf(sMask.charAt(0)) < 0)
      {
		 field.value = sMask.charAt(0) + KeyTyped;
      }
    return false;
}
} // END AuTextBox_class()


//////////////////
//  AuDataGrid  
//////////////////
var AuDataGrid = new AuDataGrid_class();
function AuDataGrid_class()
{
///// public methods
// ChangeRowColor : called when a row in a audatagrid is hovered
this.ChangeRowColor = public_void_ChangeRowColor;
function public_void_ChangeRowColor(row, textColor, backColor)
{
    row.style.color = textColor;
    row.style.backgroundColor = backColor;
}
} // END AuDataGrid_class()

/////////////////////
//  AuMenuControl  
/////////////////////
var AuMenuControl = new AuMenuControl_class();
function AuMenuControl_class()
{
    var timeoutId;
    var selectedMenu;
    var selectedSubMenu;
    var parentMenu;
    
    this.Init = public_void_Init;
    function public_void_Init()
    {
        AuMenuControl.AttachEvent(document, 'click', AuMenuControl.HideMenus, false);
    }
    
    this.ShowMenu = public_void_ShowMenu;
    function public_void_ShowMenu(source, name)
    {
        if(selectedMenu != null)
        this.HideMenu(selectedMenu);
        var srcElement = document.getElementById(source);
        srcElement.className = "menuover";
        var element = document.getElementById(name);
        var left,top;
        left = srcElement.offsetLeft.valueOf();
        top = srcElement.offsetTop.valueOf() + srcElement.offsetHeight.valueOf();
        element.style.visibility="Visible";
        element.style.top = top;
        element.style.left = left;
        selectedMenu = source;
    }
    
    this.HideMenu = public_void_HideMenu;
    function public_void_HideMenu(source)
    {
        if(timeoutId)clearTimeout(timeoutId);
        if(selectedSubMenu)
        {
            HideSubMenu();
        }
        var	element	= document.getElementById(source);
        if(element)
        {
            element.className = "menu";
            var	menu = document.getElementById(source +	"Menu");
            if(menu)
            {
                menu.style.visibility	= "Hidden";
                selectedMenu	= null;
            }
        }
    }
    
    function HideSubMenu()
    {
        if(selectedSubMenu)
        {
            var	element	= document.getElementById(parentMenu);
            if(element)
            element.className = "menuitem";
            var	menu = document.getElementById(selectedSubMenu);
            if(menu)
            {
                menu.className	= "menudiv";
                menu.style.visibility =	"Hidden";
                selectedSubMenu = null;
            }
        }
    }
    
    this.HideMenus = public_void_HideMenus;
    function public_void_HideMenus()
    {
        if(selectedMenu)
        {
            this.HideMenu(selectedMenu);
        }
        if(selectedSubMenu)
        {
            this.HideMenu(selectedSubMenu);
        }
        selectedMenu = null;
        selectedSubMenu	== null;
    }
    
    this.RollOver = public_void_RollOver;
    function public_void_RollOver(name)
    {
        if(selectedSubMenu)
        {
            if(name.toString().indexOf(selectedSubMenu) ==	-1)
            {
                this.HideMenu(selectedSubMenu);
            }
        }
        if(timeoutId)clearTimeout(timeoutId);
        var element = document.getElementById(name);
        if(element)
        {
            element.className = "menuitemover";
        }
    }
    
    this.RollOut = public_void_RollOut;
    function public_void_RollOut(name)
    {
        var element = document.getElementById(name);
        if(element)
        {
            element.className = "menuitem";
            AuMenuControl.SetTimeout();
        }
    }
    
    this.SetTimeout = public_void_SetTimeout;
    function public_void_SetTimeout()
    {
        timeoutId = setTimeout("AuMenuControl.HideMenu('" + selectedMenu	+ "')",	1000);
    }
    
    this.AttachEvent = public_bool_AttachEvent;
    function public_bool_AttachEvent(obj,evt,fnc,useCapture)
    {
        if (!useCapture) useCapture=false;
        if (obj.addEventListener)
        {
            obj.addEventListener(evt,fnc,useCapture);
            return	true;
        }
        else if (obj.attachEvent) 
        {
            return obj.attachEvent("on"+evt,fnc);
        }
    }
    
    this.ShowSubMenu = public_void_ShowSubMenu;
    function public_void_ShowSubMenu(source,	name)
    {
        var test = document.getElementById(getParentElementName(source));
        if(selectedSubMenu)this.HideMenu(selectedSubMenu);
        if(timeoutId)clearTimeout(timeoutId);
        var srcElement	= document.getElementById(source);
        srcElement.className = "menuitemover";
        var	childMenu =	document.getElementById(name);
        childMenu.style.top = getParentTop(test);
        childMenu.style.left = getParentLeft(test).valueOf() + srcElement.offsetWidth.valueOf();
        childMenu.style.visibility = "Visible";
        childMenu.style.zIndex =	99;
        childMenu.className = "menudiv";
        parentMenu = source;
        selectedSubMenu = name;
    }
    
    function getParentLeft(element)
    {
        if(!element)	
            return 0;
        var parent	= getParent(element);
        if(parent)
        {
            if(parent.tagName != "DIV")
            {
                return parent.offsetLeft.valueOf();
            }
        }
        return	element.offsetLeft.valueOf() + getParentLeft(parent).valueOf();
    }
    
    function getParentTop(element)
    {
        if(!element)
            return 0;
        var parent	= getParent(element);
        if(parent)
        {
            if(parent.tagName != "DIV")
            {
                return parent.offsetTop.valueOf();
            }
        }
        return element.offsetTop.valueOf() + getParentTop(parent).valueOf();
    }
    
    function getParent(element)
    {
        if(element)
        {
            if(element.ParentElement) return element.ParentElement;
            if(element.ParentNode) return element.ParentNode;
        }
        return null;
    }
    
    function getParentElementName(source)
    {
        var menu =	source.indexOf('Menu');
        var pos = source.indexOf('_');
        if(pos	== -1)
        {
            return	(menu == -1)? (source +	"Menu").toString() : source.toString();
        }
        else
        {
            return (menu == -1)? source.toString().substring(0,pos) + "Menu": source.toString.substring(0,pos);
        }
    }
}