/*
This is the format of the response that is expected from whatever service is called using these functions.
Anything other than "SUCCESS" in the status tags will result in an error being displayed in the messageTagID element.
The error tags contents are displayed to the user in the messageTagID element if there is an error tag returned.
The msg tag is displayed in the messageTagID element upon "SUCCESS"

//RESPONSE FORMAT AND EXAMPLE
<message>
<status>SUCCESS</status>
<msg>Successfully added the thing.</msg>
<error>an error occurred</error>
</message>

*/


function AjaxToggle(url, elementTagID, messageTagID) {

    var http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        return false;
    }

    var link = document.getElementById(elementTagID);
    if(link.getAttribute("state") == '0')
	{
		url = url + link.getAttribute("p0");
	}
	else if(link.getAttribute("state") == '1')
	{
		url = url + link.getAttribute("p1");
	}


    http_request.onreadystatechange = function() { responseHandlerAjaxToggle(http_request, elementTagID, messageTagID); };
    http_request.open('GET', url, true);
    http_request.send(null);

}

function responseHandlerAjaxToggle(http_request, LinkID, MessageID) 
{
	var msg;
	var prevMsg;
	try
	{
		if (http_request.readyState == 4) 
		{
            var link = document.getElementById(LinkID);
			if(MessageID != null)
			{
				msg =  document.getElementById(MessageID);
/*start - close previous alert div */
				try
				{
					prevMsg = document.getElementById('prevMsgDiv');
					
					if(prevMsg == null)
					{
						var prevMsgDiv = document.createElement('div');
						prevMsgDiv.setAttribute('id', 'prevMsgDiv');
						prevMsgDiv.setAttribute('style', 'display:none');
						prevMsgDiv.style.display = 'none';
						prevMsgDiv.innerHtml = MessageID;
						document.getElementsByTagName('body')[0].appendChild(prevMsgDiv);
						
	//					alert('new ' + prevMsgDiv.innerHtml);
					}
					else
					{
	//					alert('before existed ' + prevMsg.innerHtml);
						
						prevMsgDiv = document.getElementById(prevMsg.innerHtml);
						prevMsgDiv.setAttribute('style', 'display:none');
						prevMsgDiv.style.display = 'none';
						prevMsg.innerHtml = MessageID;
						
	//					alert('after existed ' + prevMsg.innerHtml);
					}
				}
				catch(error)
				{
				}	
/*end - close previous alert div */			


			}
			
			if (http_request.status == 200) 
			{
				var xmldoc = http_request.responseXML;
				
				//check for an error tag
				var err = xmldoc.getElementsByTagName('error');
				if(err.length > 0)
				{
					if(msg != null)
					{
					msg.innerHTML = err.item(0).firstChild.data;
					msg.className = 'g_error';
					msg.setAttribute('style', 'display:block');
					msg.style.display = 'block';
					return false;	
					}
				}
				
				var status = xmldoc.getElementsByTagName('status').item(0).firstChild.data;
				if(status == "SUCCESS")
				{
//					alert('State=' + '' + link.getAttribute("state") + ' class=' + link.getAttribute("class"));
					if(link.getAttribute("state") == '0')
					{
						link.innerHTML = link.getAttribute("t1");
						link.className = link.getAttribute("c1");
						link.setAttribute("state", "1");
					}
					else if(link.getAttribute("state") == '1')
					{
						link.innerHTML = link.getAttribute("t0");
						link.className = link.getAttribute("c0");
						link.setAttribute("state", "0");
					}
					
					if(link.getAttribute("imageonly") == '1')
					{
						link.innerHTML = '<img src="http://c.ancestry.com/i/spacer.gif" width="16" height="16" border="0"/>';
					}


					if(msg != null)
					{
						var xmlMsg = xmldoc.getElementsByTagName('msg');
						if(xmlMsg.length > 0)
						{
							msg.innerHTML = xmlMsg.item(0).firstChild.data;
							msg.setAttribute('style', 'display:block');
							msg.style.display = 'block';
							return false;	
						}
					}

				}
				else
				{
					if(msg != null)
					{
						msg.innerHTML = "An Error Occurred...Please Try Again.";
						msg.className = 'g_error';
						msg.setAttribute('style', 'display:block');
						msg.style.display = 'block';
					}
				}

			}
			else 
			{
				if(msg != null)
				{
				msg.innerHTML = "An Error Occurred...Please Try Again.";
				msg.className = 'g_error';
				msg.setAttribute('style', 'display:block');
				msg.style.display = 'block';
				}
			}
		}
	}
	catch (error)
	{
		if(msg != null)
		{
		msg.innerHTML = "An Error Occurred...Please Try Again.";
		msg.className = 'g_error';
		msg.setAttribute('style', 'display:block');
		msg.style.display = 'block';
		}
	}
	
}

