   function growl(message) {
      $.jGrowl(message, { position: 'center', life: 1000 });
   }
   
   function changeLang(lang) {
      $.ajax(
         {type:"POST", url:"/neomweb/ajax/ajaxserver.php", datatype:"xml", data:{rs:"changelang",lang:lang}, success:function(data) { changelang_cb(data);}}
      )
   }
   
   function changelang_cb(data) {
      if(!resolve(data)) {
         growl("Error in changing language!");
      } else {
         document.getElementById("refreshForm").submit();
      }
   }

   /*
   *  la struttura delle risposte é
   *
   *  <response>
   *     <result>
   *        0: ko / 1: ok
   *     </result>
   *     <block>
   *        <blockname1>
   *           block content 1
   *        </blockname1>
   *        ..
   *        ..
   *        <blocknameN>
   *           block content N
   *        </blocknameN>
   *     </block>
   */

/*
   var RESPONSE_TAG = "response";
   var RESULT_TAG = "result";
   var BLOCK_TAG = "block";
   var SCRIPT_TAG = "jscript";
   var RESULT_PATH = RESPONSE_TAG + " > " + RESULT_TAG;
   var BLOCK_PATH = RESPONSE_TAG + " > " + BLOCK_TAG;
   var SCRIPT_PATH = RESPONSE_TAG + " > " + BLOCK_TAG + " > " + SCRIPT_TAG;
   var MESSAGE_TAG = "messageDiv";
   
   function resolve(text) {
      var elem = document.createElement("wrapper");
      elem.innerHTML = text;
      //alert("response " + $(RESPONSE_TAG, elem).html());
      if($(RESPONSE_TAG, elem).length > 0) {
         var result = $(RESULT_TAG, elem);
         //alert("result: " + result.html());
         if(result.length > 0) {
            result = result[0].innerHTML;
            if(result == 1) {
               var block = $(BLOCK_TAG, elem);
               block.children().each( function(i) {
                  if(this.nodeName != SCRIPT_TAG) {
                     //alert("Block.. " + this + ", " + this.nodeName + ": " + this.innerHTML);
                     try {
                        //alert("tag <" + ("#" + this.nodeName.toLowerCase()) + ">prima: " + $("#" + this.nodeName.toLowerCase(), document).html());
                        $("#" + this.nodeName.toLowerCase()).html(this.innerHTML);
                     } catch(e) {alert("ohoh");} // skip
                  }  
               });
               var script = $(SCRIPT_PATH, elem);
               if(script.length > 0) {
                  script.each( function(i) {
                     eval(this.innerHTML);
                  });
               }
            } else {
               //errore
               //alert("ERRORE");
               document.getElementById(MESSAGE_TAG).innerHTML = "Errore nella richiesta";
            }
         }
      } else {
         //errore
         //alert("ERRORE2");
         document.getElementById(MESSAGE_TAG).innerHTML = "Errore tecnico";
      }
   }

*/

var STANDARD_RESPONSE_TAG = "responseTag";
var BLOCK_TAG = "/block";
var RESULT_TAG = "/result";
var SCRIPT_TAG = "jscript";
var MESSAGE_TAG = "messageDiv";

var ajaxMessage;

var scripts;

