
function upload(url, formName) 
{
  if(!document.getElementById) {
    return;
  }

  // specifically handle contactform form
  if (document.getElementById("contactform"))
  {
  document.getElementById("contactform").onsubmit = function() 
  {
    var data = "";
    for (var i=0; i<this.elements.length; i++) {
	  if (this.elements[i].type != 'checkbox' || this.elements[i].checked)
	  {
        data+= this.elements[i].name;
        data+= "=";
        data+= escape(this.elements[i].value);
        data+= "&";
	  }
    }
    return !sendData(data, url, formName);
  };
  }
  else if (document.getElementById("editform"))
  {
  // specifically handle editform form
  document.getElementById("editform").onsubmit = function() 
  {
    var data = "";
    for (var i=0; i<this.elements.length; i++) {
	  if (this.elements[i].type != 'checkbox' || this.elements[i].checked)
	  {
        data+= this.elements[i].name;
        data+= "=";
        data+= escape(this.elements[i].value);
        data+= "&";
	  }
    }
    return !sendExtraData(data, url, formName);
  };
  }
  else
  {
	  return;
  }
}

function prepareForm(formName) {
  if(!document.getElementById) {
    return;
  }
  if(!document.getElementById(formName)) {
    return;
  }
  document.getElementById(formName).onsubmit = function() {
    var data = "";
    for (var i=0; i<this.elements.length; i++) {
      data+= this.elements[i].name;
      data+= "=";
      data+= escape(this.elements[i].value);
      data+= "&";
    }
    return !sendData(data);
  };
}

function sendData(data, url, formName) 
{
  var request = getHTTPObject();
  
  if (request) 
  {
    displayLoading(document.getElementById(formName));
    request.onreadystatechange = function() 
	{
      parseResponse(request);
    };
	
	// send the AJAX request
    request.open( "POST", url, true );
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

	request.send(data);
	
    return true;
  } 
  else 
  {
    return false;
  }
}

function sendExtraData(data, url, formName) 
{
  var request = getHTTPObject();
  
  if (request) 
  {
    displayLoading(document.getElementById(formName));
    request.onreadystatechange = function() 
	{
      parseResponse(request);
    };
    request.open( "POST", url, true );
	
	// prepare the MIME POST data
	var boundaryString = 'capitano';
	var boundary = '--' + boundaryString;
	var requestbody = boundary + '\n' 
	+ 'Content-Disposition: form-data; name="firstName"' + '\n' 
	+ '\n' 
	+ firstName + '\n' 
	+ '\n' 
	+ boundary + '\n' 
	+ 'Content-Disposition: form-data; name="then"; filename="' 
		+ then + '"' + '\n' 
	+ 'Content-Type: application/octet-stream' + '\n' 
	+ '\n'
	+ escape(binary.readBytes(binary.available()))
	+ '\n'
	+ boundary;

	document.getElementById('sizespan').innerHTML = 
		"requestbody.length=" + requestbody.length;	
    
	// send the AJAX request
	request.setRequestHeader("Content-type", "multipart/form-data; \
		boundary=\"" + boundaryString + "\"");
	request.setRequestHeader("Connection", "close");
	request.setRequestHeader("Content-length", requestbody.length);
	request.send(requestbody);	
	
    return true;
  } 
  else 
  {
    return false;
  }
}

function parseResponse(request)
{
  if (request.readyState == 4) 
  {
    if (request.status == 200 || request.status == 304) {
      var container = document.getElementById("container");
      container.innerHTML = request.responseText;
      fadeUpErrors(container);
      prepareForm();
    }
  }
}

function getHTTPObject()
{
  var xhr = false;
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

function displayLoading(element) 
{
  var image = document.createElement("img");
  image.setAttribute("src","../images/progressbar.gif");
  image.setAttribute("alt","Loading...");
  element.appendChild(image);
}

function fadeUp(element,red,green,blue) 
{
  if (element.fade) {
    clearTimeout(element.fade);
  }
  element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
  if (red == 255 && green == 255 && blue == 255) {
    return;
  }
  var newred = red + Math.ceil((255 - red)/10);
  var newgreen = green + Math.ceil((255 - green)/10);
  var newblue = blue + Math.ceil((255 - blue)/10);
  var repeat = function() {
    fadeUp(element,newred,newgreen,newblue)
  };
  element.fade = setTimeout(repeat,100);
}

function fadeUpErrors(element) 
{
  var messages = element.getElementsByTagName("strong");
  for (var i=0; i<messages.length; i++) {
    if (messages[i].className == "error") {
      fadeUp(messages[i],255,153,153);
    }
  }
}