//document.onkeydown = onkeydownIE


/*
Note all pages need this file, it's 
only inluded where needed.
*/
function AjaxGet(OnReplyFN, sURL) {

    var http = CreateXmlHttpRequestObject();
    http.open("GET", sURL, true);
    http.onreadystatechange = function () {
        if (http.readyState == 4) { //READYSTATE_COMPLETE
            OnReplyFN(http.responseText)
        }
    }
    http.send(null);
}

function CreateXmlHttpRequestObject() {
    var xmlObj;
    if (window.ActiveXObject) {
        try {
            xmlObj = new ActiveXObject("Microsoft.XMLHTTP"); //try ie first
        } catch (e) {
            xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
        }
    }
    else
        xmlObj = new XMLHttpRequest();
    return xmlObj;
}

function onkeydownIE() 
{ 
	onkeydownX(event)
}


var sLastTabID = ''
var sLastDivID = ''

function ShowTab(sTabID, sDivID) {

    var elem = document.getElementById(sTabID) //.class = "selected"        
    elem.className = "selected"

    if (sLastTabID != '') {
        document.getElementById(sLastTabID).className = ""
    }
    sLastTabID = sTabID


    if (sLastDivID != '') {
        document.getElementById(sLastDivID).style.display = "none"
    }

    document.getElementById(sDivID).style.display = ""

    sLastDivID = sDivID
}



function onkeydownX(eventX) 
{ 
    if (eventX == null)
	{		
	    return
	}	
	
	if ( eventX.keyCode == 13 && document.DefaultEnterButtonID != null) 
	{ 
        if (document.DefaultEnterButtonID != "NONE" && eventX.srcElement.outerHTML.indexOf("TEXTAREA") == -1)
		{		
			document.getElementById(document.DefaultEnterButtonID).click()
			eventX.returnValue = false; 
		}
		//var s = new String(
		if (eventX.srcElement.outerHTML.indexOf("TEXTAREA") == -1)
		{
			//only cancel the enter event if it came from a regular text box - not if
			//a multiline edit (<textarea>)
			eventX.returnValue = false; 
		}	
	} 
	
} 

function ToggleTableRows_A13A(ClickedRow, sTableID)
{	
	//This version of this function can be slow if the table is 
	//very large.  In this case it is better to use the one that
	//includes the table ID				
		
	var eTable = ClickedRow
	eTable = document.getElementById(sTableID)
	
	ToggleTableRows_A13A_1(ClickedRow, eTable)	
	
	RecordToggleState(eTable)
	var elem
		
	if (ClickedRow.EXPANDED == true || ClickedRow.EXPANDED == "true")
	{
		ClickedRow.EXPANDED = false		
		ClickedRow.cells[0].getElementsByTagName("IMG")[0].style.display=""
		ClickedRow.cells[0].getElementsByTagName("IMG")[1].style.display="none"			
	}
	else
	{
		ClickedRow.EXPANDED = true		
		if (ClickedRow.cells[0].getElementsByTagName("IMG") != null)
		{
			ClickedRow.cells[0].getElementsByTagName("IMG")[0].style.display="none"
			ClickedRow.cells[0].getElementsByTagName("IMG")[1].style.display=""
		}
	}	
}

function ToggleTableRows_Quick(ClickedRow, sTableID)
{
    
	var eTable = ClickedRow
	eTable = document.getElementById(sTableID)
	
	ToggleTableRows_A13A_1(ClickedRow, eTable)	
	
	//RecordToggleState(eTable)
	var elem
		
	if (ClickedRow.EXPANDED == true || ClickedRow.EXPANDED == "true")
	{
		ClickedRow.EXPANDED = false		
		ClickedRow.cells[0].getElementsByTagName("IMG")[0].style.display=""
		ClickedRow.cells[0].getElementsByTagName("IMG")[1].style.display="none"			
	}
	else
	{
		ClickedRow.EXPANDED = true		
		if (ClickedRow.cells[0].getElementsByTagName("IMG") != null)
		{
			ClickedRow.cells[0].getElementsByTagName("IMG")[0].style.display="none"
			ClickedRow.cells[0].getElementsByTagName("IMG")[1].style.display=""
		}
	}
}

