// JScript File
$ = function(id){ return document.getElementById(id); }
var Exception = function(sender,message,name){
    this.sender = sender;
    this.message = message;
    this.name = name;
};

if(typeof(MSSB) != "object")
{
     MSSB = new Object();
}

/*** Error Handling ******************************************************************/
MSSB.InlineError = new Object();
MSSB.InlineError.Expand = function(errorTable)
{
    if(errorTable.childNodes[1].className.indexOf("errorExplanation") >= 0) 
    {
        //display explanation
        errorTable.childNodes[1].style["display"] = "inline";
        
        //Switch chevrons
        errorTable.childNodes[0].childNodes[2].childNodes[0].style.display = "none";
        errorTable.childNodes[0].childNodes[2].childNodes[1].style.display = "inline";
    }
}

MSSB.InlineError.Collapse = function(errorTable)
{
    if(errorTable.childNodes[1].className.indexOf("errorExplanation") >= 0) 
    {
        //display explanation
        errorTable.childNodes[1].style.display = "none";
        
        //Switch chevrons
        errorTable.childNodes[0].childNodes[2].childNodes[0].style.display = "inline";
        errorTable.childNodes[0].childNodes[2].childNodes[1].style.display = "none";
    }
}

MSSB.InlineError.Close = function(errorTable)
{
    if(errorTable.className.indexOf("inlineError") >= 0) 
    {
        errorTable.parentNode.style.display = "none";
        errorTable.parentNode.visibility = "hidden";
    }
}


MSSB.FlyoutError = new Object();

MSSB.FlyoutError.flyoutErrors = new Array();
MSSB.FlyoutError.badFields = new Array();
MSSB.FlyoutError.anchors = new Array();

MSSB.FlyoutError.OnLoad = function(errorMsgID, badFieldID, anchorID) {
    var badField = document.getElementById(badFieldID);
    var errorMsg = document.getElementById(errorMsgID);
    var anchor = document.getElementById(anchorID);
    
    MSSB.FlyoutError.badFields[MSSB.FlyoutError.badFields.length] = badField;
    MSSB.FlyoutError.flyoutErrors[MSSB.FlyoutError.flyoutErrors.length] = errorMsg;
    MSSB.FlyoutError.anchors[MSSB.FlyoutError.anchors.length] = anchor;
    
    MSSB.FlyoutError.PlaceMsg(errorMsg, badField, anchor);
}

MSSB.FlyoutError.OnResize = function() {
    var i;
    for(i = 0; i < MSSB.FlyoutError.flyoutErrors.length; i++) {
         MSSB.FlyoutError.PlaceMsg(MSSB.FlyoutError.flyoutErrors[i],
                MSSB.FlyoutError.badFields[i], MSSB.FlyoutError.anchors[i]);
    }
}

MSSB.FlyoutError.PlaceMsg = function(errorMsg, badField, anchor) {
    var anchorWidth = 19;
    var anchorHeight = 34;
    var horizontalOffset = -4;
    var verticalOffset = -20;
    
    errorMsg.style.display = "block";
    
    //Multiply by 1 to convert to int
    var left = badField.offsetLeft - badField.scrollLeft;
    var top = badField.offsetTop - badField.scrollTop;
    var currentParent = badField.parentNode;
    
    while(currentParent != null && !isNaN(currentParent.offsetLeft)) {
        //<TR> tags duplicate their child <TD> tag's offsets
        //<DIV> tags duplicate their child tag's offsets
        if(currentParent.tagName != "TR" && currentParent.tagName != "DIV") {
            left += currentParent.offsetLeft;
            top += currentParent.offsetTop; 
        }
        left -= currentParent.scrollLeft;
        top -= currentParent.scrollTop;
        currentParent = currentParent.parentNode;
    }
    
    left = (left * 1) - (errorMsg.offsetWidth * 1) + horizontalOffset - anchorWidth;
    top = (top * 1) + verticalOffset;  
    
    if(left >= 0) {
        errorMsg.style.left = left;
    } else {
        errorMsg.style.left = (badField.offsetLeft * 1) - horizontalOffset;
    }
    
    if(top >= 0 && (top + errorMsg.offsetHeight) < document.body.clientHeight) {
        errorMsg.style.top = top;  
        anchor.style.top = -verticalOffset - (anchorHeight / 2);
    } else if (top < 0 || errorMsg.offsetHeight > document.body.clientHeight) {
        errorMsg.style.top = 0; 
        anchor.style.top = 0;    
    } else {
        errorMsg.style.top = document.body.clientHeight -  errorMsg.offsetHeight;
        anchor.style.top = - verticalOffset - (anchorHeight / 2)
    }
}

MSSB.FlyoutError.Close = function(errorTable)
{
    var node = errorTable;
    while(node) {
        if(node.className.indexOf("MSSB_FlyoutError") >= 0) 
        {
            node.style.display = "none";
            node.visibility = "hidden";
        }
        node = node.parentElement;
    }
}
