var pnlOverlay;
var pnlPopUp;

function displayModal( backgroundPanel, popupPanel )
{
    pnlOverlay = document.getElementById(backgroundPanel);
    pnlPopUp = document.getElementById(popupPanel);
    
    pnlOverlay.style.display = 'block';
    pnlPopUp.style.display = 'block';
    
    document.body.style.overflow = 'hidden';
    placeModal();
}

function cancelModal( backgroundPanel, popupPanel )
{
    document.getElementById(backgroundPanel).style.display = 'none';
    document.getElementById(popupPanel).style.display = 'none';
    document.body.style.overflow = 'auto';
    window.onresize = null;
}

function placeModal()
{
    if (!pnlPopUp || pnlPopUp.style.display == 'none')
        return;

    var clientHeight = document.documentElement.clientHeight;
    var clientWidth = document.documentElement.clientWidth;
    var totalHeight = document.documentElement.scrollHeight > clientHeight ? document.documentElement.scrollHeight : clientHeight;
    var totalWidth = document.documentElement.scrollWidth;
    var scrollTop = document.documentElement.scrollTop;
    var scrollLeft = document.documentElement.scrollLeft;
   
    pnlOverlay.style.height = totalHeight + 'px';
    pnlOverlay.style.width = totalWidth + 'px';

    pnlPopUp.style.top = (scrollTop + ((clientHeight-pnlPopUp.clientHeight)/2)) < 1 ? '1px' : scrollTop + ((clientHeight-pnlPopUp.clientHeight)/2) + 'px';
    pnlPopUp.style.left = (scrollLeft + ((clientWidth-pnlPopUp.clientWidth)/2)) < 1 ? '1px' : scrollLeft + ((clientWidth-pnlPopUp.clientWidth)/2) + 'px';

    window.onresize = function(){placeModal()};
}

function getXMLHTTPRequest()
{
    var request = false;
    
    if ( window.XMLHttpRequest )
    {
        request = new XMLHttpRequest();
        //alert("1");
    }
    else
    {
        if ( window.ActiveXObject )
        {
            try
            {
                request = new ActiveXObject("Msml2.XMLHTTP");
                 //alert("2");
            }
            catch(err1)
            {
                try
                {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                    //alert("3");
                }
                catch(err2)
                {
                    request = false;
                }
            }
        }
    }

    return request;
}

function DoCallback(url, params)
{
    // we need a random number to defeat client caching
    var myDate = new Date();

	// url:    URL to invoke
	// params: string object to pass to the remote URL

	// Add some parameters to the query string
	if ( (url+'').indexOf('?') != -1 )
	    url += '&';
	else
	    url += '?'
	    
	var pageUrl = url + 'callback=' + myDate.valueOf() + '&' + params;
	
	// Initialize the XmlHttp object
	var xmlRequest = getXMLHTTPRequest();
	
	// Prepare for a GET statement and synchronous.
	xmlRequest.open('GET', pageUrl, false);
	xmlRequest.send(null);
	
	// Return the XmlHttp object
	return xmlRequest.responseText;
}

function DoPostback(url, params, func)
{
    // we need a random number to defeat client caching
    var myDate = new Date();

	// url:    URL to invoke
	// params: string object to pass to the remote URL

	// Add some parameters to the query string
	if ( (url+'').indexOf('?') != -1 )
	    url += '&';
	else
	    url += '?'
	    
	var pageUrl = url + 'callback=' + myDate.valueOf();
	
	// Initialize the XmlHttp object
	var xmlRequest = getXMLHTTPRequest();
	
	// Prepare for a GET statement and synchronous. (All this is
	// arbitrary and can be changed in your own implementation.)
	xmlRequest.open('POST', pageUrl, true);
	xmlRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlRequest.setRequestHeader('Content-Length', params.length);
	xmlRequest.setRequestHeader('Contention', 'close');
	
	xmlRequest.onreadystatechange = function() {//Call a function when the state changes.
	    if(xmlRequest.readyState == 4 && xmlRequest.status == 200) {
		    eval(func + '(xmlRequest);');
	    }
    }

	xmlRequest.send(params);
}

function getXMLDoc(sXML)
{
    var doc;

    // code for IE
    if (window.ActiveXObject)
    {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(sXML);
    }
    // code for Mozilla, Firefox, Opera, etc.
    else
    {
        var parser = new DOMParser();
        doc = parser.parseFromString(sXML,"text/xml");
    }
    
    return doc;
}

function getQueryVariable(variable)
{
    var query = window.location.search.substring(1);  
    var vars = query.split("&");  
    for (var i=0;i<vars.length;i++)
    {
        var pair = vars[i].split("=");    
        if (pair[0] == variable)
        {
            return pair[1];
        }
    }
}
