/**
* Visualizza un dato div non visibile come ballon a partire da 
* un elemento del documento che ne ha uno. Se non presente 
* l'attributo ballon_region mette sempre ad est (valori possibili: nord,
* sud, ovest, est, nw, ne, sw, se). Se il secondo argomento della
* funzione e' uguale ad 'hide' allora lo nasconde.
* 
* @param object arg1  L'oggetto dell'elemento che possiede il ballon
* @param string arg2  Eventuale parametro che se impostato ad 'hide' nasconde il ballon
* 
* @author Massimiliano Lombardi <xammax@mac.com>
* 
* @bug Con MSIE 8 Da un errore direttamente nella libreria di jQuery e non viene eseguito
*/
function utility_ballon(arg1, arg2)
{
  var io        = arg1;
  var div       = $('#ballon_' + io.attr('id'));
  
  if(div.attr("id"))
  {
    if(arg2 == 'hide')
    {div.hide();}
    else
    {
      var io_width   = io.width();
      var io_height  = io.height();
      var div_width  = div.width();
      var div_height = div.height();
    
      var marpad = new Array(
        'margin-right', 'margin-left',   'padding-right', 'padding-left', 
        'margin-top',   'margin-bottom', 'padding-top',   'padding-bottom'
      );
      for(x = 0; x < marpad.length; x++)
      {
        if(isNaN(io.css(marpad[x]).replace('px', '')))  { io.css(marpad[x], '0px');  }
        if(isNaN(div.css(marpad[x]).replace('px', ''))) { div.css(marpad[x], '0px'); }
        if(x < 4)
        {
          io_width  += (io.css(marpad[x]).replace('px', '') * 1);
          div_width += (div.css(marpad[x]).replace('px', '') * 1);
        }
        else
        {
          io_height  += (io.css(marpad[x]).replace('px', '') * 1);
          div_height += (div.css(marpad[x]).replace('px', '') * 1);  
        }
      }
      
      var ipos      = io.position();
      var where     = io.attr('ballon_region');
        
      switch(where)
      {
        case 'nw':
          var pos_left = (ipos.left - div_width);
          var pos_top  = (ipos.top  - div_height);
        break;
        case 'nord':
          var pos_left = (ipos.left + (io_width / 2) - (div_width / 2) );
          var pos_top  = (ipos.top  - div_height);
        break;
        case 'ne':
          var pos_left = (ipos.left + io_width);
          var pos_top  = (ipos.top  - div_height);
        break;
        case 'sw':
          var pos_left = (ipos.left - div_width);
          var pos_top  = (ipos.top  + io_height);
        break;
        case 'sud':
          var pos_left = (ipos.left + (io_width / 2) - (div_width / 2) );
          var pos_top  = (ipos.top  + io_height );
        break;
        case 'se':
          var pos_left = (ipos.left + io_width);
          var pos_top  = (ipos.top  + io_height);
        break;
        case 'ovest':
          var pos_left = (ipos.left - div_width);
          var pos_top  = (ipos.top  + (io_height / 2) - (div_height / 2) );
        break;
        default: /* di default ad est */
          var pos_left = (ipos.left + io_width);
          var pos_top  = (ipos.top + (io_height / 2) - (div_height / 2));
      }
      
      div.css('left', pos_left + 'px');
      div.css('top',  pos_top + 'px');
      div.css('zIndex', 500);
      div.css('position', 'absolute');
      // if(navigator.appVersion.match('MSIE')) {div.show();} else {div.fadeIn(500);}
      div.show();
    }
  }  
} /* end funct */<!-- /pages/jquery-utility -->