function ToggleTableRows_A13A_1(ClickedRow, eTable)
{			
	//toggle rows	
	var ThisRow	
	
	for (var id=ClickedRow.rowIndex + 1; id < eTable.rows.length; id++) 
	{							
		ThisRow = eTable.rows[id]				
	
		if (ThisRow.getAttribute("NESTINGLEVEL") != null)
		{ 	
			if (ThisRow.getAttribute("NESTINGLEVEL") <= ClickedRow.getAttribute("NESTINGLEVEL"))
			{
				//row is at the same level or above as the
				//clicked row, stop processing						
				id = eTable.rows.length;
			}
			else																					
			{											
				//row is child of the clicked row
				//turn on or off
				if (ClickedRow.getAttribute("TOGGLESTATE") == "Closed")
				{
					if (parseInt(ThisRow.getAttribute("NESTINGLEVEL")) == parseInt(ClickedRow.getAttribute("NESTINGLEVEL")) + 1)
					{
						//row is a 1st generation child
						//show unconditionally																										
						ThisRow.style.display = ""
					}
					else
					{
						//row is a 2nd+ generation child
						//only show if it was previously shown
						if (ThisRow.getAttribute("LastStyleDisplay") == null)
						{							
							ThisRow.setAttribute("LastStyleDisplay","none")						
						}							
						ThisRow.style.display = ThisRow.getAttribute("LastStyleDisplay")										
					}
				}
				else
				{
					//hide all child rows unconditionally
					//saving previous show state
					ThisRow.LastStyleDisplay = ThisRow.style.display
					ThisRow.style.display = "none"									
				}					
			}				
		}																					
	}	

	if (ClickedRow.getAttribute("TOGGLESTATE") == "Closed")
	{		
		ClickedRow.setAttribute("TOGGLESTATE", "Open")
	}
	else
	{		
		ClickedRow.setAttribute("TOGGLESTATE", "Closed")
	}
	
}		



function RecordToggleState(eTable)
{	
	//caution: total size of all cookies must be < 4048
	var Cook1 = new Cookie(document, "Menu_State_TBL_APPTREE", null, "/");
	var Cook2 = new Cookie(document, "Menu_State_TBL_MAIN" , null, "/");
	Cook1.store()
	Cook2.store() //wipe out related cookes, if cookie length > 4048 a blank cooking is retured next time
	
	var Cook = new Cookie(document, "Menu_State_" + eTable.id , null, "/");
	Cook[0] = eTable.rows.length
	
	for (var i=0; i<eTable.rows.length; i++)
	{
		if (eTable.rows(i).style.display == "")
		{
			Cook[i*2 + 1] = ""
		}
		else
		{
			Cook[i*2 + 1] = "1"
		}
		
		if (eTable.rows(i).TOGGLESTATE == "Open")
		{
			Cook[i*2 + 2] = "1"
		}
		else
		{
			Cook[i*2 + 2] = "0"
		}
		
		
		//Cook[i*2 + 1] = eTable.rows(i).TOGGLESTATE
	}

	Cook.store()	
}


function RestoreToggleState(sTable) {	
     
	var eTable = document.getElementById(sTable)	
		
	var Cook = new Cookie(document, "Menu_State_" + eTable.id, null, "/");
	if (!Cook.load())
	{		
		return
	}
		
	if (Cook[0] != eTable.rows.length)
	{
		//the table state was saved when user was logged in as different person		
		return
	}


	var s = ""
	var row	
	var rowcount = eTable.rows.length
	
	
	for (var i=0; i<rowcount; i++)
	{	
		row = eTable.rows(i)				
	
		if (Cook[i*2 + 1] == "" )
		{
			row.style.display = ""
		}
		else
		{
			row.style.display = "none"
		}
		
		if (Cook[i*2 + 2] == "1" )
		{
			row.TOGGLESTATE = "Open"
		}
		else
		{
			row.TOGGLESTATE = "Closed"
		}	
		
				
		if (row.getElementsByTagName("IMG")[0] != null && 
			row.getElementsByTagName("IMG")[1] != null)
		{			
			if (row.TOGGLESTATE == "Open")
			{
				row.getElementsByTagName("IMG")[0].style.display="none"	//plus
				row.getElementsByTagName("IMG")[1].style.display=""		//minus		
				
				row.EXPANDED = true //todo: remove this prop everywhere
			}
			else
			{
				row.getElementsByTagName("IMG")[0].style.display=""		//plus
				row.getElementsByTagName("IMG")[1].style.display="none"	//minus
				
				row.EXPANDED = false
			}	
		}
		
	
		//SetPlusMinus(eTable.rows(i))	 		
	}
}





