/** Completa le informazioni per il login
 *  
 */
function completeLoginForm(form_name, ac_name, ac_name_sub){
   /* setta la variabile $ac_name_sub per evitare che il login sia requisito dal cookie_crumbler*/
   df=document.forms[form_name];
   ans=eval("df." + ac_name_sub)
   an=eval("df." + ac_name);
   ans.value=an.value;

   /* setta le variabili di controllo javascript e cookie */
   df.js_enabled.value=1;

   cookie="CookieAbilitati=1";
   document.cookie=cookie;
   if (document.cookie.indexOf(cookie)>-1)
      df.cookie_enabled.value=1;
}


/* Mostra un layer nascosto
 *
 */
function show_field(field_name)
{
   var field = eval("document.ids."+field_name+".visibility");
   field='hidden';
}

/* scambia le classi definite in oldclass e newclass
 *
 */
function swapclass(element, oldclass, newclass){
   if (document.getElementById){
     obj=document.getElementById(element);
     cls=obj.className;
     if (cls == oldclass)
       obj.className = newclass;
     else
       obj.className = oldclass;
   }
}


/* aggiunge il costrutto forEach se non presente per gli Array
 *
 */
if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}



/*
 * Crea un nuovo oggetto XMLHTTPRequest
 */

     var XMLHttpFactories = [
        function () {return new XMLHttpRequest()},
        function () {return new ActiveXObject("Msxml2.XMLHTTP")},
        function () {return new ActiveXObject("Msxml3.XMLHTTP")},
        function () {return new ActiveXObject("Microsoft.XMLHTTP")}
     ];

     function createXMLHTTPObject() {
        var xmlhttp = false;
        for (var i=0;i<XMLHttpFactories.length;i++) {
           try {
              xmlhttp = XMLHttpFactories[i]();
           }
           catch (e) {
              continue;
           }
           break;
        }
        return xmlhttp;
     }


/*
 * aggiunge il metodo indexof se non presente
 */

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}


/*
 * effettua invio di dati asincroni
 */
 function controller(url, values, returns)
 {
   var params = "";
   var indexes = new Array();

   for (var item in values){
      params = params.concat((params.length == 0?"":"&"), item, "=", values[item]);
      document.getElementById(item).parentNode.className="field";
      indexes.push(item);
   }

   req = createXMLHTTPObject();
   req.open("POST", url, true);
   req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   req.setRequestHeader("Content-length", params.length);
   req.setRequestHeader("Connection", "close");
   req.onreadystatechange = function () {
     if (req.readyState == 4) {
        if(req.status == 200){
           setErrors(indexes, req.responseText, returns);}
        req = false;
     }
   };
   req.send(params);

 }


/*
 * controlla e imposta quali campi devono apparire come "field error"
 */
 function setErrors(fields, errors, returns){
   var messages = errors.replace(/[^$A-Za-z0-9_,]/,"").split(",");
   var found = false;
   for (var i = 0; i < fields.length; i++){
      if (messages.indexOf(fields[i]) >= 0){
         found = true;
         document.getElementById(fields[i]).parentNode.className='field error';
      }
   }

   if (!found && returns)
      returns();
 }

