// Class Variables
var _arrWindowMessageList = new Array();
// RadWindow Variables
var DivMinHeight = "130";
var DivMaxHeight = GetViewPortSize(false) - 300;
var WindowAlertCss = "<style type='text/css'>.body, .Button, div, .detailsException {font-family:Tahoma, Verdana, Arial !important; font-size:11px !important; } .MessageScroll { border:1px solid #B5CBE9; height:100%; width: 100%; padding:4px 0px; padding: expression('4px 6px'); overflow:auto; text-align: left; float: left; clear: both; display: block; margin: 15px 0px; }</style>";
//TODO: Find a way to include the fx AttachEvent from UI.js as a <script src="UI.js"> instead of copying fx into variable
//When figuring this out, move function GetViewPortSize() (bottom of the page) to UI.js.
var WindowAlertJs = "<script type='text/javascript'>function AttachEvent(elementObj, eventName, eventHandlerFunctionName) { if (elementObj.addEventListener) { elementObj.addEventListener(eventName, eventHandlerFunctionName, false); } else if (elementObj.attachEvent) { elementObj.attachEvent('on' + eventName, eventHandlerFunctionName); } else { var currentEventHandler = elementObj['on' + eventName]; if (currentEventHandler == null) { elementObj['on' + eventName] = eventHandlerFunctionName; } else {  elementObj['on' + eventName] = function(e) { currentEventHandler(e); eventHandlerFunctionName(e); } } } } function SetHeight() { if (document.getElementById('MessageContainer')) { var DIV = document.getElementById('MessageContainer'); if (DIV.clientHeight<" + DivMinHeight + ") { DIV.style.height = " + DivMinHeight + "; } else { DIV.style.height = " + DivMaxHeight + "; } } } AttachEvent(window, 'resize', SetHeight);</script>";

// Properties

// Window Message List
function getWindowMessageList()
{
    return _arrWindowMessageList;
}
function setWindowMessageList(arrWindowMessageList)
{
    _arrWindowMessageList = arrWindowMessageList;
}

// Functions
function ShowJSMsg(sMsg)
{
    // Validation
    if (sMsg != null && sMsg.Length == 0) { return; }
    
    window.alert(sMsg);
}

function ConfirmJSMsg(sMsg)
{
    // Validation
    if (sMsg != null && sMsg.Length == 0) { return false; }
    
    if (window.confirm(sMsg) == true) { return true; } else { return false; }
}

// Add List
function AddWindowAlertMsgList(arrList)
{
    AddWindowAlertMsgList(arrList, null);
}
function AddWindowAlertMsgList(arrList, sPrefix)
{
    // Local Variables
    var sText = "";                                                                 // Message's text
    
    // Validation
    if (arrList == null || arrList.length == 0) { return; }
    
    // Build message
    for (var iCounter = 0; iCounter < arrList.length; iCounter++) 
    {
        sText += arrList[iCounter] + "<br /><br />";
    }

    // Prefix
    if (sPrefix != null && sPrefix.length > 0) { sText = sPrefix + sText; }       
    
    // Add message
    AddWindowAlertMsg(sText);
}

function AddWindowAlertMsg(sText)
{
    // Scrub JS escape characters
    sText = FormatJS(sText);
    
    // Wrap
    sText = WrapText(sText, "'");
    
    // Add
    _arrWindowMessageList.push("ShowWindowAlertMsg(" + sText + ", null, null);");
}

function ShowWindowAlertException(exError)
{    
    // Local Variables
    var sMsg = "";                                                                  // Message to display
    
    // Build message
    sMsg = "An exception occurred.<br/><br/>" + 
           "Error name: " + exError.name + "<br/>" +
           "Error description: " + exError.description + "<br/>" +
           "Error message: " + exError.message + "<br/>" +
           "Error number: " + exError.number;
    return ShowWindowAlertMsg(sMsg);
}

function ShowWindowAlertMsg(sText, iHeight, iWidth)
{
    // Validation   
    if (radalert == null) { return; }
    
    // Initialize
    if (sText == null || sText.length == 0) { sText = "An exception has occured."; }
    if (iHeight == null || Number(iHeight) == 0) { iHeight = 350; }
    if (iWidth == null || Number(iWidth) == 0) { iWidth = 350; }
    
    // Window Title
    var sWindowTitle = "ShawnAugust.Com";
    
    // Format message 
    var sHTML = WindowAlertCss + "<div class='MessageScroll' id='MessageContainer'>" + sText + "</div>" + WindowAlertJs; 
     
    // Show message 
    return radalert(sHTML, iHeight, iWidth, sWindowTitle);      
}

function ShowAllWindowMsg(bOnPageLoad)
{
    // Local Variables
    var arrMessageList = getWindowMessageList();                                    // Message list as object
    var sObjectVar = "radAlert";                                                    // Window variable name
    var sMessageList = "";                                                          // Message list as string
    
    try
    {
        // Validation
        if (arrMessageList == null || arrMessageList.length == 0) { return; }
                
        // Build JS to display message
        // NOTE: There's a hierarchy when displaying multiple messages. The radalert object's OnClientClose
        //       event must be used.
        for(var iCounter = 0; iCounter < arrMessageList.length; iCounter++)
        {
            if (iCounter > 0)
            {
                sMessageList += sObjectVar + (iCounter - 1) + ".OnClientClose = function() ";
                sMessageList += "{ ";
            }
            sMessageList += " var " + sObjectVar + iCounter + " = " + arrMessageList[iCounter];
        }
        if (iCounter > 1)
        { 
            for(var iCounter2 = 0; iCounter2 < (iCounter - 1); iCounter2++)
            {
                sMessageList += "} ";
            }
        }

        // Attach to the page load
        // NOTE: This is done via Server-Side to ensure the RadWindowManager is fully loaded
        if (bOnPageLoad == true) { sMessageList = "AttachEvent(window, 'load', function() { " + sMessageList + " });"; }      
        
        // Execute
        eval(sMessageList); 
                
        // Destroy
        setWindowMessageList(new Array());
    }
    catch(exError)
    {
        ShowJSExceptionMsg(exError);    
    }
}

function ShowJSExceptionMsg(exError)
{
    // Validation
    if (exError == null) { return; } 
    
    // Display
    window.alert("An exception occurred.\n\n" + 
                 "Error name: " + exError.name + "\n" +
                 "Error description: " + exError.description + "\n" +
                 "Error number: " + exError.number + "\n" +
                 "Error message: " + exError.message);
}

//Returns Viewport's Height or Width
function GetViewPortSize(width) {
  var viewportwidth;
  var viewportheight;
 
  //Mozilla/Netscape/Opera/IE7)
  if (typeof window.innerWidth != 'undefined') {
    viewportwidth = window.innerWidth;
    viewportheight = window.innerHeight;
  }
  //IE6
  else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0)
  {
    viewportwidth = document.documentElement.clientWidth;
    viewportheight = document.documentElement.clientHeight;
  }
  //Older versions of IE
  else
  {
    viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
    viewportheight = document.getElementsByTagName('body')[0].clientHeight;
  }
  
  if (width) {
    return viewportwidth;
  }
  else {
    return viewportheight;
  }
}
