/*** CallBack code ***/

// UpdateContent takes a variable number of arguments, in the format: 
// (SourceID, newContentKey, formatStyle, ... [repeat pattern])
// Where 'SourceID' is the id of the HTML element receiving the new content, 'newContentKey' is the C# dictionary key corresponding to the new content for the previously listed HTML element with 'SourceID' id, and 'formatStyle' is the customized style of formatting (indicated in the formatServerData() switch block) for the previously listed new content, in the HTML element with 'SourceID' id
function UpdateContent()
{    
    // Construct query string of name/value pairs to send to server
    var args = UpdateContent.arguments;
    var queryString = "";
    var num, num2;
    var i = 0;
    
    while (i < args.length)
    {
        num = i + 1;
        num2= i + 2;
        queryString += args[i] + "=" + args[num] + "&format" + i + "=" + args[num2];
        if (i + 3 < args.length)
        {
            queryString += "&"
        }
        i += 3;
    } 
    
    CallServer(queryString, "");
}

function ReceiveServerData(rValue)
{
    // Parse query string returned by server
    var pairs = rValue.split("&");
    var dataArr = new Array();
    var formatStyle;
    var num = 3;
    
    for (var i=0; i<pairs.length; i++)
    {
        if (num % 2 == 0)
        {
            formatStyle = pairs[i].split("=")[1];
            
            // Use this function to customize returned data formatting 
            // for different uses
            formatServerData(dataArr,formatStyle);
            
            dataArr.length = 0;
        }
        else
        {        
            dataArr[0] = pairs[i].split("=")[0];
            dataArr[1] = pairs[i].split("=")[1];
        }
        num++;
    }
}

function formatServerData(dataArr,formatStyle)
{
    switch (formatStyle)
    {
        case "format1":
          document.getElementById(dataArr[0]).innerHTML = dataArr[1];
          break;    
        case "format2":
          document.getElementById(dataArr[0]).value = dataArr[1];
          break;
        default:
          break;
    }
}

function CallBackErrorHandler()
{
    // function that handles errors in callback functionality.
    alert("CallBack Failed!");
}


/*** Fading content code ***/

var timer;

function contentFade(domObj)
{
	if (timer) clearTimeout(timer);	
	
    if (!document.getElementById('fadeDiv'))
    {
        var fadeDiv = document.createElement("div");
        fadeDiv.id = "fadeDiv";
        document.getElementById('page_container').appendChild(fadeDiv);
    }
    
    var faderDiv = document.getElementById('fadeDiv');
	faderDiv.style.height = (domObj.offsetHeight - 15) + "px";
	fadeIn(fadeDiv.id,0);
}

function fadeIn(id,num)
{
	var obj = document.getElementById(id);
	obj.className = "fade"+(++num);
	if (num < 7)
		timer = setTimeout('fadeIn("'+id+'",'+num+')',100);
	else
	    document.getElementById('page_container').removeChild(obj);
}


/*** Tool Tips code ***/

function showTip(topic,e)
{	
	if (!e) e = window.event;

	if (e.pageX || e.pageY)
	{
		var x = e.pageX;
		var y = e.pageY;
	}
	else
	{
		var x = e.clientX + getScrollWidth();
		var y = e.clientY + getScrollHeight();
	}		

	if (!document.getElementById('tip'))
	{
		var tip = document.createElement("div");
		tip.id = "tip";
		
		//var xmlNodes = getXMLChildNodes("popups/popup[@id='" + topic + "']");			
		//var popText = xmlNodes[0][0];
		var tipText = document.createTextNode("popText");
		var tipP = document.createElement("p");
		
	    tipP.appendChild(tipText);
	    tip.appendChild(tipP);
	    document.getElementById('page_container').appendChild(tip);
	}

	var toolTip = document.getElementById('tip');
	toolTip.style.top = (y + 2) + "px";
	toolTip.style.left = (x + 10) + "px";
}

function hideTip()
{
	try
	{
	    document.getElementById('page_container').removeChild(document.getElementById('tip'));
    }
    catch (e)
    {
    }	
}

function getScrollWidth()
{
	if (document.body.scrollLeft)
		return document.body.scrollLeft
	else if (document.documentElement.scrollLeft)
		return document.documentElement.scrollLeft;
	else 
		return 0;
} 

function getScrollHeight()
{	
	if (document.body.scrollTop)
		return document.body.scrollTop
	else if (document.documentElement.scrollTop)
		return document.documentElement.scrollTop;
	else 
		return 0;	
}


/*** Load XML document ***/

var xmlDoc;

function loadXML(url)
{	
	// code for IE
	if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function() 
		{
			if (xmlDoc.readyState == 4) 
				extractData();
		};	
	}
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("","",null);
		xmlDoc.onload = extractData;
	}
	else
	{
		alert('Your browser cannot handle this script!');
		return false;
	}
	
	xmlDoc.load(url);
}

function extractData()
{
}

function getXMLChildNodes(path)
{
    var nodesArr = new Array;
    
    // This code only gets Child Node values that are "one-node-deep" into the XPath node result set
    // code for IE
    if (window.ActiveXObject)
    {
        xmlDoc.setProperty("SelectionLanguage","XPath");
        var nodes = xmlDoc.selectNodes(path);
        
        for (var i = 0; i < nodes.length; i++)
        {       
            nodesArr[i] = new Array;
            for (var k = 0; k < nodes[i].childNodes.length; k++)
            {
                nodesArr[i][k] = nodes[i].childNodes[k].nodeValue;
            }
        }      
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
    {
        var nodeSetObject = document.evaluate(path, xmlDoc, null, XPathResult.ANY_TYPE, null);
        var result = nodeSetObject.iterateNext();
        var i = 0;

        while (result)
        {                 
            nodesArr[i] = new Array;
            for (var k = 0; k < result.childNodes.length; k++)
            {
                nodesArr[i][k] = result.childNodes[k].nodeValue;
            }  
            
            result = nodeSetObject.iterateNext(); 
            i++;      
        }       
    }
    
    return nodesArr;
}


/*** What happens during page load ***/

for (var i = 1; i < 3; i++)
{
    if (document.getElementById('HelpNav'+i))
    {
        if (document.getElementById('btnNext'+i))
            document.getElementById('HelpNav'+i).removeChild(document.getElementById('btnNext'+i));
    }
}

if (document.getElementById('btnPrevPage'))
{
    document.getElementById('PrevPage').removeChild(document.getElementById('btnPrevPage'));
}  

for (var i = 1; i < 10; i++)
{
    if (document.getElementById("pnlPageContent" + i))
    {
        contentFade(document.getElementById("pnlPageContent" + i));
    }    
}

if (document.getElementById('pnlBDDlinks'))
{
    var pnlBDDlinks = document.getElementById('pnlBDDlinks');
    var BDDlinks = pnlBDDlinks.getElementsByTagName("a");
    for (var k in BDDlinks)
    {
        BDDlinks[k].onclick = function()
        {
            window.open(this.href);
            return false;
        };
    }
}