var divBodyId   = "bodyDiv";
var stylesheetDoc;
var obj = "";

var xmlHttp = createXmlHttpRequestObject();


function createXmlHttpRequestObject ()
{
  var xmlHttp;
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch (e)
  {
    var XmlHttpVersions = new Array ("MSXML2.XMLHTTP.6.0",
                                     "MSXML2.XMLHTTP.5.0",
                                     "MSXML2.XMLHTTP.4.0",
                                     "MSXML2.XMLHTTP.3.0",
                                     "MSXML2.XMLHTTP",
                                     "Microsoft.XMLHTTP");
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
    {
      try
      {
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e)
      {}
    }
  }
  if (!xmlHttp)
    alert("Error al crear el objeto XMLHttpRequest.");
  else
    return xmlHttp;
}

function createMsxml2DOMDocumentObject ()
{
  var msxml2DOM;
  var msxml2DOMDocumentVersions = new Array("Msxml2.DOMDocument.6.0",
                                            "Msxml2.DOMDocument.5.0",
                                            "Msxml2.DOMDocument.4.0");
  for (var i=0; i<msxml2DOMDocumentVersions.length && !msxml2DOM; i++)
  {
    try
    {
      msxml2DOM = new ActiveXObject(msxml2DOMDocumentVersions[i]);
    }
    catch (e)
    {}
  }
  if (!msxml2DOM)
    alert("Por favor actualice su versión de MSXML desde:\n" +
          "http://msdn.microsoft.com/XML/XMLDownloads/default.aspx");
  else
    return msxml2DOM;
}

function loadPage (page)
{
  whereami = page; // -- for control
  var bodyDiv = document.getElementById(divBodyId);
  bodyDiv.innerHTML = loading + "<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />";
  if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)) {
    var query = page+lang+".php";
    xmlHttp.open("GET", query, true);
    xmlHttp.onreadystatechange = handlePageLoad;
    xmlHttp.send(null);
  }
}

function handlePageLoad ()
{
  if (xmlHttp.readyState == 4)
  {
    if (xmlHttp.status == 200)
    {
      response = xmlHttp.responseText;
      if (response.indexOf("ERRNO") >= 0
          || response.indexOf("error") >= 0
          || response.length == 0) {
        alert(response.length == 0 ? "Error del servidor." : response);
        return;
      }
      /*xmlResponse = xmlHttp.responseXML;*/
      if (window.XMLHttpRequest)
      {
        var bodyDiv = document.getElementById(divBodyId);
        bodyDiv.innerHTML = response;
      }
      else
        if (window.ActiveXObject)
        {
          var bodyDiv = document.getElementById(divBodyId);
          bodyDiv.innerHTML = response;
        }
    }
    else
    {
      alert("Error al leer la respuesta del servidor.")
    }
  }
}

function initialize ()
{
  if(window.XMLHttpRequest && window.XSLTProcessor && window.DOMParser)
  {
    loadPage('inicio');
    return;
  }
  if (window.ActiveXObject && createMsxml2DOMDocumentObject())
  {
    loadPage('inicio');
    return;
  }
  alert("Su explorador no soporta la funcionalidad necesaria.\n" +
        "Use IE6+ o FF2+");
}

// the function handles the validation for any form field
function submitEmail(o) {
  obj = o;
  // only continue if xmlHttp isn't void
  if (xmlHttp) {
    // if we received non-null parameters, we add them to cache in the
    // form of the query string to be sent to the server for validation
    if (true) {
      // Waiting message.
      document.getElementById("emailMsgDiv").innerHTML=lang==""?"Espere mientras se env&iacute;a su correo.":"Wait while your email is sent.";
      // encode values for safely adding them to an HTTP request query string
      var to = document.forms[0]["to"].value;
      var fromName = document.forms[0]["fromName"].value;
      var from = document.forms[0]["from"].value;
      var company = document.forms[0]["company"].value;
      var phone = document.forms[0]["phone"].value;
      var message = document.forms[0]["message"].value;

      if ( failValidation(from, fromName, company, message) ) return -1;

      to = encodeURIComponent(to);
      fromName = encodeURIComponent(fromName);
      from = encodeURIComponent(from);
      company = encodeURIComponent(company);
      phone = encodeURIComponent(phone);
      message = encodeURIComponent(message);
      // generate the query
      query = "" +
        "lang=" + lang + "&" +
        "to=" + to + "&" +
        "fromName=" + fromName + "&" +
        "from=" + from + "&" +
        "company=" + company + "&" +
        "phone=" + phone + "&" +
        "message=" + message;
    }
    // try to connect to the server
    try {
      // continue only if the XMLHttpRequest object isn't busy
      // and the cache is not empty
      if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
          && query != "") {
        // hardcoded
        //serverAddress="contacto";
        // make a server request to validate the extracted data
        xmlHttp.open("POST", "email.php", true);
        xmlHttp.setRequestHeader("Content-Type",
                                 "application/x-www-form-urlencoded");
        xmlHttp.onreadystatechange = handleGettingPageContent;
        xmlHttp.send(query);
        //prevent double send
        obj.onClick="";
        obj.onMouseOver="";
        obj.onMouseOut="";
        obj.id="com";
      }
    } catch (e) {
      // display an error when failing to connect to the server
      displayError(e.toString());
    }
  }
}

