  // Create associative array of languages
  // id   = unique language identifier
  // code = language code [RFC1766]
  // name = country name

  // Create Kraun Module
  var formatemp = {
    name: 'Forma.Temp Engine Module 1.0',

    isNumber: function(strinput) {
      return (typeof parseInt(strinput) == 'number') && isFinite(strinput) && (strinput !== '');
    },

    getQueryString: function(strinput) {
      var querystring = window.location.search.substring(1);
      var elements    = querystring.split("&");

      for (i=0; i<elements.length; i++) {
        element = elements[i].split("=");
        if (element[0] == strinput) {
          return element[1];
        }
      }
    },

    fixHTMLObjects: function() {
      $A(document.getElementsByTagName('object')).each(function(element, index) {
        element.outerHTML = element.outerHTML; 
      });
    }
  };

  var arrLanguages = new Array();
  arrLanguages[0] = '{ "id": "0", "code": "it", "name": "Italiano" }'.evalJSON();
  arrLanguages[1] = '{ "id": "1", "code": "en", "name": "English" }'.evalJSON();

  // Create associative array of menus
  var arrMenus = new Array()

  // Creating 2D arrays of languages menu
  for (i=0; i < arrLanguages.size(); i++) {
    arrMenus[i]=new Array()
  }

  arrMenus[0][1] = ['Home','Home Page','/'];

  arrMenus[1][1] = ['Home','Home Page','/'];

  // Set language object
  objLanguage = LanguageSet(formatemp.getQueryString("language"));

  Event.observe(window, 'load', function() {
    init();
  });

  function init() {
    // Show language elements
    $$('[class="language"][lang="' + objLanguage.code + '"]').each(function (element) {
      element.setStyle({
        visibility: 'visible',
        display: 'block'
      });
    });
  }

  function LanguageSet(code) {
    // Verify language code
    if(code == null || code.blank()) {
      // Set default language
      return {"id":arrLanguages[0].id, "code":arrLanguages[0].code, "name":arrLanguages[0].name};
    } else {
      for (var i = 0; i < arrLanguages.length; ++i) {
        if (arrLanguages[i].code == code.toLowerCase()) {
          return {"id":arrLanguages[i].id, "code":arrLanguages[i].code, "name":arrLanguages[i].name};
        }
      }
    }
    // No language matchs, set default language
    return {"id":arrLanguages[0].id, "code":arrLanguages[0].code, "name":arrLanguages[0].name};
  }

  function LanguageChange(code) {
    var location = window.location.toString();

    // Verify if window location includes querystring language option
    if (location.match('language=[a-z]{2}')) 
    {
      // Replace querystring language value
      location = location.sub('language=[a-z]{2}', 'language=' + code);
    } else {
      // Append querystring language value
      if (location.indexOf('?') == -1) {
        location += '?language=' + code;
      } else {
        location += '&language=' + code;
      }
    }
    // Refresh client browser
    document.location.href = location;
  }

  function showAjaxLoader(element) {
    element = $(element);

    var loader = document.createElement('span');
    loader.setAttribute('name', 'loader');
    loader.className = 'loader';
    loader.innerHTML += "<img src=\"/img/commons/ajax_loader.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\" title=\"Loading...\" style=\"margin-right:5px;\" />";
    loader.innerHTML += "Caricamento in corso...";
    $(element).appendChild(loader);
  }

  function removeAjaxLoader(element) {
    element = $(element);

    // Remove the ajax loader in the element container
    if (element.down('span.loader')) {
      element.down('span.loader').remove();
    }
  }

  function showAjaxError(element, message) {
    element = $(element);

    // Remove ajax loader
    removeAjaxLoader(element);

   // Set the default error message if omitted
   if (message === undefined) {
      message = 'Errore elaborazione dati, ricaricare la pagina.';
   }
   // Create and append the age reload link
   var a = new Element('a', { 'href': 'javascript:document.location.reload()', 'style': 'color: #E00000' }).update(message.escapeHTML());
   new Insertion.Bottom(element, a);
  }

  // Register global responders that will occur on all AJAX requests
  Ajax.Responders.register({
    onCreate: function(request) {
      request['AjaxTimeoutId'+Ajax.activeRequestCount] = window.setTimeout(
        function() {
          // If we have hit the timeout and the AJAX request is active, abort it and let the user know
          if (callInProgress(request.transport)) {
            request.transport.abort();
            // Run the onFailure method if we set one up when creating the AJAX object
            if (request.options['onFailure']) {
              request.options['onFailure'](request.transport, request.json);
            }
          }
        },
        20000 // 10000 = 10 seconds
      );
      // Increment ajax requests counter
      Ajax.activeRequestCount++;
    },
    onComplete: function(request) {
      // Clear the timeout, the request completed ok
      window.clearTimeout(request['AjaxTimeoutId'+Ajax.activeRequestCount]);
      // Decrement ajax requests counter
      Ajax.activeRequestCount--;
    }
  });

  function callInProgress (xmlhttp) {
    switch (xmlhttp.readyState) {
      case 1: case 2: case 3:
        return true;
        break;
      // Case 4 and 0
      default:
        return false;
      break;
    }
  }

