var coveringLayer;

var dialogs = new Array();

function GetCoveringLayer()
{
    var cLayer;
    
    cLayer = document.getElementById("coveringLayer");
    
    if (cLayer == null)
    {
        cLayer = document.createElement("div");
        
        cLayer.id = "coveringLayer";
        cLayer.className = "CoveringLayer";
                
        cLayer.style.display = "none";
        
        document.body.appendChild(cLayer);
        
        return cLayer;
    }
    else
    {
        return cLayer;
    }
}

function ShowCoveringLayer()
{
   var cLayer;
   
   cLayer = GetCoveringLayer();
   
   cLayer.style.display = ""; 
}

function HideCoveringLayer()
{
   var cLayer;
   
   cLayer = GetCoveringLayer();
   
   cLayer.style.display = "none"; 
}

function ShowDialog(action, mode, data, height, width)
{
    var httpRequest;

    ShowCoveringLayer();
    httpRequest = CreateAsyncObject();

    httpRequest.onreadystatechange = function() { DialogRequestCallbackRoutine(httpRequest, height, width); };
    httpRequest.open("POST", "DialogController.aspx?Action=" + action + "&Mode=" + mode, true);
    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    httpRequest.setRequestHeader('Content-Length', data.length);
    httpRequest.send(data);
}

function CloseDialog()
{
    if (dialogs.length != 0)
    {
        document.body.removeChild(dialogs[dialogs.length - 1]);
        
        dialogs.length = dialogs.length - 1;
        
        if (dialogs.length == 0)
        {
            HideCoveringLayer();
        }
    }
}

function DialogRequestCallbackRoutine(httpRequest, height, width)
{
    var newDialog; 
    var xmlRoot;
    var status;
    var dialogContent;
    var errorDetails;  
    
    try
    {
        if (httpRequest.readyState == 0)
        {
            //Uninitialized
        }
        else if (httpRequest.readyState == 1)
        {
            //Loading
        }
        else if (httpRequest.readyState == 2)
        {
            //Loaded
        }
        else if (httpRequest.readyState == 3)
        {
            //Interactive
        }
        else if (httpRequest.readyState == 4)
        {
            //Complete
            if (httpRequest.status == 200) 
            {
                xmlRoot = httpRequest.responseXML.getElementsByTagName("DialogResult").item(0);
                
                if (xmlRoot)
                {
                    status = xmlRoot.getElementsByTagName("Status").item(0);
                    
                    if (status)
                    {
                        if (status.firstChild.data == "success")
                        {
                            dialogContent = xmlRoot.getElementsByTagName("DialogContent").item(0);
                           
                            if (dialogContent)
                            {
                                newDialog = document.createElement("div");
                                newDialog.id = "dialog" + Math.floor(Math.random() * 100001); //assigning a random number - for creating unique ID each time a dialog box is created.
                                newDialog.innerHTML = dialogContent.firstChild.data;
                                newDialog.style.position = "absolute";
                                newDialog.getElementsByTagName("div").item(0).style.height = height + "px";
                                newDialog.getElementsByTagName("div").item(0).style.width = width + "px";
                                newDialog.style.top = "20";
                                newDialog.style.left = (document.getElementById("coveringLayer").offsetWidth - width)/2;
                                newDialog.style.zIndex = "3";
                                document.body.appendChild(newDialog);
                                
                                //storing the reference of the new dialog in the Array --- dialogs
                                //When CloseDialog method is called, it removes the Last Element from this Array only.
                                dialogs[dialogs.length] = newDialog;
                            }
                            else
                            {
                                alert("Unable to get data from the server. Please try again.");
                                HideCoveringLayer();
                                return;
                            }      
                        }
                        else if (status.firstChild.data == "error")
                        {
                            //error occured while server-side processing.
                           
                            errorDetails = xmlRoot.getElementsByTagName("ErrorDetail").item(0);
                            
                            if (errorDetails)
                            {
                                alert("Error =======" + errorDetails.firstChild.data);
                                HideCoveringLayer();
                                return; 
                            }
                            else
                            {
                                alert("Unable to get data from the server. Please try again.");
                                HideCoveringLayer();
                                return; 
                            }    
                        }
                        else
                        {
                            alert("Unable to get data from the server. Please try again.");
                            HideCoveringLayer();
                            return;
                        }
                    } 
                    else
                    {
                        alert("Unable to get data from the server. Please try again.");
                        HideCoveringLayer();
                        return;
                    } 
                }
                else
                {
                    alert("Unable to get data from the server. Please try again.");
                    HideCoveringLayer();
                    return; 
                }
            }
            else
            {
                alert("Unable to get data from the server. Please try again.");
                HideCoveringLayer();
                return; 
            }                  
        }
    }
    catch (e)
    {
        //if the code reached here, it means there have been some error...
        alert("77777Unable to get data from the server. Please try again.");
        HideCoveringLayer();
        return; 
    }
}

function CreateAsyncObject()
{
    var httpRequest;
    
    httpRequest = null;

    if (window.XMLHttpRequest)
    {
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType)
        {
            httpRequest.overrideMimeType('text/xml');
        }
    } 
    else if (window.ActiveXObject)
    {
        try
        {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e)
        {
            try
            {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e)
            {
            }
        }
    }

    return httpRequest;
}

function FormDataToString(form)
{
    for (i=0;i<form.length;i++)
    {
        //alert("**************    " + form[i].type);
        
        if (form[i].type == "hidden")
        {
            if (form[i].disabled == false && form[i].name != "")
            {
                alert("hidden, " + form[i].name);
            }
        }
        else if (form[i].type == "text")
        {
            if (form[i].disabled == false && form[i].name != "")
            {
                alert("text, " + form[i].name);
            }
        }
        else if (form[i].type == "textarea")
        {
            alert("textarea");
        }
        else if (form[i].type == "radio")
        {
            alert("radio");
        }
        else if (form[i].type == "radio")
        {
            alert("radio");
        }
        else if (form[i].type == "check-box")
        {
            alert("check-box");
        }
        else if (form[i].type == "select-one")
        {
            alert("select-one");
        }
        else
        {
            alert("**************    " + form[i].type);
        }
    } 
}