// The constructor function: creates a cookie object for the specified
// document, with a specified name and optional attributes.
// Arguments:
//   document: The Document object that the cookie is stored for. Required.
//   name:     A string that specifies a name for the cookie. Required.
//   hours:    An optional number that specifies the number of hours from now
//             that the cookie should expire.
//   path:     An optional string that specifies the cookie path attribute.
//   domain:   An optional string that specifies the cookie domain attribute.
//   secure:   An optional Boolean value that, if true, requests a secure cookie.
//
function Cookie(document, name, hours, path, domain, secure)
{
    // All the predefined properties of this object begin with '$'
    // to distinguish them from other properties which are the values to
    // be stored in the cookie.
    this.$document = document;
    this.$name = name;
    if (hours)
        this.$expiration = new Date((new Date()).getTime() + hours*3600000);
    else this.$expiration = null;
    if (path) this.$path = path; else this.$path = null;
    if (domain) this.$domain = domain; else this.$domain = null;
    if (secure) this.$secure = true; else this.$secure = false;
}

// This function is the store() method of the Cookie object.
Cookie.prototype.store = function () {
    // First, loop through the properties of the Cookie object and
    // put together the value of the cookie. Since cookies use the
    // equals sign and semicolons as separators, we'll use colons
    // and ampersands for the individual state variables we store 
    // within a single cookie value. Note that we escape the value
    // of each state variable, in case it contains punctuation or other
    // illegal characters.
    var cookieval = "";
    for(var prop in this) {
        // Ignore properties with names that begin with '$' and also methods.
        if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function')) 
            continue;
        if (cookieval != "") cookieval += '&';
        cookieval += prop + ':' + escape(this[prop]);
    }

    // Now that we have the value of the cookie, put together the 
    // complete cookie string, which includes the name and the various
    // attributes specified when the Cookie object was created.
    var cookie = this.$name + '=' + cookieval;
    if (this.$expiration)
        cookie += '; expires=' + this.$expiration.toGMTString();
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    if (this.$secure) cookie += '; secure';

    // Now store the cookie by setting the magic Document.cookie property.
    this.$document.cookie = cookie;
}

// This function is the load() method of the Cookie object.
Cookie.prototype.load = function() { 
    // First, get a list of all cookies that pertain to this document.
    // We do this by reading the magic Document.cookie property.
    var allcookies = this.$document.cookie;
    if (allcookies == "")
    {		
		return false;
	}

    // Now extract just the named cookie from that list.
    var start = allcookies.indexOf(this.$name + '=');
    if (start == -1) 
    {		
		return false;   // Cookie not defined for this page.
    }
    start += this.$name.length + 1;  // Skip name and equals sign.
    var end = allcookies.indexOf(';', start);
    if (end == -1) end = allcookies.length;
    var cookieval = allcookies.substring(start, end);

    // Now that we've extracted the value of the named cookie, we've
    // got to break that value down into individual state variable 
    // names and values. The name/value pairs are separated from each
    // other by ampersands, and the individual names and values are
    // separated from each other by colons. We use the split method
    // to parse everything.
    var a = cookieval.split('&');    // Break it into array of name/value pairs.
    for(var i=0; i < a.length; i++)  // Break each pair into an array.
        a[i] = a[i].split(':');

    // Now that we've parsed the cookie value, set all the names and values
    // of the state variables in this Cookie object. Note that we unescape()
    // the property value, because we called escape() when we stored it.    
    
    
    for(var i = 0; i < a.length; i++) 
    {		
        this[a[i][0]] = unescape(a[i][1]);
    }

    // We're done, so return the success code.
    return true;
}

// This function is the remove() method of the Cookie object.
Cookie.prototype.remove = function() {
    var cookie;
    cookie = this.$name + '=';
    if (this.$path) cookie += '; path=' + this.$path;
    if (this.$domain) cookie += '; domain=' + this.$domain;
    cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';

    this.$document.cookie = cookie;
}

