//
// (c) 2007 Henrik Vaks
// All rights reserved
// 
// Contact Henrik Vaks on henrik@vaks.se for
// licensing issues.

function ajaxUpdate(elementId, address)
{
  var item = $(elementId);
  if(item)
  {
    if(item.tagName == "INPUT" || item.tagName == "SELECT")
    {
      _sendRequest(address, "updateInput", elementId, true);
    }
    else 
    {
      _sendRequest(address, "updateElement", elementId, true);
    }
  }
}

function ajaxCallback(func, address)
{
  _sendRequest(address, "eval", func, true);
}
function ajaxGet(address)
{
  return _sendRequest(address, "", "", false);
}


function _sendRequest(address, action, target, async) 
{
	var req = false;
  if(window.XMLHttpRequest && !(window.ActiveXObject)) 
  {
   	try 
   	{
  	  req = new XMLHttpRequest();
    } 
    catch(e) 
    {
  	  req = false;
    }
  } 
  else if(window.ActiveXObject) 
  {
    try 
    {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch(e) 
    {
      try 
      {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch(e) 
      {
      	req = false;
      }
    }
  }
	if(req) 
	{
	  if(async)
	  {
  		req.onreadystatechange = function()
      {
        // only if req shows "loaded"
        if (req.readyState == 4) 
        {
          // only if "OK"
          if (req.status == 200) 
          {
            var action = req.getResponseHeader("ajaxAction");
            var target = req.getResponseHeader("ajaxTarget")
            if(action == "updateElement")
            {
              var element = $(target);
              if(element)
              {
                element.innerHTML = req.responseText;
              }
              else
              {
                throw("AJAX: unknown element: " + target);
              }
            }
            else if(action == "updateInput")
            {
              var element = $(target);
              if(element)
              {
                var type = element.type.toUpperCase();
                if(type == "CHECKBOX")
                {
                  var regex= /^\s*0/;
                  element.checked = (req.responseText.match(regex) != "0");
                }
                else if(element.tagName == "SELECT")
                {
                  element.selectedIndex = req.responseText;                 
                }
                else
                {
                  element.value = req.responseText;
                }              
              }
              else
              {
                throw("AJAX: unknown element: " + target);
              }
            }         
            else if(action == "eval")
            {
              if(!window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf( "safari" ) < 0)
              {
                var obj = new Object();
                obj.data = req.responseText;              
                obj.eval(target +"(data);");
              }
              else
              {
                eval(target +"(req.responseText);");
              }
            }
            else
            {
              alert("AJAX: action not in server response (missing server include?)");
            }
  
          } 
          else 
          {
//             alert("AJAX: http error: "+ req.statusText);
             throw("AJAX: http error: " + req.statusText);
          }
        }
      };
    }
		req.open("GET", address, async);
		req.setRequestHeader("ajaxAction", action);
    req.setRequestHeader("ajaxTarget", target);
		req.send("");
		if(!async)
		{
		  return req.responseText;
		}
	}
}


function $(id)
{
  return document.getElementById(id);
}
