	
function ajaxTxRx(address, params, operation, option1, option2) 
{
	var ajaxRequest = getRequestObject();
	var url = address;
/*	
	ajaxRequest.onreadystatechange = ajaxRx;
	ajaxRequest.open("GET", url, true);
	ajaxRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	
	if (params != null) 
	{
		ajaxRequest.send(params);
	}
	else 
	{
		ajaxRequest.send('');	
	}
*/	

           
     



    function ajaxRx() 
    {
        var data;
        var valid;
        var error;
        var x;
        var col_width;
        var col_width_str;
        var col_width2;
        var col_width_str2;
        var col;
        var col2;
        var node;
        var y;
        var z;
        var tbody;
        var table;
        var tables;
        var headerTr;
        var headerColgroup;
        var contentColgroup;
        var tr;
        var td;
//        var children;
        var nodeName;
                       
	    if (ajaxRequest.readyState == 4) 
	    {   
	        if (ajaxRequest.status == 200) 
	        { 
	            //Successful Request
    			
			    var ajaxReply = getXmlDoc(ajaxRequest.responseText);
			    error = ajaxReply.getElementsByTagName("error")[0];
			    if(error != null) 
			    {
			         alert("Error AJAX call failed: " + error.text);
			    }
			    else 
			    {
			    
			        switch (operation)
			        {
			            case   LOGON:
			                {
	                            data = ajaxReply.getElementsByTagName("data")[0];
		                        valid = data.getElementsByTagName("valid")[0].childNodes[0].nodeValue;
		                        if(valid > 0) 
		                        {
			                        top.location.href = "pages/home.htm";
		                        }
		                        else 
		                        {
			                        alert("Login failed.\nPlease validate user and password\n and retry");
		                        }			    			        
			                    break;
			                }
			            
			            case    LOGOUT:
			                {
                                top.location.href = "../login.htm";
			                
			                    break;
			                }
			            
			            case    VALID_USER:
			                {
//	                                if (ajaxReply.getElementsByTagName("valid")[0].firstChild.data.length > 0)
//		                                return(true);
			                    break;			                
			                }
			            
			            case    GET_ROLEID:
			                {
                                x = ajaxReply.getElementsByTagName("roleid")[1].childNodes[0].nodeValue;
                                if (x == 3) 
                                {
                                    if (option1 == "datagrid") 
                                    {
                                        document.getElementById("new").onclick = function() { }
                                        document.getElementById("new").onmouseover = function() { }
                                        document.getElementById("new").childNodes[0].nodeValue = "";
                                        document.getElementById("delete").onclick = function() { }
                                        document.getElementById("delete").onmouseover = function() { }
                                        document.getElementById("delete").childNodes[0].nodeValue = "";
                                    } 
                                    else 
                                    if (option1 == "object") 
                                    {
                                        var parent = document.getElementById("save").parentNode;
                                        for (y = 0; y < parent.childNodes.length; y++) 
                                        {
                                            var child = parent.childNodes[y];
                                            child.onclick = function() { }
                                            child.onmouseover = function() { }
                                            child.title = "";
                                            while (child.childNodes.length > 0) 
                                            {                                
                                                child.removeChild(child.childNodes[0]);
                                            }
                                        }
                                    }
                                }
                                if (x == 1) 
                                {
                                    if (option1 == "home") 
                                    {                        
                                        var element = document.getElementById("adminHeader");
                                        element.style.display = "block";
                                        
                        //                            if (document.all)  // FireFox returns type as nodes
                        //                           {
                        //                              element.nextSibling.style.display = "block";
                        //                         }
                        //                        else 
                        //                       {
                        //                          element.nextSibling.nextSibling.style.display = "block";
                        //                     }

                                        //   				        element.nextSibling.style.cssText = "display:block";
                                    }
                                }
                                break;					    			                                			                
			                }
			                
			            case    GET_REPORTSURL:
			                {
                                reportsURL = ajaxReply.getElementsByTagName("url")[0].firstChild.data;  
			                    break;			                
			                }
			                
			            case    LOAD_DATAGRID:
			                {
                                var COLUMN_COUNT = 0;
                                var COLUMN_NAMES = new Array();    
                                			                			                
                                //Find the column names
                                
                                table = ajaxReply.getElementsByTagName("columns")[0];

                                if (table != null) 
                                {
                                    headerTr = document.getElementById("headerTr");
                                    headerColgroup = document.getElementById("headerColgroup");
                                    contentColgroup = document.getElementById("contentColgroup");
                                    
                                    col_width = 800 / (table.childNodes.length - 2);
                                    col_width_str = col_width.toString() + "px";

                                    for (x = 0; x < table.childNodes.length; x++) 
                                    {
                                        if (document.all)  // FireFox returns type as nodes
                                        {
                                            col_width2 = Math.floor(800 / (table.childNodes.length - 2));
                                            col_width_str2 = col_width.toString() + "px";

                                            COLUMN_COUNT++;
                                            node = table.childNodes[x];

                                            td = document.createElement("td");
                                            td.noWrap = true;
                                            col = document.createElement("col");
                                            col.style.width = col_width_str2;
                                            col.noWrap = true;
                                            col2 = document.createElement("col");
                                            col2.style.width = col_width_str2;
                                            col2.noWrap = true;

                                            if (node.nodeName.toLowerCase() == "address") 
                                            {
                                                col = document.createElement("<col width=225px nowrap>");
                                                col2 = document.createElement("<col width=225px nowrap>");
                                            }
                                            else 
                                            if (node.nodeName.toLowerCase() == "description" && x == table.childNodes.length - 2) 
                                            {
                                                col = document.createElement("col");
                                                col2 = document.createElement("col");
                                            }

                                            td.appendChild(document.createTextNode(node.nodeName.replace(/\_/g, ' ')));  // get rid of spaces in name TAD

                                            if (x + 2 < table.childNodes.length) 
                                            {
                                                td.className = "tableHeader";
                                                td.id = node.nodeName;

                                                td.name = "asc";
                                                td.style.cursor = "pointer";
                                                // td.style.fontWeight = "bold";
                                                // td.style.textAlign = "center";
                                                
                                                td.onclick = function() 
                                                {
                                                    setOrderBy(this.id);
                                                    loadDataGrid(PAGE_OBJECT, -1);
                                                }
                                                
                                            }
                                            else 
                                            {
                                                td.className = "hidden";
                                            }

                                            COLUMN_NAMES[COLUMN_NAMES.length] = node.nodeName;
                                            headerTr.appendChild(td);
                                            headerColgroup.appendChild(col);
                                            contentColgroup.appendChild(col2);
                                        }
                                        else // FireFox
                                        if (table.childNodes[x].nodeName.indexOf("#text") == -1) 
                                        {
                                            col_width = Math.floor(800 / ((table.childNodes.length - 4) / 2));
                                            col_width_str = col_width.toString() + "px";

                                            COLUMN_COUNT++;
                                            node = table.childNodes[x];
                                            td = document.createElement("td");
                                            td.noWrap = true;
                                            col = document.createElement("col");
                                            col.style.width = col_width_str;
                                            col.noWrap = true;
                                            col2 = document.createElement("col");
                                            col2.style.width = col_width_str;
                                            col2.noWrap = true;

                                            if (node.nodeName.toLowerCase() == "address") 
                                            {
                                                col = document.createElement("<col width=225px nowrap>");
                                                col2 = document.createElement("<col width=225px nowrap>");
                                            }
                                            else 
                                            if (node.nodeName.toLowerCase() == "description" && x == table.childNodes.length - 2) 
                                            {
                                                col = document.createElement("col");
                                                col2 = document.createElement("col");
                                            }

                                            td.appendChild(document.createTextNode(node.nodeName.replace(/\_/g, ' ')));

                                            if (x + 4 < table.childNodes.length) 
                                            {
                                                td.className = "tableHeader";
                                                td.id = node.nodeName;

                                                td.name = "asc";
                                                td.style.cursor = "pointer";
                                                
                                                td.onclick = function() 
                                                {
                                                    setOrderBy(this.id);
                                                    loadDataGrid(PAGE_OBJECT, -1);
                                                }
                                            }
                                            else 
                                            {
                                                td.className = "hidden";
                                            }

                                            COLUMN_NAMES[COLUMN_NAMES.length] = node.nodeName;
                                            headerTr.appendChild(td);
                                            headerColgroup.appendChild(col);
                                            contentColgroup.appendChild(col2);
                                        }
                                    }
                                }

                                tables = ajaxReply.getElementsByTagName("row");

                                tbody = document.getElementById("tbody");

                                //Clean out tbody

                                while (tbody.getElementsByTagName("tr").length > 0) 
                                {
                                    tbody.removeChild(tbody.childNodes[0]);
                                }

                                for (x = 0; x < tables.length; x++) 
                                {
                                    tr = document.createElement("tr");
                                    tr.onselectstart = function() { return false; }; //Disable text select

                                    tr.onclick = rowDoubleClick;
                                    /* iPhone
                                    tr.onclick = function() {
                                    changeBGColor(this);
                                    rowSingleClick(this);
                                    }
                                    tr.ondblclick = rowDoubleClick;
                                    */

                                    for (y = 0; y < COLUMN_COUNT; y++) 
                                    {
                                        td = document.createElement("td");

                                        tr.appendChild(td);

                                        td.name = COLUMN_NAMES[y];

                                        if (y + 2 < COLUMN_COUNT) 
                                        {
                                            td.className = "listoff";
                                        }
                                        else 
                                        {
                                            td.className = "hidden";
                                        }

                                        td.appendChild(document.createTextNode(" "));
                                    }
                                    
//                                    children = tables[x].childNodes[tables[x].childNodes.length - 2].childNodes[0].nodeValue;

                                    row = tables[x]; 
                                    
                                    // put the data on the grid
                                    
                                    for (y = 0; y < row.childNodes.length; y++) 
                                    {
                                        //Find node name
                                        nodeName = row.childNodes[y].nodeName;

                                        for (z = 0; z < COLUMN_COUNT; z++) 
                                        {
                                            if (tr.getElementsByTagName("td")[z].name == nodeName) 
                                            {
                                                td = tr.getElementsByTagName("td")[z];

                                                if (document.all) 
                                                {
                                                    if (row.childNodes[y].text != "") 
                                                    {
                                                        td.childNodes[0].nodeValue = row.childNodes[y].childNodes[0].nodeValue;
                                                    }
                                                }
                                                else 
                                                {
                                                    if (row.childNodes[y].textContent.indexOf("\n") == -1)
                                                    {
                                                        td.childNodes[0].nodeValue = row.childNodes[y].childNodes[0].nodeValue;
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                    }
                                    tbody.appendChild(tr);
                                }
                                
                                COLUMN_COUNT = 0;
                                COLUMN_NAMES = null;
                                
                                //Set the number of returned rows
                                document.getElementById("rowCount").innerText = "Rows: " + tbody.childNodes.length;

                                break;
                            }
                            
			            case LOAD_OBJECT:
			                {	                        
                                var row = ajaxReply.getElementsByTagName("row")[0];
                                var disabled = false;
                                var selects 	= document.getElementsByTagName("select");
                                var inputs 		= document.getElementsByTagName("input");
                                var textareas 	= document.getElementsByTagName("textarea");
                                
                                if (row.getElementsByTagName("titlebar")[0].childNodes[0] != null)
                                {
                    	            var value = row.getElementsByTagName("titlebar")[0].childNodes[0].nodeValue;
                    	            if (document.getElementById("titlebar").childNodes.length == 1)
                    	            {
                    	                document.getElementById("titlebar").appendChild(document.createTextNode(value));
                    	            } 
                                }
                                else 
                                {
                                    document.getElementById("titlebar").appendChild(document.createTextNode("New"));	                                
                                }
                                
                                for (x = 0; x<inputs.length; x++) 
                                {
                    	            //alert(inputs[x].id);
                    	            if (disabled) 
                    	            {
                    		            inputs[x].disabled = disabled;
                    	            }
                    	            
                    	            if (inputs[x].type == "checkbox") 
                    	            {
                    		            // alert(inputs[x].id);
                    		            //Checkbox values might be null -- check
                    		            if(row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes[0] != null) 
                    		            {
                        		            value = row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes[0].nodeValue;
                        		            
                        		            if (value.toLowerCase() == "1") 
                        		            {
                        			            inputs[x].checked = true;
                        		            }
                        		            else 
                        		            {
                        			            inputs[x].checked = false;
                        		            }
                    		            }
                    	            }
                    	            else 
                    	            if (inputs[x].type == "button")
                    	            {
                    	            }                            	        
                    	            else 
                    	            if (row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes.length > 0)
                    	            {
                    		            document.getElementById(inputs[x].id.toLowerCase()).value = row.getElementsByTagName(inputs[x].id.toLowerCase())[0].childNodes[0].nodeValue;
                    	            }
                                }
                               
                                for (x = 0; x<selects.length; x++) 
                                {
                    	            if (disabled) 
                    	            {
                    	                selects[x].disabled = disabled;
                    	            }
                    	            
                    	            if (row.getElementsByTagName(selects[x].id.toLowerCase())[0].childNodes.length > 0) 
                    	            {
                    		            document.getElementById(selects[x].id.toLowerCase()).value = row.getElementsByTagName(selects[x].id.toLowerCase())[0].childNodes[0].nodeValue;
                    	            }
                                }
                                
                                for (x = 0; x<textareas.length; x++) 
                                {
                    	            if (disabled) 
                    	            {
                    	                textareas[x].disabled = disabled;
                    	            }
                    	            if (row.getElementsByTagName(textareas[x].id.toLowerCase())[0].childNodes.length > 0) 
                    	            {
                    		            document.getElementById(textareas[x].id.toLowerCase()).value = row.getElementsByTagName(textareas[x].id.toLowerCase())[0].childNodes[0].nodeValue;
                    	            }
                                }
                                break;                            
                            }
                                                       
			            case    LOAD_DROPDOWN:
			                {
                                var options = ajaxReply.getElementsByTagName("row");
                                for(x = 0; x<options.length; x++) 
                                {
                                    var option  = options[x];
                                    
                                    if (document.all)  // IE vs. FireFox
                                    {                        
                                        value   = option.getElementsByTagName("value")[0].text;
                                        text    = option.getElementsByTagName("text")[0].text;                        
                                    }
                                    else
                                    {
                                        value   = option.getElementsByTagName("value")[0].textContent;
                                        text    = option.getElementsByTagName("text")[0].textContent;                        
                                    }
                                              
                                    option1.options[option1.options.length] = new Option(text, value);
                                }
                                if(option2 != -1) 
                                {
//            	                    dropdown.value = option1;
                                } 
			                    break;			                
			                }
                               
			            case    SAVE_OBJECT:
			                {            
/*			                
                                if (objectId == "false") 
                                {
                                    objectId	= ajaxReply.getElementsByTagName("success")[0].childNodes[0].nodeValue;
                                    UPDATE		= true;
                                } 
*/                                
                                if (option2 == true) 
                                {
                      	            window.opener.refreshDataGrid();
                                }
                                if (option1 == "saveAndClose") 
                                {
                                    window.close();
                                }
                                else 
                                if (option1 == "saveAndNew") 
                                {
                                   ClearForm();
                                   //Set address info
                            
                                    UPDATE = false;
                                    document.getElementById("delete").disabled = true;
                                }
                                
                                //Set delete button to active if exists
                                
                                if(document.getElementById("delete") != null) 
                                {
                        	        document.getElementById("delete").disabled = false;
                                }
                                if (option1 == "saveAndClose") 
                                { 
                                    window.close(); 
                                }
                                else
                                {
                                   // location = "datagrid.htm?objectTypeCode=" + objectTypeCode;
                                   load();
                                }                        
			                
			                    break;
			                }   
			  
			            case    DELETE_OBJECT:
			                {
                       	        window.opener.refreshDataGrid();
						        window.close();
			                
			                    break;
			                }
			                
			                
			                                                                                                               
			        }			        			        
			    }
		    }
		    else 
		    {
		        alert("Error AJAX call failed.  Could not contact web service");
		    }
	    }
    }				
}

function getRequestObject() 
{
	if (window.ActiveXObject) 
	{
		return (new ActiveXObject("Microsoft.XMLHTTP"));
	}
	else 
	if (window.XMLHttpRequest) 
	{
		return(new XMLHttpRequest());
	}
	else 
	{
	    return(null);
	}
}
	
function getXmlDoc(doc) 
{
	var xmlDocument;
	
	if (window.ActiveXObject) 
	{
		xmlDocument=new ActiveXObject("Microsoft.XMLDOM");
		xmlDocument.loadXML(doc);
	}
	// code for Mozilla, Firefox, Opera, etc.
	else 
	if (document.implementation && document.implementation.createDocument) 
	{
		var parser = new DOMParser();
		xmlDocument = parser.parseFromString(doc, "text/xml");
	}
	xmlDocument.async=false;
	return(xmlDocument);
}

function validateUser() 
{       		       		                                  		       		              		       			
    ajaxTxRx("WebServices.asmx/SessionValid",null, VALID_USER, null, null);
}								

function GetRoleId(source) 
{       		       		                                  		       		              		       			
    ajaxTxRx("WebServices.asmx/GetRoleId",null, GET_ROLEID, source, null);
}	





/*

function sendRequestPostNoFunction(address, parameters, sendRequest) {
	sendRequest.open("POST", address, true);
	sendRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

	if(parameters != null) {	 
    //    request.setRequestHeader('Content-length', length(parameters));
		sendRequest.send(parameters);
	}else {
    //    request.setRequestHeader('Content-length', 0);
		sendRequest.send('');
	}
}


	
	
	function login() 
	{       		       		                                  		       		              		       		
	    loginRequest = getRequestObject();
		var username = document.getElementById("username").value;
		var password = document.getElementById("password").value;
		var params	= "username="+username+"&password="+password;
		sendRequestPost("pages/WebServices.asmx/Login", params, loginRequest, loginResponse);
	}								
	
	function loginResponse() 
	{
		if (loginRequest.readyState == 4) 
		{   
		    if (loginRequest.status == 200) 
		    { 
		        //Successful Request
		    	//alert(loginRequest.responseText);
				
				var xmlDoc = getXmlDoc(loginRequest.responseText);
				var error = xmlDoc.getElementsByTagName("error")[0];
				if(error != null) 
				{
				     alert("Login AJAX call failed: "+childNodes[0].nodeValue);
				}
				else 
				{
				    var data = xmlDoc.getElementsByTagName("data")[0];
					var valid = data.getElementsByTagName("valid")[0].childNodes[0].nodeValue;
					if(valid > 0) 
					{
						top.location.href = "pages/home.htm";
					}
					else 
					{
						alert("Login failed.\nPlease validate user and password\n and retry");
					}
				}
			}
			else 
			{
			    alert("Error AJAX Call to Login failed.  Could not contact web service");
			}
		}
	}
	





var request;

function getRequestObject() {
	if(window.ActiveXObject) {
		return(new ActiveXObject("Microsoft.XMLHTTP"));
	}else if(window.XMLHttpRequest) {
		return(new XMLHttpRequest());
	}else {return(null);}
}

function sendRequest(address, responseHandler, request) {
	//request = getRequestObject();
	request.onreadystatechange = responseHandler;
	request.open("POST", address, true);
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

//    request.setRequestHeader('Content-length', '0');
	
	request.send('');
}

function sendRequestGet(address, params, requestObject, functionName) {
	//alert("Send request");
	//request = getRequestObject();
	var url=address;
	if(params != "" && params != null) {
		url+=params;	
	}
	requestObject.onreadystatechange = functionName;//Make sure to include
	requestObject.open("GET", url, true);
	requestObject.send(null);	
}










function sendRequestPost(address, parameters, sendRequest, functionName) {
	//request = getRequestObject();
	sendRequest.onreadystatechange = functionName;//Add in htm file
	sendRequest.open("POST", address, true);
	sendRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	
	
	if(parameters != null) {
		sendRequest.send(parameters);
//        request.setRequestHeader('Content-length', length(parameters));
	}else {
		sendRequest.send('');
//        request.setRequestHeader('Content-length', '0');		
	}
}
function sendRequestPostNoFunction(address, parameters, sendRequest) {
	sendRequest.open("POST", address, true);
	sendRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

	if(parameters != null) {	 
    //    request.setRequestHeader('Content-length', length(parameters));
		sendRequest.send(parameters);
	}else {
    //    request.setRequestHeader('Content-length', 0);
		sendRequest.send('');
	}
}
function sendRequestWithData(address, data, responseHandler, request) {
	//request = getRequestObject();
	request.onreadystatechange = responseHandler;
	request.open("POST", address, true);
	request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

//    request.setRequestHeader('Content-length', length(data));

	request.send(data);
}

function showResponseAlert() {
	if(request.readyState == 4) {
		//alert("status: "+request.status);
		if(request.status == 200) {
			var xml = request.responseText;
			//alert("XML: "+xml);
			return("test");
		}else {
			alert("Could not contact servlet");	
		}
	}
}

function getXmlDoc(doc) {
	var xmlDocument;
	if (window.ActiveXObject) {
		xmlDocument=new ActiveXObject("Microsoft.XMLDOM");
		xmlDocument.loadXML(doc);
	}
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument) {
		var parser=new DOMParser();
		xmlDocument=parser.parseFromString(doc, "text/xml");
	}
	xmlDocument.async=false;
	return(xmlDocument);
}

*/