// ajax.js: Motoret d'Ajax

function AJAXInteraction(url, callback) {
  var req = init();
  req.onreadystatechange = processRequest;

  function init_orig() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
      
  function init() 
  {
    var objReq;
    try 
    {
      objReq = new XMLHttpRequest(); /* e.g. Firefox */ 
    } 
    catch(e) 
    { 
      try 
      { 
        objReq = new ActiveXObject("Msxml2.XMLHTTP"); /* some versions IE */ 
      } 
      catch (e1) 
      { 
        try 
        { 
          objReq = new ActiveXObject("Microsoft.XMLHTTP"); /* some versions IE */ 
        } 
        catch (e2) 
        { 
          objReq = false; 
          alert("Problemas al crear el objeto de Ajax. ");
        }
      }
    }
    return objReq;
  }
  
  function processRequest () {
    if (req.readyState == 4) {
      if (req.status == 200) {
        if (callback) {
          callback();
        }
      }
    }
  }

  this.doGet = function() {
    req.open("GET", url_ft(url), true);  // async
//    req.open("GET", url_ft(url), false);  // sync
    req.send(null);
  }
  
  this.doGetSync = function() {
    req.open("GET", url_ft(url), false);  // sync
    req.send(null);
  }
  
  // Versión alfa !!! Nota: Això pot espatllar un XML
  this.doPost = function(body) {
    req.open("POST", url, true);
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(body + '&_ft=' + new Date().getTime());
  }
  
  this.getResponseText = function()
  {
    return req.responseText;  
  }
  
  this.getResponseXML = function()
  {
    return req.responseXML;  
  }
}

function url_ft(url)
{
  var urlft;
  if (url.indexOf('?') >= 0)
    urlft = url + '&_ft=' + new Date().getTime();
  else
    urlft = url + '?_ft=' + new Date().getTime();

  return urlft;
}


function getText(id)
{
  var obj = document.getElementById(id);
  var resp;
//  alert(obj.type);
  if (obj.type == "text" || obj.type == "button")
    resp = obj.value;
  else
    resp = obj.innerHTML;
    
  return resp;
}

function setText(id, text)
{
  var obj = document.getElementById(id);
//  alert(obj.type);
  if (obj.type == "text" || obj.type == "button")
    obj.value = text;
  else
    obj.innerHTML = text;
}

function formData2QueryString(formId) {

    var docForm = document.getElementById(formId);
	var strSubmitContent = '';
	var formElem;
	var strLastElemName = '';
	
	for (i = 0; i < docForm.elements.length; i++) {
		
		formElem = docForm.elements[i];
		switch (formElem.type) {
			// Text fields, hidden form elements
			case 'text':
			case 'hidden':
			case 'password':
			case 'textarea':
			case 'select-one':
				strSubmitContent += formElem.name + '=' + escape(formElem.value) + '&'
				break;
				
			// Radio buttons
			case 'radio':
				if (formElem.checked) {
					strSubmitContent += formElem.name + '=' + escape(formElem.value) + '&'
				}
				break;
				
			// Checkboxes
			case 'checkbox':
				if (formElem.checked) {
					// Continuing multiple, same-name checkboxes
					if (formElem.name == strLastElemName) {
						// Strip of end ampersand if there is one
						if (strSubmitContent.lastIndexOf('&') == strSubmitContent.length-1) {
							strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
						}
						// Append value as comma-delimited string
						strSubmitContent += ',' + escape(formElem.value);
					}
					else {
						strSubmitContent += formElem.name + '=' + escape(formElem.value);
					}
					strSubmitContent += '&';
					strLastElemName = formElem.name;
				}
				break;
				
		}
	}
	
	// Remove trailing separator
	strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
	return strSubmitContent;
}

function appendFila(colsDeLaFila)
{
	var tabla = document.getElementById(colsDeLaFila[0]);
	var mytablebody = tabla.getElementsByTagName("tbody").item(0);
    var linea = document.createElement("tr");
	var n = colsDeLaFila.length;
	for (var i = 1; i < n; i++)
	{
		linea.appendChild(colsDeLaFila[i]);
	}
	mytablebody.appendChild(linea);
}

function TD(text)
{
	var col = document.createElement("td");
	var textNode = document.createTextNode(text);
	col.appendChild(textNode);
	return col;
}

function Link(href, text)
{
	var col = document.createElement("td");
	var link = document.createElement("a");
	link.setAttribute("href", href);
	var textNode = document.createTextNode(text);
	link.appendChild(textNode);
	col.appendChild(link);
	return col;
}

document.onkeypress = tecla;

function tecla(evt)
{
  if (evt == null)
     evt = window.event;
	 
  if (evt.ctrlKey)
  {
    if (evt.keyCode == 11 || evt.which == 107)  // keyCode => IEm which => Mozilla
  	{
  		if (v != null)
  			v.close();
  	}		
  }			
}

function verCodigoFuente()
{
  var id = prompt("Entrar id");
//  alert(getText(id));
  prompt("Content:", getText(id));
}

function main_example()
{
  var ai = new AJAXInteraction("processme.jsp", 
           function() 
		   { 
		      alert("Doing Post Process");
		   });
  ai.doGet();
}