// function called when the state of the HTTP request changes
function handleGettingPageContent() {
 // when readyState is 4, we are ready to read the server response
 if (xmlHttp.readyState == 4) {
  // continue only if HTTP status is "OK"
  if (xmlHttp.status == 200) {
   try {
    // do something with the response from the server
    getPageContent();
   } catch(e) {
    // display error message
    displayError(e.toString());
   }
  } else {
   // display error message
   displayError(xmlHttp.statusText);
  }
 }
}

// handles the response received from the server
function getPageContent() {
 // retrieve the server's response
 var response = xmlHttp.responseText;
 // document.getElementById("error").innerHTML="<textarea cols=80 rows=40>"+response+"</textarea>";
 // server error?
 if (response.indexOf("ERRNO") >= 0
     || response.indexOf("error") >= 0
     || response.length == 0)
  throw(response.length == 0 ? "Server error." : response);
 // display the message
 display(response);
 // restart sequence
 // setTimeout("process();", updateInterval * 1000);
}

// function that displays an error message
function displayError($message) {
 // display error message, with more technical details if debugMode is true
 display("Error retrieving the news message! Will retry in " +
         errorRetryInterval + " seconds." + 
         (debugMode ? "<br/>" + $message : ""));
 // restart sequence
 // setTimeout("process();", errorRetryInterval * 1000);
}

function display($message) {
  // alert(serverAddress);
  myDiv = document.getElementById("emailMsgDiv");
  // display message
  myDiv.innerHTML = $message;
  // empty message
  document.getElementById("to").value="";
  document.getElementById("message").value=lang==""?"mensaje":"message";
  document.getElementById("fromName").value="";
  document.getElementById("from").value="";
  document.getElementById("company").value="";
  document.getElementById("phone").value="";
  obj.onClick="submitEmail(this);";  
  obj.onMouseOver="swapLink(this);";
  obj.onMouseOut="swapLink(this);";
  obj.id="link";
}

function isEmail (s)
{
  var at = s.indexOf("@");
  var dot = s.lastIndexOf(".");
  var itis = at>0 ? true : false;

  itis = itis && dot>(at+1) ? true : false;

  return !itis;
}

function failValidation(f,n,c,m)
{
  m = m=="mensaje" || m=="message" || m=="Escriba su mensaje." || m=="Write your message." ? "" : m;

  var reqFrom = isEmail(f);
  var reqFromName = n=="" || m=="Escriba su nombre." || m=="Write your name." ? true : false;
  var reqCompany = c=="" || m=="Su empresa." || m=="Your company." ? true : false;
  var reqMessage = m=="" ? true : false;
  var fail=false;

  if (reqFrom)
  {
    document.getElementById("from").value = lang=="" ? "Escriba su correo." : "Write your email.";
    fail=true;
  }

  if (reqFromName)
  {
    document.getElementById("fromName").value = lang=="" ? "Escriba su nombre." : "Write your name.";
    fail=true;
  }

  if (reqCompany)
  {
    document.getElementById("company").value = lang=="" ? "Su empresa." : "Your company.";
    fail=true;
  }

  if (reqMessage)
  {
    document.getElementById("message").value = lang=="" ? "Escriba su mensaje." : "Write your message.";
    fail=true;
  }

  if (fail)
  {
    myDiv = document.getElementById("emailMsgDiv");
    myDiv.innerHTML = lang=="" ? "Cont&aacute;ctese con nosotros." : "Contact us.";
  }

  return fail;
}