/**
 * 
 * 
 * @author tam
 */

var logger = LogFactory.getLog("main");

function submitLink(_anchor, _update) {
	
	
	try
	{
		if(!_update)
		{
			// just discard the output? or follow the link?
		}
		if(typeof _update == 'string')
		{
			_update = new Array(_update);
		}
		
		logger.info("URL is: " + _anchor.href);
		
		var xrp = new XMLRPCProvider();
		xrp.onComplete = function(_responseText, _responseXML)
		{
			var d;
			
			if (typeof DOMParser != "undefined")
			{
				d = ((new DOMParser).parseFromString(_responseText, "application/xml"));
				for(var i = 0; i < _update.length; i++)
				{
					logger.info("Replacing element: " + _update[i]);
					var newContent = d.getElementById(_update[i]);
					if(newContent == null)
					{
						logger.warn("No new content element found for id: " + _update[i]);
						continue;
					}
					replaceElement(newContent, _update[i]);
				}
			} 
			else
			{
				var target = document.createElement("div");
				target.innerHTML = _responseText;
				
				for(var i = 0; i < _update.length; i++)
				{
					var newContent = getHTMLById(target, _update[i]);
					if(newContent == null)
					{
						logger.warn("No new content element found for id: " + _update[i]);
						continue;
					}
					replaceElement(newContent, _update[i]);
				}
			}
			
		}
		xrp.get(_anchor.href);
		return false;
	}
	catch(e)
	{
		// if anything goes wrong, just follow the link as usual.
		return true;
	}
}

function submitForm(_form, _update, _submitElement, _callback)
{
	try
	{
		if(!_update)
		{
			// just discard the output? or follow the link?
		}
		if(typeof _update == 'string')
		{
			_update = new Array(_update);
		}
		
		logger.info("ACTION is: " + _form.action);
		
		var xrp = new XMLRPCPost();
		
		xrp.onComplete = function(_responseText, _responseXML)
		{
			var d;
			/*if (typeof DOMParser != "undefined")
			{
				d = ((new DOMParser).parseFromString(_responseText, "text/xml"));
				// alert("Document: " + d);
				// document.getElementById("put").value = _responseText;
				
				for(var i = 0; i < _update.length; i++)
				{
					logger.info("Replacing element: " + _update[i]);
					var newContent = d.getElementById(_update[i]);
					if(newContent == null)
					{
						logger.warn("No new content element found for id: " + _update[i]);
						continue;
					}
					replaceElement(newContent, _update[i]);
				}
			} 
			else
			{*/
				var target = document.createElement("div");
				target.innerHTML = _responseText;
				
				for(var i = 0; i < _update.length; i++)
				{
					var newContent = getHTMLById(target, _update[i]);
					if(newContent == null)
					{
						logger.warn("No new content element found for id: " + _update[i]);
						continue;
					}
					replaceElement(newContent, _update[i]);
				}
			/*}*/
			if(_callback)
			{
				_callback();
			}
		}
		xrp.submit(_form, _submitElement);
		return false;
	}
	catch(e)
	{
		logger.warn("Error submitting form asyn: " + e.message);
		return true;
	}
}

function replaceElement(_newElement, _elementId)
{
	var curContent = document.getElementById(_elementId);
	var par = curContent.parentNode;
	if(document.importNode)
	{
		_newElement = document.importNode(_newElement, true);
	}
	par.replaceChild(_newElement, curContent);
}

function getHTMLById(container, id)
{
	logger.info("Id: " + id + " in container: " + container.nodeName + " with id = " + container.id)
	for(var i = 0; i < container.childNodes.length; i++)
	{
		var child = container.childNodes[i];
		if(child.nodeType == 1)
		{
			if(child.id === id)
			{
				logger.info("Found element");
				return child;
			}
			if(child.childNodes.length > 0)
			{
				var innerChild = getHTMLById(child, id);
				if(innerChild != null)
				{
					return innerChild;
				}
			}
		}
	}
	return null;
}