function resolve(text) {
   ajaxMessage = text; 
   var objDom = new XMLDoc('');
   objDom.loadXML(text);
   var node = null;
   var blocknode = null;
   try {
      blocknode = objDom.selectNode(BLOCK_TAG);
   } catch(exc) {  }
   if(blocknode) {
      var children = blocknode.children;
      scripts = new Array();
      var scriptIdx = 0;
      for(var i = 0; i < children.length; i++) {
         var childNode = children[i];
         
         if(document.getElementById(childNode.tagName)) {
            //log(childNode.tagName);
            if(childNode.tagName == SCRIPT_TAG) {
               //alert("script: " + childNode.getText());
               scripts[scriptIdx++] = childNode.getText();
            } else {
               var foundElem;
               var idx = 0;
               var block = '';
               for(idx = 0; idx < childNode.children.length; idx ++) {
                  block += ((childNode.children[idx].nodeType == 'ELEMENT'
                           ||childNode.children[idx].nodeType == 'TEXT') ?
                                 ((childNode.children[idx].getUnderlyingXMLText() == undefined) ? 
                                       childNode.children[idx].getText() :
                                       childNode.children[idx].getUnderlyingXMLText()) :
                              '');
               }
               
               if(block.replace(/^(\s|\n|\r)*((.|\n|\r)*?)(\s|\n|\r)*$/g,"$2") == '') {
                  //return 0;
               }
               document.getElementById(childNode.tagName).innerHTML = block;   
            }
         }
      }
      for(var i = 0; i < scripts.length; i++) {
         eval(scripts[i]);
      }
      
      var result = objDom.selectNode(RESULT_TAG);
      return result.getText() == 1 ? 1 : 0;
   } else {
      return 0;
   }
}


   function doAjax(id) {
      $.ajax(
         {type:"POST", url:"../ajax/ajaxserver.php", datatype:"xml", data:{rs:id}, success:function(data) { resolve(data); loadingEnd();} }
      )
   }

   function standard_cb() {
      var result = resolve(standard_cb.arguments[0]);
      if(result != 0) {
          //if(document.getElementById("responseTag"))
          document.getElementById("responseTag").innerHTML = "";
      }
      //loadingStop();
      lock = 0;
      return result;
   }
   
   function loadingStart(divs) {
      var layer = $("#loadingLayer").eq(0).clone();
      layer.find("img").css("display", "block");
      document.getElementById("loadingLayer").id = "loadingLayer_src";
      var i = 0;
      for(i = 0; i < divs.length; i ++) {
         var div = divs[i];
         layer = layer.clone();
         var image = layer.children(":first").eq(0);
         var offsetLeft = $("#" + div).offset().left;
         var offsetTop = $("#" + div).offset().top;
	     var offsetWidth = document.getElementById(div).offsetWidth;
	     var offsetHeight = document.getElementById(div).offsetHeight;
	     layer.css("left", offsetLeft);
	     layer.css("top", offsetTop);
	     layer.css("width", offsetWidth);
	     layer.css("height", offsetHeight);
	     image.css("left", (offsetWidth / 2) - 19);
	     image.css("top", (offsetHeight / 2) - 19);
	     $("body").append(layer);
         layer.show();
      }
   }
   
   function loadingStop() {
      
      jQuery.each("#loadingLayer", function() { $("#loadingLayer").remove(); });
      if(document.getElementById("loadingLayer_src"))
          document.getElementById("loadingLayer_src").id = "loadingLayer";
   }

   function checkEmail(id, message) {
      var email = document.getElementById(id);
      var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
      if (!filter.test(email.value)) {
         growl(message);
         email.focus;
         return false;
      }
      return true;
   }

   function isNumber(s)
   { 
       if(s.length == 0) return false;
       
       var i;
       for (i = 0; i < s.length; i++) {
           var c = s.charAt(i);
           if (((c < "0") || (c > "9"))) 
               return false;
       }
       return true;
   }
     
   function blinkMain(menuItem) {
       blink(menuItem, 0);
   }

   function blink(menuItem, inOut) {
       $("li #" + menuItem).fadeTo("normal", inOut == 0 ? 0.2 : 1, function() { blink(menuItem, (inOut == 0 ? 1 : 0)); });
   }

   function blinkItem(id, inOut) {
       $("#" + id).fadeTo("normal", inOut == 0 ? 0.2 : 1, function() { blinkItem(id, (inOut == 0 ? 1 : 0)); });
   }

   function subst(string, substarray) {
      var i = 1;
      for(i = 1; i <= substarray.length; i ++) {
         string = string.replace("%" + i, substarray[i - 1]);
      }
      return string;
   }
   